Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Use the shared GPU scheduling feature in an ACK Edge cluster

Son Güncelleme:Oct 06, 2026

GPU paylaşımı, birden çok pod'un tek bir GPU'nun hesaplama kaynaklarını paylaşmasına olanak tanıyarak GPU kullanımını artırır ve maliyetleri azaltır. Aynı GPU üzerindeki konteynerler birbirinden yalıtılmış şekilde çalışır; bu sayede bir konteyner ayrılan kaynakları aşamaz ve diğer konteynerleri etkilemez.

Bu konuda, bir ACK Edge kümesinde GPU paylaşımının nasıl etkinleştirileceği açıklanmaktadır.

Düğüm türüne göre özellik desteği

Cloud düğümleri ve edge düğüm havuzları farklı GPU paylaşım yeteneklerini destekler. Yapılandırma yolunu düğüm türünüz ve yalıtım gereksinimlerinize göre seçin.

Özellik Cloud düğümleri Edge düğüm havuzları
GPU paylaşımı Desteklenir Desteklenir
GPU bellek yalıtımı Desteklenir Desteklenmez
Hesaplama gücü yalıtımı Desteklenir Desteklenmez

Edge düğüm havuzları yalnızca GPU paylaşımını destekler. Bellek ve hesaplama gücü yalıtımı edge düğümler için kullanılamaz. İş yükleriniz bellek veya hesaplama gücü yalıtımı gerektiriyorsa cloud düğümlerini kullanın.

Ön koşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

Kullanım notları

ACK kümelerinde yönetilen GPU düğümleri için GPU kaynaklarını talep ederken ve kullanırken aşağıdaki kurallara uyun.

GPU kaynaklarını talep etmek için aşağıdaki yöntemlerden hiçbirini kullanmayın:

  • GPU ağırlıklı uygulamaları doğrudan düğümlerde çalıştırmak

  • Docker, Podman veya nerdctl kullanarak GPU talepleriyle konteynerler oluşturmak — örneğin, docker run --gpus all veya docker run -e NVIDIA_VISIBLE_DEVICES=all

  • Bir pod YAML dosyasının env bölümüne NVIDIA_VISIBLE_DEVICES=all veya NVIDIA_VISIBLE_DEVICES=<GPU ID> eklemek

  • Pod YAML'sinde NVIDIA_VISIBLE_DEVICES belirtilmediğinde, konteyner görüntüsü oluşturma sırasında NVIDIA_VISIBLE_DEVICES=all ayarlamak

  • Bir pod YAML dosyasının securityContext bölümüne privileged: true eklemek

Bu yöntemler, zamanlayıcının cihaz kaynak defterini atlar. Sonuç olarak, gerçek GPU kaynak tahsisi zamanlayıcının izlediği değerlerden sapar ve zamanlayıcı aynı düğüme ek pod'lar zamanlar. Uygulamalar daha sonra aynı GPU için rekabet eder ve bazıları yetersiz GPU kaynağı nedeniyle başlatılamayabilir. Bu yöntemler ayrıca NVIDIA topluluğu tarafından bildirilenler gibi başka bilinmeyen sorunları da tetikleyebilir.

Adım 1: GPU paylaşım bileşenini yükleyin

GPU paylaşım bileşeni (ack-ai-installer), cloud-native AI suite'in bir parçasıdır. Mevcut dağıtım durumunuz için aşağıdaki adımları izleyin.

Cloud-native AI suite dağıtılmamışsa

  1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesine tıklayın.

  2. Clusters sayfasında ilgili kümeyi bulun ve adına tıklayın. Sol gezinme bölmesinde Applications > Cloud-native AI Suite seçeneklerini belirleyin.

  3. Cloud-native AI Suite sayfasında Deploy öğesine tıklayın.

  4. Deploy Cloud-native AI Suite sayfasında Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling) seçeneğini belirleyin.

  5. (İsteğe bağlı) Bileşenin yanındaki Advanced seçeneğine tıklayın. Parameters panelinde cGPU'nun policy parametresini değiştirin ve OK öğesine tıklayın. Hesaplama gücü paylaşımı için özel bir gereksiniminiz yoksa varsayılan policy: 5 değerini kullanın. Desteklenen ilkeler hakkında ayrıntılı bilgi için bkz. Install and use cGPU on a Docker container.2.jpg

  6. Sayfanın alt kısmında Deploy Cloud-native AI Suite öğesine tıklayın.

