Agent Lightning 如何用 LLM-in-Sandbox 示例在 Minikube 上训练沙箱智能体
【免费下载链接】agent-lightningThe absolute trainer to light up AI agents.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-lightning
这篇文章解决一个部署任务:用 Agent Lightning >=v1.0 的 LLM-in-Sandbox 示例,在本地 Minikube 上把Qwen/Qwen3-4B-Instruct-2507的通用指令智能体跑起来训练。该示例使用 K8s controller,每次 rollout 在 Kubernetes Job 里执行,模型调用经 AGL Gateway 路由到verl管理的 vLLM server,智能体依赖与训练环境隔离。按文档要求,这套训练需要 4× A100 80GB GPU,示例目前仅支持同步(Sync only)trainer 模式。
环境准备
文档列出的前置条件:
- Python 3.12
- Docker
- Minikube
kubectl- Minikube 内支持构建镜像
GPU 训练环境按 安装指南 准备。先在项目根目录安装基础环境:
cd <this-repo> uv sync然后安装verl与 FlashAttention。由于verl、vllm、torch的版本强耦合,文档推荐用scripts/setup_verl.sh安装经过测试的固定版本并本地构建flash-attn。脚本支持verl==0.8.0+cu130(文档推荐,需 CUDA 13.0)或verl==0.7.1+cu129:
source .venv/bin/activate bash scripts/setup_verl.sh 0.8.0 cu130脚本会花 10-30 分钟完成(取决于 CPU 核心数)。最后,默认所有任务都会把日志和轨迹上传到 Weights & Biases,运行前先登录:
uv run wandb login注意一点边界说明:示例自带的 Minikube 部署只用于测试,文档明确要求生产环境应换成 production-grade 的 Kubernetes 集群。
准备训练与验证数据
公开数据托管在 Hugging Face 数据集daixuancheng/llm-in-sandbox-rl上,转换脚本来自上游llm-in-sandbox-rl仓库。从项目根目录克隆上游仓库并转换全部数据集配置:
git clone --depth 1 https://github.com/llm-in-sandbox/llm-in-sandbox-rl.git /tmp/llm-in-sandbox-rl python /tmp/llm-in-sandbox-rl/examples/llm_in_sandbox/convert_llm_sandbox_dataset.py \ --all \ --output-dir examples/llm-in-sandbox/data转换器会下载以下 Hugging Face 配置:
- 训练:
instruct_pretrain(trainsplit,3,600 条样本) - 验证:
math_mini、biomed_mini、long_context_mini(testsplit)
转换命令会直接在examples/llm-in-sandbox/data/下创建对应目录,无需手动移动文件。示例默认使用的文件为:
| Split | Path |
|---|---|
| Training | examples/llm-in-sandbox/data/llm_sandbox_instruct_pretrain/train_verl.json |
| Validation | examples/llm-in-sandbox/data/llm_sandbox_math_mini/test_verl.json |
| Validation | examples/llm-in-sandbox/data/llm_sandbox_biomed_mini/test_verl.json |
| Validation | examples/llm-in-sandbox/data/llm_sandbox_long_context_mini/test_verl.json |
如果你单独生成或下载了这些文件,把train_verl.json、test_verl.json放进对应目录,或直接把目录传给启动脚本(见下文)。
在 Minikube 上启动训练
一切就绪后,从仓库根目录运行启动脚本:
examples/llm-in-sandbox/run.shrun.sh 按顺序完成 5 件事:
- 创建本地 Minikube 集群(
minikube delete -p minikube后minikube start --memory=65536 --cpus=16 --driver=docker); - 用 Dockerfile.agent 构建
llm-in-sandbox-agent:dev镜像; - 启动
agl-server(端口 8080,default_proxy.model_name=Qwen/Qwen3-4B-Instruct-2507),并轮询http://localhost:8080/healthz直到服务就绪; - 启动 K8s 模式的
agl-controller(runner_type=k8s、k8s_runner.ttl_after_finished=600),随后启动verltrainer 入口 train_llm_in_sandbox.py; - 退出时清理 server、controller 和 Ray 进程。
运行前要知道两个副作用:脚本开头就会先执行一轮清理(pkill掉agl-server、agl-controller、训练脚本进程,并ray stop --force),然后minikube delete删除已有的 minikube 集群再重建——如果本机有同名 minikube 集群正在使用,会被删掉。停止训练按Ctrl+C即可触发同样的清理,不要在清理期间反复按键。
训练运行时,controller 为每个 rollout 创建一个 Kubernetes Job。Job 内执行 job-template.yaml 定义的agent容器(llm-in-sandbox-agent:dev镜像,请求 1 CPU/2Gi、限制 4 CPU/8Gi),runner.py 在其中运行沙箱智能体、通过 AGL Gateway 路由模型调用、评估最终答案并向 gateway 上报agent_output与reward事件。
按需覆盖数据目录与 verl 参数
如果数据不在默认位置,或只想用部分验证集,把目录传给run.sh;多个验证目录用英文逗号分隔:
examples/llm-in-sandbox/run.sh \ --train-data-dir /path/to/train-data \ --val-data-dir /path/to/math-data,/path/to/biomed-data,/path/to/long-context-data其中/path/to/...替换为你实际的目录路径(每个验证目录下需有test_verl.json,训练目录下需有train_verl.json)。验证集可从math_mini、biomed_mini、long_context_mini中任选一个或多个。
额外的verl配置可以以 dotlist 覆盖的形式追加,例如缩短训练轮数、减少每条 prompt 的 rollout 数:
examples/llm-in-sandbox/run.sh \ trainer.total_epochs=2 \ actor_rollout_ref.rollout.n=2这些参数最终会合并进 train_llm_in_sandbox.py 中的verl_default_config()(默认total_epochs=15、rollout.n=8、模型Qwen/Qwen3-4B-Instruct-2507)。
验证运行状态
文档给出的可检查点:
run.sh内置了就绪检查:对http://localhost:8080/healthz最多轮询 60 秒,curl成功即认为agl-server可用。你也可以在训练过程中自行curl该地址确认 gateway 存活。- 训练入口启动后会打印 Preflight 信息,列出 Agent Lightning 地址、模型、训练集样本数以及每个验证集的样本数,可用来确认数据加载是否符合预期。
- 每个 rollout 结束,容器内 runner 会打印
reward=<数值> reason=<来源>日志并上报 reward 事件;任务日志与轨迹按默认配置上传到 W&B,在 W&B 中查看训练曲线与验证结果。
限制与边界
- 硬件与模式:该示例文档标注为 4× A100 80GB、K8s controller、Sync only trainer 模式,不要把它当作多机或异步训练方案套用。
- Minikube 定位:随仓库提供的 Minikube 配置只面向测试;上生产前需要替换为 production-grade 集群。
- 清理影响:
run.sh的清理逻辑会终止agl-server、agl-controller、训练进程并执行ray stop --force,同一机器上若有其他 Ray 作业会受到影响,运行前确认没有共用 Ray 的进程。
完成以上步骤,你就在 Minikube 上得到一条完整的 rollout 驱动训练链路:K8s Job 跑沙箱智能体、Gateway 路由模型调用、verl 侧更新Qwen/Qwen3-4B-Instruct-2507权重。更深入的 controller 行为可以参考 controller 配置文档。
【免费下载链接】agent-lightningThe absolute trainer to light up AI agents.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-lightning
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考