前言
官方项目链接github.com/RLinf/RLinf…
官方文档(中文版)rlinf.readthedocs.io/zh-cn/lates…
官方文档(英文版rlinf.readthedocs.io/en/latest/r…
笔者开始复现前系统状态(刚重装了ubuntu22.04,近乎裸机,适合萌新参考)
- OS:Ubuntu 22.04
- Driver:535.288.01(终端输入
nvidia-smi即可查询,后面步骤要求更新到nvidia-driver-590) - CUDA toolkit:12.4(终端输入
nvcc -V即可查询) - GPU:RTX 4060 8GB(即8188MiB)(终端输入
nvidia-smi即可查询)
总体目录与推荐路径(笔者根目录为 lwb@isus:~$)
建议把所有工作目录固定在:
- 项目根目录(宿主机) :
~/work/RLinf - 模型/数据(宿主机) :
~/data/rlinf/ - 结果(宿主机) :
~/work/RLinf/results(或用项目默认的../results,但我建议挂载出来)
这样 Docker 里统一挂载到 /workspace/RLinf,模型数据挂载到 /workspace/data,不会因为容器删掉丢东西。
A. 宿主机:Docker + NVIDIA Container Toolkit 全流程
目标:让
docker run --gpus all nvidia/cuda:12.4-base nvidia-smi正常输出
这是后续一切的“验收门槛”。
A0) 先确认现状
nvidia-smi
nvcc -V
如图,笔者Driver是535.288.01,必须升级到高版本,推荐NVIDIA-SMI 590
1. 安装驱动
sudo apt update
sudo apt install nvidia-driver-590
(如果安装过程中弹出紫色屏幕询问 Secure Boot 相关设置,建议选择 Disable 或者设定一个密码,并在重启时按照提示操作。最省事的办法是在 BIOS 里直接关掉 Secure Boot)
2. 重启宿主机(必须)
驱动安装涉及内核模块更新,不重启不会生效。
sudo reboot
3. 验证与验收
重启回来后,在终端输入:
nvidia-smi
A1) 安装 Docker Engine(推荐 docker-ce,而不是 ubuntu 自带 docker.io)
- 卸载可能存在的旧组件(安全起见):
sudo apt-get remove -y docker docker-engine docker.io containerd runc || true
2. 安装依赖并添加 Docker 官方源:
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3. 安装 Docker(注意此时要把梯子关掉,否则会安装失败,导致步骤4报错):
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4. 允许当前用户免 sudo 用 docker(建议做,不然每条命令都 sudo):
sudo usermod -aG docker $USER
newgrp docker
注意如果运行后,报错usermod:“docker”组不存在,说明步骤3梯子没关,导致docker安装失败,需要关掉梯子代理后重新执行步骤3
- 验收:
docker version
docker run --rm hello-world
-
如果你在国内,遇到网络问题时(镜像拉取速度慢) 等待一会报错如下图
-
解决办法 可以通过使用国内的 Docker 镜像源来加速拉取速度,使用阿里云等国内镜像。可以参考以下步骤配置阿里云的 Docker 镜像源:
-
配置阿里云的 Docker 镜像源:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["<your-aliyun-mirror-url>"] ,
"https://docker.m.daocloud.io"]
}
EOF
-
注意:替换其中的
<your-aliyun-mirror-url>为你自己的阿里云镜像 URL,具体地址可以通过 阿里云 Docker 镜像加速器 获得。 -
-
重新配置并清理 Docker 设置:
确保/etc/docker/daemon.json文件只包含你信任的几个镜像源。然后,执行以下步骤:-
清理 Docker 缓存:
docker system prune -af -
重新加载配置并重启 Docker:
sudo systemctl daemon-reload sudo systemctl restart docker
-
-
检查是否能访问 Docker Hub 镜像源:
docker pull hello-world接着可以通过以下命令运行
hello-world镜像来验证 Docker 是否配置正常:docker run --rm hello-world成功结果如下:
-
A2) 安装 NVIDIA Container Toolkit(GPU 透传)
RLinf 文档明确要求 NVIDIA Container Toolkit(并给出版本要求)。
- 添加 NVIDIA 源并安装:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /etc/apt/keyrings/nvidia-container-toolkit.gpg
curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/etc/apt/keyrings/nvidia-container-toolkit.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
2. 配置 Docker runtime:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
3. 验收 GPU 透传(非常关键):
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
看到 4060 信息就说明 Docker GPU 透传成功。
B. 拉取 RLinf 官方镜像 + 挂载目录(推荐最稳的方式)
RLinf 官方文档
(
官方文档中文版rlinf.readthedocs.io/zh-cn/lates…
官方文档英文版rlinf.readthedocs.io/en/latest/r…
)
提供两个快速开始镜像:
- 数学推理镜像(最适合你 4060 8GB 先跑通) :
rlinf/rlinf:math-rlinf0.1-torch2.6.0-sglang0.4.6.post5-vllm0.8.5-megatron0.13.0-te2.1 - 具身镜像(OpenVLA / Libero / ManiSkill 等,显存/资源压力更大) :
rlinf/rlinf:agentic-rlinf0.1-torch2.6.0-openvla-openvlaoft-pi0
我们先走数学推理镜像Quickstart 2(最低资源、官方单卡配置)
B1) 建目录(宿主机)
mkdir -p ~/work/RLinf
mkdir -p ~/data/rlinf/models
mkdir -p ~/data/rlinf/datasets
mkdir -p ~/data/rlinf/cache/hf
mkdir -p ~/data/rlinf/cache/torch
B2) 拉镜像(数学推理镜像)
- 先给Docker 配置文件添加代理设置:
运行以下命令来创建和编辑 Docker 的 systemd 配置文件:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/override.conf
在打开的 override.conf 文件中,添加以下内容(注意图中代理地址127.0.0.1和端口7890,要根据自己的代理配置修改):
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
-
保存并退出:
- 在
nano编辑器中,按Ctrl + O保存,按Y确认保存,然后按Ctrl + X退出编辑器。
- 在
-
重新加载 Docker 配置并重启 Docker:
执行以下命令来重新加载 Docker 配置并重启 Docker 服务,使新的代理设置生效:sudo systemctl daemon-reload sudo systemctl restart docker -
验证代理设置:
代理配置完成后,尝试拉取镜像:docker pull rlinf/rlinf:math-rlinf0.1-torch2.6.0-sglang0.4.6.post5-vllm0.8.5-megatron0.13.0-te2.1
这里想吐嘈一下,笔者第一次拉取下载了快两个小时,快下完的时候报错中断了,见下图
遇到这种情况的朋友不要担心,重新拉取一遍
docker pull rlinf/rlinf:math-rlinf0.1-torch2.6.0-sglang0.4.6.post5-vllm0.8.5-megatron0.13.0-te2.1这一次会快很多,笔者又等了30分钟就完成了
B3) 克隆 RLinf 仓库到宿主机(方便编辑yaml)
cd ~/work
git clone https://github.com/RLinf/RLinf.git
cd RLinf
B4) 启动容器(强烈推荐按这个写法:挂载代码 + 数据 + cache)
这样你在宿主机改 config,容器里立刻生效;模型和数据也都在宿主机落盘。
cd ~/work/RLinf
docker run -it --rm --gpus all \
--shm-size 20g \
--network host \
--name rlinf-math \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-e HF_HOME=/workspace/cache/hf \
-e TORCH_HOME=/workspace/cache/torch \
-v $(pwd):/workspace/RLinf \
-v ~/data/rlinf:/workspace/data \
-v ~/data/rlinf/cache:/workspace/cache \
rlinf/rlinf:math-rlinf0.1-torch2.6.0-sglang0.4.6.post5-vllm0.8.5-megatron0.13.0-te2.1 \
/bin/bash
容器里你应当在:
cd /workspace/RLinf
B5) 容器内做一次最基础验收(GPU + PyTorch)
在容器里执行:
nvidia-smi
python -c "import torch; print('torch', torch.__version__); print('cuda?', torch.cuda.is_available()); print('gpu', torch.cuda.get_device_name(0) if torch.cuda.is_available() else None)"
这一步通过,说明“宿主机驱动 + Docker 透传 + 容器依赖”闭环。
C. 跑通 RLinf 最轻量 Demo(优先:Quickstart 2 单 GPU GRPO on MATH)
官方 Quickstart 2 明确给了:
- 要下载一个 1.5B 模型 checkpoint
- 下载 boba 数据集
- 修改
examples/reasoning/config/math/qwen2.5-1.5b-single-gpu.yaml
并且说明这个配置默认单 GPU。
C1) 在容器内安装 huggingface-hub
pip install -U huggingface-hub
C2) 下载模型与数据(落在宿主机挂载目录,避免容器删掉丢失)
在容器里:
方案一:使用 Hugging Face 国内镜像
(优先尝试 方案一 。因为代理有时候带宽不够或者连接不稳定,下载大模型容易断连。国内镜像站 hf-mirror.com 通常非常稳定且速度极快)
cd /workspace/data
# 设置 HF 镜像环境变量
export HF_ENDPOINT=https://hf-mirror.com
# 模型
hf download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B \
--local-dir /workspace/data/models/DeepSeek-R1-Distill-Qwen-1.5B
# 数据集
hf download inclusionAI/AReaL-boba-Data --repo-type=dataset \
--local-dir /workspace/data/datasets/boba
如何永久生效? 如果你希望每次进入容器都不用重新输这行命令,可以把它写入容器的配置文件:
echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc
source ~/.bashrc
方案二:在容器内配置代理
如果你想让容器内的所有流量(不仅是 HF,还包括 pip install github 等)都走代理,可以使用这个方法。
因为你启动容器时加了 --network host,容器和宿主机共享网络,所以容器内的 127.0.0.1 就是宿主机的 127.0.0.1。
在容器内的终端执行(假设你的代理端口是 7890):
cd /workspace/data
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
# 模型
hf download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B \
--local-dir /workspace/data/models/DeepSeek-R1-Distill-Qwen-1.5B
# 数据集
hf download inclusionAI/AReaL-boba-Data --repo-type=dataset \
--local-dir /workspace/data/datasets/boba
如何永久生效? 同样写入 .bashrc:
echo 'export http_proxy=http://127.0.0.1:7890' >> ~/.bashrc
echo 'export https_proxy=http://127.0.0.1:7890' >> ~/.bashrc
source ~/.bashrc
显存建议(4060 8GB)
1.5B 量级通常作为起点能更稳跑通。不要一开始就上 7B/更大。
C3) 修改 YAML 配置
配置文件路径(宿主机和容器一致,因为挂载了代码,所以直接在宿主机改文件即可):
/workspace/RLinf/examples/reasoning/config/math/qwen2.5-1.5b-single-gpu.yaml
需要按文档修改这几个字段(官方列出的关键字段):
rollout.model.model_pathdata.train_data_pathsdata.val_data_pathsactor.tokenizer.tokenizer_model
把它们改成你实际路径(我们刚下载到 /workspace/data/...)。
推荐值(对应上面下载位置):
-
rollout.model.model_path: /workspace/data/models/DeepSeek-R1-Distill-Qwen-1.5B -
actor.tokenizer.tokenizer_model: /workspace/data/models/DeepSeek-R1-Distill-Qwen-1.5B -
数据集里你需要找到
AReaL-boba-106k.jsonl的实际位置(文档提到这个文件名)。
可以先:#容器中输入 find /workspace/data/datasets/boba -maxdepth 4 -type f -name "*106k*.jsonl" -o -name "*.jsonl" | head
找到的 jsonl 路径 data.train_data_paths 和 data.val_data_paths。
data.train_data_paths: /workspace/data/datasets/boba/AReaL-boba-106k.jsonldata.val_data_paths: /workspace/data/datasets/boba/AReaL-boba-106k.jsonl
qwen2.5-1.5b-single-gpu.yaml文件具体修改如下:
#部分代码
model:
model_path: /workspace/data/models/DeepSeek-R1-Distill-Qwen-1.5B
model_type: qwen2.5
precision: ${actor.model.precision} # precision for rollout model, support [fp16, bf16, fp32]
tokenizer:
tokenizer_model: /workspace/data/models/DeepSeek-R1-Distill-Qwen-1.5B
use_fast: False
trust_remote_code: True
padding_side: 'right'
train_data_paths: ["/workspace/data/datasets/boba/AReaL-boba-106k.jsonl"]
val_data_paths: ["/workspace/data/datasets/boba/AReaL-boba-106k.jsonl"]
C4) 启动训练(用官方提供的 launch script)
Quickstart 2 写的是“Execute the provided launch script”,并且配置默认单 GPU。
不同版本仓库脚本名字可能会变,但一定能在仓库 examples/reasoning/ 或 examples/ 下找到启动脚本。我建议这样做,保证不走错:
- 先列出 reasoning 例子目录:
ls -lah /workspace/RLinf/examples/reasoning
find /workspace/RLinf/examples/reasoning -maxdepth 2 -type f -name "*.sh" -o -name "*.py"
2. 找到与 MATH / grpo / launch 相关的脚本后运行它,并把你刚改的 yaml 作为参数(如果脚本支持)。
如果你希望我把“具体启动命令行”写成一条(不靠你自己 find),我也可以——但要以你仓库里实际的脚本文件名为准。你把
find ... -name "*.sh"的输出贴出来,我就能给出精确到文件名的一行命令。
cd /workspace/RLinf/examples/reasoning
bash run_main_grpo_math.sh qwen2.5-1.5b-single-gpu
C5) 结果与日志位置
Quickstart 2 写了训练结果在 ../results,TensorBoard 在 ../results/grpo-1.5b/tensorboard/。
在宿主机可以看到如下生成的三个文件夹:
现在我们已经跑通了 GRPO on MATH(单卡) ,这说明我们的配置成功了,RLinf 的“训练主流程”至少在 reasoning 任务上可跑,下一篇文章将逐渐提高难度,把 RLinf 的数学推理(LLM)链路和具身训练链路跑完