Upload 2 files
Browse files- code/model.py +8 -4
- 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 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
continue
|
| 83 |
-
|
| 84 |
-
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
|