मैं एक प्रक्रिया की निगरानी करने की कोशिश कर रहा हूं जो cuda और MPI का उपयोग करता है, क्या ऐसा कोई तरीका है जिससे मैं यह कर सकता हूं, कमांड "टॉप" जैसा कुछ है लेकिन यह भी GPU की निगरानी करता है?
मैं एक प्रक्रिया की निगरानी करने की कोशिश कर रहा हूं जो cuda और MPI का उपयोग करता है, क्या ऐसा कोई तरीका है जिससे मैं यह कर सकता हूं, कमांड "टॉप" जैसा कुछ है लेकिन यह भी GPU की निगरानी करता है?
जवाबों:
मुझे gpustat बहुत उपयोगी लगता है । के साथ स्थापित किया जा सकता है pip install gpustat
, और प्रक्रियाओं या उपयोगकर्ताओं द्वारा उपयोग के टूटने को प्रिंट करता है।
watch gpustat -cp
लगातार आँकड़े देख सकते हैं लेकिन रंग चले गए हैं। आप इसे कैसे ठीक करते हैं? @ एलो
watch -c
। @ रमन ओराक, धन्यवाद, इसने मेरे लिए भी रेडहैट 8 पर काम किया जब मुझे अजगर में _curses आयात करने के कारण कुछ त्रुटि हो रही थी।
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watch
विकल्प है:gpustat -cp --watch
nvidia-smi -l 1
यह लूप देगा और प्रत्येक सेकंड में दृश्य को कॉल करेगा।
यदि आप कंसोल इतिहास में लूपेड कॉल के पिछले निशान नहीं रखना चाहते हैं, तो आप यह भी कर सकते हैं:
watch -n0.1 nvidia-smi
जहां 0.1 सेकंड में समय अंतराल है।
मुझे ऐसी किसी भी चीज़ के बारे में जानकारी नहीं है जो इस जानकारी को जोड़ती है, लेकिन आप 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 %
watch -n 0.5 nvidia-smi
, जो आपके टर्मिनल को आउटपुट से भरने से बचता है
यहां से नवीनतम स्थिर 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 ड्राइवरों में, यह समर्थन टेस्ला कार्ड्स तक सीमित है।
एक अन्य उपयोगी निगरानी दृष्टिकोण है 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
sudo
इस तरह के बिना सभी उपयोगकर्ताओं के GPU पर कब्जा करने वाले कंप्यूट प्रोग्राम्स के PID भी प्राप्त कर सकते हैं :nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
सभी प्रक्रियाओं को सूचीबद्ध नहीं किया जाता है, इसलिए आप अपनी स्मृति के साथ समाप्त होते हैं जो कि वहां सूचीबद्ध नहीं प्रक्रियाओं द्वारा उपयोग की जाती है। यह मुख्य तरीका है जिससे मैं उन प्रक्रियाओं को ट्रैक और मार सकता हूं।
pmem
दिया गया ps
GPU की कुल मेमोरी को ध्यान में रखता है, लेकिन सीपीयू की वजह ps
से "Nvidia GPU" जागरूक नहीं है
यह सुरुचिपूर्ण नहीं हो सकता है, लेकिन आप कोशिश कर सकते हैं
while true; do sleep 2; nvidia-smi; done
मैंने @Edric द्वारा विधि की भी कोशिश की, जो काम करता है, लेकिन मैं मूल लेआउट को पसंद करता हूं nvidia-smi
।
nvidia-smi -l 2
। या दोहराया कंसोल आउटपुट को रोकने के लिए,watch -n 2 'nvidia-smi'
यदि आप बस उस प्रक्रिया को खोजना चाहते हैं जो gpu पर चल रही है, तो आप बस निम्नलिखित कमांड का उपयोग कर सकते हैं:
lsof /dev/nvidia*
मेरे लिए nvidia-smi
और watch -n 1 nvidia-smi
ज्यादातर मामलों में पर्याप्त हैं। कभी-कभी nvidia-smi
कोई प्रक्रिया नहीं दिखाई देती है, लेकिन gpu मेमोरी का उपयोग किया जाता है, इसलिए मुझे प्रक्रियाओं को खोजने के लिए उपरोक्त कमांड का उपयोग करने की आवश्यकता है।
नहीं है प्रोमेथियस 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
आप nvidia-smi pmon -i 0
GPU 0. में हर प्रक्रिया की निगरानी करने के लिए उपयोग कर सकते हैं , जिसमें कंप्यूट मोड, sm उपयोग, मेमोरी उपयोग, एनकोडर उपयोग, डिकोडर उपयोग शामिल हैं।
आप अपने GPU मॉनिटरिंग प्लग-इन के साथ निगरानी कार्यक्रम की झलक का उपयोग कर सकते हैं :
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
sudo glances
यह सीपीयू, डिस्क IO, डिस्क स्थान, नेटवर्क और कुछ अन्य चीजों पर भी नज़र रखता है:
मैंने हर सेकंड की निगरानी के लिए एक विंडोज़ मशीन में निम्न कोड के साथ एक बैच फ़ाइल बनाई। इससे मेरा काम बनता है।
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
nvidia-smi exe आमतौर पर "C: \ Program Files \ NVIDIA Corporation" में स्थित है यदि आप केवल एक बार कमांड चलाना चाहते हैं।