ฉันกำลังพยายามตรวจสอบกระบวนการที่ใช้ cuda และ MPI มีวิธีใดบ้างที่ฉันทำได้เช่นคำสั่ง "top" แต่จะตรวจสอบ GPU ด้วยหรือไม่
ฉันกำลังพยายามตรวจสอบกระบวนการที่ใช้ cuda และ MPI มีวิธีใดบ้างที่ฉันทำได้เช่นคำสั่ง "top" แต่จะตรวจสอบ GPU ด้วยหรือไม่
คำตอบ:
ฉันพบว่าgpustatมีประโยชน์มาก ในสามารถติดตั้งpip install gpustat
และพิมพ์รายละเอียดการใช้งานตามกระบวนการหรือผู้ใช้
watch gpustat -cp
คุณสามารถดูสถิติได้อย่างต่อเนื่อง แต่สีจะหายไป คุณจะแก้ไขได้อย่างไร? @Alleo
watch -c
. @ Roman Orac ขอบคุณสิ่งนี้ใช้ได้กับฉันใน redhat 8 เมื่อฉันได้รับข้อผิดพลาดเนื่องจากการนำเข้า _curses ใน python
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 สำหรับเคล็ดลับใน -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 %
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 |
+-----------------------------------------------------------------------------+
แก้ไข: ในไดรเวอร์ NVIDIA ล่าสุดการสนับสนุนนี้ จำกัด เฉพาะการ์ด Tesla
ใช้อาร์กิวเมนต์ "--query-compute-apps ="
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
สำหรับความช่วยเหลือเพิ่มเติมโปรดติดตาม
nvidia-smi --help-query-compute-app
เพียงแค่ใช้watch nvidia-smi
มันจะส่งออกข้อความตามช่วงเวลา 2 วินาทีในค่าเริ่มต้น
ตัวอย่างเช่นภาพด้านล่าง:
คุณยังสามารถใช้watch -n 5 nvidia-smi
(ช่วง -n 5 คูณ 5 วินาที)
วิธีการตรวจสอบที่มีประโยชน์อีกวิธีหนึ่งคือการใช้การ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
sudo
เช่นนี้nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
ไม่แสดงรายการกระบวนการทั้งหมดดังนั้นคุณจึงต้องใช้หน่วยความจำของคุณที่ใช้โดยกระบวนการที่ไม่อยู่ในรายการ นี่เป็นวิธีหลักที่ฉันสามารถติดตามและฆ่ากระบวนการเหล่านั้นได้
pmem
ให้โดยps
คำนึงถึงหน่วยความจำทั้งหมดของ GPU แต่เป็นของ CPU เพราะps
ไม่ใช่ "Nvidia GPU" ที่ทราบ
คุณสามารถลองnvtop
ซึ่งคล้ายกับhtop
เครื่องมือที่ใช้กันอย่างแพร่หลายแต่สำหรับ NVIDIA GPU นี่คือภาพหน้าจอของnvtop
การใช้งานจริง
สิ่งนี้อาจไม่สวยหรู แต่คุณสามารถลองได้
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 หมดดังนั้นฉันจึงต้องใช้คำสั่งด้านบนเพื่อค้นหากระบวนการ
ใน Linux Mint และ Ubuntu ส่วนใหญ่คุณสามารถลอง "nvidia-smi --loop = 1"
มี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
คุณสามารถใช้nvidia-smi pmon -i 0
เพื่อตรวจสอบทุกกระบวนการใน GPU 0 รวมถึงโหมดประมวลผลการใช้งาน sm การใช้หน่วยความจำการใช้ตัวเข้ารหัสการใช้ตัวถอดรหัส
คุณสามารถใช้โปรแกรมตรวจสอบสายตาด้วย GPU ตรวจสอบ plug-in ที่:
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
sudo glances
นอกจากนี้ยังตรวจสอบ CPU, ดิสก์ IO, พื้นที่ดิสก์, เครือข่ายและสิ่งอื่น ๆ :
ฉันสร้างไฟล์แบตช์ด้วยรหัสต่อไปนี้ในเครื่อง windows เพื่อตรวจสอบทุกวินาที มันใช้ได้กับฉัน
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
nvidia-smi exe มักจะอยู่ใน "C: \ Program Files \ NVIDIA Corporation" หากคุณต้องการรันคำสั่งเพียงครั้งเดียว