如何在Docker容器中通过conda安装CUDA版PyTorch并确保可调用CUDA
根因梳理
- 构建报错根因:已通过
SHELL指令指定所有RUN命令默认使用conda run -n camera-seg激活虚拟环境,非交互shell未加载conda的bash初始化配置,重复执行conda activate会触发命令未配置的报错。 - 安装后CUDA不可用根因:
requirements.yaml未添加PyTorch官方源,conda默认源会自动安装CPU版本的PyTorch,无CUDA加速能力。- 容器运行时未挂载宿主机GPU设备,容器内无法感知宿主机的NVIDIA驱动与GPU硬件。
修正方案
1. 修正后的Dockerfile
# Use nvidia/cuda image FROM nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 # set bash as current shell RUN chsh -s /bin/bash # install anaconda RUN apt-get update RUN apt-get install -y wget bzip2 ca-certificates libglib2.0-0 libxext6 libsm6 libxrender1 git mercurial subversion && \ apt-get clean RUN wget --quiet https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh -O ~/anaconda.sh && \ /bin/bash ~/anaconda.sh -b -p /opt/conda && \ rm ~/anaconda.sh && \ ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \ echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \ find /opt/conda/ -follow -type f -name '*.a' -delete && \ find /opt/conda/ -follow -type f -name '*.js.map' -delete && \ /opt/conda/bin/conda clean -afy # set path to conda ENV PATH /opt/conda/bin:$PATH # setup conda virtual environment COPY ./requirements.yaml /tmp/requirements.yaml RUN conda update conda \ && conda env create --name camera-seg -f /tmp/requirements.yaml \ && conda install -y -c conda-forge -n camera-seg flake8 # Make RUN commands use the new environment SHELL ["conda", "run", "-n", "camera-seg", "/bin/bash", "-c"] # PyTorch with CUDA 10.2 RUN conda install pytorch torchvision cudatoolkit=10.2 -c pytorch RUN echo "conda activate camera-seg" > ~/.bashrc ENV PATH /opt/conda/envs/camera-seg/bin:$PATH
核心修改点:移除
RUN命令中冗余的conda activate camera-seg前缀,SHELL指令已自动完成环境激活,无需重复操作。
2. 若需将PyTorch写入requirements.yaml的修正配置
name: camera-seg channels: - defaults - conda-forge - pytorch dependencies: - python=3.6 - numpy - pillow - yaml - pyyaml - matplotlib - jupyter - notebook - tensorboardx - tensorboard - protobuf - tqdm - pytorch - torchvision - cudatoolkit=10.2
注意:必须添加
pytorch通道,否则conda会从默认源拉取无CUDA支持的CPU版PyTorch。
3. 容器运行时的必填配置
构建完成后,运行容器时必须添加GPU挂载参数,否则容器内无法访问宿主机GPU:
docker run --gpus all -it camera-seg /bin/bash
提示:若使用旧版nvidia-docker,替换为
nvidia-docker run -it camera-seg /bin/bash即可。
验证方法
进入容器后执行以下命令,返回True即为配置成功:
python -c "import torch; print(torch.cuda.is_available())"
内容的提问来源于stack exchange,提问作者Rahul Bohare
相关产品推荐
相关产品推荐