Dağıtım tamamlandıktan sonra ack-ai-installer, Cloud-native AI Suite sayfasında Deployed durumunda görünür.

Cloud-native AI suite zaten dağıtılmışsa

  1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesine tıklayın.

  2. Clusters sayfasında ilgili kümeyi bulun ve adına tıklayın. Sol gezinme bölmesinde Applications > Cloud-native AI Suite seçeneklerini belirleyin.

  3. ack-ai-installer öğesini bulun ve Actions sütunundaki Deploy öğesine tıklayın.

  4. (İsteğe bağlı) Parameters panelinde cGPU'nun policy parametresini değiştirin. Hesaplama gücü paylaşımı için özel bir gereksiniminiz yoksa varsayılan policy: 5 değerini kullanın. Desteklenen ilkeler hakkında ayrıntılı bilgi için bkz. Install and use cGPU on a Docker container.2.jpg

  5. OK öğesine tıklayın.

ack-ai-installer yüklendikten sonra durumu Deployed olarak değişir.

Adım 2: Bir GPU düğüm havuzu oluşturun

Cloud düğüm havuzları

  1. Clusters sayfasında ilgili kümeyi bulun ve adına tıklayın. Sol gezinme bölmesinde Nodes > Node Pools seçeneklerini belirleyin.

  2. Node Pools sayfasının sağ üst köşesinde Create Node Pool öğesine tıklayın.

  3. Create Node Pool iletişim kutusunda parametreleri yapılandırın ve Confirm Order öğesine tıklayın. Aşağıdaki tabloda anahtar parametreler açıklanmaktadır. Diğer parametreler için bkz. Create and manage a node pool.

    Önemli

    Bir düğüme GPU paylaşım etiketini ekledikten sonra, etiket değerini değiştirmek için kubectl label nodes veya ACK konsolundaki etiket yönetimi özelliğini kullanmayın. Bu işlem zamanlama sorunlarına neden olabilir. GPU paylaşımını düğüm havuzu düzeyinde yapılandırın. Ayrıntılar için bkz. Configure GPU scheduling policies for node pools ve Issues that may occur if you change label values.

    Parametre Açıklama
    Expected nodes Başlangıçtaki düğüm sayısı. Boş bir düğüm havuzu oluşturmak için 0 olarak ayarlayın.
    Node label Node Label simgesine tıklayın, Key değerini ack.node.gpu.schedule olarak ve Value değerini cgpu olarak ayarlayın. Bu etiket, GPU bellek yalıtımı ve hesaplama gücü paylaşımı ile GPU paylaşımını etkinleştirir; düğümdeki pod'lar yalnızca GPU belleği talep eder ve birden çok pod aynı GPU'yu paylaşabilir. Daha fazla bilgi için bkz. Labels for enabling GPU scheduling policies.

Edge düğüm havuzları

  1. Clusters sayfasında ilgili kümeyi bulun ve adına tıklayın. Sol gezinme bölmesinde Nodes > Node Pools seçeneklerini belirleyin.

  2. Node Pools sayfasında Create Node Pool öğesine tıklayın.

  3. Create Node Pool iletişim kutusunda parametreleri yapılandırın ve Confirm Order öğesine tıklayın. Node Labels bölümünde Node Label simgesine tıklayın, Key değerini ack.node.gpu.schedule olarak ve Value değerini share olarak ayarlayın. Bu etiket GPU paylaşımını etkinleştirir. Diğer parametreler için bkz. Edge node pool management. Düğüm etiketleri hakkında daha fazla bilgi için bkz. Labels for enabling GPU scheduling policies.

