NVIDIA GPU持久模式是什么?(驱动程序持久性 Driver Persistence Daemon 守护程序)


我们在跑程序时,分六批单独投喂给GPU计算和将六批整合成一批投喂给GPU计算,耗时是不同的,出现这种现象的原因是什么,值得我们思考

我们大胆猜测,是否在GPU准备计算时,会有一个较长的准备时间?

搜索NVIDIA GPU持久模式:

驱动程序持久性

1.概述

必须先运行NVIDIA内核模式驱动程序并将其连接到目标GPU设备,然后才能与该设备进行任何用户交互。驱动程序的行为因操作系统而异。通常,如果内核模式驱动程序尚未运行或尚未连接到目标GPU,则任何尝试与该GPU进行交互的程序的调用都会透明地导致该驱动程序加载和/或初始化GPU。当所有GPU客户端终止时,驱动程序将取消初始化GPU。驱动程序加载行为对最终用户而言有两种重要的作用:

  • 应用启动延迟
    由于ECC清理行为,触发GPU初始化的应用程序可能会导致每个GPU短暂(1-3秒的数量级)启动成本。如果GPU已初始化,则不会进行清理。

  • 保存驱动状态
    如果驱动程序取消了GPU的初始化,则与该GPU相关的某些非持久状态将丢失,并在下次初始化GPU时恢复为默认状态。请参阅数据持久性。为了避免这种情况,GPU应该保持初始化状态。

缺省驱动程序行为在操作系统之间有所不同:

1.1. windows系统

在Windows上,内核模式驱动程序在Windows启动时加载,并保持加载状态,直到Windows关闭。因此,Windows用户通常可以忽略本文档中描述的驱动程序持久性含义。

注意:驱动程序重载事件(例如由于TDR或安装新的驱动程序)将导致非持久状态复位。

1.2. Linux

在默认情况下X在目标GPU上运行的Linux系统下,通常会启用X模式,并启动内核模式驱动程序并使之从计算机启动到关闭都保持活动状态。在无头系统或没有长期存在的类似X的客户端维护目标GPU句柄的情况下,每次目标GPU应用程序启动和停止时,内核模式驱动程序都会初始化和取消初始化目标GPU。在HPC环境中,这种情况非常普遍。由于在这种情况下通常需要使GPU初始化,因此NVIDIA提供了两种更改驱动程序行为的选项: 持久模式(传统)持久守护程序

2.数据持久性

不同级别的驱动程序状态具有不同的生存期。了解这些差异非常重要,因为这会影响GPU管理功能(如时钟设置,ECC模式等)的行为。通常,驱动程序状态属于以下类别。这并不是详尽的清单,而是涵盖了常见情况:

2.1. GPU初始化生命周期

从驱动程序初始化GPU到GPU初始化之间,这种状态一直持续。这是最狭窄的生命周期,因为内核驱动程序本身仍处于加载状态,并且可能正在管理其他GPU。如果客户端应用程序尝试访问GPU,则GPU通常会初始化GPU。最后一个客户端退出后,GPU通常会取消初始化。

状态:

  • 计算模式,计费模式,持久性模式
  • 应用程序时钟,应用程序时钟权限设置
  • 基于SW的功率上限
  • 易失性ECC错误,待退页

2.2. 内核驱动程序生命周期

从驱动程序加载到驱动程序卸载(例如rmmod),这种状态一直持续。在大多数环境中,这是整个计算机引导周期。例外包括GPU重置事件和驱动程序安装。

状态:

  • 会计流程数据

2.3. GPU开发板生命周期

这种类型的状态会在启动周期中持续存在,因为它存储在板子的持久性信息光盘中。在某些情况下,可以明确清除这种状态,但通常认为该状态在整个板子的生命周期中都是持久的-直到用户下一次更改为止。

状态:

  • ECC模式,总计ECC错误,已淘汰的页面
  • GPU操作模式,驱动程序模型

3.背景

NVIDIA GPU驱动程序在历史上一直遵循Unix设计理念,仅在用户配置系统时才初始化软件和硬件状态。传统上,此配置是通过X Server完成的,并且仅在X Server(代表用户)请求启用GPU时才初始化GPU。这对于无需重新启动即可重新配置GPU(例如,更改SLI模式或总线设置,尤其是在AGP时代)的能力非常重要。

最近,事实证明这在仅使用计算的环境中是个问题,在这种环境中,不使用X,而是通过Cuda库的瞬时实例访问GPU。这导致GPU状态被初始化和取消初始化的次数比用户真正想要的要多,并且导致每个Cuda作业的加载时间很长,大约为几秒钟。

NVIDIA先前提供了“持久模式”来解决此问题。这是可以使用nvidia-smi配置的内核级解决方案。当没有用户软件正在使用GPU时,这种方法将阻止内核模块完全卸载软件和硬件状态。但是,这种方法与系统的其余部分产生了细微的交互问题,使维护变得困难。

