docker安装
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
# 配置容器运行时:
sudo nvidia-ctk runtime configure --runtime=docker
# 重新启动 Docker 守护进程
sudo systemctl restart docker
# 验证配置
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
nvidia-smi 输出详解
| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| 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 1080 Off | 00000000:01:00.0 Off | N/A |
| 20% 45C P2 50W / 180W | 150MiB / 8118MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
解释:
gpu-util(GPU 利用率):表示当前GPU的使用情况,通常以百分比形式显示。它反映了GPU在处理计算任务时的负载情况。
fan:GPU风扇运转情况temp:GPU温度Perf:表示性能状态(Performance State),通常简称为“P状态”或“P-State”。这是一个描述GPU当前性能和功耗状态的指标。
Perf 状态用 P0 到 P12 之间的数值表示,其中:P0:表示最高性能状态。这是 GPU 在满负荷工作时的状态,功耗最大。P1 到 P12:表示逐渐降低的性能状态,数值越大,性能越低,功耗也越低。例如,P2 表示较高的性能状态,但低于 P0。P12 则表示最低的性能状态,通常用于 GPU 空闲时。
Persistence-M:表示“Persistence Mode(持久模式)”。这是 NVIDIA GPU 驱动程序的一个功能,用于控制 GPU 是否在没有任何活动时保持活动状态。具体来说,Persistence Mode 可以处于以下几种状态之一:Enabled(已启用):GPU 在没有正在进行的计算任务时仍保持活动状态。这对于需要频繁使用 GPU 的应用程序很有用,可以避免 GPU 在每次任务完成后重新初始化的开销。Disabled(已禁用):GPU 在没有计算任务时会自动进入低功耗状态,以节省能量和降低温度。在 nvidia-smi 的输出中,Persistence-M 通常显示为 On 或 Off,分别表示持久模式已启用或已禁用。
Pwr:Usage/Cap:表示 GPU 的功耗使用情况与功耗能力的比例。具体来说,它包含两个值:Usage:当前 GPU 的功耗使用量,通常以瓦特(Watts)为单位。表示当前 GPU 正在使用的功耗量。
Cap:GPU 的功耗能力上限,也以瓦特为单位。表示 GPU 允许的最大功耗量。这个指标的值为一个百分比,计算方式为 (Usage / Cap) * 100%。例如,如果 Pwr:Usage/Cap 列显示为 50W / 180W,则表示当前 GPU 正在使用 50 瓦特的功耗,而 GPU 的最大功耗能力为 180 瓦特。计算出的使用率为 (50W / 180W) * 100% ≈ 27.78%。这个值可以帮助用户了解 GPU 当前的功耗情况,以及 GPU 是否接近其功耗能力的上限。
Bus-Id:表示 GPU 设备在系统总线上的唯一标识符或地址。它是一个用于识别每个 GPU 的字符串,通常以形如 00000000:01:00.0 的格式显示。具体来说: 00000000:这部分是 PCI 标识符的前缀。 01:00.0:这部分包含了设备的位置信息。 01:表示设备的总线编号。00:表示设备的设备号。0:表示函数号,用于多功能设备。这个标识符在系统中确保每个 GPU 设备都有一个唯一的地址,用于识别和通信。当使用 nvidia-smi 或其他 NVIDIA 相关命令时,Bus-Id 可以帮助用户确定正在访问或操作的是哪个具体的 GPU 设备。
Disp.A:是 Display Active 的缩写,表示显示活动的状态。这个字段通常在 GPU 显卡驱动程序检测到有显示设备(例如显示器)连接并活动时显示信息。具体来说:Off:表示显示设备未活动或未连接到该 GPU。On:表示显示设备已连接并活动。这个信息对于了解 GPU 是否当前正在驱动显示设备以及显示设备的连接状态很有用。通常在多GPU系统中,你可以看到每个 GPU 的 Disp.A 列的状态,以确定哪些 GPU 正在驱动显示设备。
Memory-Usage:表示 GPU 内存的使用情况,通常以 MiB(Mebibytes,二进制兆字节)为单位。这个字段提供了有关 GPU 内存使用量的信息,包括当前已使用的内存量和总可用内存量。具体来说,Memory-Usage 由两个部分组成:
Used:表示当前正在被占用的 GPU 内存量,以 MiB 为单位。Total:表示 GPU 可用的总内存量,以 MiB 为单位。
Volatile Uncorr.ECC:表示“Volatile Uncorrected ECC”(易失性不可纠正错误纠错码)。这个字段用于指示 GPU 在运行过程中检测到的可能影响其计算正确性的内存错误情况。具体来说,这些错误是指内存中发生的不可纠正的错误,即使 ECC(Error Correction Code,纠错码)也无法修复。这些错误通常被称为“Volatile”(易失性),因为它们不会长期影响 GPU 的功能,但可能会导致当前或后续的计算结果不正确。在 nvidia-smi 的输出中,这个字段通常显示为 N/A(不适用)或一个具体的数值,用来指示 GPU 检测到的不可纠正的 ECC 错误数量。N/A表示没有报告的不可纠正的 ECC 错误。
compute M.:表示 GPU 的计算模式(Compute Mode)。这个字段通常用来指示 GPU 当前配置的计算模式或者支持的计算模式选项。具体来说,compute M. 可能会显示以下几种情况之一:Default:表示 GPU 正在使用其默认的计算模式。Prohibited:表示某些计算模式被禁止,通常是由于系统或驱动程序配置。Exclusive Process:表示 GPU 当前配置为独占模式,只能由一个进程使用。Prohibited Process:表示 GPU 当前配置为禁止进程模式,不允许任何进程使用 GPU。
cuda的2种api
- CUDA有两种API:运行时(runtime)API和驱动(driver)API。
- nvidia-smi 查看的是driver API,nvcc -V 查看的是runtime API。
- runtime API 要小于 driver API