HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • 概览

    • K8s 实战学习实验室
    • 服务访问清单
    • K8s-Lab 学习总纲、仓库评估与专家路线图
  • 课程正文

    • 环境验证与第一课:认识你的真实集群
    • 第二课:kubectl apply 之后,到底发生了什么
    • 第三课:调度器如何选节点,为什么 Pod 会 Pending
    • 第四课:Kubernetes 网络、协议分层、VXLAN/IPIP/WireGuard 原理与排障
    • 第五课:NetworkPolicy、零信任网络与流量边界
    • 第六课:身份、认证、授权、准入与 ServiceAccount / RBAC 原理
    • 第七课:ConfigMap 与 Secret 注入模型、更新机制与安全边界
    • 第八课:存储持久化、PV / PVC / StorageClass 与 NFS 原理
    • 第九课:StatefulSet、Headless Service、稳定身份与存储原理
    • 第十课:探针、滚动更新、优雅终止与 PDB 原理
    • 第十一课:requests / limits、QoS、OOM 与驱逐原理
    • 第十二课:HPA、自动扩缩容、指标链路与副本伸缩原理
    • 第十三课:Service、EndpointSlice、kube-proxy、CoreDNS 与服务发现原理
    • 第十四课:Ingress-nginx、反向代理、Host / Path、NodePort 与北南向流量原理
    • 第十五课:HTTPS、TLS、SNI、证书信任与 Ingress 终止原理
    • 第十六课:cert-manager、Ingress 自动签发、证书生命周期与 ACME 工作流原理
    • 第十七课:ACME、Let's Encrypt、HTTP-01 / DNS-01、Orders / Challenges 与生产限制原理
    • 第十八课:大模型全生态,从数据到训练到部署到治理原理
    • 第十九课:大模型数据集、清洗、标注、切分、版本管理与质量治理原理
    • 第二十课:大模型训练、SFT、LoRA、Checkpoint、Adapter 与模型产物原理
    • 第二十一课:大模型推理、量化、KV Cache、vLLM、吞吐/延迟与部署发布链路原理
  • 实验操作记录

    • 本次仓库审查操作记录与命令原理
    • 本轮操作记录:环境验证、集群基线盘点与故障样本采集
    • 本轮操作记录:kubectl apply 主链路实验
    • 本轮操作记录:调度实验与 Pending 排查
    • 本轮操作记录:Kubernetes 网络原理、协议对比与调试实验
    • 本轮操作记录:NetworkPolicy 与零信任网络实验
    • 本轮操作记录:身份、认证、授权、准入实验
    • 本轮操作记录:ConfigMap 与 Secret 注入、更新与安全边界实验
    • 本轮操作记录:存储持久化、PV / PVC / StorageClass 与 NFS 实验
    • 本轮操作记录:StatefulSet、Headless Service 与稳定身份实验
    • 本轮操作记录:探针、滚动更新、优雅终止与 PDB 实验
    • 本轮操作记录:资源模型、QoS、OOM 与 CPU 节流实验
    • 本轮操作记录:HPA 自动扩缩容实验
    • 本轮操作记录:Service、EndpointSlice、CoreDNS 与服务发现排障实验
    • 本轮操作记录:Ingress-nginx、NodePort 与北南向流量实验
    • 本轮操作记录:HTTPS、TLS、自签证书与 Ingress 实验
    • 本轮操作记录:cert-manager 安装、CA 签发与 Ingress 自动证书实验
    • 本轮操作记录:ACME staging、HTTP-01 失败样本与排障实验
    • 本轮操作记录:大模型全生态与基础原理科普文撰写
    • 本轮操作记录:大模型数据集样本与治理文档编写
    • 本轮操作记录:大模型训练与模型产物概念文撰写
    • 本轮操作记录:大模型推理与服务发布概念文撰写

训练模块 — 功能设计与页面规划

一、训练在平台中的定位

用户的核心需求:
  "我有一堆客服对话数据,想让通用大模型变成我的专属客服模型"
  "我有行业文档,想让模型说我们行业的术语"
  "通用模型回答不够好,我想让它按我的风格回答"

平台提供:
  选基座 → 传数据 → 点开始 → 等完成 → 一键部署
  用户不需要懂 PyTorch、不需要有 GPU、不需要写训练代码

二、训练方式

2.1 方式对比

