更新时间:2024-09-14 GMT+08:00

安装并使用XGPU

本章节介绍如何安装和使用XGPU服务。

约束限制

  • XGPU功能仅在Nvidia Tesla T4、V100上支持。
  • HCE内核版本为5.10及以上版本。
  • GPU实例已安装535.54.03版本的NVIDIA驱动。
  • GPU实例已安装18.09.0-300或更高版本的docker。
  • 受GPU虚拟化技术的限制,容器内应用程序初始化时,通过nvidia-smi监测工具监测到的实时算力可能超过容器可用的算力上限。
  • 当CUDA应用程序创建时,会在GPU卡上申请一小部分UVM显存(在Nvidia Tesla T4上大约为3 MiB),这部分显存属于管理开销,不受XGPU服务管控。
  • 暂不支持同时在裸机环境以及该环境直通卡的虚拟机中同时使用。
  • XGPU服务的隔离功能不支持以UVM的方式申请显存,即调用CUDA API cudaMallocManaged(),更多信息,请参见NVIDIA官方文档。请使用其他方式申请显存,例如调用cudaMalloc()等。

    XGPU允许用户动态禁用UVM的方式申请显存,禁用方法参考uvm_disable接口说明。

安装XGPU服务

安装XGPU服务请联系客服。

推荐您通过云容器引擎服务使用XGPU虚拟化服务,相关操作请参见GPU虚拟化

XGPU服务使用示例

影响XGPU服务的环境变量如下表所示,您可以在创建容器时指定环境变量的值。容器引擎可以通过XGPU服务获得算力和显存。

表1 影响XGPU服务的环境变量

环境变量名称

取值类型

说明

示例

GPU_IDX

Integer

指定容器可使用的GPU显卡。

为容器分第一张显卡:

GPU_IDX=0

GPU_CONTAINER_MEM

Integer

设置容器内可使用的显存大小,单位 MiB。

为容器分配的显存大小为5120MiB:

GPU_CONTAINER_MEM=5120

GPU_CONTAINER_QUOTA_PERCENT

Integer

指定显卡算力分配百分比。

算力支持最小1%粒度的划分,推荐最小算力不低于4%。

为容器分配50%的算力比例:

GPU_CONTAINER_QUOTA_PERCEN=50

GPU_POLICY

Integer

指定GPU使用的算力隔离的策略。

  • 0:不隔离算力,即原生调度。
  • 1:固定算力调度。
  • 2:平均调度。
  • 3:抢占调度。
  • 4:权重抢占调度。
  • 5:混合调度。
  • 6:权重弱调度。

算力隔离策略示例详见XGPU算力调度示例

设置算力隔离策略为固定算力调度:GPU_POLICY=1

GPU_CONTAINER_PRIORITY

Integer

指定容器的优先级。

  • 0:低优先级
  • 1:高优先级

创建高优先级容器:

GPU_CONTAINER_PRIORITY=1

以nvidia的docker创建两个容器为例,介绍XGPU服务的使用方法,数据规划如下。

表2 数据规划

参数

容器1

容器2

说明

GPU_IDX

0

0

指定两个容器使用第一张显卡。

GPU_CONTAINER_QUOTA_PERCENT

50

30

为容器1分配50%算力,为容器2分配30%算力。

GPU_CONTAINER_MEM

5120

1024

为容器1分配5120MiB显存,为容器2分配1024MiB显存。

GPU_POLICY

1

1

设置第一张显卡使用固定算力调度策略。

GPU_CONTAINER_PRIORITY

1

0

指定容器1为高优先级容器,容器2为低优先级容器。

配置示例:

docker run --rm -it --runtime=nvidia -e GPU_CONTAINER_QUOTA_PERCENT=50 -e GPU_CONTAINER_MEM=5120 -e GPU_IDX=0 -e GPU_POLICY=1 -e GPU_CONTAINER_PRIORITY=1 --shm-size 16g -v /mnt/:/mnt nvcr.io/nvidia/tensorrt:19.07-py3 bash 
docker run --rm -it --runtime=nvidia -e GPU_CONTAINER_QUOTA_PERCENT=30 -e GPU_CONTAINER_MEM=1024 -e GPU_IDX=0 -e GPU_POLICY=1 -e GPU_CONTAINER_PRIORITY=0 --shm-size 16g -v /mnt/:/mnt nvcr.io/nvidia/tensorrt:19.07-py3 bash

查看procfs节点

