nvidia docker Cannot load libnvcuvid.so.1
问题#
使用docker对runtime进行封装,程序需要用到GPU且在host正常运行,在容器内则报错:
Cannot load libnvcuvid.so.1
[hevc_cuvid @ 0x559da3fbd80] Failed loading nvcuvid.
terminate called after throwing an instance of 'std::runtime_error'
what(): failed to open avcodec
Aborted (core dumped)
排查#
第一反应ldd查看依赖,程序并不直接依赖libnvcuvid.so.1
host存在/usr/lib/x86_64-linux-gnu/libnvcuvid.so.1
容器内部却找不到库文件,已包含docker run --gpus all
容器执行nvidia-smi
能够正常显示GPU调用CUDA也正常
分析#
既然CUDA正常排除container-toolkit问题,深挖应用节点依赖的avcodec需要用到显卡codec
默认不开启codec支持,Driver Capability列表如下
Driver Capability | Description |
---|---|
compute |
required for CUDA and OpenCL applications. |
compat32 |
required for running 32-bit applications. |
graphics |
required for running OpenGL and Vulkan applications. |
utility |
required for using nvidia-smi and NVML. |
video |
required for using the Video Codec SDK. |
display |
required for leveraging X11 display. |
empty or unset | default driver capability: utility , compute |
解决#
$ docker run --rm --runtime=nvidia -e NVIDIA_DRIVER_CAPABILITIES=compute,video,utility nvidia/cuda:12.0.1-cudnn8-runtime-ubuntu18.04 ldconfig -p | grep libnvcuvid
libnvcuvid.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libnvcuvid.so.1
$ docker run --rm --gpus 'all,"capabilities=compute,video,utility"' nvidia/cuda:12.0.1-cudnn8-runtime-ubuntu18.04 ldconfig -p | grep libnvcuvid
libnvcuvid.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libnvcuvid.so.1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2022-07-09 SSH同时开启key和2FA两步认证
2020-07-09 VMware虚拟机命令行操作
2020-07-09 Python列表填充0对齐(zero padding)