Rocky9.2部署llama3.1-8b训练环境

总体流程总览

【无 GPU Linux / 跳板机】
  1. docker run 基础镜像(CPU模式)
  2. 容器内安装 Megatron-LM + 依赖
  3. 拷 tokenizer / 数据 / 脚本
  4. 验证“CPU 可运行”
  5. docker commit 固化镜像
  6. docker save 导出镜像

【有 GPU 服务器】
  7. docker load
  8. docker run --gpus all
  9. 验证 CUDA
  10. 启动训练

一、无 GPU 机器:启动基础容器(关键点)

⚠️ 注意:此阶段不要执行任何 GPU 相关命令

拉取官方镜像

docker pull nvcr.io/nvidia/pytorch:25.04-py3 

启动容器

#/bin/bash

export MY_CONTAINER="llama3_megatron"
num=`docker ps -a|grep -w "$MY_CONTAINER$"|wc -l`
echo $num $MY_CONTAINER
if [ 0 -eq $num ];then
docker run --runtime=runc -it \
  -v /home/workspace/megatron:/workspace/megatron \
  -v /home/workspace/dataset:/workspace/dataset \
  -v /home/workspace/checkpoints:/workspace/checkpoints \
  nvcr.io/nvidia/pytorch:25.04-py3
else
  docker start $MY_CONTAINER
  docker exec -ti $MY_CONTAINER /bin/bash
fi

✔ 不加 --gpus
✔ 没 GPU 也没问题
✔ 这是 CPU 模式容器

注意:因为docker默认参数/etc/docker/daemon.json中我设置的是"default-runtime": "nvidia",所以运行CPU容器时需要指定--runtime为runc,不然会报错

二、容器内:安装 Megatron-LM(一次性)

安装一些常用指令

apt update 
apt install -y \
    vim less wget curl git unzip htop tmux bash-completion \
    ca-certificates numactl hwloc net-tools \
    pciutils iproute2 iputils-ping procps \
    build-essential python3-dev 
# 清空缓存包
apt clean 
cd /workspace
git clone https://github.com/NVIDIA/Megatron-LM.git
cd Megatron-LM

安装依赖(CPU 环境完全可装):

pip install --no-cache-dir \
  sentencepiece \
  regex \
  einops \
  transformers \
  datasets

✔ 不会触发 CUDA
✔ 不依赖 GPU

三、准备 tokenizer(完全离线)

1️⃣ Windows 上准备(一次性)

下载:

git clone https://gitee.com/hf-models/Llama-3.1-8B.git

2️⃣ 拷贝到无 GPU Linux

mkdir -p /workspace/checkpoints/Llama-3.1-8B_tokenizer
cp special_tokens_map.json /workspace/checkpoints/Llama-3.1-8B_tokenizer/
cp tokenizer_config.json /workspace/checkpoints/Llama-3.1-8B_tokenizer/
cp tokenizer.json /workspace/checkpoints/Llama-3.1-8B_tokenizer/

四、准备 fineweb小样本文本(不在 Linux 上联网)

✔ 推荐方案

👉 Windows 上生成文本 → 拷贝

download_fineweb.py

import os
from datasets import load_dataset
import json

# 启用国内镜像(可选)
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

# 加载 FineWeb 10B 样本(公开,无需 token)
dataset = load_dataset(
    "HuggingFaceFW/fineweb",
    name="sample-10BT",      # 小样本,适合测试
    split="train",
    streaming=True
)

samples = []
count = 0
max_samples = 1000_000

print("正在下载 FineWeb 前 100 万条...")
for sample in dataset:
    # FineWeb 的字段是 "text"
    samples.append({
        "text": sample["text"],
        "meta": {"source": "fineweb-sample-10BT"}
    })
    count += 1
    if count >= max_samples:
        break
    if count % 10_000 == 0:
        print(f"✅ 已获取 {count} 条")

# 保存为 JSONL(兼容 Pile 格式)
with open("fineweb_1000k.jsonl", "w", encoding="utf-8") as f:
    for s in samples:
        f.write(json.dumps(s, ensure_ascii=False) + "\n")

print("🎉 完成!数据已保存到 fineweb_1000k.jsonl")

五、容器内:生成 Megatron indexed dataset(CPU 即可)

cd /workspace/Megatron-LM
mkdir -p /workspace/datasets/
python tools/preprocess_data.py \
  --input /data/pile_raw/pile_sample.txt \
  --output-prefix /data/pile_indexed/pile_llama \
  --tokenizer-type SentencePieceTokenizer \
  --tokenizer-model /data/tokenizer/tokenizer.model \
  --append-eod \
  --workers 4

✔ 不用 GPU
✔ 这是最关键的一步

生成数据集如下

六、容器内:CPU 级自检(不要跑训练)

python - << 'EOF'
import sentencepiece
import torch
print("torch:", torch.__version__)
print("cuda available:", torch.cuda.is_available())
EOF

预期输出:

cuda available: False   ← 正常!

七、无 GPU 机器:固化镜像(核心步骤)

1️⃣ 退出容器

exit

2️⃣ docker commit

docker commit llama3-megatron megatron_blackwell:pytorch_25.04-py3

⚠️ 这个镜像 已经是 GPU-ready 的

GPU 是否可用只取决于运行环境

八、导出镜像(传给 GPU 服务器)

docker save megatron_blackwell:pytorch_25.04-py3 -o megatron_blackwell.tar

九、有 GPU 服务器:加载并运行

docker load -i megatron_blackwwell.tar

启动容器:

docker run -it --rm \
  --gpus all \
  --ipc=host \
  --ulimit memlock=-1 \
  --ulimit stack=67108864 \
  -v /data:/data \
  megatron_blackwell:pytorch_25.04-py \
  bash

十、有 GPU 服务器:GPU 验证(第一次才做)

nvidia-smi
python - << 'EOF'
import torch
print(torch.cuda.device_count())
EOF

十一、启动 LLaMA-3 训练(示例)

cd /workspace/Megatron-LM
torchrun --nproc_per_node=1 pretrain_gpt.py \
  --num-layers 8 \
  --hidden-size 1024 \
  --num-attention-heads 8 \
  --ffn-hidden-size 4096 \
  --seq-length 1024 \
  --max-position-embeddings 1024 \
  --micro-batch-size 1 \
  --global-batch-size 4 \
  --train-iters 20 \
  --lr 3e-4 \
  --data-path /data/pile_indexed/pile_llama \
  --tokenizer-type SentencePieceTokenizer \
  --tokenizer-model /data/tokenizer/tokenizer.model \
  --save /data/checkpoints \
  --fp16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值