Table of contents

March 25, 2026 ยท View on GitHub

deepo

workflows docker license


Deepo is an open framework for painlessly assembling specialized Docker images for deep learning research. It provides a "Lego set" of dozens of standard components for preparing deep learning tools, along with a framework for composing them into custom Docker images.

At the core of Deepo is a Dockerfile generator that

  • lets you customize your deep learning environment with Lego-like modules
    • describe your environment in a single command line
    • Deepo generates Dockerfiles following best practices
    • and handles all the configuration for you
  • automatically resolves dependencies
    • Deepo knows which combinations of CUDA, cuDNN, Python, PyTorch, TensorFlow, etc. are compatible
    • picks the right versions on your behalf
    • and determines the correct installation order via topological sorting

We also provide a series of pre-built Docker images that


Table of contents


Quick Start

GPU Version

Installation

Step 1. Install Docker and NVIDIA Container Toolkit.

Step 2. Pull the all-in-one image from Docker Hub

docker pull ufoym/deepo

Usage

Verify that GPU access works inside a container:

docker run --gpus all --rm ufoym/deepo nvidia-smi

If this does not work, check the issues section of the NVIDIA Container Toolkit GitHub โ€” many solutions are already documented. To launch an interactive shell in a persistent container:

docker run --gpus all -it ufoym/deepo bash

To share data and configuration between the host (your machine or VM) and the container, use the -v option:

docker run --gpus all -it -v /host/data:/data -v /host/config:/config ufoym/deepo bash

This makes /host/data on the host visible as /data inside the container, and /host/config as /config. This isolation helps prevent containerized experiments from accidentally overwriting or reading the wrong data.

Note that some frameworks (e.g., PyTorch) use shared memory for inter-process communication. If you use multiprocessing, the container's default shared memory size may be insufficient. Increase it with --ipc=host or --shm-size:

docker run --gpus all -it --ipc=host ufoym/deepo bash

CPU Version

Installation

Step 1. Install Docker.

Step 2. Pull the all-in-one image from Docker Hub

docker pull ufoym/deepo:cpu

Usage

Launch an interactive shell:

docker run -it ufoym/deepo:cpu bash

To share data and configuration between the host (your machine or VM) and the container, use the -v option:

docker run -it -v /host/data:/data -v /host/config:/config ufoym/deepo:cpu bash

This makes /host/data on the host visible as /data inside the container, and /host/config as /config. This isolation helps prevent containerized experiments from accidentally overwriting or reading the wrong data.

Note that some frameworks (e.g., PyTorch) use shared memory for inter-process communication. If you use multiprocessing, the container's default shared memory size may be insufficient. Increase it with --ipc=host or --shm-size:

docker run -it --ipc=host ufoym/deepo:cpu bash

You are now ready to begin your journey.

$ python
>>> import tensorflow
>>> import torch
>>> import keras
>>> import mxnet
>>> import chainer
>>> import paddle
$ darknet
usage: darknet <function>

Customization

The docker pull ufoym/deepo command from Quick Start gives you a standard image containing every available deep learning framework. You can also customize your own environment.

Unhappy with all-in-one solution?

If you prefer a single framework instead of the all-in-one image, simply append a tag with the framework name. For example, to pull TensorFlow only:

docker pull ufoym/deepo:tensorflow

Jupyter Support

Step 1. Pull the all-in-one image

docker pull ufoym/deepo

Step 2. Run the image

docker run --gpus all -it -p 8888:8888 -v /home/u:/root --ipc=host ufoym/deepo jupyter lab --no-browser --ip=0.0.0.0 --allow-root --LabApp.allow_origin='*' --LabApp.root_dir='/root'

Build Your Own Customized Image with Lego-like Modules

Step 1. Set up the generator

git clone https://github.com/ufoym/deepo.git
cd deepo/generator

Step 2. Generate a customized Dockerfile

For example, to create an image with pytorch and keras:

python generate.py Dockerfile pytorch keras

Or with CUDA 11.3 and cuDNN 8:

python generate.py Dockerfile pytorch keras --cuda-ver 11.3.1 --cudnn-ver 8

This generates a Dockerfile with everything needed to build pytorch and keras. The generator automatically resolves dependencies and topologically sorts them, so you don't need to worry about missing packages or ordering.

You can also specify the Python version:

python generate.py Dockerfile pytorch keras python==3.8

Step 3. Build the Dockerfile

docker build -t my/deepo .

This may take several minutes, as some libraries are compiled from source.

Comparison to Alternatives

.modern-deep-learningdl-dockerjupyter-deeplearningDeepo
ubuntu16.0414.0414.0420.04
cudaX8.06.5-8.011.3/None
cudnnXv5v2-5v8
onnxXXXO
tensorflowOOOO
pytorchXXXO
kerasOOOO
mxnetXXXO
chainerXXXO
darknetXXXO
paddlepaddleXXXO

Tags

Available Tags

