安装并使用XGPU
本章节介绍如何安装和使用XGPU服务。
约束限制
- XGPU功能仅在Nvidia Tesla T4、V100上支持。
- HCE OS内核版本为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_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使用的算力隔离的策略。
算力隔离策略示例详见XGPU算力调度示例。 |
设置算力隔离策略为固定算力调度:GPU_POLICY=1 |
GPU_CONTAINER_PRIORITY |
Integer |
指定容器的优先级。
|
创建高优先级容器: GPU_CONTAINER_PRIORITY=1 |
以nvidia的docker创建两个容器为例,介绍XGPU服务的使用方法,数据规划如下。
参数 |
容器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节点的用途。
- 执行以下命令,查看节点信息。
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:禁用
- 执行以下命令,查看第一张显卡对应的目录内容。
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
- 执行以下命令,查看container目录内容。
ls /proc/xgpu/container/ 9418 9582
目录内容说明如下表所示:
目录
读写类型
说明
containerID
读写
容器的ID。
使用XGPU创建容器的时候分配的ID,每个容器对应一个ID。
- 执行以下命令,查看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:禁用
- 执行以下命令,查看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%的算力。
命令 |
效果 |
---|---|
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服务采用冷升级的方式。
通过xgpu-smi工具监控容器
您可以通过xgpu-smi工具查看XGPU容器的相关信息,包括容器ID、算力使用、分配情况、显存使用及分配情况等。
xgpu-smi的监控展示信息如下所示:
您可使用xgpu-smi -h命令查看xgpu-smi工具的帮助信息。