GPU Compute Plans
04 场景演算S0 production plan

06 · M5 机器 · 弹性池 + 微调训练

06 · M5 机器 · 弹性池 + 微调训练

定位

多用途弹性机,跑三件事

  1. LoRA / QLoRA 微调训练(客户付费服务)
  2. 抢占实例池(低价 3-4 折 API)
  3. 内部工具 / 关联团队使用(消化闲置)
  • 单机 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/卡时
  • 微调完成后自动上架为客户私有模型(+推理服务费)

订单流程

  1. 客户上传数据集(JSONL 格式)
  2. 客户选模型 + 训练参数
  3. 平台排队(当天完成 or 次日)
  4. 训练完成 → 存 checkpoint → 上架 LoRA API
  5. 客户自己的 API 就能用微调后模型

B. 抢占实例 API

卖点:不需要 SLA 的场景 3-4 折价格

目标客户

  • 批量任务(数据打标、文本摘要)
  • 异步任务(不在线服务)
  • 试用/测试
  • 学生党

技术实现

  • M5 空闲时跑 Qwen2.5-14B AWQ TP=8(8 卡全用,最大吞吐)
  • 客户传 X-Priority: spot header
  • 训练任务来了 → 抢占 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:有训练任务

收到订单后

  1. Nginx 网关标记 M5 端口 8030 为 draining
  2. vLLM 完成排队请求(约 30-60 秒)
  3. systemctl stop vllm-m5-spot
  4. 启动训练任务

训练启动脚本(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%)

On this page