GPU kaynaklarını kullanan kapsayıcı örneklerini dağıtma

Azure Container Instances'ta işlem yoğunluklu bazı iş yüklerini çalıştırmak için kapsayıcı gruplarınızı GPU kaynaklarıyla dağıtın. Gruptaki kapsayıcı örnekleri CUDA ve derin öğrenme uygulamaları gibi kapsayıcı iş yüklerini çalıştırırken bir veya daha fazla NVIDIA Tesla GPU'ya erişebilir.

Bu makalede, YAML dosyası veya Resource Manager şablonu kullanarak bir kapsayıcı grubu dağıttığınızda GPU kaynaklarının nasıl ekleneceği gösterilmektedir. Azure portalını kullanarak bir kapsayıcı örneği dağıtırken GPU kaynaklarını da belirtebilirsiniz.

Önemli

K80 ve P100 GPU SKU'ları 31 Ağustos 2023'e kadar emekli oluyor. Bunun nedeni, kullanılan temel vm'lerin kullanımdan kaldırılmasıdır: NC Serisi ve NCv2 Serisi V100 SKU'ları kullanılabilir olacak olsa da, bunun yerine Azure Kubernetes Service'i kullanmak yeniden kabul edilir. GPU kaynakları tam olarak desteklenmez ve üretim iş yükleri için kullanılmamalıdır. Bugün AKS'ye geçiş yapmak için aşağıdaki kaynakları kullanın: AKS'ye Geçiş.

Önemli

Bu özellik şu anda önizleme aşamasındadır ve bazı sınırlamalar geçerlidir. Önizlemeler, ek kullanım koşullarını kabul etmeniz şartıyla kullanımınıza sunulur. Bu özelliğin bazı yönleri genel kullanıma açılmadan önce değişebilir.

Önkoşullar

Not

Bazı geçerli sınırlamalar nedeniyle tüm sınır artışı isteklerinin onaylanması garanti edilemez.

  • Bu sku'yu üretim kapsayıcısı dağıtımlarınız için kullanmak istiyorsanız, sınırı artırmak için bir Azure Desteği isteği oluşturun.

Önizleme sınırlamaları

Önizlemede, kapsayıcı gruplarında GPU kaynakları kullanılırken aşağıdaki sınırlamalar geçerlidir.

Bölgesel kullanılabilirlik

Bölgeler OS Kullanılabilir GPU SKU'ları
Doğu ABD, Batı Avrupa, Batı ABD 2, Güneydoğu Asya, Orta Hindistan Linux V100

Zaman içinde ek bölgeler için destek eklenecektir.

Desteklenen işletim sistemi türleri: Yalnızca Linux

Ek sınırlamalar: Sanal ağa kapsayıcı grubu dağıtılırken GPU kaynakları kullanılamaz.

GPU kaynakları hakkında

Sayım ve SKU

Gpu'ları kapsayıcı örneğinde kullanmak için aşağıdaki bilgileri içeren bir GPU kaynağı belirtin:

  • Sayı - GPU sayısı: 1, 2 veya 4.

  • SKU - GPU SKU'su: V100. Her SKU, aşağıdaki Azure GPU özellikli VM ailelerinden birinde NVIDIA Tesla GPU ile eşler:

    SKU VM ailesi
    V100 NCv3

SKU başına en fazla kaynak sayısı

OS GPU SKU'su GPU sayısı En Fazla CPU En Fazla Bellek (GB) Depolama (GB)
Linux V100 1 6 112 50
Linux V100 2 12 224 50
Linux V100 4 24 448 50

GPU kaynaklarını dağıtırken, önceki tabloda gösterilen en yüksek değerlere kadar iş yüküne uygun CPU ve bellek kaynaklarını ayarlayın. Bu değerler şu anda GPU kaynakları olmayan kapsayıcı gruplarında kullanılabilen CPU ve bellek kaynaklarından daha büyüktür.

Önemli

GPU kaynakları için varsayılan abonelik sınırları (kotalar) SKU'ya göre farklılık gösterir. V100 SKU'ları için varsayılan CPU sınırları başlangıçta 0 olarak ayarlanır. Kullanılabilir bir bölgede artış istemek için lütfen bir Azure desteği isteği gönderin.

