CUDA के उपयोग से GPU के लिए शीर्ष कमान


127

मैं एक प्रक्रिया की निगरानी करने की कोशिश कर रहा हूं जो cuda और MPI का उपयोग करता है, क्या ऐसा कोई तरीका है जिससे मैं यह कर सकता हूं, कमांड "टॉप" जैसा कुछ है लेकिन यह भी GPU की निगरानी करता है?



"nvidia-smi pmon -i 0" nvidia GPU 0 पर चलने वाली सभी प्रक्रिया की निगरानी कर सकता है
changqi.xia

जवाबों:


84

मुझे gpustat बहुत उपयोगी लगता है । के साथ स्थापित किया जा सकता है pip install gpustat, और प्रक्रियाओं या उपयोगकर्ताओं द्वारा उपयोग के टूटने को प्रिंट करता है।

यहां छवि विवरण दर्ज करें


4
लगा देने के बाद आप watch gpustat -cpलगातार आँकड़े देख सकते हैं लेकिन रंग चले गए हैं। आप इसे कैसे ठीक करते हैं? @ एलो
अभिमन्यु

1
@AbhimanyuAryan उपयोग watch -c। @ रमन ओराक, धन्यवाद, इसने मेरे लिए भी रेडहैट 8 पर काम किया जब मुझे अजगर में _curses आयात करने के कारण कुछ त्रुटि हो रही थी।
बोबाक हाशमी

4
watch -c gpustat -cp --color
ली नेथर्टन

1
watch -n 0.5 -c gpustat -cp --color
गेब्रियल रोमोन

4
gpustat के पास अब एक --watchविकल्प है:gpustat -cp --watch
jayelm

139

प्रयुक्त संसाधनों पर वास्तविक समय की जानकारी प्राप्त करने के लिए, करें:

nvidia-smi -l 1

यह लूप देगा और प्रत्येक सेकंड में दृश्य को कॉल करेगा।

यदि आप कंसोल इतिहास में लूपेड कॉल के पिछले निशान नहीं रखना चाहते हैं, तो आप यह भी कर सकते हैं:

watch -n0.1 nvidia-smi

जहां 0.1 सेकंड में समय अंतराल है।

यहां छवि विवरण दर्ज करें


2
हर 0.1 सेकंड में कार्ड छोड़ना? क्या यह कार्ड पर लोड का कारण बनने वाला है? साथ ही, घड़ी का उपयोग करके, आपकी प्रक्रिया हर 0.1 सेकंड में एक नई प्रक्रिया शुरू करती है।
मिक टी

@ विकट क्या यह एक बड़ी बात है? Nvidia-smi के रूप में यह बिल्डिंग लूप है! क्या "घड़ी" कमांड एनविडिया-एसआई-एल से बहुत अलग है?
मोहम्मद जवाद

यह हो सकता है, मैंने देखा है कि निचले-छोर वाले कार्डों में अजीब लॉक-अप हैं और मुझे लगता है कि यह इसलिए है क्योंकि बहुत से उपयोगकर्ता कार्डों पर एनवीडिया-एसएमआई चला रहे थे। मुझे लगता है कि 'nvidia-smi -l' का उपयोग करना एक बेहतर तरीका है क्योंकि आप हर बार एक नई प्रक्रिया के लिए मजबूर नहीं होते। इसके अलावा, हर ०.१ सेकंड में कार्ड की जाँच करना ओवरकिल है, मैं हर सेकंड तब करूँगा जब मैं किसी मुद्दे को डीबग करना चाहूंगा, अन्यथा मैं प्रदर्शन की निगरानी के लिए हर ५ मिनट में करता हूँ। मुझे आशा है कि वह मदद करेंगे! :)
मिक टी

@ गुलज़ार हाँ, यह है।
TrostAft

83

मुझे ऐसी किसी भी चीज़ के बारे में जानकारी नहीं है जो इस जानकारी को जोड़ती है, लेकिन आप nvidia-smiकच्चे डेटा को प्राप्त करने के लिए टूल का उपयोग कर सकते हैं , जैसे (टिप पर-एल के लिए @jmsu के लिए धन्यवाद):

