Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A GPU-alapú számítási feladatok, például az AI-következtetési szolgáltatások, memóriaigényesek lehetnek, és nehezen optimalizálhatók anélkül, hogy a GPU-tevékenység látható lenne. Előfordulhat, hogy memóriahiányos (OOM-) hibák, váratlan késési csúcsok vagy növekvő GPU-memóriaterhelés jelenik meg, de a hagyományos Kubernetes-metrikák nem jelenítik meg, hogy a kód hol foglalja le a memóriát. A GPU-profilkészítés segít azonosítani a GPU memóriahasználatáért felelős függvényeket.
Ez a cikk bemutatja, hogyan helyezhet üzembe egy eBPF-alapú GPU megfigyelhetőségi ügynököt, hogyan tárolhat profilokat a Pyroscopeban, és hogyan jelenítheti meg a GPU memóriafoglalásait a Grafana-ban.
Important
Az AKS előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az AKS előzetes verzióihoz részleges támogatást nyújt az ügyfélszolgálat a tőle telhető legjobb módon. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:
Important
A nyílt forráskódú szoftverek az AKS dokumentációjában és mintáiban szerepelnek. Az Ön által üzembe helyezett szoftverek nem tartoznak az AKS szolgáltatási szintű szerződéseibe, a korlátozott jótállásba és az Azure-támogatásba. Mivel nyílt forráskódú technológiát használ az AKS mellett, tekintse meg a megfelelő közösségek és projektfenntartók által rendelkezésre álló támogatási lehetőségeket a terv kidolgozásához.
A Microsoft felelősséget vállal az AKS-en üzembe helyezhető nyílt forráskódú csomagok elkészítéséért. Ez a felelősség magában foglalja a buildelési, vizsgálati, aláírási, érvényesítési és gyorsjavítási folyamat teljes tulajdonjogát, valamint a tárolólemezképek bináris fájljainak vezérlését. További információért lásd: Az AKS sebezhetőség-kezelése és AKS támogatás lefedettsége.
Prerequisites
- Legalább egy GPU-kompatibilis csomópontkészlettel rendelkező AKS-fürt.
-
Azure CLI 2.72.0-s vagy újabb verziót. A verzió ellenőrzéséhez futtassa a
az --version. - Az
k8s-extensionAzure CLI-bővítmény. A telepítéshez futtassa a következőt:az extension add --name k8s-extension. -
Helm 3.x vagy újabb verzió. A verzió ellenőrzéséhez futtassa a
helm version. - Azure Monitor, kivéve, ha saját monitorozási beállítást használ.
- Azure Managed Grafana, kivéve, ha saját Grafana-példányt használ.
1. lépés: GPU-profilkészítés engedélyezése az Inspektor Gadget bővítményen keresztül
Az Inspektor Gadget egy nyílt forráskódú eBPF-alapú megfigyelhetőségi keretrendszer a Kuberneteshez. A GPU profilozásához kódmódosítások, sidecarok vagy a podok újraindítása nélkül nyomon követi a Compute Unified Device Architecture (CUDA) memóriafoglalási hívásait.
GPU-profilkészítés engedélyezése az AKS-fürtön:
Note
Ez a parancs feltételezi, hogy engedélyezte az Azure Monitort az AKS-fürtön. Ha saját Prometheus-telepítőt használ, távolítsa el --configuration-settings azureMonitor.enabled=true. További információkért tekintse meg a GPU profilkészítésével kapcsolatos gyakori kérdéseket.
az k8s-extension create \
--extension-type microsoft.inspektorgadget \
--subscription <your-subscription-id> \
--resource-group <your-resource-group> \
--cluster-name <your-cluster-name> \
--cluster-type managedClusters \
--release-train preview \
--name inspektor-gadget \
--configuration-settings gpuObservability.enabled=true \
--configuration-settings azureMonitor.enabled=true
Ellenőrizze, hogy az Inspektor Gadget podok futnak-e:
kubectl get pods -n gadget -l k8s-app=gadget
Tip
A GPU memóriaprofilozása rögzíti a memóriafoglalási eseményeket. Ha a számítási feladat gpu-memóriát foglal le a profilkészítés engedélyezése előtt, a profilkészítő nem rögzíti ezeket az eseményeket. Olyan számítási feladatok esetében, mint például a gpu-memóriát indításkor előre áthelyező vLLM, engedélyezze a profilkészítést a számítási feladat üzembe helyezése előtt, vagy indítsa újra a számítási feladatot a kezdeti memóriafoglalási útvonalak rögzítéséhez.
2. lépés: Profilvizualizáció engedélyezése Pyroscope használatával
Note
Ha van meglévő Grafana- és Pyroscope-verem a klaszterben, hagyja ki ezt a lépést.
A Pyroscope egy nyílt forráskódú projekt, amely teljesítményprofilokat vizualizál és tárol memóriaoptimalizálás és hibaelhárítás céljából.
Telepítsen egyetlen Pyroscope-példányt a fürtjére:
helm install pyroscope -n gadget \
oci://ghcr.io/grafana/helm-charts/pyroscope \
--version 1.15.0 \
--set pyroscope.image.repository=grafana/pyroscope \
--set-string pyroscope.image.tag=1.15.0 \
--set pyroscope.replicaCount=1 \
--set pyroscope.structuredConfig.self_profiling.disable_push=true \
--set pyroscope.structuredConfig.storage.backend=filesystem \
--set pyroscope.service.type=LoadBalancer \
--set pyroscope.service.port=4040 \
--set-string pyroscope.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal"=true \
--set-string pyroscope.service.annotations."service\.beta\.kubernetes\.io/azure-pls-create"=true \
--set-string pyroscope.service.annotations."service\.beta\.kubernetes\.io/azure-pls-name"=pyroscope-pls \
--set-string pyroscope.service.annotations."service\.beta\.kubernetes\.io/azure-pls-proxy-protocol"=false \
--set-string pyroscope.service.annotations."service\.beta\.kubernetes\.io/azure-pls-visibility"='*' \
--set alloy.enabled=false \
--set minio.enabled=false
Ellenőrizze, hogy a Pyroscope pod fut-e:
kubectl get pods -n gadget pyroscope-0
Note
A magas rendelkezésre állású üzembe helyezésről a Pyroscope mikroszolgáltatások dokumentációjában olvashat.
Note
Ez a parancs a helyi fájlrendszerben tárolja a profilokat, így a pod ismételt létrehozásakor a profilkészítési adatok elvesznek. A profilok pod-újraindítások közötti megőrzéséhez tekintse meg a GPU profilkészítésével kapcsolatos gyakori kérdéseket.
3. lépés: Csatlakoztassa a Pyroscope-ot az Azure Managed Grafanához
Note
Ha saját Grafana-példányt használ, tekintse meg a GPU profilkészítésével kapcsolatos gyakori kérdéseket.
Tip
A számítási feladatok profiljainak közvetlenül a Pyroscope felhasználói felületén való megtekintéséhez futtassa a következőt kubectl port-forward -n gadget pyroscope-0 4040:4040: .
Csatlakoztassa a Pyroscope-ot az Azure Managed Grafanához a Azure Private Linken keresztül.
A klaszter és a Grafana környezeti változóinak beállítása:
export RESOURCE_GROUP="<your-resource-group>"
export AKS_CLUSTER="<your-aks-cluster-name>"
export LOCATION="<your-aks-cluster-location>"
export GRAFANA_NAME="<your-azure-managed-grafana-name>"
export AKS_NODE_RG=$(az aks show \
--resource-group "$RESOURCE_GROUP" \
--name "$AKS_CLUSTER" \
--query 'nodeResourceGroup' \
--output tsv)
Tip
Ha nincs Azure Managed Grafana-példánya, futtassa ezt: az grafana create --name "$GRAFANA_NAME" --resource-group "$RESOURCE_GROUP" --location "$LOCATION" --output none.
A privát végpont környezeti változóinak beállítása:
export PYROSCOPE_PLS="pyroscope-pls"
export PYROSCOPE_MPE="pyroscope-mpe"
export PYROSCOPE_PORT="4040"
Hozza létre a privát hivatkozást:
Note
A privát hivatkozás létrehozása eltarthat néhány percig.
# Check the Azure Managed Grafana extension version.
ver=$(az extension show --name amg --query version --output tsv)
[[ "${ver%%.*}" -ge 3 ]] && MPE="managed-private-endpoint" || MPE="mpe"
# Wait until the Pyroscope private link service is available.
until az network private-link-service show \
--name "$PYROSCOPE_PLS" \
--resource-group "$AKS_NODE_RG" \
--output none 2>/dev/null; do
sleep 10
done
PYRO_PLS_ID=$(az network private-link-service show \
--name "$PYROSCOPE_PLS" \
--resource-group "$AKS_NODE_RG" \
--query 'id' \
--output tsv)
az grafana $MPE create \
--workspace-name "$GRAFANA_NAME" \
--resource-group "$RESOURCE_GROUP" \
--name "$PYROSCOPE_MPE" \
--private-link-resource-id "$PYRO_PLS_ID" \
--location "$LOCATION" \
--output none
sleep 30
PYRO_CONN=$(az network private-link-service show \
--name "$PYROSCOPE_PLS" \
--resource-group "$AKS_NODE_RG" \
--query "privateEndpointConnections[?privateLinkServiceConnectionState.status=='Pending' && starts_with(name, 'grafana-${GRAFANA_NAME}')].name | [0]" \
--output tsv)
az network private-link-service connection update \
--name "$PYRO_CONN" \
--service-name "$PYROSCOPE_PLS" \
--resource-group "$AKS_NODE_RG" \
--connection-status Approved \
--output none
az grafana $MPE refresh \
--workspace-name "$GRAFANA_NAME" \
--resource-group "$RESOURCE_GROUP" \
--output none
echo "Successfully created private link."
Hozza létre a Pyroscope-adatforrást a Azure Managed Grafana:
ver=$(az extension show --name amg --query version --output tsv)
[[ "${ver%%.*}" -ge 3 ]] && MPE="managed-private-endpoint" || MPE="mpe"
PYRO_IP=$(az grafana $MPE show \
--workspace-name "$GRAFANA_NAME" \
--resource-group "$RESOURCE_GROUP" \
--name "$PYROSCOPE_MPE" \
--query 'privateLinkServicePrivateIP' \
--output tsv)
export PYROSCOPE_URL="http://${PYRO_IP}:${PYROSCOPE_PORT}"
az grafana data-source create \
--name "$GRAFANA_NAME" \
--resource-group "$RESOURCE_GROUP" \
--definition "{
\"name\": \"local-pyroscope\",
\"uid\": \"local-pyroscope\",
\"type\": \"grafana-pyroscope-datasource\",
\"access\": \"proxy\",
\"url\": \"${PYROSCOPE_URL}\",
\"jsonData\": { \"keepCookies\": [\"pyroscope_git_session\"] }
}" \
--output none
echo "Successfully created the local-pyroscope data source."
Ellenőrizze, hogy az adatforrás rendelkezik-e érvényes URL-címvel:
az grafana data-source show \
--name "$GRAFANA_NAME" \
--data-source local-pyroscope
4. lépés: A Grafana csatlakoztatása Azure Monitor Prometheus felügyelt szolgáltatásához
Note
Ezek a lépések a Prometheus és a Grafana connect Azure Monitor felügyelt szolgáltatásán alapulnak. Győződjön meg arról, hogy Grafana felügyelt identitása rendelkezik monitorozási adatolvasó szerepkörrel a Azure Monitor munkaterületen, különösen akkor, ha a munkaterület más erőforráscsoportban vagy előfizetésben található.
A Azure Monitor munkaterület környezeti változóinak beállítása:
export AMP_NAME="<your-azure-monitor-workspace-name>"
export AMP_RESOURCE_GROUP="<your-azure-monitor-workspace-resource-group>"
Tip
Futtassa a(z) az resource list --resource-type Microsoft.Monitor/accounts --resource-group "$AMP_RESOURCE_GROUP" --output table parancsot az erőforráscsoportban található Azure Monitor-munkaterületek listázásához. Az előfizetés kereséséhez hagyja ki --resource-group.
Hozza létre a Prometheus adatforrást:
AMP_ENDPOINT=$(az resource show \
--resource-type Microsoft.Monitor/accounts \
--name "$AMP_NAME" \
--resource-group "$AMP_RESOURCE_GROUP" \
--query properties.metrics.prometheusQueryEndpoint \
--output tsv)
az grafana data-source create \
--name "$GRAFANA_NAME" \
--resource-group "$RESOURCE_GROUP" \
--definition "{
\"name\": \"$AMP_NAME\",
\"type\": \"prometheus\",
\"access\": \"proxy\",
\"url\": \"$AMP_ENDPOINT\",
\"jsonData\": {
\"httpMethod\": \"POST\",
\"azureCredentials\": { \"authType\": \"msi\" }
}
}"
Ellenőrizze az adatforrást:
az grafana data-source show \
--name "$GRAFANA_NAME" \
--data-source "$AMP_NAME"
5. lépés: Irányítópultok beállítása a Grafanában
Importálja a GPU megfigyelhetőségi irányítópultját:
az grafana dashboard create \
--name "$GRAFANA_NAME" \
--resource-group "$RESOURCE_GROUP" \
--definition "$(curl -sSL https://raw.githubusercontent.com/inspektor-gadget/grafana-dashboards/refs/heads/main/dashboards/gpu-observability/AdvancedGPUObservability.json)"
Az irányítópult URL-címének lekérése:
GRAFANA_URL=$(az grafana show \
--name "$GRAFANA_NAME" \
--resource-group "$RESOURCE_GROUP" \
--query properties.endpoint \
--output tsv)
echo "${GRAFANA_URL}/d/AdvancedGPUObservability"
A profilkészítési adatok értelmezéséhez lásd a GPU-profilkészítési lángdiagramok elemzését.
Erőforrások tisztítása
Távolítsa el a fürtön belüli GPU-megfigyelési vermet:
helm uninstall pyroscope -n gadget
az k8s-extension delete \
--name inspektor-gadget \
--cluster-name <your-cluster-name> \
--resource-group <your-resource-group> \
--cluster-type managedClusters \
--yes
kubectl delete namespace gadget
Lángdiagramok olvasása
A profilkészítési eredmények értelmezéséhez és a GPU-memória gócpontjainak azonosításához lásd a GPU-profilkészítési lángdiagramok elemzését.
GYIK
Az egyéni Prometheus- és Grafana-integrációkért és az állandó Pyroscope Storage-hoz tekintse meg a GPU-profilkészítési gyakori kérdéseket.