التشغيل السريع: إنشاء مجموعة خدمة Azure Kubernetes ‏(AKS) مستندة إلى GPU Linux باستخدام Azure CLI

خدمة Azure Kubernetes ‏(AKS) هي خدمة Kubernetes مدارة يمكنك استخدامها لنشر المجموعات وإدارتها بسرعة. ستتعلم في هذا التشغيل السريع كيفية:

  • نشر نظام مجموعة AKS باستخدام Azure CLI.
  • أضف تجمع عقدة GPU المستندة إلى Linux مع تمكين عقد GPU المدارة.
  • تحقق من تثبيت AKS وتكوين مكدس برامج GPU للجدولة.

عقد GPU المدارة بالكامل هي ميزة معاينة. عند تمكين عقد GPU المدارة، تقوم AKS بتثبيت وإدارة برنامج تشغيل NVIDIA GPU، والمكون الإضافي لجهاز NVIDIA Kubernetes، ومصدر مقاييس إدارة وحدة معالجة الرسومات (DCGM) لمركز البيانات، ومكونات مراقبة صحة GPU لتجمع عقدة GPU. تدمج عقد GPU المدارة أيضا مقاييس GPU في الوقت الحقيقي لاستيعابها في Azure Prometheus المدارة والخدمة المدارة Azure Monitor ل Prometheus. لمزيد من المعلومات، راجع إنشاء تجمع عقدة GPU مدار بالكامل على خدمة Azure Kubernetes ‏(AKS) (معاينة)وإمكانية مراقبة GPU في خدمة Azure Kubernetes ‏(AKS).

ملحوظة

تتضمن هذه المقالة خطوات لنشر عنقود لأغراض التقييم فقط. قبل نشر نظام مجموعة جاهز للإنتاج، تعرف على البنية المرجعية الأساسية للنظر في كيفية مواءمتها مع متطلبات عملك.

مهم

تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:

قَبلَ البدء

يضمن هذا التشغيل السريع الفهم الأساسي لمفاهيم Kubernetes. لمزيد من المعلومات، راجع Kubernetes الأساسية للمفاهيم الأساسية ل خدمة Azure Kubernetes ‏(AKS).

aks-preview تثبيت ملحق CLI

aks-preview قم بتثبيت ملحق CLI باستخدام الأمر az extension add.

az extension add --name aks-preview

قم بتحديث الملحق للتأكد من أن لديك أحدث إصدار باستخدام الأمر az extension update .

az extension update --name aks-preview

سجل ميزة المعاينة

سجل علامة الميزة ManagedGPUExperiencePreview في اشتراكك باستخدام الأمر az feature register .

az feature register --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview

يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل. تحقق من حالة التسجيل باستخدام الأمر az feature show .

az feature show --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview --query properties.state

عندما تظهر الحالة Registered، قم بتحديث تسجيل Microsoft.ContainerService موفر الموارد باستخدام الأمر az provider register .

az provider register --namespace Microsoft.ContainerService

تحديد متغيرَات البيئة

حدد متغيرات البيئة التالية للاستخدام خلال هذا التشغيل السريع.

export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM")
export RESOURCE_GROUP="myAKSResourceGroup$RANDOM_STRING"
export CLUSTER_NAME="myAKSCluster$RANDOM_STRING"
export GPU_NP="gpunp"
export GPU_VM_SIZE="Standard_NC4as_T4_v3"
export LOCATION="westus"

يخزن المتغير RANDOM_STRING سلسلة عشوائية مكونة من 10 أرقام. يتم ربط RESOURCE_GROUP قيم المتغيرين CLUSTER_NAME مع RANDOM_STRING القيمة لإنشاء أسماء فريدة. يخزن GPU_NP المتغير اسم تجمع عقدة GPU المدارة. يخزن GPU_VM_SIZE المتغير حجم الجهاز الظاهري الممكن لوحدة معالجة الرسومات لتجمع العقدة. المتغير LOCATION له القيمة westus. يمكنك استخدام هذه القيم المتغيرة أو إنشاء قيمك الخاص. استخدم echo الأمر لعرض قيم متغيرة مثل echo $RANDOM_STRING.

إنشاء مجموعة موارد

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

استخدم أمر إنشاء مجموعة az لإنشاء مجموعة موارد.

az group create --name $RESOURCE_GROUP --location $LOCATION

يوضح المثال التالي النتيجة.