$ nvidia-smi -q -g 0 -d UTILIZATION -l

==============NVSMI LOG==============

Timestamp                       : Tue Nov 22 11:50:05 2011

Driver Version                  : 275.19

Attached GPUs                   : 2

GPU 0:1:0
    Utilization
        Gpu                     : 0 %
        Memory                  : 0 %

4
मुझे लगता है कि यदि आप इसमें एक-एल जोड़ते हैं तो आपको यह GPU और मेमोरी के उपयोग को प्रभावी ढंग से मॉनिटर करने के लिए लगातार अपडेट करने के लिए मिलता है।
jmsu

6
क्या होगा जब मैं इसे चलाने के लिए GPU उपयोगिता का सिर्फ एन / ए कहता है ??
नाटोर्रो

3
@natorro कुछ कार्ड के लिए nVidia गिरा समर्थन की तरह लग रहा है। इस लिंक की जाँच करें forums.nvidia.com/index.php?showtopic=205165
jmsu

29
मैं पसंद करता हूं watch -n 0.5 nvidia-smi, जो आपके टर्मिनल को आउटपुट से भरने से बचता है
एलियाम

nvidia-smi pmon -i 0
changqi.xia

19

यहां से नवीनतम स्थिर CUDA ड्राइवर (4.2) डाउनलोड और इंस्टॉल करें । Linux पर, nVidia-smi 295.41 आपको वही देता है जो आप चाहते हैं। उपयोग nvidia-smi:

[root@localhost release]# nvidia-smi 
Wed Sep 26 23:16:16 2012       
+------------------------------------------------------+                       
| NVIDIA-SMI 3.295.41   Driver Version: 295.41         |                       
|-------------------------------+----------------------+----------------------+
| Nb.  Name                     | Bus Id        Disp.  | Volatile ECC SB / DB |
| Fan   Temp   Power Usage /Cap | Memory Usage         | GPU Util. Compute M. |
|===============================+======================+======================|
| 0.  Tesla C2050               | 0000:05:00.0  On     |         0          0 |
|  30%   62 C  P0    N/A /  N/A |   3%   70MB / 2687MB |   44%     Default    |
|-------------------------------+----------------------+----------------------|
| Compute processes:                                               GPU Memory |
|  GPU  PID     Process name                                       Usage      |
|=============================================================================|
|  0.  7336     ./align                                                 61MB  |
+-----------------------------------------------------------------------------+

EDIT: नवीनतम NVIDIA ड्राइवरों में, यह समर्थन टेस्ला कार्ड्स तक सीमित है।


18

तर्क का उपयोग करें "- प्रश्न-गणना-ऐप्स ="

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

आगे की मदद के लिए, कृपया अनुसरण करें

nvidia-smi --help-query-compute-app

17

बस उपयोग करें watch nvidia-smi, यह डिफ़ॉल्ट रूप से संदेश 2s अंतराल से आउटपुट करेगा।

उदाहरण के लिए, नीचे की छवि के रूप में:

यहां छवि विवरण दर्ज करें

तुम भी watch -n 5 nvidia-smi(5s 5 एस अंतराल द्वारा) का उपयोग कर सकते हैं ।


16

