یک سال از زمانی که بن در مورد پشتیبانی از Nvidia در Docker Desktop نوشت می‌گذرد. در آن زمان، شرکت در برنامه Windows Insider، استفاده از درایورهای Beta CUDA و استفاده از ساخت پیش نمایش فناوری Docker Desktop ضروری بود. امروز، همه چیز تغییر کرده است:

  • در سمت سیستم عامل، کاربران Windows 11 اکنون می‌توانند بدون شرکت در برنامه Windows Insider، GPU خود را فعال کنند. کاربران ویندوز 10 هنوز باید ثبت نام کنند.
  • درایورهای Nvidia CUDA منتشر شده اند.
  • در آخر، پشتیبانی از GPU در Docker Desktop ادغام شده است (در واقع از نسخه 3.1).

Nvidia از اصطلاح نزدیک به بومی استفاده کرد برای توصیف عملکرد مورد انتظار.

تصاویر داکر را از کجا پیدا کنیم

تصاویر پایه داکر در 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
سه شنبه 7 دسامبر 2021، 13:25:19
+------------------------------------------------ -----------------------------+
| NVIDIA-SMI 510.00 نسخه درایور: 510.06 نسخه CUDA: 11.6 |
|------------------------------------------------ -----------------------------+
| نام پردازنده گرافیکی Persistence-M| Bus-Id Disp.A | فرار Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| حافظه-استفاده | GPU-Util Compute M. |
| | | MIG M. |
|==============================+================== =====+=======================|
| 0 NVIDIA GeForce ... روشن | 00000000:01:00.0 تخفیف | N/A |
| N/A 0C P0 13W / N/A | 132 مگابایت / 4096 مگابایت | N/A پیش فرض |
| | | N/A |
+------------------------------------------------ -----------------------------+

+------------------------------------------------ -----------------------------+
| فرآیندها: |
| GPU GI CI PID نوع نام فرآیند حافظه GPU |
| شناسه استفاده |
|================================================= =============================|
| هیچ فرآیند در حال اجرا یافت نشد |
+------------------------------------------------ ----------------------------

تابع 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 -معیار
...
> 1 دستگاه های مورد استفاده برای شبیه سازی
دستگاه GPU 0: "Turing" با قابلیت محاسبه 7.5

> محاسبه دستگاه CUDA 7.5: [NVIDIA GeForce GTX 1650 Ti]
16384 بدن، کل زمان برای 10 تکرار: 25.958 میلی‌ثانیه
= 103.410 میلیارد تعامل در ثانیه
= 2068.205 GFLOP/s تک دقیق با 20 فلاپ در هر تعامل

مقایسه سریع با یک CPU مرتبه متفاوتی از عملکرد را نشان می دهد. GPU 2000 برابر سریعتر است:

> شبیه سازی با CPU
4096 بدن، کل زمان برای 10 تکرار: 3221.642 میلی‌ثانیه
= 0.052 میلیارد تعامل در ثانیه
= 1.042 GFLOP/s تک دقیق با 20 فلاپ در هر تعامل

با یک GPU غیر مجازی چه کاری می توانید انجام دهید؟ این مورد برای تجزیه و تحلیل هش است. dizcza تصاویر هش کت مبتنی بر nvidia-docker خود را در هاب داکر میزبانی کرد. این تصویر به صورت جادویی روی دسکتاپ Docker کار می‌کند!

$ docker run -it --gpus=all --rm dizcza/docker-hashcat //bin/bash
root@a6752716788d:~# hashcat -I
hashcat (v6.2.3) در حالت اطلاعات باطن شروع می شود

clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR

اطلاعات CUDA:
==========

CUDA.Version.: 11.6

شناسه دستگاه پشتیبان شماره 1
  نام...........: NVIDIA GeForce GTX 1650 Ti
  پردازنده(های)...: 16
  ساعت ..........: 1485
  حافظه.مجموع...: 4095 مگابایت
  حافظه.رایگان....: 3325 مگابایت
  PCI.Addr.BDFe..: 0000:01:00.0

از آنجا می توان هش کت بنچمارک

hashcat -b را اجرا کرد
...
هاشمد: 0 - MD5
سرعت.#1.........: 11800.8 MH/s (90.34ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1
هاشمد: 100 - SHA1
سرعت.#1.........: 4021.7 MH/s (66.13ms) @ Accel:32 Loops:512 Thr:1024 Vec:1
هاشمود: 1400 - SHA2-256
سرعت.#1.........: 1710.1 MH/s (77.89ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1
...

کشیدن فراکتال

این پروژه در https://github.com/jameswmccarty/CUDA-Fractal-Flames از CUDA برای تولید فراکتال ها استفاده می کند. دو مرحله برای ساخت و اجرا در لینوکس وجود دارد. بیایید ببینیم آیا می توانیم آن را روی دسکتاپ Docker اجرا کنیم یا خیر. یک Dockerfile ساده بدون هیچ چیز فانتزی به این کار کمک می کند.

# syntax = docker/dockerfile:1.3-labs
از nvidia/cuda:11.4.2-base-ubuntu20.04
به روز رسانی apt -y را اجرا کنید
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 # تصویر تولید شده را کوچکتر کنید
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[19659011]توجه داشته باشید که --gpus=all فقط برای فرمان run در دسترس است. اضافه کردن مراحل فشرده GPU در طول  ساخت امکان پذیر نیست.

در اینجا یک تصویر مثال آورده شده است:

یادگیری ماشینی

خب واقعاً، نگاه کردن به استفاده از GPU بدون توجه به یادگیری ماشین یک کار خواهد بود. . تصویر tensorflow:latest-gpu می‌تواند از GPU در Docker Desktop استفاده کند. من به سادگی به وبلاگ Anca در اوایل امسال اشاره می کنم. او یک مثال تنسورفلو را توصیف کرد و آن را در فضای ابری مستقر کرد: https://www.docker.com/blog/deploy-gpu-accelerated-applications-on-amazon-ecs-with-docker-compose/

نتیجه: چه آیا مزایایی برای توسعه‌دهندگان دارد؟ 

در Docker، ما می‌خواهیم یک راه‌حل کلیدی برای توسعه‌دهندگان ارائه دهیم تا گردش‌های کاری خود را به‌طور یکپارچه اجرا کنند: , 10 مه. DockerCon یک رویداد مجازی رایگان و یک روزه است که یک تجربه منحصر به فرد برای توسعه دهندگان و تیم های توسعه است که در حال ساختن نسل بعدی برنامه های کاربردی مدرن هستند. اگر می خواهید در مورد چگونگی رفتن سریع از کد به ابر و نحوه حل چالش های توسعه خود بیاموزید، DockerCon 2022 محتوای زنده جذابی را ارائه می دهد تا به شما در ساخت، اشتراک گذاری و اجرای برنامه های کاربردی خود کمک کند. همین امروز در https://www.docker.com/dockercon/

<!--
آواتار برای فردریک دالو

فردریک دالو[19659040