Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Úlohy založené na GPU, jako jsou služby odvození umělé inteligence, můžou být náročné na paměť a je obtížné je optimalizovat bez přehledu o aktivitě GPU. Můžete se setkat s chybami způsobenými nedostatkem paměti (OOM), neočekávanými nárůsty latence nebo rostoucím tlakem na paměť GPU, ale tradiční metriky Kubernetes neukazují, kde v kódu se přiděluje paměť. Profilace GPU pomáhá identifikovat funkce zodpovědné za využití paměti GPU.
V tomto článku se dozvíte, jak nasadit agenta pozorovatelnosti GPU založeného na eBPF, uložit profily v Pyroscopeu a vizualizovat přidělení paměti GPU v Grafana.
Important
Funkce AKS ve verzi Preview jsou k dispozici na bázi samoobsluhy a dobrovolného přihlášení. Ukázky jsou poskytovány "tak, jak jsou" a "dle dostupnosti" a jsou vyloučeny ze smluv o úrovni služeb a z omezené záruky. Předběžné verze AKS jsou částečně pokryty zákaznickou podporou podle možností. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:
Important
Opensourcový software je zmíněn v dokumentaci a ukázkách AKS. Software, které nasadíte, je vyloučeno z dohod o úrovni služeb AKS, omezené záruky a podpory Azure. Při používání open-source technologií spolu s AKS konzultujte dostupné možnosti podpory od příslušných komunit a správců projektů, abyste vytvořili plán.
Microsoft přebírá odpovědnost za vytváření balíčků s otevřeným zdrojovým kódem, které nasazujeme na AKS. Tato odpovědnost zahrnuje plnou správu procesu sestavení, skenování, podepisování, validace a hotfixů, spolu s kontrolou nad binárními soubory v kontejnerových obrazech. Další informace najdete v tématu Řízení zranitelností pro AKS a Podpora pro AKS a rozsah pokrytí.
Předpoklady
- Cluster AKS s alespoň jedním fondem uzlů s podporou GPU.
-
Azure CLI verze 2.72.0 nebo novější. Spuštěním příkazu
az --versionzkontrolujte svou verzi. - Rozšíření
k8s-extensionAzure CLI. Spusťteaz extension add --name k8s-extension, aby se nainstaloval. -
Helm verze 3.x nebo novější Spuštěním příkazu
helm versionzkontrolujte svou verzi. - Azure Monitor, pokud nepoužíváte vlastní nastavení monitorování.
- Azure Managed Grafana, pokud nepoužíváte vlastní instanci Grafany.
Krok 1: Povolení profilace GPU prostřednictvím rozšíření Inspektor Gadget
Inspektor Gadget je opensourcová architektura pozorovatelnosti založená na eBPF pro Kubernetes. Pro profilování GPU sleduje volání pro alokaci paměti v CUDA (Compute Unified Device Architecture) bez změn kódu, sidecarů nebo restartů podů.
Povolení profilace GPU v clusteru AKS:
Note
Tento příkaz předpokládá, že jste povolili Azure Monitor v clusteru AKS. Pokud používáte vlastní nastavení Prometheus, odeberte --configuration-settings azureMonitor.enabled=true. Další informace najdete v nejčastějších dotazech k profilaci GPU.
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
Ověřte, že jsou pody Inspektor Gadget spuštěné:
kubectl get pods -n gadget -l k8s-app=gadget
Tip
Profilace paměti GPU zaznamenává události přidělení paměti při jejich výskytu. Pokud vaše úloha alokuje paměť GPU dříve, než povolíte profilování, profilovací nástroj tyto události nezachytí. U úloh, jako je vLLM, které při spuštění předem přidělují paměť GPU, povolte profilaci před nasazením úlohy nebo restartujte úlohu, aby se zachytily počáteční cesty přidělení paměti.
Krok 2: Povolení vizualizace profilu pomocí Pyroscopeu
Note
Pokud již ve clusteru máte stávající sadu Grafana a Pyroscope, tento krok přeskočte.
Pyroscope je opensourcový projekt, který vizualizuje a ukládá profily výkonu pro optimalizaci paměti a řešení potíží.
Nasaďte do clusteru jednu instanci Pyroscope :
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
Ověřte, že je pod Pyroscope spuštěný:
kubectl get pods -n gadget pyroscope-0
Note
Informace o nasazení s vysokou dostupností najdete v dokumentaci k mikroslužbám Pyroscope.
Note
Tento příkaz ukládá profily v místním systému souborů, takže pokud se pod znovu vytvoří, dojde ke ztrátě dat profilace. Pokud chcete zachovat profily napříč restartováními podů, přečtěte si nejčastější dotazy k profilaci GPU.
Krok 3: Připojení Pyroskopu k Azure Managed Grafana
Note
Pokud používáte vlastní instanci Grafana, přečtěte si nejčastější dotazy k profilaci GPU.
Tip
Pokud chcete zobrazit profily úloh přímo v uživatelském rozhraní Pyroscope, spusťte kubectl port-forward -n gadget pyroscope-0 4040:4040příkaz .
Připojte Pyroscope k Azure Managed Grafana prostřednictvím Azure Private Link.
Nastavte proměnné prostředí Cluster a Grafana:
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
Pokud nemáte instanci Azure Managed Grafana, spusťte az grafana create --name "$GRAFANA_NAME" --resource-group "$RESOURCE_GROUP" --location "$LOCATION" --output nonepříkaz .
Nastavte proměnné prostředí privátního koncového bodu:
export PYROSCOPE_PLS="pyroscope-pls"
export PYROSCOPE_MPE="pyroscope-mpe"
export PYROSCOPE_PORT="4040"
Vytvořte privátní propojení:
Note
Vytvoření privátního propojení může trvat několik minut.
# 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."
Vytvořte zdroj dat Pyroscope v 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."
Ověřte, že zdroj dat má platnou adresu URL:
az grafana data-source show \
--name "$GRAFANA_NAME" \
--data-source local-pyroscope
Krok 4: Připojení Grafany k Azure Monitor spravované službě pro Prometheus
Note
Tyto kroky vycházejí z Connect Azure Monitor managed service for Prometheus to Grafana. Ujistěte se, že spravovaná identita služby Grafana má v pracovním prostoru Azure Monitor přiřazenou roli Monitoring Data Reader, zejména pokud se pracovní prostor nachází v jiné skupině prostředků nebo v jiném předplatném.
Nastavte proměnné prostředí pracovního prostoru Azure Monitoru:
export AMP_NAME="<your-azure-monitor-workspace-name>"
export AMP_RESOURCE_GROUP="<your-azure-monitor-workspace-resource-group>"
Tip
Spuštěním az resource list --resource-type Microsoft.Monitor/accounts --resource-group "$AMP_RESOURCE_GROUP" --output table zobrazíte seznam pracovních prostorů služby Azure Monitor v dané skupině prostředků. Chcete-li vyhledat v předplatném, vynechejte --resource-group.
Vytvořte zdroj dat Prometheus:
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\" }
}
}"
Ověřte zdroj dat:
az grafana data-source show \
--name "$GRAFANA_NAME" \
--data-source "$AMP_NAME"
Krok 5: Nastavení řídicích panelů v Grafana
Importujte řídicí panel monitorování GPU:
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)"
Získejte adresu URL řídicího panelu:
GRAFANA_URL=$(az grafana show \
--name "$GRAFANA_NAME" \
--resource-group "$RESOURCE_GROUP" \
--query properties.endpoint \
--output tsv)
echo "${GRAFANA_URL}/d/AdvancedGPUObservability"
Pokud chcete interpretovat data profilace, přečtěte si téma Analýza grafů plamenů profilace GPU.
Vyčistěte zdroje
Odstraňte sadu nástrojů pro monitorování GPU v clusteru:
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
Čtení grafů plamene
Informace o interpretaci výsledků profilování a identifikaci kritických míst využití paměti GPU naleznete v tématu Analýza plamenných grafů profilování GPU.
časté otázky
Informace o vlastních integracích Prometheus a Grafana a trvalém úložišti Pyroscope najdete v nejčastějších dotazech k profilaci GPU.