概述
面向消费级到多卡集群的 LLM 后训练平台,覆盖模型全生命周期。 分布式训练(业界标准 2026 方案):FSDP(PyTorch 原生)为主、DeepSpeed ZeRO 为 scale-beyond、DDP 为基线。配置驱动,零训练循环改动,通过 torchrun 一键启动多卡。 模型生命周期闭环:微调 → 评测 → merge → 注册(Staging/Production)→ 血缘追溯。基于 MLflow Model Registry,每个版本可追溯回训练 run(参数 + 指标)。 跨平台训练引擎:NVIDIA(4-bit QLoRA)、Apple Silicon(bf16 MPS)、CPU,自动平台检测。SFT/DPO/领域适配三种后训练技术,配套 MLflow 追踪 + Streamlit 可视化。 内置医疗实体匹配领域示范:微调 Qwen3(0.6B-14B)实现药品/医院名归一化匹配。
技术深潜
Overview
Launch Dashboard什么是 QLoRA?
QLoRA(量化低秩适配)将 4-bit 量化与低秩适配器结合,在消费级 GPU 上微调大语言模型,显存占用降低约 84%。
核心特性
ML Platform Dashboard
Streamlit + MLflow:配置 → 训练 → 监控 → 评估 → 对比
Platform Abstraction
CUDA(4-bit QLoRA)/ MPS(bf16)/ CPU — 统一加载接口
Layered Config System
Dataclass 校验、YAML I/O、领域预设、CLI 覆盖
Passive Tracking
MLflow 回调不修改训练逻辑;不可用时不报错
Domain Adapter Pattern
ABC + 注册表,支持可扩展的评估可视化
Subprocess Launcher
JSON 持久化的 TrainingRunner,UI 驱动启动与监控
Dashboard
Training Lab
预设按钮 → 表单 → YAML 预览 → 子进程启动 → 实时 loss 曲线
Experiment Management
MLflow 运行列表、筛选、指标柱状图、参数差异、逐条删除
Evaluation
领域图表:按难度准确率、实体类型拆解、校准曲线
Model Comparison
并排指标卡片含差值、执行摘要、成本估算
Architecture
Streamlit UI MLflow Layer Training Scripts
├─ 训练实验室 ──→ ├─ MLflowTracker ←── ├─ train_sft.py
├─ 实验管理 ──→ ├─ MLflowTrainCallback ├─ train_dpo.py
├─ 评估 ──→ ├─ TrainingRunner └─ train_medical_entity.py
└─ 模型对比 ──→ └─ EvalLoggerSystem Design
Platform Abstraction
PlatformInfo 单例封装硬件检测。模型加载按 is_cuda / is_mps 分支:
CUDA: device_map="auto" + BitsAndBytesConfig(4-bit NF4)
MPS: 无 device_map,加载后 .to("mps"),无量化
CPU: float32,无 device_map
Flash Attention 2: 仅 CUDA(平台检查开关)
Trust remote code: True(Qwen3 必需)Configuration System
分层 dataclass,__post_init__ 中校验。每种技术对应一个组合配置:
ModelConfig → 名称、量化位数、torch_dtype、flash_attention
TrainingConfig → 轮数、批次、梯度累积、学习率、effective_batch_size 属性
LoRAConfig → r、alpha、dropout、target_modules
SFTConfig → 组合:模型 + 训练 + LoRA + 数据 + 日志
DPOTrainingConfig → 继承 SFTConfig,增加 beta、loss_typeMLflow Integration
被动集成:回调转发 HF Trainer 事件,不修改 control。_NoOpTracker 保证 MLflow 不可用时零影响。
MLflowTrainCallback(TrainerCallback)
├─ on_train_begin() → 记录可训练/总参数量
├─ on_log() → 转发 loss、lr 到 mlflow.log_metrics()
└─ on_evaluate() → 转发评估指标,前缀 "eval/"
配置自动扁平化:{"model": {"name": "Qwen"}} → "model.name": "Qwen"Pipeline
5 阶段流程
prepare_model() → 加载 + 量化(CUDA)/ bf16(MPS)+ PEFT 应用 LoRA
prepare_data() → AlpacaDataset / FinanceDataset / MedicalEntityDataset
setup_trainer() → HF Trainer + DataCollator + 回调(进度、内存、检查点、MLflow)
train() → tracker.start_run() → trainer.train() → tracker.end_run()
evaluate() → 困惑度 + 准确率 + 定性生成关键决策
动态 report_to
根据配置标志计算 report_to。无后端时返回 ["none"],避免 TensorBoard 导入崩溃。
quantization_bits=None
MPS/CPU 使用 None(非 0)禁用量化。配置校验拒绝无效值。
TrainingRunner Persistence
JSON 文件存储运行元数据,子进程状态在 Streamlit 页面刷新后仍存活。
DomainChartAdapter ABC
注册表模式:register_adapter() / get_adapter()。MedicalEntityAdapter 实现摘要、详情、错误分析。
Domain
医疗实体匹配
中文医疗实体归一化:将变体名称(错别字、品牌名、缩写)映射到标准编码。
训练预设
| 预设 | 模型 | 硬件 | 量化 | LoRA r |
|---|---|---|---|---|
| mac | Qwen3-14B | Mac 64GB | bf16 | 64 |
| poc | Qwen3-4B | 8GB GPU | 4-bit | 32 |
| full | Qwen3-8B | 24GB GPU | 4-bit | 64 |
Code
Core Pipeline
bnb = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=True,
)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-4B-Instruct-2507",
quantization_config=bnb,
device_map="auto",
trust_remote_code=True,
)
model = prepare_model_for_kbit_training(model)
lora = LoraConfig(
r=32, lora_alpha=64,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"],
lora_dropout=0.05, bias="none",
)
model = get_peft_model(model, lora) # ~40M 可训练 / 7B 总量快速开始
python scripts/train_medical_entity.py --poc8GB GPU,Qwen3-4B 4-bitstreamlit run ui/app.py启动面板