Vào tháng 2022 năm XNUMX, Amazon Web Services đã bổ sung hỗ trợ các số liệu GPU NVIDIA trong Amazon CloudWatch, giúp có thể đẩy các số liệu từ Đại lý Amazon CloudWatch đến amazoncloudwatch và giám sát mã của bạn để sử dụng GPU tối ưu. Kể từ đó, tính năng này đã được tích hợp vào nhiều Hình ảnh máy Amazon (AMI) được quản lý của chúng tôi, chẳng hạn như Học sâu AMI và AMI song song của AWS. Để có được số liệu mức sử dụng GPU ở cấp phiên bản, bạn có thể sử dụng Packer hoặc Amazon ImageBuilder để khởi động AMI tùy chỉnh của riêng mình và sử dụng nó trong nhiều dịch vụ được quản lý khác nhau như Hàng loạt AWS, Dịch vụ container đàn hồi Amazon (Amazon ECS) hoặc Dịch vụ Kubernetes đàn hồi của Amazon (Amazon EKS). Tuy nhiên, đối với nhiều dịch vụ và khối lượng công việc dựa trên vùng chứa, việc nắm bắt các số liệu sử dụng ở cấp độ vùng chứa, nhóm hoặc vùng chứa tên là điều lý tưởng.
Bài đăng này nêu chi tiết cách thiết lập số liệu GPU dựa trên vùng chứa và cung cấp ví dụ về cách thu thập các số liệu này từ nhóm EKS.
Tổng quan về giải pháp
Để minh họa số liệu GPU dựa trên vùng chứa, chúng tôi tạo một cụm EKS với g5.2xlarge
trường hợp; tuy nhiên, tính năng này sẽ hoạt động với mọi dòng phiên bản tăng tốc NVIDIA được hỗ trợ.
Chúng tôi triển khai toán tử GPU NVIDIA để cho phép sử dụng tài nguyên GPU và Nhà xuất khẩu NVIDIA DCGM để kích hoạt tính năng thu thập số liệu GPU. Sau đó chúng ta khám phá hai kiến trúc. Cái đầu tiên kết nối các số liệu từ NVIDIA DCGM Importer với CloudWatch thông qua tác nhân CloudWatch, như minh họa trong sơ đồ sau.
Kiến trúc thứ hai (xem sơ đồ sau) kết nối các số liệu từ DCGM Importer với Prometheus, sau đó chúng tôi sử dụng một grafana bảng điều khiển để trực quan hóa các số liệu đó.
Điều kiện tiên quyết
Để đơn giản hóa việc sao chép toàn bộ ngăn xếp từ bài đăng này, chúng tôi sử dụng một vùng chứa đã cài đặt tất cả công cụ cần thiết (aws cli, eksctl, helm, v.v.). Để nhân bản dự án container từ GitHub, bạn sẽ cần git. Để xây dựng và chạy container, bạn sẽ cần phu bến tàu. Để triển khai kiến trúc, bạn sẽ cần Thông tin đăng nhập AWS. Để cho phép truy cập vào các dịch vụ Kubernetes bằng cách chuyển tiếp cổng, bạn cũng sẽ cần kubectl.
Những điều kiện tiên quyết này có thể được cài đặt trên máy cục bộ của bạn, Ví dụ EC2 với DCV ĐẸP, hoặc là Đám mây AWS9. Trong bài đăng này, chúng tôi sẽ sử dụng một c5.2xlarge
Phiên bản Cloud9 có 40GB
dung lượng lưu trữ cục bộ. Khi sử dụng Cloud9, vui lòng tắt thông tin đăng nhập tạm thời do AWS quản lý bằng cách truy cập Cloud9->Preferences->AWS Settings
như được hiển thị trên ảnh chụp màn hình bên dưới.
Xây dựng và chạy vùng chứa aws-do-eks
Mở shell terminal trong môi trường ưa thích của bạn và chạy các lệnh sau:
git clone https://github.com/aws-samples/aws-do-eks
cd aws-do-eks
./build.sh
./run.sh
./exec.sh
Kết quả là như sau:
Bây giờ bạn có một shell trong môi trường container có tất cả các công cụ cần thiết để hoàn thành các tác vụ bên dưới. Chúng tôi sẽ gọi nó là “aws-do-eks shell”. Bạn sẽ chạy các lệnh trong các phần sau trong shell này, trừ khi có hướng dẫn cụ thể khác.
Tạo cụm EKS với một nhóm nút
Nhóm này bao gồm dòng phiên bản GPU mà bạn chọn; trong ví dụ này, chúng tôi sử dụng g5.2xlarge
loại ví dụ.
Sản phẩm dự án aws-do-eks đi kèm với một bộ sưu tập các cấu hình cụm. Bạn có thể đặt cấu hình cụm mong muốn của mình chỉ bằng một thay đổi cấu hình.
- Trong vỏ container, chạy
./env-config.sh
và sau đó thiết lập CONF=conf/eksctl/yaml/eks-gpu-g5.yaml
- Để xác minh cấu hình cụm, hãy chạy
./eks-config.sh
Bạn sẽ thấy bảng kê khai cụm sau:
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
- Để tạo cụm, hãy chạy lệnh sau trong vùng chứa
Kết quả như sau:
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
- Để xác minh rằng cụm của bạn đã được tạo thành công, hãy chạy lệnh sau
kubectl get nodes -L node.kubernetes.io/instance-type
Đầu ra tương tự như sau:
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
Trong ví dụ này, chúng tôi có một phiên bản m5.xlarge và một phiên bản g5.2xlarge trong cụm của chúng tôi; do đó, chúng ta thấy hai nút được liệt kê ở đầu ra trước đó.
Trong quá trình tạo cụm, plugin thiết bị NVIDIA sẽ được cài đặt. Bạn sẽ cần xóa nó sau khi tạo cụm vì chúng tôi sẽ sử dụng Nhà điều hành GPU NVIDIA thay thế.
- Xóa plugin bằng lệnh sau
kubectl -n kube-system delete daemonset nvidia-device-plugin-daemonset
Chúng tôi nhận được kết quả sau:
daemonset.apps "nvidia-device-plugin-daemonset" deleted
Cài đặt kho lưu trữ NVIDIA Helm
Cài đặt repo NVIDIA Helm bằng lệnh sau:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
Triển khai trình xuất DCGM với Trình điều hành GPU NVIDIA
Để triển khai trình xuất DCGM, hãy hoàn thành các bước sau:
- Chuẩn bị cấu hình số liệu GPU của nhà xuất DCGM
curl https://raw.githubusercontent.com/NVIDIA/dcgm-exporter/main/etc/dcp-metrics-included.csv > dcgm-metrics.csv
Bạn có tùy chọn để chỉnh sửa dcgm-metrics.csv
tài liệu. Bạn có thể thêm hoặc xóa bất kỳ số liệu nào nếu cần.
- Tạo không gian tên gpu-operator và Bản đồ cấu hình của nhà xuất khẩu DCGM
kubectl create namespace gpu-operator && /
kubectl create configmap metrics-config -n gpu-operator --from-file=dcgm-metrics.csv
Kết quả như sau:
namespace/gpu-operator created
configmap/metrics-config created
- Áp dụng toán tử GPU cho cụm 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
Kết quả như sau:
NAME: gpu-operator-1684795140
LAST DEPLOYED: Day Month Date HH:mm:ss YYYY
NAMESPACE: gpu-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
- Xác nhận rằng nhóm xuất DCGM đang chạy
kubectl -n gpu-operator get pods | grep dcgm
Kết quả như sau:
nvidia-dcgm-exporter-lkmfr 1/1 Running 0 1m
Nếu bạn kiểm tra nhật ký, bạn sẽ thấy “Starting webserver”
thông điệp:
kubectl -n gpu-operator logs -f $(kubectl -n gpu-operator get pods | grep dcgm | cut -d ' ' -f 1)
Kết quả như sau:
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"
Trình xuất NVIDIA DCGM hiển thị điểm cuối số liệu Prometheus, điểm cuối này có thể được tác nhân CloudWatch sử dụng. Để xem điểm cuối, sử dụng lệnh sau:
kubectl -n gpu-operator get services | grep dcgm
Chúng tôi nhận được kết quả sau:
nvidia-dcgm-exporter ClusterIP 10.100.183.207 <none> 9400/TCP 10m
- Để tạo ra một số mức sử dụng GPU, chúng tôi triển khai một nhóm chạy ghi gpu nhị phân
kubectl apply -f https://raw.githubusercontent.com/aws-samples/aws-do-eks/main/Container-Root/eks/deployment/gpu-metrics/gpu-burn-deployment.yaml
Kết quả như sau:
deployment.apps/gpu-burn created
Việc triển khai này sử dụng một GPU duy nhất để tạo ra mô hình sử dụng 100% liên tục trong 20 giây, sau đó là mức sử dụng 0% trong 20 giây.
- Để đảm bảo điểm cuối hoạt động, bạn có thể chạy vùng chứa tạm thời sử dụng Curl để đọc nội dung của
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
Chúng tôi nhận được kết quả sau:
# 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
Định cấu hình và triển khai tác nhân CloudWatch
Để đặt cấu hình và triển khai tác nhân CloudWatch, hãy hoàn thành các bước sau:
- Tải xuống tệp YAML và chỉnh sửa nó
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
Tập tin chứa một cwagent configmap
và prometheus configmap
. Đối với bài đăng này, chúng tôi chỉnh sửa cả hai.
- Chỉnh sửa
prometheus-eks.yaml
hồ sơ
Mở prometheus-eks.yaml
tập tin trong trình soạn thảo yêu thích của bạn và thay thế cwagentconfig.json
phần có nội dung sau:
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 } }
- Trong tạp chí
prometheus
config, hãy thêm định nghĩa công việc sau cho nhà xuất khẩu 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
- Lưu tập tin và áp dụng
cwagent-dcgm
cấu hình cho cụm của bạn
kubectl apply -f ./prometheus-eks.yaml
Chúng tôi nhận được kết quả sau:
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
- Xác nhận rằng nhóm tác nhân CloudWatch đang chạy
kubectl -n amazon-cloudwatch get pods
Chúng tôi nhận được kết quả sau:
NAME READY STATUS RESTARTS AGE
cwagent-prometheus-7dfd69cc46-s4cx7 1/1 Running 0 15m
Trực quan hóa số liệu trên bảng điều khiển CloudWatch
Để trực quan hóa các số liệu trong CloudWatch, hãy hoàn thành các bước sau:
- Trên bảng điều khiển CloudWatch, bên dưới Metrics trong ngăn điều hướng, chọn Tất cả các chỉ số
- Trong tạp chí không gian tên tùy chỉnh phần, hãy chọn mục nhập mới cho ContainerInsights/Prometheus
Để biết thêm thông tin về ContainerInsights/Prometheus không gian tên, tham khảo Quét các nguồn Prometheus bổ sung và nhập các số liệu đó.
- Đi sâu vào tên chỉ số và chọn
DCGM_FI_DEV_GPU_UTIL
- trên số liệu đồ thị tab, thiết lập Giai đoạn đến 5 giây
- Đặt khoảng thời gian làm mới thành 10 giây
Bạn sẽ thấy các số liệu được thu thập từ nhà xuất khẩu DCGM để trực quan hóa gpu-burn
bật và tắt mẫu sau mỗi 20 giây.
trên Xem tab, bạn có thể xem dữ liệu, bao gồm tên nhóm cho từng chỉ số.
Siêu dữ liệu API EKS đã được kết hợp với dữ liệu chỉ số DCGM, tạo ra chỉ số GPU dựa trên nhóm được cung cấp.
Điều này kết thúc phương pháp đầu tiên xuất số liệu DCGM sang CloudWatch thông qua tác nhân CloudWatch.
Trong phần tiếp theo, chúng tôi định cấu hình kiến trúc thứ hai để xuất số liệu DCGM sang Prometheus và trực quan hóa chúng bằng Grafana.
Sử dụng Prometheus và Grafana để trực quan hóa số liệu GPU từ DCGM
Hoàn thành các bước sau:
- Thêm biểu đồ lãnh đạo cộng đồng Prometheus
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
Biểu đồ này triển khai cả Prometheus và Grafana. Chúng ta cần thực hiện một số chỉnh sửa trên biểu đồ trước khi chạy lệnh cài đặt.
- Lưu các giá trị cấu hình biểu đồ vào một tệp trong
/tmp
helm inspect values prometheus-community/kube-prometheus-stack > /tmp/kube-prometheus-stack.values
- Chỉnh sửa tập tin cấu hình char
Chỉnh sửa tập tin đã lưu (/tmp/kube-prometheus-stack.values
) và đặt tùy chọn sau bằng cách tìm tên cài đặt và đặt giá trị:
prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
- Thêm Bản đồ cấu hình sau vào
additionalScrapeConfigs
phần
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
- Triển khai ngăn xếp Prometheus với các giá trị được cập nhật
helm install prometheus-community/kube-prometheus-stack
--create-namespace --namespace prometheus
--generate-name
--values /tmp/kube-prometheus-stack.values
Chúng tôi nhận được kết quả sau:
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.
- Xác nhận rằng nhóm Prometheus đang chạy
kubectl get pods -n prometheus
Chúng tôi nhận được kết quả sau:
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
Vỏ Prometheus và Grafana nằm trong Running
nhà nước.
Tiếp theo, chúng tôi xác thực rằng các chỉ số DCGM đang được chuyển vào Prometheus.
- Chuyển tiếp giao diện người dùng Prometheus
Có nhiều cách khác nhau để hiển thị giao diện người dùng Prometheus đang chạy trong EKS cho các yêu cầu có nguồn gốc bên ngoài cụm. Chúng tôi sẽ sử dụng kubectl port-forwarding
. Cho đến nay, chúng ta đã thực hiện các lệnh bên trong aws-do-eks
thùng đựng hàng. Để truy cập dịch vụ Prometheus đang chạy trong cụm, chúng tôi sẽ tạo một đường hầm từ máy chủ. Đây là aws-do-eks
container đang chạy bằng cách thực thi lệnh sau bên ngoài container, trong shell terminal mới trên máy chủ. Chúng tôi sẽ gọi đây là “vỏ máy chủ”.
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 &
Trong khi quá trình chuyển tiếp cổng đang chạy, chúng tôi có thể truy cập giao diện người dùng Prometheus từ máy chủ như được mô tả bên dưới.
- Mở giao diện người dùng Prometheus
- Nếu bạn đang sử dụng Cloud9, vui lòng điều hướng đến
Preview->Preview Running Application
để mở giao diện người dùng Prometheus trong tab bên trong IDE Cloud9, sau đó nhấp vào biểu tượng ở góc trên bên phải của tab để bật ra trong cửa sổ mới.
- Nếu bạn đang sử dụng máy chủ cục bộ hoặc được kết nối với phiên bản EC2 qua máy tính để bàn từ xa, hãy mở trình duyệt và truy cập URL
http://localhost:8080
.
- đăng ký hạng mục thi
DCGM
để xem số liệu DCGM đang chảy vào Prometheus
- Chọn
DCGM_FI_DEV_GPU_UTIL
, chọn Thực hiện, sau đó điều hướng đến Đồ thị tab để xem mô hình sử dụng GPU dự kiến
- Dừng quá trình chuyển tiếp cổng Prometheus
Chạy dòng lệnh sau trong shell máy chủ của bạn:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
Bây giờ chúng ta có thể hình dung các số liệu DCGM thông qua Bảng điều khiển Grafana.
- Lấy lại mật khẩu để đăng nhập vào 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
- Chuyển tiếp dịch vụ Grafana
Chạy dòng lệnh sau trong shell máy chủ của bạn:
kubectl port-forward -n prometheus svc/$(kubectl -n prometheus get svc | grep grafana | cut -d ' ' -f 1) 8080:80 &
- Đăng nhập vào giao diện người dùng Grafana
Truy cập màn hình đăng nhập Giao diện người dùng Grafana giống như cách bạn truy cập Giao diện người dùng Prometheus trước đó. Nếu sử dụng Cloud9, hãy chọn Preview->Preview Running Application
, sau đó bật ra trong một cửa sổ mới. Nếu sử dụng máy chủ cục bộ của bạn hoặc phiên bản EC2 có URL truy cập máy tính từ xa http://localhost:8080
. Đăng nhập bằng tên người dùng quản trị viên và mật khẩu bạn đã lấy trước đó.
- Trong ngăn dẫn hướng, chọn Biểu đồ
- Chọn Mới và Nhập khẩu
Chúng tôi sẽ nhập bảng điều khiển DCGM Grafana mặc định được mô tả trong Bảng điều khiển nhà xuất khẩu NVIDIA DCGM.
- Trên đồng ruộng
import via grafana.com
, đi vào 12239
Và chọn Phụ tải
- Chọn Prometheus là nguồn dữ liệu
- Chọn Nhập khẩu
Bạn sẽ thấy một trang tổng quan tương tự như trong ảnh chụp màn hình sau.
Để chứng minh rằng các số liệu này dựa trên nhóm, chúng tôi sẽ sửa đổi Sử dụng GPU ngăn trong bảng điều khiển này.
- Chọn khung và menu tùy chọn (ba dấu chấm)
- Mở rộng Các lựa chọn phần và chỉnh sửa Huyền thoại lĩnh vực
- Thay thế giá trị ở đó bằng
Pod {{pod}}
, sau đó chọn Lưu
Truyền thuyết bây giờ cho thấy gpu-burn
tên nhóm được liên kết với việc sử dụng GPU được hiển thị.
- Dừng chuyển tiếp cổng dịch vụ giao diện người dùng Grafana
Chạy phần sau trong Shell máy chủ của bạn:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
Trong bài đăng này, chúng tôi đã trình diễn cách sử dụng Prometheus và Grafana nguồn mở được triển khai cho cụm EKS. Nếu muốn, việc triển khai này có thể được thay thế bằng Dịch vụ được quản lý của Amazon dành cho Prometheus và Grafana do Amazon quản lý.
Làm sạch
Để dọn sạch các tài nguyên bạn đã tạo, hãy chạy tập lệnh sau từ aws-do-eks
vỏ thùng chứa:
Kết luận
Trong bài đăng này, chúng tôi đã sử dụng Trình xuất NVIDIA DCGM để thu thập số liệu GPU và trực quan hóa chúng bằng CloudWatch hoặc Prometheus và Grafana. Chúng tôi mời bạn sử dụng các kiến trúc được trình bày ở đây để cho phép giám sát việc sử dụng GPU bằng NVIDIA DCGM trong môi trường AWS của riêng bạn.
Tài nguyên bổ sung
Giới thiệu về tác giả
Amr Ragab là cựu Kiến trúc sư giải pháp chính, Điện toán tăng tốc EC2 tại AWS. Ông tận tâm giúp đỡ khách hàng chạy khối lượng công việc tính toán trên quy mô lớn. Khi rảnh rỗi, anh thích đi du lịch và tìm kiếm những cách mới để tích hợp công nghệ vào cuộc sống hàng ngày.
Alex Iankoulski là Kiến trúc sư giải pháp chính, Máy học tự quản lý tại AWS. Anh ấy là một kỹ sư cơ sở hạ tầng và phần mềm toàn diện, thích làm những công việc thực tế và sâu sắc. Trong vai trò của mình, anh tập trung vào việc hỗ trợ khách hàng sắp xếp và điều phối khối lượng công việc ML và AI trên các dịch vụ AWS chạy bằng container. Ông cũng là tác giả của nguồn mở làm khuôn khổ và một thuyền trưởng Docker yêu thích ứng dụng công nghệ container để đẩy nhanh tốc độ đổi mới đồng thời giải quyết những thách thức lớn nhất của thế giới. Trong 10 năm qua, Alex đã nỗ lực dân chủ hóa AI và ML, chống biến đổi khí hậu và giúp việc đi lại an toàn hơn, chăm sóc sức khỏe tốt hơn và năng lượng thông minh hơn.
Keita Watanabe là Kiến trúc sư giải pháp cấp cao về Giải pháp máy học khung tại Amazon Web Services, nơi ông giúp phát triển các giải pháp Machine Learning tự quản lý dựa trên đám mây tốt nhất trong ngành. Nền tảng của anh ấy là nghiên cứu và phát triển Machine Learning. Trước khi gia nhập AWS, Keita đã làm việc trong ngành thương mại điện tử. Keita có bằng tiến sĩ. về Khoa học của Đại học Tokyo.
- Phân phối nội dung và PR được hỗ trợ bởi SEO. Được khuếch đại ngay hôm nay.
- PlatoData.Network Vertical Generative Ai. Trao quyền cho chính mình. Truy cập Tại đây.
- PlatoAiStream. Thông minh Web3. Kiến thức khuếch đại. Truy cập Tại đây.
- Trung tâmESG. Ô tô / Xe điện, Than đá, công nghệ sạch, Năng lượng, Môi trường Hệ mặt trời, Quản lý chất thải. Truy cập Tại đây.
- PlatoSức khỏe. Tình báo thử nghiệm lâm sàng và công nghệ sinh học. Truy cập Tại đây.
- ChartPrime. Nâng cao trò chơi giao dịch của bạn với ChartPrime. Truy cập Tại đây.
- BlockOffsets. Hiện đại hóa quyền sở hữu bù đắp môi trường. Truy cập Tại đây.
- nguồn: https://aws.amazon.com/blogs/machine-learning/enable-pod-based-gpu-metrics-in-amazon-cloudwatch/