Use SmolLM tokenizer by default and validate vocab
Browse files- train_2b.py +17 -1
train_2b.py
CHANGED
|
@@ -119,6 +119,21 @@ _LOCAL_SNAPSHOT_CACHE = {}
|
|
| 119 |
_LOCAL_DATA_SUFFIXES = {".parquet", ".jsonl", ".json"}
|
| 120 |
|
| 121 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
def _resolve_local_dataset_path(dataset_name):
|
| 123 |
if os.path.isfile(dataset_name) or os.path.isdir(dataset_name):
|
| 124 |
return dataset_name
|
|
@@ -788,7 +803,7 @@ def main():
|
|
| 788 |
parser.add_argument("--batch_size", type=int, default=8)
|
| 789 |
parser.add_argument("--device", type=str, default="cuda")
|
| 790 |
parser.add_argument("--save_dir", type=str, default="results")
|
| 791 |
-
parser.add_argument("--tokenizer", type=str, default="
|
| 792 |
parser.add_argument("--data", type=str, default=None)
|
| 793 |
parser.add_argument("--model-preset", choices=sorted(MODEL_PRESETS.keys()), default="dev",
|
| 794 |
help="Architecture preset to use")
|
|
@@ -819,6 +834,7 @@ def main():
|
|
| 819 |
preset = MODEL_PRESETS[args.model_preset]
|
| 820 |
config = PCSHOConfig(**preset["config"])
|
| 821 |
msa_config = MSAConfig(**preset["msa"])
|
|
|
|
| 822 |
|
| 823 |
save_root = args.save_dir if os.path.isabs(args.save_dir) else os.path.join(os.getcwd(), args.save_dir)
|
| 824 |
free_bytes = shutil.disk_usage(os.path.dirname(save_root) or os.getcwd()).free
|
|
|
|
| 119 |
_LOCAL_DATA_SUFFIXES = {".parquet", ".jsonl", ".json"}
|
| 120 |
|
| 121 |
|
| 122 |
+
def _validate_tokenizer_compatibility(config, tokenizer_name: str) -> None:
|
| 123 |
+
from transformers import AutoTokenizer
|
| 124 |
+
|
| 125 |
+
tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)
|
| 126 |
+
base_vocab_size = tokenizer.vocab_size
|
| 127 |
+
supported_base_vocab = config.vocab_size - 1
|
| 128 |
+
if base_vocab_size > supported_base_vocab:
|
| 129 |
+
raise SystemExit(
|
| 130 |
+
f"Tokenizer '{tokenizer_name}' has vocab_size={base_vocab_size}, "
|
| 131 |
+
f"but this preset only supports up to {supported_base_vocab} base tokens "
|
| 132 |
+
f"(config.vocab_size={config.vocab_size}, mask_token_id={config.mask_token_id}). "
|
| 133 |
+
"Use a compatible tokenizer such as 'HuggingFaceTB/SmolLM2-1.7B' or increase the model vocab."
|
| 134 |
+
)
|
| 135 |
+
|
| 136 |
+
|
| 137 |
def _resolve_local_dataset_path(dataset_name):
|
| 138 |
if os.path.isfile(dataset_name) or os.path.isdir(dataset_name):
|
| 139 |
return dataset_name
|
|
|
|
| 803 |
parser.add_argument("--batch_size", type=int, default=8)
|
| 804 |
parser.add_argument("--device", type=str, default="cuda")
|
| 805 |
parser.add_argument("--save_dir", type=str, default="results")
|
| 806 |
+
parser.add_argument("--tokenizer", type=str, default="HuggingFaceTB/SmolLM2-1.7B")
|
| 807 |
parser.add_argument("--data", type=str, default=None)
|
| 808 |
parser.add_argument("--model-preset", choices=sorted(MODEL_PRESETS.keys()), default="dev",
|
| 809 |
help="Architecture preset to use")
|
|
|
|
| 834 |
preset = MODEL_PRESETS[args.model_preset]
|
| 835 |
config = PCSHOConfig(**preset["config"])
|
| 836 |
msa_config = MSAConfig(**preset["msa"])
|
| 837 |
+
_validate_tokenizer_compatibility(config, args.tokenizer)
|
| 838 |
|
| 839 |
save_root = args.save_dir if os.path.isabs(args.save_dir) else os.path.join(os.getcwd(), args.save_dir)
|
| 840 |
free_bytes = shutil.disk_usage(os.path.dirname(save_root) or os.getcwd()).free
|