एक अन्य उपयोगी निगरानी दृष्टिकोण है psकि आप अपने GPU का उपभोग करने वाली प्रक्रियाओं पर फ़िल्टर्ड का उपयोग करें। मैं इस एक बहुत का उपयोग करें:

ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`

यह सभी एनवीडिया जीपीयू-उपयोग प्रक्रियाओं और उनके बारे में कुछ आँकड़े दिखाएगा। lsof ...वर्तमान उपयोगकर्ता के स्वामित्व वाले एनवीडिया जीपीयू का उपयोग करके सभी प्रक्रियाओं की सूची प्राप्त करता है, और उन प्रक्रियाओं के लिए परिणाम ps -p ...दिखाता psहै। ps fबच्चे / माता-पिता के रिश्तों / पदानुक्रमों के लिए अच्छा स्वरूपण दिखाता है, और -oएक कस्टम स्वरूपण निर्दिष्ट करता है। वह केवल करने के समान है, ps uलेकिन प्रक्रिया समूह आईडी जोड़ता है और कुछ अन्य फ़ील्ड निकालता है।

इस ओवर nvidia-smiका एक फायदा यह है कि यह प्रक्रिया कांटे के साथ-साथ मुख्य प्रक्रियाओं को भी दिखाएगा जो कि GPU का उपयोग करते हैं।

एक नुकसान, हालांकि, यह उपयोगकर्ता के स्वामित्व वाली प्रक्रियाओं तक सीमित है जो कमांड निष्पादित करता है। किसी भी उपयोगकर्ता के स्वामित्व वाली सभी प्रक्रियाओं तक इसे खोलने के लिए, मैं sudoपहले एक को जोड़ता हूं lsof

अंत में, मैं इसे watchनिरंतर अद्यतन प्राप्त करने के लिए संयोजित करता हूं । तो, अंत में, ऐसा लगता है:

watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'

जिसमें आउटपुट है:

Every 0.1s: ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvi...  Mon Jun  6 14:03:20 2016
USER      PGRP   PID %CPU %MEM  STARTED     TIME COMMAND
grisait+ 27294 50934  0.0  0.1   Jun 02 00:01:40 /opt/google/chrome/chrome --type=gpu-process --channel=50877.0.2015482623
grisait+ 27294 50941  0.0  0.0   Jun 02 00:00:00  \_ /opt/google/chrome/chrome --type=gpu-broker
grisait+ 53596 53596 36.6  1.1 13:47:06 00:05:57 python -u process_examples.py
grisait+ 53596 33428  6.9  0.5 14:02:09 00:00:04  \_ python -u process_examples.py
grisait+ 53596 33773  7.5  0.5 14:02:19 00:00:04  \_ python -u process_examples.py
grisait+ 53596 34174  5.0  0.5 14:02:30 00:00:02  \_ python -u process_examples.py
grisait+ 28205 28205  905  1.5 13:30:39 04:56:09 python -u train.py
grisait+ 28205 28387  5.8  0.4 13:30:49 00:01:53  \_ python -u train.py
grisait+ 28205 28388  5.3  0.4 13:30:49 00:01:45  \_ python -u train.py
grisait+ 28205 28389  4.5  0.4 13:30:49 00:01:29  \_ python -u train.py
grisait+ 28205 28390  4.5  0.4 13:30:49 00:01:28  \_ python -u train.py
grisait+ 28205 28391  4.8  0.4 13:30:49 00:01:34  \_ python -u train.py

2
आप sudoइस तरह के बिना सभी उपयोगकर्ताओं के GPU पर कब्जा करने वाले कंप्यूट प्रोग्राम्स के PID भी प्राप्त कर सकते हैं :nvidia-smi --query-compute-apps=pid --format=csv,noheader
लेनार होयट

1
कभी-कभी nvidia-smiसभी प्रक्रियाओं को सूचीबद्ध नहीं किया जाता है, इसलिए आप अपनी स्मृति के साथ समाप्त होते हैं जो कि वहां सूचीबद्ध नहीं प्रक्रियाओं द्वारा उपयोग की जाती है। यह मुख्य तरीका है जिससे मैं उन प्रक्रियाओं को ट्रैक और मार सकता हूं।
रंड

1
@grisaitis Carefull, मुझे नहीं लगता कि pmemदिया गया psGPU की कुल मेमोरी को ध्यान में रखता है, लेकिन सीपीयू की वजह psसे "Nvidia GPU" जागरूक नहीं है
SebMa

10

आप कोशिश कर सकते हैं nvtop, जो कि व्यापक रूप से उपयोग किए जाने वाले htopउपकरण के समान है, लेकिन NVIDIA GPU के लिए है। यहाँ nvtopकार्रवाई में इसका एक स्क्रीनशॉट है ।

एक्शन में एनवीटॉप का स्क्रीनशॉट


3

यह सुरुचिपूर्ण नहीं हो सकता है, लेकिन आप कोशिश कर सकते हैं

while true; do sleep 2; nvidia-smi; done

मैंने @Edric द्वारा विधि की भी कोशिश की, जो काम करता है, लेकिन मैं मूल लेआउट को पसंद करता हूं nvidia-smi


12
या आप बस कर सकते हैं nvidia-smi -l 2। या दोहराया कंसोल आउटपुट को रोकने के लिए,watch -n 2 'nvidia-smi'
ग्रैजाइटिस

3

यदि आप बस उस प्रक्रिया को खोजना चाहते हैं जो gpu पर चल रही है, तो आप बस निम्नलिखित कमांड का उपयोग कर सकते हैं:

lsof /dev/nvidia*

मेरे लिए nvidia-smiऔर watch -n 1 nvidia-smiज्यादातर मामलों में पर्याप्त हैं। कभी-कभी nvidia-smiकोई प्रक्रिया नहीं दिखाई देती है, लेकिन gpu मेमोरी का उपयोग किया जाता है, इसलिए मुझे प्रक्रियाओं को खोजने के लिए उपरोक्त कमांड का उपयोग करने की आवश्यकता है।


2

लिनक्स टकसाल, और सबसे अधिक संभावना उबंटू में, आप "एनवीडिया-एसआईआई - लूप = 1" की कोशिश कर सकते हैं


0

नहीं है प्रोमेथियस GPU मेट्रिक्स निर्यातक (PGME) कि nvidai-SMI बाइनरी लाभ उठाता है। आप इसे आजमा सकते हैं। एक बार आपके पास निर्यातक चल रहा है, तो आप इसे http: // localhost: 9101 / मेट्रिक्स के माध्यम से एक्सेस कर सकते हैं । दो GPU के लिए, नमूना परिणाम इस तरह दिखता है:

temperature_gpu{gpu="TITAN X (Pascal)[0]"} 41
utilization_gpu{gpu="TITAN X (Pascal)[0]"} 0
utilization_memory{gpu="TITAN X (Pascal)[0]"} 0
memory_total{gpu="TITAN X (Pascal)[0]"} 12189
memory_free{gpu="TITAN X (Pascal)[0]"} 12189
memory_used{gpu="TITAN X (Pascal)[0]"} 0
temperature_gpu{gpu="TITAN X (Pascal)[1]"} 78
utilization_gpu{gpu="TITAN X (Pascal)[1]"} 95
utilization_memory{gpu="TITAN X (Pascal)[1]"} 59
memory_total{gpu="TITAN X (Pascal)[1]"} 12189
memory_free{gpu="TITAN X (Pascal)[1]"} 1738
memory_used{gpu="TITAN X (Pascal)[1]"} 10451

0

आप nvidia-smi pmon -i 0GPU 0. में हर प्रक्रिया की निगरानी करने के लिए उपयोग कर सकते हैं , जिसमें कंप्यूट मोड, sm उपयोग, मेमोरी उपयोग, एनकोडर उपयोग, डिकोडर उपयोग शामिल हैं।


0

आप अपने GPU मॉनिटरिंग प्लग-इन के साथ निगरानी कार्यक्रम की झलक का उपयोग कर सकते हैं :

  • खुला स्त्रोत
  • स्थापित करने के लिए: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • शुभारंभ करना: sudo glances

यहां छवि विवरण दर्ज करें

यह सीपीयू, डिस्क IO, डिस्क स्थान, नेटवर्क और कुछ अन्य चीजों पर भी नज़र रखता है:

यहां छवि विवरण दर्ज करें


0

मैंने हर सेकंड की निगरानी के लिए एक विंडोज़ मशीन में निम्न कोड के साथ एक बैच फ़ाइल बनाई। इससे मेरा काम बनता है।

:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop

nvidia-smi exe आमतौर पर "C: \ Program Files \ NVIDIA Corporation" में स्थित है यदि आप केवल एक बार कमांड चलाना चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.