方式原理训练参数量显存需求训练时间效果适用场景
LoRA冻结原模型,只训练低秩矩阵原始的 0.1-1%低(7B→8GB)快好绝大多数场景
QLoRALoRA + 4bit 量化基座同 LoRA更低(7B→4GB)稍快接近 LoRAGPU 显存有限
全量微调更新所有参数100%极高(7B→28GB+)慢最好大预算/追求极致
Prompt Tuning只训练 prompt 向量极少极低极快一般快速实验
RLHF/DPO基于人类偏好对齐取决于方法高慢对齐人类偏好安全/风格对齐

2.2 为什么 LoRA 是首选?

全量微调 7B 模型:
  模型参数: 7B × 2 bytes (FP16) = 14GB
  梯度:     7B × 2 bytes = 14GB
  优化器:   7B × 8 bytes (Adam) = 56GB
  总计:     ~84GB → 需要 A100 80G

LoRA 微调 7B 模型:
  基座模型 (冻结): 14GB
  LoRA 矩阵:       ~50MB (rank=16)
  梯度+优化器:      ~200MB
  总计:             ~15GB → A10 24G 就够

LoRA 原理:
  原始权重矩阵 W (4096×4096) — 冻结不动
  新增两个小矩阵: A (4096×16) × B (16×4096)
  推理时: output = W·x + A·B·x
  
  只训练 A 和 B,参数量从 16M 降到 131K(降低 99.2%)
  但效果能达到全量微调的 90-95%

2.3 DPO 对齐训练

场景: 模型能回答问题了,但有时候回答不够好
     比如: 太啰嗦、语气不对、格式不好

DPO (Direct Preference Optimization) 流程:
  1. 准备偏好数据:
     问题 + 好的回答(chosen) + 差的回答(rejected)
  2. 训练目标:
     让模型更倾向于生成 chosen 风格的回答
     远离 rejected 风格

数据格式:
  {"prompt": "退货流程是什么",
   "chosen": "退货流程:\n1. 打开订单页...\n2. 点击退货...",
   "rejected": "你好亲,退货的话要看具体情况呢,一般来说是这样的...(太啰嗦)"}

三、训练全流程

┌────────┐    ┌────────┐    ┌────────┐    ┌────────┐    ┌────────┐
│ 1.选模型 │───→│ 2.选数据│───→│ 3.配参数│───→│ 4.训练  │───→│ 5.评估  │
└────────┘    └────────┘    └────────┘    └────────┘    └────────┘
                                              │              │
                                              ▼              ▼
                                         ┌────────┐    ┌────────┐
                                         │ 6.部署  │←──│ 7.对比  │
                                         └────────┘    └────────┘

步骤 1: 选择基座模型

可微调的基座模型:

模型                参数    LoRA 显存   训练速度         推荐场景
Qwen2.5-1.5B       1.5B   3GB        极快(5min/epoch)  快速实验/轻量场景
Qwen2.5-7B         7B     8GB        快(20min/epoch)   主力选择
Qwen2.5-14B        14B    16GB       中(40min/epoch)   高质量需求
Qwen2.5-72B        72B    多卡       慢(3h/epoch)      顶级需求
Llama-3.2-3B       3B     5GB        快(10min/epoch)   英文场景
CodeLlama-7B       7B     8GB        快(20min/epoch)   代码生成

选择建议:
  数据 < 1000条: 选 1.5B-3B,大模型容易过拟合
  数据 1000-10000条: 选 7B,性价比最高
  数据 > 10000条: 可选 14B+
  预算有限: QLoRA + 7B

步骤 2: 数据准备

数据要求:
  格式: JSONL 对话格式
  最少: 100 条(建议 500+)
  最多: 无上限(但要考虑费用)
  质量: 比数量更重要

数据质量检查清单:
  ✅ 格式正确且一致
  ✅ 回答质量高(不是敷衍回答)
  ✅ 覆盖主要场景(不要 90% 都是同一种问题)
  ✅ 回答风格一致(不要有的长有的短)
  ✅ 无矛盾数据(同一问题不同答案)
  ✅ 无敏感/有害内容
  ✅ Token 长度适中(过长会截断,过短学不到东西)

步骤 3: 训练参数配置

关键超参数:

