Bỏ qua

Bài 8: Capstone - Production LLM System

Tổng quan

Capstone tích hợp toàn bộ Module III thành một pipeline production hoàn chỉnh cho hệ thống LLM đã xây ở Module I/II:

  • Prompt được version hoá trong registry (Bài 1).
  • Mọi thay đổi đi qua eval gate (Bài 2).
  • CI/CD tự động lint → eval → build → deploy → smoke test → rollback (Bài 6).
  • Deploy trên Compute Engine + Secret Manager (Bài 5), container hoá chuẩn (Bài 4).
  • Cache 2 tầng + cost governance (Bài 3).
  • Observability + guardrails + incident playbook (Bài 7).
  • Có vòng feedback: log production → case mới trong golden set.

Định dạng buổi học

Live coding (architecture review & integration) + học viên hoàn thiện pipeline trên hệ thống của mình + phần take-home + Q&A.


1. Kiến trúc pipeline

graph LR
    DEV[Sửa prompt / code / config] --> PR[Pull Request]
    PR --> LINT[Prompt lint + unit test]
    LINT --> EVAL{Eval gate<br/>subset, so baseline + slice}
    EVAL -->|fail| DEV
    EVAL -->|pass| MERGE[Merge main]
    MERGE --> REG[Promote prompt version -> alias production]
    MERGE --> BUILD[Build image tag=SHA -> Artifact Registry]
    BUILD --> DEPLOY[Deploy: VM pull + systemd restart]
    DEPLOY --> SMOKE[Smoke test: /health + câu hỏi thật]
    SMOKE -->|fail| RB[Rollback: image tag / prompt alias / model config]
    SMOKE -->|pass| PROD[Production<br/>cache 2 tầng + guardrails]
    PROD --> OBS[Observability: trace sampled + cost dashboard + alert]
    OBS -->|case sai / feedback âm| GOLDEN[(Golden Set +1 case)]
    GOLDEN --> EVAL
    OBS -->|cost / hallucination / jailbreak / outage| PLAYBOOK[Incident playbook]

Vì sao không có bước "train" trong đường chính

Hệ thống LLM ở Module I/II cải tiến qua prompt, RAG, eval - không qua cập nhật weights. Pipeline chính là:

prompt/dataset version → evaluate → register → deploy → monitor → (feedback về golden set)

Nếu dự án có fine-tuning

Đưa LoRA (M1, Bài 3) vào như nhánh phụ tách biệt: validate data → train → eval → register model, chạy thủ công/theo lịch, kết quả là một model config mới mà pipeline chính ở trên tiêu thụ (và vẫn phải qua eval gate).


2. Live coding: Architecture Review & Integration

Ghép các mảnh đã xây rời rạc qua 7 bài thành một hệ thống chạy được:

Thành phần Từ bài Điểm tích hợp
Prompt registry Bài 1 Service load prompt qua registry().render(name, version="production")
Eval pipeline Bài 2 eval.run + eval.gate gọi được từ CLI và CI
Cache 2 tầng Bài 3 Bọc quanh lời gọi LLM; key chứa prompt_version
Container Bài 4 Image multi-stage, SSE endpoint, healthcheck
Deploy Bài 5 VM + systemd + nginx + Secret Manager
CI/CD Bài 6 ci.yml, eval-gate.yml, cd.yml + branch protection
Observability Bài 7 record_cost() + tracing sampled + dashboard + alert

