ViuAI commited on
Commit
2012e77
·
verified ·
1 Parent(s): ff9b7bf

Upload 2 files

Browse files
Files changed (2) hide show
  1. code/model.py +8 -4
  2. code/train.py +43 -15
code/model.py CHANGED
@@ -24,10 +24,14 @@ class RMSNorm(nn.Module):
24
 
25
  def forward(self, x: torch.Tensor) -> torch.Tensor:
26
  # T4 fp16 me stable rakhne ke liye float32 me norm
27
- # Original se same logic, bas efficient
28
- return F.rms_norm(x.float(), (x.shape[-1],), self.weight.float(), self.eps).to(x.dtype)
29
- # Fallback agar F.rms_norm na ho:
30
- # norm_x = x.float() * torch.rsqrt(x.float().pow(2).mean(-1, keepdim=True) + self.eps)
 
 
 
 
31
  # return (norm_x * self.weight.float()).to(x.dtype)
32
 
33
  class ResonanceLayerKaggle(nn.Module):
 
24
 
25
  def forward(self, x: torch.Tensor) -> torch.Tensor:
26
  # T4 fp16 me stable rakhne ke liye float32 me norm
27
+ try:
28
+ # PyTorch 2.4+ me available
29
+ if hasattr(F, 'rms_norm'):
30
+ return F.rms_norm(x.float(), (x.shape[-1],), self.weight.float(), self.eps).to(x.dtype)
31
+ except Exception:
32
+ pass
33
+ norm_x = x.float() * torch.rsqrt(x.float().pow(2).mean(-1, keepdim=True) + self.eps)
34
+ return (norm_x * self.weight.float()).to(x.dtype)
35
  # return (norm_x * self.weight.float()).to(x.dtype)
36
 
37
  class ResonanceLayerKaggle(nn.Module):
