lệnh hàng đầu cho GPU sử dụng CUDA


127

Tôi đang cố gắng theo dõi một quá trình sử dụng cuda và MPI, có cách nào tôi có thể làm điều này không, giống như lệnh "top" nhưng cũng giám sát GPU?


2
Ngoài ra còn có nvtop github.com/Syllo/nvtop
konvas

"nvidia-smi pmon -i 0" có thể giám sát tất cả quá trình chạy trên GPU nvidia 0
changqi.xia

Câu trả lời:


81

Tôi thấy gpustat rất hữu ích. Trong có thể được cài đặt với pip install gpustat, và in phân tích sử dụng theo quy trình hoặc người dùng.

nhập mô tả hình ảnh ở đây


4
sau khi bạn đặt watch gpustat -cpbạn có thể thấy các số liệu thống kê liên tục nhưng màu sắc không còn nữa. Làm thế nào để bạn khắc phục điều đó? @ Alleo
AbhimanyuAryan

1
@ AbhimanyuAryan sử dụng watch -c. @Roman Orac, Cảm ơn bạn, điều này cũng đã làm việc cho tôi vào ngày 8 khi tôi gặp một số lỗi do nhập _curses trong python.
Bobak Hashemi

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

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

3
gpustat hiện có một --watchtùy chọn:gpustat -cp --watch
jayelm

138

Để có cái nhìn sâu sắc trong thời gian thực về các tài nguyên đã sử dụng, hãy làm:

nvidia-smi -l 1

Điều này sẽ lặp và gọi chế độ xem mỗi giây.

Nếu bạn không muốn giữ lại dấu vết của cuộc gọi bị lặp trong lịch sử bảng điều khiển, bạn cũng có thể thực hiện:

watch -n0.1 nvidia-smi

Trong đó 0,1 là khoảng thời gian, tính bằng giây.

nhập mô tả hình ảnh ở đây


2
Truy vấn thẻ cứ sau 0,1 giây? Điều đó sẽ gây ra tải trên thẻ? Ngoài ra, sử dụng đồng hồ, bạn bắt đầu một quy trình mới cứ sau 0,1 giây.
Mick T

@MickT Có phải là một vấn đề lớn? Vì Nvidia-smi có vòng lặp xây dựng này! Lệnh "watch" có khác nhiều so với nvidia-smi -l không?
Mohammad Javad

Có thể là, tôi đã thấy các thẻ cấp thấp hơn có khóa lạ và tôi nghĩ đó là vì có quá nhiều người dùng đang chạy nvidia-smi trên thẻ. Tôi nghĩ rằng sử dụng 'nvidia-smi -l' là cách tốt hơn để bạn không phải tiến hành một quy trình mới mỗi lần. Ngoài ra, kiểm tra thẻ cứ sau 0,1 giây là quá mức cần thiết, tôi sẽ thực hiện mỗi giây khi tôi đang cố gắng gỡ lỗi, nếu không tôi sẽ thực hiện cứ sau 5 phút để theo dõi hiệu suất. Tôi hy vọng điều đó sẽ giúp! :)
Mick T

@Gulzar vâng, đúng vậy.
TrostAft

83

