Model của bạn chưa sẵn sàng đi làm đâu

Từ pretrain đến production là cả một quy trình onboarding — bỏ bước nào, model "nghỉ việc" bước đó.

"Pretrain xong, fine-tune một chút, deploy lên — xong chứ gì." Mình đã nghe câu này ở ít nhất ba buổi sprint planning khác nhau. Và cả ba lần, team đều rollback trong tuần đầu tiên.

Vấn đề không phải model dở. Vấn đề là pipeline từ "model thô" đến "model dùng được trong production" có ít nhất năm bước, mà nhiều team nhảy thẳng từ bước một sang bước cuối.

Một pipeline, năm giai đoạn — không bước nào optional

Bước 1 — Pretraining: Model được "đọc" hàng tỷ trang text — sách, web, code — để hiểu ngôn ngữ ở mức tổng quát. Giai đoạn này cực tốn tài nguyên, nghĩ cỡ hàng nghìn GPU chạy hàng tuần. Đa số team Việt Nam không tự pretrain mà dùng base model có sẵn — và đó hoàn toàn là quyết định hợp lý.

Bước 2 — Supervised Fine-tuning (SFT): Base model biết nhiều nhưng chưa biết làm việc theo cách của team bạn. SFT là giai đoạn onboarding — bạn cho model học từ bộ dữ liệu instruction-response mà team đã chuẩn bị. Như mình đã chia sẻ trong bài về fine-tuning trước đây, chất lượng data ở bước này quyết định phần lớn kết quả cuối.

Bước 3 — LoRA / QLoRA: Thay vì retrain toàn bộ billions of parameters, LoRA chỉ điều chỉnh một phần nhỏ — nhanh hơn, rẻ hơn, đỡ cần GPU khủng. QLoRA đi xa hơn: kết hợp quantization để chạy fine-tuning trên GPU consumer. Giả sử team bạn chỉ có vài chiếc RTX 4090 thay vì cluster A100 — QLoRA sinh ra cho hoàn cảnh đó.

Bước 4 — Alignment (RLHF / GRPO): Đây là bước mà nhiều team bỏ qua — và hối hận. RLHF dùng feedback từ người thật để dạy model phân biệt output tốt và output tệ. GRPO là kỹ thuật mới hơn, tập trung vào structured reasoning, giúp model suy luận nhiều bước thay vì trả lời bề mặt. Nói thẳng ra thì alignment không phải "thêm tính năng" — mà là dạy model biết đâu là nội quy công ty, cái gì nên nói với khách và cái gì phải giữ lại.

Bước 5 — Deployment: Model serving, scaling, monitoring, latency optimization. Gap giữa notebook experiment và production service lớn hơn nhiều người tưởng.

Chuyện thật ở hai team Việt Nam

Kịch bản A — Startup chatbot CSKH fintech

Giả sử team 4 người, ngân sách GPU hạn chế, cần chatbot trả lời tiếng Việt cho sản phẩm fintech.

Con đường thực tế: lấy base model mở từ Hugging Face, chạy SFT với khoảng 5.000 cặp instruction-response tiếng Việt do team tự annotate, dùng QLoRA để fine-tune trên 2 chiếc RTX 4090. Skip pretraining — quá tốn. Nhưng đừng skip alignment. Chatbot fintech mà "nói bừa" về lãi suất hay chính sách bảo hiểm thì hậu quả không chỉ là bug, mà là rủi ro pháp lý.

Kịch bản B — Team ML trong enterprise, summarization nội bộ

Giả sử team 8 người, có access vào cluster GPU nội bộ, cần model summarize báo cáo dài 50–100 trang.

SFT ở đây quan trọng cực kỳ: bạn cần data từ chính những bản summary mà team đã viết tay trước đó. LoRA đủ dùng, không cần QLoRA vì infra không phải vấn đề. Nhưng đặc biệt cần RLHF — vì "summary tốt" là khái niệm chủ quan, cần human evaluator đánh giá thay vì chỉ đo BLEU score.

Thử ngay trong một buổi chiều

Bạn muốn chạy thử pipeline rút gọn? Đây là plan:

  1. Chọn base model — lên Hugging Face, pick một model 7B có multilingual support. Tải về qua transformers library.
  1. Chuẩn bị 500 cặp instruction-response — không cần 5.000. Với mục đích thử nghiệm, 500 cặp chất lượng đủ để thấy model thay đổi hành vi rõ rệt. Format JSONL, mỗi dòng gồm instructionoutput.
  1. Fine-tune bằng QLoRA — dùng thư viện peft kết hợp bitsandbytes cho 4-bit quantization. Trên một GPU 24GB, batch nhỏ chạy thoải mái.
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, BitsAndBytesConfig

bnb_config = BitsAndBytesConfig(load_in_4bit=True)
model = AutoModelForCausalLM.from_pretrained(
    "your-base-model", quantization_config=bnb_config
)
lora_config = LoraConfig(
    r=16, lora_alpha=32, target_modules=["q_proj", "v_proj"]
)
model = get_peft_model(model, lora_config)
  1. Eval nhanh — chạy 20 prompt test, so sánh output trước và sau fine-tune. Ghi vào spreadsheet, chưa cần tool phức tạp.
  1. Nếu model "nói bừa" — đó là tín hiệu bạn cần alignment. Bắt đầu với DPO (Direct Preference Optimization), đơn giản hơn RLHF full pipeline, dùng thư viện trl của Hugging Face.

Những cú ngã mà team nào cũng biết

"Data nhiều là tốt" — Một team mình biết đã crawl 200.000 cặp Q&A từ forum, dump thẳng vào SFT, rồi thắc mắc sao model trả lời giống người toxic trên mạng. Model học từ data bạn cho nó, không hơn không kém. 500 cặp chất lượng do team tự viết thắng 200.000 cặp rác mọi lúc.

"Skip alignment vì chưa cần" — Model chưa qua alignment giống đồng nghiệp mới vào chưa đọc handbook — kỹ năng có thể ổn, nhưng không biết cái gì được nói trong meeting với khách. Trong bối cảnh enterprise, đây là rủi ro compliance thật sự, không phải chuyện "để sau tính".

"Notebook chạy tốt = production ready" — Latency 5 giây trên notebook thì OK. Latency 5 giây khi 100 user gọi cùng lúc thì sập trải nghiệm. Serving framework như vLLM hoặc text-generation-inference tồn tại vì lý do này — đừng tự viết inference server trừ khi bạn thật sự biết mình đang làm gì.

Một dòng nếu bạn chỉ đọc đến đây

Pipeline LLM không phải checklist mà bạn tick cho xong. Mỗi bước ảnh hưởng trực tiếp đến bước sau — skip alignment thì deployment gánh hậu quả, data SFT tệ thì alignment cũng không cứu nổi. Nếu team bạn đang plan đưa model lên production, hãy ngồi lại map đủ năm bước, assign owner cho từng bước, rồi hẵng viết dòng code đầu tiên.

Đừng tin mình, thử đi rồi biết — bắt đầu bằng buổi chiều QLoRA ở trên, rồi tự đánh giá xem model mình skip bước nào thì "xin nghỉ" sớm nhất.

---

Bụi Wire — nghiện đọc release notes lúc 2 giờ sáng

Nguồn tham khảo