{
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup<randomStringValue>",
  "location": "westus",
  "managedBy": null,
  "name": "myAKSResourceGroup<randomStringValue>",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

إنشاء نظام مجموعة AKS

استخدم الأمر az aks create لإنشاء مجموعة AKS. ينشئ المثال التالي نظام مجموعة مع عقدة نظام واحدة ويمكن هوية مدارة معينة من قبل النظام.

az aks create \
  --resource-group $RESOURCE_GROUP \
  --name $CLUSTER_NAME \
  --node-count 1 \
  --generate-ssh-keys

عند إنشاء مجموعة جديدة، تقوم AKS تلقائيا بإنشاء مجموعة موارد ثانية لتخزين موارد AKS. لمزيد من المعلومات، يمكنك الاطلاع على إجابة سؤال لماذا يتم إنشاء مجموعتي موارد باستخدام AKS؟

يحدد العنقود في هذا المثال عدد عقد واحدة لتوفير الوقت والموارد. في بيئة الإنتاج، استخدم عدد العقد من ثلاث عقد أو أكثر. az aks create يتم تعيين الأمر افتراضيا إلى ثلاث عقد إذا لم تحدد عدد العقد.

إضافة تجمع عقدة GPU مدار

أضف تجمع عقدة GPU المدارة المستندة إلى Linux إلى مجموعتك باستخدام الأمر az aks nodepool add . --enable-managed-gpu=true تقوم المعلمة بتكوين AKS لتثبيت وإدارة برنامج تشغيل NVIDIA GPU، والمكون الإضافي لجهاز NVIDIA Kubernetes، ومصدر مقاييس DCGM، ومكونات مراقبة صحة GPU على تجمع العقدة.

يضيف المثال التالي تجمع عقدة GPU مدارة باستخدام نظام التشغيل Ubuntu Linux الافتراضي.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $GPU_NP \
  --node-count 1 \
  --node-vm-size $GPU_VM_SIZE \
  --node-taints sku=gpu:NoSchedule \
  --enable-managed-gpu=true

--node-taints sku=gpu:NoSchedule تحافظ المعلمة على أحمال العمل غير الخاصة ب GPU خارج تجمع عقدة GPU ما لم تتضمن أحمال العمل تفاوتا مطابقا.

بعد إنشاء تجمع العقدة، استخدم الأمر az aks nodepool show للتأكد من تمكين ملف تعريف GPU المدار.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $GPU_NP \
  --query "{Name:name, Mode:mode, VmSize:vmSize, Taints:nodeTaints, GpuProfile:gpuProfile}"

يجب أن يتضمن الإخراج القيم التالية.

{
  "GpuProfile": {
    "driver": "Install",
    "driverType": "",
    "nvidia": {
      "managementMode": "Managed",
      "migStrategy": null
    }
  },
  "Mode": "User",
  "Name": "gpunp",
  "Taints": [
    "sku=gpu:NoSchedule"
  ],
  "VmSize": "Standard_NC4as_T4_v3"
}

الاتصال بنظام المجموعة

لإدارة نظام مجموعة Kubernetes، استخدم سطر أوامر العميلkubectl. kubectl والذي سيكون مثبتًا بالفعل في حال كنت تستخدم Azure Cloud Shell. للتثبيت kubectl محليا، استخدم الأمر az aks install-cli .

  1. قم بالتكوين kubectl للاتصال بمجموعة Kubernetes الخاصة بك باستخدام الأمر az aks get-credentials . هذا الأمر يقوم بتحميل بيانات الاعتماد وضبط Kubernetes CLI لاستخدامها.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. تحقق من الاتصال بالمجموعة باستخدام الأمر kubectl get . يقوم هذا الأمر بإرجاع قائمة بعقد نظام المجموعة ويعرض تجمع العقدة لكل عقدة.

    kubectl get nodes -L kubernetes.azure.com/agentpool,kubernetes.azure.com/mode
    
    NAME                                STATUS   ROLES    AGE     VERSION   AGENTPOOL   MODE
    aks-nodepool1-123456789-vmss000000  Ready    <none>   20m     v1.34.4   nodepool1   system
    aks-gpunp-123456789-vmss000000      Ready    <none>   5m36s   v1.34.4   gpunp       user
    
  3. تحقق من أن Kubernetes يمكنه جدولة أحمال عمل GPU على تجمع عقدة GPU المدارة.

    kubectl get nodes -l kubernetes.azure.com/agentpool=$GPU_NP -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.allocatable.nvidia\.com/gpu}{"\n"}{end}'
    

    يظهر الإخراج عدد وحدات معالجة الرسومات القابلة للتخصيص لكل عقدة في تجمع عقدة GPU المدارة.

    aks-gpunp-123456789-vmss000000  1
    

