لینوکس

مانیتورینگ استفاده از GPU در زمان واقعی: راهنمای کامل

مقدمه

سریع‌ترین راه برای مانیتورینگ استفاده از GPU در زمان واقعی روی لینوکس، اجرای دستور nvidia-smi --loop=1 است که آمار GPU را هر ثانیه رفرش می‌کند؛ شامل استفاده از هسته، مصرف VRAM، دما و مصرف توان.

مانیتورینگ استفاده از GPU در زمان واقعی با nvidia-smi شروع می‌شود و سپس به نمای‌های سطح پروسه، متریک‌های کانتینر و هشدارها برای کارهای طولانی‌مدت گسترش می‌یابد. این راهنما گردش کارهای سطح دستور را نشان می‌دهد که می‌توانید آن‌ها را روی اوبونتو، سرورهای GPU پارمین کلود، هاست‌های Docker و کلاسترهای Kubernetes اجرا کنید.

اگر در حال ساخت یا بهره‌برداری از سیستم‌های یادگیری عمیق هستید، این راهنما را همراه با مقاله «راه‌اندازی محیط یادگیری عمیق روی اوبونتو» و سرورهای GPU پارمین کلود مطالعه کنید.

نکات کلیدی

  • برای سریع‌ترین بررسی زمان واقعیِ GPU در سطح هاست روی لینوکس، از nvidia-smi --loop=1 استفاده کنید.
  • برای شناسایی اینکه کدام PID در حال استفاده از هسته‌های GPU و پهنای باند حافظه GPU است، از nvidia-smi pmon -s um استفاده کنید.
  • برای داشبوردهای ترمینالی، از nvtop برای بررسی تعاملی عمیق و از gpustat برای Snapshotهای سبک استفاده کنید.
  • در کانتینرها و Kubernetes، متریک‌ها را از طریق پشتیبانی NVIDIA Runtime و DCGM Exporter در معرض نمایش قرار دهید.
  • هشداردهی دائمی جای خود را در پلتفرم‌های مانیتورینگ مانند Datadog Agent یا قالب‌های Zabbix دارد.
  • استفاده از حافظه GPU و استفاده از هسته GPU دو سیگنال جدا هستند؛ حافظه بالا همراه با هسته پایین، در کارهای متوقف‌شده روی ورودی (Input-Stalled) رایج است.
  • روی ویندوز، مانیتورینگ یکپارچه استفاده از GPU (Unified GPU Usage Monitoring) فعالیت موتورها را جمع‌بندی کرده و آن را در Task Manager و WMI نمایش می‌دهد.

متریک‌های استفاده از GPU واقعاً چه معنایی دارند

متریک‌های استفاده از GPU به شما می‌گویند که کار شما محدود به محاسبات (Compute-Bound) است، محدود به حافظه (Memory-Bound)، محدود به ورودی (Input-Bound) یا بیکارِ بین بچ‌ها. کار را با ردیابی هم‌زمانِ استفاده از هسته، مصرف حافظه، بار کنترلر حافظه، دما و مصرف توان شروع کنید؛ به‌جای نگاه‌کردن به یک متریک به‌صورت ایزوله.

استفاده از هسته GPU در برابر استفاده از حافظه

استفاده از هسته GPU، درصدِ زمانی است که Kernelها در پنجره نمونه‌برداری (Sampling Window) به‌طور فعال روی SMها در حال اجرا هستند. استفاده از حافظه GPU در nvidia-smi معمولاً به فعالیت کنترلر حافظه اشاره دارد، در حالی که مصرف حافظه (Memory Usage) مقدار VRAM تخصیص‌یافته به مبی‌بایت است.

استفاده پایین از هسته همراه با VRAM تخصیص‌یافته بالا اغلب یعنی مدل در حافظه ساکن است اما منتظر داده یا همگام‌سازی (Synchronization) مانده. استفاده بالا از هسته همراه با فعالیت پایین کنترلر حافظه، در Kernelهای سنگین از نظر محاسبات رایج‌تر است.

استفاده از SM، پهنای باند حافظه و مصرف توان

استفاده از SM به شما می‌گوید هسته‌های CUDA مشغول‌اند یا نه؛ پهنای باند حافظه نشان می‌دهد کانال‌های حافظه چقدر سخت در حال کارند و مصرف توان، بار الکتریکی را نسبت به سقف کارت نشان می‌دهد. این سه مورد در کنار هم توضیح می‌دهند که چرا دو بارِ کاری با درصدهای استفاده مشابه می‌توانند عملکرد متفاوتی داشته باشند.

هنگام تنظیم اندازه بچ و تعداد Workerهای DataLoader، از power.draw و power.limit و متریک‌های استفاده در همان پنجره نمونه استفاده کنید. اگر توان در سقف قرار دارد while استفاده بالاست، Throttling کلاک می‌تواند گلوگاه بعدی برای بررسی باشد.

