W lutym 2022 r. dodano Amazon Web Services obsługa wskaźników GPU NVIDIA w Amazon CloudWatch, umożliwiając przesyłanie metryk z pliku Agent Amazon Cloud Watch do Amazon Cloud Watch i monitoruj swój kod pod kątem optymalnego wykorzystania procesora GPU. Od tego czasu ta funkcja została zintegrowana z wieloma zarządzanymi przez nas obrazami Amazon Machine (AMI), takimi jak AMI głębokiego uczenia oraz Klaster równoległy AWS AMI. Aby uzyskać metryki wykorzystania procesora GPU na poziomie instancji, możesz użyć programu Packer lub Amazon ImageBuilder, aby załadować własny, niestandardowy AMI i używać go w różnych ofertach usług zarządzanych, takich jak Partia AWS, Usługa Amazon Elastic Container Service (Amazon ECS) lub Elastyczna usługa Amazon Kubernetes (Amazon EKS). Jednak w przypadku wielu ofert usług i obciążeń opartych na kontenerach idealnym rozwiązaniem jest przechwytywanie metryk wykorzystania na poziomie kontenera, pod lub przestrzeni nazw.
W tym poście szczegółowo opisano, jak skonfigurować metryki GPU oparte na kontenerach i przedstawiono przykład zbierania tych metryk z zasobników EKS.
Omówienie rozwiązania
Aby zademonstrować metryki GPU oparte na kontenerach, tworzymy klaster EKS z g5.2xlarge
instancje; będzie to jednak działać z każdą obsługiwaną rodziną instancji przyspieszanych przez firmę NVIDIA.
Wdrażamy operatora GPU NVIDIA, aby umożliwić wykorzystanie zasobów GPU i Eksporter NVIDIA DCGM aby umożliwić zbieranie metryk GPU. Następnie zbadamy dwie architektury. Pierwsza łączy metryki z narzędzia NVIDIA DCGM Exporter z usługą CloudWatch za pośrednictwem agenta CloudWatch, jak pokazano na poniższym diagramie.
Druga architektura (patrz poniższy diagram) łączy metryki z narzędzia DCGM Exporter z Prometheus, wówczas używamy a grafana pulpit nawigacyjny do wizualizacji tych wskaźników.
Wymagania wstępne
Aby uprościć odtworzenie całego stosu z tego posta, używamy kontenera, który ma już zainstalowane wszystkie wymagane narzędzia (aws cli, eksctl, helm itp.). Aby sklonować projekt kontenera z GitHuba, będziesz potrzebować odrzutowiec. Aby zbudować i uruchomić kontener, będziesz potrzebować Doker. Aby wdrożyć architekturę, będziesz potrzebować Poświadczenia AWS. Aby umożliwić dostęp do usług Kubernetes za pomocą przekierowania portów, będziesz także potrzebować kubectl.
Te wymagania wstępne można zainstalować na komputerze lokalnym, Instancja EC2 w ŁADNE DCVlub Chmura AWS9. W tym poście użyjemy a c5.2xlarge
Instancja Cloud9 z plikiem 40GB
wielkość pamięci lokalnej. Korzystając z Cloud9, wyłącz tymczasowe dane uwierzytelniające zarządzane przez AWS, odwiedzając stronę Cloud9->Preferences->AWS Settings
jak pokazano na zrzucie ekranu poniżej.
Zbuduj i uruchom kontener aws-do-eks
Otwórz powłokę terminala w preferowanym środowisku i uruchom następujące polecenia:
git clone https://github.com/aws-samples/aws-do-eks
cd aws-do-eks
./build.sh
./run.sh
./exec.sh
Wynik jest następujący:
Masz teraz powłokę w środowisku kontenerowym, która zawiera wszystkie narzędzia potrzebne do wykonania poniższych zadań. Będziemy nazywać to „powłoką aws-do-eks”. Będziesz uruchamiał polecenia z poniższych sekcji tej powłoki, chyba że wyraźnie zalecono inaczej.
Utwórz klaster EKS z grupą węzłów
Ta grupa zawiera wybraną przez Ciebie rodzinę instancji GPU; w tym przykładzie używamy g5.2xlarge
typ instancji.
Połączenia projekt aws-do-eks zawiera zbiór konfiguracji klastrów. Możesz ustawić żądaną konfigurację klastra za pomocą jednej zmiany konfiguracji.
- W powłoce kontenera uruchom
./env-config.sh
a następnie ustawić CONF=conf/eksctl/yaml/eks-gpu-g5.yaml
- Aby zweryfikować konfigurację klastra, uruchom
./eks-config.sh
Powinieneś zobaczyć następujący manifest klastra:
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata: name: do-eks-yaml-g5 version: "1.25" region: us-east-1
availabilityZones: - us-east-1a - us-east-1b - us-east-1c - us-east-1d
managedNodeGroups: - name: sys instanceType: m5.xlarge desiredCapacity: 1 iam: withAddonPolicies: autoScaler: true cloudWatch: true - name: g5 instanceType: g5.2xlarge instancePrefix: g5-2xl privateNetworking: true efaEnabled: false minSize: 0 desiredCapacity: 1 maxSize: 10 volumeSize: 80 iam: withAddonPolicies: cloudWatch: true
iam: withOIDC: true
- Aby utworzyć klaster, uruchom następujące polecenie w kontenerze
Dane wyjściowe są następujące:
root@e5ecb162812f:/eks# ./eks-create.sh /eks/impl/eksctl/yaml /eks ./eks-create.sh Mon May 22 20:50:59 UTC 2023
Creating cluster using /eks/conf/eksctl/yaml/eks-gpu-g5.yaml ... eksctl create cluster -f /eks/conf/eksctl/yaml/eks-gpu-g5.yaml 2023-05-22 20:50:59 [ℹ] eksctl version 0.133.0
2023-05-22 20:50:59 [ℹ] using region us-east-1
2023-05-22 20:50:59 [ℹ] subnets for us-east-1a - public:192.168.0.0/19 private:192.168.128.0/19
2023-05-22 20:50:59 [ℹ] subnets for us-east-1b - public:192.168.32.0/19 private:192.168.160.0/19
2023-05-22 20:50:59 [ℹ] subnets for us-east-1c - public:192.168.64.0/19 private:192.168.192.0/19
2023-05-22 20:50:59 [ℹ] subnets for us-east-1d - public:192.168.96.0/19 private:192.168.224.0/19
2023-05-22 20:50:59 [ℹ] nodegroup "sys" will use "" [AmazonLinux2/1.25]
2023-05-22 20:50:59 [ℹ] nodegroup "g5" will use "" [AmazonLinux2/1.25]
2023-05-22 20:50:59 [ℹ] using Kubernetes version 1.25
2023-05-22 20:50:59 [ℹ] creating EKS cluster "do-eks-yaml-g5" in "us-east-1" region with managed nodes
2023-05-22 20:50:59 [ℹ] 2 nodegroups (g5, sys) were included (based on the include/exclude rules)
2023-05-22 20:50:59 [ℹ] will create a CloudFormation stack for cluster itself and 0 nodegroup stack(s)
2023-05-22 20:50:59 [ℹ] will create a CloudFormation stack for cluster itself and 2 managed nodegroup stack(s)
2023-05-22 20:50:59 [ℹ] if you encounter any issues, check CloudFormation console or try 'eksctl utils describe-stacks --region=us-east-1 --cluster=do-eks-yaml-g5'
2023-05-22 20:50:59 [ℹ] Kubernetes API endpoint access will use default of {publicAccess=true, privateAccess=false} for cluster "do-eks-yaml-g5" in "us-east-1"
2023-05-22 20:50:59 [ℹ] CloudWatch logging will not be enabled for cluster "do-eks-yaml-g5" in "us-east-1"
2023-05-22 20:50:59 [ℹ] you can enable it with 'eksctl utils update-cluster-logging --enable-types={SPECIFY-YOUR-LOG-TYPES-HERE (e.g. all)} --region=us-east-1 --cluster=do-eks-yaml-g5'
2023-05-22 20:50:59 [ℹ] 2 sequential tasks: { create cluster control plane "do-eks-yaml-g5", 2 sequential sub-tasks: { 4 sequential sub-tasks: { wait for control plane to become ready, associate IAM OIDC provider, 2 sequential sub-tasks: { create IAM role for serviceaccount "kube-system/aws-node", create serviceaccount "kube-system/aws-node", }, restart daemonset "kube-system/aws-node", }, 2 parallel sub-tasks: { create managed nodegroup "sys", create managed nodegroup "g5", }, } }
2023-05-22 20:50:59 [ℹ] building cluster stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 20:51:00 [ℹ] deploying stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 20:51:30 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 20:52:00 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 20:53:01 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 20:54:01 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 20:55:01 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 20:56:02 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 20:57:02 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 20:58:02 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 20:59:02 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 21:00:03 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 21:01:03 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 21:02:03 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 21:03:04 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-cluster"
2023-05-22 21:05:07 [ℹ] building iamserviceaccount stack "eksctl-do-eks-yaml-g5-addon-iamserviceaccount-kube-system-aws-node"
2023-05-22 21:05:10 [ℹ] deploying stack "eksctl-do-eks-yaml-g5-addon-iamserviceaccount-kube-system-aws-node"
2023-05-22 21:05:10 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-addon-iamserviceaccount-kube-system-aws-node"
2023-05-22 21:05:40 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-addon-iamserviceaccount-kube-system-aws-node"
2023-05-22 21:05:40 [ℹ] serviceaccount "kube-system/aws-node" already exists
2023-05-22 21:05:41 [ℹ] updated serviceaccount "kube-system/aws-node"
2023-05-22 21:05:41 [ℹ] daemonset "kube-system/aws-node" restarted
2023-05-22 21:05:41 [ℹ] building managed nodegroup stack "eksctl-do-eks-yaml-g5-nodegroup-sys"
2023-05-22 21:05:41 [ℹ] building managed nodegroup stack "eksctl-do-eks-yaml-g5-nodegroup-g5"
2023-05-22 21:05:42 [ℹ] deploying stack "eksctl-do-eks-yaml-g5-nodegroup-sys"
2023-05-22 21:05:42 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-nodegroup-sys"
2023-05-22 21:05:42 [ℹ] deploying stack "eksctl-do-eks-yaml-g5-nodegroup-g5"
2023-05-22 21:05:42 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-nodegroup-g5"
2023-05-22 21:06:12 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-nodegroup-sys"
2023-05-22 21:06:12 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-nodegroup-g5"
2023-05-22 21:06:55 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-nodegroup-sys"
2023-05-22 21:07:11 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-nodegroup-g5"
2023-05-22 21:08:29 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-nodegroup-g5"
2023-05-22 21:08:45 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-nodegroup-sys"
2023-05-22 21:09:52 [ℹ] waiting for CloudFormation stack "eksctl-do-eks-yaml-g5-nodegroup-g5"
2023-05-22 21:09:53 [ℹ] waiting for the control plane to become ready
2023-05-22 21:09:53 [✔] saved kubeconfig as "/root/.kube/config"
2023-05-22 21:09:53 [ℹ] 1 task: { install Nvidia device plugin }
W0522 21:09:54.155837 1668 warnings.go:70] spec.template.metadata.annotations[scheduler.alpha.kubernetes.io/critical-pod]: non-functional in v1.16+; use the "priorityClassName" field instead
2023-05-22 21:09:54 [ℹ] created "kube-system:DaemonSet.apps/nvidia-device-plugin-daemonset"
2023-05-22 21:09:54 [ℹ] as you are using the EKS-Optimized Accelerated AMI with a GPU-enabled instance type, the Nvidia Kubernetes device plugin was automatically installed. to skip installing it, use --install-nvidia-plugin=false.
2023-05-22 21:09:54 [✔] all EKS cluster resources for "do-eks-yaml-g5" have been created
2023-05-22 21:09:54 [ℹ] nodegroup "sys" has 1 node(s)
2023-05-22 21:09:54 [ℹ] node "ip-192-168-18-137.ec2.internal" is ready
2023-05-22 21:09:54 [ℹ] waiting for at least 1 node(s) to become ready in "sys"
2023-05-22 21:09:54 [ℹ] nodegroup "sys" has 1 node(s)
2023-05-22 21:09:54 [ℹ] node "ip-192-168-18-137.ec2.internal" is ready
2023-05-22 21:09:55 [ℹ] kubectl command should work with "/root/.kube/config", try 'kubectl get nodes'
2023-05-22 21:09:55 [✔] EKS cluster "do-eks-yaml-g5" in "us-east-1" region is ready Mon May 22 21:09:55 UTC 2023
Done creating cluster using /eks/conf/eksctl/yaml/eks-gpu-g5.yaml /eks
- Aby sprawdzić, czy klaster został pomyślnie utworzony, uruchom następujące polecenie
kubectl get nodes -L node.kubernetes.io/instance-type
Dane wyjściowe są podobne do następujących:
NAME STATUS ROLES AGE VERSION INSTANCE_TYPE
ip-192-168-18-137.ec2.internal Ready <none> 47m v1.25.9-eks-0a21954 m5.xlarge
ip-192-168-214-241.ec2.internal Ready <none> 46m v1.25.9-eks-0a21954 g5.2xlarge
W tym przykładzie mamy w naszym klastrze jedną instancję m5.xlarge i jedną instancję g5.2xlarge; dlatego widzimy dwa węzły wymienione w poprzednim wyniku.
Podczas procesu tworzenia klastra zostanie zainstalowana wtyczka urządzenia NVIDIA. Będziesz musiał go usunąć po utworzeniu klastra, ponieważ będziemy używać pliku Operator karty graficznej NVIDIA zamiast.
- Usuń wtyczkę za pomocą następującego polecenia
kubectl -n kube-system delete daemonset nvidia-device-plugin-daemonset
Otrzymujemy następujący wynik:
daemonset.apps "nvidia-device-plugin-daemonset" deleted
Zainstaluj repozytorium NVIDIA Helm
Zainstaluj repozytorium NVIDIA Helm za pomocą następującego polecenia:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
Wdróż eksportera DCGM za pomocą operatora GPU NVIDIA
Aby wdrożyć eksporter DCGM, wykonaj następujące kroki:
- Przygotuj konfigurację metryk procesora GPU eksportera DCGM
curl https://raw.githubusercontent.com/NVIDIA/dcgm-exporter/main/etc/dcp-metrics-included.csv > dcgm-metrics.csv
Masz możliwość edycji dcgm-metrics.csv
plik. W razie potrzeby możesz dodać lub usunąć dowolne metryki.
- Utwórz przestrzeń nazw operatora GPU i eksporter DCGM ConfigMap
kubectl create namespace gpu-operator && /
kubectl create configmap metrics-config -n gpu-operator --from-file=dcgm-metrics.csv
Dane wyjściowe są następujące:
namespace/gpu-operator created
configmap/metrics-config created
- Zastosuj operator GPU do klastra EKS
helm install --wait --generate-name -n gpu-operator --create-namespace nvidia/gpu-operator --set dcgmExporter.config.name=metrics-config --set dcgmExporter.env[0].name=DCGM_EXPORTER_COLLECTORS --set dcgmExporter.env[0].value=/etc/dcgm-exporter/dcgm-metrics.csv --set toolkit.enabled=false
Dane wyjściowe są następujące:
NAME: gpu-operator-1684795140
LAST DEPLOYED: Day Month Date HH:mm:ss YYYY
NAMESPACE: gpu-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
- Upewnij się, że moduł eksportera DCGM jest uruchomiony
kubectl -n gpu-operator get pods | grep dcgm
Dane wyjściowe są następujące:
nvidia-dcgm-exporter-lkmfr 1/1 Running 0 1m
Jeśli sprawdzisz logi, powinieneś zobaczyć “Starting webserver”
wiadomość:
kubectl -n gpu-operator logs -f $(kubectl -n gpu-operator get pods | grep dcgm | cut -d ' ' -f 1)
Dane wyjściowe są następujące:
Defaulted container "nvidia-dcgm-exporter" out of: nvidia-dcgm-exporter, toolkit-validation (init)
time="2023-05-22T22:40:08Z" level=info msg="Starting dcgm-exporter"
time="2023-05-22T22:40:08Z" level=info msg="DCGM successfully initialized!"
time="2023-05-22T22:40:08Z" level=info msg="Collecting DCP Metrics"
time="2023-05-22T22:40:08Z" level=info msg="No configmap data specified, falling back to metric file /etc/dcgm-exporter/dcgm-metrics.csv"
time="2023-05-22T22:40:08Z" level=info msg="Initializing system entities of type: GPU"
time="2023-05-22T22:40:09Z" level=info msg="Initializing system entities of type: NvSwitch"
time="2023-05-22T22:40:09Z" level=info msg="Not collecting switch metrics: no switches to monitor"
time="2023-05-22T22:40:09Z" level=info msg="Initializing system entities of type: NvLink"
time="2023-05-22T22:40:09Z" level=info msg="Not collecting link metrics: no switches to monitor"
time="2023-05-22T22:40:09Z" level=info msg="Kubernetes metrics collection enabled!"
time="2023-05-22T22:40:09Z" level=info msg="Pipeline starting"
time="2023-05-22T22:40:09Z" level=info msg="Starting webserver"
Narzędzie NVIDIA DCGM Exporter udostępnia punkt końcowy metryk Prometheus, który może zostać pobrany przez agenta CloudWatch. Aby zobaczyć punkt końcowy, użyj następującego polecenia:
kubectl -n gpu-operator get services | grep dcgm
Otrzymujemy następujący wynik:
nvidia-dcgm-exporter ClusterIP 10.100.183.207 <none> 9400/TCP 10m
- Aby wygenerować pewne wykorzystanie procesora graficznego, wdrażamy moduł, na którym działa spalanie GPU dwójkowy
kubectl apply -f https://raw.githubusercontent.com/aws-samples/aws-do-eks/main/Container-Root/eks/deployment/gpu-metrics/gpu-burn-deployment.yaml
Dane wyjściowe są następujące:
deployment.apps/gpu-burn created
To wdrożenie wykorzystuje pojedynczy procesor graficzny do wytworzenia ciągłego wzorca wykorzystania 100% przez 20 sekund, a następnie wykorzystania 0% przez 20 sekund.
- Aby mieć pewność, że punkt końcowy działa, możesz uruchomić tymczasowy kontener, który używa curl do odczytania zawartości
http://nvidia-dcgm-exporter:9400/metrics
kubectl -n gpu-operator run -it --rm curl --restart='Never' --image=curlimages/curl --command -- curl http://nvidia-dcgm-exporter:9400/metrics
Otrzymujemy następujący wynik:
# HELP DCGM_FI_DEV_SM_CLOCK SM clock frequency (in MHz).
# TYPE DCGM_FI_DEV_SM_CLOCK gauge
DCGM_FI_DEV_SM_CLOCK{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 1455
# HELP DCGM_FI_DEV_MEM_CLOCK Memory clock frequency (in MHz).
# TYPE DCGM_FI_DEV_MEM_CLOCK gauge
DCGM_FI_DEV_MEM_CLOCK{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 6250
# HELP DCGM_FI_DEV_GPU_TEMP GPU temperature (in C).
# TYPE DCGM_FI_DEV_GPU_TEMP gauge
DCGM_FI_DEV_GPU_TEMP{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 65
# HELP DCGM_FI_DEV_POWER_USAGE Power draw (in W).
# TYPE DCGM_FI_DEV_POWER_USAGE gauge
DCGM_FI_DEV_POWER_USAGE{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 299.437000
# HELP DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION Total energy consumption since boot (in mJ).
# TYPE DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION counter
DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 15782796862
# HELP DCGM_FI_DEV_PCIE_REPLAY_COUNTER Total number of PCIe retries.
# TYPE DCGM_FI_DEV_PCIE_REPLAY_COUNTER counter
DCGM_FI_DEV_PCIE_REPLAY_COUNTER{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0
# HELP DCGM_FI_DEV_GPU_UTIL GPU utilization (in %).
# TYPE DCGM_FI_DEV_GPU_UTIL gauge
DCGM_FI_DEV_GPU_UTIL{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 100
# HELP DCGM_FI_DEV_MEM_COPY_UTIL Memory utilization (in %).
# TYPE DCGM_FI_DEV_MEM_COPY_UTIL gauge
DCGM_FI_DEV_MEM_COPY_UTIL{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 38
# HELP DCGM_FI_DEV_ENC_UTIL Encoder utilization (in %).
# TYPE DCGM_FI_DEV_ENC_UTIL gauge
DCGM_FI_DEV_ENC_UTIL{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0
# HELP DCGM_FI_DEV_DEC_UTIL Decoder utilization (in %).
# TYPE DCGM_FI_DEV_DEC_UTIL gauge
DCGM_FI_DEV_DEC_UTIL{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0
# HELP DCGM_FI_DEV_XID_ERRORS Value of the last XID error encountered.
# TYPE DCGM_FI_DEV_XID_ERRORS gauge
DCGM_FI_DEV_XID_ERRORS{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0
# HELP DCGM_FI_DEV_FB_FREE Framebuffer memory free (in MiB).
# TYPE DCGM_FI_DEV_FB_FREE gauge
DCGM_FI_DEV_FB_FREE{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 2230
# HELP DCGM_FI_DEV_FB_USED Framebuffer memory used (in MiB).
# TYPE DCGM_FI_DEV_FB_USED gauge
DCGM_FI_DEV_FB_USED{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 20501
# HELP DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTAL Total number of NVLink bandwidth counters for all lanes.
# TYPE DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTAL counter
DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTAL{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0
# HELP DCGM_FI_DEV_VGPU_LICENSE_STATUS vGPU License status
# TYPE DCGM_FI_DEV_VGPU_LICENSE_STATUS gauge
DCGM_FI_DEV_VGPU_LICENSE_STATUS{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0
# HELP DCGM_FI_DEV_UNCORRECTABLE_REMAPPED_ROWS Number of remapped rows for uncorrectable errors
# TYPE DCGM_FI_DEV_UNCORRECTABLE_REMAPPED_ROWS counter
DCGM_FI_DEV_UNCORRECTABLE_REMAPPED_ROWS{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0
# HELP DCGM_FI_DEV_CORRECTABLE_REMAPPED_ROWS Number of remapped rows for correctable errors
# TYPE DCGM_FI_DEV_CORRECTABLE_REMAPPED_ROWS counter
DCGM_FI_DEV_CORRECTABLE_REMAPPED_ROWS{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0
# HELP DCGM_FI_DEV_ROW_REMAP_FAILURE Whether remapping of rows has failed
# TYPE DCGM_FI_DEV_ROW_REMAP_FAILURE gauge
DCGM_FI_DEV_ROW_REMAP_FAILURE{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0
# HELP DCGM_FI_PROF_GR_ENGINE_ACTIVE Ratio of time the graphics engine is active (in %).
# TYPE DCGM_FI_PROF_GR_ENGINE_ACTIVE gauge
DCGM_FI_PROF_GR_ENGINE_ACTIVE{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0.808369
# HELP DCGM_FI_PROF_PIPE_TENSOR_ACTIVE Ratio of cycles the tensor (HMMA) pipe is active (in %).
# TYPE DCGM_FI_PROF_PIPE_TENSOR_ACTIVE gauge
DCGM_FI_PROF_PIPE_TENSOR_ACTIVE{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0.000000
# HELP DCGM_FI_PROF_DRAM_ACTIVE Ratio of cycles the device memory interface is active sending or receiving data (in %).
# TYPE DCGM_FI_PROF_DRAM_ACTIVE gauge
DCGM_FI_PROF_DRAM_ACTIVE{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 0.315787
# HELP DCGM_FI_PROF_PCIE_TX_BYTES The rate of data transmitted over the PCIe bus - including both protocol headers and data payloads - in bytes per second.
# TYPE DCGM_FI_PROF_PCIE_TX_BYTES gauge
DCGM_FI_PROF_PCIE_TX_BYTES{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 3985328
# HELP DCGM_FI_PROF_PCIE_RX_BYTES The rate of data received over the PCIe bus - including both protocol headers and data payloads - in bytes per second.
# TYPE DCGM_FI_PROF_PCIE_RX_BYTES gauge
DCGM_FI_PROF_PCIE_RX_BYTES{gpu="0",UUID="GPU-ff76466b-22fc-f7a9-abe2-ce3ac453b8b3",device="nvidia0",modelName="NVIDIA A10G",Hostname="nvidia-dcgm-exporter-48cwd",DCGM_FI_DRIVER_VERSION="470.182.03",container="main",namespace="kube-system",pod="gpu-burn-c68d8c774-ltg9s"} 21715174
pod "curl" deleted
Skonfiguruj i wdróż agenta CloudWatch
Aby skonfigurować i wdrożyć agenta CloudWatch, wykonaj następujące kroki:
- Pobierz plik YAML i edytuj go
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/k8s/1.3.15/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
Plik zawiera cwagent configmap
oraz prometheus configmap
. W tym poście edytujemy oba.
- Edytuj
prometheus-eks.yaml
filet
Otwórz prometheus-eks.yaml
plik w swoim ulubionym edytorze i zastąp plik cwagentconfig.json
dział o następującej treści:
apiVersion: v1
data: # cwagent json config cwagentconfig.json: | { "logs": { "metrics_collected": { "prometheus": { "prometheus_config_path": "/etc/prometheusconfig/prometheus.yaml", "emf_processor": { "metric_declaration": [ { "source_labels": ["Service"], "label_matcher": ".*dcgm.*", "dimensions": [["Service","Namespace","ClusterName","job","pod"]], "metric_selectors": [ "^DCGM_FI_DEV_GPU_UTIL$", "^DCGM_FI_DEV_DEC_UTIL$", "^DCGM_FI_DEV_ENC_UTIL$", "^DCGM_FI_DEV_MEM_CLOCK$", "^DCGM_FI_DEV_MEM_COPY_UTIL$", "^DCGM_FI_DEV_POWER_USAGE$", "^DCGM_FI_DEV_ROW_REMAP_FAILURE$", "^DCGM_FI_DEV_SM_CLOCK$", "^DCGM_FI_DEV_XID_ERRORS$", "^DCGM_FI_PROF_DRAM_ACTIVE$", "^DCGM_FI_PROF_GR_ENGINE_ACTIVE$", "^DCGM_FI_PROF_PCIE_RX_BYTES$", "^DCGM_FI_PROF_PCIE_TX_BYTES$", "^DCGM_FI_PROF_PIPE_TENSOR_ACTIVE$" ] } ] } } }, "force_flush_interval": 5 } }
- W
prometheus
config, dołącz następującą definicję zadania dla eksportera DCGM
- job_name: 'kubernetes-pod-dcgm-exporter' sample_limit: 10000 metrics_path: /api/v1/metrics/prometheus kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_container_name] action: keep regex: '^DCGM.*$' - source_labels: [__address__] action: replace regex: ([^:]+)(?::d+)? replacement: ${1}:9400 target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - action: replace source_labels: - __meta_kubernetes_namespace target_label: Namespace - source_labels: [__meta_kubernetes_pod] action: replace target_label: pod - action: replace source_labels: - __meta_kubernetes_pod_container_name target_label: container_name - action: replace source_labels: - __meta_kubernetes_pod_controller_name target_label: pod_controller_name - action: replace source_labels: - __meta_kubernetes_pod_controller_kind target_label: pod_controller_kind - action: replace source_labels: - __meta_kubernetes_pod_phase target_label: pod_phase - action: replace source_labels: - __meta_kubernetes_pod_node_name target_label: NodeName
- Zapisz plik i zastosuj
cwagent-dcgm
konfigurację do klastra
kubectl apply -f ./prometheus-eks.yaml
Otrzymujemy następujący wynik:
namespace/amazon-cloudwatch created
configmap/prometheus-cwagentconfig created
configmap/prometheus-config created
serviceaccount/cwagent-prometheus created
clusterrole.rbac.authorization.k8s.io/cwagent-prometheus-role created
clusterrolebinding.rbac.authorization.k8s.io/cwagent-prometheus-role-binding created
deployment.apps/cwagent-prometheus created
- Upewnij się, że moduł agenta CloudWatch jest uruchomiony
kubectl -n amazon-cloudwatch get pods
Otrzymujemy następujący wynik:
NAME READY STATUS RESTARTS AGE
cwagent-prometheus-7dfd69cc46-s4cx7 1/1 Running 0 15m
Wizualizuj metryki na konsoli CloudWatch
Aby wizualizować metryki w CloudWatch, wykonaj następujące kroki:
- Na konsoli CloudWatch w sekcji Metryka w okienku nawigacji wybierz Wszystkie metryki
- W Niestandardowe przestrzenie nazw sekcji, wybierz nowy wpis dla ContainerInsights/Prometeusz
Więcej informacji na temat ContainerInsights/Prometeusz przestrzeni nazw, patrz Pobieranie dodatkowych źródeł Prometheusa i importowanie tych metryk.
- Przejdź do nazw metryk i wybierz
DCGM_FI_DEV_GPU_UTIL
- Na Wykresy metryki karta, zestaw Okres do 5 sekund
- Ustaw interwał odświeżania na 10 sekund
Zobaczysz metryki zebrane od eksportera DCGM, które wizualizują gpu-burn
wzór włącza się i wyłącza co 20 sekund.
Na Przeglądaj na karcie możesz zobaczyć dane, w tym nazwę pod dla każdej metryki.
Metadane interfejsu API EKS zostały połączone z danymi metryk DCGM, w wyniku czego otrzymano metryki GPU oparte na podach.
Na tym kończy się pierwsze podejście polegające na eksportowaniu metryk DCGM do CloudWatch za pośrednictwem agenta CloudWatch.
W następnej sekcji konfigurujemy drugą architekturę, która eksportuje metryki DCGM do Prometheusa i wizualizujemy je za pomocą Grafany.
Użyj Prometheus i Grafana, aby wizualizować wskaźniki GPU z DCGM
Wykonaj następujące kroki:
- Dodaj wykres steru społeczności Prometheus
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
Na tym wykresie przedstawiono zarówno Prometheus, jak i Grafana. Przed uruchomieniem polecenia install musimy wprowadzić pewne zmiany w wykresie.
- Zapisz wartości konfiguracyjne wykresu do pliku w formacie
/tmp
helm inspect values prometheus-community/kube-prometheus-stack > /tmp/kube-prometheus-stack.values
- Edytuj plik konfiguracyjny char
Edytuj zapisany plik (/tmp/kube-prometheus-stack.values
) i ustaw następującą opcję, szukając nazwy ustawienia i ustawiając wartość:
prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
- Dodaj następującą mapę ConfigMap do pliku
additionalScrapeConfigs
Sekcja
additionalScrapeConfigs:
- job_name: gpu-metrics scrape_interval: 1s metrics_path: /metrics scheme: http kubernetes_sd_configs: - role: endpoints namespaces: names: - gpu-operator relabel_configs: - source_labels: [__meta_kubernetes_pod_node_name] action: replace target_label: kubernetes_node
- Wdróż stos Prometheus ze zaktualizowanymi wartościami
helm install prometheus-community/kube-prometheus-stack
--create-namespace --namespace prometheus
--generate-name
--values /tmp/kube-prometheus-stack.values
Otrzymujemy następujący wynik:
NAME: kube-prometheus-stack-1684965548
LAST DEPLOYED: Wed May 24 21:59:14 2023
NAMESPACE: prometheus
STATUS: deployed
REVISION: 1
NOTES:
kube-prometheus-stack has been installed. Check its status by running: kubectl --namespace prometheus get pods -l "release=kube-prometheus-stack-1684965548" Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
- Upewnij się, że moduły Prometheus działają
kubectl get pods -n prometheus
Otrzymujemy następujący wynik:
NAME READY STATUS RESTARTS AGE
alertmanager-kube-prometheus-stack-1684-alertmanager-0 2/2 Running 0 6m55s
kube-prometheus-stack-1684-operator-6c87649878-j7v55 1/1 Running 0 6m58s
kube-prometheus-stack-1684965548-grafana-dcd7b4c96-bzm8p 3/3 Running 0 6m58s
kube-prometheus-stack-1684965548-kube-state-metrics-7d856dptlj5 1/1 Running 0 6m58s
kube-prometheus-stack-1684965548-prometheus-node-exporter-2fbl5 1/1 Running 0 6m58s
kube-prometheus-stack-1684965548-prometheus-node-exporter-m7zmv 1/1 Running 0 6m58s
prometheus-kube-prometheus-stack-1684-prometheus-0 2/2 Running 0 6m55s
Strąki Prometheusa i Grafany znajdują się w Running
stan.
Następnie sprawdzamy, czy wskaźniki DCGM wpływają do Prometheusa.
- Prześlij dalej interfejs użytkownika Prometheus
Istnieją różne sposoby udostępniania interfejsu użytkownika Prometheus działającego w EKS żądaniom pochodzącym spoza klastra. Użyjemy kubectl port-forwarding
. Do tej pory wykonywaliśmy polecenia wewnątrz pliku aws-do-eks
pojemnik. Aby uzyskać dostęp do usługi Prometheus działającej w klastrze, utworzymy tunel z hosta. Tutaj aws-do-eks
kontener jest uruchamiany poprzez wykonanie następującego polecenia poza kontenerem, w nowej powłoce terminala na hoście. Będziemy to nazywać „powłoką hosta”.
kubectl -n prometheus port-forward svc/$(kubectl -n prometheus get svc | grep prometheus | grep -v alertmanager | grep -v operator | grep -v grafana | grep -v metrics | grep -v exporter | grep -v operated | cut -d ' ' -f 1) 8080:9090 &
Podczas gdy proces przekierowania portów jest uruchomiony, możemy uzyskać dostęp do interfejsu użytkownika Prometheusa z hosta, jak opisano poniżej.
- Otwórz interfejs użytkownika Prometeusza
- Jeśli korzystasz z Cloud9, przejdź do
Preview->Preview Running Application
, aby otworzyć interfejs użytkownika Prometheus na karcie w środowisku Cloud9 IDE, a następnie kliknij w prawym górnym rogu karty, aby wyświetlić ją w nowym oknie.
- Jeśli korzystasz z lokalnego hosta lub łączysz się z instancją EC2 za pośrednictwem zdalnego pulpitu, otwórz przeglądarkę i odwiedź adres URL
http://localhost:8080
.
- Wchodzę
DCGM
aby zobaczyć wskaźniki DCGM napływające do Prometheusa
- Wybierz
DCGM_FI_DEV_GPU_UTIL
wybierz Wykonać, a następnie przejdź do Wykres aby zobaczyć oczekiwany wzorzec wykorzystania procesora GPU
- Zatrzymaj proces przekierowania portów Prometheus
Uruchom następujący wiersz poleceń w powłoce hosta:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
Teraz możemy wizualizować wskaźniki DCGM za pośrednictwem Grafana Dashboard.
- Odzyskaj hasło, aby zalogować się do interfejsu użytkownika Grafana
kubectl -n prometheus get secret $(kubectl -n prometheus get secrets | grep grafana | cut -d ' ' -f 1) -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
- Przekieruj usługę Grafana
Uruchom następujący wiersz poleceń w powłoce hosta:
kubectl port-forward -n prometheus svc/$(kubectl -n prometheus get svc | grep grafana | cut -d ' ' -f 1) 8080:80 &
- Zaloguj się do interfejsu użytkownika Grafany
Uzyskaj dostęp do ekranu logowania interfejsu użytkownika Grafana w taki sam sposób, w jaki uzyskałeś wcześniej dostęp do interfejsu użytkownika Prometheus. Jeśli używasz Cloud9, wybierz Preview->Preview Running Application
, a następnie wyskocz w nowym oknie. Jeśli korzystasz z lokalnego hosta lub instancji EC2 z adresem URL wizyty na pulpicie zdalnym http://localhost:8080
. Zaloguj się przy użyciu nazwy użytkownika admin i hasła, które otrzymałeś wcześniej.
- W okienku nawigacji wybierz Pulpity
- Dodaj Nowości i import
Zamierzamy zaimportować domyślny dashboard DCGM Grafana opisany w Pulpit eksportera NVIDIA DCGM.
- W polu
import via grafana.com
, wchodzić 12239
i wybierz Załadować
- Dodaj Prometheus jako źródło danych
- Dodaj import
Zobaczysz pulpit podobny do tego na poniższym zrzucie ekranu.
Aby wykazać, że te metryki są oparte na podach, zmodyfikujemy plik Wykorzystanie GPU okienko w tym panelu kontrolnym.
- Wybierz panel i menu opcji (trzy kropki)
- rozwiń Opcje sekcję i edytuj plik Legenda pole
- Zamień tam wartość na
Pod {{pod}}
, A następnie wybierz Zapisz
Legenda pokazuje teraz gpu-burn
nazwa pod powiązana z wyświetlanym wykorzystaniem procesora GPU.
- Zatrzymaj przekierowywanie portów usługi interfejsu użytkownika Grafana
Uruchom następujące polecenie w powłoce hosta:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
W tym poście zademonstrowaliśmy wykorzystanie oprogramowania Prometheus i Grafana typu open source wdrożonego w klastrze EKS. W razie potrzeby to wdrożenie można zastąpić Usługa zarządzana przez Amazon dla Prometheusa i Grafana zarządzana przez Amazon.
Sprzątać
Aby wyczyścić utworzone zasoby, uruchom następujący skrypt z pliku aws-do-eks
skorupa kontenera:
Wnioski
W tym poście wykorzystaliśmy narzędzie NVIDIA DCGM Exporter do zebrania wskaźników GPU i wizualizacji ich za pomocą CloudWatch, Prometheus i Grafana. Zapraszamy do korzystania z przedstawionych tutaj architektur, aby umożliwić monitorowanie wykorzystania procesora graficznego za pomocą NVIDIA DCGM we własnym środowisku AWS.
Dodatkowe zasoby
O autorach
Amra Ragaba jest byłym głównym architektem rozwiązań w EC2 Accelerated Computing w AWS. Jego zaangażowaniem jest pomaganie klientom w uruchamianiu obciążeń obliczeniowych na dużą skalę. W wolnym czasie lubi podróżować i znajdować nowe sposoby na integrację technologii z codziennym życiem.
Aleks Iankoulski jest głównym architektem rozwiązań w dziale samozarządzającego uczenia maszynowego w AWS. Jest inżynierem oprogramowania i infrastruktury typu full-stack, który lubi wykonywać dogłębną, praktyczną pracę. Na swoim stanowisku koncentruje się na pomaganiu klientom w konteneryzacji i orkiestracji obciążeń ML i AI w usługach AWS opartych na kontenerach. Jest także autorem oprogramowania open source zrobić framework oraz kapitan Dockera, który uwielbia stosować technologie kontenerowe w celu przyspieszenia tempa innowacji przy jednoczesnym rozwiązywaniu największych wyzwań świata. W ciągu ostatnich 10 lat Alex pracował nad demokratyzacją sztucznej inteligencji i uczenia maszynowego, zwalczaniem zmian klimatycznych oraz zwiększaniem bezpieczeństwa podróży, lepszą opieką zdrowotną i mądrzejszą energią.
Keity Watanabe jest starszym architektem rozwiązań w Frameworks ML Solutions w Amazon Web Services, gdzie pomaga opracowywać najlepsze w branży rozwiązania do samodzielnego zarządzania uczeniem maszynowym oparte na chmurze. Jego doświadczenie obejmuje badania i rozwój uczenia maszynowego. Przed dołączeniem do AWS Keita pracował w branży e-commerce. Keita posiada tytuł doktora. nauk ścisłych na Uniwersytecie Tokijskim.
- Dystrybucja treści i PR oparta na SEO. Uzyskaj wzmocnienie już dziś.
- PlatoData.Network Pionowe generatywne AI. Wzmocnij się. Dostęp tutaj.
- PlatoAiStream. Inteligencja Web3. Wiedza wzmocniona. Dostęp tutaj.
- PlatonESG. Motoryzacja / pojazdy elektryczne, Węgiel Czysta technologia, Energia, Środowisko, Słoneczny, Gospodarowanie odpadami. Dostęp tutaj.
- Platon Zdrowie. Inteligencja w zakresie biotechnologii i badań klinicznych. Dostęp tutaj.
- ChartPrime. Podnieś poziom swojej gry handlowej dzięki ChartPrime. Dostęp tutaj.
- Przesunięcia bloków. Modernizacja własności offsetu środowiskowego. Dostęp tutaj.
- Źródło: https://aws.amazon.com/blogs/machine-learning/enable-pod-based-gpu-metrics-in-amazon-cloudwatch/