• Русский
  • Интеграция с InferenceService

    На этой странице показано, как использовать возможности планирования и управления ресурсами Alauda Build of Kueue при запуске inferenceService в Alauda AI.

    Предварительные требования

    • У вас установлен Alauda AI.
    • У вас установлен Alauda Build of Kueue.
    • У вас установлен Alauda Build of Hami (для демонстрации vGPU).
    • Веб-CLI Alauda Container Platform имеет связь с вашим кластером.

    Процедура

    1. Создайте проект и namespace в Alauda Container Platform, например, имя проекта — test, а имя namespace — test-1.

    2. Перейдите в Alauda AI, нажмите Namespace Manage в разделе Admin > Management Namespace и выберите ранее созданный namespace для завершения управления.

    3. Создайте ресурсы, выполнив следующую команду:

      cat <<EOF| kubectl create -f -
      apiVersion: kueue.x-k8s.io/v1beta2
      kind: ClusterQueue
      metadata:
        name: cluster-queue
      spec:
        namespaceSelector: {}
        resourceGroups:
        - coveredResources: ["cpu", "memory", "pods", "ephemeral-storage", "nvidia.com/gpualloc", "nvidia.com/total-gpucores", "nvidia.com/total-gpumem"]
          flavors:
          - name: "default-flavor"
            resources:
            - name: "cpu"
              nominalQuota: 9
            - name: "memory"
              nominalQuota: 36Gi
            - name: "pods"
              nominalQuota: 5
            - name: "nvidia.com/gpualloc"
              nominalQuota: "2"
            - name: "nvidia.com/total-gpucores"
              nominalQuota: "50"
            - name: "nvidia.com/total-gpumem"
              nominalQuota: "20000"
            - name: "ephemeral-storage"
              nominalQuota: 100Gi
      ---
      apiVersion: kueue.x-k8s.io/v1beta2
      kind: ResourceFlavor
      metadata:
        name: default-flavor
      ---
      apiVersion: kueue.x-k8s.io/v1beta2
      kind: LocalQueue
      metadata:
        namespace: test-1
        name: test
      spec:
        clusterQueue: cluster-queue
      EOF
    4. Создайте ресурс InferenceService в интерфейсе Alauda AI с меткой kueue.x-k8s.io/queue-name: test:

      kind: InferenceService
      apiVersion: serving.kserve.io/v1beta1
      metadata:
        labels:
          kueue.x-k8s.io/queue-name: test
        name: test
        namespace: test-1
      # ...
      spec:
          model:
            resources:
              limits:
                cpu: '1'
                ephemeral-storage: 10Gi
                memory: 2Gi
                nvidia.com/gpualloc: '1'
                nvidia.com/gpucores: '80'
                nvidia.com/gpumem: 8k
      # ...
    5. Наблюдайте за pod-ами InferenceService:

      kubectl -n test-1 get pod | grep test-predictor

      Вы увидите, что этот pod находится в состоянии SchedulingGated:

      test-predictor-8475554f4d-zw7lp   0/1     SchedulingGated   0          13s   <none>   <none>   <none>           <none>
      
    6. Обновите квоты nvidia.com/total-gpucores:

      cat <<EOF| kubectl apply -f -
      apiVersion: kueue.x-k8s.io/v1beta2
      kind: ClusterQueue
      metadata:
        name: cluster-queue
      spec:
        namespaceSelector: {}
        resourceGroups:
        - coveredResources: ["cpu", "memory", "pods", "ephemeral-storage", "nvidia.com/gpualloc", "nvidia.com/total-gpucores", "nvidia.com/total-gpumem"]
          flavors:
          - name: "default-flavor"
            resources:
            - name: "cpu"
              nominalQuota: 9
            - name: "memory"
              nominalQuota: 36Gi
            - name: "pods"
              nominalQuota: 5
            - name: "nvidia.com/gpualloc"
              nominalQuota: "2"
            - name: "nvidia.com/total-gpucores"
              nominalQuota: "100"
            - name: "nvidia.com/total-gpumem"
              nominalQuota: "20000"
            - name: "ephemeral-storage"
              nominalQuota: 100Gi
      EOF

      Вы увидите, что этот pod находится в состоянии Running:

      test-predictor-8475554f4d-zw7lp   1/1     Running   0          13s   <none>   <none>   <none>           <none>