چرا این متریک‌ها برای بارهای کاری یادگیری عمیق مهم هستند

این متریک‌ها مهم‌اند؛ چون توان عبوری (Throughput) آموزش توسط کندترین مرحله خط لوله محدود می‌شود. اگر هسته‌های GPU بیکار باشند درحالی‌که CPU یا ذخیره‌سازی اشباع شده، اضافه‌کردن یک GPU دیگر توان عبوری را اصلاح نمی‌کند.

برای داشتن یک خط پایه عملی از محیط قبل از تنظیمات، مقاله «راه‌اندازی محیط یادگیری عمیق روی اوبونتو» را دنبال کنید.

گلوگاه‌های GPU و خطاهای Out of Memory

بیشتر حوادث GPU در خطوط لوله ML از گلوگاه‌های ورودی یا فشار VRAM می‌آیند. هر دو را هم‌زمان تشخیص دهید؛ با نمونه‌برداری از GPU، CPU و حافظه سطح پروسه درحالی‌که یک کار آموزش واقعی در حال اجراست.

گلوگاه‌های پیش‌پردازش CPU

اگر پیش‌پردازش CPU گلوگاه باشد، استفاده از GPU بین مینی‌بچ‌ها افت می‌کند؛ حتی وقتی VRAM همچنان تخصیص‌یافته مانده. این الگو زمانی ظاهر می‌شود که دیکود تصویر، Augmentation یا Tokenization کندتر از اجرای Kernel باشد.

فشار هاست را درحالی‌که حلقه آموزش شما اجرا می‌شود، بررسی کنید:

top
vmstat 1

خروجی:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2  0      0 824320  74384 901212    0    0     6    10  420  980 18  4 76  2  0

در vmstat، r و wa و bi و us به‌علاوه sy را با هم تماشا کنید. r تعداد پروسه‌های قابل‌اجرا (Runnable) است و اگر بالاتر از تعداد هسته‌های CPU شما بماند، یعنی CPU اشباع شده. wa زمان CPU صرفِ انتظار روی I/O است و مقادیر پایدار بالای ۱۰ تا ۱۵ در حین آموزش اغلب یعنی Workerهای DataLoader روی خواندن از دیسک مسدود شده‌اند. bi بلوک‌های دریافتی از ذخیره‌سازی است و bi بالا همراه با wa بالا به گلوگاه ذخیره‌سازی (نه محاسبات) اشاره دارد. مجموع us + sy کل زمان فعال CPU است و اگر بالا باشد while مقدار GPU-Util پایین است، یعنی پیش‌پردازش از GPU جلو زده. اگر wa بالاست، Workerهای DataLoader را افزایش دهید یا به ذخیره‌سازی سریع‌تری سوئیچ کنید. اگر us + sy بالا همراه با GPU-Util پایین است، Transformها را با کتابخانه‌ای مانند Kornia به GPU منتقل کنید.

چه چیزی باعث خطاهای OOM می‌شود و چطور آن‌ها را رفع کنیم

خطاهای OOM زمانی رخ می‌دهند که تخصیص‌های درخواستی از VRAM موجود بیشتر شوند؛ اغلب به دلیل اندازه بچ بزرگ، طول Sequence بلند یا پروسه‌های هم‌زمان GPU. برای رفع OOM ابتدا فشار حافظه را کم کنید و سپس بار کاری را با احتیاط افزایش دهید.

راه‌حل‌های رایج:

  • اندازه بچ یا طول Sequence را کاهش دهید.
  • برای حفظ اندازه بچ مؤثر، از تجمیع گرادیان (Gradient Accumulation) استفاده کنید.
  • در صورت پشتیبانی، دقت ترکیبی (Mixed Precision) را فعال کنید.
  • پروسه‌های قدیمی و رهاشده GPU را قبل از ری‌استارت خاتمه دهید.
  • Transformهای پرهزینه را به مراحل کارآمدتری از خط لوله منتقل کنید.

اگر پس از یک اجرای ناموفق، پروسه‌ای قدیمی هنوز VRAM را در اختیار دارد، پروسه‌های محاسباتی فعال را فهرست کنید، مالکیت را تأیید کنید، PID قدیمی را خاتمه دهید و سپس آزادشدن حافظه را بررسی کنید.

nvidia-smi --query-compute-apps=pid,used_memory,process_name --format=csv,noheader

خروجی:

18211, 17664 MiB, python
18304, 512 MiB, python
ps -p <PID> -o pid,user,etime,cmd
kill -9 <PID>

روی هاست‌های اشتراکی، PIDهای ناشناس را نکُشید. ابتدا مالکیت پروسه و زمینه کار را تأیید کنید.

nvidia-smi # تأیید کنید که VRAM اکنون آزاد شده است

