2019/11/4

cuda docker images .. again , for develop nvcc command.

上次做的,發現nvidia/cuda10.1-base,進入後,雖然 nvidia-smi 是 OK 的,但是沒有 nvcc command。
自己安裝 Toolkit 後,build ffmpeg OK,run 起來 libavcodec.so load fail,說 nvidia driver version 不對 (其實是對的)。

cuda container tags list 中,有列出所有 image 的內容。
每個 link 可以看到 Dockerfile。
猜是 nvidia/cuda10.1-devel 這格才有 nvcc。
測試一下..
docker run -gpus all -it nvidia/cuda:10.1-devel bash
..
:/# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
到 /usr/local 下也有看到 cuda-10.1 目錄。

結果一樣,找不到 libnvidia-encode.so

在 host 找,是在 /usr/lib/:
:/usr/lib$ sudo find . -type f -name 'libnvidia-en*'
./i386-linux-gnu/libnvidia-encode.so.435.21
./x86_64-linux-gnu/libnvidia-encode.so.435.21

可能要參考這一篇,加上 CAPIBILITIES option
-- 沒用,那是舊版nvidia-docker。

這一個 dockerfile 大概可以試試看..

最後,在 nvidia Docker 自己的說明 : Usage
For a Dockerfile using the NVIDIA Video Codec SDK, you should use:

ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,video,utility
所以,..遵照說明,把 cuda10.1-base 的Dockerfile download 下來。
在 NVIDIA_DRIVER_CAPABILITIES 加上 video
放在 folder 中,在 folder 中下..
docker build -t cudaffmpeg .
用 docker images 看看 cudaffmpeg 有沒有 create 出來..
結果 libnvidia-encode.so 是有了,但是沒有 nvcc...

應該要參考devel 的 Dockerfile..
所以合併兩個 Dockerfile..
.. 看這幾個Tag的Dockerfile 關係(FROM):
base -- runtime -- devel
所以直接拿 devel 來就可以。再用 -e 來變更 dockfile 的 ENV NVIDIA_DRIVER_CAPABILITIES:
docker run -it --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,video,utility nvidia/cuda:10.1-devel bash
測試 nvcc, nvidia-smi. libnvidia-encode.so 都在。

參考前面兩篇,用這個docker image 啟動後, build ffmpeg,使用 nvidia hw 加速 OK.

沒有留言:

張貼留言