Download train_qwen3_multidata.py from chaddy81/training-scripts: direct link, hf CLI and curl.
- Browser
- Download file 3.05 kB
-
https://huggingface.co/chaddy81/training-scripts/resolve/main/train_qwen3_multidata.py
- Command line
-
hf download hf://chaddy81/training-scripts/train_qwen3_multidata.py
-
curl -L -o train_qwen3_multidata.py https://huggingface.co/chaddy81/training-scripts/resolve/main/train_qwen3_multidata.py
3.05 kB
| # /// script | |
| # dependencies = ["trl>=0.12.0", "peft>=0.7.0", "trackio", "datasets", "transformers", "accelerate", "bitsandbytes"] | |
| # /// | |
| from datasets import load_dataset, concatenate_datasets | |
| from peft import LoraConfig | |
| from trl import SFTTrainer, SFTConfig | |
| import trackio | |
| print("Loading datasets...") | |
| # Dataset 1: Codeforces competitive programming (messages format) | |
| 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") | |
| # Dataset 2: Golang coder (messages format) | |
| ds2 = load_dataset("smcleod/golang-coder", split="train") | |
| ds2 = ds2.select_columns(["messages"]) | |
| print(f"Golang: {len(ds2)} examples") | |
| # Dataset 3: Vue/Nuxt/Tailwind (text format - needs conversion) | |
| ds3_raw = load_dataset("kevind13/vuejs-nuxt-tailwind-codellama", split="train") | |
| # Convert text format to messages format for consistency | |
| 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") | |
| # Dataset 4: React code instructions (messages format) | |
| ds4 = load_dataset("cfahlgren1/react-code-instructions", split="train") | |
| ds4 = ds4.select_columns(["messages"]) | |
| print(f"React: {len(ds4)} examples") | |
| # Concatenate all datasets | |
| combined = concatenate_datasets([ds1, ds2, ds3, ds4]) | |
| combined = combined.shuffle(seed=42) | |
| print(f"Combined dataset: {len(combined)} examples") | |
| # Create train/eval split | |
| 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.") | |