مانیتورینگ استفاده از GPU با nvidia-smi

nvidia-smi سریع‌ترین ابزار داخلی برای تله‌متری زمان واقعی GPU روی سرورهای لینوکسی است. این ابزار همراه درایورهای NVIDIA در دسترس است و فیلدهایی را مستند می‌کند که بیشتر یکپارچگی‌های سطح بالاتر از آن‌ها استفاده می‌کنند.

مستندات مرجع:

  • NVIDIA System Management Interface (nvidia-smi)
  • NVIDIA DCGM User Guide

خروجی پایه nvidia-smi و معنای هر فیلد

nvidia-smi را بدون هیچ فلگی اجرا کنید تا یک Snapshot کامل از وضعیت GPU و پروسه‌ها بگیرید. ابتدا روی GPU-Util و Memory-Usage و Temp و Pwr:Usage/Cap تمرکز کنید.

nvidia-smi

خروجی:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.xx       Driver Version: 550.xx       CUDA Version: 12.x    |
| GPU  Name        Temp   Pwr:Usage/Cap   Memory-Usage   GPU-Util  Compute M. |
| 0    H100        53C    215W / 350W     18240MiB/81920MiB   78%    Default |
+-----------------------------------------------------------------------------+
| Processes:                                                                |
| GPU   PID   Type   Process name                                GPU Memory |
| 0   18211     C    python train.py                                17664MiB|
+-----------------------------------------------------------------------------+

اگر GPU-Util مقدار 0% را نشان می‌دهد درحالی‌که کاری ظاهراً در حال اجراست، سه علت رایج را بررسی کنید. ممکن است کار هنوز در مرحله پیش‌پردازشِ محدود به CPU باشد و هنوز کاری به GPU ارسال نکرده باشد. ممکن است پروسه با خطا روبرو شده اما زنده و بیکار مانده باشد. همچنین ممکن است کار روی ایندکس GPU دیگری در حال اجرا باشد؛ پس همه دستگاه‌ها را با nvidia-smi --list-gpus فهرست کرده و هر کدام را بررسی کنید.

اجرای nvidia-smi در حالت حلقه پیوسته

وقتی به به‌روزرسانی زنده بدون نوشتن اسکریپت نیاز دارید، از حالت Loop استفاده کنید. فلگ ‎–loop=1‎ هر ثانیه یک بار رفرش می‌کند.

nvidia-smi --loop=1

خروجی:

Wed Mar 26 12:00:01 2026
... snapshot ...
Wed Mar 26 12:00:02 2026
... snapshot ...

ثبت خروجی nvidia-smi در یک فایل

خروجی نمونه‌برداری‌شده را در یک فایل بنویسید تا بعد از اجرا بررسی شود. خروجی استاندارد را Redirect کنید تا هر نمونه در تاریخچه شل و جریان لاگ شما Timestamp داشته باشد.

nvidia-smi --loop=5 > gpu.log
# فایل gpu.log حالا هر ۵ ثانیه یک Snapshot در خود دارد

کوئری گرفتن متریک‌های خاص با nvidia-smi –query-gpu

وقتی به خروجی قابل‌تجزیه برای اسکریپت‌ها نیاز دارید، از ‎–query-gpu‎ همراه ‎–format=csv‎ استفاده کنید. این الگوی ترجیح‌داده‌شده برای کارهای cron و Exporterهای سفارشی است.

nvidia-smi --query-gpu=timestamp,index,name,utilization.gpu,utilization.memory,memory.used,memory.total,temperature.gpu,power.draw --format=csv,noheader,nounits

خروجی:

2026/03/26 12:10:02.123, 0, NVIDIA H100 80GB HBM3, 82, 54, 18420, 81920, 55, 228.31

مانیتورینگ GPU به تفکیک پروسه

مانیتورینگ سطح پروسه به این سوال پاسخ می‌دهد که الان کدام اپلیکیشن در حال مصرف زمان GPU است. از nvidia-smi pmon استفاده کنید تا استفاده را به‌جای فقط به تفکیک دستگاه، به تفکیک PID بررسی کنید.

استفاده از nvidia-smi pmon برای متریک‌های سطح پروسه

pmon را در حالت Loop اجرا کنید تا پروسه‌های محاسباتی فعال را مانیتور کنید. فلگ ‎-s um‎ فعالیتِ مربوط به استفاده و توان عبوری حافظه را به تفکیک پروسه نمایش می‌دهد.

nvidia-smi pmon -s um -d 1

خروجی:

# gpu   pid  type    sm   mem   enc   dec   command
    0 18211     C    76    41     0     0   python
    0 18304     C    12     8     0     0   python

