نشر مثيلات الحاويات التي تستخدم موارد وحدة معالجة الرسومات (GPU)

لتشغيل بعض أحمال الأعمال الحسابية المكثفة المعينة على مثيلات حاوية Azure، انشر مجموعات الحاويات باستخدام موارد GPU. يمكن لمثيلات الحاوية في المجموعة الوصول إلى واحد أو أكثر من وحدات NVIDIA Tesla GPUs، أثناء تشغيل أحمال أعمال الحاوية، مثل CUDA أو تطبيقات التعليم العميق.

توضح هذه المقالة كيفية إضافة موارد GPU عند نشر مجموعة حاويات باستخدام ملف YAML، أو قالب Resource Manager. يمكنك أيضاً تحديد موارد وحدة معالجة الرسومات (GPU)، عند نشر مثيل حاوية باستخدام مدخل Azure.

هام

K80 وP100 GPU SKUs ستتوقف بحلول 31 أغسطس 2023. ويرجع ذلك إلى إيقاف الأجهزة الظاهرية الأساسية المستخدمة: سلسلة NC وسلسلة NCv2 على الرغم من توفر وحدات SKU V100، يتم إعادة تحديدها لاستخدام خدمة Azure Kubernetes بدلا من ذلك. موارد وحدة معالجة الرسومات غير مدعومة بالكامل ولا ينبغي استخدامها لأحمال عمل الإنتاج. استخدم الموارد التالية للترحيل إلى AKS اليوم: كيفية الترحيل إلى AKS.

هام

هذه الميزة حالياً قيد المعاينة، وبعضالقيود قد تطبق. يتم توفير المعاينات لك بشرط أن توافق على شروط الاستخدام التكميلية. قد تتغير بعض جوانب هذه الميزة قبل التوفر العام (GA).

المتطلبات الأساسية

إشعار

نظراً لبعض القيود الحالية، لا يتم ضمان الموافقة على جميع طلبات زيادة الحد.

  • إذا كنت ترغب في استخدام رمز SKU هذا لعمليات نشر حاوية الإنتاج، فأنشئ طلب دعم Azure لزيادة الحد.

قيود المعاينة

في المعاينة، تُطبّق القيود التالية عند استخدام موارد GPU، في مجموعات الحاويات.

توافر المناطق

المناطق نظام التشغيل وحدات SKU لـ GPU المتوفرة
شرق الولايات المتحدة وغرب أوروبا وغرب الولايات المتحدة 2 وجنوب شرق آسيا ووسط الهند Linux V100

ستتم إضافة الدعم لمناطق إضافية بمرور الوقت.

أنواع أنظمة التشغيل المعتمدة: Linux فقط

القيود الإضافية: لا يمكن استخدام موارد GPU، عند نشر مجموعة حاويات في شبكة ظاهرية.

نبذة عن موارد GPU

العدد ووحدة حفظ المخزون (SKU)

لاستخدام وحدات GPUs في مثيل حاوية، حدد مورد GPU، بالمعلومات التالية:

  • العدد - عدد وحدات GPUs: 1أو 2أو 4.

  • SKU - وحدة GPU SKU: V100. تعيّن كل وحدة من وحدات حفظ المخزون (SKU) إلى NVIDIA Tesla GPU في عائلة من عائلات جهاز Azure ظاهري التي تُمكّن GPU:

    وحدة حفظ المخزون SKU عائلة الجهاز الظاهري (VM)
    V100 NCv3

الحد الأقصى المتعلق بالموارد لكل SKU

نظام التشغيل GPU SKU عدد GPU الحد الأقصى لوحدة المعالجة المركزية (CPU) الحد الأقصى للذاكرة (GB) التخزين (GB)
Linux V100 1 6 112 50
Linux V100 2 12 224 50
Linux V100 4 24 448 50

عند نشر موارد وحدة GPU، قم بتعيين موارد وحدة GPU، والذاكرة المناسبة، لحمل الأعمال، حتى القيم القصوى الموضحة في الجدول السابق. هذه القيم حالياً أكبر من CPU وموارد الذاكرة المتوفرة في مجموعات الحاويات بدون موارد GPU.

