🇻🇳 Tiếng Việt · 🇬🇧 English
Hệ thống fine-tuning LLM end-to-end cho Qwen2.5 (1.5B / 3B) với QLoRA, kèm web UI dark theme (song ngữ VI/EN) để quản lý dữ liệu, theo dõi training, và đánh giá mô hình. Chú ý: Khuyến nghị sử dụng máy có GPU khoẻ để thực hiện. Học thêm về LLM hoặc ủng hộ chúng tôi tại learningmap.net
- Pipeline đầy đủ: ingest → validate → preprocess → tokenize → train (QLoRA) → eval → export.
- Web UI dark theme: dashboard, dataset manager, training console, model registry, real-time logs/metrics qua WebSocket. Hỗ trợ song ngữ Tiếng Việt / English với toggle ngay trên topbar.
- Backend FastAPI: REST + WebSocket, SQLite (dev) / PostgreSQL (prod-ready), background workers.
- Training engine: HuggingFace Transformers + PEFT + TRL, hỗ trợ QLoRA 4-bit, gradient checkpointing, packing.
- Hỗ trợ format dữ liệu: Alpaca, ShareGPT, ChatML, JSONL tự do với schema validator.
- Tracking: loss/lr/grad_norm/throughput, eval metrics (perplexity, BLEU/ROUGE optional), checkpoint manager.
LLMFinetuning/
├── backend/ # FastAPI + training engine
│ └── app/{api,core,data,training,services,models,schemas,db,websocket,utils}
├── frontend/ # React + Vite + Tailwind (dark + i18n VI/EN)
│ └── src/{pages,components,contexts,hooks,services,i18n}
├── configs/ # YAML training configs
├── data/ # raw/processed/samples
├── outputs/ # checkpoints/adapters/logs
├── scripts/ # CLI tools (smoke_pipeline, train_cli, check_env)
└── docs/ # tài liệu (VI mặc định, EN trong docs/en/)
⚠️ Stack training cần Python 3.12 (cũng hỗ trợ 3.10/3.11). PyTorch chưa hỗ trợ 3.13/3.14.
# 0. (Nếu chưa có) cài Python 3.12
brew install python@3.12 # macOS
# Ubuntu: sudo apt install python3.12 python3.12-venv python3.12-dev
# 1. Tạo venv và cài dependencies
cd backend
python3.12 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Upgrade pip
pip install --upgrade pip
# Install all dependencies
pip install -r requirements.txt
# 2. Khởi tạo DB và chạy backend
cp .env.example .env # đổi APP_API_TOKEN
python -m app.db.init_db
uvicorn app.main:app --reload --port 8000
# 3. Cài frontend (terminal khác)
cd frontend
npm install
npm run dev # http://localhost:5173Lần sau chỉ cần source backend/.venv/bin/activate rồi chạy lại bước 2/3.
Cách thay thế (Conda): xem docs/03_installation.md §3. Gặp lỗi Could not find a version that satisfies torch>=... ⇒ Python quá mới hoặc kiến trúc sai, xem mục 9 trong cùng file.
| Tài liệu | 🇻🇳 Tiếng Việt | 🇬🇧 English |
|---|---|---|
| Yêu cầu chức năng & phi chức năng | docs/01_requirements.md | docs/en/01_requirements.md |
| Kiến trúc tổng thể, sơ đồ component | docs/02_architecture.md | docs/en/02_architecture.md |
| Hướng dẫn cài đặt chi tiết | docs/03_installation.md | docs/en/03_installation.md |
| Hướng dẫn sử dụng web UI | docs/04_user_guide.md | docs/en/04_user_guide.md |
| API REST + WebSocket | docs/05_api_reference.md | docs/en/05_api_reference.md |
| Chi tiết QLoRA, hyperparameters | docs/06_training_guide.md | docs/en/06_training_guide.md |
| Training qua terminal (server transfer) | docs/07_terminal_training.md | docs/en/07_terminal_training.md |
| Dataset | Số mẫu | Ngôn ngữ | Config |
|---|---|---|---|
data/samples/alpaca_vi_mini.json |
50 | 🇻🇳 Tiếng Việt | configs/qwen15b_vi.yaml |
data/samples/alpaca_en_mini.json |
50 | 🇬🇧 English | configs/qwen15b_en.yaml |
data/samples/alpaca_bilingual_mini.json |
100 | VI + EN xen kẽ | configs/qwen15b_bilingual.yaml |
Xem data/samples/README.md để biết tại sao tách riêng thường tốt hơn cho smoke test, và khi nào nên dùng bản song ngữ.
# Sinh lại dataset song ngữ (interleave VI/EN)
python scripts/make_bilingual.py
# Fine-tune nhanh trên mỗi dataset
python scripts/train_cli.py configs/qwen15b_vi.yaml --max-steps 50
python scripts/train_cli.py configs/qwen15b_en.yaml --max-steps 50
python scripts/train_cli.py configs/qwen15b_bilingual.yaml --max-steps 50MIT