در فوریه 2022، خدمات وب آمازون اضافه شد پشتیبانی از معیارهای NVIDIA GPU در آمازون CloudWatch، فشار دادن معیارها را از عامل آمازون CloudWatch به CloudWatch آمازون و کد خود را برای استفاده بهینه از GPU نظارت کنید. از آن زمان، این ویژگی در بسیاری از تصاویر ماشین آمازون (AMI) مدیریت شده ما، مانند تصاویر ادغام شده است یادگیری عمیق AMI و AWS ParallelCluster AMI. برای به دست آوردن معیارهای سطح نمونه استفاده از GPU، می توانید از Packer یا ImageBuilder آمازون برای راه اندازی AMI سفارشی خود و استفاده از آن در ارائه خدمات مدیریت شده مختلف مانند استفاده کنید. دسته AWS, سرویس کانتینر الاستیک آمازون (Amazon ECS)، یا سرویس الاستیک کوبرنتز آمازون (Amazon EKS). با این حال، برای بسیاری از خدمات و بارهای کاری مبتنی بر کانتینر، ثبت معیارهای استفاده در سطح ظرف، غلاف یا فضای نام ایدهآل است.
این پست نحوه تنظیم معیارهای GPU مبتنی بر کانتینر را شرح میدهد و نمونهای از جمعآوری این معیارها از EKS pods را ارائه میدهد.
بررسی اجمالی راه حل
برای نشان دادن معیارهای GPU مبتنی بر کانتینر، یک خوشه EKS با آن ایجاد میکنیم g5.2xlarge
موارد؛ با این حال، این با هر خانواده نمونه شتابدهنده NVIDIA پشتیبانی میشود.
ما اپراتور NVIDIA GPU را برای فعال کردن استفاده از منابع GPU و صادرکننده NVIDIA DCGM برای فعال کردن مجموعه معیارهای GPU سپس دو معماری را بررسی می کنیم. اولین مورد معیارهای NVIDIA DCGM Exporter را از طریق یک عامل CloudWatch به CloudWatch متصل می کند، همانطور که در نمودار زیر نشان داده شده است.
معماری دوم (نمودار زیر را ببینید) معیارهای DCGM Exporter را به هم متصل می کند تیتان فرزند پاپتوس، سپس از a استفاده می کنیم گرافانا داشبورد برای تجسم آن معیارها.
پیش نیازها
برای ساده سازی بازتولید کل پشته از این پست، از ظرفی استفاده می کنیم که تمام ابزارهای مورد نیاز (aws cli، eksctl، helm، و غیره) از قبل نصب شده است. به منظور شبیه سازی پروژه کانتینر از GitHub، شما نیاز خواهید داشت دستگاه گوارش. برای ساخت و اجرای کانتینر، شما نیاز دارید کارگر بارانداز. برای استقرار معماری، شما نیاز دارید اعتبارنامه AWS. برای فعال کردن دسترسی به خدمات Kubernetes با استفاده از پورت فورواردینگ، شما نیز نیاز دارید کوبکتل.
این پیش نیازها را می توان بر روی دستگاه محلی شما نصب کرد، نمونه EC2 با DCV خوب، یا AWS Cloud9. در این پست از a استفاده خواهیم کرد c5.2xlarge
نمونه Cloud9 با a 40GB
حجم ذخیره سازی محلی هنگام استفاده از Cloud9، لطفاً اعتبارنامههای موقت مدیریت شده AWS را با مراجعه به آن غیرفعال کنید Cloud9->Preferences->AWS Settings
همانطور که در تصویر زیر نشان داده شده است.
کانتینر aws-do-eks را بسازید و اجرا کنید
یک پوسته ترمینال را در محیط دلخواه خود باز کنید و دستورات زیر را اجرا کنید:
git clone https://github.com/aws-samples/aws-do-eks
cd aws-do-eks
./build.sh
./run.sh
./exec.sh
نتیجه به شرح زیر است:
اکنون شما یک پوسته در یک محیط کانتینر دارید که تمام ابزارهای مورد نیاز برای تکمیل وظایف زیر را دارد. ما از آن به عنوان "پوسته aws-do-eks" یاد خواهیم کرد. شما دستورات را در بخش های زیر در این پوسته اجرا خواهید کرد، مگر اینکه به طور خاص دستور دیگری داده شده باشد.
یک خوشه EKS با یک گروه گره ایجاد کنید
این گروه شامل یک خانواده نمونه GPU به انتخاب شما است. در این مثال از g5.2xlarge
نوع نمونه
La پروژه aws-do-eks همراه با مجموعه ای از تنظیمات خوشه. شما می توانید پیکربندی خوشه مورد نظر خود را با یک تغییر پیکربندی تنظیم کنید.
- در پوسته ظرف، اجرا کنید
./env-config.sh
و سپس تنظیم کنید CONF=conf/eksctl/yaml/eks-gpu-g5.yaml
- برای تأیید پیکربندی کلاستر، اجرا کنید
./eks-config.sh
باید مانیفست خوشه زیر را ببینید:
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
- برای ایجاد کلاستر، دستور زیر را در کانتینر اجرا کنید
خروجی به صورت زیر است:
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
- برای اطمینان از اینکه خوشه شما با موفقیت ایجاد شده است، دستور زیر را اجرا کنید
kubectl get nodes -L node.kubernetes.io/instance-type
خروجی مشابه موارد زیر است:
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
در این مثال، ما یک نمونه m5.xlarge و یک نمونه g5.2xlarge در کلاستر خود داریم. بنابراین، ما دو گره را در خروجی قبلی می بینیم.
در طول فرآیند ایجاد کلاستر، پلاگین دستگاه NVIDIA نصب خواهد شد. پس از ایجاد خوشه باید آن را حذف کنید زیرا ما از آن استفاده خواهیم کرد اپراتور NVIDIA GPU به جای آن.
- با دستور زیر افزونه را پاک کنید
kubectl -n kube-system delete daemonset nvidia-device-plugin-daemonset
خروجی زیر را دریافت می کنیم:
daemonset.apps "nvidia-device-plugin-daemonset" deleted
مخزن NVIDIA Helm را نصب کنید
مخزن NVIDIA Helm را با دستور زیر نصب کنید:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
صادرکننده DCGM را با اپراتور NVIDIA GPU اجرا کنید
برای استقرار صادرکننده DCGM، مراحل زیر را انجام دهید:
- پیکربندی معیارهای GPU صادرکننده DCGM را آماده کنید
curl https://raw.githubusercontent.com/NVIDIA/dcgm-exporter/main/etc/dcp-metrics-included.csv > dcgm-metrics.csv
شما این امکان را دارید که آن را ویرایش کنید dcgm-metrics.csv
فایل. در صورت نیاز می توانید هر معیاری را اضافه یا حذف کنید.
- فضای نام اپراتور gpu و صادرکننده DCGM ConfigMap را ایجاد کنید
kubectl create namespace gpu-operator && /
kubectl create configmap metrics-config -n gpu-operator --from-file=dcgm-metrics.csv
خروجی به صورت زیر است:
namespace/gpu-operator created
configmap/metrics-config created
- عملگر GPU را در خوشه 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
خروجی به صورت زیر است:
NAME: gpu-operator-1684795140
LAST DEPLOYED: Day Month Date HH:mm:ss YYYY
NAMESPACE: gpu-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
- تأیید کنید که غلاف صادرکننده DCGM در حال اجرا است
kubectl -n gpu-operator get pods | grep dcgm
خروجی به صورت زیر است:
nvidia-dcgm-exporter-lkmfr 1/1 Running 0 1m
اگر سیاههها را بررسی کنید، باید آن را ببینید “Starting webserver”
پیام:
kubectl -n gpu-operator logs -f $(kubectl -n gpu-operator get pods | grep dcgm | cut -d ' ' -f 1)
خروجی به صورت زیر است:
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 یک نقطه پایانی متریک Prometheus را نشان می دهد که می تواند توسط عامل CloudWatch جذب شود. برای دیدن نقطه پایانی از دستور زیر استفاده کنید:
kubectl -n gpu-operator get services | grep dcgm
خروجی زیر را دریافت می کنیم:
nvidia-dcgm-exporter ClusterIP 10.100.183.207 <none> 9400/TCP 10m
- برای تولید مقداری استفاده از GPU، یک پاد را مستقر میکنیم که آن را اجرا میکند gpu-burn دوتایی
kubectl apply -f https://raw.githubusercontent.com/aws-samples/aws-do-eks/main/Container-Root/eks/deployment/gpu-metrics/gpu-burn-deployment.yaml
خروجی به صورت زیر است:
deployment.apps/gpu-burn created
این استقرار از یک واحد پردازش گرافیکی برای تولید یک الگوی پیوسته استفاده ۱۰۰ درصدی به مدت ۲۰ ثانیه و سپس استفاده از صفر درصد برای ۲۰ ثانیه استفاده میکند.
- برای اطمینان از کارکرد نقطه پایانی، میتوانید یک ظرف موقت اجرا کنید که از curl برای خواندن محتوای آن استفاده میکند
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
خروجی زیر را دریافت می کنیم:
# 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
عامل CloudWatch را پیکربندی و استقرار دهید
برای پیکربندی و استقرار عامل CloudWatch، مراحل زیر را انجام دهید:
- فایل YAML را دانلود کرده و آن را ویرایش کنید
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
فایل حاوی الف است cwagent configmap
و یک prometheus configmap
. برای این پست، ما هر دو را ویرایش می کنیم.
- ویرایش
prometheus-eks.yaml
پرونده
باز کردن prometheus-eks.yaml
را در ویرایشگر مورد علاقه خود قرار دهید و جایگزین کنید cwagentconfig.json
بخش با محتوای زیر:
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 } }
- در
prometheus
بخش پیکربندی، تعریف شغلی زیر را برای صادرکننده 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
- فایل را ذخیره کنید و آن را اعمال کنید
cwagent-dcgm
پیکربندی به خوشه شما
kubectl apply -f ./prometheus-eks.yaml
خروجی زیر را دریافت می کنیم:
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
- تأیید کنید که غلاف عامل CloudWatch در حال اجرا است
kubectl -n amazon-cloudwatch get pods
خروجی زیر را دریافت می کنیم:
NAME READY STATUS RESTARTS AGE
cwagent-prometheus-7dfd69cc46-s4cx7 1/1 Running 0 15m
معیارها را در کنسول CloudWatch تجسم کنید
برای تجسم معیارها در CloudWatch، مراحل زیر را انجام دهید:
- در کنسول CloudWatch، در زیر متریک در قسمت ناوبری، را انتخاب کنید تمام معیارها
- در فضاهای نام سفارشی بخش، ورودی جدید را انتخاب کنید ContainerInsights/Prometheus
برای کسب اطلاعات بیشتر در مورد ContainerInsights/Prometheus فضای نام، مراجعه کنید خراش دادن منابع اضافی Prometheus و وارد کردن آن معیارها.
- به نام های متریک دقت کنید و انتخاب کنید
DCGM_FI_DEV_GPU_UTIL
- بر معیارهای نموداری برگه، مجموعه دوره زمانی به ثانیه 5
- فاصله بازخوانی را روی 10 ثانیه تنظیم کنید
معیارهای جمعآوریشده از صادرکننده DCGM را خواهید دید که آن را تجسم میکنند gpu-burn
هر 20 ثانیه الگو را روشن و خاموش کنید.
بر مرور کردن برگه، می توانید داده ها، از جمله نام غلاف برای هر متریک را ببینید.
فراداده EKS API با داده های معیارهای DCGM ترکیب شده است که منجر به ارائه معیارهای GPU مبتنی بر pod می شود.
این اولین رویکرد صادرات معیارهای DCGM به CloudWatch از طریق عامل CloudWatch را به پایان میرساند.
در بخش بعدی، معماری دوم را پیکربندی میکنیم که معیارهای DCGM را به Prometheus صادر میکند و آنها را با Grafana تجسم میکنیم.
از Prometheus و Grafana برای تجسم معیارهای GPU از DCGM استفاده کنید
مراحل زیر را انجام دهید:
- نمودار فرمان جامعه Prometheus را اضافه کنید
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
این نمودار هم پرومتئوس و هم گرافانا را به کار می گیرد. قبل از اجرای دستور install باید تغییراتی در نمودار انجام دهیم.
- مقادیر پیکربندی نمودار را در یک فایل ذخیره کنید
/tmp
helm inspect values prometheus-community/kube-prometheus-stack > /tmp/kube-prometheus-stack.values
- فایل پیکربندی char را ویرایش کنید
ویرایش فایل ذخیره شده (/tmp/kube-prometheus-stack.values
) و با جستجوی نام تنظیمات و تنظیم مقدار، گزینه زیر را تنظیم کنید:
prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
- ConfigMap زیر را به
additionalScrapeConfigs
بخش
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
- پشته Prometheus را با مقادیر به روز شده مستقر کنید
helm install prometheus-community/kube-prometheus-stack
--create-namespace --namespace prometheus
--generate-name
--values /tmp/kube-prometheus-stack.values
خروجی زیر را دریافت می کنیم:
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.
- تأیید کنید که غلاف های Prometheus در حال اجرا هستند
kubectl get pods -n prometheus
خروجی زیر را دریافت می کنیم:
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
غلاف های پرومتئوس و گرافانا در Running
دولت است.
در مرحله بعد، ما تأیید میکنیم که معیارهای DCGM در پرومتئوس جریان دارند.
- پورت فوروارد رابط کاربری Prometheus
راههای مختلفی برای افشای رابط کاربری Prometheus در حال اجرا در EKS در برابر درخواستهای خارج از خوشه وجود دارد. ما استفاده خواهیم کرد kubectl port-forwarding
. تا کنون، ما دستورات را در داخل اجرا میکنیم aws-do-eks
ظرف برای دسترسی به سرویس Prometheus در حال اجرا در کلاستر، یک تونل از میزبان ایجاد می کنیم. اینجا aws-do-eks
Container با اجرای دستور زیر در خارج از کانتینر، در پوسته ترمینال جدید روی میزبان اجرا می شود. ما از آن به عنوان "پوسته میزبان" یاد خواهیم کرد.
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 &
در حالی که فرآیند ارسال پورت در حال اجرا است، میتوانیم به رابط کاربری Prometheus از میزبان همانطور که در زیر توضیح داده شده است دسترسی پیدا کنیم.
- رابط کاربری Prometheus را باز کنید
- اگر از Cloud9 استفاده می کنید، لطفاً به آن بروید
Preview->Preview Running Application
برای باز کردن رابط کاربری Prometheus در یک برگه در داخل Cloud9 IDE، سپس روی نماد در گوشه سمت راست بالای برگه برای باز شدن در یک پنجره جدید.
- اگر از هاست محلی خود استفاده می کنید یا از طریق دسکتاپ راه دور به یک نمونه EC2 متصل هستید، یک مرورگر را باز کنید و از URL بازدید کنید.
http://localhost:8080
.
- وارد
DCGM
برای دیدن معیارهای DCGM که در پرومتئوس جریان دارند
- انتخاب کنید
DCGM_FI_DEV_GPU_UTIL
، انتخاب کنید اجرا کردنو سپس به مسیر بروید گراف برای مشاهده الگوی استفاده از GPU مورد انتظار را برگه بزنید
- فرآیند ارسال پورت Prometheus را متوقف کنید
خط فرمان زیر را در پوسته میزبان خود اجرا کنید:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
اکنون میتوانیم معیارهای DCGM را از طریق داشبورد Grafana تجسم کنیم.
- پسورد ورود به رابط کاربری Grafana را بازیابی کنید
kubectl -n prometheus get secret $(kubectl -n prometheus get secrets | grep grafana | cut -d ' ' -f 1) -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
- پورت فوروارد سرویس Grafana
خط فرمان زیر را در پوسته میزبان خود اجرا کنید:
kubectl port-forward -n prometheus svc/$(kubectl -n prometheus get svc | grep grafana | cut -d ' ' -f 1) 8080:80 &
- وارد رابط کاربری Grafana شوید
به همان روشی که قبلاً به رابط کاربری Prometheus دسترسی داشتید، به صفحه ورود به سیستم Grafana UI دسترسی پیدا کنید. اگر از Cloud9 استفاده می کنید، را انتخاب کنید Preview->Preview Running Application
، سپس در یک پنجره جدید بیرون بیایید. اگر از هاست محلی خود یا نمونه EC2 با دسکتاپ راه دور استفاده می کنید، به URL مراجعه کنید http://localhost:8080
. با نام کاربری admin و رمز عبوری که قبلاً بازیابی کرده اید وارد شوید.
- در صفحه پیمایش، را انتخاب کنید داشبورد
- را انتخاب کنید جدید و وارد كردن
ما میخواهیم داشبورد پیشفرض DCGM Grafana را وارد کنیم داشبورد صادرکننده NVIDIA DCGM.
- در زمینه
import via grafana.com
، وارد 12239
و انتخاب کنید بار
- را انتخاب کنید تیتان فرزند پاپتوس به عنوان منبع داده
- را انتخاب کنید وارد كردن
داشبوردی مشابه آنچه در تصویر زیر مشاهده می کنید.
برای نشان دادن اینکه این معیارها مبتنی بر غلاف هستند، میخواهیم آن را اصلاح کنیم استفاده از GPU در این داشبورد قرار دهید.
- پنجره و منوی گزینه ها را انتخاب کنید (سه نقطه)
- گسترش گزینه بخش و ویرایش کنید افسانه رشته
- مقدار آنجا را با
Pod {{pod}}
، پس از آن را انتخاب کنید ذخیره
افسانه در حال حاضر نشان می دهد gpu-burn
نام pod مرتبط با استفاده از GPU نمایش داده شده.
- انتقال پورت سرویس رابط کاربری Grafana را متوقف کنید
موارد زیر را در پوسته میزبان خود اجرا کنید:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
در این پست، استفاده از منبع باز Prometheus و Grafana را در خوشه EKS نشان دادیم. در صورت تمایل، این استقرار را می توان با آن جایگزین کرد سرویس مدیریت آمازون برای Prometheus و آمازون گرافانا را مدیریت کرد.
پاک کردن
برای پاکسازی منابعی که ایجاد کردید، اسکریپت زیر را از قسمت اجرا کنید aws-do-eks
پوسته ظرف:
نتیجه
در این پست، ما از NVIDIA DCGM Exporter برای جمعآوری معیارهای GPU و تجسم آنها با CloudWatch یا Prometheus و Grafana استفاده کردیم. ما از شما دعوت می کنیم که از معماری های نشان داده شده در اینجا برای فعال کردن نظارت بر استفاده از GPU با NVIDIA DCGM در محیط AWS خود استفاده کنید.
منابع اضافی
درباره نویسندگان
عمرو رجب معمار سابق راه حل های اصلی، EC2 Accelerated Computing در AWS است. او وقف کمک به مشتریان برای اجرای بارهای کاری محاسباتی در مقیاس است. در اوقات فراغت، او دوست دارد سفر کند و راههای جدیدی برای ادغام فناوری در زندگی روزمره بیابد.
الکس ایانکولسکی یک معمار راه حل های اصلی، یادگیری ماشین خود مدیریت در AWS است. او یک مهندس نرم افزار و زیرساخت کامل است که دوست دارد کارهای عمیق و عملی انجام دهد. در نقش خود، او بر کمک به مشتریان با کانتینریسازی و هماهنگسازی بارهای کاری ML و AI در سرویسهای AWS با کانتینر تمرکز میکند. او همچنین نویسنده منبع باز است انجام چارچوب و یک کاپیتان Docker که عاشق استفاده از فناوریهای کانتینر برای تسریع سرعت نوآوری و در عین حال حل بزرگترین چالشهای جهان است. در طول 10 سال گذشته، الکس روی دموکراتیزه کردن هوش مصنوعی و ML، مبارزه با تغییرات آب و هوا و ایمنتر کردن سفر، مراقبتهای بهداشتی بهتر و هوشمندتر کردن انرژی کار کرده است.
کیتا واتانابه یک معمار ارشد راه حل های Frameworks ML Solutions در خدمات وب آمازون است که در آن به توسعه بهترین راه حل های یادگیری ماشین خود مدیریت مبتنی بر ابر صنعت کمک می کند. پیشینه او در تحقیق و توسعه یادگیری ماشین است. کیتا قبل از پیوستن به AWS در صنعت تجارت الکترونیک کار می کرد. کیتا دارای مدرک Ph.D. در علوم از دانشگاه توکیو.
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- PlatoData.Network Vertical Generative Ai. به خودت قدرت بده دسترسی به اینجا.
- PlatoAiStream. هوش وب 3 دانش تقویت شده دسترسی به اینجا.
- PlatoESG. خودرو / خودروهای الکتریکی، کربن ، CleanTech، انرژی، محیط، خورشیدی، مدیریت پسماند دسترسی به اینجا.
- PlatoHealth. هوش بیوتکنولوژی و آزمایشات بالینی. دسترسی به اینجا.
- ChartPrime. بازی معاملاتی خود را با ChartPrime ارتقا دهید. دسترسی به اینجا.
- BlockOffsets. نوسازی مالکیت افست زیست محیطی. دسترسی به اینجا.
- منبع: https://aws.amazon.com/blogs/machine-learning/enable-pod-based-gpu-metrics-in-amazon-cloudwatch/