跳转至

X. E2E Training: 在 V100 上炼丹

背景

2017 年发布的 V100 是英伟达第一代 Tensor Core 架构,在当年是训练大模型的主力。虽然现在看起来有点老了,但便宜啊。本题要求你在 DGX-1 V100 机器上预训练一个语言模型,在有限的卡时内,尽可能炼出效果最好的丹。

硬件环境

  • GPU: NVIDIA V100 16GB × 8(DGX-1 架构,NVLink-1 。注意,这一代没有 NVSwitch,可以搜索一下 GPU 互联结构)
  • 网络: 4 × 100GbE,支持 RoCE,多轨拓扑(multi-rail,复习一下小北问答)

资源限制

每人可使用 36 小时 × 8 卡 = 288 卡时。怎么分配随你——可以 16 卡跑 18 小时、也可以 32 卡跑 9 小时,以此类推,但是不允许只开单节点运行。

我们给大家准备了 6 个测试节点,测试节点上每个任务最长时间是 20 分钟,并且会使用 fair 调度:已经运行过任务时间越长,提交新任务时优先级越低。

多机训练的调度方式是通过 kubectl。大家用 HPCGame CLI 安装之后,就可以直接用kubectlJobSetJobSet 中选择 V100 节点,添加 4 个 nad v100-roce v100-roce-1 v100-roce-2 v100-roce-3 即可。具体的使用方法稍后会有说明。

任务

从零开始预训练一个 GPT 风格的语言模型。

约束条件

  • 模型规模: ≥ 0.5B 参数,必须有至少 10 层,FFN(MLP)的中间维度不允许>hidden size 的 4 倍。
  • Tokenizer: 必须使用 Qwen/Qwen3-0.6B 的 tokenizer
  • 禁止使用预训练权重: 必须从随机初始化开始训练,不能加载任何现有 checkpoint 做继续预训练或蒸馏

架构细节、超参数、数据配比由你自己决定。

数据

我们提供了 FineWeb 数据集:

  • 原始 JSON: /data/fineweb/
  • Megatron 格式: /data/megatron_data/fineweb_pretrain_text_document

可以自带数据,但考虑到传输带宽,大概率传不完,建议直接用我们提供的。

镜像

提供适配 V100 的 Megatron-LM 镜像:

cr.hpc.lcpu.dev/hpcgame/megatron-v100:latest

如需其他框架,请自行准备镜像。推荐的 base image:

crmirror.lcpu.dev/nvcr.io/nvidia/pytorch:24.12-py3

Baseline

我们提供了一个 Qwen3-1.7B 架构的训练脚本作为参考:/data/baseline/run_pretrain_qwen3_1.7B.sh

这个 baseline 可以正常跑起来,但因为模型太大、训练时间不够,最终效果会很差(benchmark 基本是零分)。仅供验证环境和参考代码结构用。

评分 (满分 200 分)

项目 分值 说明
训练效率 100 平均 MFU(基于 V100 FP16 理论峰值 125 TFLOPS),达到 0.35 为满分,0.2为0分,线性插值
模型效果 100 在 lm-evaluation-harness 多个任务上的综合表现,以 GPT-2 124M 为满分基准

模型效果评测会跑多个不同的 benchmark 任务,具体任务列表赛后公布。不建议在任何特定评测集上针对性训练。

提交内容

  1. 训练 log: 完整的 stdout,用于验证 MFU 和训练过程
  2. 模型 checkpoint: HuggingFace 格式,要求能用 transformers 库直接加载推理。 handout 里有从 Megatron 转换成 HF 格式的 py 脚本
  3. checkpoint 路径: 告诉我们模型存在哪
  4. 方案说明: 简要描述你的模型结构、关键超参、用了什么优化技巧

模型格式要求

提交的模型必须能通过以下方式直接加载:

from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("/path/to/your/model")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")

如果你用 Megatron 训练,需要自行转换成 HuggingFace 格式。