คำสั่งด้านบนสำหรับ GPU โดยใช้ CUDA


127

ฉันกำลังพยายามตรวจสอบกระบวนการที่ใช้ cuda และ MPI มีวิธีใดบ้างที่ฉันทำได้เช่นคำสั่ง "top" แต่จะตรวจสอบ GPU ด้วยหรือไม่


2
นอกจากนี้ยังมี nvtop github.com/Syllo/nvtop
konvas

"nvidia-smi pmon -i 0" สามารถตรวจสอบกระบวนการทั้งหมดที่ทำงานบน nvidia GPU 0
changqi.xia

คำตอบ:


84

ฉันพบว่าgpustatมีประโยชน์มาก ในสามารถติดตั้งpip install gpustatและพิมพ์รายละเอียดการใช้งานตามกระบวนการหรือผู้ใช้

ใส่คำอธิบายภาพที่นี่


4
หลังจากใส่แล้วwatch gpustat -cpคุณสามารถดูสถิติได้อย่างต่อเนื่อง แต่สีจะหายไป คุณจะแก้ไขได้อย่างไร? @Alleo
CodingOnSteroid

1
@AbhimanyuAryan ใช้watch -c. @ Roman Orac ขอบคุณสิ่งนี้ใช้ได้กับฉันใน redhat 8 เมื่อฉันได้รับข้อผิดพลาดเนื่องจากการนำเข้า _curses ใน python
Bobak Hashemi

4
watch -c gpustat -cp --color
Lee Netherton

1
watch -n 0.5 -c gpustat -cp --color
Gabriel Romon

4
gpustat มี--watchตัวเลือก:gpustat -cp --watch
jayelm

142

หากต้องการรับข้อมูลเชิงลึกแบบเรียลไทม์เกี่ยวกับทรัพยากรที่ใช้ให้ทำ:

nvidia-smi -l 1

สิ่งนี้จะวนซ้ำและเรียกมุมมองทุกวินาที

หากคุณไม่ต้องการเก็บร่องรอยของการโทรแบบวนซ้ำในประวัติคอนโซลคุณสามารถทำได้ดังนี้

watch -n0.1 nvidia-smi

โดยที่ 0.1 คือช่วงเวลาเป็นวินาที

ใส่คำอธิบายภาพที่นี่


2
กำลังค้นหาการ์ดทุกๆ 0.1 วินาทีหรือไม่? จะทำให้เกิดภาระในการ์ดหรือไม่? นอกจากนี้การใช้นาฬิกาคุณจะเริ่มกระบวนการใหม่ทุกๆ 0.1 วินาที
มิก T

@MickT เรื่องใหญ่มั้ย? เนื่องจาก Nvidia-smi มีโครงสร้างแบบนี้! คำสั่ง "watch" แตกต่างจาก nvidia-smi -l มากหรือไม่?
Mohammad Javad

อาจเป็นไปได้ว่าฉันเคยเห็นการ์ดระดับล่างมีการล็อคแบบแปลก ๆ และฉันคิดว่าเป็นเพราะผู้ใช้จำนวนมากเกินไปที่ใช้ nvidia-smi บนการ์ด ฉันคิดว่าการใช้ 'nvidia-smi -l' เป็นวิธีที่ดีกว่าเนื่องจากคุณไม่ต้องใช้กระบวนการใหม่ทุกครั้ง นอกจากนี้การตรวจสอบการ์ดทุก ๆ 0.1 วินาทีนั้นเกินความจำเป็นฉันจะทำทุกวินาทีเมื่อฉันพยายามแก้ไขปัญหามิฉะนั้นฉันจะตรวจสอบประสิทธิภาพทุกๆ 5 นาที หวังว่าจะช่วยได้! :)
มิก T

@Gulzar ใช่มันเป็น
TrostAft

83

ฉันไม่รู้อะไรเลยที่รวมข้อมูลนี้ แต่คุณสามารถใช้nvidia-smiเครื่องมือเพื่อรับข้อมูลดิบได้เช่นนั้น (ขอบคุณ @jmsu สำหรับเคล็ดลับใน -l):

$ 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
ฉันคิดว่าถ้าคุณเพิ่ม a -l เข้าไปคุณจะได้รับการอัปเดตอย่างต่อเนื่องเพื่อตรวจสอบการใช้ GPU และหน่วยความจำอย่างมีประสิทธิภาพ
jmsu

6
จะเกิดอะไรขึ้นถ้าเมื่อฉันเรียกใช้ GPU utilizacion บอกว่า N / A ??
natorro

3
@natorro ดูเหมือนว่า nVidia จะลดการรองรับการ์ดบางใบ ตรวจสอบลิงค์นี้forums.nvidia.com/index.php?showtopic=205165
jmsu

29
ฉันชอบwatch -n 0.5 nvidia-smiซึ่งหลีกเลี่ยงการเติมเทอร์มินัลของคุณด้วยเอาต์พุต
ali_m

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  |
+-----------------------------------------------------------------------------+

แก้ไข: ในไดรเวอร์ NVIDIA ล่าสุดการสนับสนุนนี้ จำกัด เฉพาะการ์ด Tesla


18

ใช้อาร์กิวเมนต์ "--query-compute-apps ="

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

