ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Practical_RL 课程环境 Docker 快速部署指南:预构建镜像、GPU 支持与源码级构建解析

Practical_RL 课程环境 Docker 快速部署指南:预构建镜像、GPU 支持与源码级构建解析 示例工程教育【免费下载链接】Practical_RLA course in reinforcement learning in the wild项目地址https://gitcode.com/gh_mirrors/pr/Practical_RL点击查看免费下载Practical_RL 是一套面向实战的强化学习课程A course in reinforcement learning in the wild课程内容覆盖从基础 Gymnasium 环境交互、值函数方法到 PPO、TRPO、MCTS 等十余周内容大量练习以 Jupyter Notebook 形式交付并依赖 gym、atari、TensorFlow/PyTorch、OpenGL 渲染等众多组件。为简化安装过程仓库在 docker/README.md 中提供了完整的容器化部署方案你可以直接拉取预构建镜像几行命令即可启动带全部依赖的 Jupyter 环境也可以基于仓库自带的 Dockerfile 手动构建 CPU/GPU 版本。读完本文你将掌握本课程 Docker 环境的两种启动路径、GPU 透传配置、镜像构建参数与依赖清单的内部机制从而在任何平台上快速复现课程实验环境。为什么用 Docker 部署课程环境强化学习课程实验对运行环境有特殊要求既有 Python 科学计算栈numpy、scipy、matplotlib也有老牌深度学习框架TensorFlow 1.13、PyTorch还有仿真环境与渲染库gym、atari-py、pyglet、OpenGL、ffmpeg、xvfb 虚拟显示器。手工在本地逐个安装很容易因版本冲突或图形依赖缺失而卡住。Docker 容器相当于一台预装好所有依赖的虚拟机一次拉取即可获得与课程一致的运行环境这正是 docker/README.md 开篇所强调的定位——To simplify installation process, you can deploy a container (~virtual machine) with all dependencies pre-installed。部署方式分为两条主线使用预构建镜像推荐直接拉取 Docker Hub 上的dmittov/practical_rl镜像通过 Kitematic 图形界面或命令行docker run启动仓库根目录挂载进容器作为/notebooks手动构建Manual在本仓库根目录执行docker build通过--build-arg devicecpu|gpu选择基础镜像与深度学习框架版本构建出完全由本地代码衍生的镜像。两条路线的最终体验一致容器启动后运行 Jupyter Notebook监听 8888 端口通过浏览器输入 token 访问。准备工作安装 Docker 与 GPU 运行时安装 Docker 客户端docker/README.md 推荐了两种客户端形态KitematicDocker 官方提供的图形化界面支持所有平台适合不熟悉命令行的用户原生 DockerNativeLinux 上推荐直接使用原生 CLIWindows / macOS 分别参考 Docker 官方提供的 Docker Desktop 安装指引。安装完成后终端执行docker --version可确认 CLI 可用。GPU 支持的前置条件可选docker/README.md 明确指出若希望用 GPU 加速训练课程中的 DQN、A2C、PPO 等深度 RL 实验均可受益需要提前在宿主机安装NVIDIA 驱动Unix 版本nvidia-container-toolkit让 Docker 能透传 GPU 给容器CUDA 10.2对应预构建镜像spring2020-cuda-10.2标签的依赖版本。注意仓库当前 Dockerfile 的 GPU 基础镜像已升级为nvidia/cuda:12.9.1-base-ubuntu24.04与预构建镜像spring2020-cuda-10.2分属不同代际。若使用预构建的spring2020-*标签请以 README 标注的 CUDA 10.2 为准若手动构建则以 Dockerfile 内 CUDA 12.9.1 基础镜像为准宿主机驱动需与之匹配。方式一使用预构建镜像Kitematic 图形界面如果你偏好图形化操作打开 Kitematic在搜索框中查找dmittov/practical_rl下载并启动该容器访问 Jupyter 有两种途径点击右上角的web preview屏幕预览或进入 Settings → Ports查看 Jupyter 实际映射的宿主机端口通常形如32***用浏览器访问对应地址。Kitematic 会自动完成端口映射与目录挂载适合 Windows 用户作为入门选择。方式二使用预构建镜像命令行原生方式在终端执行docker run --rm -it -v /path/to/your/repo:/notebooks -p local_port:8888 dmittov/practical_rl:spring2020-cpu参数逐项说明参数含义--rm容器退出后自动删除文件系统避免残留-it以交互模式附加到容器的伪终端-v /path/to/your/repo:/notebooks将本地课程仓库目录挂载为容器内/notebooksJupyter 默认工作目录即为此处-p local_port:8888把宿主机端口local_port映射到容器内 Jupyter 的 8888 端口dmittov/practical_rl:spring2020-cpu预构建的 CPU 版镜像标签docker/README.md 给出一个完整示例将本机/home/myuser/Documents/practical_rl挂载并映射 8888 端口docker run --rm -it -v /home/myuser/Documents/practical_rl:/notebooks -p 8888:8888 dmittov/practical_rl:spring2020-cpu启动后容器日志中会打印一串 Jupyter token。在浏览器中访问http://localhost:local_port/?tokentoken_you_see_in_container_logs例如 docker/README.md 中的实际形态localhost:8888/?tokenad1a5a0aab43efb47a9a805388fcf508d0b5f84a16e4542b。token 保证了 Notebook 服务的安全性首次访问后建议按提示设置密码。使用 GPU 版预构建镜像若宿主机已安装 NVIDIA 驱动与 nvidia-container-toolkit执行docker run --rm -it -v /path/to/your/repo:/notebooks -p local_port:8888 --gpus all dmittov/practical_rl:spring2020-cuda-10.2与 CPU 版相比仅多了两点差异镜像标签改为spring2020-cuda-10.2并追加--gpus all将宿主机全部 GPU 透传给容器。方式三手动构建镜像Manual如果你希望基于当前仓库代码自行构建例如跟随课程仓库的最新改动或想复现 Dockerfile 的构建流程在克隆本仓库后进入仓库根目录执行docker build -t practical_rl --build-arg devicecpu .构建 GPU 版本docker build -t practical_rl --build-arg devicegpu .--build-arg devicecpu|gpu是镜像定制的核心开关它决定两件事选用哪个基础镜像以及深度学习框架TensorFlow / PyTorch安装哪套预编译包。构建完成后启动容器docker run --rm -it -v local_dir:/notebooks -p local_port:8888 practical_rlGPU 版启动需追加--gpus alldocker run --rm -it -v local_dir:/notebooks -p local_port:8888 --gpus all practical_rldocker/README.md 推荐在仓库目录下直接挂载当前路径Linux 下可用反引号命令替换docker run --rm -it -v pwd:/notebooks -p 8888:8888 practical_rl启动后同样从控制台复制 token访问http://localhost:8888/?tokentoken。深入解析 Dockerfile多阶段构建与 device 参数手动构建背后是仓库 docker/Dockerfile 的精巧设计理解它有助于排查构建问题、按需定制环境。多阶段构建CPU 与 GPU 共享一份构建逻辑Dockerfile 使用了两组基础镜像并通过ARG device动态选择base-cpu基于ubuntu:24.04base-gpu基于nvidia/cuda:12.9.1-base-ubuntu24.04包含 CUDA 运行环境。随后FROM base-$device AS base依据构建参数选中其一FROM stage-$device as final再按相同机制选择最终阶段。这意味着 CPU 与 GPU 镜像共享除基础镜像和框架包之外的全部构建步骤避免重复维护。系统层图形渲染与仿真所需组件基础层通过 apt 安装wget unzip git cmake xvfb sudo freeglut3-dev ffmpeg。其中xvfb虚拟 X 帧缓冲与freeglut3-devOpenGL 工具库服务于课程中带渲染的 Gym 环境ffmpeg用于视频录制——这与仓库根目录的 xvfb 脚本封装了Xvfb :1 -screen 0 1024x768x24 -ac extension GLX render -noreset的 start/stop/restart 逻辑一脉相承保证无显示器环境下 RL 环境也能完成渲染。用户与目录非 root 运行 可写 Notebook 目录Dockerfile 创建了默认用户jovyan可用ARG username覆盖将其加入 sudo 组并配置免密 sudo%sudo ALL(ALL) NOPASSWD:ALL随后创建/notebooks目录并授权给该用户。后续所有 conda 安装都以普通用户身份执行保证容器安全性的同时让挂载进/notebooks的宿主目录可写。Python 层Anaconda 条件化依赖模板Dockerfile 下载并静默安装Anaconda3-2025.06至/opt/conda并配置 conda 环境初始化。随后通过ADD deeplearning.yaml /tmp/deeplearning-template.yaml把依赖清单拷入镜像再根据 device 参数用 sed 做模板替换CPU 阶段s/{tensorflow}/tensorflow/g、s/{pytorch}/pytorch/gGPU 阶段s/{tensorflow}/tensorflow-gpu/g、s/{pytorch}/pytorch-gpu/g最后conda env create -f /tmp/deeplearning.yaml创建名为deeplearning的 conda 环境并执行python -m ipykernel install --user --name python3 --display-name Python 3把该环境注册为 Jupyter 内核。构建结束后清理模板文件避免污染镜像。运行入口固定端口与挂载点Dockerfile 尾部声明EXPOSE 8888暴露 Jupyter 端口VOLUME /notebooksWORKDIR /notebooks声明挂载卷并设为工作目录COPY run_jupyter.sh /CMD [/run_jupyter.sh]容器启动时执行 run_jupyter.sh。启动脚本内容极简但关键#!/usr/bin/env bash jupyter notebook --no-browser --ip 0.0.0.0--ip 0.0.0.0让 Jupyter 监听容器内所有网络接口配合-p端口映射后宿主机才能通过localhost访问--no-browser则避免在无浏览器环境中报错这也是每次启动必须从日志复制 token 的原因。deeplearning.yaml课程依赖清单全解deeplearning.yaml 是 conda 环境的完整规格文件{tensorflow}、{pytorch}为构建期占位符其依赖覆盖了课程各周的实验需求conda 通道channels: defaults依赖依赖作用graphviz/python-graphviz决策树与模型结构可视化ipykernel注册 Jupyter 内核keras高层神经网络 API配合 TensorFlow 1.13.1numpy1.16.6锁定版本的科学计算核心pip/scipy/tqdm基础工具与进度条{tensorflow}1.13.1CPU/GPU 版 TensorFlow由 sed 替换pyopengl-accelerateOpenGL 加速服务渲染类环境{pytorch}/torchvisionCPU/GPU 版 PyTorch 与视觉工具库opencv图像处理Atari 帧预处理等pip 依赖仿真与 RL 生态gym、gym[box2d]经典控制/Box2D 环境、gym[atari]、atari-pyAtari ROM 接口可视化与数据处理matplotlib、seaborn、scikit-image、imageioGIF/视频导出渲染与运行时pygletOpenGL 窗口、psutil进程监控文本处理requests下载、editdistance序列编辑距离用于 week07_seq2seq 的翻译/文本任务。环境最终安装在prefix: /opt/conda/envs/deeplearning。对照课程仓库 week04_approx_rl/requirements.txt 可以看到新版课程环境已迁移到gymnasium、ale_py、torch等现代依赖而容器镜像保持了课程春季学期的经典依赖栈TensorFlow 1.13 atari-py两者版本语义不同选用镜像方案时建议沿用镜像内置版本以保证与旧版 Notebook 兼容。常见问题与验证token 找不到每次docker run后查看容器日志token 在 Jupyter 启动输出中若已设置密码可直接用密码登录。Notebook 打不开确认-p的宿主机端口未被占用且访问地址为http://localhost:local_port/?tokentoken容器内--ip 0.0.0.0已保证端口可达。GPU 版本无法使用先验证宿主机nvidia-smi正常再确认 nvidia-container-toolkit 已安装预构建spring2020-cuda-10.2镜像需 CUDA 10.2 配套驱动手动构建镜像则要求 CUDA 12.9.1 基础镜像对应驱动。渲染类环境报错如 gym 的 OpenGL 环境镜像已内置 xvfb、freeglut3-dev 与 xvfb 管理脚本可参考仓库 setup_colab.sh 的思路在容器内先启动虚拟显示器再运行渲染环境。验证环境就绪进入容器后执行conda activate deeplearning再依次python -c import gym, torch, tensorflow检查三大核心依赖随后在 Jupyter 中新建 Notebook内核选择 Python 3运行一个简单的 Gym 环境交互如gym.make(CartPole-v0)即可确认仿真链路正常。总结docker/README.md 为本课程提供了零安装的容器化方案预构建镜像的 Kitematic / 命令行两种启动方式覆盖了不同平台与熟练度的用户GPU 透传则解决了深度 RL 训练的算力需求仓库源码层的 Dockerfile 通过device构建参数与 sed 模板替换将 CPU/GPU 两套镜像统一到同一份构建逻辑deeplearning.yaml 则完整固化了课程实验所需的 conda pip 依赖栈。无论选择哪种方式最终都能在浏览器中通过 token 进入与课程完全一致、开箱即用的 Jupyter 强化学习工作台。赞分享示例工程教育【免费下载链接】Practical_RLA course in reinforcement learning in the wild项目地址https://gitcode.com/gh_mirrors/pr/Practical_RL点击查看免费下载相关推荐MediaPipe 跨平台人脸检测快速安装指南一条 pip 命令跑通附源码编译与报错急救MediaPipe 跨平台人脸检测快速安装指南一条 pip 命令跑通附源码编译与报错急救 MediaPipe 是 Google 开源的跨平台机器学习框架核人工智能机器学习计算机视觉多模态本地部署FILM Docker容器化部署GPU支持的镜像构建与运行命令FILM Docker容器化部署GPU支持的镜像构建与运行命令 痛点与解决方案 在本地环境部署FILMFrame Interpolation for Lar人工智能计算机视觉深度学习视频处理Oracle Access Management (OAM) Docker镜像构建与部署指南Oracle Access Management OAM Docker镜像构建与部署指南 概述 Oracle Access Management OAM 是Or示例工程云原生上一篇CellProfiler完整指南生物图像分析的终极开源解决方案下一篇3步掌握Path of Building PoE2流放之路2角色规划终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进