code/train.py CHANGED
@@ -71,27 +71,34 @@ def load_tokenizer_robust(hf_token: str, model_repo: str, subfolder: str, is_mai
71
  for fast in [True, False]:
72
  for p_str in local_candidates:
73
  p = Path(p_str)
74
- if (p / "tokenizer.json").exists() or (p / "vocab.json").exists():
75
  try:
76
  tok = AutoTokenizer.from_pretrained(str(p), local_files_only=True, use_fast=fast, trust_remote_code=True)
77
  if is_main: logger.info(f"Loaded tokenizer from {p} fast={fast}")
78
  return tok
79
  except Exception as e:
80
  if is_main: logger.warning(f"Local tokenizer {p} fast={fast} failed: {e}")
81
- if "sentencepiece" in str(e).lower() or "tiktoken" in str(e).lower():
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  continue
83
- # HF se try
84
- for attempt_subfolder in [subfolder, None]:
85
- try:
86
- if attempt_subfolder:
87
- tok = AutoTokenizer.from_pretrained(model_repo, subfolder=attempt_subfolder, token=hf_token, use_fast=fast, trust_remote_code=True)
88
- else:
89
- tok = AutoTokenizer.from_pretrained(model_repo, token=hf_token, use_fast=fast, trust_remote_code=True)
90
- if is_main: logger.info(f"Loaded tokenizer from HF {model_repo} subfolder={attempt_subfolder} fast={fast}")
91
- return tok
92
- except Exception as e:
93
- if is_main: logger.warning(f"HF tokenizer try failed fast={fast} subfolder={attempt_subfolder}: {e}")
94
- continue
95
 
96
  if is_main:
97
  logger.warning("Tokenizer failed, using dummy vocab 64000")
@@ -253,7 +260,28 @@ def main():
253
  if is_main:
254
  logger.info(f"Using vocab_size={vocab_size}, ctx_len={args.ctx_len}, device={device}, is_ddp={is_ddp}")
255
 
256
- from model_fixed_T4 import ViuResonance100M, ModelConfig
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
  config = ModelConfig(vocab_size=vocab_size, chunk_size=256) # T4 ke liye 256
258
  unwrapped_model = ViuResonance100M(config).to(device)
259
 
 
71
  for fast in [True, False]:
72
  for p_str in local_candidates:
73
  p = Path(p_str)
74
+ if (p / "tokenizer.json").exists() or (p / "vocab.json").exists() or (p / "tokenizer.model").exists():
75
  try:
76
  tok = AutoTokenizer.from_pretrained(str(p), local_files_only=True, use_fast=fast, trust_remote_code=True)
77
  if is_main: logger.info(f"Loaded tokenizer from {p} fast={fast}")
78
  return tok
79
  except Exception as e:
80
  if is_main: logger.warning(f"Local tokenizer {p} fast={fast} failed: {e}")
81
+ continue
82
+
83
+ # HF se try - pehle ViuRec tokenizer subfolder, phir alag tokenizer repo
84
+ hf_repos_to_try = [model_repo, "ViuAI/viuai-500m-tokenizer", "ViuAI/ViuRec"]
85
+ for repo_try in hf_repos_to_try:
86
+ for attempt_subfolder in [subfolder, None]:
87
+ try:
88
+ if attempt_subfolder:
89
+ tok = AutoTokenizer.from_pretrained(repo_try, subfolder=attempt_subfolder, token=hf_token, use_fast=fast, trust_remote_code=True)
90
+ else:
91
+ tok = AutoTokenizer.from_pretrained(repo_try, token=hf_token, use_fast=fast, trust_remote_code=True)
92
+ if is_main: logger.info(f"Loaded tokenizer from HF {repo_try} subfolder={attempt_subfolder} fast={fast}")
93
+ return tok
94
+ except Exception as e:
95
+ err = str(e).lower()
96
+ if "sentencepiece" in err or "tiktoken" in err or "protobuf" in err:
97
+ if is_main: logger.warning(f"Tokenizer needs sentencepiece/tiktoken/protobuf: {e}")
98
+ # fast=False pe dobara try karo
99
  continue
100
+ if is_main: logger.debug(f"HF tokenizer try failed {repo_try} fast={fast} subfolder={attempt_subfolder}: {e}")
101
+ continue
 
 
 
 
 
 
 
 
 
 
102
 
103
  if is_main:
104
  logger.warning("Tokenizer failed, using dummy vocab 64000")
 
260
  if is_main:
261
  logger.info(f"Using vocab_size={vocab_size}, ctx_len={args.ctx_len}, device={device}, is_ddp={is_ddp}")
262
 
263
+ # FIX: Dono naam support karo - model.py ya model_fixed_T4.py
264
+ try:
265
+ from model_fixed_T4 import ViuResonance100M, ModelConfig
266
+ except ModuleNotFoundError:
267
+ try:
268
+ from model import ViuResonance100M, ModelConfig
269
+ except ModuleNotFoundError:
270
+ # Kaggle me file /kaggle/working/code/model.py ho sakti hai
271
+ import importlib.util, sys
272
+ for cand in ["./model_fixed_T4.py", "./model.py", "/kaggle/working/code/model_fixed_T4.py", "/kaggle/working/code/model.py"]:
273
+ p = Path(cand)
274
+ if p.exists():
275
+ spec = importlib.util.spec_from_file_location("model", str(p))
276
+ mod = importlib.util.module_from_spec(spec)
277
+ sys.modules["model"] = mod
278
+ spec.loader.exec_module(mod)
279
+ ViuResonance100M = mod.ViuResonance100M
280
+ ModelConfig = mod.ModelConfig
281
+ break
282
+ else:
283
+ raise ModuleNotFoundError("model.py / model_fixed_T4.py nahi mila - dono files same folder me rakho")
284
+
285
  config = ModelConfig(vocab_size=vocab_size, chunk_size=256) # T4 ke liye 256
286
  unwrapped_model = ViuResonance100M(config).to(device)
287