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版本并沒有解決這個問題。
添加回答
舉報