Rà soát các "đường nối" hay vỡ:

  • Cache key có prompt_version không? (không thì rollback prompt vô nghĩa)
  • Eval gate có chạy khi PR đụng src/rag/**, không chỉ prompts/**?
  • Smoke test có gọi câu hỏi có đáp án biết trước, không chỉ /health?
  • Secret đọc lúc runtime, không nằm trong image?
  • Alert có người nhận thật (Slack/email), không chỉ log?

3. Pipeline hoàn chỉnh - checklist tích hợp

  • Version: prompt trong registry, có ≥ 2 version + changelog; dataset golden set được version hoá
  • Evaluate: eval.run --subset chạy < 3 phút; eval.gate so baseline + có gate riêng cho slice injection/out_of_scope
  • Register: promote prompt = đổi alias production; rollback = trỏ alias về version cũ (không cần build)
  • Deploy: merge main → CI (lint + unit + eval) → CD (build tag=SHA → push → VM restart) → smoke test
  • Monitor: dashboard cost/feature + latency p95 + cache hit + hallucination rate + error/fallback; alert cost spike hoạt động
  • Feedback loop: có script/quy trình lấy câu bị feedback âm từ log → thêm vào golden set version kế tiếp

4. Checklist Production-Ready

Đối chiếu trước khi coi hệ thống là "xong":

Bảo mật & cấu hình

  • Không có API key nào ở dạng file trên VM hoặc trong image layer
  • Secret đọc từ Secret Manager lúc runtime; xoay key = versions add + restart
  • Port app không truy cập được từ Internet; chỉ 80/443 mở; SSH giới hạn IP

Chất lượng & thay đổi

  • Branch protection: không merge main khi CI hoặc eval-gate đỏ
  • Eval theo slice - chứng minh bắt được regression vô hình
  • Prompt lint chặn biến thiếu / version sai kiểu

Vận hành & phục hồi

  • Có đường rollback cho cả 3 trục: image tag (code), prompt version alias, model config
  • Smoke test tự chạy sau deploy; fail → tự rollback; đã diễn tập rollback thật
  • last-known-good được ghi lại sau mỗi smoke pass
  • Container tự restart khi crash (systemd Restart=always)
  • Backup vector index định kỳ + đã thử khôi phục

Chi phí & giám sát

  • Cost budget tháng + alert 50/80/100%
  • Hard limit cost per user / ngày
  • Dashboard production có người xem; alert có người nhận
  • Runbook cho ≥ 2 loại incident (khuyến nghị đủ 4: cost / hallucination / jailbreak / outage)
  • Fallback provider được cấu hình và đã diễn tập

5. Take-home

  1. Thêm 1 incident playbook vào runbook (chọn loại chưa viết ở Bài 7), gồm: tín hiệu phát hiện cụ thể (metric + ngưỡng), các bước khoanh vùng bằng dashboard hiện có, hành động giảm thiểu, mục "sau sự cố".
  2. Thực hiện một lần rollback thật: chọn prompt version alias hoặc image tag, rollback trên hệ thống đã deploy, ghi lại từng lệnh + thời gian từ lúc quyết định đến lúc dịch vụ ổn định.
  3. (Tùy chọn) Bổ sung vòng feedback: script lấy 10 câu bị thumbs-down gần nhất từ log, gán đáp án kỳ vọng, tạo golden set version mới, chạy lại eval để xem baseline có đổi.

6. Q&A Session

Chủ đề gợi ý:

  • Khi nào một LLM app đáng self-host model thay vì gọi API (nhắc Bài 4).
  • Eval gate chặn nhầm PR tốt (judge nhiễu) - cân bằng drop_tolerance thế nào.
  • Chi phí thật của việc "làm production đúng chuẩn" cho team nhỏ - cắt gì được, cắt gì không.
  • Prompt registry hosted vs git-based cho team có PM chỉnh prompt.

Tóm tắt

graph TB
    subgraph "Vòng lặp chính - KHÔNG có train"
        V[Version prompt/dataset] --> E[Evaluate - gate] --> R[Register - alias production] --> D[Deploy - CI/CD + smoke] --> M[Monitor - dashboard + alert]
        M -->|feedback| V
    end
    M -.incident.-> PB[Playbook: cost / hallucination / jailbreak / outage]
    FT[[Nhánh phụ: fine-tune LoRA<br/>validate -> train -> eval -> register model]] -.model config.-> D
Trụ cột Cốt lõi
Pipeline chính version → evaluate → register → deploy → monitor → feedback; không có "train" ở đường chính
Tích hợp Kiểm các "đường nối": cache key có prompt_version, eval-gate trigger đủ path, smoke test có đáp án biết trước
Production-ready Secret runtime · rollback 3 trục · smoke + auto-rollback · cost budget + alert · runbook + fallback đã diễn tập
Feedback loop Câu bị feedback âm → golden set version kế → baseline eval mới