تمكين مجموعة مقاييس GPU

تتضمن تجمعات عقد GPU المدارة مصدر مقاييس DCGM. لاستيعاب مقاييس GPU في Azure Managed Prometheus، قم أولا بتمكين Azure Monitor الخدمة المدارة ل Prometheus على مجموعة AKS الخاصة بك. ثم قم بإنشاء ConfigMap الذي يمكن dcgmexporter ملف تعريف الكشط في عامل Azure Monitor.

cat <<EOF | kubectl create -f -
kind: ConfigMap
apiVersion: v1
data:
  schema-version:
    v1
  config-version:
    ver1
  default-scrape-settings-enabled: |-
    dcgmexporter = true
metadata:
  name: ama-metrics-settings-configmap
  namespace: kube-system
EOF

بعد تطبيق ConfigMap هذا، يتم استخراج جميع تجمعات عقد NVIDIA GPU الموجودة والجديدة على نظام المجموعة تلقائيا. لعرض مقاييس GPU في Azure Managed Grafana، راجع إمكانية مراقبة GPU في خدمة Azure Kubernetes ‏(AKS).

قم بنشر التطبيق

نشر حمل عمل GPU للتأكد من أن تجمع عقدة GPU المدارة يمكنه تشغيل تطبيقات حقيقية. يعمل هذا المثال على تشغيل Ollama، الذي يخدم نموذج لغة صغير مفتوح المصدر كبير (Llama 3.2 1B) من خلال واجهة برمجة تطبيقات متوافقة مع OpenAI. تم بناء Ollama على llama.cpp، والذي يدعم NVIDIA T4 GPU في تجمع العقدة Standard_NC4as_T4_v3 الذي يستخدمه هذا التشغيل السريع.

ينشئ Deployment البيان التالي و.Service Deployment تطلب وحدة معالجةnvidia.com/gpu: 1 الرسومات ()، تتضمن تسامحا مع sku=gpu:NoSchedule الصبغة، وتستخدم محدد عقدة لاستهداف تجمع عقدة GPU المدارة. عند بدء تشغيل الحاوية، فإنها تطلق خادم Ollama وتسحب llama3.2:1b النموذج بحيث تكون الحاوية جاهزة لخدمة الطلبات.

انشر التطبيق باستخدام الأمر التالي.

cat <<'EOF' | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ollama
  labels:
    app: ollama
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ollama
  template:
    metadata:
      labels:
        app: ollama
    spec:
      # Schedule onto the managed GPU node pool created in this quickstart.
      nodeSelector:
        kubernetes.azure.com/agentpool: gpunp
      # Tolerate the GPU node pool taint (sku=gpu:NoSchedule).
      tolerations:
        - key: "sku"
          operator: "Equal"
          value: "gpu"
          effect: "NoSchedule"
      containers:
        - name: ollama
          image: ollama/ollama:0.30.10
          ports:
            - name: http
              containerPort: 11434
          env:
            # Listen on all interfaces so the Service and kubelet probes can reach it.
            - name: OLLAMA_HOST
              value: "0.0.0.0:11434"
            # Model to pull and serve on startup. Fits comfortably on a 16-GB T4.
            - name: MODEL
              value: "llama3.2:1b"
          # Start the server, wait until it's ready, and then pull the model so the
          # pod is self-contained (no manual "ollama pull" step required).
          command: ["/bin/sh", "-c"]
          args:
            - |
              ollama serve &
              pid=$!
              echo "Waiting for the Ollama server to be ready..."
              until ollama list >/dev/null 2>&1; do sleep 2; done
              echo "Server ready. Pulling model: $MODEL"
              ollama pull "$MODEL" || echo "WARN: pull failed; run 'kubectl exec deploy/ollama -- ollama pull $MODEL' manually"
              echo "Model $MODEL is ready to serve."
              wait $pid
          resources:
            requests:
              cpu: "1"
              memory: 4Gi
            limits:
              cpu: "4"
              memory: 16Gi
              nvidia.com/gpu: 1
          startupProbe:
            httpGet:
              path: /api/tags
              port: http
            periodSeconds: 5
            failureThreshold: 60
          readinessProbe:
            httpGet:
              path: /api/tags
              port: http
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /
              port: http
            periodSeconds: 20
          volumeMounts:
            - name: ollama-data
              mountPath: /root/.ollama
      volumes:
        - name: ollama-data
          emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: ollama
  labels:
    app: ollama
