是否可以使用适用于Windows的docker进行GPU传递?

时间:2018-03-31 15:11:58

标签: docker windows-10 virtualization hyper-v

我正在尝试在Windows 10中的docker容器中运行一个应用程序。

但是我无法让GPU在docker中工作。

我读到它需要“GPU直通”。

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:7)

现在Windows 10上的docker可以访问WSL2(从Windows 10版本2004开始),它为Windows 10上的Linux docker容器的GPU支持扫清了道路。

根据此官方博客,MS“将在未来几个月内开始预览Windows 10 Insider构建中对WSL的GPU计算支持”: https://devblogs.microsoft.com/commandline/the-windows-subsystem-for-linux-build-2020-summary/#wsl-gpu

我希望不久后会支持Docker GPU。

更新

在特定情况下,现在可以在Windows中传递GPU,包括:

  • 该容器也必须是Windows
  • 仅进程级隔离,没有hyper-v
  • 仅适用于基于DirectX的应用程序
  • 对于机器学习,这意味着只有Microsoft ML可以工作。

引用:https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/gpu-acceleration

更新2:

现在可以在最新的Windows Insider构建中从Windows主机上的Linux docker传递GPU,请参考:

https://ubuntu.com/blog/getting-started-with-cuda-on-ubuntu-on-wsl-2

这可能会在下一个主要更新中传播到主流Windows。

答案 1 :(得分:4)

Windows上不支持从Docker容器内进行GPU访问。

您需要nvidia-docker,但目前仅在Linux平台上支持。使用Hyper-v的GPU直通需要离散设备分配(DDA),目前仅在Windows Server中,并且(at least in 2015)没有计划改变这种状态。因此,NVIDIA目前尚未将nvidia-docker移植到Windows。

这里有更多信息: https://devblogs.nvidia.com/nvidia-docker-gpu-server-application-deployment-made-easy/

答案 2 :(得分:3)

2021 更新答案

如果您需要从 Windows 10 上的 Linux 容器访问 NVIDIA CUDA,如果您对使用 Insider 构建的(当前)要求没问题,则有一种简单的方法可以这样做。我使用这种方法在 TensorFlow 2 中的 GPU 上成功训练模型。

  1. 更新 Windows 10 以构建 20149 或更高版本。在撰写本文时,只有 Insider Dev 分支可以使用 - 您可以在 Windows Insider webpage 上查看内部版本号。
  2. 安装NVIDIA CUDA WSL driver (需要免费注册)
  3. 安装Docker Desktop
    • 如果您尚未启用 WSL2,它将指导您完成。
    • 如果您已经安装了它,请将其更新到最新版本并启用 Settings - General - Use the WSL2 backed engine
    • 为了能够从 WSL2 内部(不仅仅是从 PowerShell/cmd)使用 docker CLI,请在 Settings - Resources - WSL INTEGRATION 中启用集成。
  4. 使用命令 docker run --rm -it --gpus=all nvcr.io/nvidia/k8s/cuda-sample:nbody 进行测试

您需要将 --gpus=all 传递给 docker run 以使容器能够访问 GPU。 (如果您使用 VSCode 远程容器,请将 "runArgs": ["--gpus=all"], 添加到 devcontainer.json。)

您可能会在针对 --runtime=nvidia(例如 official TensorFlow images)的图片的描述中提到 nvidia-docker。只需在提供的命令中将 --runtime=nvidia 替换为 --gpus=all

答案 3 :(得分:-1)

提供样品!

ffmpeg -hide_banner -codecs | grep 264
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_cuvid ) (encoders: h264_nvenc h264_v4l2m2m nvenc nvenc_h264 )

这将表明 ffmpeg 版本可以处理:h264_nvenc nvenc nvenc_h264

ffmpeg -i video.mp4 -vf scale=iw/2:ih/2 -vcodec h264_nvenc "video_2.mp4"

在我的 WSL2/Insider 上,我收到一条消息,指出我没有安装正确的 nvidia 驱动程序。因为驱动安装在windows操作系统的下方。

与 Microsoft NVIDIA 的询问结果表明硬件加速没有通过,他们近期也没有这样做的计划。

widnows 操作系统上的 Windows docker,可能没问题。会检查。

答案 4 :(得分:-2)

请注意的硬件加速编码解码的视频是的不支持在WSL2 / Windows的内幕实现。

因此,任何 GPU 功能都可以在 WSL2 上使用,几乎没有限制,但视频编码-解码不能由硬件完成。

尝试问FFMPEG使用硬件加速导致的错误消息。 (的 skvideo 下,其是包装的ffmpeg,的崩溃

不知道有关的GStreamer呢。但可以肯定它不能使用硬件加速,因为它不通过接口“漏斗状”。

据我所知 - 目前没有计划,以增加的部份支持

最好的, 米奇