04 场景演算S0 production plan
06 · M5 机器 · 弹性池 + 微调训练
06 · M5 机器 · 弹性池 + 微调训练
定位
多用途弹性机,跑三件事:
- LoRA / QLoRA 微调训练(客户付费服务)
- 抢占实例池(低价 3-4 折 API)
- 内部工具 / 关联团队使用(消化闲置)
- 单机 8×5090
- 不做保障 SLA
- 灵活性优先
三类工作负载
A. 微调训练服务
卖点:帮客户做 Qwen / GLM / Llama 的 LoRA / QLoRA 微调
技术栈:
- LLaMA-Factory(首选,UI 好用)
- Unsloth(更快,但 Blackwell 支持要看)
- Axolotl(专业级)
典型任务:
- Qwen2.5-14B LoRA 微调:8 卡 DDP,2-4 小时训练 1 epoch
- Qwen2.5-32B QLoRA:4 卡 TP,~8 小时训练
- 7B 全量微调:8 卡 FSDP,需要 4-6 小时
定价(按 GPU 时长):
- 消费卡训练服务:¥30-50/卡时
- 微调完成后自动上架为客户私有模型(+推理服务费)
订单流程:
- 客户上传数据集(JSONL 格式)
- 客户选模型 + 训练参数
- 平台排队(当天完成 or 次日)
- 训练完成 → 存 checkpoint → 上架 LoRA API
- 客户自己的 API 就能用微调后模型
B. 抢占实例 API
卖点:不需要 SLA 的场景 3-4 折价格
目标客户:
- 批量任务(数据打标、文本摘要)
- 异步任务(不在线服务)
- 试用/测试
- 学生党
技术实现:
- M5 空闲时跑 Qwen2.5-14B AWQ TP=8(8 卡全用,最大吞吐)
- 客户传
X-Priority: spotheader - 训练任务来了 → 抢占 API 30 秒 grace period → 停 API
- 训练结束 → 自动恢复 API
定价:
- Qwen2.5-14B spot:¥0.3/M in / ¥1/M out(vs 保障级 -70%)
C. 内部工具
项目方 / 关联团队自己用:
- 内部 Prompt 库测试
- 私有 RAG 知识库
- Coding assistant(个人助手)
- 图片 OCR / 文档解析
优先级:最低(P0 微调 > P1 spot > P2 内部)
部署方案
场景 1:无训练任务时
默认状态:M5 跑 Qwen2.5-14B AWQ TP=8 单副本(最大吞吐 spot API)
python -m vllm.entrypoints.openai.api_server \
--model /models/Qwen2.5-14B-Instruct-AWQ \
--served-model-name qwen2.5-14b-spot \
--tensor-parallel-size 8 \
--quantization awq \
--max-model-len 16384 \
--gpu-memory-utilization 0.90 \
--enable-prefix-caching \
--max-num-seqs 512 \
--port 8030预计吞吐:~1800 tok/s(TP=8 通信开销较大,但并发上限高)
场景 2:有训练任务
收到订单后:
- Nginx 网关标记 M5 端口 8030 为 draining
- vLLM 完成排队请求(约 30-60 秒)
- systemctl stop vllm-m5-spot
- 启动训练任务
训练启动脚本(LLaMA-Factory 示例):
cd /opt/LLaMA-Factory
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
torchrun --nproc_per_node=8 src/train.py \
--stage sft \
--model_name_or_path /models/Qwen2.5-14B-Instruct \
--dataset_dir /data/customer-datasets/customer-123 \
--dataset customer_data \
--template qwen \
--finetuning_type lora \
--lora_target all \
--output_dir /data/checkpoints/customer-123-lora \
--num_train_epochs 3.0 \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--learning_rate 5e-5 \
--warmup_ratio 0.03 \
--logging_steps 10 \
--save_steps 500 \
--plot_loss \
--bf16训练完成后:
- checkpoint 存
/data/checkpoints/{customer_id}-lora - 挂载 LoRA adapter 到主模型服务上,客户可通过 API 使用
场景 3:训练完成,恢复 API
- 加载 LoRA adapter 到 vLLM
- vLLM 支持多 LoRA 热挂载:
--enable-lora --lora-modules customer-123=/data/checkpoints/customer-123-lora - 客户请求指定
model: qwen2.5-14b:customer-123即可用自己的 LoRA - 恢复 spot API 服务
调度控制
简单版:
- 一个 Python 守护进程监控
/queue/training-orders/ - 有新任务 → 停 vLLM → 启训练 → 训完 → 挂 LoRA → 启 vLLM
- systemd 编排
规范版(第 2 阶段):
- Kubernetes + Volcano gang scheduling
- 训练任务作为 Job,vLLM 作为 Deployment
- Volcano 优先级抢占
收入模型
微调服务:
- 单次 14B LoRA 训练:8 卡 × 3 小时 × ¥40 = ¥960
- 假设每周 5 单:每月 2 万
- 附加:微调后 LoRA API 推理,长期分成
Spot API:
- 满载 14B AWQ TP=8:约 1800 tok/s
- 3 折定价按 ¥1/M output
- 训练占用 30% 时间 → 有效吞吐 70%
- 月理论约 33 亿 output tok → 约 0.3-0.5 万
M5 合计月营收:2-3 万(不算内部使用价值)
硬件配置注意
M5 需要额外配置:
- NVMe 至少 8TB:存客户数据集 + checkpoint(每个 LoRA 只有几百 MB,但需要多个副本)
- 内存 512GB 起:训练时 CPU offload 需要
- 网络:跨机器训练暂不做,单机就够
客户数据隔离
关键:客户数据集是敏感的
- 每个客户独立目录
/data/customers/{customer_id}/ - 权限只能 root + 训练 worker 访问
- 训练完成后数据保留 90 天,客户可随时删除
- LoRA checkpoint 属于客户,可导出
监控
- 训练任务进度(loss / accuracy / GPU 利用率)
- Spot API 抢占次数
- 客户任务排队时间
- 训练成功率 / 失败次数
建议
8 周 MVP:M5 先只做 Spot API,别急着接微调订单
- 先验证 spot API 客户接受度
- 稳定后(第 3 个月)再开微调服务
- 微调服务是"锦上添花",不是主线
长期定位:
- M5 是"客户升级路径"的关键
- Spot API 客户 → 满意 → 升级保障 API
- 免费微调(送样品)→ 客户看到效果 → 付费长期用
风险预警:
- 训练容易占用大量存储,注意 quota
- LoRA 太多会难管理,需要客户面板
- 客户敏感数据处理必须小心(合规问题)
关键交付物
M5-service-catalog.md(下一版可以写):
- 微调服务价目表
- Spot API 定价
- 客户订单流程
- SLA 承诺(微调按时完成率 ≥ 90%)