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

资讯详情

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

handson-ml3 官方 Docker 环境搭建指南:CPU/GPU 镜像拉取、构建与 Jupyter 运行全攻略

handson-ml3 官方 Docker 环境搭建指南:CPU/GPU 镜像拉取、构建与 Jupyter 运行全攻略 示例工程教程【免费下载链接】handson-ml3A series of Jupyter notebooks that walk you through the fundamentals of Machine Learning and Deep Learning in Python using Scikit-Learn, Keras and TensorFlow 2.项目地址https://gitcode.com/gh_mirrors/ha/handson-ml3点击查看免费下载导读本文基于 handson-ml3 仓库的 docker/README.md 整理系统讲解如何用 Docker 容器化运行《Hands-On Machine Learning with Scikit-Learn, Keras and TensorFlow第 3 版》配套的全部 Jupyter Notebook而无需在宿主机安装任何 Python 依赖。读完本文你将掌握预构建镜像拉取、本地镜像构建、Jupyter 服务启动、make快捷命令、容器内调试TensorBoard / nbdiff以及 Linux 下 GPU 透传的完整实战流程并结合仓库中的 Dockerfile、Dockerfile.gpu、docker-compose.yml 等源码理解镜像的底层构成。一、为什么用 Docker 运行这套 Notebookhandson-ml3 的 20 多个 Notebook 覆盖了机器学习、深度学习、NLP、强化学习等章节依赖的库多达数十个见 environment.yml。官方在 README.md 中提供三条运行路径Colab 在线运行、本地 Anaconda 安装见 INSTALL.md、以及本文介绍的 Docker 方案。Docker 方案的核心价值是零依赖侵入你只需要docker、docker-compose可选makeGPU 场景另需驱动不需要在宿主机安装 Python、CUDA 或任何 Python 包。镜像内预装完整环境Notebook 数据通过卷volume挂载持久化宿主机与容器共享同一份源码目录浏览器里的任何改动都会被保存下来。二、前置条件开始之前需要确认本机环境依赖说明备注Docker官方安装文档见 docker.com必需Docker Compose官方安装文档见 docker.com必需GPU 场景使用deploy资源预留需要1.28 及以上版本GNU Make可选没有也没关系可直接执行 Makefile 里对应的docker-compose命令NVIDIA 驱动 NVIDIA 容器运行时仅 GPU 场景Docker ≥ 19.03 装nvidia-container-toolkit更早版本装nvidia-docker2官方对 Docker 基础设施知识不作强制要求——你不需要理解镜像分层、网络等概念也可以直接跑起来但如果想深入理解下文提到的构建过程了解基础概念会更有帮助。三、快速上手拉取预构建镜像CPU 版最省事的方式是从 Docker Hub 直接拉取官方预构建镜像下载量约1.9 GB压缩后$ docker pull ageron/handson-ml3注意这是CPU-only镜像。GPU 支持请阅读下文「GPU 支持」章节使用ageron/handson-ml3:latest-gpu标签。四、本地构建镜像确保环境最新如果你想确保环境基于最新库版本可以自行构建更慢但只需要做一次。假设项目已下载到/path/to/project/handson-ml3$ cd /path/to/project/handson-ml3/docker $ docker-compose build构建完成后会得到ageron/handson-ml3:latest镜像作为后续所有实验的基础。可用以下命令确认$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ageron/handson-ml3 latest 3ebafebc604a 2 minutes ago 4.87GB示例中的 IMAGE ID 与 SIZE 会因构建时间与环境而异仅供参考。构建过程在做什么Dockerfile 剖析本地构建并非黑盒docker/Dockerfile 清晰地定义了镜像的组装步骤基础镜像以continuumio/miniconda3:latest为基础系统依赖通过apt-get安装protobuf-compilerTensorFlow 序列化协议所需和sudo并清理 apt 缓存创建 conda 环境把仓库根目录的 environment.yml 复制进容器执行conda env create -f /tmp/environment.yml创建名为homl3的环境随后清理 conda 缓存并删除*.a、*.pyc、*.js.map等冗余文件以缩小镜像体积非 root 用户通过构建参数username/userid创建普通用户docker-compose.yml 中默认devel/1000并授予其无密码sudo权限避免以 root 身份运行 Notebook环境变量将PATH指向/opt/conda/envs/homl3/bin使容器内默认使用homl3环境的 PythonNotebook 差异工具集成执行git-nbdiffdriver config --enable --global并配置git diff对 Jupyter Notebook 使用git-nbdiffdriver diff --ignore-detailsDockerfile 注释中还给出了可切换的--ignore-metadata变体bashrc 注入把 docker/bashrc.bash 追加进用户.bashrc。此外 Dockerfile 中还有一批默认注释掉的可选配置解开注释即可启用自动把.py脚本与.html视图导出到 Notebook 旁边——对应 docker/jupyter_notebook_config.py 中定义的post_save_hook禁用 git diff 分页git config --global core.pager 使用固定密码替代 token 访问 Jupyter默认标签localhost:8888。注意注释中特别强调不要直接使用示例中的空密码哈希这会造成安全漏洞必须用from notebook.auth import passwd; passwd()生成自己的密码哈希替换。五、启动 Jupyter 服务镜像就绪后启动容器内的 Jupyter 服务容器名handson-ml3$ cd /path/to/project/handson-ml3/docker $ docker-compose up把浏览器指向屏幕打印的 URL如果你在构建前于 docker/jupyter_notebook_config.py 中启用了密码认证则直接访问 http://localhost:8888即可开始运行书中的代码。服务运行在包含 Notebook 的目录中你在浏览器中做的修改会持久化保存。按Ctrl-C即可关闭服务。深入 docker-compose.ymldocker/docker-compose.yml 是整套编排的核心逐字段拆解如下version: 3 services: handson-ml3: build: context: ../ # 构建上下文指向仓库根目录environment.yml 在根目录 dockerfile: ./docker/Dockerfile # GPU 时改为 ./docker/Dockerfile.gpu args: - usernamedevel # 容器内用户名 - userid1000 # 容器内用户 UID与宿主机 uid 对应便于文件权限管理 container_name: handson-ml3 image: ageron/handson-ml3:latest # GPU 时改为 ageron/handson-ml3:latest-gpu restart: unless-stopped logging: driver: json-file options: max-size: 50m # 日志上限 50MB防止 Jupyter 日志无限膨胀 ports: - 8888:8888 # Jupyter - 6006:6006 # TensorBoard volumes: - ../:/home/devel/handson-ml3 # 仓库根目录挂载进容器改动即时可见 command: /opt/conda/envs/homl3/bin/jupyter lab --ip0.0.0.0 --port8888 --no-browser #deploy: # GPU 场景需取消注释docker-compose ≥ 1.28 # resources: # reservations: # devices: # - capabilities: [gpu]几个关键点值得注意卷挂载宿主机仓库根目录被挂载到容器内/home/devel/handson-ml3这正是「浏览器改动持久化」的实现原理——Notebook 文件本身就在宿主机磁盘上双端口映射8888 留给 Jupyter6006 留给 TensorBoard方便在容器内启动可视化服务后从宿主机浏览器访问启动命令默认启动的是Jupyter Lab而非经典 Notebook UI使用homl3环境内的可执行文件并绑定0.0.0.0。六、用 make 简化操作可选如果你的宿主机装有make可以用它作为docker-compose的薄封装。查看 docker/Makefile 可知全部可用目标make 目标实际执行的命令用途make helpcat Makefile打印帮助信息make rundocker-compose up启动 Jupyter 服务make execdocker-compose exec handson-ml3 bash进入容器内 bashmake builddocker-compose build构建镜像make rebuilddocker-compose build --no-cache不使用缓存重建确保基于最新的continuumio/miniconda3基础镜像make stopdocker stop handson-ml3 \|\| true; docker rm handson-ml3 \|\| true停止并删除容器其中make rebuild的语义值得强调--no-cache会跳过 Docker 构建缓存层使镜像继承最新版本的基础镜像ageron/handson-ml3直接基于continuumio/miniconda3适合周期性刷新环境。七、在容器内运行附加命令在服务运行期间你可以打开一个额外的容器内 bash$ make exec # 等价于docker-compose exec handson-ml3 bash进入后即可使用镜像内预装的环境。得益于 docker/bashrc.bash 注入的别名有几个非常实用的快捷命令alias llls -alF # 带权限与文件类型的详细列表 alias nbdnbdiff_checkpoint # 对比 Notebook 与其 checkpoint 版本 alias tbtensorboard --logdirtf_logs # 一键启动 TensorBoard典型的容器内操作场景启动 TensorBoard直接执行tb随后从宿主机浏览器访问 http://localhost:6006Notebook 差异比较如果宿主机没有装nbdime容器内已经预装可用nbdiff比较 Notebook——它比纯文本diff智能得多能按单元格含输出、metadata级别展示差异与 git 集成容器内git diff已通过git-nbdiffdriver与nbdiff集成可以直观看到你对 Notebook 相对 git 版本的改动checkpoint 对比执行nbd NOTEBOOK_NAME.ipynb即nbdiff_checkpoint别名会输出「把手动保存的版本位于.ipynb_checkpoints子目录更新为当前自动保存版本」所需的重放修改——精确地说参数指定的文件位于工作目录是 Jupyter 自动保存的当前版本输出告诉你要做什么修改才能把手动保存版更新到它。八、GPU 支持Linux实验性该功能官方标注为experimental请以仓库实际配置为准。1. 硬件与驱动前置需要一张 TensorFlow 兼容的 NVIDIA 显卡Compute Capability ≥ 3.5并从 nvidia.com 安装最新驱动安装 NVIDIA 容器运行时Docker ≥ 19.03 安装nvidia-container-toolkit包更早版本安装nvidia-docker2。2. 修改 docker-compose.yml$ cd /path/to/project/handson-ml3/docker $ edit docker-compose.yml # 使用你喜欢的编辑器需要做三处修改把dockerfile: ./docker/Dockerfile改为dockerfile: ./docker/Dockerfile.gpu把image: ageron/handson-ml3:latest改为image: ageron/handson-ml3:latest-gpu使用 docker-compose 时需1.28 及以上版本并取消注释整个deploy段deploy: resources: reservations: devices: - capabilities: [gpu]3. 准备镜像一次性操作拉取预构建 GPU 镜像压缩数据超过 3.5 GB$ docker pull ageron/handson-ml3:latest-gpu或自行构建$ cd /path/to/project/handson-ml3/docker $ docker-compose build4. docker-compose ≥ 1.28一键运行$ cd /path/to/project/handson-ml3/docker $ docker-compose up [...] or http://127.0.0.1:8888/?token[...]浏览器打开 URL 后新建或打开任意 Notebook执行以下代码验证 GPU 可见性import tensorflow as tf tf.config.list_physical_devices(GPU)如果输出中列出了你的 GPU 设备说明 GPU 透传成功。停止服务同样按Ctrl-C。5. 无 docker-compose直接 docker run如果 docker-compose 版本早于 1.28必须直接使用docker run。Docker ≥ 19.03 时$ cd /path/to/project/handson-ml3 $ docker run --name handson-ml3 --gpus all -p 8888:8888 -p 6006:6006 \ --log-opt modenon-blocking --log-opt max-buffer-size50m \ -v pwd:/home/devel/handson-ml3 \ ageron/handson-ml3:latest-gpu \ /opt/conda/envs/homl3/bin/jupyter notebook --ip0.0.0.0 --port8888 --no-browser参数说明参数含义--name handson-ml3指定容器名--gpus all透传全部 GPU旧版 Docker 改为--runtimenvidia-p 8888:8888 -p 6006:6006Jupyter 与 TensorBoard 端口映射--log-opt modenon-blocking --log-opt max-buffer-size50m非阻塞异步日志最多缓冲 50MB避免高频日志拖慢容器-v \pwd:/home/devel/handson-ml3挂载当前仓库目录浏览器打开显示 URL 后用同样的tf.config.list_physical_devices(GPU)代码确认 TensorFlow 能看到 GPU。结束时先按Ctrl-C中断服务然后$ docker rm handson-ml3该命令删除容器本身不会删除镜像也不会删除 Notebook 文件它们都在宿主机卷挂载目录里之后可以随时再起新容器。九、深入 GPU 镜像Dockerfile.gpu 的 CUDA 层GPU 镜像与 CPU 镜像最大的区别在于 docker/Dockerfile.gpu 叠加了完整的 CUDA 运行时层其构建逻辑分三段CUDA 基础层借鉴tensorflow/tensorflow:latest-gpu的 Dockerfile基于nvidia/cuda:11.2.2-base-ubuntu20.04通过构建参数固定关键版本——CUDA11.2、CUDNN8.1.0.77-1、LIBNVINFER7.2.2-1安装cuda-command-line-tools、libcublas、cuda-nvrtc、libcufft、libcurand、libcusolver、libcusparse、libcudnn8、TensorRTlibnvinferPowerPC 架构除外等全套 GPU 依赖并设置LD_LIBRARY_PATH指向 CUPTI 目录供 CUDA 性能剖析使用Miniconda 层按uname -mx86_64 / s390x / aarch64 / ppc64le选择对应安装包并用 SHA256 校验安装脚本完整性随后做与 CPU 版相同的瘦身清理公共层与 CPU Dockerfile 相同的homl3环境创建、非 root 用户创建、nbdiff 集成与 bashrc 注入。从源码结构可以看出GPU 镜像本质上 CUDA/cuDNN/TensorRT 运行时 Miniconda homl3环境因此体积远大于 CPU 镜像拉取压缩数据即超过 3.5 GB这也是 GPU 版被标注为实验性的主要原因之一。十、镜像内预装环境一览无论 CPU 还是 GPU 镜像核心 Python 环境都由根目录的 environment.yml 定义conda 环境名homl3Python 3.10。主要组件如下类别包版本用途数值计算numpy 1.26、scipy 1.11、numexpr 2.8多维数组与科学计算数据分析pandas 2.1、statsmodels 0.14、joblib 1.3数据操作、时间序列、模型序列化机器学习scikit-learn 1.3、py-xgboost 1.7全书机器学习算法实现深度学习tensorflow~2.14.0、keras-core、keras-tuner~1.4.6第 10 章起的核心框架可视化matplotlib 3.8、graphviz、python-graphviz、pillow 10.1、pydot 1.4绘图与模型结构图工具链ipython 8.17、jupyterlab 4.0、jupyter 1.1、ipywidgets 8.1、tqdm 4.66、widgetsnbextension 4.0Notebook 运行与交互Notebook 协作nbdime 3.2Notebook 差异比较见第七章领域库transformers~4.35.0、tensorflow-datasets~4.9.3、tensorflow-hub~0.15.0、tensorboard~2.14.1、tensorboard-plugin-profile~2.14.0、tensorflow-serving-api~2.14.0、nltk 3.8、urlextract~1.8.0、requests 2.31、gymnasium[classic_control,atari]、box2d-py 2.3、ffmpeg 6.1NLP、强化学习第 18 章、部署第 19 章等章节专用云服务google-cloud-aiplatform~1.36.2、google-cloud-storage~2.13.0第 19 章云端部署每条依赖在 environment.yml 中都注明了用途例如box2d-py仅用于第 18 章练习 8、graphviz仅用于第 6 章 dot 文件、ffmpeg仅用于 matplotlib 教程生成动画便于按需裁剪。十一、与本地安装方案的对比与迁移如果不想用 Docker官方在 INSTALL.md 与 README.md 中提供了本地 Anaconda 路径conda env create -f environment.yml创建homl3环境、conda activate homl3激活、python -m ipykernel install --user --namepython3注册内核最后jupyter notebook启动。两种方案对比维度Docker本文本地 condaINSTALL.md宿主机依赖仅 docker / docker-composemake、GPU 驱动Python、Anaconda/Miniconda、CUDA/cuDNNGPU 时环境隔离完全隔离镜像即环境conda 环境隔离首启成本拉取 1.9GBCPU/ 3.5GBGPU或构建数分钟依赖解析与下载同样可观Notebook 持久化卷挂载宿主机目录直接读写天然在宿主机多机复现镜像可分发环境完全一致需逐机重建环境简言之Docker 方案的优势在于环境可复现与零侵入尤其适合不想在主力机上折腾 Python 依赖树、或需要在多台机器间保持一致实验环境的读者本地方案则胜在无需容器层、调试直观。两者的 Notebook 与数据完全互通随时可以按需切换。结语至此你已经掌握了 handson-ml3 官方 Docker 环境的全部用法从docker pull ageron/handson-ml3或docker-compose build准备镜像到docker-compose up一键启动 Jupyter再到make exec进入容器用tb启动 TensorBoard、用nbdiff对比 Notebook对于 GPU 用户还覆盖了Dockerfile.gpu的配置修改、--gpus all直跑与tf.config.list_physical_devices(GPU)验证。配合仓库内 Dockerfile、docker-compose.yml、environment.yml 等源码你可以在完全理解镜像内部结构的前提下把它改造成适合自己的实验环境——接下来就打开index.ipynb开始动手吧。赞分享示例工程教程【免费下载链接】handson-ml3A series of Jupyter notebooks that walk you through the fundamentals of Machine Learning and Deep Learning in Python using Scikit-Learn, Keras and TensorFlow 2.项目地址https://gitcode.com/gh_mirrors/ha/handson-ml3点击查看免费下载相关推荐face_recognition 官方 Docker 镜像全解析CPU/GPU/Jupyter 镜像的构建、部署与实战指南face_recognition 官方 Docker 镜像全解析CPU/GPU/Jupyter 镜像的构建、部署与实战指南 本篇技术指南围绕 face_rec人工智能计算机视觉深度学习TileLang 容器化环境搭建Docker 镜像构建与 GPU 容器运行全解TileLang 容器化环境搭建Docker 镜像构建与 GPU 容器运行全解 TileLang 的构建依赖一条较长的工具链定制版 TVM 子模块、CUTL编译器编程语言高性能计算人工智能深度学习使用 Docker 构建与运行 Recommenders 多环境镜像CPU / PySpark / GPU 实战指南使用 Docker 构建与运行 Recommenders 多环境镜像CPU / PySpark / GPU 实战指南 本指南以 tools/docker/RE人工智能机器学习深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表