┌─────────────────────────────────────────────────────────────┐
│ 参数              │ 默认值  │ 范围      │ 说明              │
├─────────────────────────────────────────────────────────────┤
│ epochs            │ 3      │ 1-10     │ 遍历数据集次数      │
│ learning_rate     │ 2e-5   │ 1e-6~1e-4│ 太大震荡,太小不动  │
│ batch_size        │ 4      │ 1-32     │ 受显存限制          │
│ lora_rank         │ 16     │ 4-128    │ 越大能力越强但越慢  │
│ lora_alpha        │ 32     │ rank的2倍│ 缩放因子           │
│ lora_target       │ 全部    │ 可选层   │ 对哪些层做 LoRA    │
│ max_seq_length    │ 2048   │ 512-8192 │ 最大序列长度        │
│ warmup_ratio      │ 0.1    │ 0-0.2    │ 学习率预热比例      │
│ gradient_accumulation│ 4   │ 1-16     │ 等效增大 batch_size │
│ weight_decay      │ 0.01   │ 0-0.1    │ 正则化防过拟合      │
└─────────────────────────────────────────────────────────────┘

预设方案(降低用户门槛):
  🟢 快速体验: epochs=1, lr=5e-5, rank=8       — 5分钟出结果
  🟡 标准训练: epochs=3, lr=2e-5, rank=16      — 推荐
  🔴 精细训练: epochs=5, lr=1e-5, rank=64      — 耗时但效果最好
  ⚙️ 自定义:   全部参数可调

步骤 4: 训练执行

K8s 执行流程:

用户提交训练请求
    │
    ▼
Training Service 创建 TrainingJob CR
    │
    ▼
Training Operator 检测到 CR
    │
    ├── 检查 GPU 资源 → 不足则排队
    │
    ▼
创建 K8s Job:
    ├── Init Container: 下载基座模型到本地(如果未缓存)
    ├── Main Container: 执行训练脚本
    │     ├── 加载数据集 (从 S3/NFS)
    │     ├── 加载基座模型
    │     ├── 配置 LoRA
    │     ├── 训练循环
    │     │     ├── 每 N 步: 记录 loss → Prometheus
    │     │     ├── 每 N 步: 保存 Checkpoint → S3
    │     │     └── 每 epoch: 在验证集上评估
    │     ├── 保存最终模型
    │     └── 上传模型到 S3
    └── Sidecar Container: 指标上报 (GPU 利用率/显存/进度)

    │
    ▼
训练完成 → 更新 TrainingJob CR Status
    │
    ▼
Training Service 通知用户(WebSocket/邮件/Webhook)

步骤 5: 模型评估

自动评估:
  1. 在验证集上计算 loss
  2. 生成样本回答 → 与参考答案对比(BLEU/ROUGE)
  3. 与基座模型对比 → 计算提升幅度

人工评估:
  1. 随机抽取 N 个问题
  2. 基座模型 + 微调模型各回答一次
  3. 用户盲评:哪个更好
  4. 统计胜率

步骤 6: 部署上线

微调产出:
  LoRA: adapter_model.safetensors (~50-200MB)
  
部署方式:
  方式 A: LoRA 挂载(推荐)
    基座模型共享 + LoRA 权重按需加载
    优点: 省显存,一张卡可服务多个 LoRA 模型
    vLLM 支持多 LoRA 并行推理

  方式 B: 合并部署
    基座 + LoRA 合并为完整模型
    优点: 推理速度略快
    缺点: 不能共享基座,每个模型占满显存

多 LoRA 共享推理:
  ┌──────────────────────────────┐
  │ vLLM 推理实例                 │
  │                              │
  │ 基座: Qwen2.5-7B (共享)      │
  │                              │
  │ LoRA A: 客服模型 (50MB)      │ ← 用户 A 的请求
  │ LoRA B: 法律模型 (50MB)      │ ← 用户 B 的请求
  │ LoRA C: 医疗模型 (50MB)      │ ← 用户 C 的请求
  │                              │
  │ 显存: 14GB + 150MB ≈ 14.2GB │
  └──────────────────────────────┘
  一张 A10 24G 可以同时服务 数十个 LoRA 模型

四、功能清单

4.1 训练任务管理

功能说明优先级
创建训练任务向导式:选模型→选数据→配参数→提交P0
任务列表查看所有训练任务(运行中/排队/完成/失败)P0
任务详情进度/指标/日志/产出P0
取消任务运行中的任务可取消P0
排队管理查看排队位置、预计等待时间P0
任务克隆基于已有任务快速创建新任务(改参数)P1
批量训练自动尝试多组超参数,选最优P2
定时训练每天/每周自动用新数据重新训练P2

