Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure Kubernetes Service (AKS) to zarządzana usługa Kubernetes, której można użyć do szybkiego wdrażania klastrów i zarządzania nimi. Z tego przewodnika Szybki start dowiesz się, jak wykonywać następujące zadania:
- Wdróż klaster usługi AKS przy użyciu Azure CLI.
- Dodaj pulę węzłów procesora GPU opartą na systemie Linux z włączonymi zarządzanymi węzłami procesora GPU.
- Sprawdź, czy AKS zainstalował i skonfigurował stos oprogramowania GPU na potrzeby planowania.
W pełni zarządzane węzły procesora GPU są funkcją w wersji zapoznawczej. Po włączeniu zarządzanych węzłów GPU usługa AKS instaluje sterownik GPU NVIDIA i zarządza nim, a także instaluje wtyczkę urządzeń NVIDIA dla platformy Kubernetes, eksporter metryk narzędzia Data Center GPU Manager (DCGM) oraz składniki monitorowania kondycji GPU dla puli węzłów GPU. Zarządzane węzły GPU integrują również metryki GPU w czasie rzeczywistym na potrzeby pozyskiwania danych w usłudze Azure Managed Prometheus oraz w usłudze Azure Monitor managed service for Prometheus. Aby uzyskać więcej informacji, zobacz Tworzenie w pełni zarządzanej puli węzłów procesora GPU w Azure Kubernetes Service (AKS) (wersja zapoznawcza) i obserwowanie procesora GPU w Azure Kubernetes Service (AKS).
Note
Ten artykuł zawiera kroki wdrażania klastra tylko do celów ewaluacyjnych. Przed wdrożeniem klastra gotowego do produkcji zapoznaj się z architekturą referencyjną punktu odniesienia , aby zastanowić się, jak jest ona zgodna z wymaganiami biznesowymi.
Important
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi i wymagają zapisania się. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów, świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Zanim rozpoczniesz
Ten szybki start zakłada, że masz podstawową wiedzę na temat pojęć związanych z platformą Kubernetes. Aby uzyskać więcej informacji, zobacz Podstawowe pojęcia Kubernetes dla Azure Kubernetes Service (AKS).
- Jeśli nie masz jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Użyj środowiska Bash w Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Get started with Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj Azure CLI. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie Azure CLI w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić Azure CLI w kontenerze Docker.
Jeśli używasz instalacji lokalnej, zaloguj się do Azure CLI przy użyciu polecenia az login. Aby zakończyć proces uwierzytelniania, wykonaj kroki wyświetlane na Twoim terminalu. Aby uzyskać inne opcje logowania, zobacz Uwierzytelnianie do Azure za pomocą Azure CLI.
Gdy zostaniesz o to poproszony/a, zainstaluj rozszerzenie Azure CLI przy pierwszym użyciu. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą Azure CLI.
Uruchom az version, aby sprawdzić zainstalowaną wersję i biblioteki zależne. Aby przeprowadzić uaktualnienie do najnowszej wersji, uruchom az upgrade.
- Potrzebujesz Azure CLI w wersji 2.85.0 lub nowszej. Aby dowiedzieć się, jaka wersja jest używana, uruchom polecenie
az --version. Jeśli musisz zainstalować lub uaktualnić interfejs wiersza polecenia platformy Azure, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure. - Upewnij się, że tożsamość używana do utworzenia klastra ma odpowiednie minimalne uprawnienia. Aby uzyskać więcej informacji na temat dostępu i tożsamości dla usługi AKS, zobacz Opcje dostępu i tożsamości dla usługi Azure Kubernetes Service (AKS).
- Jeśli masz wiele subskrypcji Azure, wybierz odpowiedni identyfikator subskrypcji do rozliczeń przy użyciu polecenia az account set. Aby uzyskać więcej informacji, zobacz Jak zarządzać subskrypcjami Azure — Azure CLI.
- W zależności od subskrypcji platformy Azure może być konieczne wystąpienie o zwiększenie limitu przydziału vCPU dla rodziny maszyn wirtualnych z obsługą GPU używanej w tym przewodniku Szybki start. Aby uzyskać więcej informacji, zobacz Zwiększanie limitów przydziału procesorów wirtualnych rodziny maszyn wirtualnych.
- Rozmiary maszyn wirtualnych z obsługą GPU obejmują specjalistyczny sprzęt i podlegają wyższym opłatom oraz regionalnej dostępności. Aby uzyskać więcej informacji, zobacz Rozmiary maszyn wirtualnych zoptymalizowanych pod kątem procesora GPU.
Zainstaluj rozszerzenie CLI aks-preview
Zainstaluj rozszerzenie CLI aks-preview za pomocą polecenia az extension add.
az extension add --name aks-preview
Zaktualizuj rozszerzenie, aby upewnić się, że masz najnowszą wersję za pomocą polecenia az extension update .
az extension update --name aks-preview
Rejestrowanie funkcji w wersji zapoznawczej
Zarejestruj flagę funkcji ManagedGPUExperiencePreview w ramach subskrypcji przy użyciu polecenia az feature register.
az feature register --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview
Wyświetlenie stanu Zarejestrowane trwa kilka minut. Sprawdź stan rejestracji za pomocą polecenia az feature show.
az feature show --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview --query properties.state
Gdy stan ma wartość Zarejestrowano, odśwież rejestrację Microsoft.ContainerService dostawcy zasobów przy użyciu polecenia az provider register .
az provider register --namespace Microsoft.ContainerService
Definiowanie zmiennych środowiskowych
Zdefiniuj następujące zmienne środowiskowe do użycia w tym przewodniku Szybki start.
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"
Zmienna RANDOM_STRING przechowuje losowy 10-cyfrowy ciąg. Wartości zmiennych RESOURCE_GROUP i CLUSTER_NAME są łączone z wartością RANDOM_STRING w celu utworzenia unikalnych nazw. Zmienna GPU_NP przechowuje nazwę zarządzanej puli węzłów procesora GPU. Zmienna GPU_VM_SIZE przechowuje rozmiar maszyny wirtualnej z obsługą procesora GPU dla puli węzłów. Zmienna LOCATION ma wartość westus. Możesz użyć tych wartości zmiennych lub utworzyć własne. Użyj polecenia , echo aby wyświetlić wartości zmiennych, takie jak echo $RANDOM_STRING.
Tworzenie grupy zasobów
Grupa zasobów Azure to grupa logiczna do wdrażania zasobów Azure i zarządzania nimi. Podczas tworzenia grupy zasobów określ lokalizację. Ta lokalizacja polega na tym, że metadane grupy zasobów są przechowywane i gdzie zasoby są uruchamiane w Azure, jeśli nie określisz innego regionu podczas tworzenia zasobów.
Użyj polecenia az group create , aby utworzyć grupę zasobów.
az group create --name $RESOURCE_GROUP --location $LOCATION
Poniższy przykład przedstawia wynik.
{
"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"
}
Utwórz klaster AKS
Utwórz klaster AKS za pomocą polecenia az aks create. Poniższy przykład tworzy klaster z jednym węzłem systemowym i włącza tożsamość zarządzaną przypisaną przez system.
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys
Podczas tworzenia nowego klastra usługa AKS automatycznie tworzy drugą grupę zasobów do przechowywania zasobów usługi AKS. Aby uzyskać więcej informacji, zobacz Dlaczego dwie grupy zasobów są tworzone za pomocą usługi AKS?
Klaster w tym przykładzie określa liczbę węzłów równą jednemu, aby zaoszczędzić czas i zasoby. W środowisku produkcyjnym należy użyć co najmniej trzech węzłów. Polecenie az aks create jest domyślnie ustawione na trzy węzły, jeśli nie określisz liczby węzłów.
Dodaj zarządzaną pulę węzłów GPU
Dodaj do klastra zarządzaną pulę węzłów GPU opartą na systemie Linux przy użyciu polecenia az aks nodepool add. Parametr --enable-managed-gpu=true konfiguruje AKS do instalowania sterownika GPU firmy NVIDIA, wtyczki urządzenia Kubernetes dla NVIDIA, eksportera metryk DCGM oraz składników monitorowania kondycji GPU i zarządzania nimi w puli węzłów.
Poniższy przykład dodaje zarządzaną pulę węzłów procesora GPU przy użyciu domyślnego systemu operacyjnego 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
Parametr --node-taints sku=gpu:NoSchedule nie dopuszcza obciążeń niewymagających GPU do puli węzłów GPU, chyba że obciążenia te zawierają odpowiednią tolerancję.
Po utworzeniu puli węzłów użyj polecenia az aks nodepool show , aby potwierdzić, że profil zarządzanego procesora GPU jest włączony.
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}"
Dane wyjściowe powinny zawierać następujące wartości.
{
"GpuProfile": {
"driver": "Install",
"driverType": "",
"nvidia": {
"managementMode": "Managed",
"migStrategy": null
}
},
"Mode": "User",
"Name": "gpunp",
"Taints": [
"sku=gpu:NoSchedule"
],
"VmSize": "Standard_NC4as_T4_v3"
}
Połącz się z klastrem
Aby zarządzać klastrem Kubernetes, użyj klienta wiersza polecenia kubernetes kubectl. Jeśli korzystasz z usługi Azure Cloud Shell, narzędzie kubectl jest już zainstalowane. Aby zainstalować kubectl lokalnie, użyj polecenia az aks install-cli .
Skonfiguruj
kubectl, aby nawiązać połączenie z klastrem Kubernetes przy użyciu polecenia az aks get-credentials . To polecenie pobiera poświadczenia i konfiguruje Kubernetes CLI do ich użycia.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMESprawdź połączenie z klastrem przy użyciu polecenia kubectl get . To polecenie zwraca listę węzłów klastra i pokazuje pulę węzłów dla każdego węzła.
kubectl get nodes -L kubernetes.azure.com/agentpool,kubernetes.azure.com/modeNAME 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 userSprawdź, czy platforma Kubernetes może zaplanować obciążenia procesora GPU w zarządzanej puli węzłów procesora 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}'Dane wyjściowe pokazują liczbę procesorów GPU możliwych do przydzielenia dla każdego węzła w zarządzanej puli węzłów GPU.
aks-gpunp-123456789-vmss000000 1
Włączanie zbierania metryk procesora GPU
Zarządzane pule węzłów GPU zawierają eksporter metryk DCGM. Aby pozyskiwać metryki GPU w usłudze Azure Managed Prometheus, najpierw włącz usługę zarządzaną Azure Monitor dla narzędzia Prometheus w klastrze AKS. Następnie utwórz obiekt ConfigMap, aby włączyć profil dcgmexporter zbierania danych w agencie 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
Po zastosowaniu tej ConfigMap wszystkie istniejące i nowe pule węzłów procesora GPU firmy NVIDIA w klastrze są usuwane automatycznie. Aby wyświetlić metryki procesora GPU w Azure Managed Grafana, zobacz Obserwowanie procesora GPU w Azure Kubernetes Service (AKS).
Wdrażanie aplikacji
Wdróż obciążenie procesora GPU, aby potwierdzić, że zarządzana pula węzłów procesora GPU może uruchamiać rzeczywiste aplikacje. W tym przykładzie działa system Ollama, który obsługuje mały model języka open source (Llama 3.2 1B) za pośrednictwem interfejsu API zgodnego z platformą OpenAI. Ollama opiera się na llama.cpp, który obsługuje kartę graficzną NVIDIA T4 w puli węzłów Standard_NC4as_T4_v3, używanej w tym przewodniku Szybki start.
Poniższy manifest tworzy element Deployment i element Service. Obiekt Deployment żąda jednego procesora graficznego (GPU) (nvidia.com/gpu: 1), zawiera tolerancję dla skażenia sku=gpu:NoSchedule i używa selektora węzłów, aby wskazać zarządzaną pulę węzłów GPU. Po uruchomieniu kontener uruchamia serwer Ollama i pobiera model llama3.2:1b, aby zasobnik był gotowy do obsługiwania żądań.
Wdróż aplikację przy użyciu następującego polecenia.
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
Note
Ten manifest dotyczy puli węzłów gpunp. Jeśli dla zmiennej GPU_NP użyto innej wartości, zaktualizuj kubernetes.azure.com/agentpool wartość selektora węzłów, aby była zgodna przed zastosowaniem manifestu.
Upewnij się, że wdrożenie jest gotowe, za pomocą polecenia kubectl rollout status. Pobieranie początkowego modelu może potrwać kilka minut.
kubectl rollout status deployment/ollama --timeout=600s
Sprawdź, czy pod jest uruchomiony w zarządzanej puli węzłów GPU za pomocą polecenia kubectl get.
kubectl get pods -l app=ollama -o wide
Wynik powinien pokazywać zasobnik uruchomiony na węźle w puli węzłów 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>
Testowanie aplikacji
Przekieruj lokalny port do Service za pomocą polecenia kubectl port-forward. Pozostaw to polecenie uruchomione i otwórz drugi terminal dla pozostałych kroków.
kubectl port-forward svc/ollama 11434:11434
W drugim terminalu wyślij monit do modelu przy użyciu punktu końcowego uzupełniania czatu zgodnego z interfejsem 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?"}]
}'
Model zwraca odpowiedź JSON zawierającą wygenerowaną odpowiedź, która potwierdza, że obciążenie obsługuje wnioskowanie z zarządzanej puli węzłów procesora GPU.
Upewnij się, że model został załadowany na procesor GPU przy użyciu ollama ps polecenia . Kolumna PROCESSOR pokazuje 100% GPU , kiedy model działa na 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
GPU można również sprawdzić bezpośrednio z wnętrza poda za pomocą polecenia nvidia-smi.
kubectl exec deploy/ollama -- nvidia-smi
Po zakończeniu testowania kubectl port-forward zatrzymaj proces, wybierając klawisze Ctrl+C w terminalu. Aplikacja zostanie usunięta po usunięciu klastra w następnym kroku.
Usuwanie klastra
Jeśli nie planujesz wykonywania samouczka dotyczącego usługi AKS, wyczyść niepotrzebne zasoby, aby uniknąć opłat za rozliczenia platformy Azure. Grupę zasobów, usługę kontenera i wszystkie powiązane zasoby można usunąć za pomocą polecenia az group delete .
az group delete --name $RESOURCE_GROUP --no-wait --yes
Klaster AKS utworzono przy użyciu tożsamości zarządzanej przypisanej przez system, która jest domyślną opcją tożsamości stosowaną w tym przewodniku Szybki start. Platforma zarządza tą tożsamością, aby nie trzeba było jej ręcznie usuwać.
Następne kroki
W tym przewodniku Szybki start wdrożysz klaster Kubernetes, a następnie dodasz zarządzaną pulę węzłów GPU opartych na systemie Linux. Aby uzyskać więcej informacji na temat zarządzanych węzłów procesora GPU i metryk procesora GPU, zobacz następujące artykuły:
- Utwórz w pełni zarządzaną pulę węzłów procesora GPU w Azure Kubernetes Service (AKS) (wersja zapoznawcza).
- Możliwość obserwowania procesora GPU w Azure Kubernetes Service (AKS).
Aby dowiedzieć się więcej na temat usługi AKS i wykonać kompletny przykład kodu do wdrożenia, przejdź do samouczka dotyczącego klastra Kubernetes.