入门指南
支持的平台
DCGM 目前支持以下产品和环境
所有 NVIDIA Kepler™ (K80) 及更新的 NVIDIA 数据中心(之前称为 NVIDIA Tesla®)GPU
NVIDIA® NVSwitch™,适用于 NVIDIA DGX™ A100、NVIDIA HGX™ A100 及更新版本。
所有 NVIDIA Maxwell™ 及更新的非数据中心(例如 NVIDIA® GeForce® 或 NVIDIA® Quadro®)GPU
CUDA® 7.5+ 和 NVIDIA 驱动程序 R450+
裸机和虚拟化(仅限完整直通)
注意
使用 NVSwitch™ 的系统(例如 NVIDIA DGX™ A100 或 NVIDIA HGX™ A100)需要 NVIDIA 驱动程序 R450 及更高版本。从 DCGM 2.0 开始,用于 NVSwitch™ 系统的 Fabric Manager (FM) 不再与 DCGM 软件包捆绑在一起。FM 是一个单独的组件,可以使用 CUDA 网络存储库进行安装。有关更多信息,请参阅《Fabric Manager 用户指南》。
从 v1.3 开始,有限的 DCGM 功能在非数据中心 GPU 上可用。更多详细信息请参阅“功能概述”部分。
支持的 Linux 发行版
Linux 发行版 |
x86 (x86_64) |
Arm64 (aarch64) |
---|---|---|
Debian 12 |
X |
|
RHEL 8.y/Rocky Linux 8.y |
X |
X |
RHEL 9.y/Rocky Linux 9.y |
X |
X |
SLES/OpenSUSE 15.y |
X |
X |
Ubuntu 24.04 LTS |
X |
X |
Ubuntu 22.04 LTS |
X |
X |
Ubuntu 20.04 LTS |
X |
X |
安装
系统要求
注意
确保您的环境满足这些要求对于容器、虚拟机和裸机解决方案同等重要。尝试在不满足这些要求的环境中运行 DCGM 可能无法获得成功的结果。
资源 |
要求 |
---|---|
最低系统内存(主机 RAM) |
>= 16GB |
最低 CPU 核心数 |
>= GPU 数量 |
先决条件
系统软件包管理器已配置为使用 NVIDIA 软件包注册表,用于系统的 Linux 发行版。对于在磁盘上使用 CUDA 本地软件包注册表的,建议更新到最新可用版本。
请参阅 CUDA 安装指南了解详细步骤。
系统上必须存在以下 NVIDIA 软件的安装
受支持的 NVIDIA 数据中心驱动程序
警告
DCGM 经过测试和设计,可与 NVIDIA 数据中心驱动程序一起运行。尝试在其他驱动程序(例如开发人员驱动程序)上运行可能会导致功能缺失。
请参阅关于各种分支类型和支持时间线的文档。
在具有 NVSwitch™ 硬件的系统上,例如 NVIDIA DGX™ 系统和 NVIDIA HGX™ 系统,
Fabric Manager 软件包
NVSwitch™ 配置和查询 (NSCQ) 软件包
NVIDIA 交换机设备监控 (NVSDM) 软件包
注意
对于每个 NVIDIA 驱动程序主版本,都有一个对应的 Fabric Manager 和 NSCQ 软件包,例如,对于驱动程序主版本 565,对应的 NSCQ 软件包是
libnvidia-nscq-565
,对应的 NVSDM 软件包是libnvsdm-565
。请查看
nvidia-smi
的输出,了解系统上安装的 NVIDIA 驱动程序版本。有关 Fabric Manager 软件包的更多信息,请参阅《Fabric Manager 用户指南》
有关 NSCQ 软件包的更多信息,请参阅《HGX 软件指南》。
有关 NVIDIA 交换机设备监控软件包的更多信息,请参阅《驱动程序安装指南》。
用户需要足够的权限才能通过系统软件包管理器安装软件包。这可以是 root 用户或具有适当 sudo 权限的用户。
任何现有的数据中心 GPU 管理器系统服务都已停止,例如:
$ sudo systemctl list-unit-files nvidia-dcgm.service > /dev/null && \ sudo systemctl stop nvidia-dcgm
安装
Ubuntu LTS 和 Debian
删除
datacenter-gpu-manager
和datacenter-gpu-manager-config
软件包的任何安装$ sudo dpkg --list datacenter-gpu-manager &> /dev/null && \ sudo apt purge --yes datacenter-gpu-manager $ sudo dpkg --list datacenter-gpu-manager-config &> /dev/null && \ sudo apt purge --yes datacenter-gpu-manager-config
更新软件包注册表缓存
$ sudo apt-get update
安装与系统 CUDA 版本对应的 datacenter-gpu-manager-4 软件包
$ CUDA_VERSION=$(nvidia-smi | sed -E -n 's/.*CUDA Version: ([0-9]+)[.].*/\1/p') $ sudo apt-get install --yes \ --install-recommends \ datacenter-gpu-manager-4-cuda${CUDA_VERSION}
安装推荐的软件包可提供 DCGM 开源产品中没有的其他 DCGM 功能。要选择不安装这些软件包和相关功能,请将
--install-recommends
替换为--no-install-recommends
。(可选)安装 datacenter-gpu-manager-4 开发文件
$ sudo apt install --yes datacenter-gpu-manager-4-dev
RHEL / CentOS / Rocky Linux
删除
datacenter-gpu-manager
和datacenter-gpu-manager-config
软件包的任何安装。$ sudo dnf list --installed datacenter-gpu-manager &> /dev/null && \ sudo dnf remove --assumeyes datacenter-gpu-manager $ sudo dnf list --installed datacenter-gpu-manager-config &> /dev/null && \ sudo dnf remove --assumeyes datacenter-gpu-manager-config
更新软件包注册表缓存。
$ sudo dnf clean expire-cache
安装与系统 CUDA 版本对应的 datacenter-gpu-manager-4 软件包及其依赖项以及相应的相关推荐软件包。
$ CUDA_VERSION=$(nvidia-smi | sed -E -n 's/.*CUDA Version: ([0-9]+)[.].*/\1/p') $ sudo dnf install --assumeyes \ --setopt=install_weak_deps=True \ datacenter-gpu-manager-4-cuda${CUDA_VERSION}
安装推荐的软件包可提供 DCGM 开源产品中没有的其他 DCGM 功能。要选择不安装这些软件包和相关功能,请将
--setopt=install_weak_deps=True
替换为--setopt=install_weak_deps=False
。(可选)安装 datacenter-gpu-manager-4 开发文件
$ sudo dnf install --assumeyes datacenter-gpu-manager-4-devel
SUSE SLES / OpenSUSE
删除
datacenter-gpu-manager
和datacenter-gpu-manager-config
软件包的任何安装$ sudo zypper search --installed-only --match-exact datacenter-gpu-manager &> /dev/null && \ sudo zypper --non-interactive remove datacenter-gpu-manager $ sudo zypper search --installed-only --match-exact datacenter-gpu-manager-config && \ sudo zypper --non-interactive remove datacenter-gpu-manager-config
更新软件包注册表缓存
$ sudo zypper refresh
安装与系统 CUDA 版本对应的 datacenter-gpu-manager-4 软件包及其依赖项以及相应的相关推荐软件包。
$ CUDA_VERSION=$(nvidia-smi | sed -E -n 's/.*CUDA Version: ([0-9]+)[.].*/\1/p') $ sudo zypper install --no-confirm \ --recommends \ datacenter-gpu-manager-4-cuda${CUDA_VERSION}
安装推荐的软件包可提供 DCGM 开源产品中没有的其他 DCGM 功能。要选择不安装这些软件包和相关功能,请将
--recommends
替换为--no-recommends
。(可选)安装 datacenter-gpu-manager-4 开发文件
$ sudo zypper install --no-confirm datacenter-gpu-manager-4-devel
安装后
注意
请注意,安装包中包含的默认 nvidia-dcgm.service
文件使用 systemd
格式。如果 DCGM 安装在使用 init.d
格式的操作系统发行版上,则需要修改这些文件。
启用 DCGM systemd 服务(在重启时)并立即启动它
$ sudo systemctl --now enable nvidia-dcgm
● dcgm.service - DCGM service
Loaded: loaded (/usr/lib/systemd/system/nvidia-dcgm.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2024-12-17 12:18:57 EDT; 14s ago
Main PID: 32847 (nv-hostengine)
Tasks: 7 (limit: 39321)
CGroup: /system.slice/nvidia-dcgm.service
└─32847 /usr/bin/nv-hostengine -n --service-account nvidia-dcgm
Oct 12 12:18:57 ubuntu1804 systemd[1]: Started DCGM service.
Oct 12 12:18:58 ubuntu1804 nv-hostengine[32847]: DCGM initialized
Oct 12 12:18:58 ubuntu1804 nv-hostengine[32847]: Host Engine Listener Started
要验证安装,请使用 dcgmi
查询系统。您应该看到系统中找到的所有受支持 GPU(和任何 NVSwitch)的列表
$ dcgmi discovery -l
8 GPUs found.
+--------+----------------------------------------------------------------------+
| GPU ID | Device Information |
+--------+----------------------------------------------------------------------+
| 0 | Name: A100-SXM4-40GB |
| | PCI Bus ID: 00000000:07:00.0 |
| | Device UUID: GPU-1d82f4df-3cf9-150d-088b-52f18f8654e1 |
+--------+----------------------------------------------------------------------+
| 1 | Name: A100-SXM4-40GB |
| | PCI Bus ID: 00000000:0F:00.0 |
| | Device UUID: GPU-94168100-c5d5-1c05-9005-26953dd598e7 |
+--------+----------------------------------------------------------------------+
| 2 | Name: A100-SXM4-40GB |
| | PCI Bus ID: 00000000:47:00.0 |
| | Device UUID: GPU-9387e4b3-3640-0064-6b80-5ace1ee535f6 |
+--------+----------------------------------------------------------------------+
| 3 | Name: A100-SXM4-40GB |
| | PCI Bus ID: 00000000:4E:00.0 |
| | Device UUID: GPU-cefd0e59-c486-c12f-418c-84ccd7a12bb2 |
+--------+----------------------------------------------------------------------+
| 4 | Name: A100-SXM4-40GB |
| | PCI Bus ID: 00000000:87:00.0 |
| | Device UUID: GPU-1501b26d-f3e4-8501-421d-5a444b17eda8 |
+--------+----------------------------------------------------------------------+
| 5 | Name: A100-SXM4-40GB |
| | PCI Bus ID: 00000000:90:00.0 |
| | Device UUID: GPU-f4180a63-1978-6c56-9903-ca5aac8af020 |
+--------+----------------------------------------------------------------------+
| 6 | Name: A100-SXM4-40GB |
| | PCI Bus ID: 00000000:B7:00.0 |
| | Device UUID: GPU-8b354e3e-0145-6cfc-aec6-db2c28dae134 |
+--------+----------------------------------------------------------------------+
| 7 | Name: A100-SXM4-40GB |
| | PCI Bus ID: 00000000:BD:00.0 |
| | Device UUID: GPU-a16e3b98-8be2-6a0c-7fac-9cb024dbc2df |
+--------+----------------------------------------------------------------------+
6 NvSwitches found.
+-----------+
| Switch ID |
+-----------+
| 11 |
| 10 |
| 13 |
| 9 |
| 12 |
| 8 |
+-----------+
基本组件
DCGM SDK 包含以下组件
NVIDIA 主机引擎
NVIDIA 主机引擎 nv-hostengine
是 DCGM 共享库的轻量级封装。其主要任务是将 DCGM 库实例化为一个持久的独立进程,包括对监控和管理活动的适当管理。
注意
DCGM 可以以 root 或非 root 身份运行。某些 DCGM 功能(例如配置管理)不允许以非 root 身份运行。
在 DGX-2 或 HGX-2 上,nv-hostengine 必须以 root 身份运行才能启用 Fabric Manager。
DCGM CLI 工具
DCGM 的命令行界面 dcgmi
是一个可联网的 NVIDIA 主机引擎接口。它以简单、交互式格式公开了 DCGM 的大部分功能。它适用于希望控制 DCGM 或收集相关数据,而无需针对编程接口进行构建的用户和管理员。它不适用于脚本编写。
Python 绑定
Python 绑定包含在 DCGM 软件包中,并安装在 /usr/share/datacenter-gpu-manager-4/bindings/python3/
。
软件开发工具包
DCGM SDK 包括如何利用 DCGM 主要功能的示例,以及 API 文档和头文件。SDK 涵盖了基于 C 和 Python 的 API,并包括在独立和嵌入式模式下使用 DCGM 的示例。
这些文件安装在 /usr/src/datacenter-gpu-manager-4/sdk_samples
中。
运行模式
核心 DCGM 库可以作为独立进程运行,也可以由代理程序作为共享库加载。在这两种情况下,它都提供大致相同的功能类别并具有相同的总体行为。模式的选择取决于它如何最好地适应用户的现有环境。
注意
在这两种模式下,DCGM 库都应以 root 身份运行。许多功能在没有对 GPU 的特权访问权限的情况下将无法工作,包括各种配置设置和诊断。
嵌入式模式
在此模式下,代理程序作为共享库加载。提供此模式是为了以下情况
节点上已存在第三方代理程序,并且
需要管理与额外的自主代理程序相关的额外抖动
通过将 DCGM 作为共享库加载并管理其活动的时序,第三方代理程序可以精确控制 DCGM 何时主动使用 CPU 和 GPU 资源。在此模式下,第三方代理程序通常应在系统初始化时加载共享库,并在主机的整个生命周期内管理 DCGM 基础设施。由于 DCGM 是有状态的,因此重要的是,该库在第三方代理程序的整个生命周期内都得到维护,而不是一次性调用。在此模式下,所有数据收集循环、管理活动等都可以通过库接口显式调用和控制。例如,第三方代理程序可以选择以这种方式跨整个多节点作业同步 DCGM 活动。
警告
在此模式下,重要的是,各种 DCGM 管理接口应由第三方在指定的频率范围内执行,如 API 定义中所述。运行频率过高会浪费资源,而没有明显的增益。运行频率过低会导致监控和管理覆盖范围出现缺口。
在此模式下工作需要一系列设置步骤,以及第三方代理程序中的管理线程,该线程定期触发所有必要的 DCGM 后台工作。逻辑大致如下
代理程序启动时
dcgmInit() System or job-level setup, e.g. call dcgmGroupCreate() to set up GPU groups call dcgmWatchFields() to manage watched metrics call dcgmPolicySet() to set policy
定期后台任务(已管理)
Trigger system management behavior, i.e. call dcgmUpdateAllFields() to manage metrics call dcgmPolicyTrigger() to manage policies Gather system data, e.g. call dcgmHealthCheck() to check health call dcgmGetLatestValues() to get metric updates
代理程序关闭时
dcgmShutdown()
注意
有关更完整的示例,请参阅 DCGM SDK 中的“嵌入式模式”示例
独立模式
在此模式下,DCGM 代理程序嵌入在 NVIDIA 提供的简单守护程序 NVIDIA 主机引擎中。提供此模式是为了以下情况
DCGM 客户端更喜欢与守护程序交互,而不是自己管理共享库资源
多个客户端希望与 DCGM 交互,而不是单个节点代理程序
用户希望利用 NVIDIA CLI 工具
dcgmi
DGX-2 或 HGX-2 系统的用户需要运行主机引擎守护程序来配置和监控 NVSwitch
通常,NVIDIA 更倾向于这种运行模式,因为它为用户提供了最大的灵活性和最低的维护成本。在此模式下,DCGM 库管理例程以默认频率和默认行为透明地调用,这与嵌入式模式提供的用户控制形成对比。用户可以使用 dcgmi
工具与守护程序进程交互,或者在初始化期间使用守护程序的 IP 地址加载 DCGM 库以进行编程交互。
守护程序利用基于套接字的接口与外部进程(例如 dcgmi
)通信。用户负责配置系统初始化行为(DCGM 安装后),以确保守护程序在启动时正确执行。
注意
在 DGX-2 或 HGX-2 系统上,nv-hostengine 在系统启动时自动启动,以便 Fabric Manager 可以配置和监控 NVSwitch。
静态库
为了能够消除对 DCGM 共享库的显式依赖,已包含 DCGM 库的静态链接存根版本。该库为 DCGM 符号提供包装器,并使用 dlopen()
动态访问 libdcgm.so.4
。如果未安装共享库,或者在 LD_LIBRARY_PATH
中找不到共享库,则会返回错误代码。在链接到该库时,libdl 必须包含在编译行中,这通常使用以下方法完成
$ gcc foo.c -o foo -ldcgm_stub -ldl