فروری 2022 میں، ایمیزون ویب سروسز نے اضافہ کیا۔ Amazon CloudWatch میں NVIDIA GPU میٹرکس کے لیے سپورٹسے میٹرکس کو آگے بڑھانا ممکن بناتا ہے۔ ایمیزون کلاؤڈ واچ ایجنٹ کرنے کے لئے ایمیزون کلاؤڈ واچ اور GPU کے بہترین استعمال کے لیے اپنے کوڈ کی نگرانی کریں۔ تب سے، اس خصوصیت کو ہماری بہت سی منظم ایمیزون مشین امیجز (AMIs) میں ضم کر دیا گیا ہے، جیسے کہ ڈیپ لرننگ AMI اور AWS ParallelCluster AMI. GPU کے استعمال کی مثال کی سطح کے میٹرکس حاصل کرنے کے لیے، آپ اپنی مرضی کے مطابق AMI کو بوٹسٹریپ کرنے کے لیے Packer یا Amazon ImageBuilder کا استعمال کر سکتے ہیں اور اسے مختلف منظم سروس پیشکشوں میں استعمال کر سکتے ہیں جیسے AWS بیچ, ایمیزون لچکدار کنٹینر سروس (ایمیزون ای سی ایس)، یا ایمیزون لچکدار کبیرنیٹس سروس (ایمیزون ای کے ایس)۔ تاہم، بہت سے کنٹینر پر مبنی خدمات کی پیشکشوں اور کام کے بوجھ کے لیے، کنٹینر، پوڈ، یا نام کی جگہ کی سطح پر استعمال کے میٹرکس کو حاصل کرنا مثالی ہے۔
اس پوسٹ میں کنٹینر پر مبنی GPU میٹرکس ترتیب دینے کے طریقے کی تفصیلات دی گئی ہیں اور EKS pods سے ان میٹرکس کو جمع کرنے کی ایک مثال فراہم کی گئی ہے۔
حل جائزہ
کنٹینر پر مبنی GPU میٹرکس کو ظاہر کرنے کے لیے، ہم اس کے ساتھ ایک EKS کلسٹر بناتے ہیں۔ g5.2xlarge
مثالیں تاہم، یہ کسی بھی تعاون یافتہ NVIDIA ایکسلریٹڈ مثال فیملی کے ساتھ کام کرے گا۔
ہم NVIDIA GPU آپریٹر کو تعینات کرتے ہیں تاکہ GPU وسائل اور NVIDIA DCGM برآمد کنندہ GPU میٹرکس کے مجموعہ کو فعال کرنے کے لیے۔ پھر ہم دو فن تعمیرات کو دریافت کرتے ہیں۔ پہلا میٹرکس کو NVIDIA DCGM Exporter سے CloudWatch ایجنٹ کے ذریعے CloudWatch سے جوڑتا ہے، جیسا کہ درج ذیل خاکہ میں دکھایا گیا ہے۔
دوسرا فن تعمیر (مندرجہ ذیل خاکہ دیکھیں) DCGM ایکسپورٹر سے میٹرکس کو جوڑتا ہے Prometheus، پھر ہم استعمال کرتے ہیں a گرافانا ان میٹرکس کو دیکھنے کے لیے ڈیش بورڈ۔
شرائط
اس پوسٹ سے پورے اسٹیک کو دوبارہ تیار کرنے کو آسان بنانے کے لیے، ہم ایک کنٹینر استعمال کرتے ہیں جس میں تمام مطلوبہ ٹولنگ (aws cli، eksctl، ہیلم وغیرہ) پہلے سے نصب ہیں۔ کلون کرنے کے لیے GitHub سے کنٹینر پروجیکٹ، تمہیں ضرورت پڑے گی گٹ. کنٹینر بنانے اور چلانے کے لیے، آپ کو ضرورت ہوگی۔ میں Docker. فن تعمیر کو تعینات کرنے کے لیے، آپ کو ضرورت ہو گی۔ AWS اسناد. پورٹ فارورڈنگ کا استعمال کرتے ہوئے Kubernetes سروسز تک رسائی کو فعال کرنے کے لیے، آپ کو بھی ضرورت ہوگی۔ کیوبیکٹل.
یہ شرائط آپ کی مقامی مشین پر انسٹال کی جا سکتی ہیں، EC2 مثال ساتھ NICE DCV، یا AWS کلاؤڈ 9. اس پوسٹ میں، ہم استعمال کریں گے 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 shell" کے طور پر حوالہ دیں گے۔ آپ اس شیل میں درج ذیل حصوں میں کمانڈز چلا رہے ہوں گے، جب تک کہ خاص طور پر دوسری صورت میں ہدایت نہ کی گئی ہو۔
نوڈ گروپ کے ساتھ ایک 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
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
- 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 استعمال پیدا کرنے کے لیے، ہم ایک پوڈ تعینات کرتے ہیں جو چلتا ہے۔ جی پی یو برن بائنری
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% استعمال ہوتی ہے۔
- یہ یقینی بنانے کے لیے کہ اختتامی نقطہ کام کرتا ہے، آپ ایک عارضی کنٹینر چلا سکتے ہیں جو کے مواد کو پڑھنے کے لیے 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
فائل پر مشتمل ہے 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
CloudWatch کنسول پر میٹرکس کا تصور کریں۔
CloudWatch میں میٹرکس کو دیکھنے کے لیے، درج ذیل مراحل کو مکمل کریں:
- CloudWatch کنسول پر، نیچے پیمائش کا معیار نیویگیشن پین میں، منتخب کریں۔ تمام میٹرکس
- میں حسب ضرورت نام کی جگہیں۔ سیکشن، کے لیے نئی اندراج کا انتخاب کریں۔ کنٹینر بصیرت/پرومیتھیس
کے بارے میں مزید معلومات کے لئے کنٹینر بصیرت/پرومیتھیس نام کی جگہ، رجوع کریں۔ اضافی Prometheus ذرائع کو ختم کرنا اور ان میٹرکس کو درآمد کرنا.
- میٹرک ناموں کو ڈرل ڈاؤن کریں اور منتخب کریں۔
DCGM_FI_DEV_GPU_UTIL
- پر گراف شدہ میٹرکس ٹیب، سیٹ دورانئے کرنے کے لئے 5 سیکنڈ
- ریفریش کا وقفہ 10 سیکنڈ پر سیٹ کریں۔
آپ DCGM برآمد کنندہ سے جمع کردہ میٹرکس دیکھیں گے جو gpu-burn
پیٹرن آن اور آف ہر 20 سیکنڈ.
پر براؤز کریں ٹیب، آپ ڈیٹا دیکھ سکتے ہیں، بشمول ہر میٹرک کے لیے پوڈ کا نام۔
EKS API میٹا ڈیٹا کو DCGM میٹرکس ڈیٹا کے ساتھ جوڑ دیا گیا ہے، جس کے نتیجے میں پوڈ پر مبنی GPU میٹرکس فراہم کیے گئے ہیں۔
یہ CloudWatch ایجنٹ کے ذریعے DCGM میٹرکس کو CloudWatch میں برآمد کرنے کے پہلے نقطہ نظر کو ختم کرتا ہے۔
اگلے حصے میں، ہم دوسرے فن تعمیر کو ترتیب دیتے ہیں، جو DCGM میٹرکس کو Prometheus کو برآمد کرتا ہے، اور ہم انہیں Grafana کے ساتھ تصور کرتے ہیں۔
DCGM سے GPU میٹرکس کو دیکھنے کے لیے Prometheus اور Grafana کا استعمال کریں۔
درج ذیل مراحل کو مکمل کریں:
- Prometheus کمیونٹی ہیلم چارٹ شامل کریں۔
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
یہ چارٹ Prometheus اور Grafana دونوں کو تعینات کرتا ہے۔ انسٹال کمانڈ چلانے سے پہلے ہمیں چارٹ میں کچھ ترمیم کرنے کی ضرورت ہے۔
- چارٹ کنفیگریشن ویلیوز کو فائل میں محفوظ کریں۔
/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.
- تصدیق کریں کہ Prometheus pods چل رہے ہیں۔
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
Prometheus اور Grafana pods میں ہیں۔ Running
ریاست.
اگلا، ہم توثیق کرتے ہیں کہ DCGM میٹرکس پرومیتھیس میں بہہ رہے ہیں۔
- Prometheus UI کو پورٹ فارورڈ کریں۔
EKS میں چلنے والے Prometheus UI کو کلسٹر سے باہر شروع ہونے والی درخواستوں کو بے نقاب کرنے کے مختلف طریقے ہیں۔ ہم استعمال کریں گے۔ kubectl port-forwarding
. اب تک، ہم اندر سے کمانڈز پر عملدرآمد کر رہے ہیں۔ aws-do-eks
کنٹینر کلسٹر میں چلنے والی Prometheus سروس تک رسائی کے لیے، ہم میزبان سے ایک سرنگ بنائیں گے۔ یہاں کے 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 &
جب کہ پورٹ فارورڈنگ کا عمل چل رہا ہے، ہم میزبان سے Prometheus UI تک رسائی حاصل کرنے کے قابل ہیں جیسا کہ ذیل میں بیان کیا گیا ہے۔
- Prometheus UI کھولیں۔
- اگر آپ Cloud9 استعمال کر رہے ہیں، تو براہ کرم تشریف لے جائیں۔
Preview->Preview Running Application
Cloud9 IDE کے اندر ایک ٹیب میں Prometheus UI کھولنے کے لیے، پھر کلک کریں۔ ایک نئی ونڈو میں پاپ آؤٹ کرنے کے لیے ٹیب کے اوپری دائیں کونے میں آئیکن۔
- اگر آپ اپنے مقامی میزبان پر ہیں یا ریموٹ ڈیسک ٹاپ کے ذریعے EC2 مثال سے جڑے ہوئے ہیں تو ایک براؤزر کھولیں اور URL ملاحظہ کریں۔
http://localhost:8080
.
- درج
DCGM
DCGM میٹرکس کو دیکھنے کے لیے جو Prometheus میں بہہ رہے ہیں۔
- منتخب کریں
DCGM_FI_DEV_GPU_UTIL
منتخب کریں چلائیں، اور پھر نیویگیٹ کریں۔ گراف متوقع GPU استعمال کا نمونہ دیکھنے کے لیے ٹیب
- Prometheus پورٹ فارورڈنگ کے عمل کو روکیں۔
اپنے میزبان شیل میں درج ذیل کمانڈ لائن کو چلائیں:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
اب ہم گرافانا ڈیش بورڈ کے ذریعے 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
- گرافانا سروس کو پورٹ فارورڈ کریں۔
اپنے میزبان شیل میں درج ذیل کمانڈ لائن کو چلائیں:
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
، پھر ایک نئی ونڈو میں پاپ آؤٹ کریں۔ اگر ریموٹ ڈیسک ٹاپ کے ساتھ اپنا مقامی میزبان یا EC2 مثال استعمال کر رہے ہیں تو URL ملاحظہ کریں۔ http://localhost:8080
. صارف نام کے منتظم کے ساتھ لاگ ان کریں اور پاس ورڈ جو آپ نے پہلے حاصل کیا تھا۔
- نیویگیشن پین میں، منتخب کریں۔ ڈیش بورڈز
- میں سے انتخاب کریں نئی اور درآمد کریں
ہم پہلے سے طے شدہ ڈی سی جی ایم گرافانا ڈیش بورڈ کو درآمد کرنے جا رہے ہیں جس میں بیان کیا گیا ہے۔ NVIDIA DCGM ایکسپورٹر ڈیش بورڈ.
- میدان میں
import via grafana.com
، داخل کریں 12239
اور منتخب کریں لوڈ
- میں سے انتخاب کریں Prometheus ڈیٹا ماخذ کے طور پر
- میں سے انتخاب کریں درآمد کریں
آپ کو مندرجہ ذیل اسکرین شاٹ کی طرح ایک ڈیش بورڈ نظر آئے گا۔
یہ ظاہر کرنے کے لیے کہ یہ میٹرکس پوڈ پر مبنی ہیں، ہم ترمیم کرنے جا رہے ہیں۔ GPU استعمال اس ڈیش بورڈ میں پین۔
- پین اور اختیارات کے مینو کا انتخاب کریں (تین نقطے)
- پھیلائیں آپشنز کے بھی سیکشن اور ترمیم کریں علامات میدان
- وہاں کی قدر کو اس سے بدل دیں۔
Pod {{pod}}
، پھر منتخب کریں محفوظ کریں
لیجنڈ اب دکھاتا ہے۔ gpu-burn
ظاہر کردہ GPU استعمال کے ساتھ منسلک پوڈ کا نام۔
- Grafana UI سروس کو پورٹ فارورڈ کرنا بند کریں۔
اپنے میزبان شیل میں درج ذیل کو چلائیں:
kill -9 $(ps -aef | grep port-forward | grep -v grep | grep prometheus | awk '{print $2}')
اس پوسٹ میں، ہم نے EKS کلسٹر میں تعینات اوپن سورس Prometheus اور Grafana کا استعمال کرتے ہوئے مظاہرہ کیا۔ اگر چاہیں تو اس تعیناتی کے ساتھ متبادل کیا جا سکتا ہے۔ ایمیزون مینیجڈ سروس برائے پرومیتھیس اور ایمیزون کے زیر انتظام گرافانا.
صاف کرو
اپنے بنائے ہوئے وسائل کو صاف کرنے کے لیے، سے درج ذیل اسکرپٹ کو چلائیں۔ aws-do-eks
کنٹینر شیل:
نتیجہ
اس پوسٹ میں، ہم نے NVIDIA DCGM Exporter کو GPU میٹرکس اکٹھا کرنے اور CloudWatch یا Prometheus اور Grafana کے ساتھ تصور کرنے کے لیے استعمال کیا۔ ہم آپ کو اپنے AWS ماحول میں NVIDIA DCGM کے ساتھ GPU استعمال کی نگرانی کو فعال کرنے کے لیے یہاں دکھائے گئے فن تعمیر کو استعمال کرنے کی دعوت دیتے ہیں۔
اضافی وسائل
مصنفین کے بارے میں
عمرو راغب AWS میں ایک سابق پرنسپل سولیوشن آرکیٹیکٹ، EC2 ایکسلریٹڈ کمپیوٹنگ ہے۔ وہ صارفین کو کمپیوٹیشنل ورک بوجھ کو پیمانے پر چلانے میں مدد کرنے کے لیے وقف ہے۔ اپنے فارغ وقت میں، وہ سفر کرنا اور ٹیکنالوجی کو روزمرہ کی زندگی میں ضم کرنے کے نئے طریقے تلاش کرنا پسند کرتا ہے۔
الیکس ایانکولسکی AWS میں ایک پرنسپل سولیوشن آرکیٹیکٹ، سیلف مینیجڈ مشین لرننگ ہے۔ وہ ایک مکمل اسٹیک سافٹ ویئر اور انفراسٹرکچر انجینئر ہے جو گہرا، ہاتھ سے کام کرنا پسند کرتا ہے۔ اپنے کردار میں، وہ کنٹینر سے چلنے والی AWS سروسز پر ML اور AI ورک بوجھ کے کنٹینرائزیشن اور آرکیسٹریشن کے ساتھ صارفین کی مدد کرنے پر توجہ مرکوز کرتا ہے۔ وہ اوپن سورس کے مصنف بھی ہیں۔ فریم ورک کرو اور ایک ڈوکر کپتان جو دنیا کے سب سے بڑے چیلنجز کو حل کرتے ہوئے اختراع کی رفتار کو تیز کرنے کے لیے کنٹینر ٹیکنالوجیز کا اطلاق کرنا پسند کرتا ہے۔ پچھلے 10 سالوں کے دوران، Alex نے AI اور ML کو جمہوری بنانے، موسمیاتی تبدیلیوں کا مقابلہ کرنے، اور سفر کو محفوظ بنانے، صحت کی دیکھ بھال کو بہتر بنانے اور توانائی کو بہتر بنانے پر کام کیا ہے۔
Keita Watanabe Amazon Web Services میں Frameworks ML Solutions کے ایک سینئر سولیوشن آرکیٹیکٹ ہیں جہاں وہ صنعت کے بہترین کلاؤڈ بیسڈ Self-managed Machine Learning سلوشنز تیار کرنے میں مدد کرتے ہیں۔ اس کا پس منظر مشین لرننگ ریسرچ اینڈ ڈیولپمنٹ میں ہے۔ AWS میں شامل ہونے سے پہلے، Keita ای کامرس انڈسٹری میں کام کر رہا تھا۔ Keita کے پاس پی ایچ ڈی ہے۔ ٹوکیو یونیورسٹی سے سائنس میں۔
- SEO سے چلنے والا مواد اور PR کی تقسیم۔ آج ہی بڑھا دیں۔
- پلیٹو ڈیٹا ڈاٹ نیٹ ورک ورٹیکل جنریٹو اے آئی۔ اپنے آپ کو بااختیار بنائیں۔ یہاں تک رسائی حاصل کریں۔
- پلیٹوآئ اسٹریم۔ ویب 3 انٹیلی جنس۔ علم میں اضافہ۔ یہاں تک رسائی حاصل کریں۔
- پلیٹو ای ایس جی۔ آٹوموٹو / ای وی، کاربن، کلین ٹیک، توانائی ، ماحولیات، شمسی، ویسٹ مینجمنٹ یہاں تک رسائی حاصل کریں۔
- پلیٹو ہیلتھ۔ بائیوٹیک اینڈ کلینیکل ٹرائلز انٹیلی جنس۔ یہاں تک رسائی حاصل کریں۔
- چارٹ پرائم۔ ChartPrime کے ساتھ اپنے ٹریڈنگ گیم کو بلند کریں۔ یہاں تک رسائی حاصل کریں۔
- بلاک آفسیٹس۔ ماحولیاتی آفسیٹ ملکیت کو جدید بنانا۔ یہاں تک رسائی حاصل کریں۔
- ماخذ: https://aws.amazon.com/blogs/machine-learning/enable-pod-based-gpu-metrics-in-amazon-cloudwatch/