我正在尝试在Windows 10中的docker容器中运行一个应用程序。
但是我无法让GPU在docker中工作。
我读到它需要“GPU直通”。
我该如何解决这个问题?
答案 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,包括:
引用: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)
如果您需要从 Windows 10 上的 Linux 容器访问 NVIDIA CUDA,如果您对使用 Insider 构建的(当前)要求没问题,则有一种简单的方法可以这样做。我使用这种方法在 TensorFlow 2 中的 GPU 上成功训练模型。
Settings - General - Use the WSL2 backed engine
。docker
CLI,请在 Settings - Resources - WSL INTEGRATION
中启用集成。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呢。但可以肯定它不能使用硬件加速,因为它不通过接口“漏斗状”。
据我所知 - 目前没有计划,以增加的部份支持
最好的, 米奇