localaiforum
Đăng nhập
Hướng dẫn › Làm việc với mô hình

Tinh chỉnh với LoRA & QLoRA

Tinh chỉnh chỉnh hành vi, không chỉnh kiến thức. Nó là công cụ đúng khi mô hình biết tư liệu nhưng nhảy nhầm điệu: sai định dạng đầu ra, sai tông giọng, sai phương ngữ chuyên ngành, sai hiệu chỉnh việc từ chối. Nó là công cụ sai cho "biết tài liệu của tôi" — đó là truy xuất: RAG.

Tinh chỉnh hay không

Mục tiêu Với tay về
Trả lời câu hỏi từ tài liệu của tôi RAG
Luôn nhả đúng định dạng JSON/XML của tôi LoRA — hoặc decode ràng buộc ngữ pháp
Viết theo văn phong nhà nhất quán LoRA
Ngừng từ chối yêu cầu chính đáng của chuyên ngành LoRA, với dữ liệu cẩn trọng
Nói trôi chảy phương ngữ chuyên ngành của tôi LoRA, rồi RAG phủ lên
Suy luận tốt hơn Mô hình base to hơn hoặc tốt hơn — tinh chỉnh không thêm IQ

Nếu một prompt hay một schema làm được, ưu tiên prompt hoặc schema. Tinh chỉnh khi bạn bắt gặp mình dán cùng 300 token chỉ dẫn vào mỗi cuộc gọi.

LoRA trong một đoạn văn

Đóng băng mọi trọng số base. Với mỗi ma trận trọng số đích, thêm hai ma trận nhỏ huấn-luyện-được — A (r×d) và B (d×r) — và chỉ huấn luyện chúng. Bản cập nhật hạng-thấp:

W' = W + (alpha / r) · B·A      # A là r×d, B là d×r, hạng r << d

Cụ thể: ma trận d = 4096 ở hạng r = 16 cần 2 × 4096 × 16 = 131k tham số adapter thay vì 4096² ≈ 16.8M tham số dày — 0.8% của ma trận đó. Trên một mô hình 7–8B, adapter tổng cộng ~40–80M tham số: 0.5–1% của base, vài trăm MB. Đủ năng chứa để dời phong cách và định dạng mạnh, vì những hành vi đó sống trong các hướng hạng-thấp rõ rệt.

QLoRA: một card tiêu dùng

QLoRA giữ base đóng băng ở lượng hóa 4-bit (NF4) trong lúc huấn luyện và chạy adapter ở 16-bit. Số liệu thực tế trên các chồng hiện hành: mô hình 7–8B QLoRA-train trên một GPU 24GB duy nhất; 3B train thoải mái trong 8GB. Gradient checkpointing và optimizer phân trang được công cụ lo — thứ bạn cung cấp là phép toán ngân sách: toán VRAM.

Dữ liệu thắng mọi thứ

500–5,000 cặp chất-lượng-cao thắng 100k cặp cào về, mọi lúc. Các quy tắc quan trọng:

  • Một định dạng nhất quán. Dùng đúng chat template bạn sẽ phục vụ — lệch template train/phục-vụ phá cả lần chạy.
  • Chất lượng trên số lượng. Mỗi cặp nên là một đầu ra bạn chấp nhận từ mô hình. Khử trùng lặp; bỏ ví dụ lười.
  • Độ phủ. Gồm cả các ca bạn muốn mô hình từ chối hoặc xử lý đặc biệt — không thì nó quá-khái-quát-hóa hành vi mới lên mọi thứ.
  • Kiểm tra nhiễm bẩn. Chắc chắn câu hỏi đánh giá không xuất hiện trong dữ liệu huấn luyện — không thì bạn chấm trí nhớ.
  • Bộ đánh giá giữ-riêng. 50–100 ví dụ bạn không bao giờ huấn luyện trên, chấm trước và sau.

Một cặp trông như thế nào (định dạng messages phần lớn công cụ tiêu thụ):

{"messages": [{"role": "system", "content": "You are a 1998-era equipment manual assistant."},
              {"role": "user", "content": "How do I reset the service counter?"},
              {"role": "assistant", "content": "Press MENU and hold for 3 seconds..."}]}

Công cụ

