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

belirli işlem yoğunluklu iş yüklerini Azure Container Instances ç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 kullanarak bir kapsayıcı örneği dağıtırken GPU kaynaklarını da belirtebilirsiniz.

Ö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.

Önizleme sınırlamaları

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

Bölge kullanılabilirliği

Bölgeler İşletim Sistemi Kullanılabilir GPU SKU'ları
Doğu ABD, Batı Avrupa, Batı ABD 2 Linux K80, P100, V100
Güneydoğu Asya Linux P100, V100
Orta Hindistan Linux V100
Kuzey Avrupa Linux K80

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ı ve SKU

Gpu'ları bir 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: K80, P100 veya V100. Her SKU, aşağıdaki Azure GPU özellikli VM ailelerinden birinde NVIDIA Tesla GPU'ya eşler:

    SKU VM ailesi
    K80 NC
    P100 NCv2
    V100 NCv3

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

İşletim Sistemi GPU SKU'su GPU sayısı En Fazla CPU En Fazla Bellek (GB) Depolama (GB)
Linux K80 1 6 56 50
Linux K80 2 12 112 50
Linux K80 4 24 224 50
Linux P100 1 6 112 50
Linux P100 2 12 224 50
Linux P100 4 24 448 50
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. P100 ve 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 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 sağlamak ve yapılandırmak için gereken ek süredir.

  • Fiyatlandırma - GPU kaynakları olmayan kapsayıcı gruplarına benzer şekilde, Azure da GPU kaynaklarına sahip bir kapsayıcı grubunun süresi boyunca tüketilen kaynaklar için fatura oluşturur. Süre, kapsayıcı grubu sonlandırılıncaya kadar ilk kapsayıcınızın görüntüsünü çekme süresinden 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 NVIDIA CUDA sürücüleri ve kapsayıcı çalışma zamanları ile önceden sağlanır, böylece CUDA iş yükleri için geliştirilen kapsayıcı görüntülerini kullanabilirsiniz.

    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 genel kapsayıcı görüntüsünü kullanırken güvenilirliği artırmak için görüntüyü özel bir Azure kapsayıcı kayıt defterinde içeri aktarıp 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ını 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, K80 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 bir 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: K80
  osType: Linux
  restartPolicy: OnFailure

parametresi için YAML dosya adını belirterek az container create komutuyla kapsayıcı grubunu dağıtın --file . 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 şablonu ö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ümesinde 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 K80 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 K80, 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 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