هام

تختلف حدود الاشتراك الافتراضية (الحصص النسبية) لموارد وحدة GPU، حسب SKU. يتم تعيين حدود وحدة المعالجة المركزية الافتراضية لوحدات SKU V100 في البداية إلى 0. لطلب زيادة في منطقة متوفرة، يرجى إرسال طلب دعم Azure.

الأشياء التي يجب معرفتها

  • وقت النشر - يستغرق إنشاء مجموعة الحاويات التي تحتوي على موارد وحدة GPU، ما يصل إلى 8-10 دقائق. ويعزو السبب في ذلك إلى الوقت الإضافي لتكوّين إعدادات تشغيل الخدمة وتكوين جهاز وحدة GPU الظاهري في Azure.

  • التسعير - على غرار مجموعات الحاويات التي لا تضم موارد وحدة GPU، يعد Azure الفواتير للموارد المستهلكة على مدار الفترة الزمنية لمجموعة الحاويات مع موارد وحدة GPU. يتم احتساب المدة من وقت سحب صورة الحاوية الأولى، وحتى انتهاء مجموعة الحاويات. ولا تتضمن وقت نشر مجموعة الحاويات.

    راجع تفاصيل الأسعار.

  • برامج تشغيل CUDA - يتم توفير مثيلات الحاويات مع موارد وحدة GPU، مسبقاً مع برامج التشغيل NVIDIA CUDA، ووقت تشغيل الحاويات، بحيث يمكنك استخدام صور الحاويات المطورة لأحمال عمل CUDA.

    ندعم حتى CUDA 11 في هذه المرحلة. على سبيل المثال، يمكنك استخدام الصور الأساسية التالية لـ Dockerfile الخاص بك:

    إشعار

    لتحسين الموثوقية عند استخدام المحتوى صورة حاوية عامة من Docker Hub، فقم باستيراد الصورة وإدارتها في سجل حاوية Azure الخاص، وتحديث Dockerfile الخاص بك لاستخدام الصورة الأساسية المُدارة بشكل خاص. تعرف على المزيد حول العمل مع الصور العامة.

مثال YAML

ضمن طرق إضافة موارد GPU لنشر مجموعة الحاويات باستخدام ملف YAML. انسخ YAML التالي في ملف جديد باسم gpu-deploy-aci.yaml، ثم احفظ الملف. ينشئ YAML مجموعة حاويات تسمى gpucontainergroup تحدد مثيل حاوية مع وحدة معالجة الرسومات V100. يشغل المثيل عينة من تطبيق إضافة خط CUDA المتجه. طلبات المورد كافية لتشغيل حمل العمل.

إشعار

يستخدم المثال التالي صورة حاوية عامة. لتحسين الموثوقية، قم باستيراد الصورة وإدارتها في سجل حاويات Azure الخاص، وتحديث YAML لاستخدام الصورة الأساسية المدارة من بشكل خاص. تعرف على المزيد حول العمل مع الصور العامة.

additional_properties: {}
apiVersion: '2021-09-01'
name: gpucontainergroup
properties:
  containers:
  - name: gpucontainer
    properties:
      image: k8s-gcrio.azureedge.net/cuda-vector-add:v0.1
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
          gpu:
            count: 1
            sku: V100
  osType: Linux
  restartPolicy: OnFailure

نشر مجموعة الحاويات باستخدام الأمر az container create مع تحديد اسم ملف YAML للمعلمة --file. تحتاج إلى توفير اسم مجموعة موارد، وموقع مجموعة الحاويات مثلeastus، التي تدعم موارد وحدة GPU.

az container create --resource-group myResourceGroup --file gpu-deploy-aci.yaml --location eastus

يستغرق النشر عدة دقائق للاكتمال. ثم تبدأ الحاوية، وتشغل عملية إضافة خط CUDA المتجه. قم بتشغيل الأمر az container logs، لعرض إخراج السجل:

