2 回答
TA贡献1846条经验 获得超7个赞
原来我只需要用作nvidia/cuda/10.0-devel基础图像而不是nvidia/cuda/10.0-base
所以我的 Dockerfile 现在是:
# Dockerfile
FROM nvidia/cuda:10.0-devel
RUN nvidia-smi
RUN set -xe \
&& apt-get update \
&& apt-get install python3-pip -y \
&& apt-get install git -y
RUN pip3 install --upgrade pip
WORKDIR /SingleModelTest
COPY requirements /SingleModelTest/requirements
RUN export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64
RUN pip3 install -r requirements/requirements1.txt
RUN pip3 install -r requirements/requirements2.txt
COPY . /SingleModelTest
ENTRYPOINT ["python"]
CMD ["TabNetAPI.py"]
TA贡献1784条经验 获得超2个赞
编辑:这个答案只是告诉您如何验证 docker 映像中发生的情况。不幸的是我无法弄清楚为什么会发生这种情况。
如何检查呢?
在 docker 构建的每个步骤中,您都可以看到正在生成的各个层。您可以使用该 ID 创建临时映像来检查发生了什么。例如
docker build -t my_bonk_example .
[...]
Removing intermediate container xxxxxxxxxxxxx
---> 57778e7c9788
Step 19/31 : RUN mkdir -p /tmp/spark-events
---> Running in afd21d853bcb
Removing intermediate container xxxxxxxxxxxxx
---> 33b26e1a2286 <-- let's use this ID
[ failure happens ]
docker run -it --rm --name bonk_container_before_failure 33b26e1a2286 bash
# now you're in the container
echo $LD_LIBRARY_PATH
ls /usr/local/cuda
关于 Dockerfile 的旁注:
如果更改 Dockerfile 中的指令顺序,则可以缩短未来构建的构建时间。Docker 使用的缓存在发现与之前构建不同的内容时就会失效。我希望您更改代码的频率高于 docker 映像的要求,因此将 COPY 移到 apt 指令之后是有意义的。例如
# Dockerfile
FROM nvidia/cuda:10.2-base
RUN set -xe \
&& apt-get update \
&& apt-get install python3-pip -y \
&& apt-get install git -y
RUN pip3 install --upgrade pip
WORKDIR /SingleModelTest
COPY requirements /SingleModelTest/requirements
RUN pip3 install -r requirements/requirements1.txt
RUN pip3 install -r requirements/requirements2.txt
COPY . /SingleModelTest
RUN nvidia-smi
ENTRYPOINT ["python"]
CMD ["TabNetAPI.py"]
注意:这只是一个例子。
关于为什么图像无法构建,我发现 PyTorch 1.4 不支持 CUDE 11.0 ( https://discuss.pytorch.org/t/pytorch-with-cuda-11-compatibility/89254 ),但也使用以前的CUDA版本并没有解决这个问题。
添加回答
举报