1. WSL + Docker GPU 环境排查:NVIDIA-SMI couldn't find libnvidia-ml.so 问题分析与解决
最近在配置WSL2+Docker的GPU开发环境时,遇到了一个典型问题:在WSL主机中nvidia-smi命令运行正常,但在Docker容器内却报错"NVIDIA-SMI couldn't find libnvidia-ml.so library"。这个问题看似简单,但涉及WSL的特殊架构和Docker的GPU运行时机制。本文将详细记录我的排查过程和最终解决方案。
1.1 问题现象描述
当在WSL2(Ubuntu 20.04)中直接运行nvidia-smi时,输出完全正常:
bash复制$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12 Driver Version: 527.41 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 On | N/A |
| 0% 45C P8 10W / 250W | 300MiB / 8192MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
然而,当进入使用--gpus all参数启动的Docker容器后,同样的命令却报错:
bash复制$ docker run -it --gpus all nvidia/cuda:11.0-base nvidia-smi
NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please make sure that the NVIDIA Display Driver is properly installed and present in your system.
这个现象非常具有迷惑性,因为主机环境明明可以正常识别GPU,但容器内却无法访问。接下来我将详细分析这个问题背后的原因。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
