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 安装之后,就可以直接用kubectl开JobSet。JobSet 中选择 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 任务,具体任务列表赛后公布。不建议在任何特定评测集上针对性训练。
提交内容¶
- 训练 log: 完整的 stdout,用于验证 MFU 和训练过程
- 模型 checkpoint: HuggingFace 格式,要求能用
transformers库直接加载推理。 handout 里有从 Megatron 转换成 HF 格式的 py 脚本 - checkpoint 路径: 告诉我们模型存在哪
- 方案说明: 简要描述你的模型结构、关键超参、用了什么优化技巧
模型格式要求¶
提交的模型必须能通过以下方式直接加载:
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("/path/to/your/model")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")
如果你用 Megatron 训练,需要自行转换成 HuggingFace 格式。