In februari 2022 werd Amazon Web Services toegevoegd ondersteuning voor NVIDIA GPU-statistieken in Amazon CloudWatch, waardoor het mogelijk wordt om statistieken uit de Amazon CloudWatch-agent naar Amazon Cloud Watch en bewaak uw code voor optimaal GPU-gebruik. Sindsdien is deze functie geรฏntegreerd in veel van onze beheerde Amazon Machine Images (AMI's), zoals de Diepgaand leren AMI en AWS ParallelCluster AMI. Om statistieken op exemplaarniveau van het GPU-gebruik te verkrijgen, kunt u Packer of de Amazon ImageBuilder gebruiken om uw eigen aangepaste AMI op te starten en deze te gebruiken in verschillende beheerde serviceaanbiedingen, zoals AWS-batch, Amazon Elastic Container-service (Amazon ECS), of Amazon Elastic Kubernetes-service (Amazone EKS). Voor veel op containers gebaseerde serviceaanbiedingen en workloads is het echter ideaal om gebruiksstatistieken vast te leggen op container-, pod- of naamruimteniveau.
In dit bericht wordt beschreven hoe u containergebaseerde GPU-statistieken instelt en wordt een voorbeeld gegeven van het verzamelen van deze statistieken uit EKS-pods.
Overzicht oplossingen
Om containergebaseerde GPU-statistieken te demonstreren, maken we een EKS-cluster met g5.2xlarge
instanties; Dit werkt echter met elke ondersteunde NVIDIA-versnelde instancefamilie.
We implementeren de NVIDIA GPU-operator om het gebruik van GPU-bronnen en de NVIDIA DCGM-exporteur om het verzamelen van GPU-statistieken in te schakelen. Vervolgens verkennen we twee architecturen. De eerste verbindt de statistieken van NVIDIA DCGM Exporter met CloudWatch via een CloudWatch-agent, zoals weergegeven in het volgende diagram.
De tweede architectuur (zie het volgende diagram) verbindt de statistieken van DCGM Exporter met Prometheus, dan gebruiken we a grafana dashboard om deze statistieken te visualiseren.
Voorwaarden
Om het reproduceren van de hele stapel uit dit bericht te vereenvoudigen, gebruiken we een container waarin alle benodigde gereedschappen (aws cli, eksctl, helm, etc.) al zijn geรฏnstalleerd. Om de containerproject van GitHub, je zal nodig hebben git. Om de container te bouwen en uit te voeren, hebt u nodig havenarbeider. Om de architectuur te implementeren, hebt u nodig AWS-referenties. Om toegang tot Kubernetes-services mogelijk te maken met behulp van port-forwarding, hebt u ook nodig kubectl.
Deze vereisten kunnen op uw lokale computer worden geรฏnstalleerd, EC2-exemplaar Met MOOIE DCVof AWS-Cloud9. In dit bericht gebruiken we een c5.2xlarge
Cloud9-instantie met een 40GB
lokaal opslagvolume. Wanneer u Cloud9 gebruikt, schakel dan de door AWS beheerde tijdelijke inloggegevens uit door naar te gaan Cloud9->Preferences->AWS Settings
zoals weergegeven op de onderstaande schermafbeelding.
Bouw en voer de aws-do-eks-container uit
Open een terminalshell in uw voorkeursomgeving en voer de volgende opdrachten uit:
git clone https://github.com/aws-samples/aws-do-eks
cd aws-do-eks
./build.sh
./run.sh
./exec.sh
Het resultaat is als volgt:
Je hebt nu een shell in een containeromgeving die alle tools bevat die nodig zijn om de onderstaande taken uit te voeren. We zullen ernaar verwijzen als โaws-do-eks shellโ. U voert de opdrachten in de volgende secties in deze shell uit, tenzij specifiek anders aangegeven.
Maak een EKS-cluster met een knooppuntgroep
Deze groep bevat een GPU-instantiefamilie naar keuze; in dit voorbeeld gebruiken we de g5.2xlarge
exemplaartype.
De aws-do-eks-project wordt geleverd met een verzameling clusterconfiguraties. Met รฉรฉn enkele configuratiewijziging kunt u de gewenste clusterconfiguratie instellen.
- Ren in de containershell
./env-config.sh
en dan instellen CONF=conf/eksctl/yaml/eks-gpu-g5.yaml
- Om de clusterconfiguratie te verifiรซren, voert u uit
./eks-config.sh
U zou het volgende clustermanifest moeten zien:
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
- Om het cluster te maken, voert u de volgende opdracht uit in de container
De output is als volgt:
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
- Voer de volgende opdracht uit om te controleren of uw cluster met succes is gemaakt
kubectl get nodes -L node.kubernetes.io/instance-type
De uitvoer is vergelijkbaar met het volgende:
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
In dit voorbeeld hebben we รฉรฉn m5.xlarge- en รฉรฉn g5.2xlarge-instantie in ons cluster; daarom zien we twee knooppunten vermeld in de voorgaande uitvoer.
Tijdens het maken van het cluster wordt de NVIDIA-apparaatplug-in geรฏnstalleerd. U moet het verwijderen nadat het cluster is gemaakt, omdat we de NVIDIA GPU-operator gebruiken.
- Verwijder de plug-in met de volgende opdracht
kubectl -n kube-system delete daemonset nvidia-device-plugin-daemonset
We krijgen de volgende uitvoer:
daemonset.apps "nvidia-device-plugin-daemonset" deleted
Installeer de NVIDIA Helm-opslagplaats
Installeer de NVIDIA Helm-repository met de volgende opdracht:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
Implementeer de DCGM-exporteur met de NVIDIA GPU Operator
Voer de volgende stappen uit om de DCGM-exporteur te implementeren:
- Bereid de configuratie van de GPU-statistieken van de DCGM-exporteur voor
curl https://raw.githubusercontent.com/NVIDIA/dcgm-exporter/main/etc/dcp-metrics-included.csv > dcgm-metrics.csv
U heeft de mogelijkheid om de dcgm-metrics.csv
bestand. U kunt indien nodig statistieken toevoegen of verwijderen.
- Maak de GPU-operatornaamruimte en DCGM-exporteur ConfigMap
kubectl create namespace gpu-operator && /
kubectl create configmap metrics-config -n gpu-operator --from-file=dcgm-metrics.csv
De output is als volgt:
namespace/gpu-operator created
configmap/metrics-config created
- Pas de GPU-operator toe op het EKS-cluster
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
De output is als volgt:
NAME: gpu-operator-1684795140
LAST DEPLOYED: Day Month Date HH:mm:ss YYYY
NAMESPACE: gpu-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
- Controleer of de DCGM-exporteurpod actief is
kubectl -n gpu-operator get pods | grep dcgm
De output is als volgt:
nvidia-dcgm-exporter-lkmfr 1/1 Running 0 1m
Als u de logboeken inspecteert, ziet u de โStarting webserverโ
bericht:
kubectl -n gpu-operator logs -f $(kubectl -n gpu-operator get pods | grep dcgm | cut -d ' ' -f 1)
De output is als volgt:
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"
NVIDIA DCGM Exporter stelt een Prometheus-metriekeindpunt bloot, dat kan worden opgenomen door de CloudWatch-agent. Gebruik de volgende opdracht om het eindpunt te zien:
kubectl -n gpu-operator get services | grep dcgm
We krijgen de volgende uitvoer:
nvidia-dcgm-exporter ClusterIP 10.100.183.207 <none> 9400/TCP 10m
- Om enig GPU-gebruik te genereren, implementeren we een pod die de gpu-branden binair
kubectl apply -f https://raw.githubusercontent.com/aws-samples/aws-do-eks/main/Container-Root/eks/deployment/gpu-metrics/gpu-burn-deployment.yaml
De output is als volgt:
deployment.apps/gpu-burn created
Deze implementatie maakt gebruik van รฉรฉn GPU om een โโcontinu patroon van 100% gebruik gedurende 20 seconden te produceren, gevolgd door 0% gebruik gedurende 20 seconden.
- Om er zeker van te zijn dat het eindpunt werkt, kunt u een tijdelijke container uitvoeren die curl gebruikt om de inhoud van te lezen
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
We krijgen de volgende uitvoer:
# 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
Configureer en implementeer de CloudWatch-agent
Voer de volgende stappen uit om de CloudWatch-agent te configureren en te implementeren:
- Download het YAML-bestand en bewerk het
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
Het bestand bevat een cwagent configmap
en prometheus configmap
. Voor dit bericht bewerken we beide.
- Bewerk de
prometheus-eks.yaml
filet
Open de prometheus-eks.yaml
bestand in uw favoriete editor en vervang het cwagentconfig.json
sectie met de volgende inhoud:
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 } }
- In het
prometheus
config sectie, voeg de volgende taakdefinitie toe voor de DCGM-exporteur
- 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
- Sla het bestand op en pas de
cwagent-dcgm
configuratie naar uw cluster
kubectl apply -f ./prometheus-eks.yaml
We krijgen de volgende uitvoer:
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
- Controleer of de CloudWatch-agentpod actief is
kubectl -n amazon-cloudwatch get pods
We krijgen de volgende uitvoer:
NAME READY STATUS RESTARTS AGE
cwagent-prometheus-7dfd69cc46-s4cx7 1/1 Running 0 15m
Metrieken visualiseren op de CloudWatch-console
Voer de volgende stappen uit om de statistieken in CloudWatch te visualiseren:
- Op de CloudWatch-console onder Metriek in het navigatievenster, kies Alle statistieken
- In het Aangepaste naamruimten sectie, kies het nieuwe item voor ContainerInsights/Prometheus
Voor meer informatie over de ContainerInsights/Prometheus naamruimte, zie Extra Prometheus-bronnen schrapen en die statistieken importeren.
- Bekijk de namen van de statistieken en maak een keuze
DCGM_FI_DEV_GPU_UTIL
- Op de Grafiekstatistieken tabblad, instellen Periode naar 5 seconden
- Stel het vernieuwingsinterval in op 10 seconden
U zult de statistieken zien die zijn verzameld uit de DCGM-exporteur en die de gpu-burn
patroon elke 20 seconden aan en uit.
Op de Blader Op het tabblad kunt u de gegevens bekijken, inclusief de podnaam voor elke statistiek.
De EKS API-metagegevens zijn gecombineerd met de DCGM-metrische gegevens, wat resulteert in de geleverde pod-gebaseerde GPU-statistieken.
Hiermee is de eerste aanpak afgerond van het exporteren van DCGM-statistieken naar CloudWatch via de CloudWatch-agent.
In de volgende sectie configureren we de tweede architectuur, die de DCGM-statistieken naar Prometheus exporteert, en visualiseren we ze met Grafana.
Gebruik Prometheus en Grafana om GPU-statistieken van DCGM te visualiseren
Voer de volgende stappen uit:
- Voeg het Prometheus-gemeenschapsroerdiagram toe
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
Deze kaart gebruikt zowel Prometheus als Grafana. We moeten enkele wijzigingen in het diagram aanbrengen voordat we de installatieopdracht uitvoeren.
- Sla de diagramconfiguratiewaarden op in een bestand in
/tmp
helm inspect values prometheus-community/kube-prometheus-stack > /tmp/kube-prometheus-stack.values
- Bewerk het char-configuratiebestand
Bewerk het opgeslagen bestand (/tmp/kube-prometheus-stack.values
) en stel de volgende optie in door naar de naam van de instelling te zoeken en de waarde in te stellen:
prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
- Voeg de volgende ConfigMap toe aan het
additionalScrapeConfigs
sectie
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
- Implementeer de Prometheus-stack met de bijgewerkte waarden
helm install prometheus-community/kube-prometheus-stack
--create-namespace --namespace prometheus
--generate-name
--values /tmp/kube-prometheus-stack.values
We krijgen de volgende uitvoer:
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.
- Controleer of de Prometheus-pods actief zijn
kubectl get pods -n prometheus
We krijgen de volgende uitvoer:
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
Prometheus- en Grafana-peulen bevinden zich in de Running
staat.
Vervolgens valideren we dat DCGM-statistieken naar Prometheus stromen.
- Portforward de Prometheus-gebruikersinterface
Er zijn verschillende manieren om de Prometheus-gebruikersinterface die in EKS wordt uitgevoerd, bloot te stellen aan verzoeken die afkomstig zijn van buiten het cluster. We zullen gebruiken kubectl port-forwarding
. Tot nu toe hebben we opdrachten uitgevoerd binnen het aws-do-eks
houder. Om toegang te krijgen tot de Prometheus-service die in het cluster draait, zullen we een tunnel vanaf de host maken. Hier de aws-do-eks
container wordt uitgevoerd door de volgende opdracht uit te voeren buiten de container, in een nieuwe terminalshell op de host. We zullen dit โhostshellโ noemen.
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 &
Terwijl het port-forwarding-proces actief is, hebben we vanaf de host toegang tot de Prometheus-gebruikersinterface, zoals hieronder beschreven.
- Open de Prometheus-gebruikersinterface
- Als u Cloud9 gebruikt, navigeer dan naar
Preview->Preview Running Application
om de Prometheus-gebruikersinterface te openen op een tabblad in de Cloud9 IDE en klik vervolgens op de -pictogram in de rechterbovenhoek van het tabblad om in een nieuw venster te verschijnen.
- Als u zich op uw lokale host bevindt of via een extern bureaublad bent verbonden met een EC2-instantie, opent u een browser en bezoekt u de URL
http://localhost:8080
.
- Enter
DCGM
om de DCGM-statistieken te zien die Prometheus binnenstromen
- kies
DCGM_FI_DEV_GPU_UTIL
, kiezen Uitvoerenen navigeer vervolgens naar de Diagram tabblad om het verwachte GPU-gebruikspatroon te zien
- Stop het proces voor het doorsturen van Prometheus-poorten
Voer de volgende opdrachtregel uit in uw hostshell:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
Nu kunnen we de DCGM-statistieken visualiseren via Grafana Dashboard.
- Haal het wachtwoord op om in te loggen op de Grafana UI
kubectl -n prometheus get secret $(kubectl -n prometheus get secrets | grep grafana | cut -d ' ' -f 1) -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
- Port-forward de Grafana-service
Voer de volgende opdrachtregel uit in uw hostshell:
kubectl port-forward -n prometheus svc/$(kubectl -n prometheus get svc | grep grafana | cut -d ' ' -f 1) 8080:80 &
- Log in op de Grafana-gebruikersinterface
Open het Grafana UI-inlogscherm op dezelfde manier als u eerder toegang kreeg tot de Prometheus UI. Als u Cloud9 gebruikt, selecteert u Preview->Preview Running Application
en verschijnt vervolgens in een nieuw venster. Als u uw lokale host of een EC2-instantie met extern bureaublad gebruikt, bezoek dan de URL http://localhost:8080
. Log in met de gebruikersnaam admin en het eerder opgevraagde wachtwoord.
- Kies in het navigatievenster Dashboards
- Kies New en import
We gaan het standaard DCGM Grafana-dashboard importeren, beschreven in NVIDIA DCGM-exporteurdashboard.
- In het veld
import via grafana.com
, ga naar binnen 12239
En kies Laden
- Kies Prometheus als gegevensbron
- Kies import
U ziet een dashboard dat lijkt op dat in de volgende schermafbeelding.
Om aan te tonen dat deze statistieken op pods zijn gebaseerd, gaan we de GPU-gebruik deelvenster in dit dashboard.
- Kies het deelvenster en het optiemenu (drie stippen)
- Vouw de Opties sectie en bewerk de Legende veld-
- Vervang de waarde daar door
Pod {{pod}}
, kies dan Bespaar
De legende toont nu de gpu-burn
podnaam die is gekoppeld aan het weergegeven GPU-gebruik.
- Stop met het doorsturen van poorten naar de Grafana UI-service
Voer het volgende uit in uw hostshell:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
In dit bericht demonstreerden we het gebruik van open-source Prometheus en Grafana, geรฏmplementeerd in het EKS-cluster. Indien gewenst kan deze implementatie worden vervangen door Amazon beheerde service voor Prometheus en Amazon beheerde Grafana.
Opruimen
Om de bronnen die u hebt gemaakt op te schonen, voert u het volgende script uit vanuit de aws-do-eks
containerschaal:
Conclusie
In dit bericht hebben we NVIDIA DCGM Exporter gebruikt om GPU-statistieken te verzamelen en deze te visualiseren met CloudWatch of Prometheus en Grafana. We nodigen u uit om de hier gedemonstreerde architecturen te gebruiken om monitoring van het GPU-gebruik met NVIDIA DCGM in uw eigen AWS-omgeving mogelijk te maken.
Extra middelen
Over de auteurs
Amr Ragab is een voormalig Principal Solutions Architect, EC2 Accelerated Computing bij AWS. Hij is toegewijd aan het helpen van klanten bij het op schaal uitvoeren van computationele workloads. In zijn vrije tijd houdt hij van reizen en het vinden van nieuwe manieren om technologie in het dagelijks leven te integreren.
Alex Iankouski is een Principal Solutions Architect, zelfbeheerde Machine Learning bij AWS. Hij is een full-stack software- en infrastructuuringenieur die graag diepgaand, praktijkgericht werk doet. In zijn rol richt hij zich op het helpen van klanten met containerisatie en orkestratie van ML- en AI-workloads op containergebaseerde AWS-services. Hij is ook de auteur van de open source raamwerk doen en een Docker-kapitein die ervan houdt containertechnologieรซn toe te passen om het innovatietempo te versnellen en tegelijkertijd de grootste uitdagingen ter wereld op te lossen. De afgelopen tien jaar heeft Alex gewerkt aan het democratiseren van AI en ML, het bestrijden van de klimaatverandering en het veiliger maken van reizen, het verbeteren van de gezondheidszorg en het slimmer maken van energie.
Keita Watanabe is Senior Solutions Architect van Frameworks ML Solutions bij Amazon Web Services, waar hij helpt bij het ontwikkelen van de beste cloudgebaseerde zelfbeheerde Machine Learning-oplossingen in de branche. Zijn achtergrond ligt in onderzoek en ontwikkeling op het gebied van Machine Learning. Voordat Keita bij AWS kwam, werkte ze in de e-commerce-industrie. Keita heeft een Ph.D. in Wetenschap aan de Universiteit van Tokio.
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- PlatoData.Network Verticale generatieve AI. Versterk jezelf. Toegang hier.
- PlatoAiStream. Web3-intelligentie. Kennis versterkt. Toegang hier.
- PlatoESG. Automotive / EV's, carbon, CleanTech, Energie, Milieu, Zonne, Afvalbeheer. Toegang hier.
- Plato Gezondheid. Intelligentie op het gebied van biotech en klinische proeven. Toegang hier.
- ChartPrime. Verhoog uw handelsspel met ChartPrime. Toegang hier.
- BlockOffsets. Eigendom voor milieucompensatie moderniseren. Toegang hier.
- Bron: https://aws.amazon.com/blogs/machine-learning/enable-pod-based-gpu-metrics-in-amazon-cloudwatch/