4.2 训练监控

功能说明优先级
Loss 曲线实时训练 loss + 验证 loss 实时图表P0
学习率曲线学习率 warmup + decay 可视化P1
GPU 监控显存/利用率/温度 实时P0
训练日志实时日志流(WebSocket/SSE)P0
ETA 预估预计剩余时间P0
早停通知验证 loss 不再下降时通知用户P1
异常告警loss 异常飙升/NaN/OOM 告警P0

4.3 Checkpoint 管理

功能说明优先级
自动保存每 N 步/每 epoch 自动保存 checkpointP0
Checkpoint 列表查看所有保存点及其指标P0
从 Checkpoint 恢复断点续训(任务失败后恢复)P1
选择最优 Checkpoint不一定用最后一个,选验证 loss 最低的P1
Checkpoint 清理只保留 Top-N 个,自动清理旧的P1
Checkpoint 导出下载 checkpoint 到本地P1

4.4 评估与对比

功能说明优先级
自动评估训练完在验证集上自动跑评估P0
基座对比微调模型 vs 基座模型指标对比P0
版本对比v1 vs v2 微调模型对比P1
逐条对比抽样展示两个模型的回答P1
人工评测标注员盲评,统计胜率P2
A/B 测试线上分流,用真实流量评估P2

4.5 训练计费

计费项计算方式说明
GPU 时长GPU型号 × 卡数 × 秒数从 Job 启动到结束
数据存储GB × 天数据集和 Checkpoint
模型存储GB × 天产出的 LoRA 权重
费用预估公式:
  GPU 费用 = 单价/小时 × 预估时间

  预估时间(LoRA) ≈ 
    数据条数 × 平均Token数 × epochs
    ─────────────────────────────── × 1.2 (overhead)
    batch_size × tokens_per_second

  示例:
    10000 条 × 200 token × 3 epochs = 6,000,000 tokens
    batch_size=4 × 2000 tokens/s = 8000 tokens/s
    时间 = 6,000,000 / 8,000 × 1.2 = 15 分钟
    费用 = ¥5/小时 × 0.25小时 = ¥1.25

五、CRD 设计

5.1 TrainingJob CRD

apiVersion: ai.platform.io/v1
kind: TrainingJob
metadata:
  name: acmecorp-cs-finetune-003
  namespace: training
  labels:
    org-id: acmecorp
    user-id: user-123
spec:
  # ── 基座模型 ──
  baseModel:
    name: qwen2.5-7b-instruct
    source: registry                       # 从平台模型仓库拉取
    
  # ── 训练方式 ──
  method: lora                             # lora / qlora / full / dpo
  
  # ── 数据集 ──
  dataset:
    train: s3://datasets/acmecorp/cs-train.jsonl
    validation: s3://datasets/acmecorp/cs-eval.jsonl
    format: conversation                   # conversation / completion / dpo
    
  # ── 超参数 ──
  hyperparameters:
    epochs: 3
    learningRate: "2e-5"
    batchSize: 4
    gradientAccumulation: 4
    maxSeqLength: 2048
    warmupRatio: 0.1
    weightDecay: 0.01
    # LoRA 参数
    loraRank: 16
    loraAlpha: 32
    loraDropout: 0.05
    loraTargetModules: "all-linear"        # all-linear / qkv / specific
    
  # ── GPU 资源 ──
  resources:
    gpu:
      type: nvidia-a10
      count: 1
    memory: 32Gi
    
  # ── Checkpoint ──
  checkpoint:
    enabled: true
    saveSteps: 500                         # 每 500 步保存
    saveEpochs: true                       # 每 epoch 结束保存
    maxKeep: 3                             # 只保留最近 3 个
    path: s3://checkpoints/acmecorp-cs-003/
    
  # ── 输出 ──
  output:
    modelName: acmecorp-cs-v3
    path: s3://models/acmecorp/cs-v3/
    autoEval: true                         # 训练完自动评估
    autoDeploy: false                      # 不自动部署(需手动确认)
    
  # ── 通知 ──
  notification:
    onComplete: true
    onFailed: true
    webhook: https://hooks.slack.com/xxx
    
  # ── 优先级 ──  
  priority: normal                         # low / normal / high (高优先级插队)
  
  # ── 断点续训 ──
  resumeFrom: ""                           # 填 checkpoint 路径可断点续训

