Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Op GPU gebaseerde workloads, zoals AI-deductieservices, kunnen geheugenintensief zijn en moeilijk te optimaliseren zonder inzicht in GPU-activiteit. U kunt out-of-memoryfouten (OOM), onverwachte latentiepieken of toenemende druk op het GPU-geheugen zien, maar traditionele Kubernetes-metrics laten niet zien waar de code geheugen toewijst. GPU-profilering helpt u bij het identificeren van de functies die verantwoordelijk zijn voor gpu-geheugengebruik.
In dit artikel leest u hoe u een op eBPF gebaseerde GPU-waarneembaarheidsagent implementeert, profielen opslaat in Pyroscope en GPU-geheugentoewijzingen in Grafana visualiseert.
Important
AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Zodoende zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:
Important
Opensource-software wordt vermeld in AKS-documentatie en -voorbeelden. Software die u implementeert, is uitgesloten van AKS-serviceovereenkomsten, beperkte garantie en Azure-ondersteuning. Wanneer u opensource-technologie naast AKS gebruikt, raadpleegt u de beschikbare ondersteuningsopties van de respectieve community's en projectonderhouders om een plan te ontwikkelen.
Microsoft neemt de verantwoordelijkheid voor het bouwen van de opensource-pakketten die we implementeren op AKS. Deze verantwoordelijkheid omvat het volledige eigendom van het bouw-, scan-, onderteken-, validatie- en hotfixproces, samen met controle over de binaire bestanden in container images. Zie Beveiligingsbeheer voor AKS - en AKS-ondersteuningsdekking voor meer informatie.
Prerequisites
- Een AKS-cluster met ten minste één gpu-knooppuntgroep.
-
Azure CLI versie 2.72.0 of hoger. Voer deze opdracht uit
az --versionom uw versie te controleren. - De
k8s-extensionAzure CLI-extensie. Voeraz extension add --name k8s-extensionuit om het te installeren. -
Helm-versie 3.x of hoger. Voer deze opdracht uit
helm versionom uw versie te controleren. - Azure Monitor, tenzij u uw eigen bewakingsinstellingen gebruikt.
- Azure Managed Grafana, tenzij u uw eigen Grafana-exemplaar gebruikt.
Stap 1: GPU-profilering inschakelen via de Extensie Inspektor Gadget
Inspektor Gadget is een opensource-framework voor op eBPF gebaseerde waarneembaarheid voor Kubernetes. Voor GPU-profilering worden CUDA-geheugentoewijzingsaanroepen (Compute Unified Device Architecture) aangetroffen zonder codewijzigingen, sidecars of pods opnieuw op te starten.
GPU-profilering inschakelen op uw AKS-cluster:
Note
Bij deze opdracht wordt ervan uitgegaan dat u Azure Monitor hebt ingeschakeld in uw AKS-cluster. Als u uw eigen Prometheus-installatie gebruikt, verwijdert u --configuration-settings azureMonitor.enabled=true. Zie de veelgestelde vragen over GPU-profilering voor meer informatie.
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
Controleer of de Inspektor Gadget-pods draaien:
kubectl get pods -n gadget -l k8s-app=gadget
Tip
Gpu-geheugenprofilering legt gebeurtenissen voor geheugentoewijzing vast zodra deze zich voordoen. Als uw workload GPU-geheugen toewijst voordat u profilering inschakelt, legt de profiler deze gebeurtenissen niet vast. Voor workloads zoals vLLM die gpu-geheugen vooraf toewijzen tijdens het opstarten, schakelt u profilering in voordat u de workload implementeert of start u de workload opnieuw op om de initiële geheugentoewijzingspaden vast te leggen.
Stap 2: Profielvisualisatie inschakelen met Pyroscope
Note
Als u een bestaande Grafana- en Pyroscope-stack in uw cluster hebt, kunt u deze stap overslaan.
Pyroscope is een opensource-project waarmee prestatieprofielen voor geheugenoptimalisatie en probleemoplossing worden gevisualiseerd en opgeslagen.
Implementeer één Pyroscope-exemplaar in uw cluster:
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
Controleer of de Pyroscope-pod actief is:
kubectl get pods -n gadget pyroscope-0
Note
Zie de documentatie over Pyroscope-microservices voor een maximaal beschikbare implementatie.
Note
Met deze opdracht worden profielen opgeslagen in het lokale bestandssysteem, zodat profileringsgegevens verloren gaan als de pod opnieuw wordt gemaakt. Zie de veelgestelde vragen over GPU-profilering als u profielen tijdens het opnieuw opstarten van pods wilt behouden.
Stap 3: Pyroscope verbinden met Azure Managed Grafana
Note
Als u uw eigen Grafana-exemplaar gebruikt, raadpleegt u de veelgestelde vragen over GPU-profilering.
Tip
Als u werkbelastingprofielen rechtstreeks in de Pyroscope-gebruikersinterface wilt weergeven, voert u uit kubectl port-forward -n gadget pyroscope-0 4040:4040.
Verbind Pyroscope met Azure Managed Grafana via Azure Private Link.
Stel de omgevingsvariabelen van het cluster en Grafana in:
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
Als u geen Azure Managed Grafana exemplaar hebt, voert u het volgende uitaz grafana create --name "$GRAFANA_NAME" --resource-group "$RESOURCE_GROUP" --location "$LOCATION" --output none.
Stel de omgevingsvariabelen voor privé-eindpunten in:
export PYROSCOPE_PLS="pyroscope-pls"
export PYROSCOPE_MPE="pyroscope-mpe"
export PYROSCOPE_PORT="4040"
Maak de privékoppeling:
Note
Het maken van de privékoppeling kan enkele minuten duren.
# 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."
Maak de Pyroscope-gegevensbron in 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."
Controleer of de gegevensbron een geldige URL heeft:
az grafana data-source show \
--name "$GRAFANA_NAME" \
--data-source local-pyroscope
Stap 4: Grafana verbinden met Azure Monitor beheerde service voor Prometheus
Note
Deze stappen zijn gebaseerd op Connect Azure Monitor managed service voor Prometheus naar Grafana. Zorg ervoor dat de beheerde identiteit van Grafana de rol Bewakingsgegevenslezer heeft in de Azure Monitor werkruimte, met name als de werkruimte zich in een andere resourcegroep of een ander abonnement bevindt.
Stel de omgevingsvariabelen voor Azure Monitor werkruimte in:
export AMP_NAME="<your-azure-monitor-workspace-name>"
export AMP_RESOURCE_GROUP="<your-azure-monitor-workspace-resource-group>"
Tip
Voer az resource list --resource-type Microsoft.Monitor/accounts --resource-group "$AMP_RESOURCE_GROUP" --output table uit om Azure Monitor-werkruimtes in de resourcegroep weer te geven. Als u het abonnement wilt doorzoeken, laat u --resource-groupweg.
Maak de Prometheus-gegevensbron:
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\" }
}
}"
Controleer de gegevensbron:
az grafana data-source show \
--name "$GRAFANA_NAME" \
--data-source "$AMP_NAME"
Stap 5: Dashboards instellen in Grafana
Importeer het GPU-waarneembaarheidsdashboard:
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)"
De URL van het dashboard ophalen:
GRAFANA_URL=$(az grafana show \
--name "$GRAFANA_NAME" \
--resource-group "$RESOURCE_GROUP" \
--query properties.endpoint \
--output tsv)
echo "${GRAFANA_URL}/d/AdvancedGPUObservability"
Zie Gpu-profileringsvlamgrafieken analyseren om de profileringsgegevens te interpreteren.
De hulpbronnen opschonen
Verwijder de in-cluster GPU-waarneembaarheidsstack:
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
Vlamdiagrammen lezen
Zie GPU-profiling-vlamgrafieken analyseren om profileringsresultaten te interpreteren en GPU-geheugenhotspots te identificeren.
FAQ
Zie de veelgestelde vragen over GPU-profilering voor aangepaste Prometheus- en Grafana-integraties en permanente Pyroscope-opslag.