az container logs --resource-group myResourceGroup --name gpucontainergroup --container-name gpucontainer

إخراج:

[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

مثال قالب Resource Manager

من الطرق الأخرى لنشر مجموعة الحاويات مع موارد وحدة GPU، هي استخدام قالب Resource Manager. ابدأ بإنشاء ملف باسم gpudeploy.json، ثم انسخ JSON التالي إليه. ينشر هذا المثال مثيل الحاوية مع وحدة V100 GPU، التي تُشغل وظيفة التدريب TensorFlow مقابل مجموعة البيانات MNIST. طلبات المورد كافية لتشغيل حمل العمل.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "containerGroupName": {
        "type": "string",
        "defaultValue": "gpucontainergrouprm",
        "metadata": {
          "description": "Container Group name."
        }
      }
    },
    "variables": {
      "containername": "gpucontainer",
      "containerimage": "mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu"
    },
    "resources": [
      {
        "name": "[parameters('containerGroupName')]",
        "type": "Microsoft.ContainerInstance/containerGroups",
        "apiVersion": "2021-09-01",
        "location": "[resourceGroup().location]",
        "properties": {
            "containers": [
            {
              "name": "[variables('containername')]",
              "properties": {
                "image": "[variables('containerimage')]",
                "resources": {
                  "requests": {
                    "cpu": 4.0,
                    "memoryInGb": 12.0,
                    "gpu": {
                        "count": 1,
                        "sku": "V100"
                  }
                }
              }
            }
          }
        ],
        "osType": "Linux",
        "restartPolicy": "OnFailure"
        }
      }
    ]
}

قم بنشر القالب باستخدام الأمر az deployment group create. تحتاج إلى توفير اسم مجموعة موارد تم إنشاؤها في منطقة مثلeastus، التي تدعم موارد GPU.

az deployment group create --resource-group myResourceGroup --template-file gpudeploy.json

يستغرق النشر عدة دقائق للاكتمال. ثم، تبدأ الحاوية، وتشغّل الوظيفة TensorFlow. قم بتشغيل الأمر az container logs، لعرض إخراج السجل:

az container logs --resource-group myResourceGroup --name gpucontainergrouprm --container-name gpucontainer

إخراج:

2018-10-25 18:31:10.155010: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2018-10-25 18:31:10.305937: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties:
name: Tesla V100 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: ccb6:00:00.0
totalMemory: 11.92GiB freeMemory: 11.85GiB
2018-10-25 18:31:10.305981: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla V100, pci bus id: ccb6:00:00.0, compute capability: 3.7)
2018-10-25 18:31:14.941723: I tensorflow/stream_executor/dso_loader.cc:139] successfully opened CUDA library libcupti.so.8.0 locally
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting /tmp/tensorflow/input_data/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting /tmp/tensorflow/input_data/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting /tmp/tensorflow/input_data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting /tmp/tensorflow/input_data/t10k-labels-idx1-ubyte.gz
Accuracy at step 0: 0.097
Accuracy at step 10: 0.6993
Accuracy at step 20: 0.8208
Accuracy at step 30: 0.8594
...
Accuracy at step 990: 0.969
Adding run metadata for 999

تنظيف الموارد

نظراً لأن استخدام موارد وحدة GPU قد يكون أمراً مكلفاً، فتأكد من أن الحاويات الخاصة بك لا تعمل بصورة غير متوقعة لفترات زمنية طويلة. احرص على مراقبة الحاويات في مدخل Azure، أو التحقق من حالة مجموعة الحاويات باستخدام الأمر az container show. على سبيل المثال:

az container show --resource-group myResourceGroup --name gpucontainergroup --output table

عند الانتهاء من العمل مع مثيلات الحاوية التي أنشأتها، احذفها بالأوامر التالية:

az container delete --resource-group myResourceGroup --name gpucontainergroup -y
az container delete --resource-group myResourceGroup --name gpucontainergrouprm -y

الخطوات التالية