WIP manual implementation of QwQ finetune

This commit is contained in:
2025-03-24 12:05:43 +00:00
parent 3594c8150a
commit 1ef32ed33e
3 changed files with 33 additions and 5 deletions

5
.gitignore vendored
View File

@@ -1,6 +1,7 @@
**.egg-info/
.env .env
__pycache__/ __pycache__/
collect.txt
data/ data/
model/ model/
**.egg-info/ unsloth_compiled_cache/
collect.txt

View File

@@ -25,7 +25,8 @@ setup(
'torch>=2.0.0', 'torch>=2.0.0',
'transformers>=4.30.0', 'transformers>=4.30.0',
'trl>=0.7.8', 'trl>=0.7.8',
'unsloth>=2025.2', 'unsloth>=2025.3',
'vllm>=0.8',
], ],
classifiers=[ classifiers=[
'Development Status :: 3 - Alpha', 'Development Status :: 3 - Alpha',

View File

@@ -1,12 +1,15 @@
#!/root/venvs/train/bin/python #!/root/venvs/train/bin/python
""" """
Fine-tuning for QwQ model Fine-tuning for QwQ model
Based on: https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(3B)-GRPO.ipynb
""" """
from .dataset import Dataset from .dataset import Dataset
from dataclasses import dataclass from dataclasses import dataclass
import argparse
from pathlib import Path from pathlib import Path
from unsloth import FastLanguageModel, is_bfloat16_supported
import argparse
import os import os
import torch
@dataclass @dataclass
class Args: class Args:
@@ -58,7 +61,30 @@ def main():
args = Args() args = Args()
dataset = Dataset(args.config_path) dataset = Dataset(args.config_path)
dataset.validate() dataset.validate()
print(dataset[3])
max_seq_length = 1024 # Can increase for longer reasoning traces
lora_rank = 64 # Larger rank = smarter, but slower
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = args.base_model,
max_seq_length = max_seq_length,
load_in_4bit = True, # False for LoRA 16bit
fast_inference = True, # Enable vLLM fast inference
max_lora_rank = lora_rank,
gpu_memory_utilization = 0.5, # Reduce if out of memory
)
model = FastLanguageModel.get_peft_model(
model,
r = lora_rank, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128
target_modules = [
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",
], # Remove QKVO if out of memory
lora_alpha = lora_rank,
use_gradient_checkpointing = "unsloth", # Enable long context finetuning
random_state = 3407,
)
if __name__ == "__main__": if __name__ == "__main__":
main() main()