Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yapay zeka çıkarım hizmetleri gibi GPU tabanlı iş yükleri yoğun bellek kullanımlı olabilir ve GPU etkinliğine görünürlük olmadan iyileştirmesi zor olabilir. Bellek yetersiz (OOM) hataları, beklenmeyen gecikme süresi artışları veya artan GPU bellek baskısı görebilirsiniz, ancak geleneksel Kubernetes ölçümleri kodun belleği nereye ayırdığı göstermez. GPU profili oluşturma, GPU bellek kullanımından sorumlu işlevleri belirlemenize yardımcı olur.
Bu makalede eBPF tabanlı GPU gözlemlenebilirlik aracısını dağıtma, profilleri Pyroscope'ta depolama ve Grafana'da GPU bellek ayırmalarını görselleştirme işlemleri gösterilmektedir.
Important
AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "mevcut olduğu şekilde" sağlanmakta olup, hizmet seviyesi anlaşmalarına ve sınırlı garantilere dahil edilmemektedir. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:
Important
AKS dokümantasyonu ve örneklerinde açık kaynaklı yazılımdan bahsedilmektedir. Dağıttığınız yazılım, AKS hizmet düzeyi anlaşmalarından, sınırlı garanti ve Azure desteğinden hariç tutulur. AKS ile birlikte açık kaynak teknolojisini kullanırken, bir plan geliştirmek için ilgili topluluklar ve proje sorumlularından mevcut olan destek seçeneklerine danışın.
Microsoft, AKS üzerinde dağıttığımız açık kaynak paketlerinin oluşturulmasından sorumluluk alır. Bu sorumluluk, yapı, tarama, imzalama, doğrulama ve hızlı düzeltme sürecinin tam sahipliğini içermenin yanı sıra, konteyner görüntülerindeki ikili dosyaların kontrolünü de kapsar. Daha fazla bilgi için AKS için güvenlik açığı yönetimi ve AKS destek kapsamı başlıklarına bakın.
Prerequisites
- En az bir GPU etkin düğüm havuzuna sahip bir AKS kümesi.
-
Azure CLI sürüm 2.72.0 veya üzeri. Sürümünüzü kontrol etmek için
az --versionkomutunu çalıştırın. -
k8s-extensionAzure CLI uzantısı. Yüklemek için komutunu çalıştırınaz extension add --name k8s-extension. -
Helm sürüm 3.x veya üzeri. Sürümünüzü kontrol etmek için
helm versionkomutunu çalıştırın. - Azure İzleyici, kendi izleme yapılandırmanızı kullanmıyorsanız.
- Azure Managed Grafana, kendi Grafana örneğinizi kullanmıyorsanız hariç.
1. Adım: Inspektor Aracı uzantısı aracılığıyla GPU profili oluşturmayı etkinleştirme
Inspektor Gadget , Kubernetes için açık kaynak eBPF tabanlı bir gözlemlenebilirlik çerçevesidir. GPU profillemesi için, kod değişiklikleri, sidecar’lar veya pod yeniden başlatmaları olmadan Compute Unified Device Architecture (CUDA) bellek ayırma çağrılarını izler.
AKS kümenizde GPU profili oluşturmayı etkinleştirin:
Uyarı
Bu komut, AKS kümenizde Azure İzleyici etkinleştirdiğiniz varsayılır. Kendi Prometheus kurulumunuzu kullanıyorsanız kaldırın --configuration-settings azureMonitor.enabled=true. Daha fazla bilgi için bkz. GPU profili oluşturma hakkında SSS.
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
Inspektor Gadget podlarının çalıştığını doğrulayın:
kubectl get pods -n gadget -l k8s-app=gadget
Tavsiye
GPU bellek profillemesi, bellek ayırma olaylarını meydana geldikçe yakalar. Profil oluşturmayı etkinleştirmeden önce iş yükünüz GPU belleği ayırırsa, profil oluşturucu bu olayları yakalamaz. Başlangıç sırasında GPU belleğini önceden ayıran vLLM gibi iş yükleri için, iş yükünü dağıtmadan önce profil oluşturmayı etkinleştirin veya ilk bellek ayırma yollarını yakalamak için iş yükünü yeniden başlatın.
2. Adım: Pyroscope ile profil görselleştirmeyi etkinleştirme
Uyarı
Kümenizde mevcut bir Grafana ve Pyroscope yığını varsa bu adımı atlayın.
Piroskop , bellek iyileştirme ve sorun giderme için performans profillerini görselleştiren ve depolayan açık kaynak bir projedir.
Kümenize tek bir Pyroscope örneği dağıtın:
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
Pyroscope podunun çalıştığını doğrulayın:
kubectl get pods -n gadget pyroscope-0
Uyarı
Yüksek oranda kullanılabilir bir dağıtım için Pyroscope mikro hizmetleri belgelerine bakın.
Uyarı
Bu komut profilleri yerel dosya sisteminde depolar, bu nedenle pod yeniden oluşturulursa profil oluşturma verileri kaybolur. Profilleri pod yeniden başlatmaları arasında korumak için GPU profilleme SSS bölümüne bakın.
3. Adım: Pyroscope'u Azure Managed Grafana bağlama
Uyarı
Kendi Grafana örneğinizi kullanıyorsanız, GPU profil oluşturma SSS'sine bakın.
Tavsiye
İş yükü profillerini doğrudan Pyroscope kullanıcı arabiriminde görüntülemek için komutunu çalıştırın kubectl port-forward -n gadget pyroscope-0 4040:4040.
Pyroscope'u Azure Özel Bağlantı aracılığıyla Azure Managed Grafana bağlayın.
Kümeyi ve Grafana ortam değişkenlerini ayarlayın:
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)
Tavsiye
Azure Managed Grafana örneğiniz yoksa az grafana create --name "$GRAFANA_NAME" --resource-group "$RESOURCE_GROUP" --location "$LOCATION" --output none komutunu çalıştırın.
Özel uç nokta ortam değişkenlerini ayarlayın:
export PYROSCOPE_PLS="pyroscope-pls"
export PYROSCOPE_MPE="pyroscope-mpe"
export PYROSCOPE_PORT="4040"
Özel bağlantıyı oluşturun:
Uyarı
Özel bağlantının oluşturulması birkaç dakika sürebilir.
# 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."
Pyroscope veri kaynağını Azure Managed Grafana oluşturun:
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."
Veri kaynağının geçerli bir URL'si olduğunu doğrulayın:
az grafana data-source show \
--name "$GRAFANA_NAME" \
--data-source local-pyroscope
4. Adım: Grafana'yı Prometheus için yönetilen Azure İzleyici hizmete bağlama
Uyarı
Bu adımlar, Prometheus Azure İzleyici yönetilen hizmetini Grafana'ya bağlamayı temel alır. Özellikle çalışma alanı farklı bir kaynak grubunda veya abonelikteyse, Grafana'nın yönetilen kimliğine Azure İzleyici çalışma alanında Monitoring Data Reader rolünün atandığından emin olun.
Azure İzleyici çalışma alanı ortam değişkenlerini ayarlayın:
export AMP_NAME="<your-azure-monitor-workspace-name>"
export AMP_RESOURCE_GROUP="<your-azure-monitor-workspace-resource-group>"
Tavsiye
Kaynak grubundaki Azure İzleyici çalışma alanlarını listelemek için komutunu çalıştırınaz resource list --resource-type Microsoft.Monitor/accounts --resource-group "$AMP_RESOURCE_GROUP" --output table. Abonelikte arama yapmak için --resource-group öğesini atlayın.
Prometheus veri kaynağını oluşturun:
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\" }
}
}"
Veri kaynağını doğrulayın:
az grafana data-source show \
--name "$GRAFANA_NAME" \
--data-source "$AMP_NAME"
5. Adım: Grafana'da panoları ayarlama
GPU gözlemlenebilirlik panosunu içeri aktarın:
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)"
Pano URL'sini alın:
GRAFANA_URL=$(az grafana show \
--name "$GRAFANA_NAME" \
--resource-group "$RESOURCE_GROUP" \
--query properties.endpoint \
--output tsv)
echo "${GRAFANA_URL}/d/AdvancedGPUObservability"
Profil oluşturma verilerini yorumlamak için bkz. GPU profil oluşturma alev graflarını analiz etme.
Kaynakları temizle
Küme içi GPU gözlemlenebilirlik yığınını kaldırın:
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
Alev grafiklerini okuma
Profil oluşturma sonuçlarını yorumlamak ve GPU bellek etkin noktalarını tanımlamak için bkz. GPU profil oluşturma alev graflarını analiz etme.
FAQ
Özel Prometheus ve Grafana tümleştirmeleri ile kalıcı Pyroscope depolaması için GPU profil oluşturma SSS'sine bakın.