Fine-Tuning LLM Secara Efisien dengan Unsloth
Dahulu, melakukan fine-tuning model bahasa besar membutuhkan server multi-GPU yang mahal dan waktu tunggu berjam-jam. Unsloth mengubah persamaan itu dengan menulis ulang bagian-bagian paling berat dari loop pelatihan, sehingga Anda dapat melakukan fine-tuning model seperti Llama, Mistral, Qwen, Gemma, dan Phi sekitar dua kali lebih cepat dengan kebutuhan VRAM yang jauh lebih rendah. Dalam tutorial ini kita akan menelusuri alur kerja yang lengkap dan realistis: memasang Unsloth, memuat model 4-bit, menambahkan adapter LoRA, menyiapkan dataset, melatih dengan SFTTrainer dari Hugging Face, menjalankan inferensi, dan mengekspor hasilnya untuk kebutuhan produksi.
Apa Itu Unsloth dan Mengapa Lebih Cepat
Unsloth adalah pustaka sumber terbuka yang mempercepat supervised fine-tuning (SFT) pada model bahasa berbasis transformer. Ini bukan algoritma pelatihan baru dan tidak mengubah matematika model Anda. Sebaliknya, Unsloth mengganti beberapa operasi yang menentukan performa dengan implementasi tulisan tangan yang melakukan pekerjaan yang sama secara lebih efisien.
Peningkatan kecepatan berasal dari beberapa keputusan rekayasa yang konkret:
- Kernel Triton kustom. Operasi seperti embedding RoPE, RMSNorm, fungsi loss cross-entropy, dan perkalian matriks LoRA diimplementasikan ulang sebagai kernel Triton yang menyatu (fused). Menyatukan beberapa langkah ke dalam satu kernel menghindari pembacaan dan penulisan berulang ke memori GPU, yang biasanya menjadi hambatan sebenarnya.
- Autograd manual. Alih-alih sepenuhnya mengandalkan grafik diferensiasi otomatis PyTorch, Unsloth menyediakan backward pass yang diturunkan secara manual untuk operasi yang dikelolanya. Hal ini menghapus tensor antara yang biasanya tetap disimpan PyTorch, sehingga menurunkan puncak penggunaan memori.
- Desain yang sadar memori. Unsloth mengintegrasikan kuantisasi 4-bit (QLoRA) dan strategi gradient checkpointing kustom sehingga urutan panjang dan model yang lebih besar dapat muat di satu GPU konsumen.
Satu hal yang perlu ditegaskan: ini adalah implementasi ulang yang persis, bukan pendekatan aproksimasi. Unsloth tidak menukar akurasi demi kecepatan. Kurva loss yang Anda peroleh seharusnya cocok dengan menjalankan Hugging Face plus PEFT standar, hanya saja dihasilkan lebih cepat dan dengan jejak memori yang lebih kecil.
Apa yang Didukung Unsloth
Unsloth menyasar fine-tuning LoRA dan QLoRA untuk keluarga model bobot terbuka yang populer:
- Llama (3, 3.1, 3.2, dan turunannya)
- Mistral dan Mixtral
- Qwen (2 dan 2.5)
- Gemma (1 dan 2)
- Phi (3 dan 3.5)
Pustaka ini bekerja pada satu GPU NVIDIA, termasuk T4 gratis yang ditawarkan di Google Colab. Full fine-tuning untuk setiap parameter umumnya berada di luar kekuatan utamanya; pustaka ini dibangun di sekitar metode yang hemat parameter.
Pemasangan
Untuk sebagian besar lingkungan terbaru, satu perintah pip sudah cukup:
pip install unsloth
Unsloth bergantung pada build PyTorch yang mendukung CUDA, transformers, trl, peft, accelerate, dan bitsandbytes. Jika Anda berada di mesin baru, pasang dulu build PyTorch yang sesuai dengan versi CUDA Anda, lalu pasang Unsloth:
# Contoh untuk CUDA 12.1 (sesuaikan dengan lingkungan Anda)
pip install torch --index-url https://download.pytorch.org/whl/cu121
pip install unsloth
Untuk mengambil perbaikan terbaru langsung dari repositori:
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
Anda dapat memverifikasi pemasangan dan memeriksa GPU dengan:
import torch
from unsloth import FastLanguageModel
print("CUDA tersedia:", torch.cuda.isavailable())
print("Perangkat:", torch.cuda.getdevicename(0) if torch.cuda.isavailable() else "CPU")
Memuat Model 4-Bit
Titik masuk untuk hampir segalanya adalah FastLanguageModel.frompretrained. Memuat dalam 4-bit (QLoRA) adalah yang menjaga VRAM tetap rendah. Di sini kita memuat model instruct kecil yang muat dengan nyaman pada satu GPU.
from unsloth import FastLanguageModel
import torch
maxseqlength = 2048 # Panjang konteks yang ingin Anda latih
dtype = None # None membuat Unsloth deteksi otomatis (bf16 di Ampere+, fp16 selain itu)
loadin4bit = True # QLoRA 4-bit; set False untuk LoRA 16-bit jika VRAM mencukupi