Windows版Docker可以实现GPU直通吗?

nbewdwxp  于 2023-03-29  发布在  Docker
关注(0)|答案(6)|浏览(589)

我试图在Windows 10中的Docker容器中运行应用程序。
但是我无法让GPU在Docker中工作。
我读到它需要“GPU直通”。
我该怎么办?

1cosmwyk

1cosmwyk1#

**更新(2020年12月)**如果您使用WSL 2作为Docker的后端,您现在可以在Windows上进行GPU直通:WSL 2 GPU Support is Here-这是一个比在WSL中运行Docker * 稍微整洁的方法。
原答复:

目前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/

更新(2019年10月)nvidia-docker已弃用,因为Docker 19.03对NVIDIA GPU有原生支持。请安装nvidia-container-runtime,并使用docker run --gpus all标志。您也可以使用Docker 19.03在Windows主机上运行Windows Containers with GPU acceleration,但不能在Linux容器上运行。
更新(2020年8月):看起来你现在可以在Windows Linux子系统(WSL 2)中运行Docker时进行GPU直通。

此链接通过安装,设置和运行TensorFlow Jupyter笔记本在WSL 2的Ubuntu中的Docker中,具有GPU支持:https://ubuntu.com/blog/getting-started-with-cuda-on-ubuntu-on-wsl-2
注意-我自己还没有这样做。

tvokkenx

tvokkenx2#

现在Windows 10上的docker可以访问WSL 2(从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://learn.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。

更新三:

确认Windows build版本2021将包括WSL的GPU直通。请在此处查看公告的详细信息:https://blogs.windows.com/windowsdeveloper/2021/05/25/the-windows-developers-guide-to-microsoft-build-2021/

nnvyjq4y

nnvyjq4y3#

2021更新答案

如果您需要在Windows 10上从Linux容器访问NVIDIA CUDA,有一种简单的方法可以做到这一点,如果您对Insider构建的(当前)要求没有问题。我使用这种方法在TensorFlow 2中的GPU上成功训练模型。
1.将Windows 10更新为build 20149或更高版本。在撰写本文时,只有Insider Dev分支可以工作-您可以在Windows Insider webpage * 上检查内部版本号。
1.安装NVIDIA CUDA WSL driver(需要免费注册)

  • 安装Docker Desktop
  • 如果您还没有启用WSL 2,它将指导您启用WSL 2。
  • 如果您已经安装了Settings - General - Use the WSL2 backed engine,请将其更新到最新版本并启用Settings - General - Use the WSL2 backed engine
  • 为了能够从WSL 2内部(而不仅仅是从PowerShell/cmd)使用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。)
您可能会在nvidia-docker(如official TensorFlow images)的图像描述中遇到--runtime=nvidia。只需在提供的命令中将--runtime=nvidia替换为--gpus=all

    • 更新:Insider Dev频道现已迁移到Windows 11。目前尚不清楚此功能是否会影响稳定的Windows 10,或者仍然是Windows 11的专有功能。*
oyt4ldly

oyt4ldly4#

提供样品!

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版本可以处理:一个月一个月一个月一个月一个月一个月一个月一个月一个月二个月一个月

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

在我的WSL 2/Insider上,我收到一条消息,说我没有安装正确的nvidia驱动程序。因为驱动器安装在windows操作系统的下方。
向MicrosoftNVIDIA查询后发现,硬件加速并未通过,而且他们近期也没有这样做的计划。
Windows docker在widnows操作系统上,可能没问题。会检查。

vcudknz3

vcudknz35#

我认为docker run --gpus都可以解决,你需要在你的linux docker和cuda sdk上安装nvidea驱动程序。我认为另一种方法是使用参数--privileged给予所有权限:docker run --privileged和其他你需要的参数,你需要考虑一下,因为有了privileged,docker就可以访问你的真实的机器了。

wn9m85ua

wn9m85ua6#

请注意,在WSL 2/windows-Insider实现中,不支持视频解码-编码的硬件加速
因此,任何GPU功能都可以在WSL 2上使用,但视频编码-解码不能由硬件完成。
尝试请求ffmpeg使用硬件加速导致错误消息。(skvideo,它是ffmpeg Package 器,崩溃
还不确定gStreamer。但可以肯定的是,它不能使用硬件加速,因为它没有通过界面“漏斗”。
据我所知-目前还没有计划添加此支持。
最好的,米奇

相关问题