Công cụ Vì sao chọn
Unsloth trainer một-GPU nhanh nhất, notebook cộng đồng miễn phí — khởi đầu dễ
Axolotl chạy-theo-config, hỗ trợ rộng các định dạng tập dữ liệu, công thức tái lập được
LLaMA-Factory GUI cộng CLI, hệ sinh thái tập dữ liệu đa ngôn ngữ mạnh

Tại thời điểm viết cả ba được bảo trì tích cực: unsloth, axolotl, llama-factory.

Siêu tham số thực sự quan trọng

Theo thứ tự tác động:

  • Learning rate — 1e-4 đến 2e-4 cho QLoRA là dải tỉnh táo; quá cao là nguyên nhân thường gặp của sự nhão.
  • Epoch — 1–3. Nhiều hơn là chỗ sinh ra kẻ luôn gật.
  • Hạng / alpha — r 8–32 với alpha 16–32 phủ hầu hết chỉnh hành vi; hạng to hơn cho dịch chuyển nặng chuyên ngành.
  • Độ dài ngữ cảnh — đặt theo ví dụ thật dài nhất của bạn, không phải mặc định của trainer.
  • Kích thước lô — 1–8 là bình thường cho QLoRA trên một card; nó là núm thông lượng, không phải chất lượng.

Nếu một lần chạy thất vọng, sửa dữ liệu trước, learning rate thứ hai, hạng cuối.

Thời gian và chi phí

QLoRA trên 2,000 cặp, 3 epoch, mô hình 7–8B: kỳ vọng 1–3 giờ trên một card hạng RTX 3090/4090. Đó là tiền điện, không phải hóa đơn API, và lặp lại tệ lắm là qua một đêm. Đó là lý do tinh chỉnh cục bộ là sở thích, không phải quy trình mua sắm.

Ngân sách cho việc lặp: lần chạy đầu dạy bạn vấn đề dữ liệu, lần thứ hai là lần bạn giữ.

Đánh giá trước khi phát hành

Chạy một bộ cố định 30–50 prompt — gồm cả bộ giữ-riêng — trước và sau; diff đầu ra cạnh nhau. Rồi kiểm tra hồi quy chat tổng quát: thất bại kinh điển là mô hình tinh-chỉnh-chuyên-ngành trả lời mọi thứ theo định dạng báo-cáo-lỗi. Nếu chất lượng tổng quát tụt, dùng ít epoch hơn, learning rate thấp hơn, hoặc trộn 10–30% dữ liệu chỉ-dẫn tổng quát vào lần chạy.

Đường cong loss để phát hiện phân kỳ, không để chấm điểm: loss huấn luyện nên rơi và phẳng. Bộ đánh giá mới là trọng tài.

Xuất và phục vụ

Hai lối từ một adapter đã huấn luyện:

  • Merge LoRA vào base ở fp16, rồi chuyển sang GGUF cho llama.cpp — hiện thân thân-thiện-diễn-đàn: một tệp, bất kỳ engine: định dạng mô hình, lượng hóa.
  • Giữ adapter riêng cho transformers/vLLM, thứ nạp base + adapter lúc chạy — rẻ hơn khi lặp, gắn engine.

Các chế độ thất bại

  • Overfit / "kẻ luôn gật" — vang lại prompt của bạn, đồng ý mọi thứ; loss huấn luyện thấp, đánh giá tệ hơn. Sửa: ít epoch, LR thấp, dữ liệu đa dạng hơn.
  • Quên lãng thảm khốc — kỹ năng chuyên ngành lên, năng lực tổng quát xuống. Sửa: trộn dữ liệu tổng quát vào; hạ LR.
  • Trôi template — huấn luyện với một chat template, phục vụ với template khác; triệu chứng là những cái kinh điển ở khắc phục sự cố.

DPO sau SFT

Khi định dạng đúng nhưng sở thích lệch — dài dòng quá, sai tông, từ-chối-quá — một lần chạy DPO nhỏ trên các cặp sở thích (phản hồi được-chọn vs bị-bác) điều chỉnh hành vi mà không cần thêm một lượt SFT. Rẻ, ổn định, và là giai đoạn hai chuẩn của công thức SFT-rồi-DPO.

Liên quan: rag · định dạng mô hình · lượng hóa · toán vram