大家好,我是三十一
[0],最近北京也出现疫情了,昨晚公司大楼临时管控,测核酸折腾到小一点才到家。前两天的抢菜、囤菜,加上这次的管控经历,这次真有些慌了。。。
本次分享的内容比较简单,主要是对日常工作使用 GPU 的常用命令做一个简单的总结,阅读全文预计花费 11 分钟,如果有缺失号友们可以私信我补充(划重点),如果对你有帮助,也欢迎号友们点赞收藏。
NVIDIA 系统管理界面(nvidia-smi)是基于 NVIDIA Management Library(NVML)
[1]的命令行实用程序,旨在帮助管理和监视 NVIDIA GPU 设备。
nvidia-smi
Sun Mar 28 02:40:38 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.56 Driver Version: 418.56 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... On | 00000000:02:00.0 Off | N/A |
| 23% 29C P8 9W / 250W | 611MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 108... On | 00000000:03:00.0 Off | N/A |
| 23% 30C P8 9W / 250W | 0MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 GeForce GTX 108... On | 00000000:82:00.0 Off | N/A |
| 23% 30C P8 9W / 250W | 0MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 GeForce GTX 108... On | 00000000:83:00.0 Off | N/A |
| 23% 30C P8 9W / 250W | 0MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 33777 C /usr/bin/python 601MiB |
+-----------------------------------------------------------------------------+
以上是GEFORCE GTX 1080 Ti
GPU 服务器的运行信息。
「注」:显存占用和 GPU 占用是两个不一样的,显卡是由 GPU 和显存等组成的,显存和 GPU 的关系可简单理解为内存和 CPU 的关系。
当然我们也可以每秒刷新查询一次,实现实时监控查询显卡状态效果
watch -n 1 nvidia-smi
或
nvidia-smi -l 1
nvidia-smi -q
也可以单独过滤第 N 卡 的 GPU 信息
nvidia-smi -q -i 0
或者单独过滤当前的 GPU 时钟相关信息
nvidia-smi -q -d CLOCK
或者单独过滤每个 GPU 的可用时钟频率信息
nvidia-smi -q -d SUPPORTED_CLOCKS
nvidia-smi -L
从左到右分别为:GPU卡号、GPU型号、GPU物理UUID号
GPU 0: GeForce GTX 1080 Ti (UUID: GPU-5da6e67e-fd5a-88fb-7a0e-109c3284f7bf)
GPU 1: GeForce GTX 1080 Ti (UUID: GPU-ce9189e4-2e58-3a19-4332-cb5c7fac1aa6)
GPU 2: GeForce GTX 1080 Ti (UUID: GPU-242b3020-8e5c-813a-42d9-475766d52f9d)
GPU 3: GeForce GTX 1080 Ti (UUID: GPU-8f3d825f-7246-3daf-eaa1-37845b03aa03)
可以单独过滤出 GPU 卡号信息
nvidia-smi -L | cut -d ' ' -f 2 | cut -c 1
docker run --runtime nvidia -e NVIDIA_VISIBLE_DEVICES=GPU-5da6e67e-fd5a-88fb-7a0e-109c3284f7bf -p 8000:8000 -v /www/models:/www/models -it --rm <项目/服务:v1.0.0>
GPUtil 是一个 Python 模块,支持 Python 2.X 和 3.X。用于在 Python 中以编程方式使用 nvidia-smi 从 NVIDA GPU 获取 GPU 状态。
可以通过 pip 命令进行直接GPUtil 安装
[2]
pip install GPUtil
查询 GPU 当前的使用情况
import GPUtil
GPUtil.showUtilization()
根据当前内存使用情况和负载确定的,自动选择合适的 GPU 卡
deviceIDs = GPUtil.getAvailable(order = 'first', limit = 1, maxLoad = 0.5, maxMemory = 0.5, includeNan=False, excludeID=[], excludeUUID=[])
核心参数解释:
针对 NVIDIA 首次运行启动加载慢,我们可以进行 Persistence-M
持续模式设置,如下:
sudo nvidia-smi -pm 1
针对四卡机器或多卡机器,偶尔会出现卡性能不均匀现象。一个纯野生小技巧,我们可以优先选用边界节点,边界卡槽有利于散热。