arach commited on
Commit
44c819f
·
1 Parent(s): 7f4e54d

🐛 fix training cell: manual ChatML format, list return for Unsloth SFTTrainer

Browse files
notebooks/qwen35-2b-bash-finetune.ipynb CHANGED
@@ -174,41 +174,7 @@
174
  "execution_count": null,
175
  "metadata": {},
176
  "outputs": [],
177
- "source": [
178
- "from trl import SFTTrainer, SFTConfig\n",
179
- "\n",
180
- "trainer = SFTTrainer(\n",
181
- " model=model,\n",
182
- " tokenizer=tokenizer,\n",
183
- " train_dataset=train_dataset,\n",
184
- " eval_dataset=val_dataset,\n",
185
- " args=SFTConfig(\n",
186
- " max_seq_length=max_seq_length,\n",
187
- " per_device_train_batch_size=4,\n",
188
- " gradient_accumulation_steps=4,\n",
189
- " warmup_steps=20,\n",
190
- " num_train_epochs=3,\n",
191
- " logging_steps=25,\n",
192
- " eval_strategy=\"steps\",\n",
193
- " eval_steps=200,\n",
194
- " save_steps=200,\n",
195
- " save_total_limit=3,\n",
196
- " load_best_model_at_end=True,\n",
197
- " metric_for_best_model=\"eval_loss\",\n",
198
- " learning_rate=1e-4,\n",
199
- " optim=\"adamw_8bit\",\n",
200
- " weight_decay=0.01,\n",
201
- " lr_scheduler_type=\"cosine\",\n",
202
- " seed=3407,\n",
203
- " output_dir=\"outputs_qwen35_2b\",\n",
204
- " dataset_text_field=\"text\",\n",
205
- " ),\n",
206
- ")\n",
207
- "\n",
208
- "trainer_stats = trainer.train()\n",
209
- "print(f\"\\nTraining time: {trainer_stats.metrics['train_runtime']:.0f}s\")\n",
210
- "print(f\"Peak memory: {torch.cuda.max_memory_allocated() / 1e9:.2f} GB\")"
211
- ]
212
  },
213
  {
214
  "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 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",