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

资讯详情

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

CleanRL 云基础设施安装指南:基于 Terraform 与 AWS Batch 的规模化强化学习实验部署

CleanRL 云基础设施安装指南:基于 Terraform 与 AWS Batch 的规模化强化学习实验部署 CleanRL 云基础设施安装指南基于 Terraform 与 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 的云集成方案将训练代码打包为 Docker 容器借助 AWS Batch 服务并发运行成百上千个强化学习实验从而支撑大规模超参数搜索与基准测试。本文以 CleanRL 官方云部署文档为主线结合仓库内的 Terraform 基础设施定义与submit_exp提交脚本源码完整讲解从零搭建 AWS Batch 计算环境、提交实验到清理资源的全流程读完即可上手搭建属于自己的分布式 RL 实验平台。云集成的总体思路CleanRL 云集成的核心思想非常简单把代码打包进 Docker 容器然后使用 AWS Batch 并发运行数千个实验The rough idea behind the cloud integration is to package our code into a docker container and use AWS Batch to run thousands of experiments concurrently。这套思路落地为三个环节Docker 镜像仓库根目录的 Dockerfile 基于nvidia/cuda:11.4.2-runtime-ubuntu20.04构建安装 Python、uv、xvfb、ffmpeg 等运行依赖并将cleanrl/目录整体拷贝进镜像确保任意训练脚本如 cleanrl/ppo.py在任何节点上行为一致基础设施定义cloud/目录下的 Terraform 配置定义 AWS Batch 的计算环境Compute Environments与作业队列Job Queues通过terraform apply一键创建实验提交cleanrl_utils/submit_exp.py脚本把--command中的训练命令逐条包装成 AWS Batch 作业提交并自动注入 WB API Key 用于实验跟踪。其中第二、三步分别对应docs/cloud/installation.md本文主体与docs/cloud/submit-experiments.md配套实战文档下文依次展开。前置条件安装云基础设施前需要准备以下环境Terraform CLI仓库使用 Terraform 定义 AWS Batch 基础设施。cloud/main.tf声明了版本约束required_version 0.14.9并要求 AWS provider 版本~ 3.27安装时需保证 Terraform 版本满足该要求具体安装步骤参考 HashiCorp 官方 CLI 安装教程Python 环境与 uvCleanRL 项目本身基于 pyproject.toml 管理依赖其中cloud可选依赖组包含boto31.24.70,2与awscli1.31.0,2见pyproject.toml第 70-73 行用于 AWS 交互AWS 账号与默认 Profile需要配置好 AWS 访问凭证Access Key / Secret KeyTerraform 与提交脚本默认使用defaultprofile。安装并部署 AWS Batch 基础设施在 CleanRL 项目根目录下依次执行以下命令# 1. 安装 cloud 可选依赖boto3、awscli 等 uv pip install .[cloud] # 2. 进入 cloud 基础设施目录 cd cloud # 3. 配置 AWS 凭证交互式输入 Access Key / Secret Key / Region / 输出格式 python -m awscli configure # 4. 初始化 Terraform下载 AWS provider 插件 terraform init # 5. 导出当前 AWS 区域供后续 terraform apply/destroy 使用 export AWS_DEFAULT_REGION$(aws configure get region --profile default) # 6. 应用基础设施预览变更后输入 yes 确认 terraform apply整个流程的每一步都对应明确的产物步骤命令产物依赖安装uv pip install .[cloud]boto3、awscli 等云工具链就绪凭证配置python -m awscli configure~/.aws/credentials中的defaultprofile初始化terraform init下载hashicorp/awsprovider 插件区域导出export AWS_DEFAULT_REGION...环境变量供 apply/destroy 定位资源部署terraform applyAWS Batch 计算环境、作业队列及配套 IAM/VPC 资源关于成本的重要说明官方文档特别提醒创建 AWS Batch 计算环境和作业队列本身完全免费只有在提交实验并实际占用计算资源EC2 实例时才会产生费用。这意味着你可以放心地反复执行terraform apply搭建基础设施而不必担心产生持续支出。验证部署结果部署完成后打开 AWS 管理控制台的 AWS Batch 页面即可看到 Terraform 创建的计算环境与作业队列其形态与本文开头的aws_batch1.png截图一致左侧导航包含 Jobs、Job definitions、Job queues、Compute environments 等入口主区域展示各作业队列如c5a-large、c5a-large-spot的状态与作业统计RUNNABLE / RUNNING / SUCCEEDED / FAILED。基础设施剖析Terraform 到底创建了什么terraform apply并不是黑盒操作——仓库中的 Terraform 源码清晰地展示了它创建的全部资源。入口配置 cloud/main.tf 定义了 AWS provider 并调用./modules/cleanrl模块terraform { required_providers { aws { source hashicorp/aws version ~ 3.27 } } required_version 0.14.9 } provider aws { profile default } module cleanrl { source ./modules/cleanrl spot_bid_percentage 50 instance_types [ g4dn.4xlarge, # 16 vCPU, 64GB, $1.204, GPU g4dn.xlarge, # 4 vCPU, 16GB, $0.526, GPU r5ad.large, # 2 vCPU, 16GB, $0.131 c5a.large, # 2 vCPU, 4GB, $0.077 # ARM 架构实例 c6g.medium, # 1 vCPU, 2GB, $0.034 m6gd.medium, # 1 vCPU, 4GB, $0.0452 ] }模块内部 cloud/modules/cleanrl/main.tf 通过count length(var.instance_types)为每种实例类型同时创建两套资源On-demand 计算环境 作业队列类型为EC2min_vcpus 0、max_vcpus var.max_vcpus作业队列名与实例类型一致如c5a-large、g4dn-xlargeSpot 计算环境 作业队列类型为SPOT额外设置bid_percentage var.spot_bid_percentage与spot_iam_fleet_role作业队列名带-spot后缀如c5a-large-spot、g4dn-xlarge-spot。队列命名规则为replace(instance_type, ., -)即c5a.large对应队列c5a-large——这正是后续提交实验时--job-queue参数直接引用的名字。可调变量cloud/modules/cleanrl/variables.tf 定义了模块的全部可调参数变量默认值说明max_vcpus2000每个计算环境的最大 vCPU 数on_demand_allocation_strategyBEST_FIT按需计算环境的分配策略可选BEST_FIT、BEST_FIT_PROGRESSIVE等spot_allocation_strategyBEST_FITSpot 计算环境的分配策略可加SPOT_CAPACITY_OPTIMIZEDspot_bid_percentage50Spot 竞价百分比instance_types六种实例列表为每种实例类型生成一套计算环境 作业队列此外cloud/modules/cleanrl/setups.tf 负责创建配套的基础设施包括IAM 角色ecs_instance_roleEC2 容器服务角色、aws_batch_service_roleBatch 服务角色、AWS_EC2_spot_fleet_roleSpot Fleet 角色安全组aws_batch_compute_environment_security_group放行全部出站流量egress0.0.0.0/0默认 VPC 与子网通过aws_default_vpc与aws_subnet_ids数据源获取当前账号的默认子网作为计算环境挂载目标。从源码结构可以推断部署这套基础设施约需要三类云资源——计算环境含按需/Spot 两种、作业队列以及一组 IAM 角色/安全组/VPC 依赖全部资源在terraform destroy时会被一并清理。提交实验到 AWS Batch基础设施就绪后即可通过cleanrl_utils.submit_exp提交训练实验。该脚本的完整实现位于 cleanrl_utils/submit_exp.py其核心逻辑为生成多 seed 命令对--num-seed个 seed为--command依次追加--seed N后缀本地 dry-run 输出生成对应的docker run -d --cpuset-cpusN ...命令并写入exp-script.docker.sh文件便于先在本地确认容器调用方式AWS 批量提交--provider aws时通过 boto3 依次调用register_job_definition、submit_job、deregister_job_definition把每个 seed 实验作为一个独立 Batch 作业提交到指定队列并注入WANDB_API_KEY、WANDB_RESUMEallow、WANDB_RUN_ID自动生成三个环境变量同时按--num-hours设置作业超时attemptDurationSeconds、按--aws-num-retries设置重试次数。第一步dry run 检查生成的 Docker 命令提交前先用 dry-run 模式不带--provider检查脚本生成的容器命令是否正确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 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 的源码可以看到脚本用multiprocessing.cpu_count()获取本机核数将多个实验的容器按--cpuset-cpus轮流绑定到不同 CPU 核心从而在本地也能利用多核并发跑多个 seed。第二步提交到 AWS 各类计算实例按需选择以下四类提交方式之一均需指定--provider aws1. 计算优化型 Spot 实例CPU 任务推荐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 aws2. 加速计算型 Spot 实例GPU 任务如 Atariuv 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 aws3. 计算优化型按需实例CPU 任务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 aws4. 加速计算型按需实例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提交参数速查表以上命令中的参数均对应 cleanrl_utils/submit_exp.py 中的 argparse 定义参数默认值含义--commanduv run python cleanrl/ppo.py要在容器内执行的训练命令--num-seed1随机种子数量每个 seed 提交一个独立作业--job-queuem6gd-medium目标作业队列名对应 Terraform 创建的队列--docker-tagvwxyzjn/cleanrl:latestDocker 镜像标签--num-vcpu1每个作业分配的 vCPU 数--num-memory2000每个作业分配的内存MB--num-gpu0每个作业分配的 GPU 数传--num-gpu 1时提交resourceRequirements中的 GPU 资源--num-hours16.0作业超时时间小时超出自动终止--provider云厂商选择当前仅支持aws--aws-num-retries1作业失败重试次数--wandb-keyWB API Key未提供时脚本会尝试从~/.netrc读取对应wandb login的产物两者都为空会直接断言报错--build/-bFalse是否在提交前构建容器--push/-pFalse是否将构建产物推送至镜像仓库--archslinux/amd64构建目标架构如linux/arm64,linux/amd64提交后的效果作业提交成功后AWS Batch 控制台会出现对应的作业列表与 EC2 实例可对照docs/cloud/aws_batch2.png查看实际拉起实例的类型与状态而 WB 项目中会同步出现一批CartPole-v1、BreakoutNoFrameskip-v4等任务名的运行记录见docs/cloud/wandb.png训练曲线、视频与超参数均可直接在 WB 仪表盘对比分析。注意训练命令中的--track --capture_video分别负责启用 WB 跟踪与视频录制。自定义 Docker 容器如果官方镜像不满足需求例如需要安装额外依赖可以基于仓库根目录的 Dockerfile 自行构建镜像。首先准备 Dockerbuildx并登录镜像仓库docker buildx create --use docker login随后使用--build与--push标志让submit_exp基于当前目录的 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对应 cleanrl_utils/submit_exp.py 的实现构建时执行docker buildx build --outputtyperegistry或 typedocker --platform archs -t docker-tag .其中--push决定输出类型是推送 registry 还是仅本地 docker。构建多架构镜像要同时支持 ARM 与 X86 架构使用--archs指定多平台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清理基础设施实验全部跑完后删除基础设施同样简单直接export AWS_DEFAULT_REGION$(aws configure get region --profile default) terraform destroyterraform destroy会按依赖顺序回收cloud/modules/cleanrl/下定义的所有资源——包括按需/Spot 计算环境、作业队列、IAM 角色与安全组。由于未提交作业时计算环境min_vcpus 0、不占用任何实例销毁过程通常很快且不会产生额外费用。小结与延伸阅读至此你已经掌握了 CleanRL 云部署的完整闭环用terraform apply一键拉起 AWS Batch 计算环境与作业队列用cleanrl_utils.submit_exp把训练命令批量封装为容器作业提交到按需或 Spot 队列用--build --push定制 Docker 镜像最后用terraform destroy一键清理。如果想进一步了解实验提交的更多参数组合与大规模基准测试的组织方式可继续阅读配套文档 docs/cloud/submit-experiments.md 与仓库根目录的 Dockerfilebenchmark/目录下的各类*.sh脚本如 benchmark/ppo.sh、benchmark/ppo_atari.sh也提供了按算法批量提交基准实验的现成范例可与本文的提交命令对照使用。【免费下载链接】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),仅供参考
返回列表