💾 auto-save adapter immediately after training
Browse files
notebooks/qwen35-2b-bash-finetune.ipynb
CHANGED
|
@@ -174,7 +174,7 @@
|
|
| 174 |
"execution_count": null,
|
| 175 |
"metadata": {},
|
| 176 |
"outputs": [],
|
| 177 |
-
"source": "from trl import SFTTrainer, SFTConfig\n\ndef format_messages(example):\n msgs = example[\"messages\"]\n parts = []\n for msg in msgs:\n if isinstance(msg, dict):\n role, content = msg[\"role\"], msg[\"content\"]\n else:\n role, content = msg[0], msg[1]\n parts.append(f\"<|im_start|>{role}\\n{content}<|im_end|>\")\n return [\"\\n\".join(parts)]\n\ntrainer = SFTTrainer(\n model=model,\n tokenizer=tokenizer,\n train_dataset=train_dataset,\n eval_dataset=val_dataset,\n formatting_func=format_messages,\n args=SFTConfig(\n max_seq_length=max_seq_length,\n per_device_train_batch_size=4,\n gradient_accumulation_steps=4,\n warmup_steps=20,\n num_train_epochs=3,\n logging_steps=25,\n eval_strategy=\"steps\",\n eval_steps=200,\n save_steps=200,\n save_total_limit=3,\n load_best_model_at_end=True,\n metric_for_best_model=\"eval_loss\",\n learning_rate=1e-4,\n optim=\"adamw_8bit\",\n weight_decay=0.01,\n lr_scheduler_type=\"cosine\",\n seed=3407,\n output_dir=\"outputs_qwen35_2b\",\n ),\n)\n\ntrainer_stats = trainer.train()\nprint(f\"\\nTraining time: {trainer_stats.metrics['train_runtime']:.0f}s\")\nprint(f\"Peak memory: {torch.cuda.max_memory_allocated() / 1e9:.2f} GB\")"
|
| 178 |
},
|
| 179 |
{
|
| 180 |
"cell_type": "markdown",
|
|
|
|
| 174 |
"execution_count": null,
|
| 175 |
"metadata": {},
|
| 176 |
"outputs": [],
|
| 177 |
+
"source": "from trl import SFTTrainer, SFTConfig\n\ndef format_messages(example):\n msgs = example[\"messages\"]\n parts = []\n for msg in msgs:\n if isinstance(msg, dict):\n role, content = msg[\"role\"], msg[\"content\"]\n else:\n role, content = msg[0], msg[1]\n if role == \"assistant\":\n parts.append(f\"<|im_start|>assistant\\n<think>\\n</think>\\n{content}<|im_end|>\")\n else:\n parts.append(f\"<|im_start|>{role}\\n{content}<|im_end|>\")\n return [\"\\n\".join(parts)]\n\ntrainer = SFTTrainer(\n model=model,\n tokenizer=tokenizer,\n train_dataset=train_dataset,\n eval_dataset=val_dataset,\n formatting_func=format_messages,\n args=SFTConfig(\n max_seq_length=max_seq_length,\n per_device_train_batch_size=4,\n gradient_accumulation_steps=4,\n warmup_steps=20,\n num_train_epochs=3,\n logging_steps=25,\n eval_strategy=\"steps\",\n eval_steps=200,\n save_steps=200,\n save_total_limit=3,\n load_best_model_at_end=True,\n metric_for_best_model=\"eval_loss\",\n learning_rate=1e-4,\n optim=\"adamw_8bit\",\n weight_decay=0.01,\n lr_scheduler_type=\"cosine\",\n seed=3407,\n output_dir=\"outputs_qwen35_2b\",\n ),\n)\n\ntrainer_stats = trainer.train()\nprint(f\"\\nTraining time: {trainer_stats.metrics['train_runtime']:.0f}s\")\nprint(f\"Peak memory: {torch.cuda.max_memory_allocated() / 1e9:.2f} GB\")\n\n# Auto-save adapter immediately after training\nmodel.save_pretrained(\"qwen35-2b-bash-v1\")\ntokenizer.save_pretrained(\"qwen35-2b-bash-v1\")\nprint(\"Adapter saved to qwen35-2b-bash-v1/\")"
|
| 178 |
},
|
| 179 |
{
|
| 180 |
"cell_type": "markdown",
|