多节点集群实战:Nemotron-4-340B-Instruct用NeMo+Slurm搭建推理服务的完整教程
【免费下载链接】Nemotron-4-340B-Instruct项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/Nemotron-4-340B-Instruct
本文带你用NeMo Framework和Slurm,为 NVIDIA 3400 亿参数开源大模型Nemotron-4-340B-Instruct搭建一个多节点集群推理服务:从获取模型、配置张量/流水线并行,到提交双节点作业,共 4 个步骤,适合拥有 H100/A100 集群、想自建大模型推理服务的新手工程师。
🧠 Nemotron-4-340B-Instruct 是什么?
Nemotron-4-340B-Instruct 是 NVIDIA 开源的 decoder-only Transformer 大语言模型,由 Nemotron-4-340B-Base 经 SFT、DPO 和 RPO 多轮对齐得到,专为英语单轮/多轮对话场景优化,支持 4,096 token 上下文,在数学推理、代码生成与指令跟随上表现突出。
核心架构参数(可在仓库根目录的model_config.yaml中查证):
| 参数 | 数值 | 说明 |
|---|---|---|
| 总参数量 | 340B | 需要多节点 GPU 才能 BF16 推理 |
| 层数 | 96 | num_layers |
| 隐藏维度 | 18,432 | hidden_size |
| 注意力头 | 96 | 采用 GQA(8 组 KV)+ RoPE |
| 激活函数 | squared-relu | Megatron 风格 FFN |
| 推理精度 | BF16 | trainer.precision=bf16 |
🖥️ 硬件需求:要准备几张 GPU?
BF16 推理的最低配置如下:
- 8× H200(单节点)
- 16× H100(双节点)
- 16× A100 80GB(双节点)
本教程以2 节点 × 8 卡(16 张 H100/A100)为例,并行策略为:节点内张量并行 TP=8 + 节点间流水线并行 PP=2。
💡 为什么这样分?张量并行需要 NVLink 级的高速通信,放在节点内部最划算;跨节点带宽有限,用流水线并行把 96 层按节点切开更稳妥。
📦 先认识模型文件:仓库里都有什么?
克隆仓库后,你会看到以下关键文件:
| 文件 / 目录 | 作用 |
|---|---|
README.md | 模型介绍、评测结果与官方部署示例 |
model_config.yaml | 模型架构与训练配置(96 层、hidden 18432、bf16) |
model_weights/ | Zarr 分片格式的模型权重,按层组织 |
common.pt | 未分片的公共参数 |
8223bf8e…_megatron_2.model/eb5528fd…_megatron_2.model | SentencePiece 分词器文件 |
LICENSE | NVIDIA Open Model License(可商用) |
model_weights/内部按权重名分目录,例如model.decoder.layers.self_attention.linear_qkv.weight/存放各层 QKV 投影矩阵的分片,model.decoder.layers.mlp.linear_fc1.weight/存放 MLP 第一层矩阵,model.embedding.word_embeddings.weight/存放词嵌入。96 层权重被切成 96 个分片,加载时由 NeMo 自动重组——这正是它能被多节点分布式加载的关键。
🚀 第一步:获取 Nemotron-4-340B-Instruct 模型权重
git clone https://gitcode.com/hf_mirrors/ai-gitcode/Nemotron-4-340B-Instruct⚠️ 务必将模型目录放在所有节点都可访问的共享文件系统(NFS、Lustre 等)上,这是 Slurm 多节点任务能同时读到权重的前提。
⚙️ 第二步:NeMo 推理服务启动脚本
在 NeMo 容器(镜像nvcr.io/nvidia/nemo:24.05)中,启动脚本nemo_inference.sh的核心命令是:
/usr/bin/python3 /opt/NeMo/examples/nlp/language_modeling/megatron_gpt_eval.py \ gpt_model_file=$NEMO_FILE \ server=True tensor_model_parallel_size=8 \ trainer.precision=bf16 pipeline_model_parallel_size=2 \ trainer.devices=8 trainer.num_nodes=2 \ web_server=False port=1424 &关键参数速查:
| 参数 | 取值 | 含义 |
|---|---|---|
tensor_model_parallel_size | 8 | 张量并行,一层权重切到 8 张卡(节点内) |
pipeline_model_parallel_size | 2 | 流水线并行,96 层分给 2 个节点 |
trainer.num_nodes/trainer.devices | 2 / 8 | 2 节点 × 每节点 8 卡 |
trainer.precision | bf16 | 使用 BFloat16 精度 |
port | 1424 | 推理服务 HTTP 端口 |
脚本还内置了一个等待逻辑:只有主节点(SLURM_NODEID=0)会轮询探测1424端口,确认 2 个节点全部加载完成后,再运行客户端测试脚本call_server.py,最后清理进程。
📅 第三步:用 Slurm 提交双节点作业
新建一个 sbatch 提交脚本,把整个流程交给集群调度:
#!/bin/bash #SBATCH -N 2 #SBATCH --ntasks-per-node=8 #SBATCH --gpus-per-node=8 #SBATCH -J nemotron-340b MODEL=<模型仓库路径> CONTAINER="nvcr.io/nvidia/nemo:24.05" MOUNTS="--container-mounts=<脚本目录>:/scripts,${MODEL}:/model" srun -o out.log -e err.log \ --container-image="$CONTAINER" $MOUNTS \ bash -c "bash /scripts/nemo_inference.sh /model"参数解读:
-N 2:申请 2 个计算节点--ntasks-per-node=8/--gpus-per-node=8:每节点 8 个进程、独占 8 张 GPU--container-image:用 Slurm 的容器插件直接在容器内启动,无需手工部署环境
提交后,srun会在 2 个节点各拉起 8 个进程,NeMo 负责跨节点通信与权重加载,通常十几分钟内服务就绪。
🤖 第四步:调用 Nemotron-4-340B-Instruct 推理服务
服务就绪后,客户端只需向http://localhost:1424/generate发送一个 PUT 请求。注意它采用专用的对话模板:
<extra_id_0>System <extra_id_1>User {你的问题} <extra_id_1>Assistant💡 官方建议:System 部分留空,直接写用户问题即可。
Python 客户端(call_server.py的核心)非常短:
resp = requests.put('http://localhost:1424/generate', json={ "sentences": [prompt], "tokens_to_generate": 1024, "temperature": 1.0, "end_strings": ["</s>", "<extra_id_1>"], }) print(resp.json()["sentences"][0])多轮对话时,按<extra_id_1>User … <extra_id_1>Assistant交替拼接历史即可。
📊 模型能力一览
部署完成后,你可以参考以下基准(来自README.md评测结果)了解模型上限:
| 基准 | 分数 |
|---|---|
| MT-Bench(GPT-4 评审) | 8.22 / 10 |
| MMLU 0-shot | 78.7 |
| GSM8K 0-shot(数学) | 92.3 |
| HumanEval 0-shot(代码) | 73.2 |
| IFEval 指令遵循(严格) | 86.1 |
❓ 常见问题
- 怎么确认服务已就绪?启动脚本用
curl -X PUT轮询1424端口,连接成功即代表双节点都已完成权重加载。 - 能改成单节点 8×H200 吗?可以。把
tensor_model_parallel_size=8、pipeline_model_parallel_size=1、trainer.num_nodes=1,Slurm 侧改成-N 1即可。 - 商用有限制吗?模型采用 NVIDIA Open Model License,可免费商用、可发布衍生模型,NVIDIA 不主张对模型生成内容的所有权(详见仓库
LICENSE)。 - 上下文只有 4096?是的,该模型按 4,096 token 序列长度训练,长文任务请做好分段。
✅ 小结
只需 3 个脚本——NeMo 启动脚本、Slurm 提交脚本、Python 客户端——就能把Nemotron-4-340B-Instruct跑在双节点 16 卡集群上:TP=8 吃满节点内显存带宽,PP=2 横跨节点切分 96 层,BF16 精度下稳定对外提供/generate推理接口。掌握这套「NeMo + Slurm」组合,后续接入更多大模型推理服务也会事半功倍。
【免费下载链接】Nemotron-4-340B-Instruct项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/Nemotron-4-340B-Instruct
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考