مقدار gpu ایندکس GPUای است که پروسه روی آن اجرا می‌شود. مقدار pid شناسه پروسه است. مقدار type کلاس بار کاری است؛ که C یعنی محاسبات، G یعنی گرافیک و M یعنی ترکیبی. مقدار sm درصد زمان صرف‌شده برای اجرای Kernelها روی Streaming Multiprocessorها است. مقدار mem درصد زمانی است که اینترفیس حافظه برای آن پروسه فعال بوده. مقادیر enc و dec درصدهای استفاده از انکودر و دیکودرند. مقدار command هم نام کوتاه‌شده پروسه است.

نگاشت شناسه پروسه‌ها به نام اپلیکیشن‌ها

PIDها را به خطوط فرمان کامل نگاشت کنید تا Kernelهای نوت‌بوک، اسکریپت‌های آموزش و Workerهای استنتاج را شناسایی کنید. این کار زمانی لازم است که چند کار Python زیر یک کاربر در حال اجرا هستند.

ps -p 18211 -o pid,user,etime,cmd

خروجی:

  PID USER     ELAPSED CMD
18211 mlops    01:22:11 python train.py --model llama --batch-size 8

مانیتورینگ تعاملی GPU با nvtop و gpustat

از nvtop وقتی استفاده کنید که کنترل تعاملی پروسه‌ها می‌خواهید و از gpustat وقتی که Snapshotهای فشرده در اسکریپت‌ها می‌خواهید. هر دو ابزار مکمل nvidia-smi هستند، نه جایگزین آن.

نصب و اجرای nvtop

nvtop را از مخازن اوبونتو نصب کنید و سپس در ترمینال اجرایش کنید. این ابزار نمودارهای زنده و نمای سطح پروسه‌ای مشابه htop فراهم می‌کند.

sudo apt update && sudo apt install -y nvtop
nvtop

خروجی:

GPU0  78%  MEM 18240/81920 MiB  TEMP 54C  PWR 221W
PID 18211 python train.py   GPU 72%   MEM 17664MiB

نصب و اجرای gpustat

gpustat را با pip نصب کنید و سپس برای به‌روزرسانی‌های یک‌ثانیه‌ای از حالت watch استفاده کنید. این ابزار در نشست‌های SSH که خروجی مینیمال اهمیت دارد، کاربردی است.

python3 -m pip install --user -i https://pypi.parmincloud.ir/simple/ gpustat
gpustat --watch 1

خروجی:

hostname  Thu Mar 26 12:25:44 2026
[0] NVIDIA H100 | 54C, 79 % | 18420 / 81920 MB | python/18211(17664M)

چه زمانی از nvtop و چه زمانی از gpustat و چه زمانی از nvidia-smi استفاده کنیم

برای داده‌های متعارفِ سطح درایور و کوئری‌های اسکریپتی از nvidia-smi استفاده کنید. برای Snapshotهای ترمینالی کم‌نویز از gpustat و برای مانیتورینگ تعاملی پروسه‌ها در حین دیباگ فعال از nvtop استفاده کنید.

مانیتورینگ GPU با Glances

از Glances وقتی استفاده کنید که یک داشبورد ترمینالی برای GPU، CPU، حافظه، دیسک و شبکه به‌طور هم‌زمان می‌خواهید. آن را همراه افزونه GPU نصب کنید تا متریک‌های NVIDIA در دسترس باشند.

python3 -m pip install -i https://pypi.parmincloud.ir/simple/ 'glances[gpu]'
glances

خروجی:

GPU NVIDIA H100: util 77% | mem 18240/81920MiB | temp 54C | power 220W
CPU: 21.4%  MEM: 62.1%  LOAD: 2.13 1.87 1.66

در خط GPU مربوط به Glances، مقدار util به فعالیت هسته GPU نگاشت می‌شود و mem مقدار VRAM تخصیص‌یافته نسبت به کل را نشان می‌دهد. مقادیر temp و power هم بار حرارتی و الکتریکی در پنجره نمونه را نشان می‌دهند. این مقادیر را با هم استفاده کنید تا تشخیص دهید فشار بار کاری مربوط به محاسبات است، حافظه یا حرارت. Glances نسبت به nvidia-smi انتخاب بهتری است وقتی که می‌خواهید CPU، حافظه، دیسک و GPU را در یک نمای بدون اسکرول در حین دیباگ تعاملی روی یک نود واحد ببینید.

اگر Glances بخش GPU را نشان نمی‌دهد، تأیید کنید که درایورهای NVIDIA روی هاست نصب هستند و محیط Python اجراکننده Glances به NVML دسترسی دارد.

مانیتورینگ GPU داخل کانتینرهای Docker و Kubernetes

مانیتورینگ GPU کانتینری ابتدا به پشتیبانی Runtime سطح هاست و سپس به جمع‌آوری متریک سطح بار کاری نیاز دارد. برای Docker با NVIDIA Container Toolkit و برای کلاسترهای Kubernetes با DCGM Exporter شروع کنید.

