NVIDIA GPU での Docker Desktop に対する WSL 2 GPU のサポート

BenがDocker Desktopで Nvidiaのサポートについて書いて から1年が経ちました。 当時、Windows Insiderプログラムに参加し、ベータCUDAドライバーを使用し、Dockerデスクトップの技術プレビュービルドを使用する必要がありました。 今日、すべてが変わりました:

  • OS側では、Windows 11ユーザーは、Windows Insider プログラムに参加せずにGPUを有効にできるようになりました。 Windows 10ユーザーは引き続き登録する必要があります。
  • Nvidia CUDAドライバ がリリースされました。
  • 最後に、GPUサポートはDockerデスクトップにマージされました(実際にはバージョン3.1以降)。

Nvidiaは、期待されるパフォーマンスを説明するためにネイティブに近いという用語を使用しました。

ドッカーイメージの場所

ベース Docker イメージは https://hub.docker.com/r/nvidia/cuda でホストされます。 元のプロジェクトは https://gitlab.com/nvidia/container-images/cuda にあります。

それらに含まれるもの

このユーティリティを使用すると nvidia-smi 、ユーザーはアクセス可能なデバイスに関する情報を照会できます。

$ docker run -it --gpus=all --rm nvidia/cuda:11.4.2-base-ubuntu20.04 nvidia-smi
Tue Dec  7 13:25:19 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.00       Driver Version: 510.06       CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0 Off |                  N/A |
| N/A    0C    P0    13W /  N/A |    132MiB /  4096MiB |     N/A      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------

dmon nvidia-smiの機能により、GPUパラメータを監視できます。

$ docker exec -ti $(docker ps -ql) bash
root@7d3f4cbdeabb:/src# nvidia-smi dmon
# gpu   pwr gtemp mtemp    sm   mem   enc   dec  mclk  pclk
# Idx     W     C     C     %     %     %     %   MHz   MHz
    0    29    69     -     -     -     0     0  4996  1845
    0    30    69     -     -     -     0     0  4995  1844

nbody ユーティリティは、ベンチマーク モードを提供する CUDA サンプルです。

$ docker run -it --gpus=all --rm nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -benchmark
...
> 1 Devices used for simulation
GPU Device 0: "Turing" with compute capability 7.5

> Compute 7.5 CUDA device: [NVIDIA GeForce GTX 1650 Ti]
16384 bodies, total time for 10 iterations: 25.958 ms
= 103.410 billion interactions per second
= 2068.205 single-precision GFLOP/s at 20 flops per interaction

CPUと簡単に比較すると、パフォーマンスの桁違いが示唆されます。 GPUは2000倍高速です。

> Simulation with CPU
4096 bodies, total time for 10 iterations: 3221.642 ms
= 0.052 billion interactions per second
= 1.042 single-precision GFLOP/s at 20 flops per interaction

準仮想化GPUで何ができますか?

暗号化ツールを実行する

もちろん、GPUの使用は、操作を大幅に並列化できる場合に便利です。 これはハッシュ分析の場合です。 dizcza Dockerハブでハッシュキャットのnvidia-dockerベースのイメージを ホストしました。この画像 はDockerデスクトップで魔法のように 機能します!

$ docker run -it --gpus=all --rm dizcza/docker-hashcat //bin/bash
root@a6752716788d:~# hashcat -I
hashcat (v6.2.3) starting in backend information mode

clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR

CUDA Info:
==========

CUDA.Version.: 11.6

Backend Device ID #1
  Name...........: NVIDIA GeForce GTX 1650 Ti
  Processor(s)...: 16
  Clock..........: 1485
  Memory.Total...: 4095 MB
  Memory.Free....: 3325 MB
  PCI.Addr.BDFe..: 0000:01:00.0

そこからハッシュキャットベンチマークを実行することが可能です

hashcat -b
...
Hashmode: 0 - MD5
Speed.#1.........: 11800.8 MH/s (90.34ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1
Hashmode: 100 - SHA1
Speed.#1.........:  4021.7 MH/s (66.13ms) @ Accel:32 Loops:512 Thr:1024 Vec:1
Hashmode: 1400 - SHA2-256
Speed.#1.........:  1710.1 MH/s (77.89ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1
...

フラクタルを描画する

https://github.com/jameswmccarty/CUDA-Fractal-Flames のプロジェクト フラクタルの生成にCUDAを使用します。 Linux でビルドして実行するには、2 つの手順があります。 Dockerデスクトップで実行できるかどうか見てみましょう。 特別なものは何もないシンプルなDockerfileがそれに役立ちます。

# syntax = docker/dockerfile:1.3-labs
FROM nvidia/cuda:11.4.2-base-ubuntu20.04
RUN apt -y update
RUN DEBIAN_FRONTEND=noninteractive apt -yq install git nano libtiff-dev cuda-toolkit-11-4
RUN git clone --depth 1 https://github.com/jameswmccarty/CUDA-Fractal-Flames /src
WORKDIR /src
RUN sed 's/4736/1024/' -i fractal_cuda.cu # Make the generated image smaller
RUN make

そして、ビルドして実行できます。

$ docker build . -t cudafractal
$ docker run --gpus=all -ti --rm -v ${PWD}:/tmp/ cudafractal ./fractal -n 15 -c test.coeff -m -15 -M 15 -l -15 -L 15

--gpus=all コマンドでのみ run 使用できることに注意してください。 の間に buildGPU を集中的に使用する手順を追加することはできません。

画像の例を以下に示します。

削除

機械学習

まあ、実際には、機械学習を見ずにGPUの使用状況を見るのは間違いです。 イメージは tensorflow:latest-gpu 、Docker デスクトップの GPU を利用できます。 今年初めのAncaのブログを紹介します。 彼女はテンソルフローの例を説明し、それをクラウドにデプロイしました https://www.docker.com/blog/deploy-gpu-accelerated-applications-on-amazon-ecs-with-docker-compose/

結論:開発者にとってのメリットは何ですか? 

Dockerでは、開発者がワークフローをシームレスに実行するためのターンキーソリューションを提供したいと考えています。

  • Docker Desktop を使用すると、開発者はコードをローカルで実行し、選択したインフラストラクチャにデプロイできます。
  • 課題トラッカー https://github.com/docker/for-winでサポートします
  • 今後の予定を確認し、Docker のパブリック ロードマップで機能要求を推奨する https://github.com/docker/roadmap
  • 最新バージョンの Docker デスクトップを今すぐダウンロード してください。

ドッカーコン2022

5月10日火曜日に開催されるDockerCon2022にご参加ください。 DockerCon は、次世代の最新アプリケーションを構築している開発者や開発チームにとってユニークな体験を提供する、無料の 1 日の仮想イベントです。 コードからクラウドにすばやく移行する方法と開発の課題を解決する方法について学びたい場合は、DockerCon 2022 でアプリケーションの構築、共有、実行に役立つ魅力的なライブ コンテンツが提供されます。 今すぐご登録ください https://www.docker.com/dockercon/