NVIDIA Persistence Daemon的目的是用更强大的用户空间解决方案代替该内核级解决方案。这使纯计算环境能够更接近于NVIDIA GPU驱动程序所设计的历史典型图形环境。

4.持久模式(旧版)

持久性模式是用户可设置的驱动程序属性的术语,即使没有客户端连接,该属性也可以使目标GPU保持初始化。该解决方案已接近使用寿命,最终将不赞成使用此方法,而推荐使用Persistence Daemon

可以使用nvidia-smi或通过NVML API以编程方式设置持久性模式。

要使用nvidia-smi(作为根)启用持久性模式,请执行以下操作:

nvidia-smi -i <target gpu> -pm ENABLED
    Enabled persistence mode for GPU <target gpu>.
    All done.

不过我尝试了,它说没法用(1080Ti):

cd C:\Program Files\NVIDIA Corporation\NVSMI
C:\Program Files\NVIDIA Corporation\NVSMI>nvidia-smi -i 0 -pm ENABLED
Setting persistence mode is not supported for GPU 00000000:05:00.0 on this platform.
Treating as warning and moving on.
All done.

C:\Program Files\NVIDIA Corporation\NVSMI>

在这里插入图片描述

要使用nvidia-smi查看当前的持久模式:

nvidia-smi -i <target gpu> -q
    ==============NVSMI LOG==============

    Timestamp                           : ----
    Driver Version                      : ----

    Attached GPUs                       : ----
    GPU 0000:01:00.0
        Product Name                    : ----
        Display Mode                    : ----
        Display Active                  : ----
        Persistence Mode                : Enabled
        Accounting Mode                 : ----
        ...

4.1. 支持的环境

  • 驱动程序:所有运输驱动程序版本
  • 操作系统:所有标准驱动程序支持的Linux平台
  • GPU:所有已发售的Tesla,Quadro和GRID产品

5.持久性守护程序

NVIDIA在Linux上提供了一个用户空间守护程序,以支持Cuda作业运行期间驱动程序状态的持久性。与持久性模式相比,守护程序方法为该问题提供了更优雅,更健壮的解决方案。

NVIDIA将在不久的将来(可能通过Cuda 8.0)支持这两种解决方案,但是会将所有未来的开发和错误修复都集中在守护程序上。

守护程序安装在/ usr / bin中,而示例安装和初始化脚本包含在驱动程序的文档目录中。提供这些脚本作为安装守护程序以在某些常见的init系统的系统启动时运行的指南。由于初始化系统配置的多样性,它们可能需要对某些发行版进行一些更改。

NVIDIA鼓励客户尽早转向这种守护程序方法。

5.1. 支持的环境

驱动程序:R319及更高版本
操作系统:所有标准驱动程序支持的Linux平台
GPU:所有已发售的Tesla,Quadro和GRID产品

5.2. 实施细节

在运行NVIDIA GPU驱动程序的Linux系统上,客户端通过打开其设备文件来附加GPU。相反,通过关闭设备文件来分离GPU。每当一个或多个客户端打开设备文件时,GPU状态就会保持加载在驱动程序中。一旦所有客户端都关闭了设备文件,除非启用了持久性模式,否则GPU状态将被卸载。

为了模拟图形环境而又不增加用户空间图形驱动程序的开销,我们实现了NVIDIA Persistence Daemon,该守护程序实际上在后台运行,并在打开设备文件时进入睡眠状态。守护程序使用libnvidia-cfg根据其PCI总线地址打开和关闭正确的设备文件,并提供RPC接口来分别控制每个GPU的持久模式。因此,当守护程序使设备文件保持打开状态时,至少一个客户端(守护程序)已连接了GPU,驱动程序将不会卸载GPU状态。守护程序开始运行后,它将一直保留在后台,直到被杀死为止,

由于该解决方案的性质,该守护程序可以用作NVIDIA内核模式驱动程序中实现的我们现在称为“旧版持久性模式”的直接替代。 NVIDIA SMI已在驱动程序版本319中更新,如果守护程序正在运行,则使用守护程序的RPC接口通过守护程序设置持久性模式;如果守护程序未运行,则将退回到设置内核模式驱动程序中的传统持久性模式。 运行。 所有这些都由NVIDIA SMI透明地处理,因此持久性模式的配置方式应该保持不变。 最终,一旦在相关用例中得到广泛采用,便不再使用旧版持久性模式,而取而代之的是NVIDIA Persistence Daemon。

5.3. 权限和安全性

NVIDIA Persistence Daemon在Linux上提供了更强大的持久性模式实现,因为它只是模仿了GPU的外部客户端,而实际上并未使用GPU进行任何工作。这样,它将使NVIDIA GPU驱动程序在其原始设计的假设下运行。