Bilinmesi gerekenler

  • Dağıtım süresi - GPU kaynaklarını içeren bir kapsayıcı grubunun oluşturulması 8-10 dakika kadar sürer. Bunun nedeni, Azure'da GPU VM'sinin sağlanması ve yapılandırılması için gereken ek süredir.

  • Fiyatlandırma - GPU kaynakları olmayan kapsayıcı gruplarına benzer şekilde Azure, GPU kaynaklarına sahip bir kapsayıcı grubunun süresi boyunca tüketilen kaynaklar için faturalandırılır. Süre, kapsayıcı grubu sonlandırana kadar ilk kapsayıcınızın görüntüsünü çekmek için zaman hesaplanır. Kapsayıcı grubunu dağıtma süresini içermez.

    Fiyatlandırma ayrıntılarına bakın.

  • CUDA sürücüleri - GPU kaynaklarına sahip kapsayıcı örnekleri, CUDA iş yükleri için geliştirilmiş kapsayıcı görüntülerini kullanabilmeniz için NVIDIA CUDA sürücüleri ve kapsayıcı çalışma zamanları ile önceden sağlanır.

    Bu aşamada CUDA 11'i destekliyoruz. Örneğin, Dockerfile'ınız için aşağıdaki temel görüntüleri kullanabilirsiniz:

    Not

    Docker Hub'dan bir genel kapsayıcı görüntüsü kullanırken güvenilirliği artırmak için, görüntüyü özel bir Azure kapsayıcı kayıt defterinde içeri aktarın ve yönetin ve Dockerfile'ınızı özel olarak yönetilen temel görüntünüzü kullanacak şekilde güncelleştirin. Genel görüntülerle çalışma hakkında daha fazla bilgi edinin.

YAML örneği

GPU kaynakları eklemenin bir yolu, YAML dosyası kullanarak bir kapsayıcı grubu dağıtmaktır. Aşağıdaki YAML'yi gpu-deploy-aci.yaml adlı yeni bir dosyaya kopyalayın ve dosyayı kaydedin. Bu YAML, V100 GPU ile bir kapsayıcı örneği belirten gpucontainergroup adlı bir kapsayıcı grubu oluşturur. Örnek, örnek bir CUDA vektör ekleme uygulaması çalıştırır. Kaynak istekleri iş yükünü çalıştırmak için yeterlidir.

Not

Aşağıdaki örnekte genel kapsayıcı görüntüsü kullanılır. Güvenilirliği artırmak için, görüntüyü özel bir Azure kapsayıcı kayıt defterinde içeri aktarın ve yönetin ve YAML'nizi özel olarak yönetilen temel görüntünüzü kullanacak şekilde güncelleştirin. Genel görüntülerle çalışma hakkında daha fazla bilgi edinin.

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

kapsayıcı grubunu az container create komutuyla dağıtın ve parametresi için --file YAML dosya adını belirtin. Kaynak grubunun adını ve kapsayıcı grubu için GPU kaynaklarını destekleyen eastus gibi bir konum sağlamanız gerekir.

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

Dağıtımın tamamlanması birkaç dakika sürer. Ardından kapsayıcı bir CUDA vektör ekleme işlemi başlatır ve çalıştırır. Günlük çıkışını görüntülemek için az container logs komutunu çalıştırın:

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

Çıkış:

[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 şablon örneği

GPU kaynaklarıyla kapsayıcı grubu dağıtmanın bir diğer yolu da Resource Manager şablonu kullanmaktır. adlı gpudeploy.jsonbir dosya oluşturarak başlayın ve ardından aşağıdaki JSON dosyasını bu dosyaya kopyalayın. Bu örnek, MNIST veri kümesine karşı TensorFlow eğitim işi çalıştıran V100 GPU'ya sahip bir kapsayıcı örneği dağıtır. Kaynak istekleri iş yükünü çalıştırmak için yeterlidir.

{
    "$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"
        }
      }
    ]
}

şablonu az deployment group create komutuyla dağıtın. GPU kaynaklarını destekleyen eastus gibi bir bölgede oluşturulmuş bir kaynak grubunun adını sağlamanız gerekir.

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

Dağıtımın tamamlanması birkaç dakika sürer. Ardından kapsayıcı başlatılır ve TensorFlow işi çalıştırılır. Günlük çıkışını görüntülemek için az container logs komutunu çalıştırın:

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

Çıkış:

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

Kaynakları temizleme

GPU kaynaklarını kullanmak pahalı olabileceğinden kapsayıcılarınızın uzun süre beklenmedik bir şekilde çalışmadığından emin olun. Azure portalında kapsayıcılarınızı izleyin veya az container show komutuyla kapsayıcı grubunun durumunu denetleyin. Örneğin:

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

Oluşturduğunuz kapsayıcı örnekleriyle çalışmayı bitirdiğinizde, bunları aşağıdaki komutlarla silin:

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

Sonraki adımlar