WSL2 Ubuntu20.04配置TensorFlow GPU加速遇Docker及GPU检测问题
我来帮你一步步排查这些WSL2 + TensorFlow GPU加速的问题,这些坑我之前也踩过不少,咱们逐个解决:
1. 先搞定
sudo service docker start提示未识别服务的问题 其实这个问题根源很简单:如果你是装了Windows桌面版Docker,那WSL2里的Docker是共享Windows端的Docker daemon,Ubuntu系统里并没有安装Linux版的Docker服务,所以service docker命令自然无效。
解决办法分两种:
- 推荐方案:打开Windows Docker Desktop的设置 → 「Resources」→「WSL Integration」,确保你的Ubuntu 20.04发行版是勾选状态,点击「Apply & Restart」。之后在WSL2终端里直接用
docker命令就行,不需要手动启动服务,它会自动连接Windows的Docker后台。 - 如果你非要用Linux原生Docker:卸载Windows Docker Desktop,然后在Ubuntu里重新安装Docker Engine + nvidia-docker2,但这种方式配置更繁琐,不推荐。
2. 解决
nvidia-container-cli: initialization error错误 这个错误一般是WSL2的NVIDIA驱动或nvidia-docker配置出了问题,按下面步骤来:
- 先划重点:WSL2用的是Windows版的NVIDIA驱动,不是Linux版!赶紧检查你的Windows端驱动:GTX970推荐装470.x系列的稳定驱动(对老卡兼容性好),如果更了Windows Insider预览版,记得装NVIDIA的预览版驱动(Game Ready或Studio预览版都可以)。
- 然后在WSL2里安装nvidia-docker2组件:
- 添加NVIDIA的软件源:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list - 更新包列表并安装:
sudo apt-get update sudo apt-get install -y nvidia-docker2 - 重启Docker:如果用Windows Docker Desktop,直接重启Desktop就行;如果是Linux Docker,就跑
sudo systemctl restart docker。
- 添加NVIDIA的软件源:
- 最后测试一下:
docker run --rm nvidia/cuda:11.0-base nvidia-smi,能正常显示GPU信息就说明没问题了。
3. 解决GTX970不被识别、CUDA示例提示0设备的问题
这是最核心的问题,WSL2没正确挂载Windows的GPU,试试这些办法:
- 先更到最新的WSL2内核:打开Windows终端,跑
wsl --update,更新完成后重启WSL。 - 检查Windows的虚拟化功能:打开控制面板 → 程序 → 启用或关闭Windows功能,确保「Hyper-V」「Virtual Machine Platform」「Windows Subsystem for Linux」这三个选项都勾选,然后重启电脑。
- 在WSL2里安装WSL专用的NVIDIA驱动包:
注意:这个是WSL2特有的驱动包,不是完整的Linux驱动,实际驱动还是Windows提供的,别装错了。sudo apt-get install -y nvidia-driver-470 - 跑
nvidia-smi看看能不能识别GPU,如果还是不行,试试重置WSL(记得先备份WSL里的重要数据!):- Windows终端里跑
wsl --shutdown关闭所有WSL实例 - 然后
wsl --unregister Ubuntu-20.04(会清空这个发行版的所有内容) - 重新从Microsoft Store安装Ubuntu 20.04,再重新配置环境
- Windows终端里跑
- 额外提醒:GTX970是Kepler架构,TensorFlow 2.5及以后对这个架构的支持有限,建议用TensorFlow 2.4.x版本,或者Docker容器里选CUDA 11.0 + cuDNN 8.0的组合,兼容性更好。
内容的提问来源于stack exchange,提问作者BlackCoffee
相关产品推荐
相关产品推荐

