在Windows 10 + WSL2上运行nvidia-docker

19

我看到了一些关于这个话题的问答,并尝试了两种方法。欢迎任何有关如何继续使用这两种方法的建议:

从WSL2内部运行nvidia-docker

我遵循了NVIDIA文档这篇教程。一切都安装好了,在Ubuntu 20.04内部运行docker命令也没有问题。但是,sudo service docker start返回:
docker: unrecognized service

更新: 这是一个已知问题。我按照这些说明在Ubuntu上安装并运行了docker。然而,接下来我遇到了一个类似的问题

$docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
Status: Downloaded newer image for nvcr.io/nvidia/k8s/cuda-sample:nbody
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.go:459: container init caused: Running hook #0:: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: initialization error: nvml error: driver not loaded: unknown.
ERRO[0065] error waiting for container: context canceled
  • 在WSL1中有一个类似的问题这里,建议安装WSL2。我在WSL2下也遇到了同样的问题。

从Windows运行NVIDIA Docker:

另一种 思路 是将docker从WSL Ubuntu中删除,改为从Windows上运行docker。然后可以从WSL连接到它。但是,我无法从Windows上运行nvidia-docker

$ docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
Unable to find image 'nvcr.io/nvidia/k8s/cuda-sample:nbody' locally
nbody: Pulling from nvidia/k8s/cuda-sample
...
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
  • 这里有如何解决这个问题的提示,点击这里,但都是关于在 Linux 系统中运行 Docker 的。而那并不起作用(见上文)。

此外,在从 Ubuntu 删除 Docker 后,我仍然可以从 Ubuntu 20.04 运行 Docker 或者在 Powershell 中运行 wsl

$ which docker
/mnt/c/ProgramData/DockerDesktop/version-bin/docker
$ docker 
The command 'docker' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.

See https://docs.docker.com/docker-for-windows/wsl/ for details.

我已经在Docker设置的两个不同标签中启用了基于WSL2的引擎和Ubuntu 20.04的集成。

系统

Windows 10
WSL 2
Ubuntu 20.04 within WSL2
Windows Docker with WSL2-based engine and integration enabled
任何进一步诊断的帮助都将不胜感激。

除了你的建议,我还没有尝试过的只有Windows Insider计划,但是我已经没有太多耐心了!感谢微软和英伟达! - Abbas Elmas
3个回答

7
截至2022年6月,在Windows 10上,我不需要做任何事情就可以启用此功能。我在WSL 2上有一个现有的Ubuntu 20.04安装,并且在启用了WSL 2集成后,在Windows上运行Docker。我运行了 docker run -it --rm --gpus all ubuntu nvidia-smi 命令并显示了我的GPU。

这是否为您提供了所有指标的访问权限?https://forums.developer.nvidia.com/t/sqlite-does-not-contain-cuda-kernel-data/219742/12?u=nobutaka - mLstudent33

4

我认为在WSL2上运行nVidia GPU(CUDA)的最佳方法是按照nVidia文档CUDA on WSL中的教程进行操作。你需要正确地按顺序完成以下三个步骤:

  1. 首先,检查您的Windows是否有更新,如果有,请更新。然后,您需要订阅Microsoft Windows Insider Program,具体订阅Dev通道(快速环)。确保设置为Dev通道而不是Beta通道或Release Preview通道。对我来说,这是棘手的部分,在选择Dev通道后,请通过运行(winver)程序(在Windows的搜索栏中搜索它)检查您的Windows版本,如果低于20145,请重新检查Windows是否有更新(您将看到更新说明版本高于20145可用)。您需要安装它,这里您需要耐心等待,因为下载和安装更新需要一段时间,它会要求您重新启动Windows。重新启动后,您可以开始使用(您还会注意到两个Windows版本之间的一些设计差异)。再次使用(winver)检查您的Windows版本,确保它确实高于20145。
  2. 接下来,安装WSL 2的NVIDIA预览驱动程序,这是一个非常简单的过程。
  3. 最后,从教程安装WSL2,这也是一个非常简单的过程。个人而言,我遵循了David Bombal频道的youtube教程。
在这三个步骤正确执行后,您可以按照nVidia教程从设置CUDA Toolkit开始进行操作。这里有另一份nVidia文档,在第8章中说明了您所面临的相同问题。他们声称:此错误通常表示未正确安装正确的Microsoft Windows Insider Preview Builds、WSL 2、NVIDIA驱动程序和NVIDIA Container Toolkit。

对我来说,问题出在我的Windows Insider Preview Builds版本没有正确设置为20145或更高版本。


你是否认为为了使用NVIDIA NGC目录中的预训练模型而做这一切是合理的呢?我只是想在我的Windows笔记本电脑上使用Quadro T1000测试它们,然后再考虑投资更多设备。 - Cazforshort
我会说是的。只需要几个安装步骤,你就可以开始了。正如你所说,这是在Linux上测试Nvidia预训练模型的快速方法,而不需要实际的Linux系统。 - Khalil Meftah
我一直在尝试升级到开发通道,但它一直崩溃。我的当前版本是21H1。我很困惑,升级一直失败。 - Linminxiang
@Linminxiang,说实话我也不知道为什么。我没有遇到这个更新失败的情况。 - Khalil Meftah
@KhalilMeftah 我在卸载卡巴斯基之后成功更新了。并且按照这里的配置[https://forums.developer.nvidia.com/t/guide-to-run-cuda-wsl-docker-with-latest-versions-21382-windows-build-470-14-nvidia/178365]成功安装了所有东西。 - Linminxiang

-1

通过https://docs.docker.com/docker-for-windows/wsl/

  • 取消勾选 "启用与我的默认 WSL 发行版的集成" 并应用更改,

  • 然后取消勾选 "使用基于 WSL 2 的引擎" 并应用更改。

  • 勾选上述所有内容并启用: "启用与其他发行版的集成:" Ubuntu-20.04

  • 打开终端:

    docker ps 
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    

它在我的Win10 Docker 3.6上运行...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接