资讯动态

Deepo 实战指南:用 Lego 式模块与 Dockerfile 生成器一键搭建深度学习环境

发布时间:2026/10/15 2:07:43 来源:尧图企业网站定制
人工智能深度学习MLOps【免费下载链接】deepoSetup and customize deep learning environment in seconds.项目地址https://gitcode.com/gh_mirrors/de/deepo点击查看免费下载Deepo 是一个面向深度学习研究的开源框架其核心是一套 Lego 积木式 的标准组件库与一个 Dockerfile 生成器你只需在一条命令行里声明所需的深度学习框架PyTorch、TensorFlow、Keras、MXNet、Chainer、PaddlePaddle、Darknet 等Deepo 便会自动解析组件间的依赖关系、通过拓扑排序安排安装顺序并生成遵循最佳实践的 Dockerfile。本文基于当前仓库README.md 及 generator 源码完整讲解 Deepo 的快速上手、GPU/CPU 镜像使用、Jupyter 支持以及如何利用python generate.py定制自己的深度学习镜像并深入剖析生成器底层依赖解析 拓扑排序的实现原理。一、Deepo 是什么一套深度学习环境的乐高积木Deepo的定位是开箱即用的深度学习环境装配框架它把常用的深度学习工具拆分成几十个标准组件每个组件即一个可安装模块并提供一套组装框架让用户像搭乐高积木一样组合出自定义的 Docker 镜像。其核心能力集中在 Dockerfile 生成器上源码见 generator/generate.py 与 generator/core/composer.pyLego 式模块化定制在一行命令行中定义你需要的环境生成器会输出符合最佳实践的 Dockerfile并替你完成所有配置工作自动依赖解析Deepo 内置了 CUDA/cuDNN/Python/PyTorch/TensorFlow 等组合的兼容性知识自动挑选合适的版本并通过拓扑排序安排各组件的安装先后顺序你完全不必担心依赖缺失或列表顺序问题。与此同时Deepo 也维护了一系列预构建镜像支持即时搭建常见的深度学习研究环境覆盖主流深度学习框架参见可用 Tags一节支持 GPU 加速内置 CUDA 与 cuDNN也支持纯 CPU 模式可在 LinuxCPU/GPU、WindowsCPU和 macOSCPU上运行。需要特别说明的是根据 README 中的提示该项目目前已不再积极维护文中所有命令、版本号与配置均以当前仓库实际内容为准请在使用时留意其适用前提。二、快速开始GPU 版本2.1 安装Step 1.安装 Docker 与 NVIDIA Container Toolkit。Step 2.从 Docker Hub 拉取 all-in-one 镜像docker pull ufoym/deepo2.2 使用先验证容器能否访问 GPUdocker run --gpus all --rm ufoym/deepo nvidia-smi如果这条命令能够正常输出 GPU 信息说明 Deepo 已经可以在容器内使用 GPU。若失败NVIDIA Container Toolkit 的 GitHub issues 区已沉淀了大量解决方案可供检索。进入一个退出后不会自动删除的交互式 shelldocker run --gpus all -it ufoym/deepo bash共享数据与配置如果需要在宿主机与容器之间共享数据和配置使用-v选项例如docker run --gpus all -it -v /host/data:/data -v /host/config:/config ufoym/deepo bash这条命令会把宿主机的/host/data挂载为容器内的/data把/host/config挂载为容器内的/config。这种隔离方式降低了容器内实验误写或误用错误数据的风险。共享内存注意事项部分框架如 PyTorch使用共享内存进行进程间数据共享当启用多进程multiprocessing时容器默认的共享内存段大小可能不够用。此时应通过--ipchost或--shm-size参数增大共享内存例如docker run --gpus all -it --ipchost ufoym/deepo bash三、快速开始CPU 版本3.1 安装Step 1.安装 Docker。Step 2.拉取 CPU 版 all-in-one 镜像docker pull ufoym/deepo:cpu3.2 使用docker run -it ufoym/deepo:cpu bash共享数据同样使用-v选项docker run -it -v /host/data:/data -v /host/config:/config ufoym/deepo:cpu bash多进程场景同样建议增加共享内存docker run -it --ipchost ufoym/deepo:cpu bash3.3 环境自检进入容器后你可以立即验证环境是否就绪。README 给出的自检方式如下$ python import tensorflow import torch import keras import mxnet import chainer import paddle再检查 Darknet 是否就绪$ darknet usage: darknet function能依次无报错地导入这些框架并看到darknet的用法输出说明环境已经装配完成。四、定制化不想要 all-in-onedocker pull ufoym/deepo拉取的是包含全部深度学习框架的标准镜像。如果你只偏爱某个特定框架只需在标签中追加框架名即可。以 TensorFlow 为例docker pull ufoym/deepo:tensorflow同理PyTorch、Keras、MXNet、Chainer、Darknet、PaddlePaddle 都有对应的单框架标签具体可参照后文镜像 Tags 对照表。五、Jupyter 支持Step 1.拉取 all-in-one 镜像docker pull ufoym/deepoStep 2.以 Jupyter Lab 模式运行镜像docker run --gpus all -it -p 8888:8888 -v /home/u:/root --ipchost ufoym/deepo jupyter lab --no-browser --ip0.0.0.0 --allow-root --LabApp.allow_origin* --LabApp.root_dir/root参数解读-p 8888:8888将容器的 8888 端口映射到宿主机浏览器访问http://localhost:8888即可打开 Jupyter Lab-v /home/u:/root把宿主机的/home/u挂载为容器内的/root方便读写实验文件--ipchost增大共享内存避免多进程问题--no-browser --ip0.0.0.0 --allow-root在无界面环境下以 root 身份启动服务并监听所有网卡--LabApp.allow_origin* --LabApp.root_dir/root放开跨域来源限制并将 Jupyter 根目录指向/root。从源码看Jupyter 相关模块位于 generator/modules/jupyter.py 与 generator/modules/jupyterlab.pyJupyter模块通过pip安装jupyter并通过expose()暴露 8888 端口Jupyterlab模块则依赖Python与Jupyter在其基础上追加安装jupyterlab。这正是 README 中 all-jupyter 系列镜像参见弃用 Tags的组成部分。六、Build用 Lego 式模块构建自己的定制镜像6.1 Step 1准备生成器git clone https://github.com/ufoym/deepo.git cd deepo/generator6.2 Step 2生成自定义 Dockerfile假设你同时喜欢pytorch和keraspython generate.py Dockerfile pytorch keras指定 CUDA 11.3 与 cuDNN 8python generate.py Dockerfile pytorch keras --cuda-ver 11.3.1 --cudnn-ver 8指定 Python 版本python generate.py Dockerfile pytorch keras python3.8生成器会输出一个包含构建pytorch与keras所需全部内容的 Dockerfile。需要注意生成器内部会自动处理依赖并把模块列表进行拓扑排序因此无需手工操心依赖缺失与列表顺序。命令行参数总览见 generator/generate.py 的 argparse 定义参数含义默认值path生成的 Dockerfile 输出路径位置参数必填modules要安装的模块名列表支持模块版本写法位置参数可多个必填至少一个--cuda-verCUDA 版本号如11.3.1不传则生成 CPU 镜像无--cudnn-vercuDNN 版本号如8无--ubuntu-verUbuntu 版本如20.0420.04参数解析逻辑如下源码节选自 generator/generate.py每个模块名先按切分terms[0]作为模块名terms[1]若存在作为该模块的版本号存入versions字典随后Composer会完成依赖遍历、拓扑排序与 Dockerfile 渲染。当--cuda-ver未指定时基础镜像为ubuntu:{ubuntu_ver}指定后则为nvidia/cuda:{cuda_ver}-cudnn{cudnn_ver}-devel-ubuntu{ubuntu_ver}见 generator/core/composer.py。6.3 Step 3构建镜像docker build -t my/deepo .由于部分库需要从源码编译例如 Darknet、OpenCV、Theano 的 libgpuarray 等整个构建过程可能需要几分钟。七、生成器源码级解析依赖解析与拓扑排序7.1 模块体系装饰器驱动的声明式定义所有模块都继承自 generator/modules/module.py 中的Module基类并通过三个装饰器声明元信息dependency(...)声明该模块依赖哪些其他模块source(...)声明安装来源取值如apt系统包、pipPython 包、git源码克隆编译、src源码编译version(...)声明默认版本号。以 PyTorch 模块为例generator/modules/pytorch.pydependency(Python) source(pip) class Pytorch(Module): def build(self): cuver cpu if self.composer.cuda_ver is None else fcu{.join(self.composer.cuda_ver.split(.)[:2])} return r $PIP_INSTALL \ future numpy protobuf pyyaml \ $PIP_INSTALL \ torch torchvision torchaudio \ --extra-index-url https://download.pytorch.org/whl/%s \ % cuver从源码结构可以看出几点实现细节Pytorch声明依赖Python因此拓扑排序会保证 Python 先于 PyTorch 被安装当指定--cuda-ver 11.3.1时cuver会推导为cu113pip 安装走https://download.pytorch.org/whl/cu113的 CUDA wheel 源未指定时则走cpu源各模块的build()返回一段以\续行拼接的 shell 片段最终被渲染进 Dockerfile 的RUN指令中。7.2 ComposerBFS 依赖遍历 拓扑排序generator/core/composer.py 中的Composer是生成器的核心其初始化流程分三步_traverse依赖遍历从用户指定的模块集合出发以广度优先BFS的方式逐层展开每个模块的deps收集出完整的待安装模块全集composer.py_toposort拓扑排序对全集构建依赖图反复挑选当前没有任何未满足依赖的模块并输出直到全部排完若最终仍有剩余则抛出ValueError提示存在循环依赖composer.pyto_dockerfile渲染输出依次拼接基础镜像FROM、环境变量LANG C.UTF-8、常用命令别名APT_INSTALL、PIP_INSTALL、GIT_CLONE、各模块的构建片段、收尾清理ldconfig apt-get clean apt-get autoremove以及EXPOSE端口声明composer.py。以仓库中现成的 docker/Dockerfile.all-py38-cu113 为例其头部会生成一段模块清单注释随后是FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04各模块按tools → darknet → python → chainer → jupyter → mxnet → onnx → paddle → pytorch → tensorflow → jupyterlab → keras的顺序安装最后以EXPOSE 8888 6006收尾。其中darknet排在python之前它只依赖Tools、keras排在最后它依赖Python与Tensorflow正是拓扑排序的直观体现。7.3 依赖树实例看几个典型模块Kerasgenerator/modules/keras.py声明依赖Python, Tensorflow构建片段仅包含注释——因为 Keras 已随 TensorFlow 2 以tensorflow.keras的形式内置只需安装 TensorFlow 2 即可TensorFlowgenerator/modules/tensorflow.py依赖PythonGPU 模式下安装tensorflow-gpuCPU 模式下安装tensorflow支持版本白名单校验1.13.1、2.0.0a0、latest并暴露 6006 端口TensorBoardMXNetgenerator/modules/mxnet.py依赖PythonGPU 模式下会安装mxnet-cu112源码中对 CUDA 11.3 场景做了到-cu112的映射Chainergenerator/modules/chainer.py依赖PythonGPU 模式下额外安装cupyPaddlePaddlegenerator/modules/paddle.py依赖PythonGPU 模式下安装paddlepaddle-gpuDarknetgenerator/modules/darknet.py依赖Tools通过git clone拉取 AlexeyAB/darknet用sed把 Makefile 中的GPU0/CUDNN0按 GPU 模式改写然后make -j$(nproc)编译并安装到/usr/local/binPythongenerator/modules/python.py依赖Tools默认版本3.8通过 apt 安装python3.8及开发包、用 get-pip.py 安装 pip并批量安装 numpy、scipy、pandas、scikit-image、scikit-learn、matplotlib、Cython、tqdm 等基础科学计算库源码会校验版本不小于 3.8Toolsgenerator/modules/tools.py无依赖安装 build-essential、git、vim、cmake、curl 等基础工具是大多数模块的地基此外仓库还提供了Theano、CNTK、Caffe、Lasagne、Sonnet、Torch、ONNX、OpenCV、Boost等模块见 generator/modules/ 目录其中 Theano/Lasagne、CNTK、Caffe、Torch 在 README 的弃用 Tags 中仍有对应镜像标签Sonnet 依赖 TensorFlow、Lasagne 依赖 Theano、Caffe 依赖 Boost 与 OpenCV、CNTK 依赖 OpenCV完整复现了这些框架生态的依赖关系。7.4 批量生成与 CIscripts 目录的配套设施仓库的 scripts/ 目录提供了批量生成 Dockerfile 与 CI 配置的工具链其使用流程记录在 scripts/README.md运行python make-gen-docker.py生成gen-docker.sh脚本运行bash gen-docker.sh批量生成 docker/ 下的全部Dockerfile.*运行python make-ci.py生成 GitHub Actions 工作流文件.github/workflows/dockerimage.yml。scripts/make-gen-docker.py 中维护了候选模块列表tensorflow、mxnet、keras、pytorch、chainer、darknet、paddle、非 Python 模块列表torch、darknet与 Python 版本列表3.8并以 CUDA 11.3.1/cuDNN 8 与 CPU 两种配置各生成一遍仓库中已生成的 scripts/gen-docker.sh 就是它的产物例如python ../generator/generate.py ../docker/Dockerfile.all-py38-cu113 tensorflow mxnet keras pytorch chainer darknet paddle python3.8 onnx jupyterlab --cuda-ver 11.3.1 --cudnn-ver 8而 scripts/make-ci.py 会遍历docker/目录下每个 Dockerfile 的后缀根据后缀推导镜像 Tags为每个镜像生成构建 推送到 Docker Hub的 CI Job并对 all-in-one 的 CPU 镜像附加一个冒烟测试 Job在容器内依次导入 tensorflow、mxnet、keras、torch、chainer、paddle 并打印版本号再运行darknet验证其可执行。八、与其他方案的对比README 中给出了 Deepo 与当时主流深度学习镜像方案modern-deep-learning、dl-docker、jupyter-deeplearning的对比表摘录如下项目modern-deep-learningdl-dockerjupyter-deeplearningDeepoubuntu16.0414.0414.0420.04cudaX8.06.5-8.011.3/NonecudnnXv5v2-5v8onnxXXXOtensorflowOOOOpytorchXXXOkerasOOOOmxnetXXXOchainerXXXOdarknetXXXOpaddlepaddleXXXOO 表示支持X 表示不支持从表中可以看出Deepo 在框架覆盖面PyTorch、MXNet、Chainer、Darknet、PaddlePaddle 等与基础环境版本Ubuntu 20.04、CUDA 11.3、cuDNN v8上具有明显差异。需要说明的是该对比表来自 README 原始记录反映的是文档发布时的状况请以当前仓库实际内容为准。九、镜像 Tags 对照表9.1 可用 Tags镜像CUDA 11.3 / Python 3.8CPU-only / Python 3.8all-in-onelatestallall-py38py38-cu113all-py38-cu113all-py38-cpuall-cpupy38-cpucpuTensorFlowtensorflow-py38-cu113tensorflow-py38tensorflowtensorflow-py38-cputensorflow-cpuPyTorchpytorch-py38-cu113pytorch-py38pytorchpytorch-py38-cpupytorch-cpuKeraskeras-py38-cu113keras-py38keraskeras-py38-cpukeras-cpuMXNetmxnet-py38-cu113mxnet-py38mxnetmxnet-py38-cpumxnet-cpuChainerchainer-py38-cu113chainer-py38chainerchainer-py38-cpuchainer-cpuDarknetdarknet-cu113darknetdarknet-cpuPaddlePaddlepaddle-cu113paddlepaddle-cpu与这批可用 Tags 对应docker/ 目录中提供了全部对应的 Dockerfile 模板如 Dockerfile.all-py38-cu113、Dockerfile.tensorflow-py38-cpu、Dockerfile.pytorch-py38-cu113 等你可以直接docker build -f docker/Dockerfile.xxx .复现这些镜像的构建过程。9.2 弃用 Tags以下 Tags 属于历史版本涉及 Python 3.6/2.7、CUDA 9.0/10.0/10.1/11.1 等旧组合部分含 Jupyter、Theano、Sonnet、CNTK、Caffe、Caffe2、Torch 等框架仅作参考镜像CUDA 11.3 / Py3.6CUDA 11.1 / Py3.6CUDA 10.1 / Py3.6CUDA 10.0 / Py3.6CUDA 9.0 / Py3.6CUDA 9.0 / Py2.7CPU / Py3.6CPU / Py2.7all-in-onepy36-cu113all-py36-cu113py36-cu111all-py36-cu111py36-cu101all-py36-cu101py36-cu100all-py36-cu100py36-cu90all-py36-cu90all-py27-cu90all-py27py27-cu90—all-py27-cpupy27-cpuall-in-one with jupyter————all-jupyter-py36-cu90all-py27-jupyterpy27-jupyter—all-py27-jupyter-cpupy27-jupyter-cpuTheanotheano-py36-cu113theano-py36-cu111theano-py36-cu101theano-py36-cu100theano-py36-cu90theano-py27-cu90theano-py27—theano-py27-cpuTensorFlowtensorflow-py36-cu113tensorflow-py36-cu111tensorflow-py36-cu101tensorflow-py36-cu100tensorflow-py36-cu90tensorflow-py27-cu90tensorflow-py27—tensorflow-py27-cpuSonnetsonnet-py36-cu113sonnet-py36-cu111sonnet-py36-cu101sonnet-py36-cu100sonnet-py36-cu90sonnet-py27-cu90sonnet-py27—sonnet-py27-cpuPyTorchpytorch-py36-cu113pytorch-py36-cu111pytorch-py36-cu101pytorch-py36-cu100pytorch-py36-cu90pytorch-py27-cu90pytorch-py27—pytorch-py27-cpuKeraskeras-py36-cu113keras-py36-cu111keras-py36-cu101keras-py36-cu100keras-py36-cu90keras-py27-cu90keras-py27—keras-py27-cpuLasagnelasagne-py36-cu113lasagne-py36-cu111lasagne-py36-cu101lasagne-py36-cu100lasagne-py36-cu90lasagne-py27-cu90lasagne-py27—lasagne-py27-cpuMXNetmxnet-py36-cu113mxnet-py36-cu111mxnet-py36-cu101mxnet-py36-cu100mxnet-py36-cu90mxnet-py27-cu90mxnet-py27—mxnet-py27-cpuCNTKcntk-py36-cu113cntk-py36-cu111cntk-py36-cu101cntk-py36-cu100cntk-py36-cu90cntk-py27-cu90cntk-py27—cntk-py27-cpuChainerchainer-py36-cu113chainer-py36-cu111chainer-py36-cu101chainer-py36-cu100chainer-py36-cu90chainer-py27-cu90chainer-py27—chainer-py27-cpuCaffecaffe-py36-cu113caffe-py36-cu111caffe-py36-cu101caffe-py36-cu100caffe-py36-cu90caffe-py27-cu90caffe-py27—caffe-py27-cpuCaffe2————caffe2-py36-cu90caffe2-py36caffe2caffe2-py27-cu90caffe2-py27caffe2-py36-cpucaffe2-cpucaffe2-py27-cpuTorchtorch-cu113torch-cu111torch-cu101torch-cu100torch-cu90torch-cu90torch—torch-cpuDarknetdarknet-cu113darknet-cu111darknet-cu101darknet-cu100darknet-cu90darknet-cu90darknet—darknet-cpu十、项目许可与引用Deepo 采用 MIT 许可。若在你的研究或文章中引用 DeepoREADME 给出的 BibTeX 条目如下misc{ming2017deepo, author {Ming Yang}, title {Deepo: set up deep learning environment in a single command line.}, year {2017}, publisher {GitHub}, journal {GitHub repository}, howpublished {\url{https://github.com/ufoym/deepo}} }结语通过本文你可以掌握两条使用 Deepo 的路径一是直接使用预构建镜像GPU/CPU 版 all-in-one 或单框架镜像快速获得开箱即用的深度学习环境并通过-v、--ipchost、--gpus all等 Docker 参数满足数据共享、共享内存与 GPU 加速需求二是深入 generator/ 源码理解其装饰器声明依赖 BFS 依赖遍历 拓扑排序 Dockerfile 渲染的模块化设计并利用python generate.py按需组装包含任意框架组合、CUDA 版本与 Python 版本的自定义镜像。若需进一步研究实现细节可继续阅读 generator/core/composer.py、generator/modules/ 与 docker/ 下的各 Dockerfile 模板。赞分享人工智能深度学习MLOps【免费下载链接】deepoSetup and customize deep learning environment in seconds.项目地址https://gitcode.com/gh_mirrors/de/deepo点击查看免费下载相关推荐终极深度学习环境一键配置Deepo实战案例全解析终极深度学习环境一键配置Deepo实战案例全解析 Deepo是一个开源框架能够帮助研究人员和开发者在几秒钟内搭建和定制深度学习环境。它提供了数十种标准组件的人工智能深度学习MLOpsComfyUI-Frame-Interpolation终极指南12种AI算法实现智能视频帧插值ComfyUI Frame Interpolation终极指南12种AI算法实现智能视频帧插值 在AI视频生成和数字内容创作领域帧率不足往往导致运动卡顿和视人工智能计算机视觉视频处理AMD ROCm深度学习环境搭建实战指南AMD ROCm深度学习环境搭建实战指南 环境搭建前必读 想在Windows平台上充分发挥AMD显卡的深度学习潜力AMD ROCm平台为Windows开发工具高性能计算文档上一篇CC Switch完全指南如何通过跨平台桌面助手实现多AI服务一键切换下一篇OpenScreen视频编辑教程时间轴操作与精准裁剪技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