spec:
  type: ClusterIP
  selector:
    app: ollama
  ports:
    - name: http
      port: 11434
      targetPort: http
EOF

ملحوظة

يستهدف هذا البيان تجمع العقدة gpunp . إذا استخدمت قيمة مختلفة للمتغير GPU_NP ، فقم بتحديث قيمة محدد العقدة kubernetes.azure.com/agentpool لمطابقتها قبل تطبيق البيان.

تأكد من أن النشر جاهز باستخدام أمر حالة إطلاق kubectl . يمكن أن يستغرق تنزيل النموذج الأولي بضع دقائق.

kubectl rollout status deployment/ollama --timeout=600s

تحقق من تشغيل الجراب على تجمع عقدة GPU المدارة باستخدام الأمر kubectl get .

kubectl get pods -l app=ollama -o wide

يجب أن يظهر الإخراج الخاص بك الجراب قيد التشغيل على عقدة في تجمع العقدة gpunp .

NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE                            NOMINATED NODE   READINESS GATES
ollama-5b8f6c9d4f-2xq7p   1/1     Running   0          5m    10.244.1.10   aks-gpunp-12345678-vmss000000   <none>           <none>

اختبار التطبيق

إعادة توجيه منفذ محلي إلى Service باستخدام الأمر kubectl port-forward . احتفظ بهذا الأمر قيد التشغيل، وافتح محطة طرفية ثانية للخطوات المتبقية.

kubectl port-forward svc/ollama 11434:11434

في الوحدة الطرفية الثانية، أرسل مطالبة إلى النموذج باستخدام نقطة نهاية إكمال الدردشة المتوافقة مع OpenAI.

curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.2:1b",
    "messages": [{"role": "user", "content": "In one sentence, what is Azure Kubernetes Service?"}]
  }'

يقوم النموذج بإرجاع استجابة JSON التي تحتوي على إجابة تم إنشاؤها، والتي تؤكد أن حمل العمل يخدم الاستدلال من تجمع عقدة GPU المدارة.

تأكد من تحميل النموذج على وحدة معالجة الرسومات باستخدام ollama ps الأمر . PROCESSOR يظهر 100% GPU العمود عند تشغيل النموذج على T4.

kubectl exec deploy/ollama -- ollama ps
NAME          ID              SIZE      PROCESSOR    CONTEXT   UNTIL
llama3.2:1b   baf6a787fdff    1.5 GB    100% GPU     4096      4 minutes from now

يمكنك أيضا عرض وحدة معالجة الرسومات مباشرة من داخل الجراب باستخدام nvidia-smi الأمر .

kubectl exec deploy/ollama -- nvidia-smi

عند الانتهاء من الاختبار، أوقف kubectl port-forward العملية عن طريق تحديد Ctrl+C في المحطة الطرفية الخاصة بها. تتم إزالة التطبيق عند حذف نظام المجموعة في الخطوة التالية.

قم بحذف نظام المجموعة

إذا لم تكن تخطط لعمل درس AKS، قم بتنظيف الموارد غير الضرورية لتجنب رسوم الفوترة على Azure. يمكنك إزالة مجموعة الموارد وخدمة الحاوية وجميع الموارد ذات الصلة باستخدام الأمر az group delete .

az group delete --name $RESOURCE_GROUP --no-wait --yes

لقد قمت بإنشاء نظام مجموعة AKS بهوية مدارة معينة من قبل النظام، وهو خيار الهوية الافتراضي المستخدم في هذا التشغيل السريع. يدير النظام الأساسي هذه الهوية بحيث لا تحتاج إلى إزالتها يدويا.

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

في هذا التشغيل السريع، قمت بنشر مجموعة Kubernetes ثم أضفت تجمع عقدة GPU المدارة المستندة إلى Linux. لمزيد من المعلومات حول عقد GPU المدارة ومقاييس GPU، راجع المقالات التالية:

لمعرفة المزيد حول AKS والقيام بمثال كامل من التعليمات البرمجية إلى النشر، تابع إلى البرنامج التعليمي لنظام مجموعة Kubernetes.