Adım 3: GPU hızlandırmalı düğümler ekleyin

Cloud düğümleri

Düğüm havuzunu oluştururken zaten GPU hızlandırmalı düğümler eklediyseniz bu adımı atlayın.

Cloud düğüm havuzuna GPU-accelerated mimarisine sahip ECS örnekleri ekleyin. Daha fazla bilgi için bkz. Add existing ECS instances veya Create and manage a node pool.

Edge düğümleri

Daha fazla bilgi için bkz. GPU hızlandırmalı bir düğüm ekleme.

Adım 4: GPU denetim aracını yükleyin (yalnızca cloud düğümleri)

Küme genelinde GPU bellek tahsisini denetlemek için kubectl-inspect-cgpu kullanın. Bu adım yalnızca cloud düğümleri için geçerlidir.

  1. kubectl-inspect-cgpu uygulamasını PATH'inizde bulunan bir dizine indirin. Bu örnekte /usr/local/bin/ kullanılmaktadır.

    • Linux: ``bash wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-linux -O /usr/local/bin/kubectl-inspect-cgpu ``

    • macOS: ``bash wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-darwin -O /usr/local/bin/kubectl-inspect-cgpu ``

  2. Çalıştırma izinlerini verin:

    chmod +x /usr/local/bin/kubectl-inspect-cgpu
  3. Küme genelinde GPU kullanımını sorgulayın:

    kubectl inspect cgpu

    Beklenen çıktı:

    NAME                       IPADDRESS      GPU0(Allocated/Total)  GPU Memory(GiB)
    cn-shanghai.192.168.6.104  192.168.6.104  0/15                   0/15
    ----------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    0/15 (0%)

    Pod başına GPU tahsis ayrıntılarını görüntülemek için kubectl inspect cgpu -d komutunu çalıştırın.

Adım 5: Örnek bir iş yükü dağıtın

Cloud düğüm havuzları

  1. Mevcut GPU bellek tahsisini kontrol edin:

    kubectl inspect cgpu

    Beklenen çıktı:

    NAME                     IPADDRESS    GPU0(Allocated/Total)  GPU1(Allocated/Total)  GPU Memory(GiB)
    cn-shanghai.192.168.0.4  192.168.0.4  0/7                    0/7                    0/14
    ---------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    0/14 (0%)
  2. 3 GiB GPU belleği talep eden örnek bir Job dağıtın. npxxxxxxxxxxxxxx yerine kendi düğüm havuzu ID'nizi yazın.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: gpu-share-sample
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: gpu-share-sample
        spec:
          nodeSelector:
            alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx # Replace with your node pool ID
          containers:
          - name: gpu-share-sample
            image: registry.cn-hangzhou.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
            command:
            - python
            - tensorflow-sample-code/tfjob/docker/mnist/main.py
            - --max_steps=100000
            - --data_dir=tensorflow-sample-code/data
            resources:
              limits:
                aliyun.com/gpu-mem: 3 # GPU memory to request, in GiB
            workingDir: /root
          restartPolicy: Never

    aliyun.com/gpu-mem alanı, GiB cinsinden GPU belleği miktarını belirtir. Örneğin, 3 değeri paylaşılan GPU'dan 3 GiB GPU belleği talep eder.

Edge düğüm havuzları

4 GiB GPU belleği talep eden örnek bir Job dağıtın. npxxxxxxxxxxxxxx yerine kendi edge düğüm havuzu ID'nizi yazın.

apiVersion: batch/v1
kind: Job
metadata:
  name: tensorflow-mnist-share
