Docker使用GPU的奇技淫巧

前言#

使用Docker对多卡GPU服务器进行隔离,具体搭建方法可参考使用Docker实现GPU服务器共享与资源隔离 - azureology - 博客园
使用过程中遇到并解决一些问题,记录解决方案避免供参考。

问题#

Docker with GPU: "Failed to initialize NVML: Unknown Error"#

优先尝试将host显卡驱动版本与内核对齐,方法为sudo dmesg | grep NVRM查看正确版本。
如果不行再往下看:
这个问题比较复杂,在我这边属于偶发,表现为container中cuda无法正常调用,运行nvidia-smi报错Docker with GPU: "Failed to initialize NVML: Unknown Error"
且调用torch.cuda.is_avaliable()值为False,重启container可以暂时恢复正常,host始终没有发生此类问题。
开始根据参考文档指引修改了cgroups参数,正常使用一段时间后问题依旧,后续又将host安装的nvidia驱动升级到最新依然无法解决。
仔细观察文档中的docker run命令,包含--gpus all外还有--privileged不知用意为何。
抱着试试看的心态将现有container打包为image并重新加入--privileged参数,问题未再复现。

Bus error. It is possible that dataloader's workers are out of shared memory. Please try to raise your shared memory limit.#

这个报错比较直白,默认container设置的shared memory数量为64MB无法满足需求,
在启动阶段可通过向docker run追加--shm-size=16gb解决,建议不要超过物理内存一半。
如果container已经运行,则需要手动修改对应配置文件:

docker ps
# 查看并记录container id
docker stop <container_id>
sudo vi /var/lib/docker/containers/<container_id>/hostconfig.json
# 修改"ShmSize":17179869184 单位bytes
docker start <container_id>
#验证修改生效
docker exec <container_id> df -h /dev/shm

参考#

Nvml error: driver/library version mismatch - NVIDIA cuOpt / cuOpt - NVIDIA Developer Forums
[SOLVED] Docker with GPU: "Failed to initialize NVML: Unknown Error" / Applications & Desktop Environments / Arch Linux Forums
Can I increase shared memory after launching a docker session - Stack Overflow

posted @   azureology  阅读(4039)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示
主题色彩