| |
| |
| |
|
|
| from datasets import load_dataset, concatenate_datasets |
| from peft import LoraConfig |
| from trl import SFTTrainer, SFTConfig |
| import trackio |
|
|
| print("Loading datasets...") |
|
|
| |
| ds1 = load_dataset( |
| "open-r1/codeforces-cots", |
| "solutions_w_editorials_py_decontaminated", |
| split="train" |
| ) |
| ds1 = ds1.select_columns(["messages"]) |
| print(f"Codeforces: {len(ds1)} examples") |
|
|
| |
| ds2 = load_dataset("smcleod/golang-coder", split="train") |
| ds2 = ds2.select_columns(["messages"]) |
| print(f"Golang: {len(ds2)} examples") |
|
|
| |
| ds3_raw = load_dataset("kevind13/vuejs-nuxt-tailwind-codellama", split="train") |
| |
| def text_to_messages(example): |
| return {"messages": [{"role": "user", "content": "Continue the code."}, {"role": "assistant", "content": example["text"]}]} |
| ds3 = ds3_raw.map(text_to_messages, remove_columns=ds3_raw.column_names) |
| print(f"Vue/Nuxt/Tailwind: {len(ds3)} examples") |
|
|
| |
| ds4 = load_dataset("cfahlgren1/react-code-instructions", split="train") |
| ds4 = ds4.select_columns(["messages"]) |
| print(f"React: {len(ds4)} examples") |
|
|
| |
| combined = concatenate_datasets([ds1, ds2, ds3, ds4]) |
| combined = combined.shuffle(seed=42) |
| print(f"Combined dataset: {len(combined)} examples") |
|
|
| |
| dataset_split = combined.train_test_split(test_size=0.05, seed=42) |
| print(f"Train: {len(dataset_split['train'])}, Eval: {len(dataset_split['test'])}") |
|
|
| print("Starting training...") |
|
|
| trainer = SFTTrainer( |
| model="Qwen/Qwen3-0.6B", |
| train_dataset=dataset_split["train"], |
| eval_dataset=dataset_split["test"], |
| peft_config=LoraConfig( |
| r=16, |
| lora_alpha=32, |
| lora_dropout=0.05, |
| target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], |
| bias="none", |
| task_type="CAUSAL_LM", |
| ), |
| args=SFTConfig( |
| output_dir="qwen3-0.6b-multicode", |
| push_to_hub=True, |
| hub_model_id="chaddy81/qwen3-0.6b-multicode-sft", |
| hub_private_repo=False, |
| num_train_epochs=1, |
| per_device_train_batch_size=2, |
| per_device_eval_batch_size=2, |
| gradient_accumulation_steps=8, |
| gradient_checkpointing=True, |
| learning_rate=2e-4, |
| lr_scheduler_type="cosine", |
| warmup_ratio=0.05, |
| logging_steps=10, |
| save_strategy="steps", |
| save_steps=500, |
| eval_strategy="steps", |
| eval_steps=500, |
| hub_strategy="every_save", |
| bf16=True, |
| report_to="trackio", |
| project="qwen3-multicode", |
| run_name="qwen3-0.6b-sft-multicode", |
| ) |
| ) |
|
|
| trainer.train() |
| trainer.push_to_hub() |
| print("Training complete! Model pushed to Hub.") |
|
|