2022 সালের ফেব্রুয়ারিতে, অ্যামাজন ওয়েব পরিষেবা যোগ করেছে অ্যামাজন ক্লাউডওয়াচে NVIDIA GPU মেট্রিক্সের জন্য সমর্থন, থেকে মেট্রিক্স পুশ করা সম্ভব করে তোলে অ্যামাজন ক্লাউডওয়াচ এজেন্ট থেকে অ্যামাজন ক্লাউডওয়াচ এবং সর্বোত্তম GPU ব্যবহারের জন্য আপনার কোড নিরীক্ষণ করুন। তারপর থেকে, এই বৈশিষ্ট্যটি আমাদের পরিচালিত অনেকগুলি Amazon Machine Images (AMIs), যেমন গভীর শিক্ষা AMI এবং AWS ParallelCluster AMI. জিপিইউ ব্যবহারের দৃষ্টান্ত-স্তরের মেট্রিক্স পেতে, আপনি আপনার নিজস্ব কাস্টম এএমআই বুটস্ট্র্যাপ করতে প্যাকার বা অ্যামাজন ইমেজবিল্ডার ব্যবহার করতে পারেন এবং এটি বিভিন্ন পরিচালিত পরিষেবা অফারে ব্যবহার করতে পারেন যেমন AWS ব্যাচ, অ্যামাজন ইলাস্টিক কনটেইনার পরিষেবা (আমাজন ইসিএস), বা অ্যামাজন ইলাস্টিক কুবারনেটস পরিষেবা (আমাজন ইকেএস)। যাইহোক, অনেক কন্টেইনার-ভিত্তিক পরিষেবা অফার এবং কাজের চাপের জন্য, কন্টেইনার, পড বা নেমস্পেস স্তরে ব্যবহার মেট্রিক্স ক্যাপচার করা আদর্শ।
এই পোস্টটি কীভাবে কন্টেইনার-ভিত্তিক GPU মেট্রিক্স সেট আপ করতে হয় তার বিশদ বিবরণ দেয় এবং EKS পডগুলি থেকে এই মেট্রিকগুলি সংগ্রহ করার একটি উদাহরণ প্রদান করে।
সমাধান ওভারভিউ
কন্টেইনার-ভিত্তিক GPU মেট্রিক্স প্রদর্শন করতে, আমরা এর সাথে একটি EKS ক্লাস্টার তৈরি করি g5.2xlarge
দৃষ্টান্ত; যাইহোক, এটি যেকোনো সমর্থিত NVIDIA ত্বরিত উদাহরণ পরিবারের সাথে কাজ করবে।
আমরা GPU সম্পদের ব্যবহার সক্ষম করতে NVIDIA GPU অপারেটর স্থাপন করি এবং NVIDIA DCGM রপ্তানিকারক GPU মেট্রিক্স সংগ্রহ সক্ষম করতে। তারপর আমরা দুটি স্থাপত্য অন্বেষণ. প্রথমটি একটি ক্লাউডওয়াচ এজেন্টের মাধ্যমে NVIDIA DCGM রপ্তানিকারক থেকে ক্লাউডওয়াচের সাথে মেট্রিক্সকে সংযুক্ত করে, যেমনটি নিম্নলিখিত চিত্রে দেখানো হয়েছে।
দ্বিতীয় আর্কিটেকচার (নিম্নলিখিত চিত্রটি দেখুন) DCGM রপ্তানিকারক থেকে মেট্রিক্সকে সংযুক্ত করে প্রমিথিউস, তারপর আমরা একটি ব্যবহার করি গ্রাফানা ড্যাশবোর্ড সেই মেট্রিক্স কল্পনা করতে।
পূর্বশর্ত
এই পোস্ট থেকে সম্পূর্ণ স্ট্যাক পুনরুত্পাদন সহজ করার জন্য, আমরা একটি ধারক ব্যবহার করি যাতে সমস্ত প্রয়োজনীয় টুলিং (aws cli, eksctl, হেলম, ইত্যাদি) ইতিমধ্যেই ইনস্টল করা আছে। ক্লোন করার জন্য GitHub থেকে কন্টেইনার প্রকল্প, আপনার প্রয়োজন হবে ফালতু বা এলেবেলে লোক. ধারক তৈরি এবং চালানোর জন্য, আপনার প্রয়োজন হবে ডকশ্রমিক. আর্কিটেকচার স্থাপন করতে, আপনার প্রয়োজন হবে AWS শংসাপত্র. পোর্ট-ফরোয়ার্ডিং ব্যবহার করে Kubernetes পরিষেবাগুলিতে অ্যাক্সেস সক্ষম করতে, আপনারও প্রয়োজন হবে কুবেক্টেল.
এই পূর্বশর্তগুলি আপনার স্থানীয় মেশিনে ইনস্টল করা যেতে পারে, EC2 উদাহরণ সঙ্গে চমৎকার DCV, বা এডাব্লুএস ক্লাউড 9. এই পোস্টে, আমরা একটি ব্যবহার করব 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-eks শেল" হিসাবে উল্লেখ করব। আপনি এই শেলের নিম্নলিখিত বিভাগে কমান্ডগুলি চালাবেন, যদি না নির্দিষ্টভাবে অন্যথায় নির্দেশ দেওয়া হয়।
একটি নোড গ্রুপের সাথে একটি EKS ক্লাস্টার তৈরি করুন
এই গ্রুপে আপনার পছন্দের একটি GPU ইন্সট্যান্স পরিবার অন্তর্ভুক্ত রয়েছে; এই উদাহরণে, আমরা ব্যবহার করি g5.2xlarge
উদাহরণ টাইপ।
সার্জারির 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 হেলম রেপো ইনস্টল করুন
নিম্নলিখিত কমান্ড দিয়ে NVIDIA হেলম রেপো ইনস্টল করুন:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
NVIDIA GPU অপারেটরের সাথে DCGM রপ্তানিকারক স্থাপন করুন
DCGM রপ্তানিকারক স্থাপন করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
- DCGM রপ্তানিকারক GPU মেট্রিক্স কনফিগারেশন প্রস্তুত করুন
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
- 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 রপ্তানিকারক একটি Prometheus মেট্রিক্স এন্ডপয়েন্ট প্রকাশ করে, যা CloudWatch এজেন্ট দ্বারা গ্রহণ করা যেতে পারে। শেষ বিন্দু দেখতে, নিম্নলিখিত কমান্ড ব্যবহার করুন:
kubectl -n gpu-operator get services | grep dcgm
আমরা নিম্নলিখিত আউটপুট পেতে:
nvidia-dcgm-exporter ClusterIP 10.100.183.207 <none> 9400/TCP 10m
- কিছু GPU ব্যবহার তৈরি করতে, আমরা একটি পড স্থাপন করি যা চালায় 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% ব্যবহারের একটি অবিচ্ছিন্ন প্যাটার্ন তৈরি করতে একটি একক GPU ব্যবহার করে এবং 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
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
ফাইলটিতে রয়েছে a 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
- নিশ্চিত করুন যে CloudWatch এজেন্ট পড চলছে
kubectl -n amazon-cloudwatch get pods
আমরা নিম্নলিখিত আউটপুট পেতে:
NAME READY STATUS RESTARTS AGE
cwagent-prometheus-7dfd69cc46-s4cx7 1/1 Running 0 15m
ক্লাউডওয়াচ কনসোলে মেট্রিক্স ভিজ্যুয়ালাইজ করুন
ক্লাউডওয়াচে মেট্রিকগুলি কল্পনা করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
- ক্লাউডওয়াচ কনসোলে, নীচে ছন্দোবিজ্ঞান নেভিগেশন ফলকে, নির্বাচন করুন সমস্ত মেট্রিক্স
- মধ্যে কাস্টম নামস্থান বিভাগে, জন্য নতুন এন্ট্রি নির্বাচন করুন ধারক অন্তর্দৃষ্টি/প্রমিথিউস
সম্পর্কে আরও তথ্যের জন্য ধারক অন্তর্দৃষ্টি/প্রমিথিউস নামস্থান, পড়ুন অতিরিক্ত প্রমিথিউস উত্স স্ক্র্যাপ করা এবং সেই মেট্রিক্স আমদানি করা.
- মেট্রিক নাম ড্রিল ডাউন এবং চয়ন করুন
DCGM_FI_DEV_GPU_UTIL
- উপরে গ্রাফিত মেট্রিক্স ট্যাব, সেট কাল থেকে 5 সেকেন্ড
- রিফ্রেশ ব্যবধান 10 সেকেন্ডে সেট করুন
আপনি DCGM রপ্তানিকারক থেকে সংগৃহীত মেট্রিক্স দেখতে পাবেন যা ভিজ্যুয়ালাইজ করে gpu-burn
প্রতি 20 সেকেন্ডে প্যাটার্ন চালু এবং বন্ধ করুন।
উপরে ব্রাউজ করুন ট্যাবে, আপনি প্রতিটি মেট্রিকের জন্য পড নাম সহ ডেটা দেখতে পারেন।
EKS API মেটাডেটা DCGM মেট্রিক্স ডেটার সাথে একত্রিত করা হয়েছে, যার ফলে প্রদান করা পড-ভিত্তিক GPU মেট্রিক্স।
এটি ক্লাউডওয়াচ এজেন্টের মাধ্যমে ক্লাউডওয়াচে DCGM মেট্রিক্স রপ্তানি করার প্রথম পদ্ধতির সমাপ্তি ঘটায়।
পরবর্তী বিভাগে, আমরা দ্বিতীয় আর্কিটেকচারটি কনফিগার করি, যা প্রমিথিউসের কাছে DCGM মেট্রিক্স রপ্তানি করে এবং আমরা সেগুলিকে Grafana দিয়ে কল্পনা করি।
DCGM থেকে GPU মেট্রিক্স কল্পনা করতে Prometheus এবং Grafana ব্যবহার করুন
নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
- প্রমিথিউস সম্প্রদায়ের হেল্ম চার্ট যোগ করুন
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
- নিম্নলিখিত 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
- আপডেট করা মান সহ প্রমিথিউস স্ট্যাক স্থাপন করুন
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
অবস্থা.
এরপরে, আমরা যাচাই করি যে DCGM মেট্রিক্স প্রমিথিউসে প্রবাহিত হচ্ছে।
- Prometheus UI পোর্ট-ফরোয়ার্ড করুন
ক্লাস্টারের বাইরে উদ্ভূত অনুরোধগুলির জন্য EKS-এ চলমান Prometheus UI প্রকাশ করার বিভিন্ন উপায় রয়েছে৷ আমরা ব্যবহার করবো 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 &
পোর্ট-ফরোয়ার্ডিং প্রক্রিয়া চলাকালীন, আমরা নীচে বর্ণিত হিসাবে হোস্ট থেকে প্রমিথিউস UI অ্যাক্সেস করতে সক্ষম।
- প্রমিথিউস UI খুলুন
- আপনি যদি Cloud9 ব্যবহার করেন, অনুগ্রহ করে নেভিগেট করুন
Preview->Preview Running Application
ক্লাউড 9 আইডিই-এর ভিতরে একটি ট্যাবে প্রমিথিউস UI খুলতে, তারপরে ক্লিক করুন একটি নতুন উইন্ডোতে পপ আউট করার জন্য ট্যাবের উপরের-ডান কোণায় আইকন।
- আপনি যদি আপনার স্থানীয় হোস্টে থাকেন বা দূরবর্তী ডেস্কটপের মাধ্যমে EC2 ইন্সট্যান্সের সাথে সংযুক্ত থাকেন তাহলে একটি ব্রাউজার খুলুন এবং URL দেখুন
http://localhost:8080
.
- প্রবেশ করান
DCGM
প্রমিথিউসে প্রবাহিত DCGM মেট্রিক্স দেখতে
- নির্বাচন করা
DCGM_FI_DEV_GPU_UTIL
নির্বাচন এক্সিকিউট, এবং তারপর নেভিগেট করুন চিত্রলেখ প্রত্যাশিত GPU ব্যবহার প্যাটার্ন দেখতে ট্যাব
- প্রমিথিউস পোর্ট ফরওয়ার্ডিং প্রক্রিয়া বন্ধ করুন
আপনার হোস্ট শেলে নিম্নলিখিত কমান্ড লাইনটি চালান:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
এখন আমরা Grafana ড্যাশবোর্ডের মাধ্যমে DCGM মেট্রিক্স কল্পনা করতে পারি।
- 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
- পোর্ট-ফরোয়ার্ড Grafana পরিষেবা
আপনার হোস্ট শেলে নিম্নলিখিত কমান্ড লাইনটি চালান:
kubectl port-forward -n prometheus svc/$(kubectl -n prometheus get svc | grep grafana | cut -d ' ' -f 1) 8080:80 &
- Grafana UI এ লগ ইন করুন
Grafana UI লগইন স্ক্রীনটি একইভাবে অ্যাক্সেস করুন যেভাবে আপনি আগে Prometheus UI অ্যাক্সেস করেছিলেন৷ Cloud9 ব্যবহার করলে নির্বাচন করুন Preview->Preview Running Application
, তারপর একটি নতুন উইন্ডোতে পপ আউট করুন। দূরবর্তী ডেস্কটপ ভিজিট URL সহ আপনার স্থানীয় হোস্ট বা একটি EC2 উদাহরণ ব্যবহার করলে http://localhost:8080
. ব্যবহারকারীর নাম প্রশাসক এবং আপনি আগে পুনরুদ্ধার করা পাসওয়ার্ড দিয়ে লগইন করুন।
- নেভিগেশন ফলকে, নির্বাচন করুন ড্যাশবোর্ডের
- বেছে নিন নতুন এবং আমদানি
আমরা বর্ণিত ডিফল্ট DCGM Grafana ড্যাশবোর্ড আমদানি করতে যাচ্ছি NVIDIA DCGM এক্সপোর্টার ড্যাশবোর্ড.
- মাঠে
import via grafana.com
প্রবেশ করান 12239
এবং নির্বাচন করুন বোঝা
- বেছে নিন প্রমিথিউস তথ্য উৎস হিসাবে
- বেছে নিন আমদানি
আপনি নিম্নলিখিত স্ক্রিনশটের মত একটি ড্যাশবোর্ড দেখতে পাবেন।
এই মেট্রিকগুলি পড-ভিত্তিক দেখানোর জন্য, আমরা পরিবর্তন করতে যাচ্ছি GPU ব্যবহার এই ড্যাশবোর্ডে প্যান।
- ফলক এবং বিকল্প মেনু নির্বাচন করুন (তিনটি বিন্দু)
- বিস্তৃত করা অপশন সমূহ বিভাগ এবং সম্পাদনা করুন কিংবদন্তি ক্ষেত্র
- সেখানে মান দিয়ে প্রতিস্থাপন করুন
Pod {{pod}}
, তাহলে বেছে নাও সংরক্ষণ করুন
কিংবদন্তি এখন দেখায় gpu-burn
প্রদর্শিত GPU ব্যবহারের সাথে যুক্ত পড নাম।
- Grafana UI পরিষেবা পোর্ট-ফরোয়ার্ড করা বন্ধ করুন
আপনার হোস্ট শেলে নিম্নলিখিত চালান:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
এই পোস্টে, আমরা EKS ক্লাস্টারে নিয়োজিত ওপেন সোর্স প্রমিথিউস এবং গ্রাফানা ব্যবহার করে দেখিয়েছি। যদি ইচ্ছা হয়, এই স্থাপনার সাথে প্রতিস্থাপিত করা যেতে পারে প্রমিথিউসের জন্য আমাজন পরিচালিত পরিষেবা এবং আমাজন পরিচালিত Grafana.
পরিষ্কার কর
আপনার তৈরি সংস্থানগুলি পরিষ্কার করতে, থেকে নিম্নলিখিত স্ক্রিপ্টটি চালান aws-do-eks
ধারক শেল:
উপসংহার
এই পোস্টে, আমরা NVIDIA DCGM রপ্তানিকারককে GPU মেট্রিক্স সংগ্রহ করতে এবং CloudWatch বা Prometheus এবং Grafana-এর মাধ্যমে কল্পনা করতে ব্যবহার করেছি। আমরা আপনাকে আপনার নিজস্ব AWS পরিবেশে NVIDIA DCGM-এর সাথে GPU ব্যবহার পর্যবেক্ষণ সক্ষম করতে এখানে প্রদর্শিত আর্কিটেকচারগুলি ব্যবহার করার জন্য আমন্ত্রণ জানাচ্ছি।
অতিরিক্ত সম্পদ
লেখক সম্পর্কে
আমর রাগব একজন প্রাক্তন প্রিন্সিপাল সলিউশন আর্কিটেক্ট, EC2 অ্যাক্সিলারেটেড কম্পিউটিং এডব্লিউএস। তিনি গ্রাহকদের স্কেলে গণনামূলক কাজের চাপ চালাতে সাহায্য করার জন্য নিবেদিত। তার অবসর সময়ে, তিনি ভ্রমণ করতে পছন্দ করেন এবং দৈনন্দিন জীবনে প্রযুক্তিকে সংহত করার নতুন উপায় খুঁজে পান।
অ্যালেক্স ইয়ানকুলস্কি একজন প্রিন্সিপাল সলিউশন আর্কিটেক্ট, AWS-এ স্ব-পরিচালিত মেশিন লার্নিং। তিনি একজন পূর্ণ-স্ট্যাক সফ্টওয়্যার এবং অবকাঠামো প্রকৌশলী যিনি গভীর, হাতে-কলমে কাজ করতে পছন্দ করেন। তার ভূমিকায়, তিনি কন্টেইনার-চালিত AWS পরিষেবাগুলিতে ML এবং AI ওয়ার্কলোডের কন্টেইনারাইজেশন এবং অর্কেস্ট্রেশনের সাথে গ্রাহকদের সাহায্য করার দিকে মনোনিবেশ করেন। তিনি ওপেন সোর্সের লেখকও কাঠামো করা এবং একজন ডকার ক্যাপ্টেন যিনি বিশ্বের বৃহত্তম চ্যালেঞ্জগুলি সমাধান করার সময় উদ্ভাবনের গতিকে ত্বরান্বিত করতে কন্টেইনার প্রযুক্তি প্রয়োগ করতে পছন্দ করেন। বিগত 10 বছরে, অ্যালেক্স AI এবং ML-এর গণতন্ত্রীকরণ, জলবায়ু পরিবর্তনের বিরুদ্ধে লড়াই, এবং ভ্রমণকে নিরাপদ, স্বাস্থ্যসেবা আরও ভাল এবং শক্তিকে আরও স্মার্ট করার জন্য কাজ করেছেন।
কেইটা ওয়াতানাবে তিনি Amazon Web Services-এ Frameworks ML Solutions-এর একজন সিনিয়র সলিউশন আর্কিটেক্ট যেখানে তিনি শিল্পের সেরা ক্লাউড ভিত্তিক স্ব-পরিচালিত মেশিন লার্নিং সমাধানগুলি বিকাশে সহায়তা করেন৷ তার পটভূমি মেশিন লার্নিং গবেষণা এবং উন্নয়ন. AWS-এ যোগদানের আগে, Keita ই-কমার্স শিল্পে কাজ করছিলেন। কেইটা পিএইচডি করেছেন। টোকিও বিশ্ববিদ্যালয় থেকে বিজ্ঞানে।
- এসইও চালিত বিষয়বস্তু এবং পিআর বিতরণ। আজই পরিবর্ধিত পান।
- PlatoData.Network উল্লম্ব জেনারেটিভ Ai. নিজেকে ক্ষমতায়িত করুন। এখানে প্রবেশ করুন.
- প্লেটোএআইস্ট্রিম। Web3 ইন্টেলিজেন্স। জ্ঞান প্রসারিত. এখানে প্রবেশ করুন.
- প্লেটোইএসজি। মোটরগাড়ি / ইভি, কার্বন, ক্লিনটেক, শক্তি, পরিবেশ সৌর, বর্জ্য ব্যবস্থাপনা. এখানে প্রবেশ করুন.
- প্লেটো হেলথ। বায়োটেক এবং ক্লিনিক্যাল ট্রায়াল ইন্টেলিজেন্স। এখানে প্রবেশ করুন.
- চার্টপ্রাইম। ChartPrime এর সাথে আপনার ট্রেডিং গেমটি উন্নত করুন। এখানে প্রবেশ করুন.
- ব্লকঅফসেট। পরিবেশগত অফসেট মালিকানার আধুনিকীকরণ। এখানে প্রবেশ করুন.
- উত্স: https://aws.amazon.com/blogs/machine-learning/enable-pod-based-gpu-metrics-in-amazon-cloudwatch/