สำหรับความช่วยเหลือเพิ่มเติมโปรดติดตาม

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

17

เพียงแค่ใช้watch nvidia-smiมันจะส่งออกข้อความตามช่วงเวลา 2 วินาทีในค่าเริ่มต้น

ตัวอย่างเช่นภาพด้านล่าง:

ใส่คำอธิบายภาพที่นี่

คุณยังสามารถใช้watch -n 5 nvidia-smi(ช่วง -n 5 คูณ 5 วินาที)


16

วิธีการตรวจสอบที่มีประโยชน์อีกวิธีหนึ่งคือการใช้การpsกรองในกระบวนการที่ใช้ GPU ของคุณ ฉันใช้อันนี้บ่อยมาก:

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

นั่นจะแสดงกระบวนการใช้ GPU ของ nvidia ทั้งหมดและสถิติบางอย่างเกี่ยวกับพวกเขา lsof ...ดึงรายการของกระบวนการทั้งหมดโดยใช้ nvidia GPU ที่เป็นของผู้ใช้ปัจจุบันและps -p ...แสดงpsผลลัพธ์สำหรับกระบวนการเหล่านั้น ps fแสดงการจัดรูปแบบที่ดีสำหรับความสัมพันธ์ / ลำดับชั้นของกระบวนการย่อย / พาเรนต์และ-oระบุการจัดรูปแบบที่กำหนดเอง อันนี้คล้ายกับแค่ทำps uแต่เพิ่ม ID กลุ่มกระบวนการและลบฟิลด์อื่น ๆ

ข้อดีอย่างหนึ่งของสิ่งนี้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
คุณยังสามารถรับ PID ของโปรแกรมประมวลผลที่ครอบครอง GPU ของผู้ใช้ทั้งหมดได้โดยไม่ต้องทำsudoเช่นนี้nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenar Hoyt

1
บางครั้งอาจnvidia-smiไม่แสดงรายการกระบวนการทั้งหมดดังนั้นคุณจึงต้องใช้หน่วยความจำของคุณที่ใช้โดยกระบวนการที่ไม่อยู่ในรายการ นี่เป็นวิธีหลักที่ฉันสามารถติดตามและฆ่ากระบวนการเหล่านั้นได้
แรนด์

1
@grisaitis Carefull ฉันไม่คิดว่าการpmemให้โดยpsคำนึงถึงหน่วยความจำทั้งหมดของ GPU แต่เป็นของ CPU เพราะpsไม่ใช่ "Nvidia GPU" ที่ทราบ
SebMa

10

คุณสามารถลองnvtopซึ่งคล้ายกับhtopเครื่องมือที่ใช้กันอย่างแพร่หลายแต่สำหรับ NVIDIA GPU นี่คือภาพหน้าจอของnvtopการใช้งานจริง

ภาพหน้าจอของการใช้งาน nvtop


3

สิ่งนี้อาจไม่สวยหรู แต่คุณสามารถลองได้

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

ฉันลองใช้วิธีนี้โดย @Edric ซึ่งใช้งานได้ แต่ฉันชอบเลย์เอาต์ดั้งเดิมของnvidia-smi.


12
nvidia-smi -l 2หรือคุณก็สามารถทำได้ หรือเพื่อป้องกันไม่ให้คอนโซลเอาท์พุทซ้ำwatch -n 2 'nvidia-smi'
grisaitis

3

หากคุณต้องการค้นหากระบวนการที่กำลังทำงานบน gpu คุณสามารถใช้คำสั่งต่อไปนี้:

lsof /dev/nvidia*

สำหรับฉัน nvidia-smiและwatch -n 1 nvidia-smiเพียงพอแล้วในกรณีส่วนใหญ่ บางครั้งnvidia-smiไม่แสดงกระบวนการ แต่ใช้หน่วยความจำ gpu หมดดังนั้นฉันจึงต้องใช้คำสั่งด้านบนเพื่อค้นหากระบวนการ



0

มีPrometheus GPU Metrics Exporter (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 0เพื่อตรวจสอบทุกกระบวนการใน GPU 0 รวมถึงโหมดประมวลผลการใช้งาน sm การใช้หน่วยความจำการใช้ตัวเข้ารหัสการใช้ตัวถอดรหัส


0

คุณสามารถใช้โปรแกรมตรวจสอบสายตาด้วย GPU ตรวจสอบ plug-in ที่:

  • โอเพ่นซอร์ส
  • ติดตั้ง: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • ที่จะเปิดตัว: sudo glances

ใส่คำอธิบายภาพที่นี่

นอกจากนี้ยังตรวจสอบ CPU, ดิสก์ IO, พื้นที่ดิสก์, เครือข่ายและสิ่งอื่น ๆ :

ใส่คำอธิบายภาพที่นี่


0

ฉันสร้างไฟล์แบตช์ด้วยรหัสต่อไปนี้ในเครื่อง windows เพื่อตรวจสอบทุกวินาที มันใช้ได้กับฉัน

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

nvidia-smi exe มักจะอยู่ใน "C: \ Program Files \ NVIDIA Corporation" หากคุณต้องการรันคำสั่งเพียงครั้งเดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.