status:
  phase: Running                           # Queued/Initializing/Running/Evaluating/Completed/Failed
  queuePosition: 0                         # 排队位置(0=不排队)
  
  progress:
    currentEpoch: 2
    totalEpochs: 3
    currentStep: 1250
    totalSteps: 1875
    percentage: 67
    
  metrics:
    trainLoss: 0.4523
    evalLoss: 0.5102
    learningRate: 0.000018
    tokensPerSecond: 2150
    
  resources:
    gpuUtilization: 92
    gpuMemoryUsed: "15.2Gi"
    gpuMemoryTotal: "24Gi"
    
  timing:
    startedAt: "2026-04-09T14:00:00Z"
    eta: "2026-04-09T14:45:00Z"
    elapsed: "30m"
    
  checkpoints:
    - step: 500
      path: s3://checkpoints/acmecorp-cs-003/step-500/
      evalLoss: 0.62
    - step: 1000
      path: s3://checkpoints/acmecorp-cs-003/step-1000/
      evalLoss: 0.53
      
  output:
    modelPath: ""                          # 完成后填入
    modelSize: ""
    evalResults: {}
    
  conditions:
    - type: GPUAllocated
      status: "True"
    - type: DataLoaded
      status: "True"
    - type: Training
      status: "True"

六、页面设计

6.1 页面总览

训练中心
│
├── 训练任务列表
├── 创建训练任务(4步向导)
│   ├── Step 1: 选择基座模型
│   ├── Step 2: 选择数据集
│   ├── Step 3: 配置训练参数
│   └── Step 4: 确认并提交
├── 训练监控看板
├── Checkpoint 管理
├── 模型评估对比
└── 训练费用明细

6.2 训练任务列表

┌──────────────────────────────────────────────────────────────────┐
│ 训练中心                                        [+ 创建训练任务]  │
├──────────────────────────────────────────────────────────────────┤
│ 筛选: [全部状态 ▼]  [全部模型 ▼]  [最近30天 ▼]                    │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│ 🟡 排队中  客服模型 v4                                  04-09    │
│   基座: Qwen2.5-7B │ LoRA │ 12,450条 │ 排队位置: #2              │
│   预计等待: ~30分钟                              [取消]           │
│                                                                  │
│ 🟢 运行中  客服模型 v3                                  04-09    │
│   基座: Qwen2.5-7B │ LoRA │ 12,450条 │ Epoch 2/3 (67%)          │
│   [████████████████████░░░░░░░░░] ETA: 15min    [查看] [取消]    │
│   loss: 0.45 │ GPU: 92% │ A10 × 1                               │
│                                                                  │
│ ✅ 已完成  客服模型 v2                                  04-08    │
│   基座: Qwen2.5-7B │ LoRA │ 10,200条 │ 耗时: 42分钟             │
│   eval_loss: 0.38 │ 费用: ¥3.50      [查看] [部署] [克隆]        │
│                                                                  │
│ ✅ 已完成  产品问答 v1                                  04-07    │
│   基座: Qwen2.5-14B │ LoRA │ 5,000条 │ 耗时: 1小时15分          │
│   eval_loss: 0.41 │ 费用: ¥8.20      [查看] [部署] [克隆]        │
│                                                                  │
│ ❌ 失败    代码助手 v1                                  04-06    │
│   基座: CodeLlama-7B │ LoRA │ 3,000条 │ OOM 显存不足             │
│   原因: batch_size=8 超出 A10 显存    [查看] [克隆并修改]         │
│                                                                  │
│                                                    第 1/3 页  >  │
└──────────────────────────────────────────────────────────────────┘

6.3 创建训练任务 — Step 1: 选择基座模型