守护程序运行后,保持启用持久化模式的开销很小。守护程序将只是在睡眠中等待命令。

该守护程序不需要超级用户特权即可运行-但是,它确实需要超级用户特权才能在/ var / run中设置一些运行时数据。守护程序允许在没有超级用户特权的情况下以用户身份运行两种机制:
管理员(或使用超级用户权限运行的脚本)可以创建/ var / run / nvidia-persistenced目录,并将其“ chown”给运行守护程序的用户。然后可以使用su或类似程序以目标用户身份运行守护程序。在这种情况下,杀死守护程序时不会删除/ var / run / nvidia-persistenced目录。
守护程序可以以超级用户特权启动并使用–user选项。这将在创建/ var / run / nvidia-persistenced目录并以指定用户身份运行后,强制守护程序尽快放弃其超级用户特权。请注意,使用此机制,守护程序被杀死时,它可能无法删除/ var / run / nvidia-persistenced目录,因为用户可能没有对/ var / run的写入权限。
请注意,在这两种情况下,守护程序在被杀死时都可能无法删除其运行时数据目录,因此该任务通常应由该守护程序的初始化脚本或服务来处理。

通过简单地省略--user选项,守护进程也可以永久的超级用户权限运行,但是不建议这样做,它对于功能而言不是必需的。

守护程序还提供了–verbose选项,该选项将其日志记录输出增加到syslog中以进行调试。

该守护程序的源代码也可以在MIT许可下获得,以允许第二方和第三方安全审核。

5.4. 用法

要运行NVIDIA Persistence Daemon,只需运行(以root身份):

# nvidia-persistenced --user foo

在完成了少量需要超级用户特权的设置任务后,守护程序将删除超级用户特权并以用户’foo’的身份运行。

您可以使用NVIDIA SMI更改持久模式设置。例如,要在所有GPU上禁用持久性模式,只需运行(再次以root用户身份):

# nvidia-smi -pm 0

请参阅由NVIDIA GPU驱动程序安装程序安装的nvidia-persistenced(1)手册页,或以下内容的输出:

% nvidia-persistenced --help

有关详细的使用信息。

有关安装守护程序以始终在系统启动时运行的详细信息,请参见安装注意事项

5.5. 安装注意事项

我们之所以不能立即弃用旧版持久性模式并透明地切换到NVIDIA Persistence Daemon的原因,是因为目前我们不能保证NVIDIA Persistence Daemon将运行。这将是一种功能回归,因为持久性模式可能无法立即使用。

NVIDIA Persistence Daemon随附了从驱动程序版本319开始的NVIDIA Linux GPU驱动程序,并由安装程序安装为/ usr / bin / nvidia-persistenced。理想情况下,守护程序将根据Linux发行版的init系统在对用户透明的系统初始化中启动,并在系统关闭时退出。不幸的是,在安装应用程序以在Linux上进行系统初始化时没有统一的标准,因此我们无法在NVIDIA GPU驱动程序支持的广泛系统上可靠地这样做。

因此,我们希望鼓励各个发行商安装NVIDIA Persistence Daemon来开始系统初始化,这些发行人通常将NVIDIA GPU驱动程序重新打包以通过其程序包管理器进行安装,一旦知道初始化系统,这几乎是一件微不足道的任务。为此,我们在驱动程序包中提供了示例“初始化脚本”,以帮助进行此安装。这些脚本试图涵盖当今Linux发行版中最常见的三个init系统:SystemV,systemd和Upstart。这些示例脚本还附带一个安装程序脚本,该脚本会尝试检测初始化系统并为用户安装适当的脚本。样本脚本和安装脚本由NVIDIA GPU驱动程序安装程序安装到/usr/share/doc/NVIDIA_GLX-1.0/sample/nvidia-persistenced-init.tar.bz2。由于我们无法保证它们在所有支持的系统中都能正常使用,因此它们没有被驱动程序安装程序解压缩或运行。

默认情况下,安装程序脚本会尝试为守护程序运行创建一个新的系统用户,并且示例初始化脚本演示了权限和安全性中描述的第二个选项,用于在没有超级用户特权的情况下运行守护程序。

5.6. 客户可见度

守护程序对于最终客户是可见的,因为它通常需要某种手动安装到init系统中。但是,在执行了初始安装步骤之后,该守护程序应在后台透明运行,而NVIDIA SMI处理必要的切换,以确定是否可以使用该守护程序持久化模式。理想情况下,最终弃用和删除旧版持久性模式对于使用该守护程序的客户是透明的。

参考文章1:配置 Nvidia GPU 主机的运行环境

参考文章2:https://docs.nvidia.com/deploy/driver-persistence/index.html

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值