Pada bulan Februari 2022, Amazon Web Services menambahkan dukungan untuk metrik GPU NVIDIA di Amazon CloudWatch, sehingga memungkinkan untuk mendorong metrik dari Agen Amazon CloudWatch untuk amazoncloudwatch dan pantau kode Anda untuk pemanfaatan GPU yang optimal. Sejak saat itu, fitur ini telah diintegrasikan ke dalam banyak Amazon Machine Images (AMI) yang kami kelola, seperti AMI Pembelajaran Mendalam dan AMI AWS ParallelCluster. Untuk mendapatkan metrik pemanfaatan GPU tingkat instans, Anda dapat menggunakan Packer atau Amazon ImageBuilder untuk mem-bootstrap AMI kustom Anda sendiri dan menggunakannya dalam berbagai penawaran layanan terkelola seperti Batch AWS, Layanan Kontainer Amazon Elastic (Amazon ECS), atau Layanan Amazon Elastic Kubernetes (Amazon EKS). Namun, untuk banyak penawaran layanan dan beban kerja berbasis kontainer, yang ideal adalah menangkap metrik pemanfaatan pada tingkat kontainer, pod, atau namespace.
Postingan ini merinci cara menyiapkan metrik GPU berbasis container dan memberikan contoh pengumpulan metrik ini dari pod EKS.
Ikhtisar solusi
Untuk mendemonstrasikan metrik GPU berbasis container, kami membuat cluster EKS dengan g5.2xlarge
contoh; namun, ini akan berfungsi dengan keluarga instans terakselerasi NVIDIA yang didukung.
Kami menerapkan operator GPU NVIDIA untuk memungkinkan penggunaan sumber daya GPU dan Eksportir NVIDIA DCGM untuk mengaktifkan pengumpulan metrik GPU. Kemudian kami menjelajahi dua arsitektur. Yang pertama menghubungkan metrik dari NVIDIA DCGM Eksportir ke CloudWatch melalui agen CloudWatch, seperti yang ditunjukkan dalam diagram berikut.
Arsitektur kedua (lihat diagram berikut) menghubungkan metrik dari DCGM Eksportir ke Prometheus, maka kita menggunakan a grafana dasbor untuk memvisualisasikan metrik tersebut.
Prasyarat
Untuk menyederhanakan reproduksi seluruh tumpukan dari posting ini, kami menggunakan wadah yang telah menginstal semua peralatan yang diperlukan (aws cli, eksctl, helm, dll.). Untuk mengkloning proyek kontainer dari GitHub, Anda akan perlu git. Untuk membangun dan menjalankan container, Anda memerlukan Buruh pelabuhan. Untuk menerapkan arsitektur, Anda memerlukan kredensial AWS. Untuk mengaktifkan akses ke layanan Kubernetes menggunakan penerusan porta, Anda juga memerlukan kubectl.
Prasyarat ini dapat diinstal pada mesin lokal Anda, Contoh EC2 dengan DCV yang bagus, atau AWS Cloud9. Dalam posting ini, kita akan menggunakan a c5.2xlarge
Instans Cloud9 dengan a 40GB
volume penyimpanan lokal. Saat menggunakan Cloud9, harap nonaktifkan kredensial sementara yang dikelola AWS dengan mengunjungi Cloud9->Preferences->AWS Settings
seperti yang ditunjukkan pada tangkapan layar di bawah ini.
Bangun dan jalankan kontainer aws-do-eks
Buka shell terminal di lingkungan pilihan Anda dan jalankan perintah berikut:
git clone https://github.com/aws-samples/aws-do-eks
cd aws-do-eks
./build.sh
./run.sh
./exec.sh
Hasilnya adalah sebagai berikut:
Anda sekarang memiliki shell di lingkungan kontainer yang memiliki semua alat yang diperlukan untuk menyelesaikan tugas di bawah ini. Kami akan menyebutnya sebagai โaws-do-eks shellโ. Anda akan menjalankan perintah di bagian berikut di shell ini, kecuali diinstruksikan sebaliknya.
Buat klaster EKS dengan grup simpul
Grup ini mencakup keluarga instans GPU pilihan Anda; dalam contoh ini, kami menggunakan g5.2xlarge
tipe instans.
Grafik proyek aws-do-eks hadir dengan kumpulan konfigurasi cluster. Anda dapat mengatur konfigurasi cluster yang Anda inginkan dengan satu perubahan konfigurasi.
- Di shell kontainer, jalankan
./env-config.sh
lalu atur CONF=conf/eksctl/yaml/eks-gpu-g5.yaml
- Untuk memverifikasi konfigurasi cluster, jalankan
./eks-config.sh
Anda akan melihat manifes cluster berikut:
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
- Untuk membuat klaster, jalankan perintah berikut di kontainer
Outputnya adalah sebagai berikut:
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
- Untuk memverifikasi bahwa klaster Anda berhasil dibuat, jalankan perintah berikut
kubectl get nodes -L node.kubernetes.io/instance-type
Outputnya mirip dengan berikut ini:
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
Dalam contoh ini, kami memiliki satu instance m5.xlarge dan satu instance g5.2xlarge di cluster kami; oleh karena itu, kita melihat dua node terdaftar di keluaran sebelumnya.
Selama proses pembuatan cluster, plugin perangkat NVIDIA akan diinstal. Anda harus menghapusnya setelah pembuatan cluster karena kami akan menggunakan Operator GPU NVIDIA sebagai gantinya.
- Hapus plugin dengan perintah berikut
kubectl -n kube-system delete daemonset nvidia-device-plugin-daemonset
Kami mendapatkan output berikut:
daemonset.apps "nvidia-device-plugin-daemonset" deleted
Instal repo NVIDIA Helm
Instal repo NVIDIA Helm dengan perintah berikut:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
Terapkan eksportir DCGM dengan Operator GPU NVIDIA
Untuk menyebarkan eksportir DCGM, selesaikan langkah-langkah berikut:
- Siapkan konfigurasi metrik GPU eksportir DCGM
curl https://raw.githubusercontent.com/NVIDIA/dcgm-exporter/main/etc/dcp-metrics-included.csv > dcgm-metrics.csv
Anda memiliki opsi untuk mengedit dcgm-metrics.csv
mengajukan. Anda dapat menambahkan atau menghapus metrik apa pun sesuai kebutuhan.
- Buat namespace operator gpu dan ConfigMap eksportir DCGM
kubectl create namespace gpu-operator && /
kubectl create configmap metrics-config -n gpu-operator --from-file=dcgm-metrics.csv
Outputnya adalah sebagai berikut:
namespace/gpu-operator created
configmap/metrics-config created
- Terapkan operator GPU ke kluster 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
Outputnya adalah sebagai berikut:
NAME: gpu-operator-1684795140
LAST DEPLOYED: Day Month Date HH:mm:ss YYYY
NAMESPACE: gpu-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
- Konfirmasikan bahwa pod eksportir DCGM sedang berjalan
kubectl -n gpu-operator get pods | grep dcgm
Outputnya adalah sebagai berikut:
nvidia-dcgm-exporter-lkmfr 1/1 Running 0 1m
Jika Anda memeriksa log, Anda akan melihat โStarting webserverโ
pesan:
kubectl -n gpu-operator logs -f $(kubectl -n gpu-operator get pods | grep dcgm | cut -d ' ' -f 1)
Outputnya adalah sebagai berikut:
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 Eksportir memperlihatkan titik akhir metrik Prometheus, yang dapat diserap oleh agen CloudWatch. Untuk melihat titik akhir, gunakan perintah berikut:
kubectl -n gpu-operator get services | grep dcgm
Kami mendapatkan output berikut:
nvidia-dcgm-exporter ClusterIP 10.100.183.207 <none> 9400/TCP 10m
- Untuk menghasilkan beberapa pemanfaatan GPU, kami menerapkan pod yang menjalankan pembakaran GPU biner
kubectl apply -f https://raw.githubusercontent.com/aws-samples/aws-do-eks/main/Container-Root/eks/deployment/gpu-metrics/gpu-burn-deployment.yaml
Outputnya adalah sebagai berikut:
deployment.apps/gpu-burn created
Penerapan ini menggunakan satu GPU untuk menghasilkan pola pemanfaatan 100% secara terus menerus selama 20 detik diikuti dengan pemanfaatan 0% selama 20 detik.
- Untuk memastikan titik akhir berfungsi, Anda dapat menjalankan kontainer sementara yang menggunakan curl untuk membaca kontennya
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
Kami mendapatkan output berikut:
# 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
Konfigurasikan dan terapkan agen CloudWatch
Untuk mengonfigurasi dan menyebarkan agen CloudWatch, selesaikan langkah-langkah berikut:
- Unduh file YAML dan edit
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
File tersebut berisi a cwagent configmap
dan prometheus configmap
. Untuk posting ini, kami mengedit keduanya.
- Edit
prometheus-eks.yaml
fillet
Buka prometheus-eks.yaml
file di editor favorit Anda dan ganti cwagentconfig.json
bagian dengan konten berikut:
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 } }
- Dalam majalah
prometheus
bagian config, tambahkan ketentuan pekerjaan berikut untuk eksportir 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
- Simpan file dan terapkan
cwagent-dcgm
konfigurasi ke cluster Anda
kubectl apply -f ./prometheus-eks.yaml
Kami mendapatkan output berikut:
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
- Konfirmasikan bahwa pod agen CloudWatch sedang berjalan
kubectl -n amazon-cloudwatch get pods
Kami mendapatkan output berikut:
NAME READY STATUS RESTARTS AGE
cwagent-prometheus-7dfd69cc46-s4cx7 1/1 Running 0 15m
Visualisasikan metrik di konsol CloudWatch
Untuk memvisualisasikan metrik di CloudWatch, selesaikan langkah-langkah berikut:
- Di konsol CloudWatch, di bawah Metrik di panel navigasi, pilih Semua metrik
- Dalam majalah Ruang nama khusus bagian, pilih entri baru untuk Wawasan Kontainer/Prometheus
Untuk informasi lebih lanjut tentang Wawasan Kontainer/Prometheus namespace, lihat Menghapus sumber Prometheus tambahan dan mengimpor metrik tersebut.
- Telusuri nama metrik dan pilih
DCGM_FI_DEV_GPU_UTIL
- pada Metrik bergrafik tab, atur Periode untuk 5 detik
- Atur interval penyegaran menjadi 10 detik
Anda akan melihat metrik yang dikumpulkan dari eksportir DCGM yang memvisualisasikannya gpu-burn
pola hidup dan mati setiap 20 detik.
pada Browse tab, Anda dapat melihat datanya, termasuk nama pod untuk setiap metrik.
Metadata EKS API telah digabungkan dengan data metrik DCGM, sehingga menghasilkan metrik GPU berbasis pod yang disediakan.
Ini mengakhiri pendekatan pertama dalam mengekspor metrik DCGM ke CloudWatch melalui agen CloudWatch.
Di bagian selanjutnya, kami mengonfigurasi arsitektur kedua, yang mengekspor metrik DCGM ke Prometheus, dan kami memvisualisasikannya dengan Grafana.
Gunakan Prometheus dan Grafana untuk memvisualisasikan metrik GPU dari DCGM
Selesaikan langkah-langkah berikut:
- Tambahkan bagan kemudi komunitas Prometheus
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
Bagan ini menyebarkan Prometheus dan Grafana. Kita perlu melakukan beberapa pengeditan pada grafik sebelum menjalankan perintah install.
- Simpan nilai konfigurasi bagan ke file di
/tmp
helm inspect values prometheus-community/kube-prometheus-stack > /tmp/kube-prometheus-stack.values
- Edit file konfigurasi char
Edit file yang disimpan (/tmp/kube-prometheus-stack.values
) dan atur opsi berikut dengan mencari nama pengaturan dan mengatur nilainya:
prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
- Tambahkan ConfigMap berikut ke
additionalScrapeConfigs
bagian
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
- Terapkan tumpukan Prometheus dengan nilai yang diperbarui
helm install prometheus-community/kube-prometheus-stack
--create-namespace --namespace prometheus
--generate-name
--values /tmp/kube-prometheus-stack.values
Kami mendapatkan output berikut:
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.
- Konfirmasikan bahwa pod Prometheus sedang berjalan
kubectl get pods -n prometheus
Kami mendapatkan output berikut:
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
Polong Prometheus dan Grafana ada di Running
negara.
Selanjutnya, kami memvalidasi bahwa metrik DCGM mengalir ke Prometheus.
- Port-forwardkan UI Prometheus
Ada berbagai cara untuk mengekspos UI Prometheus yang berjalan di EKS terhadap permintaan yang berasal dari luar klaster. Kami akan menggunakan kubectl port-forwarding
. Sejauh ini, kami telah menjalankan perintah di dalam aws-do-eks
wadah. Untuk mengakses layanan Prometheus yang berjalan di cluster, kita akan membuat terowongan dari host. Ini dia aws-do-eks
container dijalankan dengan menjalankan perintah berikut di luar container, di shell terminal baru pada host. Kami akan menyebutnya sebagai "host shell".
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 &
Saat proses penerusan porta berjalan, kami dapat mengakses UI Prometheus dari host seperti dijelaskan di bawah.
- Buka UI Prometheus
- Jika Anda menggunakan Cloud9, silakan navigasikan ke
Preview->Preview Running Application
untuk membuka Prometheus UI di tab di dalam Cloud9 IDE, lalu klik ikon di sudut kanan atas tab untuk muncul di jendela baru.
- Jika Anda menggunakan host lokal atau terhubung ke instans EC2 melalui desktop jarak jauh, buka browser dan kunjungi URL-nya
http://localhost:8080
.
- Enter
DCGM
untuk melihat metrik DCGM yang mengalir ke Prometheus
- Pilih
DCGM_FI_DEV_GPU_UTIL
, pilih Eksekusi, lalu arahkan ke Grafik tab untuk melihat pola pemanfaatan GPU yang diharapkan
- Hentikan proses penerusan port Prometheus
Jalankan baris perintah berikut di shell host Anda:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
Sekarang kita dapat memvisualisasikan metrik DCGM melalui Grafana Dashboard.
- Ambil kata sandi untuk masuk ke 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 layanan Grafana
Jalankan baris perintah berikut di shell host Anda:
kubectl port-forward -n prometheus svc/$(kubectl -n prometheus get svc | grep grafana | cut -d ' ' -f 1) 8080:80 &
- Masuk ke Grafana UI
Akses layar login Grafana UI dengan cara yang sama seperti Anda mengakses Prometheus UI sebelumnya. Jika menggunakan Cloud9, pilih Preview->Preview Running Application
, lalu muncul di jendela baru. Jika menggunakan host lokal Anda atau instans EC2 dengan URL kunjungan desktop jarak jauh http://localhost:8080
. Login dengan nama pengguna admin dan kata sandi yang Anda ambil sebelumnya.
- Di panel navigasi, pilih Dashboard
- Pilih New dan impor
Kami akan mengimpor dasbor DCGM Grafana default yang dijelaskan di Dasbor Eksportir NVIDIA DCGM.
- Di lapangan
import via grafana.com
, Masuk 12239
Dan pilihlah Beban
- Pilih Prometheus sebagai sumber datanya
- Pilih impor
Anda akan melihat dasbor yang mirip dengan yang ada di tangkapan layar berikut.
Untuk menunjukkan bahwa metrik ini berbasis pod, kami akan memodifikasi Pemanfaatan GPU panel di dasbor ini.
- Pilih panel dan menu opsi (tiga titik)
- Pilih Opsi bagian dan edit Legenda bidang
- Ganti nilai di sana dengan
Pod {{pod}}
, Lalu pilih Save
Legenda sekarang menunjukkan gpu-burn
nama pod yang terkait dengan penggunaan GPU yang ditampilkan.
- Hentikan penerusan port pada layanan Grafana UI
Jalankan yang berikut ini di shell host Anda:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
Dalam postingan ini, kami mendemonstrasikan penggunaan Prometheus dan Grafana sumber terbuka yang diterapkan ke cluster EKS. Jika diinginkan, penerapan ini dapat diganti dengan Layanan Terkelola Amazon untuk Prometheus dan Grafana yang Dikelola Amazon.
Membersihkan
Untuk membersihkan sumber daya yang Anda buat, jalankan skrip berikut dari aws-do-eks
cangkang kontainer:
Kesimpulan
Dalam postingan ini, kami menggunakan NVIDIA DCGM Eksportir untuk mengumpulkan metrik GPU dan memvisualisasikannya dengan CloudWatch atau Prometheus dan Grafana. Kami mengundang Anda untuk menggunakan arsitektur yang ditunjukkan di sini untuk mengaktifkan pemantauan pemanfaatan GPU dengan NVIDIA DCGM di lingkungan AWS Anda sendiri.
Sumber daya tambahan
Tentang penulis
Amr Ragab adalah mantan Arsitek Solusi Utama, EC2 Accelerated Computing di AWS. Dia mengabdikan diri untuk membantu pelanggan menjalankan beban kerja komputasi dalam skala besar. Di waktu luangnya, ia suka bepergian dan mencari cara baru untuk mengintegrasikan teknologi ke dalam kehidupan sehari-hari.
Alex Iankoulski adalah Arsitek Solusi Utama, Machine Learning yang dikelola mandiri di AWS. Dia seorang insinyur perangkat lunak dan infrastruktur lengkap yang suka melakukan pekerjaan mendalam dan langsung. Dalam perannya, dia berfokus membantu pelanggan dengan containerisasi dan orkestrasi beban kerja ML dan AI pada layanan AWS yang didukung container. Dia juga penulis sumber terbuka melakukan kerangka kerja dan seorang kapten Docker yang suka menerapkan teknologi kontainer untuk mempercepat laju inovasi sekaligus memecahkan tantangan terbesar dunia. Selama 10 tahun terakhir, Alex telah berupaya mendemokratisasi AI dan ML, memerangi perubahan iklim, dan menjadikan perjalanan lebih aman, layanan kesehatan lebih baik, dan energi lebih cerdas.
Keita Watanabe adalah Arsitek Solusi Senior dari Frameworks ML Solutions di Amazon Web Services yang membantu mengembangkan solusi Pembelajaran Mesin Swakelola berbasis cloud terbaik di industri. Latar belakangnya adalah penelitian dan pengembangan Machine Learning. Sebelum bergabung dengan AWS, Keita bekerja di industri e-commerce. Keita memegang gelar Ph.D. dalam Sains dari Universitas Tokyo.
- Konten Bertenaga SEO & Distribusi PR. Dapatkan Amplifikasi Hari Ini.
- PlatoData.Jaringan Vertikal Generatif Ai. Berdayakan Diri Anda. Akses Di Sini.
- PlatoAiStream. Intelijen Web3. Pengetahuan Diperkuat. Akses Di Sini.
- PlatoESG. Otomotif / EV, Karbon, teknologi bersih, energi, Lingkungan Hidup, Tenaga surya, Penanganan limbah. Akses Di Sini.
- PlatoHealth. Kecerdasan Uji Coba Biotek dan Klinis. Akses Di Sini.
- ChartPrime. Tingkatkan Game Trading Anda dengan ChartPrime. Akses Di Sini.
- BlockOffset. Modernisasi Kepemilikan Offset Lingkungan. Akses Di Sini.
- Sumber: https://aws.amazon.com/blogs/machine-learning/enable-pod-based-gpu-metrics-in-amazon-cloudwatch/