┌──────────────────────────────────────────────────────────────────┐
│ 创建训练任务                                                      │
│ ① 选择模型 → ② 选择数据 → ③ 配置参数 → ④ 确认提交               │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│ 选择基座模型:                                                    │
│                                                                  │
│ ┌─ 推荐 ─────────────────────────────────────────────────────┐  │
│ │                                                             │  │
│ │  ● Qwen2.5-7B-Instruct           ★ 推荐                   │  │
│ │    7B 参数 │ 中文/英文 │ A10 即可                           │  │
│ │    适合: 大多数中文微调场景,性价比最高                       │  │
│ │    训练速度: ~20min/epoch (10K条数据)                       │  │
│ │                                                             │  │
│ │  ○ Qwen2.5-1.5B-Instruct         快速实验                  │  │
│ │    1.5B 参数 │ 显存需求极低                                 │  │
│ │    适合: 数据少(<1000条)、快速验证思路                       │  │
│ │                                                             │  │
│ │  ○ Qwen2.5-14B-Instruct          高质量                    │  │
│ │    14B 参数 │ 需要 A100 40G                                │  │
│ │    适合: 数据充足、追求更好效果                              │  │
│ │                                                             │  │
│ └─────────────────────────────────────────────────────────────┘  │
│                                                                  │
│ ┌─ 更多模型 ──────────────────────────────────────────────────┐  │
│ │  ○ Llama-3.2-3B          英文场景                           │  │
│ │  ○ Qwen2.5-72B           顶级效果,需多卡                   │  │
│ │  ○ CodeLlama-7B          代码生成专用                       │  │
│ └─────────────────────────────────────────────────────────────┘  │
│                                                                  │
│ 训练方式:                                                        │
│   ● LoRA (推荐,性价比高)                                        │
│   ○ QLoRA (显存更省,速度略慢)                                    │
│   ○ 全量微调 (需要大显存,效果最好)                               │
│                                                                  │
│                                              [下一步: 选数据 →]  │
└──────────────────────────────────────────────────────────────────┘

6.4 创建训练任务 — Step 3: 配置参数

┌──────────────────────────────────────────────────────────────────┐
│ ① 选择模型 → ② 选择数据 → ③ 配置参数 → ④ 确认提交               │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│ 训练参数预设:                                                    │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐            │
│ │ 🟢 快速   │ │ 🟡 标准  │ │ 🔴 精细  │ │ ⚙️ 自定义 │            │
│ │ 5分钟     │ │ 30分钟   │ │ 2小时    │ │ 全部可调  │            │
│ │ ¥0.50    │ │ ¥2.50   │ │ ¥10     │ │          │            │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘            │
│                                                                  │
│ ═══ 当前: 标准方案 ═══                                           │
│                                                                  │
│ 基础参数:                                                        │
│   训练轮数 (epochs):     [3_____]  少=欠拟合 多=过拟合            │
│   学习率 (learning_rate): [2e-5___]  控制每步更新幅度             │
│   批次大小 (batch_size):  [4_____]  受显存限制                    │
│                                                                  │
│ LoRA 参数:                                                       │
│   秩 (rank):             [16____]  4=轻量 64=强力                │
│   缩放 (alpha):          [32____]  通常设为 rank 的 2 倍          │
│   Dropout:               [0.05__]  正则化                        │
│   目标层:                [全部线性层 ▼]                           │
│                                                                  │
│ 高级参数:                                         [展开 ▼]       │
│ ┌──────────────────────────────────────────────────────────┐     │
│ │ 最大序列长度:        [2048___]                            │     │
│ │ 梯度累积步数:        [4______]  等效 batch_size=16        │     │
│ │ 预热比例:            [0.1____]                            │     │
│ │ 权重衰减:            [0.01___]                            │     │
│ │ 学习率调度:          [cosine ▼]  linear/cosine/constant  │     │
│ │ 早停策略:            [验证loss不降3次 ▼]                   │     │
│ │ 混合精度:            [BF16 ▼]                             │     │
│ │ 梯度裁剪:            [1.0____]                            │     │
│ └──────────────────────────────────────────────────────────┘     │
│                                                                  │
│ Checkpoint:                                                      │
│   ☑ 自动保存 每 [500] 步  保留最近 [3] 个                        │
│   ☑ 每个 Epoch 结束时保存                                        │
│                                                                  │
│ GPU 资源:                                                        │
│   GPU 型号: [A10 24G ▼]  数量: [1 ▼]                             │
│   当前排队: 0 个任务                    预计立即开始               │
│                                                                  │
│                                     [← 上一步] [下一步: 确认 →]  │
└──────────────────────────────────────────────────────────────────┘

6.5 创建训练任务 — Step 4: 确认提交

