फरवरी 2022 में, अमेज़ॅन वेब सर्विसेज को जोड़ा गया Amazon CloudWatch में NVIDIA GPU मेट्रिक्स के लिए समर्थन, जिससे मेट्रिक्स को आगे बढ़ाना संभव हो गया है अमेज़न क्लाउडवॉच एजेंट सेवा मेरे अमेज़ॅन क्लाउडवॉच और इष्टतम GPU उपयोग के लिए अपने कोड की निगरानी करें। तब से, इस सुविधा को हमारे कई प्रबंधित अमेज़ॅन मशीन इमेजेज (एएमआई) में एकीकृत किया गया है, जैसे कि डीप लर्निंग एएमआई और एडब्ल्यूएस पैरेललक्लस्टर एएमआई. जीपीयू उपयोग के इंस्टेंस-स्तरीय मेट्रिक्स प्राप्त करने के लिए, आप अपने स्वयं के कस्टम एएमआई को बूटस्ट्रैप करने के लिए पैकर या अमेज़ॅन इमेजबिल्डर का उपयोग कर सकते हैं और इसे विभिन्न प्रबंधित सेवा पेशकशों में उपयोग कर सकते हैं जैसे AWS बैच, अमेज़ॅन इलास्टिक कंटेनर सेवा (अमेज़ॅन ईसीएस), या अमेज़ॅन इलास्टिक कुबेरनेट्स सेवा (अमेज़ॅन ईकेएस)। हालाँकि, कई कंटेनर-आधारित सेवा पेशकशों और वर्कलोड के लिए, कंटेनर, पॉड या नेमस्पेस स्तर पर उपयोग मेट्रिक्स को कैप्चर करना आदर्श है।
यह पोस्ट बताती है कि कंटेनर-आधारित जीपीयू मेट्रिक्स कैसे सेट करें और ईकेएस पॉड्स से इन मेट्रिक्स को इकट्ठा करने का एक उदाहरण प्रदान करता है।
समाधान अवलोकन
कंटेनर-आधारित GPU मेट्रिक्स प्रदर्शित करने के लिए, हम एक EKS क्लस्टर बनाते हैं g5.2xlarge
उदाहरण; हालाँकि, यह किसी भी समर्थित NVIDIA त्वरित इंस्टेंस परिवार के साथ काम करेगा।
हम GPU संसाधनों के उपयोग को सक्षम करने के लिए NVIDIA GPU ऑपरेटर को तैनात करते हैं एनवीडिया डीसीजीएम निर्यातक GPU मेट्रिक्स संग्रह को सक्षम करने के लिए। फिर हम दो आर्किटेक्चर का पता लगाते हैं। पहला, क्लाउडवॉच एजेंट के माध्यम से NVIDIA DCGM एक्सपोर्टर से क्लाउडवॉच तक मेट्रिक्स को जोड़ता है, जैसा कि निम्नलिखित चित्र में दिखाया गया है।
दूसरा आर्किटेक्चर (निम्नलिखित चित्र देखें) DCGM एक्सपोर्टर से मेट्रिक्स को जोड़ता है प्रोमिथेउस, तो हम a का उपयोग करते हैं ग्राफाना उन मेट्रिक्स को देखने के लिए डैशबोर्ड।
.. पूर्वापेक्षाएँ
इस पोस्ट से पूरे स्टैक को पुन: प्रस्तुत करना आसान बनाने के लिए, हम एक कंटेनर का उपयोग करते हैं जिसमें सभी आवश्यक टूलींग (aws cli, eksctl, hem, आदि) पहले से ही स्थापित हैं। क्लोन करने के लिए GitHub से कंटेनर प्रोजेक्ट, आपको चाहिये होगा Git. कंटेनर बनाने और चलाने के लिए, आपको आवश्यकता होगी डाक में काम करनेवाला मज़दूर. आर्किटेक्चर को तैनात करने के लिए, आपको आवश्यकता होगी एडब्ल्यूएस साख. पोर्ट-फ़ॉरवर्डिंग का उपयोग करके कुबेरनेट्स सेवाओं तक पहुंच सक्षम करने के लिए, आपको इसकी भी आवश्यकता होगी Kubectl.
ये पूर्वापेक्षाएँ आपकी स्थानीय मशीन पर स्थापित की जा सकती हैं, EC2 उदाहरण साथ में अच्छा डीसीवीया, AWS क्लाउड 9. इस पोस्ट में हम a का प्रयोग करेंगे c5.2xlarge
Cloud9 उदाहरण के साथ 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-eksshell" के रूप में संदर्भित करेंगे। आप इस शेल में निम्नलिखित अनुभागों में कमांड चला रहे होंगे, जब तक कि विशेष रूप से अन्यथा निर्देश न दिया गया हो।
नोड समूह के साथ एक ईकेएस क्लस्टर बनाएं
इस समूह में आपकी पसंद का GPU इंस्टेंस परिवार शामिल है; इस उदाहरण में, हम इसका उपयोग करते हैं g5.2xlarge
उदाहरण प्रकार.
RSI एडब्ल्यूएस-डू-ईएक्स प्रोजेक्ट क्लस्टर कॉन्फ़िगरेशन के संग्रह के साथ आता है। आप एकल कॉन्फ़िगरेशन परिवर्तन के साथ अपना वांछित क्लस्टर कॉन्फ़िगरेशन सेट कर सकते हैं।
- कंटेनर शेल में, चलाएँ
./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 डिवाइस प्लगइन इंस्टॉल हो जाएगा। क्लस्टर निर्माण के बाद आपको इसे हटाना होगा क्योंकि हम इसका उपयोग करेंगे एनवीडिया जीपीयू ऑपरेटर बजाय.
- निम्न आदेश के साथ प्लगइन हटाएँ
kubectl -n kube-system delete daemonset nvidia-device-plugin-daemonset
हमें निम्नलिखित आउटपुट मिलता है:
daemonset.apps "nvidia-device-plugin-daemonset" deleted
NVIDIA हेल्म रेपो स्थापित करें
निम्नलिखित कमांड के साथ NVIDIA हेल्म रेपो स्थापित करें:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
DCGM निर्यातक को NVIDIA GPU ऑपरेटर के साथ तैनात करें
DCGM निर्यातक को तैनात करने के लिए, निम्नलिखित चरणों को पूरा करें:
- DCGM निर्यातक GPU मेट्रिक्स कॉन्फ़िगरेशन तैयार करें
curl https://raw.githubusercontent.com/NVIDIA/dcgm-exporter/main/etc/dcp-metrics-included.csv > dcgm-metrics.csv
आपके पास इसे संपादित करने का विकल्प है dcgm-metrics.csv
फ़ाइल। आप आवश्यकतानुसार कोई भी मीट्रिक जोड़ या हटा सकते हैं।
- जीपीयू-ऑपरेटर नेमस्पेस और डीसीजीएम निर्यातक कॉन्फिग मैप बनाएं
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
- EKS क्लस्टर में GPU ऑपरेटर लागू करें
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 एक्सपोर्टर एक प्रोमेथियस मेट्रिक्स एंडपॉइंट को उजागर करता है, जिसे क्लाउडवॉच एजेंट द्वारा ग्रहण किया जा सकता है। समापन बिंदु देखने के लिए, निम्न आदेश का उपयोग करें:
kubectl -n gpu-operator get services | grep dcgm
हमें निम्नलिखित आउटपुट मिलता है:
nvidia-dcgm-exporter ClusterIP 10.100.183.207 <none> 9400/TCP 10m
- कुछ जीपीयू उपयोग उत्पन्न करने के लिए, हम एक पॉड तैनात करते हैं जो चलता है gpu-बर्न बाइनरी
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
यह परिनियोजन 100 सेकंड के लिए 20% उपयोग और उसके बाद 0 सेकंड के लिए 20% उपयोग का निरंतर पैटर्न तैयार करने के लिए एकल जीपीयू का उपयोग करता है।
- यह सुनिश्चित करने के लिए कि एंडपॉइंट काम करता है, आप एक अस्थायी कंटेनर चला सकते हैं जो सामग्री को पढ़ने के लिए कर्ल का उपयोग करता है
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
क्लाउडवॉच एजेंट को कॉन्फ़िगर और तैनात करें
क्लाउडवॉच एजेंट को कॉन्फ़िगर और तैनात करने के लिए, निम्नलिखित चरणों को पूरा करें:
- 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
config अनुभाग में, 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
- पुष्टि करें कि क्लाउडवॉच एजेंट पॉड चल रहा है
kubectl -n amazon-cloudwatch get pods
हमें निम्नलिखित आउटपुट मिलता है:
NAME READY STATUS RESTARTS AGE
cwagent-prometheus-7dfd69cc46-s4cx7 1/1 Running 0 15m
CloudWatch कंसोल पर मेट्रिक्स को विज़ुअलाइज़ करें
क्लाउडवॉच में मेट्रिक्स की कल्पना करने के लिए, निम्नलिखित चरणों को पूरा करें:
- CloudWatch कंसोल पर, के तहत मेट्रिक्स नेविगेशन फलक में, चुनें सभी मेट्रिक्स
- में कस्टम नामस्थान अनुभाग, के लिए नई प्रविष्टि चुनें कंटेनरइनसाइट्स/प्रोमेथियस
के बारे में अधिक जानकारी के लिए कंटेनरइनसाइट्स/प्रोमेथियस नेमस्पेस, देखें अतिरिक्त प्रोमेथियस स्रोतों को स्क्रैप करना और उन मेट्रिक्स को आयात करना.
- मीट्रिक नामों पर गहराई से गौर करें और चुनें
DCGM_FI_DEV_GPU_UTIL
- पर रेखांकन मेट्रिक्स टैब, सेट अवधि सेवा मेरे 5 सेकंड
- ताज़ा अंतराल को 10 सेकंड पर सेट करें
आप DCGM निर्यातक से एकत्र किए गए मेट्रिक्स देखेंगे जो इसकी कल्पना करते हैं gpu-burn
प्रत्येक 20 सेकंड में पैटर्न चालू और बंद।
पर ब्राउज टैब पर, आप प्रत्येक मीट्रिक के लिए पॉड नाम सहित डेटा देख सकते हैं।
ईकेएस एपीआई मेटाडेटा को डीसीजीएम मेट्रिक्स डेटा के साथ जोड़ा गया है, जिसके परिणामस्वरूप पॉड-आधारित जीपीयू मेट्रिक्स प्रदान किए गए हैं।
यह CloudWatch एजेंट के माध्यम से DCGM मेट्रिक्स को CloudWatch में निर्यात करने का पहला दृष्टिकोण समाप्त करता है।
अगले भाग में, हम दूसरे आर्किटेक्चर को कॉन्फ़िगर करते हैं, जो डीसीजीएम मेट्रिक्स को प्रोमेथियस में निर्यात करता है, और हम उन्हें ग्राफाना के साथ कल्पना करते हैं।
DCGM से GPU मेट्रिक्स की कल्पना करने के लिए प्रोमेथियस और ग्राफाना का उपयोग करें
निम्नलिखित चरणों को पूरा करें:
- प्रोमेथियस समुदाय हेल्म चार्ट जोड़ें
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
यह चार्ट प्रोमेथियस और ग्राफाना दोनों को दर्शाता है। इंस्टॉल कमांड चलाने से पहले हमें चार्ट में कुछ संपादन करने की आवश्यकता है।
- चार्ट कॉन्फ़िगरेशन मानों को किसी फ़ाइल में सहेजें
/tmp
helm inspect values prometheus-community/kube-prometheus-stack > /tmp/kube-prometheus-stack.values
- चार कॉन्फ़िगरेशन फ़ाइल संपादित करें
सहेजी गई फ़ाइल को संपादित करें (/tmp/kube-prometheus-stack.values
) और सेटिंग नाम ढूंढ़कर और मान सेट करके निम्नलिखित विकल्प सेट करें:
prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
- निम्नलिखित कॉन्फिग मैप को इसमें जोड़ें
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
- अद्यतन मूल्यों के साथ प्रोमेथियस स्टैक को तैनात करें
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.
- पुष्टि करें कि प्रोमेथियस पॉड्स चल रहे हैं
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
राज्य.
इसके बाद, हम पुष्टि करते हैं कि डीसीजीएम मेट्रिक्स प्रोमेथियस में प्रवाहित हो रहे हैं।
- प्रोमेथियस यूआई को पोर्ट-फ़ॉरवर्ड करें
क्लस्टर के बाहर उत्पन्न होने वाले अनुरोधों के लिए ईकेएस में चल रहे प्रोमेथियस यूआई को उजागर करने के विभिन्न तरीके हैं। हम इस्तेमाल करेंगे kubectl port-forwarding
. अब तक, हम अंदर कमांड निष्पादित कर रहे हैं aws-do-eks
कंटेनर. क्लस्टर में चल रही प्रोमेथियस सेवा तक पहुंचने के लिए, हम होस्ट से एक सुरंग बनाएंगे। यहां ही aws-do-eks
कंटेनर होस्ट पर एक नए टर्मिनल शेल में, कंटेनर के बाहर निम्नलिखित कमांड निष्पादित करके चल रहा है। हम इसे "होस्ट शेल" के रूप में संदर्भित करेंगे।
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 &
जबकि पोर्ट-फ़ॉरवर्डिंग प्रक्रिया चल रही है, हम नीचे बताए अनुसार होस्ट से प्रोमेथियस यूआई तक पहुंचने में सक्षम हैं।
- प्रोमेथियस यूआई खोलें
- यदि आप Cloud9 का उपयोग कर रहे हैं, तो कृपया नेविगेट करें
Preview->Preview Running Application
क्लाउड9 आईडीई के अंदर एक टैब में प्रोमेथियस यूआई खोलने के लिए, फिर क्लिक करें एक नई विंडो में पॉप आउट करने के लिए टैब के ऊपरी-दाएँ कोने में आइकन।
- यदि आप अपने स्थानीय होस्ट पर हैं या रिमोट डेस्कटॉप के माध्यम से ईसी2 इंस्टेंस से जुड़े हैं तो ब्राउज़र खोलें और यूआरएल पर जाएं
http://localhost:8080
.
- दर्ज
DCGM
डीसीजीएम मेट्रिक्स को देखने के लिए जो प्रोमेथियस में प्रवाहित हो रहे हैं
- चुनते हैं
DCGM_FI_DEV_GPU_UTIL
, चुनें निष्पादित करना, और उसके बाद नेविगेट करें ग्राफ अपेक्षित GPU उपयोग पैटर्न देखने के लिए टैब
- प्रोमेथियस पोर्ट-फ़ॉरवर्डिंग प्रक्रिया रोकें
अपने होस्ट शेल में निम्न कमांड लाइन चलाएँ:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
अब हम ग्राफाना डैशबोर्ड के माध्यम से डीसीजीएम मेट्रिक्स की कल्पना कर सकते हैं।
- ग्राफाना यूआई में लॉग इन करने के लिए पासवर्ड पुनः प्राप्त करें
kubectl -n prometheus get secret $(kubectl -n prometheus get secrets | grep grafana | cut -d ' ' -f 1) -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
- ग्राफाना सेवा को पोर्ट-फ़ॉरवर्ड करें
अपने होस्ट शेल में निम्न कमांड लाइन चलाएँ:
kubectl port-forward -n prometheus svc/$(kubectl -n prometheus get svc | grep grafana | cut -d ' ' -f 1) 8080:80 &
- ग्राफाना यूआई में लॉग इन करें
ग्राफाना यूआई लॉगिन स्क्रीन को उसी तरह एक्सेस करें जैसे आपने पहले प्रोमेथियस यूआई को एक्सेस किया था। यदि Cloud9 का उपयोग कर रहे हैं, तो चयन करें Preview->Preview Running Application
, फिर एक नई विंडो में पॉप आउट करें। यदि अपने स्थानीय होस्ट या दूरस्थ डेस्कटॉप के साथ EC2 इंस्टेंस का उपयोग कर रहे हैं तो URL पर जाएँ http://localhost:8080
. उपयोगकर्ता नाम एडमिन और पहले प्राप्त पासवर्ड से लॉगिन करें।
- नेविगेशन फलक में, चुनें डैशबोर्ड
- चुनें नया और आयात
हम इसमें वर्णित डिफ़ॉल्ट डीसीजीएम ग्राफाना डैशबोर्ड को आयात करने जा रहे हैं NVIDIA DCGM निर्यातक डैशबोर्ड.
- मैदान में
import via grafana.com
, दर्ज 12239
और चुनें भार
- चुनें प्रोमिथेउस डेटा स्रोत के रूप में
- चुनें आयात
आपको निम्नलिखित स्क्रीनशॉट के समान एक डैशबोर्ड दिखाई देगा।
यह प्रदर्शित करने के लिए कि ये मेट्रिक्स पॉड-आधारित हैं, हम संशोधित करने जा रहे हैं जीपीयू उपयोग इस डैशबोर्ड में फलक.
- फलक और विकल्प मेनू चुनें (तीन बिंदु)
- इसका विस्तार करें ऑप्शंस अनुभाग और संपादित करें किंवदंती खेत
- वहां के मान को इससे बदलें
Pod {{pod}}
, उसके बाद चुनो सहेजें
किंवदंती अब दिखाती है gpu-burn
प्रदर्शित GPU उपयोग से संबद्ध पॉड नाम।
- ग्राफाना यूआई सेवा को पोर्ट-फ़ॉरवर्ड करना बंद करें
अपने होस्ट शेल में निम्नलिखित चलाएँ:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
इस पोस्ट में, हमने ईकेएस क्लस्टर में तैनात ओपन-सोर्स प्रोमेथियस और ग्राफाना का उपयोग करके प्रदर्शन किया। यदि वांछित हो, तो इस परिनियोजन को प्रतिस्थापित किया जा सकता है प्रोमेथियस के लिए अमेज़न प्रबंधित सेवा और अमेज़न प्रबंधित ग्राफाना.
क्लीन अप
आपके द्वारा बनाए गए संसाधनों को साफ़ करने के लिए, निम्न स्क्रिप्ट चलाएँ aws-do-eks
कंटेनर खोल:
निष्कर्ष
इस पोस्ट में, हमने GPU मेट्रिक्स एकत्र करने और क्लाउडवॉच या प्रोमेथियस और ग्राफाना के साथ उनकी कल्पना करने के लिए NVIDIA DCGM एक्सपोर्टर का उपयोग किया। हम आपको आपके अपने AWS वातावरण में NVIDIA DCGM के साथ GPU उपयोग की निगरानी को सक्षम करने के लिए यहां प्रदर्शित आर्किटेक्चर का उपयोग करने के लिए आमंत्रित करते हैं।
अतिरिक्त संसाधन
लेखक के बारे में
अमर रगाबो AWS में EC2 एक्सेलेरेटेड कंप्यूटिंग के पूर्व प्रिंसिपल सॉल्यूशंस आर्किटेक्ट हैं। वह ग्राहकों को बड़े पैमाने पर कम्प्यूटेशनल कार्यभार चलाने में मदद करने के लिए समर्पित है। अपने खाली समय में, वह यात्रा करना और प्रौद्योगिकी को दैनिक जीवन में एकीकृत करने के नए तरीके खोजना पसंद करते हैं।
एलेक्स इयानकोल्स्की AWS में एक प्रमुख समाधान वास्तुकार, स्व-प्रबंधित मशीन लर्निंग है। वह एक फुल-स्टैक सॉफ्टवेयर और इंफ्रास्ट्रक्चर इंजीनियर है जो गहन, व्यावहारिक काम करना पसंद करता है। अपनी भूमिका में, वह कंटेनर-संचालित एडब्ल्यूएस सेवाओं पर एमएल और एआई वर्कलोड के कंटेनरीकरण और ऑर्केस्ट्रेशन में ग्राहकों की मदद करने पर ध्यान केंद्रित करते हैं। वह ओपन-सोर्स के लेखक भी हैं ढाँचा करो और एक डॉकर कैप्टन जो दुनिया की सबसे बड़ी चुनौतियों को हल करते हुए नवाचार की गति को तेज करने के लिए कंटेनर प्रौद्योगिकियों को लागू करना पसंद करता है। पिछले 10 वर्षों के दौरान, एलेक्स ने एआई और एमएल को लोकतांत्रिक बनाने, जलवायु परिवर्तन से निपटने और यात्रा को सुरक्षित, स्वास्थ्य सेवा को बेहतर और ऊर्जा को स्मार्ट बनाने पर काम किया है।
कीता वतनबे अमेज़ॅन वेब सर्विसेज में फ्रेमवर्क एमएल सॉल्यूशंस के वरिष्ठ सॉल्यूशंस आर्किटेक्ट हैं, जहां वह उद्योग के सर्वोत्तम क्लाउड आधारित स्व-प्रबंधित मशीन लर्निंग समाधान विकसित करने में मदद करते हैं। उनकी पृष्ठभूमि मशीन लर्निंग अनुसंधान और विकास में है। AWS में शामिल होने से पहले, कीता ई-कॉमर्स उद्योग में काम कर रही थी। कीता के पास पीएच.डी. है। टोक्यो विश्वविद्यालय से विज्ञान में।
- एसईओ संचालित सामग्री और पीआर वितरण। आज ही प्रवर्धित हो जाओ।
- प्लेटोडेटा.नेटवर्क वर्टिकल जेनरेटिव एआई। स्वयं को शक्तिवान बनाएं। यहां पहुंचें।
- प्लेटोआईस्ट्रीम। Web3 इंटेलिजेंस। ज्ञान प्रवर्धित। यहां पहुंचें।
- प्लेटोईएसजी. ऑटोमोटिव/ईवीएस, कार्बन, क्लीनटेक, ऊर्जा, पर्यावरण, सौर, कचरा प्रबंधन। यहां पहुंचें।
- प्लेटोहेल्थ। बायोटेक और क्लिनिकल परीक्षण इंटेलिजेंस। यहां पहुंचें।
- चार्टप्राइम. चार्टप्राइम के साथ अपने ट्रेडिंग गेम को उन्नत करें। यहां पहुंचें।
- BlockOffsets. पर्यावरणीय ऑफसेट स्वामित्व का आधुनिकीकरण। यहां पहुंचें।
- स्रोत: https://aws.amazon.com/blogs/machine-learning/enable-pod-based-gpu-metrics-in-amazon-cloudwatch/