Skip to main content

unsloth-fine-tuning

Fast LLM fine-tuning with Unsloth - 2-5x faster training, 50-80% less VRAM. Use for single-GPU LoRA/QLoRA SFT, GRPO/RL reasoning training, vision/TTS fine-tuning, and GGUF export to Ollama/vLLM/llama.cpp. Supports 300+ models including Llama, Qwen, Gemma, DeepSeek, Mistral, Phi, and gpt-oss.

Informations de source

Dépôt
synthetic-sciences/openscience
Dernière activité de la source
20 septembre 2026 à 11:36
Langue détectée de SKILL.md
anglais
Étoiles
4 004
Forks
526

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Explorateur de fichiers
41 fichiers

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
unsloth-fine-tuning
description
Fast LLM fine-tuning with Unsloth - 2-5x faster training, 50-80% less VRAM. Use for single-GPU LoRA/QLoRA SFT, GRPO/RL reasoning training, vision/TTS fine-tuning, and GGUF export to Ollama/vLLM/llama.cpp. Supports 300+ models including Llama, Qwen, Gemma, DeepSeek, Mistral, Phi, and gpt-oss.
category
ml-training
version
1.0.0
author
Synthetic Sciences
license
MIT
tags
["Fine-Tuning","Unsloth","LoRA","QLoRA","GRPO","RL","Vision","TTS","GGUF","Ollama","vLLM","Fast Training","Memory-Efficient"]
dependencies
["unsloth","torch>=2.1.0","transformers>=4.45.0","trl>=0.15.0","datasets","peft","xformers"]
metadata
{"upstream":"Orchestra-Research/AI-Research-SKILLs","upstream-url":"https://github.com/Orchestra-Research/AI-Research-SKILLs","upstream-path":"unsloth","upstream-license":"MIT","upstream-relationship":"adapted and rewritten","skill-author":"Synthetic Sciences","adapted-by":"Synthetic Sciences"}
# Unsloth - Fast LLM Fine-Tuning Fine-tune LLMs 2-5x faster with 50-80% less VRAM. Supports SFT, RL (GRPO), vision, TTS, and 300+ models with zero accuracy loss. ## When to Use Unsloth **Use Unsloth when:** - Fine-tuning on a single GPU with LoRA/QLoRA (consumer or datacenter) - Training reasoning models with GRPO, Dr. GRPO, DAPO, BNPO, or GSPO - Fine-tuning vision models (Qwen3-VL, Gemma 3, Llama 3.2 Vision) - Fine-tuning TTS models (Orpheus, Sesame-CSM, Whisper) - Exporting to GGUF for Ollama, llama.cpp, or LM Studio - Need padding-free training and uncontaminated packing (automatic) - Using FP8 precision for additional memory savings on Ampere+ GPUs **Don't use Unsloth when:** - Multi-node distributed training at scale (Unsloth DDP works but is single-node) - Apple Silicon / MLX (not yet supported) - Full fine-tuning of 70B+ models (use DeepSpeed + Transformers) - Custom architectures not supported by `transformers` - Cloud-managed training without GPU access (use Tinker instead) **Unsloth vs Alternatives:** | Need | Use | |------|-----| | Fast single-GPU LoRA/QLoRA | **Unsloth** | | Managed cloud LoRA training | Tinker | | Parameter-efficient methods (IA3, Prefix, etc.) | PEFT | | Multi-node distributed training | DeepSpeed + Transformers | | YAML-config-driven training | Axolotl | | Full fine-tuning with FSDP | Transformers + Accelerate | ## Quick Reference | Topic | Documentation | |-------|---------------| | Overview & Features | [docs/overview.md](docs/overview.md) | | Installation (pip) | [docs/installation-pip.md](docs/installation-pip.md) | | Installation (Docker) | [docs/installation-docker.md](docs/installation-docker.md) | | Model Selection Guide | [docs/model-selection.md](docs/model-selection.md) | | VRAM Requirements | [docs/requirements.md](docs/requirements.md) | | Model Catalog (300+) | [docs/models.md](docs/models.md) | | Datasets & Formatting | [docs/datasets.md](docs/datasets.md) | | Chat Templates | [docs/chat-templates.md](docs/chat-templates.md) | | LoRA Hyperparameters | [docs/lora-hyperparameters.md](docs/lora-hyperparameters.md) | | GRPO RL Tutorial | [docs/tutorial-grpo.md](docs/tutorial-grpo.md) | | Advanced RL Parameters | [docs/advanced-rl.md](docs/advanced-rl.md) | | Memory-Efficient RL | [docs/memory-efficient-rl.md](docs/memory-efficient-rl.md) | | Vision Fine-Tuning | [docs/vision-fine-tuning.md](docs/vision-fine-tuning.md) | | Vision RL (VLM GRPO) | [docs/vision-rl.md](docs/vision-rl.md) | | TTS Fine-Tuning | [docs/tts-fine-tuning.md](docs/tts-fine-tuning.md) | | Saving to GGUF | [docs/saving-to-gguf.md](docs/saving-to-gguf.md) | | Saving to Ollama | [docs/saving-to-ollama.md](docs/saving-to-ollama.md) | | vLLM Deployment | [docs/vllm-guide.md](docs/vllm-guide.md) | | FP8 Training | [docs/fp8-rl.md](docs/fp8-rl.md) | | FP16 vs BF16 for RL | [docs/fp16-vs-bf16.md](docs/fp16-vs-bf16.md) | | Multi-GPU DDP | [docs/multi-gpu-ddp.md](docs/multi-gpu-ddp.md) | | Kernels & Packing | [docs/kernels-packing.md](docs/kernels-packing.md) | | Inference | [docs/inference.md](docs/inference.md) | | Troubleshooting | [docs/troubleshooting-faq.md](docs/troubleshooting-faq.md) | | Troubleshooting Inference | [docs/troubleshooting-inference.md](docs/troubleshooting-inference.md) | ## Installation ```bash # Recommended (pip) pip install unsloth # With vLLM (for GRPO fast inference) pip install uv && uv pip install unsloth vllm # Docker (all dependencies pre-installed) docker run -d -e JUPYTER_PASSWORD="mypassword" \ -p 8888:8888 --gpus all -v $(pwd)/work:/workspace/work \ unsloth/unsloth ``` **Requirements:** Linux or Windows (WSL), NVIDIA GPU with CUDA Capability 7.0+ (V100, T4, RTX 20-50, A100, H100, L40). AMD and Intel GPUs also supported. Python 3.10-3.13. --- ## Workflow 1: SFT (Supervised Fine-Tuning) Use this for standard instruction tuning, chat fine-tuning, or domain adaptation. ### Checklist - [ ] Prepare dataset in ShareGPT, ChatML, or Alpaca format - [ ] Choose base vs instruct model (see Model Selection below) - [ ] Select QLoRA (4-bit) or LoRA (16-bit) based on VRAM - [ ] Set hyperparameters (rank, alpha, LR, epochs) - [ ] Run training with SFTTrainer - [ ] Save and deploy (LoRA adapter, merged 16-bit, or GGUF) ### Implementation ```python from unsloth import FastLanguageModel from trl import SFTTrainer, SFTConfig from datasets import load_dataset # Step 1: Load model (QLoRA 4-bit) model, tokenizer = FastLanguageModel.from_pretrained( model_name="unsloth/Qwen3-8B-bnb-4bit", # or any HF model max_seq_length=2048, load_in_4bit=True, # False for LoRA 16-bit ) # Step 2: Add LoRA adapters model = FastLanguageModel.get_peft_model( model, r=16, # Rank: 8-128 (16-32 recommended) lora_alpha=16, # Alpha: equal to r or 2*r lora_dropout=0, # 0 is default, use 0.05-0.1 for regularization target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], use_gradient_checkpointing="unsloth", # 30% less VRAM use_rslora=False, # True for rank-stabilized LoRA ) # Step 3: Prepare dataset dataset = load_dataset("philschmid/dolly-15k-oai-style", split="train") # Step 4: Train trainer = SFTTrainer( model=model, tokenizer=tokenizer, train_dataset=dataset, args=SFTConfig( output_dir="./sft-output", per_device_train_batch_size=2, gradient_accumulation_steps=4, # Effective batch = 2*4 = 8 num_train_epochs=3, learning_rate=2e-4, fp16=True, # or bf16=True logging_steps=10, optim="adamw_8bit", max_seq_length=2048, packing=True, # Uncontaminated packing (2-5x faster) ), ) trainer.train() # Step 5: Save model.save_pretrained("lora_adapter") # LoRA only (~6MB) tokenizer.save_pretrained("lora_adapter") ``` ### Data Formats | Format | Template | Use Case | |--------|----------|----------| | ShareGPT | `{"conversations": [{"from": "human", ...}]}` | Multi-turn chat, instruct models | | ChatML / OpenAI | `{"messages": [{"role": "user", ...}]}` | OpenAI-compatible, instruct models | | Alpaca | `{"instruction": ..., "input": ..., "output": ...}` | Single-turn tasks, base models | | Raw text | Plain text corpus | Continued pretraining | Use `get_chat_template(tokenizer, chat_template="chatml")` to apply templates. Use `standardize_sharegpt(dataset)` for ShareGPT-formatted data with non-standard keys. ### Training on Completions Only Mask user inputs so loss is only computed on assistant responses: ```python from unsloth.chat_templates import train_on_responses_only trainer = train_on_responses_only( trainer, instruction_part="<|start_header_id|>user<|end_header_id|>\n\n", # Llama 3.x response_part="<|start_header_id|>assistant<|end_header_id|>\n\n", ) # For Gemma: instruction_part="<start_of_turn>user\n", response_part="<start_of_turn>model\n" ``` **Sources:** [docs/datasets.md](docs/datasets.md), [docs/chat-templates.md](docs/chat-templates.md), [docs/lora-hyperparameters.md](docs/lora-hyperparameters.md) --- ## Workflow 2: RL Training (GRPO) Use this for training reasoning models with reward functions — math, code, format compliance, verifiable tasks. ### Checklist - [ ] Define reward function(s) returning float scores - [ ] Choose model and enable vLLM fast inference - [ ] Enable Unsloth Standby for memory-efficient RL - [ ] Configure GRPOConfig with num_generations, epsilon, loss_type - [ ] Monitor reward curves and KL divergence - [ ] Save and export model ### Implementation ```python import os os.environ["UNSLOTH_VLLM_STANDBY"] = "1" # Memory-efficient RL from unsloth import FastLanguageModel import torch import re model, tokenizer = FastLanguageModel.from_pretrained( model_name="unsloth/Qwen3-8B", max_seq_length=2048, load_in_4bit=True, # False for LoRA 16-bit fast_inference=True, # Enable vLLM for fast generation max_lora_rank=32, gpu_memory_utilization=0.9, # Reduce if OOM ) model = FastLanguageModel.get_peft_model( model, r=32, lora_alpha=64, target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], use_gradient_checkpointing="unsloth", ) # Define reward functions def correctness_reward(completions, answer, **kwargs): scores = [] for completion in completions: match = re.search(r"<answer>(.*?)</answer>", completion, re.DOTALL) extracted = match.group(1).strip() if match else "" scores.append(1.0 if extracted == answer else 0.0) return scores def format_reward(completions, **kwargs): pattern = r"<reasoning>.*?</reasoning>\s*<answer>.*?</answer>" return [1.0 if re.search(pattern, c, re.DOTALL) else 0.0 for c in completions] # Train from trl import GRPOConfig, GRPOTrainer training_args = GRPOConfig( output_dir="./grpo-output", per_device_train_batch_size=2, gradient_accumulation_steps=4, learning_rate=5e-6, num_generations=8, # Rollouts per prompt max_completion_length=512, max_prompt_length=512, max_steps=250, temperature=1.0, # RL algorithm variants loss_type="dapo", # "grpo", "dr_grpo", "dapo", "bnpo" epsilon=0.2, epsilon_high=0.28, # DAPO upper clipping scale_rewards="none", # Dr. GRPO: no reward scaling optim="adamw_8bit", report_to="none", ) trainer = GRPOTrainer( model=model, processing_class=tokenizer, args=training_args, train_dataset=dataset, reward_funcs=[correctness_reward, format_reward], ) trainer.train() # Save model.save_lora("grpo_saved_lora") ``` ### RL Algorithm Variants | Algorithm | `loss_type` | Key Setting | Notes | |-----------|-------------|-------------|-------| | GRPO | `"grpo"` | Default | Standard group relative policy optimization | | Dr. GRPO | `"dr_grpo"` | `scale_rewards="none"` | No reward normalization, more stable | | DAPO | `"dapo"` | `epsilon_high=0.28` | Two-sided clipping, recommended default | | BNPO | `"bnpo"` | — | Bounded negative policy optimization | | GSPO | any | `importance_sampling_level="sequence"` | Sequence-level importance weighting (Qwen team) | ### Unsloth Standby (Memory-Efficient RL) Set `os.environ["UNSLOTH_VLLM_STANDBY"] = "1"` before imports. This shares vLLM's weight space with training and repurposes KV cache memory during training — saving up to 60% VRAM. On H100 80GB: 16GB shared weights + 64GB multi-purpose space. **Sources:** [docs/tutorial-grpo.md](docs/tutorial-grpo.md), [docs/advanced-rl.md](docs/advanced-rl.md), [docs/memory-efficient-rl.md](docs/memory-efficient-rl.md) --- ## Workflow 3: Vision Fine-Tuning Use this for training vision-language models on image+text tasks. ### Implementation ```python from unsloth import FastVisionModel from trl import SFTTrainer, SFTConfig from unsloth.trainer import UnslothVisionDataCollator model, tokenizer = FastVisionModel.from_pretrained(
Voir sur GitHub
Ce SKILL.md est tres volumineux, SkillsMP affiche donc ici seulement la premiere section. Voir sur GitHub