XGPU服务运行时会在/proc/xgpu下生成并自动管理多个procfs节点,您可以通过procfs节点查看和配置XGPU服务相关的信息。下面介绍各procfs节点的用途。

  1. 执行以下命令,查看节点信息。
    ls /proc/xgpu/
    0 container version uvm_disable

    目录内容说明如下表所示:

    目录

    读写类型

    说明

    0

    读写

    XGPU服务会针对GPU实例中的每张显卡生成一个的目录,并使用数字作为目录名称,例如0、1、2。本示例中只有一张显卡,对应的目录ID为0。

    container

    读写

    XGPU服务会针对运行在GPU实例中的每个容器生成一个的目录。

    version

    只读

    XGPU的版本。

    uvm_disable

    读写

    是否禁用UVM的方式申请显存,全局粒度,默认值为0。

    • 0:不禁用
    • 1:禁用
  2. 执行以下命令,查看第一张显卡对应的目录内容。
    ls /proc/xgpu/0/
    max_inst meminfo policy quota utilization_line utilization_rate xgpu1 xgpu2

    目录内容说明如下表所示:

    目录

    读写类型

    说明

    max_inst

    读写

    用于设置容器的最大数量,取值范围为1~25。仅在没有容器运行的情况下可修改。

    meminfo

    只读

    此显卡总共可用的显存大小。

    policy

    读写

    指定GPU使用的算力隔离的策略,默认值为1。

    • 0:不隔离算力,即原生调度。
    • 1:固定算力调度。
    • 2:平均调度。
    • 3:抢占调度。
    • 4:权重抢占调度。
    • 5:混合调度。
    • 6:权重弱调度。

    算力隔离策略示例详见XGPU算力调度示例

    quota

    只读

    算力总权重。

    utilization_line

    读写

    在离线混部的算力压制水位线。

    当GPU整卡利用率超过该值时,在线容器完全压制离线容器,否则在线容器部分压制离线容器。

    utilization_rate

    只读

    GPU整卡利用率。

    xgpuIndex

    读写

    属于此显卡的xgpu子目录。

    本示例中,属于第1张显卡的xgpu为xgpu1和xgpu2

  3. 执行以下命令,查看container目录内容。
    ls /proc/xgpu/container/
    9418 9582

    目录内容说明如下表所示:

    目录

    读写类型

    说明

    containerID

    读写

    容器的ID。

    使用XGPU创建容器的时候分配的ID,每个容器对应一个ID。

  4. 执行以下命令,查看containerID目录内容。
    ls /proc/xgpu/container/9418/
    xgpu1 uvm_disable
    ls /proc/xgpu/container/9582/
    xgpu2 uvm_disable

    目录内容说明如下表所示:

    目录

    读写类型

    说明

    xgpuIndex

    读写

    属于此容器的xgpu子目录。

    本示例中,属于容器9418的xgpu为xgpu1,属于容器9582的xgpu为xgpu2。

    uvm_disable

    读写

    是否禁用UVM的方式申请显存,容器粒度,默认值为0。

    • 0:不禁用
    • 1:禁用
  5. 执行以下命令,查看xgpuIndex目录内容。
    ls /proc/xgpu/container/9418/xgpu1/
    meminfo priority quota

    目录内容说明如下表所示:

    目录

    读写类型

    说明

    meminfo

    只读

    此XGPU分配的可见显存大小和当前剩余可用显存大小。

    如3308MiB/5120MiB, 64% free,指分配了5120MiB,剩余64%可使用。

    priority

    读写

    用于设置容器的优先级,默认值为0。

    • 0:低优先级
    • 1:高优先级

    该功能用于在线离线混合使用场景,高优先级容器可以抢占低优先级容器的算力。

    quota

    只读

    此XGPU分配的算力百分比。

    如50,指此XGPU分配了显卡50%的算力。

了解procfs节点的用途后,您可以在GPU实例中执行命令进行切换调度策略、查看权重等操作,示例命令如下表所示。

命令

效果

echo 1 > /proc/xgpu/0/policy

修改第一张显卡的调度策略为权重调度。

cat /proc/xgpu/container/$containerID/$xgpuIndex/meminfo

查看指定容器里xgpu分配的显存大小。

cat /proc/xgpu/container/$containerID/$xgpuIndex/quota

查看指定容器里xgpu分配的算力权重。

cat /proc/xgpu/0/quota

查看第一张显卡上剩余可用的算力权重。

echo 20 > /proc/xgpu/0/max_inst

设置第一张显卡最多可以创建20个容器。

echo 1 > /proc/xgpu/container/$containerID/$xgpuIndex/priority

设置指定容器里xgpu的优先级为高优先级。

echo 40 > /proc/xgpu/0/utilization_line

设置第一张显卡的在离线混部算力压制水位线为40%。

echo 1 > /proc/xgpu/container/$containerID/uvm_disable

设置指定容器里xgpu禁用UVM的方式申请显存

升级XGPU服务

XGPU服务采用冷升级的方式。

  1. 关闭所有运行中的容器。

    docker ps -q | xargs -I {} docker stop {}

  2. 升级xgpu的rpm包。

    rpm -U hce_xgpu

卸载XGPU服务

  1. 关闭所有运行中的容器。

    docker ps -q | xargs -I {} docker stop {}

  2. 卸载xgpu的rpm包。

    rpm -e hce_xgpu

通过xgpu-smi工具监控容器

您可以通过xgpu-smi工具查看XGPU容器的相关信息,包括容器ID、算力使用、分配情况、显存使用及分配情况等。

xgpu-smi的监控展示信息如下所示:

您可使用xgpu-smi -h命令查看xgpu-smi工具的帮助信息。