در معرض نمایش گذاشتن متریک‌های GPU در Docker با NVIDIA Container Toolkit

NVIDIA Container Toolkit را روی هاست نصب کنید و سپس کانتینرها را با ‎–gpus all‎ اجرا کنید. داخل کانتینر، nvidia-smi باید تله‌متری GPU هاست را نشان دهد.

پس از راه‌اندازی Docker با دنبال‌کردن مقاله «آموزش نصب و استفاده از Docker روی اوبونتو»، از این بخش استفاده کنید.

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update && sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Runtime انویدیا فقط پس از ری‌استارت دیمن Docker فعال می‌شود. کانتینرهای در حال اجرا تأثیر نمی‌پذیرند، اما هر کانتینر جدیدی که بعد از ری‌استارت راه‌اندازی شود به GPU دسترسی خواهد داشت. برای جزئیات کامل نصب، راهنمای NVIDIA Container Toolkit را ببینید.

docker run --rm --gpus all hub.cr.parmincloud.ir/nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi

خروجی:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.xx       Driver Version: 550.xx       CUDA Version: 12.x    |
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
+-----------------------------------------------------------------------------+

مانیتورینگ استفاده از GPU در Kubernetes با DCGM Exporter

DCGM Exporter را به‌عنوان یک DaemonSet روی نودهای GPU مستقر کنید تا متریک‌های Prometheus در معرض نمایش قرار بگیرند. این کار اهداف Scraping با Labelهای متریکِ به تفکیک GPU و به تفکیک Pod می‌سازد.

dcgm-exporter-daemonset.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: dcgm-exporter
  namespace: gpu-monitoring
spec:
  selector:
    matchLabels:
      app: dcgm-exporter
  template:
    metadata:
      labels:
        app: dcgm-exporter
    spec:
      nodeSelector:
        nvidia.com/gpu.present: "true"
      containers:
        - name: dcgm-exporter
          image: nvcr.io/nvidia/k8s/dcgm-exporter:3.3.8-3.6.0-ubuntu22.04
          ports:
            - containerPort: 9400

خروجی:

# 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-..."} 78

مشاهده متریک‌های GPU در کلاستر Kubernetes مدیریت‌شده پارمین کلود

برای جمع‌آوری متریک‌های GPU در یک کلاستر Kubernetes مدیریت‌شده پارمین کلود، Prometheus را طوری پیکربندی کنید که DaemonSet مربوط به DCGM Exporter را Scrap کند؛ سپس داده‌ها را در Grafana可视化 کرده یا به یک بک‌اند مانیتورینگ میزبانی‌شده فوروارد کنید. داشبوردهای GPU را بر اساس Node Pool و Labelهای بار کاری جدا کنید تا از سردرگمیِ چند-مستأجری (Multi-Tenancy) جلوگیری شود.

قبل از استقرار، اگر تیم شما با اصول اولیه Kubernetes تازه‌وارد است، مقاله «مقدمه‌ای بر Kubernetes» را مرور کنید.

prometheus.yml

scrape_configs:
  - job_name: dcgm-exporter
    static_configs:
      - targets: ['<node-ip>:9400']

در یک کلاستر Kubernetes پارمین کلود، به‌جای IPهای استاتیک نود، از IPهای Pod مربوط به DaemonSet یا نام DNS یک سرویس Kubernetes استفاده کنید. برای جزئیات Import کردن داشبورد Grafana، مستندات NVIDIA DCGM Exporter را ببینید.

راه‌اندازی مانیتورینگ دائمی GPU با Datadog

از Datadog وقتی استفاده کنید که به نگهداری بلندمدت، برش‌دهی مبتنی بر Tag و مسیریابی هشدار به سیستم‌های On-Call نیاز دارید. Agent را روی هر نود GPU نصب کنید و یکپارچگی NVIDIA را فعال کنید.

نصب Datadog Agent با پشتیبانی GPU انویدیا

Agent نسخه ۷ را روی هاست GPU نصب کنید و سپس یکپارچگی nvidia_gpu را فعال کنید. درایورهای هاست و NVML را برای پروسه Agent در دسترس نگه دارید.

DD_API_KEY="<YOUR_DATADOG_API_KEY>" DD_SITE="datadoghq.com" bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)"

یکپارچگی NVML به‌صورت پیش‌فرض همراه Agent 7 عرضه نمی‌شود. آن را جداگانه نصب کنید و سپس nvml.d/conf.yaml را پیکربندی کنید.

sudo datadog-agent integration install -t datadog-nvml==1.0.9

قبل از نصب، آخرین نسخه موجود یکپارچگی NVML را بررسی کنید.

پیکربندی یکپارچگی GPU و استراتژی Tag