.CUDA 11.3 / Python 3.8CPU-only / Python 3.8
all-in-onelatest all all-py38 py38-cu113 all-py38-cu113all-py38-cpu all-cpu py38-cpu cpu
TensorFlowtensorflow-py38-cu113 tensorflow-py38 tensorflowtensorflow-py38-cpu tensorflow-cpu
PyTorchpytorch-py38-cu113 pytorch-py38 pytorchpytorch-py38-cpu pytorch-cpu
Keraskeras-py38-cu113 keras-py38 keraskeras-py38-cpu keras-cpu
MXNetmxnet-py38-cu113 mxnet-py38 mxnetmxnet-py38-cpu mxnet-cpu
Chainerchainer-py38-cu113 chainer-py38 chainerchainer-py38-cpu chainer-cpu
Darknetdarknet-cu113 darknetdarknet-cpu
PaddlePaddlepaddle-cu113 paddlepaddle-cpu

Deprecated Tags

.CUDA 11.3 / Python 3.6CUDA 11.1 / Python 3.6CUDA 10.1 / Python 3.6CUDA 10.0 / Python 3.6CUDA 9.0 / Python 3.6CUDA 9.0 / Python 2.7CPU-only / Python 3.6CPU-only / Python 2.7
all-in-onepy36-cu113 all-py36-cu113py36-cu111 all-py36-cu111py36-cu101 all-py36-cu101py36-cu100 all-py36-cu100py36-cu90 all-py36-cu90all-py27-cu90 all-py27 py27-cu90all-py27-cpu py27-cpu
all-in-one with jupyterall-jupyter-py36-cu90all-py27-jupyter py27-jupyterall-py27-jupyter-cpu py27-jupyter-cpu
Theanotheano-py36-cu113theano-py36-cu111theano-py36-cu101theano-py36-cu100theano-py36-cu90theano-py27-cu90 theano-py27theano-py27-cpu
TensorFlowtensorflow-py36-cu113tensorflow-py36-cu111tensorflow-py36-cu101tensorflow-py36-cu100tensorflow-py36-cu90tensorflow-py27-cu90 tensorflow-py27tensorflow-py27-cpu
Sonnetsonnet-py36-cu113sonnet-py36-cu111sonnet-py36-cu101sonnet-py36-cu100sonnet-py36-cu90sonnet-py27-cu90 sonnet-py27sonnet-py27-cpu
PyTorchpytorch-py36-cu113pytorch-py36-cu111pytorch-py36-cu101pytorch-py36-cu100pytorch-py36-cu90pytorch-py27-cu90 pytorch-py27pytorch-py27-cpu
Keraskeras-py36-cu113keras-py36-cu111keras-py36-cu101keras-py36-cu100keras-py36-cu90keras-py27-cu90 keras-py27keras-py27-cpu
Lasagnelasagne-py36-cu113lasagne-py36-cu111lasagne-py36-cu101lasagne-py36-cu100lasagne-py36-cu90lasagne-py27-cu90 lasagne-py27lasagne-py27-cpu
MXNetmxnet-py36-cu113mxnet-py36-cu111mxnet-py36-cu101mxnet-py36-cu100mxnet-py36-cu90mxnet-py27-cu90 mxnet-py27mxnet-py27-cpu
CNTKcntk-py36-cu113cntk-py36-cu111cntk-py36-cu101cntk-py36-cu100cntk-py36-cu90cntk-py27-cu90 cntk-py27cntk-py27-cpu
Chainerchainer-py36-cu113chainer-py36-cu111chainer-py36-cu101chainer-py36-cu100chainer-py36-cu90chainer-py27-cu90 chainer-py27chainer-py27-cpu
Caffecaffe-py36-cu113caffe-py36-cu111caffe-py36-cu101caffe-py36-cu100caffe-py36-cu90caffe-py27-cu90 caffe-py27caffe-py27-cpu
Caffe2caffe2-py36-cu90 caffe2-py36 caffe2caffe2-py27-cu90 caffe2-py27caffe2-py36-cpu caffe2-cpucaffe2-py27-cpu
Torchtorch-cu113torch-cu111torch-cu101torch-cu100torch-cu90torch-cu90 torchtorch-cpu
Darknetdarknet-cu113darknet-cu111darknet-cu101darknet-cu100darknet-cu90darknet-cu90 darknetdarknet-cpu

Citation

@misc{ming2017deepo,
    author = {Ming Yang},
    title = {Deepo: Set up a deep learning environment with a single command line.},
    year = {2017},
    publisher = {GitHub},
    journal = {GitHub repository},
    howpublished = {\url{https://github.com/ufoym/deepo}}
}

Contributing

We appreciate all contributions. If you are planning to contribute bug fixes, please go ahead and open a pull request directly. If you plan to contribute new features, utility functions, or extensions, please open an issue first to discuss your idea with us.

Licensing

Deepo is MIT licensed.