Tôi không biết bất cứ điều gì kết hợp thông tin này, nhưng bạn có thể sử dụng nvidia-smicông cụ để lấy dữ liệu thô, như vậy (cảm ơn @jmsu cho mẹo trên -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
Tôi nghĩ rằng nếu bạn thêm một -l vào đó bạn sẽ nhận được nó để cập nhật liên tục theo dõi hiệu quả việc sử dụng GPU và bộ nhớ.
jmsu

6
Điều gì sẽ xảy ra nếu tôi chạy nó GPU GPUiziz chỉ nói N / A ??
natorro

3
@natorro Hình như nVidia đã bỏ hỗ trợ cho một số thẻ. Kiểm tra liên kết này forums.nvidia.com/index.php?showtopic=205165
JMSU

29
Tôi thích watch -n 0.5 nvidia-smi, điều này tránh làm đầy thiết bị đầu cuối của bạn với đầu ra
ali_m

nvidia-smi pmon -i 0
changqi.xia

19

Tải xuống và cài đặt trình điều khiển CUDA ổn định mới nhất (4.2) từ đây . Trên linux, nVidia-smi 295.41 cung cấp cho bạn những gì bạn muốn. sử dụng 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: Trong các trình điều khiển NVIDIA mới nhất, hỗ trợ này được giới hạn trong Thẻ Tesla.


18

Sử dụng đối số "--query-compute-apps ="

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

để được giúp đỡ thêm, xin vui lòng làm theo

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

17

Chỉ cần sử dụng watch nvidia-smi, nó sẽ xuất thông báo theo khoảng thời gian 2 giây theo mặc định.

Ví dụ, như hình ảnh dưới đây:

nhập mô tả hình ảnh ở đây

Bạn cũng có thể sử dụng watch -n 5 nvidia-smi(khoảng 5 đến 5 giây).


16

Một phương pháp giám sát hữu ích khác là sử dụng bộ pslọc trên các quy trình tiêu thụ GPU của bạn. Tôi sử dụng cái này rất nhiều:

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

Điều đó sẽ hiển thị tất cả các quy trình sử dụng GPU của nvidia và một số thống kê về chúng. lsof ...lấy danh sách tất cả các quy trình sử dụng GPU nvidia do người dùng hiện tại sở hữu và ps -p ...hiển thị pskết quả cho các quy trình đó. ps fhiển thị định dạng đẹp cho các mối quan hệ / phân cấp quá trình con / cha mẹ và -ochỉ định định dạng tùy chỉnh. Cái đó tương tự như chỉ làm ps unhưng thêm ID nhóm quy trình và xóa một số trường khác.

Một lợi thế của điều này nvidia-smilà nó sẽ hiển thị các nhánh quy trình cũng như các quy trình chính sử dụng GPU.

Tuy nhiên, một nhược điểm là nó bị giới hạn trong các quy trình thuộc sở hữu của người dùng thực thi lệnh. Để mở nó cho tất cả các quy trình thuộc sở hữu của bất kỳ người dùng nào, tôi thêm một sudotrước lsof.

Cuối cùng, tôi kết hợp nó với watchđể có được một bản cập nhật liên tục. Vì vậy, cuối cùng, nó trông giống như:

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

Mà có đầu ra như:

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
Bạn cũng có thể nhận được các PID của các chương trình tính toán chiếm GPU của tất cả người dùng mà không cần sudonhư thế này:nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenar Hoyt

1
Đôi khi nvidia-smikhông liệt kê tất cả các quy trình, vì vậy bạn kết thúc với bộ nhớ của mình được sử dụng bởi các quy trình không được liệt kê ở đó. Đây là cách chính để tôi có thể theo dõi và tiêu diệt các quá trình đó.
rand

1
@grisaitis Carefull, tôi không nghĩ rằng pmemđược cung cấp bằng cách pstính đến tổng bộ nhớ của GPU nhưng là của CPU vì pskhông biết "GPU Nvidia"
SebMa

9

Bạn có thể thử nvtop, tương tự như htopcông cụ được sử dụng rộng rãi nhưng dành cho GPU NVIDIA. Đây là một ảnh chụp màn hình nvtopcủa nó trong hành động.

Ảnh chụp màn hình của nvtop đang hoạt động


3

Điều này có thể không thanh lịch, nhưng bạn có thể thử

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

Tôi cũng đã thử phương thức của @Edric, nó hoạt động, nhưng tôi thích cách bố trí ban đầu của nvidia-smi.


12
Hoặc bạn có thể làm nvidia-smi -l 2. Hoặc để ngăn chặn đầu ra giao diện điều khiển lặp đi lặp lại,watch -n 2 'nvidia-smi'
viêm grisa

3

Nếu bạn chỉ muốn tìm quá trình đang chạy trên gpu, bạn chỉ cần sử dụng lệnh sau:

lsof /dev/nvidia*

Đối với tôi nvidia-smiwatch -n 1 nvidia-smilà đủ trong hầu hết các trường hợp. Đôi khi nvidia-smicho thấy không có quá trình nhưng bộ nhớ gpu đã được sử dụng hết nên tôi cần sử dụng lệnh trên để tìm các tiến trình.


2

Trong Linux Mint và rất có thể là Ubuntu, bạn có thể thử "nvidia-smi --loop = 1"


0

Prometheus GPU Metrics Exporter (PGME) tận dụng nhị phân nvidai-smi. Bạn có thể thử điều này. Khi bạn có nhà xuất khẩu đang chạy, bạn có thể truy cập nó qua http: // localhost: 9101 / metrics . Đối với hai GPU, kết quả mẫu trông như thế này:

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

bạn có thể sử dụng nvidia-smi pmon -i 0để giám sát mọi quá trình trong GPU 0. bao gồm chế độ tính toán, sử dụng sm, sử dụng bộ nhớ, sử dụng bộ mã hóa, sử dụng bộ giải mã.


0

Bạn có thể sử dụng các chương trình giám sát liếc với trình cắm giám sát GPU của nó :

  • mã nguồn mở
  • để cài đặt: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • để khởi chạy: sudo glances

nhập mô tả hình ảnh ở đây

Nó cũng giám sát CPU, IO đĩa, không gian đĩa, mạng và một số thứ khác:

nhập mô tả hình ảnh ở đây


0

Tôi đã tạo một tệp bó với mã sau trong máy windows để theo dõi mỗi giây. Nó làm việc cho tôi.

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

nvidia-smi exe thường nằm trong "C: \ Program Files \ NVIDIA Corporation" nếu bạn chỉ muốn chạy lệnh một lần.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.