┌──────────────────────────────────────────────────────────────────┐
│ ① 选择模型 → ② 选择数据 → ③ 配置参数 → ④ 确认提交               │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│ 任务名称: [客服模型 v3_____________________]                     │
│                                                                  │
│ ── 确认信息 ──                                                   │
│                                                                  │
│ 基座模型:  Qwen2.5-7B-Instruct                                  │
│ 训练方式:  LoRA (rank=16, alpha=32)                              │
│ 训练数据:  customer-service v2 (12,294 条, 1.51M tokens)         │
│ 验证数据:  customer-service-eval (500 条)                        │
│ 训练轮数:  3 epochs                                              │
│ GPU:      A10 24G × 1                                           │
│                                                                  │
│ ── 费用预估 ──                                                   │
│                                                                  │
│ ┌──────────────────────────────────────────────────────────┐     │
│ │ 训练时间: ~35 分钟                                        │     │
│ │ GPU 费用: ¥5.00/小时 × 0.58小时 = ¥2.92                  │     │
│ │ 数据存储: ¥0.03                                           │     │
│ │ 模型存储: ¥0.01/天                                        │     │
│ │ ─────────────────────────────────                        │     │
│ │ 预估总计: ¥2.96                   当前余额: ¥156.80       │     │
│ └──────────────────────────────────────────────────────────┘     │
│                                                                  │
│ 训练完成后:                                                      │
│   ☑ 自动在验证集上评估                                           │
│   ☐ 自动部署为推理服务                                           │
│   ☑ 邮件通知训练结果                                              │
│   ☐ Webhook 通知                                                 │
│                                                                  │
│                              [← 上一步] [提交训练 (预估 ¥2.96)]  │
└──────────────────────────────────────────────────────────────────┘

6.6 训练监控看板

┌──────────────────────────────────────────────────────────────────┐
│ 客服模型 v3  训练监控              状态: 🟢 Training  Epoch 2/3  │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│ 进度: [████████████████████░░░░░░░░░] 67%  Step 1250/1875       │
│ 已用时: 23分钟  │  预计剩余: 12分钟  │  已花费: ¥1.92             │
│                                                                  │
│ ── Loss 曲线 ──                                                  │
│                                                                  │
│  1.2│╲                                                          │
│  1.0│ ╲                              train_loss ──              │
│  0.8│  ╲    ╱╲                       eval_loss  - -              │
│  0.6│   ╲╱╱  ╲╱╲                                               │
│  0.4│          ╲  ╲─────────                                    │
│  0.2│           ─  ─ ─ ─ ─ ─ ─                                 │
│  0.0│                                                            │
│     └──────────────────────────────────────                      │
│     Step 0    250    500    750    1000    1250                  │
│               ↑              ↑                                   │
│           Epoch 1 结束   Epoch 2 结束                            │
│                                                                  │
│ ── 实时指标 ──                                                   │
│                                                                  │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐            │
│ │ Train Loss│ │ Eval Loss│ │ 学习率    │ │ 速度      │            │
│ │  0.4523  │ │  0.5102  │ │ 1.8e-5   │ │ 2150 t/s │            │
│ │ ↓ 持续下降│ │ ↓ 持续下降│ │ Cosine   │ │ 稳定     │            │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘            │
│                                                                  │
│ ── GPU 监控 ──                                                   │
│                                                                  │
│ GPU 利用率:  [█████████░] 92%                                    │
│ 显存使用:    [██████░░░░] 15.2 / 24 GB                           │
│ GPU 温度:    68°C                                                │
│                                                                  │
│ ── Checkpoint ──                                                 │
│                                                                  │
│ Step 500:  eval_loss=0.62  [恢复] [导出] [部署]                  │
│ Step 1000: eval_loss=0.53  [恢复] [导出] [部署]  ← 目前最优      │
│                                                                  │
│ ── 日志 ──                                                       │
│                                                                  │
│ 14:23:01 Step 1250/1875 loss=0.4523 lr=1.8e-5 tokens/s=2150    │
│ 14:22:58 Step 1249/1875 loss=0.4531 lr=1.8e-5 tokens/s=2148    │
│ 14:22:55 Step 1248/1875 loss=0.4519 lr=1.8e-5 tokens/s=2155    │
│ ...                                          [查看完整日志 →]    │
│                                                                  │
│                            [暂停] [取消] [调整参数(下个Epoch)]    │
└──────────────────────────────────────────────────────────────────┘