spec:
  parallelism: 1
  template:
    metadata:
      labels:
        app: tensorflow-mnist-share
    spec:
      nodeSelector:
        alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx # Replace with your edge node pool ID
      containers:
      - name: tensorflow-mnist-share
        image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
        command:
        - python
        - tensorflow-sample-code/tfjob/docker/mnist/main.py
        - --max_steps=100000
        - --data_dir=tensorflow-sample-code/data
        resources:
          limits:
            aliyun.com/gpu-mem: 4 # GPU memory to request, in GiB
        workingDir: /root
      restartPolicy: Never

Adım 6: Sonuçları doğrulayın

Cloud düğüm havuzları

  1. Denetim düzlemine oturum açın.

  2. GPU bellek yalıtımının aktif olduğunu onaylamak için pod'un son günlük satırını yazdırın:

    kubectl logs gpu-share-sample --tail=1

    Beklenen çıktı:

    2023-08-07 09:08:13.931003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 2832 MB memory) -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:07.0, compute capability: 7.5)

    Çıktı, konteyner tarafından 2.832 MiB GPU belleği talep edildiğini gösterir.

  3. Konteynerin gördüğü belleği görüntülemek için konteyner içinde nvidia-smi çalıştırın:

    • 3043MiB / 3231MiB — Konteyner yalnızca 3.231 MiB (yaklaşık 3 GiB) bellek görür, tüm GPU belleğini değil. Bu, GPU bellek yalıtımının çalıştığını doğrular.

    kubectl exec -it gpu-share-sample nvidia-smi

    Beklenen çıktı:

    Mon Aug 7 08:52:18 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   41C    P0    26W /  70W |   3043MiB /  3231MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    Anahtar hususlar:

  4. Toplam GPU belleğini görüntülemek için düğümde nvidia-smi çalıştırın:

    • 15079MiB — Düğümdeki toplam GPU belleği (tam Tesla T4)

    • 3053MiB / 15079MiB — Konteyner, 15.079 MiB toplam belleğin 3.053 MiB'ini kullanır ve geri kalan belleği aynı GPU'yu paylaşacak diğer pod'lar için kullanılabilir bırakır.

    nvidia-smi

    Beklenen çıktı:

    Mon Aug  7 09:18:26 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   40C    P0    26W /  70W |   3053MiB / 15079MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |    0      8796      C   python3                                     3043MiB |
    +-----------------------------------------------------------------------------+

    Anahtar hususlar:

Edge düğüm havuzları

  1. Clusters sayfasında ilgili kümeyi bulun ve adına tıklayın. Sol gezinme bölmesinde Workloads > Pods seçeneklerini belirleyin.

  2. Pod'unuzun (örneğin, tensorflow-mnist-multigpu-***) Actions sütununda Terminal öğesine tıklayın ve şunu çalıştırın:

    • 16384MiB — Pod, tam GPU belleğini (V100 SXM2, 16 GiB) görür. Edge düğüm havuzları GPU paylaşımını destekler ancak GPU bellek yalıtımını desteklemez; bu nedenle pod'un görünümü talep ettiği 4 GiB ile sınırlı değildir.

    • Pod'un gerçek GPU belleği kullanımı, GPU paylaşım bileşeni tarafından otomatik olarak ayarlanan ortam değişkenleri tarafından yönetilir: `` ALIYUN_COM_GPU_MEM_CONTAINER=4 # GPU memory the pod is allocated (GiB) ALIYUN_COM_GPU_MEM_DEV=16 # Total memory of the physical GPU (GiB) ``

    • Tahsis edilen toplam GPU belleğinin oranı: 4 / 16 = 0.25 (%25)

    nvidia-smi

    Beklenen çıktı:

    Wed Jun 14 06:45:56 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 515.105.01   Driver Version: 515.105.01   CUDA Version: 11.7     |
    |-------------------------------+----------------------+----------------------+
    | 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  Tesla V100-SXM2...  On   | 00000000:00:09.0 Off |                    0 |
    | N/A   35C    P0    59W / 300W |    334MiB / 16384MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    Anahtar hususlar:

Sonraki adımlar

Referanslar