docker
- 以daemon 方式執行,使用 ssh 登入
- ssh login uid/gid 要與 host 端一致
- 使用 host folder
- 要 support cuda
而且啟動的時候要加上 "--gpu all"
docker run -idt --gpus all -v ~/dockerfolder:/dockerfolder -p 8022:22 nvidia/cuda:10.1-base docker exec -it container-name bash進入後...
apt-get update apt-get install openssh-server vim sudo /etc/init.d/ssh start addgroup --gid 1001 myname adduser --uid 1001 --gid 1001 myname vi /etc/group -- add myname to sudo and root group這樣,已經可以 ssh -p 8022 hostname 登入了..
安裝需要的 compiler 和 tool
sudo apt-get install build-essential pkgconfig
要 install cuda sdk (Toolkit)
chmod a+x cuda_10.1.243_418.87.00_linux.run sudo ./cuda_10.1.243_418.87.00_linux.run ...然後依照說明,把 bin 和 so path 加入..
/etc/profil.d/cuda101.sh
export PATH=$PATH:/usr/local/cuda-10.1/bin/etc/ld.so.conf.d/cuda-10.1.conf
/usr/local/cuda-10.1/target/x86_64-linux/lib /usr/local/cuda-10.1/lib64改完 ld.so.conf.d, sudo run 一次 ldconfig 來 update ld cache.
至於 path. 如果不重新開機,就要自己 source 一次。
follow nvidia ffmpeg,因為 ffmpeg 已經把 nvidia 要的 header 分離開來,所以要到 nvidia 下載:
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git cd nv-codec-headers make sudo make install
開始 download and build ffmpeg...
git clone https://git.ffmpeg.org/ffmpeg.git cd ffmpeg git checkout n4.2.1 git checkout -b 4.2.1 ./configure --prefix=/dockerfolder/cudaffmpeg --enable-cuda-nvcc --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 make -j10 make install會安裝到 /dockerfolder/cudaffmpeg 下,
所以還要增加 share library path
export LD_LIBRARY_PATH=/dockerfolder/cudaffmpeg/lib然後就可以測試...
:/dockerfolder/cudaffmpeg/bin$ ./ffmpeg -version ffmpeg version N-95607-gb414cff630 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1) configuration: --prefix=/dockerfolder/cudaffmpeg --enable-cuda-nvcc --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 libavutil 56. 35.101 / 56. 35.101 libavcodec 58. 60.100 / 58. 60.100 libavformat 58. 33.100 / 58. 33.100 libavdevice 58. 9.100 / 58. 9.100 libavfilter 7. 66.100 / 7. 66.100 libswscale 5. 6.100 / 5. 6.100 libswresample 3. 6.100 / 3. 6.100
測試..20sec 的 mp4 轉 h264
time ~/cudaffmpeg/bin/ffmpeg -i testvideo.mp4 -an -vcodec h264_nvenc testvideo.h264 ... real 0m4.157s user 0m14.736s sys 0m0.214s time ~/cudaffmpeg/bin/ffmpeg -i testvideo.mp4 -an -vcodec libx264 testvideo0.h264 ... real 0m24.757s user 2m19.679s sys 0m2.956s好像快了 10 倍...
一些其他的 ffmpeg, 一般的options..
scale:
ffmpeg -i testvideo.h264 -vf scale=320:240 -vcodec h264_nvenc test320.h264
這個docker container 執行 ffmpeg hvenc 失敗,找不到 libnvidia-encode.so。要用這一篇 的方法加上 capability 參數,enable video 才行。
沒有留言:
張貼留言