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?
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?
Câu trả lời:
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.
watch gpustat -cp
bạ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
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.
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watch
tùy chọn:gpustat -cp --watch
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.
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-smi
cô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 %
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
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.
Một phương pháp giám sát hữu ích khác là sử dụng bộ ps
lọ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ị ps
kết quả cho các quy trình đó. ps f
hiển thị định dạng đẹp cho các mối quan hệ / phân cấp quá trình con / cha mẹ và -o
chỉ định định dạng tùy chỉnh. Cái đó tương tự như chỉ làm ps u
như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-smi
là 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 sudo
trướ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
sudo
như thế này:nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
khô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 đó.
pmem
được cung cấp bằng cách ps
tính đến tổng bộ nhớ của GPU nhưng là của CPU vì ps
không biết "GPU Nvidia"
Đ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
.
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'
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-smi
và watch -n 1 nvidia-smi
là đủ trong hầu hết các trường hợp. Đôi khi nvidia-smi
cho 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.
Có 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
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ã.
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ó :
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
sudo glances
Nó cũng giám sát CPU, IO đĩa, không gian đĩa, mạng và một số thứ khác:
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.