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
使用できることに注意してください。 の間に build
GPU を集中的に使用する手順を追加することはできません。
画像の例を以下に示します。
機械学習
まあ、実際には、機械学習を見ずに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/