6.7 训练完成页

┌──────────────────────────────────────────────────────────────────┐
│ ✅ 客服模型 v3  训练完成                                          │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│ ── 训练摘要 ──                                                   │
│                                                                  │
│ 基座模型:    Qwen2.5-7B-Instruct                                │
│ 训练方式:    LoRA (rank=16)                                      │
│ 训练数据:    12,294 条                                           │
│ 训练时间:    35 分钟 (3 epochs, 1875 steps)                      │
│ 总费用:      ¥2.92                                               │
│                                                                  │
│ ── 评估结果 ──                                                   │
│                                                                  │
│ ┌────────────────┬──────────┬──────────┬────────────┐            │
│ │ 指标            │ 基座模型  │ 微调后   │ 提升        │            │
│ ├────────────────┼──────────┼──────────┼────────────┤            │
│ │ Eval Loss      │ 1.23     │ 0.38     │ 🟢 -69%    │            │
│ │ BLEU           │ 0.12     │ 0.51     │ 🟢 +325%   │            │
│ │ ROUGE-L        │ 0.35     │ 0.68     │ 🟢 +94%    │            │
│ │ 回答准确率      │ 45%      │ 87%      │ 🟢 +93%    │            │
│ └────────────────┴──────────┴──────────┴────────────┘            │
│                                                                  │
│ ── 样本展示 (随机3条) ──                                         │
│                                                                  │
│ Q: "快递没收到怎么办?"                                          │
│ 基座: 如果您的快递未收到,建议您联系快递公司查询物流状态...        │
│ 微调: 请您先在订单详情中查看物流状态。如果显示已签收但您未收到:   │
│       1. 查看是否放在快递柜或驿站                                │
│       2. 联系配送员确认 ...                                      │
│                                                                  │
│ ── 产出模型 ──                                                   │
│                                                                  │
│ 模型名称:   acmecorp-cs-v3                                       │
│ 类型:       LoRA adapter (156MB)                                 │
│ 最优 Checkpoint: Step 1500 (eval_loss=0.38)                      │
│                                                                  │
│ 下一步:                                                          │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐              │
│ │ 🚀 部署上线   │ │ 📊 详细评估   │ │ 🔄 继续训练   │              │
│ │ 一键部署为    │ │ 上传评测集    │ │ 增加数据或    │              │
│ │ 推理服务      │ │ 深入测试     │ │ 调整参数继续  │              │
│ └──────────────┘ └──────────────┘ └──────────────┘              │
└──────────────────────────────────────────────────────────────────┘

七、异常处理

7.1 常见训练失败及处理

错误原因平台自动处理用户建议
OOM (Out of Memory)batch_size 太大 / 序列太长自动提示降低参数减小 batch_size 或 max_seq_length
Loss NaN学习率太大 / 数据有问题自动停止并告警降低 lr 或检查数据
Loss 不收敛学习率太小 / 数据太少30min 不降自动提醒增大 lr 或增加数据
过拟合train_loss↓ eval_loss↑早停策略减少 epochs / 增加 dropout
GPU 故障硬件错误自动从 Checkpoint 恢复到新 GPU无需操作
节点掉线网络/硬件故障自动迁移到其他节点续训无需操作
磁盘满Checkpoint 太多自动清理旧 Checkpoint减少保存频率

7.2 自动恢复机制

训练 Pod 被驱逐/节点故障:
  1. Training Operator 检测到 Pod 失败
  2. 查找最近的 Checkpoint (S3 上)
  3. 创建新 Pod,挂载 Checkpoint
  4. 从断点继续训练
  5. 用户端看到: "训练中断,已自动恢复 (从 step 1000 继续)"

对用户透明,不需要手动操作

八、页面汇总

序号页面路由优先级
1训练任务列表/training/jobsP0
2创建任务-选模型/training/create/modelP0
3创建任务-选数据/training/create/dataP0
4创建任务-配参数/training/create/configP0
5创建任务-确认/training/create/confirmP0
6训练监控看板/training/jobs/:id/monitorP0
7训练完成页/training/jobs/:id/resultP0
8Checkpoint 管理/training/jobs/:id/checkpointsP1
9训练日志/training/jobs/:id/logsP0
10模型评估对比/training/evaluateP1
11训练费用明细/training/billingP1
12超参搜索(批量训练)/training/hyperparameter-searchP2