Tagها را در سطح هاست و سطح یکپارچگی تعریف کنید تا بتوانید بر اساس کلاستر، محیط و نوع بار کاری گروه‌بندی کنید. این کار مسیریابی هشدار و فیلترهای داشبورد را در مقیاس بزرگ قابل‌استفاده نگه می‌دارد.

/etc/datadog-agent/conf.d/nvml.d/conf.yaml

init_config:

instances:
  - min_collection_interval: 15
    tags:
      - env:prod
      - role:training
      - gpu_vendor:nvidia

این را به‌عنوان /etc/datadog-agent/conf.d/nvml.d/conf.yaml ذخیره کرده و سپس ری‌استارت کنید:

sudo systemctl restart datadog-agent

ساخت داشبورد GPU زمان واقعی و تنظیم هشدارها

پنل‌های سری زمانی برای nvidia.gpu.utilization و nvidia.gpu.memory.used و nvidia.gpu.temperature بسازید و سپس روی اشباع پایدار هشدار بدهید. یک هشدار اولیه عملی این است: استفاده از GPU بالای ۹۵٪ برای ۱۰ دقیقه روی نودهای آموزش production.

برای اصول داشبورد و مانیتور، از مقاله «مانیتورینگ زیرساخت با Datadog» استفاده کنید.

نمونه کوئری مانیتور:

avg(last_10m):avg:nvidia.gpu.utilization{env:prod,role:training} by {host,gpu_index} > 95

راه‌اندازی مانیتورینگ GPU با Zabbix

برای مانیتورینگ هاست‌های GPU با Zabbix، Zabbix Agent را روی هر هاست GPU نصب کنید، قالب NVIDIA GPU را Import کنید و آستانه‌های تریگر را برای استفاده و دما پیکربندی کنید. Zabbix انتخاب درستی است وقتی به مانیتورینگ Self-Hosted با هشداردهی سفارشی و یکپارچگی‌های سازمانی موجود نیاز دارید.

فعال‌سازی قالب NVIDIA GPU در Zabbix

یک قالب NVIDIA GPU را در Zabbix وارد یا متصل کنید و سپس آن را به هاست‌هایی که درایور NVIDIA نصب دارند متصل کنید. آیتم‌های قالب باید استفاده از حافظه، دما و توان را Poll کنند.

مسیر: Data collection -> Templates -> Import

قالب: Nvidia by Zabbix agent 2

برای برخی نسخه‌ها، حالت Active این قالب عبارت است از: Nvidia by Zabbix agent 2 active

منبع رسمی قالب: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/nvidia_agent2

پیکربندی تریگرها برای آستانه‌های استفاده

تریگرهایی برای استفاده بالای پایدار، دمای بالا و افت‌های غیرمنتظره به استفاده صفر در پنجره‌های زمانی آموزشِ برنامه‌ریزی‌شده بسازید. از عبارات تریگر همراه پنجره‌های زمانی استفاده کنید تا از نویز جهش‌های کوتاه جلوگیری شود.

نمونه منطق تریگر با کلیدهای آیتم قالب Zabbix agent 2:

avg(/GPU Host/nvidia.smi[{#GPUINDEX},utilization.gpu],10m)>95
and
last(/GPU Host/nvidia.smi[{#GPUINDEX},temperature.gpu])>85

مقدار {#GPUINDEX} یک ماکرو کشف سطح پایین (LLD) است که به‌طور خودکار توسط قالب پر می‌شود. نیازی به تنظیم دستی آن ندارید.

فعال‌سازی مانیتورینگ یکپارچه استفاده از GPU در ویندوز

مانیتورینگ یکپارچه استفاده از GPU (Unified GPU Usage Monitoring) فعالیت چند موتور GPU را در یک نمای استفاده واحد جمع‌بندی می‌کند تا اپراتورها بتوانند سریع بخوانند. ابتدا آن را از طریق NVIDIA Control Panel فعال کنید و سپس در صورت نیاز توسط پروفایل درایور، سیاست رجیستری را بررسی کنید.

مانیتورینگ یکپارچه استفاده از GPU چیست؟

مانیتورینگ یکپارچه، فعالیت موتورهای گرافیک، محاسبات، کپی و ویدیو را در یک متریک استفاده نرمال‌شده ترکیب می‌کند. این موضوع دید بین-پروسه‌ای را در زمان اجرای بارهای کاری ترکیبی روی یک آداپتور واحد بهبود می‌دهد.

نحوه فعال‌سازی از طریق NVIDIA Control Panel و رجیستری

در NVIDIA Control Panel قابلیت مانیتورینگ فعالیت GPU را فعال کرده و تنظیمات را در کل سیستم اعمال کنید. اگر محیط شما از سیاست مدیریت‌شده استفاده می‌کند، مقدار رجیستری مورد استفاده شاخه درایور NVIDIA خود را برای روشن‌کردن گزارش‌دهی استفاده یکپارچه تنظیم کنید.

نمونه رجیستری ویندوز برای دیدپذیری شمارنده‌های کارایی GPU:

HKEY_LOCAL_MACHINE\SOFTWARE\NVIDIA Corporation\Global\NVTweak
Value name: RmProfilingAdminOnly (DWORD)

مقدار 0 را برای اجازه‌دادن دسترسی غیر ادمین به شمارنده‌های کارایی GPU تنظیم کنید و مقدار 1 را برای دسترسی فقط ادمین.

مرجع: https://developer.nvidia.com/ERR_NVGPUCTRPERM

reg query "HKLM\SOFTWARE\NVIDIA Corporation\Global" /s

نام‌های مقدار رجیستری برای گزارش‌دهی استفاده یکپارچه، بسته به شاخه درایور و ابزار سیاست‌گذاری متفاوت‌اند. کلید و مقدار دقیق را قبل از تغییر سیستم‌های production، با مستندات درایور سازمانی NVIDIA خود اعتبارسنجی کنید.

خواندن داده‌های GPU یکپارچه از طریق Task Manager و WMI

پس از فعال‌سازی مانیتورینگ یکپارچه، Task Manager می‌تواند موتور GPU و استفاده تجمیعی به تفکیک پروسه را نمایش دهد. سپس می‌توان از کوئری‌های WMI برای جمع‌آوری اسکریپتی در گردش کارهای مانیتورینگ مبتنی بر ویندوز استفاده کرد.

powershell -Command "Get-Counter '\GPU Engine(*)\Utilization Percentage' | Select-Object -ExpandProperty CounterSamples | Select-Object InstanceName,CookedValue"

خروجی:

InstanceName                                   CookedValue
pid_1204_luid_0x00000000_0x0000_engtype_3D     27.31
pid_1820_luid_0x00000000_0x0000_engtype_Compute_0  74.02

مقایسه ابزارهای مانیتورینگ GPU

از این جدول برای انتخاب ابزار بر اساس عمق داده، سربار عملیاتی و نیازهای هشداردهی استفاده کنید. برای عیب‌یابی با ابزارهای CLI شروع کنید؛ سپس برای مانیتورینگ دائمی، خطوط لوله Datadog یا Zabbix یا DCGM را اضافه کنید.

جدول مقایسه قابلیت‌ها و توافق‌ها

ابزارپلتفرمنرخ رفرشنمای سطح پروسههشداردهیهزینه
nvidia-smiلینوکس، ویندوز۱ ثانیه و بیشتر (–loop)بله (فهرست پروسه‌ها، pmon)هشدار بومی نداردرایگان
nvtopلینوکستعاملی، نزدیک به زمان واقعیبلههشدار بومی نداردرایگان
gpustatلینوکس۱ ثانیه و بیشتر (–watch)بله (خلاصه)هشدار بومی نداردرایگان
Glancesلینوکس، macOS، ویندوز۱ ثانیه و بیشترجزئیهشدار بومی نداردرایگان
atopلینوکسبازه قابل‌تنظیمبرای GPU غیرمستقیمهشدار بومی نداردرایگان
Datadog Agentلینوکس، ویندوزبازه معمول Agent: ۱۵ ثانیهبله (زمینه Tag و هاست)بلهپولی
Zabbixلینوکس، ویندوزPolling قابل‌تنظیمبله (وابسته به قالب)بلهرایگان (Self-Hosted)
DCGM Exporterلینوکس، Kubernetesمبتنی بر بازه Scrapingبله (وابسته به Label)از طریق Prometheus/Grafana Alertmanagerرایگان

انتخاب ابزار مناسب برای مورد استفاده شما

برای دیباگ تک‌نودی، با nvidia-smi و nvtop شروع کنید. برای دید در سطح ناوگان (Fleet) در سرورهای GPU پارمین کلود و نودهای Kubernetes، از DCGM Exporter به‌همراه بک‌اند مانیتورینگ خود استفاده کنید یا برای نگهداری و هشداردهی، Datadog یا Zabbix را مستقر کنید. اگر به سابقه تاریخی فعالیت GPU در کنار CPU، حافظه و دیسک در یک لاگ واحد نیاز دارید، atop همه این‌ها را در بازه‌های قابل‌تنظیم ثبت می‌کند و ارزش افزودن به هاست‌های آموزش طولانی‌مدت در کنار nvidia-smi را دارد.

سوالات متداول

۱. سریع‌ترین راه بررسی استفاده از GPU در زمان واقعی روی لینوکس چیست؟

دستور nvidia-smi --loop=1 را اجرا کنید. این دستور هر ثانیه یک بار رفرش می‌شود و استفاده، مصرف حافظه، دما و مصرف توان را در یک نمای واحد نشان می‌دهد. این معمولاً اولین بررسی در طول Triage حادثه است.

۲. چطور استفاده از GPU را به تفکیک یک اپلیکیشن یا پروسه خاص مانیتور کنم؟

از nvidia-smi pmon -s um -d 1 برای نمایش فعالیت GPU به تفکیک پروسه همراه با PIDها استفاده کنید. سپس PID را با ps -p <PID> -o cmd نگاشت کنید تا اپلیکیشن دقیق شناسایی شود. این سریع‌ترین مسیر برای ایزوله‌کردن کارهای پرهزینه است.

۳. چطور استفاده از GPU را داخل یک کانتینر Docker مانیتور کنم؟

NVIDIA Container Toolkit را روی هاست نصب کنید و کانتینرها را با ‎–gpus all‎ اجرا کنید. پس از راه‌اندازی کانتینر، nvidia-smi را داخل آن اجرا کنید تا دسترسی و استفاده را تأیید کنید. برای متریک‌های دائمی، با DCGM Exporter جمع‌آوری کنید.

۴. فعال‌کردن مانیتورینگ یکپارچه استفاده از GPU به چه معناست؟

یعنی فعالیت GPU از چند موتور در یک سیگنال استفاده واحد جمع‌بندی می‌شود. این موضوع تفسیر استفاده در سطح پروسه و سطح آداپتور را در بارهای کاری ترکیبی آسان‌تر می‌کند. روی ویندوز، این داده‌ها سپس در Task Manager قابل مشاهده و از طریق شمارنده‌ها و ابزارهای مبتنی بر WMI قابل دسترس هستند.

۵. چطور مانیتورینگ GPU را در Datadog راه‌اندازی کنم؟

Datadog Agent نسخه ۷ را روی هر هاست GPU نصب کنید، یکپارچگی NVIDIA را فعال کنید و Agent را ری‌استارت کنید. پس از فعال‌سازی، متریک‌ها در فضای نام nvidia.gpu.* برای داشبوردها و مانیتورها ظاهر می‌شوند. قبل از ساخت هشدارها، Tagهایی مانند محیط و نقش اضافه کنید.

۶. آیا می‌توانم استفاده از GPU را در یک کلاستر Kubernetes مانیتور کنم؟

بله. DCGM Exporter را به‌عنوان DaemonSet روی نودهای GPU مستقر کنید و آن را با Prometheus اسکرپ کنید. این کار متریک‌های زمان واقعی GPU را در سراسر نودها و بارهای کاری فراهم می‌کند. برای مصورسازی و هشداردهی، از Grafana و Alertmanager یا یک بک‌اند میزبانی‌شده استفاده کنید.

۷. تفاوت استفاده از GPU و استفاده از حافظه GPU چیست؟

استفاده از GPU نشان می‌دهد موتورهای محاسباتی در یک دوره نمونه چقدر مشغول بوده‌اند. استفاده از حافظه GPU فعالیت زیرسیستم حافظه را نشان می‌دهد، در حالی که حافظه مصرف‌شده به تخصیص VRAM اشاره دارد. یک کار می‌تواند VRAM زیادی تخصیص دهد و هم‌زمان در زمان وقوع توقف ورودی، استفاده محاسباتی پایینی نشان دهد.

۸. چطور استفاده از GPU را با Zabbix مانیتور کنم؟

Zabbix Agent را روی هاست‌های GPU نصب کنید و یک قالب NVIDIA GPU که بررسی‌های مبتنی بر nvidia-smi اجرا می‌کند را متصل کنید. استفاده، حافظه، دما و توان را به‌عنوان آیتم ردیابی کنید. برای بار پایدار و ریسک حرارتی، آستانه‌های تریگر اضافه کنید.

جمع‌بندی

مانیتورینگ زمان واقعیِ استفاده از GPU برای بهینه‌سازی کارایی یادگیری عمیق، عیب‌یابی گلوگاه‌ها و رسیدن به مصرف کارآمد منابع ضروری است — چه روی نودهای منفرد، چه داخل کانتینرها و چه در مقیاس‌دهی در محیط‌های کلاستری. ابزار مانیتورینگ مناسب به مورد استفاده خاص شما بستگی دارد: بررسی‌های سریع یک‌باره، دیباگ تعاملی، دید پیوسته در سطح ناوگان یا نگهداری بلندمدت متریک‌ها و هشداردهی.

با ابزارهای ساده‌ای مانند nvidia-smi برای دید فوری شروع کنید و با رشد نیازها، به داشبوردسازی، هشداردهی سفارشی و راهکارهای در سطح سازمانی پیشروی کنید. با استراتژی‌ها و ابزارهای معرفی‌شده در این راهنما، می‌توانید به‌طور پیشگیرانه بارهای کاری GPU خود را مانیتور، عیب‌یابی و حداکثرسازی کنید و از عملکرد روان‌تر برای خطوط لوله توسعه، آموزش و استقرار اطمینان حاصل نمایید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا