尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CleanRL 云端实验提交指南:基于 submit_exp 与 AWS Batch 的规模化强化学习实验调度

CleanRL 云端实验提交指南:基于 submit_exp 与 AWS Batch 的规模化强化学习实验调度 CleanRL 云端实验提交指南基于 submit_exp 与 AWS Batch 的规模化强化学习实验调度【免费下载链接】cleanrlHigh-quality single file implementation of Deep Reinforcement Learning algorithms with research-friendly features (PPO, DQN, C51, DDPG, TD3, SAC, PPG)项目地址: https://gitcode.com/GitHub_Trending/cl/cleanrlCleanRL 以单文件实现强化学习算法著称但当需要把 PPO、DQN、SAC 等算法在不同环境、不同随机种子下做大规模基准评测时单机串行运行显然不够高效。CleanRL 为此提供了完整的云端集成方案把代码打包成 Docker 镜像借助 AWS Batch 并发运行成百上千个实验。本文围绕 docs/cloud/submit-experiments.md 展开讲解如何使用cleanrl_utils.submit_exp模块完成实验预检dry run、在 AWS 各类实例上提交任务以及自定义/多架构构建 Docker 容器读完即可上手搭建自己的云端实验流水线。一、前置条件安装云端依赖并搭建 AWS Batch 基础设施在运行任何提交命令之前需要先安装 CleanRL 的cloud扩展依赖并初始化 AWS Batch 基础设施。相关步骤记录在 docs/cloud/installation.md 中其核心思路是将 CleanRL 代码打包进 Docker 容器再使用 AWS Batch 并发运行实验。1. 安装依赖与配置 AWS CLI在项目根目录执行uv pip install .[cloud]从 pyproject.toml 可以看到cloud可选依赖包含两项cloud [ boto31.24.70,2, awscli1.31.0,2, ]boto3是 cleanrl_utils/submit_exp.py 中调用 AWS Batch API 所必需的库源码第 7 行import boto3awscli则用于配置本地 AWS 凭证。2. 用 Terraform 一键创建 AWS Batch 环境接着进入cloud目录初始化并应用 Terraform 配置cd cloud python -m awscli configure # 配置 AWS 访问密钥与默认区域 terraform init export AWS_DEFAULT_REGION$(aws configure get region --profile default) terraform applyTerraform 定义文件位于 cloud/main.tf其中声明了所需的 AWS Provider 版本hashicorp/aws ~ 3.27、Terraform 0.14.9并引入了 cloud/modules/cleanrl 模块。该模块会为每种实例类型创建两套计算环境按需on-demand计算环境与同名的作业队列cloud/modules/cleanrl/main.tfSpot 竞价spot计算环境与带-spot后缀的作业队列cloud/modules/cleanrl/main.tf默认竞价比例为 50%spot_bid_percentage 50见 cloud/main.tf。默认实例清单在 cloud/modules/cleanrl/variables.tf 中定义覆盖 GPU、CPU 与 ARM 架构实例类型规格用途g4dn.4xlarge16 vCPU / 64GB / GPU大规模 GPU 训练g4dn.xlarge4 vCPU / 16GB / GPU单卡 GPU 训练r5ad.large2 vCPU / 16GB内存型 CPU 任务c6g.medium1 vCPU / 2GBARM低成本 CPU 任务a1.medium1 vCPU / 2GBARM低成本 CPU 任务m6gd.medium1 vCPU / 4GBARM低成本 CPU 任务注意AWS Batch 计算环境与作业队列本身完全免费只有实际提交实验运行任务时才按资源计费因此可以放心terraform apply创建基础设施详见 docs/cloud/installation.md。模块还会自动创建 ECS 实例角色、AWS Batch 服务角色、Spot Fleet 角色与默认 VPC 安全组等 IAM/网络资源见 cloud/modules/cleanrl/setups.tf无需手动配置。3. 清理基础设施实验全部结束后可一键销毁所有云端资源export AWS_DEFAULT_REGION$(aws configure get region --profile default) terraform destroy二、预检模式Dry Run先看清楚将要执行什么submit_exp支持预检模式用于只生成并打印 docker 命令而不真正提交任务方便在正式提交前核对命令是否正确。以经典的 CartPole 训练任务为例uv run python -m cleanrl_utils.submit_exp \ --docker-tag vwxyzjn/cleanrl:latest \ --command uv run python cleanrl/ppo.py --env-id CartPole-v1 --total-timesteps 100000 --track --capture_video \ --num-seed 1预期的输出是一段可直接执行的 docker 命令docker run -d --cpuset-cpus0 -e WANDB_API_KEYxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx vwxyzjn/cleanrl:latest /bin/bash -c uv run python cleanrl/ppo.py --env-id CartPole-v1 --total-timesteps 100000 --track --capture_video --seed 1这条命令揭示了几个关键机制可从 cleanrl_utils/submit_exp.py 源码中逐一印证种子自动追加--num-seed 1表示生成 1 个种子源码第 67-69 行会为每个种子在原始命令末尾追加--seed NCPU 绑定轮询--cpuset-cpus0是源码第 76 行用multiprocessing.cpu_count()取本地核心数、再对每个任务轮流分配核心的结果——当--num-seed大于 1 时多个容器会被绑定到不同 CPU 核心上并行执行WB 密钥注入-e WANDB_API_KEY...中的密钥优先取--wandb-key参数未指定时自动从netrc中读取源码第 20-21、59-64 行若两者皆无则直接断言失败提示先执行wandb login命令封装容器内通过/bin/bash -c ...执行最终命令。dry run 模式还会把生成的命令写入exp-script.docker.sh文件源码第 86-87 行默认脚本名为debug.sh便于留档审计。三、在 AWS 上提交实验四种典型场景正式提交只需在 dry run 命令基础上增加--job-queue、--provider aws及资源配额参数。--job-queue必须与 Terraform 创建出的队列名一致即去掉实例类型中的点号、Spot 队列再加-spot后缀例如g4dn-xlarge-spot。以下四种场景覆盖了文档中的完整示例。场景一CPU 计算优化型 Spot 实例uv run python -m cleanrl_utils.submit_exp \ --docker-tag vwxyzjn/cleanrl:latest \ --command uv run python cleanrl/ppo.py --env-id CartPole-v1 --total-timesteps 100000 --track --capture_video \ --job-queue c5a-large-spot \ --num-seed 1 \ --num-vcpu 1 \ --num-memory 2000 \ --num-hours 48.0 \ --provider aws适合无需 GPU 的经典控制类环境如 CartPole-v1。c5a.large为 2 vCPU / 4GB 的 AMD 计算优化实例Spot 竞价可显著降低成本。场景二GPU 加速型 Spot 实例uv run python -m cleanrl_utils.submit_exp \ --docker-tag vwxyzjn/cleanrl:latest \ --command uv run python cleanrl/ppo_atari.py --env-id BreakoutNoFrameskip-v4 --track --capture_video \ --job-queue g4dn-xlarge-spot \ --num-seed 1 \ --num-vcpu 1 \ --num-gpu 1 \ --num-memory 4000 \ --num-hours 48.0 \ --provider aws适合 Atari 等视觉任务如BreakoutNoFrameskip-v4。注意这里新增了--num-gpu 1源码第 96-100 行会据此在提交时附加GPU类型的资源需求--num-memory也从 2000 提高到 4000因为 GPU 任务通常需要更多内存。场景三CPU 计算优化型按需On-Demand实例uv run python -m cleanrl_utils.submit_exp \ --docker-tag vwxyzjn/cleanrl:latest \ --command uv run python cleanrl/ppo.py --env-id CartPole-v1 --total-timesteps 100000 --track --capture_video \ --job-queue c5a-large \ --num-seed 1 \ --num-vcpu 1 \ --num-memory 2000 \ --num-hours 48.0 \ --provider aws与场景一相比仅将队列名中的-spot去掉c5a-large。按需实例不会因竞价被回收适合对任务连续性有要求的场景代价是价格更高。场景四GPU 加速型按需实例uv run python -m cleanrl_utils.submit_exp \ --docker-tag vwxyzjn/cleanrl:latest \ --command uv run python cleanrl/ppo_atari.py --env-id BreakoutNoFrameskip-v4 --track --capture_video \ --job-queue g4dn-xlarge \ --num-seed 1 \ --num-vcpu 1 \ --num-gpu 1 \ --num-memory 4000 \ --num-hours 48.0 \ --provider aws参数速查表submit_exp的全部核心参数均定义在 cleanrl_utils/submit_exp.py 的 argparse 解析器中参数默认值说明--commanduv run python cleanrl/ppo.py容器内要执行的命令提交时自动追加--seed N--num-seed1随机种子数量每个种子生成一个独立任务--docker-tagvwxyzjn/cleanrl:latest使用的 Docker 镜像标签--job-queuem6gd-mediumAWS Batch 作业队列名称须与 Terraform 创建的队列一致--num-vcpu1每个任务分配的 vCPU 数--num-memory2000每个任务分配的内存MB--num-gpu0每个任务分配的 GPU 数--num-hours16.0任务最大运行时长小时超时会被终止--provider云厂商当前仅支持aws--aws-num-retries1AWS 任务失败自动重试次数--wandb-keyWB API Key缺省时尝试从netrc读取--build/-bFalse提交前先用 buildx 构建镜像--push/-pFalse构建完成后推送到镜像仓库--archslinux/amd64构建的目标平台架构多架构用逗号分隔--exp-scriptdebug.sh生成的.docker.sh脚本文件名四、提交背后的 AWS Batch 调用链当指定--provider aws时cleanrl_utils/submit_exp.py 会走完整的 AWS Batch 提交流程注册 Job Definition为每个--docker-tag调用register_job_definition源码第 102-114 行声明容器镜像、vCPU、内存与启动命令提交作业调用submit_job并写入任务队列源码第 115-132 行同时通过containerOverrides注入WANDB_API_KEY、WANDB_RESUMEallow和随机生成的WANDB_RUN_ID——其中WANDB_RUN_ID由wandb.util.generate_id()生成配合--track即可实现实验中断后自动续写 WB 日志相关用法可参考 docs/advanced/resume-training.md可靠性保障retryStrategy设置为--aws-num-retries次重试timeout按--num-hours折算为秒数源码第 130-131 行避免任务无限挂起清理每次提交后立即deregister_job_definition反注册任务定义源码第 139 行避免同名定义累积。提交后可在 AWS Batch 控制台看到各队列中的任务运行状态随后在 WB 面板查看训练曲线与视频回放五、自定义 Docker 容器构建、推送与多架构支持Terraform 只负责创建计算资源真正运行实验的镜像需要自己构建。CleanRL 的 Dockerfile 基于nvidia/cuda:11.4.2-runtime-ubuntu20.04依次安装 Python/图形渲染依赖xvfb、ffmpeg、通过uv pip install .安装项目依赖并通过 entrypoint.sh 启动 Xvfb 虚拟显示DISPLAY:1以支持--capture_video录制视频最后将cleanrl目录复制进镜像。1. 初始化 buildx 并登录仓库docker buildx create --use docker login2. 构建并推送镜像在--command之外追加--build --push即可基于当前目录的 Dockerfile 构建容器并自动推送到镜像仓库uv run python -m cleanrl_utils.submit_exp \ --docker-tag vwxyzjn/cleanrl:latest \ --command uv run python cleanrl/ppo.py --env-id CartPole-v1 --total-timesteps 100000 --track --capture_video \ --build --push源码第 51-57 行揭示了构建逻辑--push时使用--outputtyperegistry直接推送到 registry否则使用--outputtypedocker仅保存在本地 docker 守护进程底层执行docker buildx build --platform archs -t docker-tag .。注意docker login的目标仓库须与--docker-tag的前缀一致。3. 构建多架构镜像若希望运行在 ARM 实例如m6gd.medium上可指定多个平台uv run python -m cleanrl_utils.submit_exp \ --docker-tag vwxyzjn/cleanrl:latest \ --command uv run python cleanrl/ppo.py --env-id CartPole-v1 --total-timesteps 100000 --track --capture_video \ --archs linux/arm64,linux/amd64 --build --push提示多架构镜像构建相当耗时但换来的是能使用m6gd.medium这类 ARM 实例——其价格通常比同档 X86 实例便宜 20%~70%。不过需要清醒认识到目前至少据仓库作者所知还没有云厂商提供带 NVIDIA GPU 的 ARM 实例因此对需要 GPU 的强化学习任务而言多架构构建的收益可能有限。如果你仍想加速多架构构建可以借助一台原生的 ARM 服务器将其挂载到本地的buildx实例上分担构建任务docker -H ssh://costagpu info docker buildx create --name remote --use docker buildx create --name remote --append ssh://costagpu docker buildx inspect --bootstrap python -m cleanrl_utils.submit_exp -b --archs linux/arm64,linux/amd64六、总结从单机到云的实验流水线整套云端方案形成了清晰的闭环构建--build --push基于 Dockerfile 打包 CleanRL 代码与依赖预检dry run 生成并检查docker run命令确认镜像、命令与种子注入逻辑无误提交--provider aws通过 boto3 调用 AWS Batch API按--num-seed拆分出多任务、注入 WB 密钥与运行 ID并自动配置重试与超时规模化Terraform 预置的按需/Spot 计算环境与作业队列支撑成百上千任务的并发调度追踪实验曲线与视频经--track --capture_video同步至 WB中断后可通过WANDB_RUN_ID续跑。从源码看submit_exp将生成本地 docker 命令与提交 AWS Batch 任务两条路径统一在同一套参数体系下cleanrl_utils/submit_exp.py既方便本地调试又能在云端无差别复用配合 benchmark/ 目录中的各类算法评测脚本如 ppo.sh、dqn.sh、sac.sh即可快速复现 CleanRL 文档中的大规模基准评测。无论你是要在数百个种子间做消融实验还是为多算法对比搭建持续评测平台这套Docker AWS Batch WB的流水线都是值得直接复用的参考范式。【免费下载链接】cleanrlHigh-quality single file implementation of Deep Reinforcement Learning algorithms with research-friendly features (PPO, DQN, C51, DDPG, TD3, SAC, PPG)项目地址: https://gitcode.com/GitHub_Trending/cl/cleanrl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表