云服务器内容精选

  • 约束限制 XGPU功能仅在Nvidia Tesla T4、V100上支持。 HCE OS内核版本为5.10及以上版本。 GPU实例已安装535.54.03版本的NVIDIA驱动。 GPU实例已安装18.09.0-300或更高版本的docker。 XGPU服务的隔离功能不支持以UVM的方式申请显存,即调用CUDA API cudaMallocManaged(),更多信息,请参见NVIDIA官方文档。请使用其他方式申请显存,例如调用cudaMalloc()等。 受GPU虚拟化技术的限制,容器内应用程序初始化时,通过nvidia-smi监测工具监测到的实时算力可能超过容器可用的算力上限。 当CUDA应用程序创建时,会在GPU卡上申请一小部分UVM显存(在Nvidia Tesla T4上大约为3 MiB),这部分显存属于管理开销,不受XGPU服务管控。 暂不支持同时在裸机环境以及该环境直通卡的虚拟机中同时使用
  • 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
  • 权重弱调度(policy=6) 权重弱调度表示按照每个容器的算力比例为容器分配时间片,隔离性弱于权重抢占调度。XGPU服务会从算力单元1开始调度,但如果某个算力单元没有分配给某个容器,或者容器内没有进程打开GPU设备,则跳过调度切换到下一个时间片。例如为容器1、2、3分别分配5%、5%、10%的算力,则容器1、2、3分别占用1、1、2个算力单元。图中白色部分的算力单元表示容器3的空闲算力,图中白色部分和灰色部分的算力单元表示被跳过不参与调度。 本例中容器1、2、3占用的实际算力百分比为50%、50%、0%。 权重弱调度涉及空闲算力的抢占和抢回,因此容器在空闲和忙碌之间切换时会影响其他容器的算力,该算力波动属于正常情况。当某个容器从空闲切换到忙碌时,其抢回算力的时延不超过100ms。
  • 混合调度(policy=5) 混合调度表示单张GPU卡支持单显存隔离和算力显存隔离类型。其中算力显存隔离的容器其隔离效果同固定算力(policy=1)完全一致,单显存隔离的容器共享算力显存隔离的容器分配后剩余的GPU算力。以max_inst=20为例,容器1、2为算力显存隔离容器,其分配的算力分别为5%、10%,容器3、4为单显存隔离的容器,则容器1、2分别占用1、2个算力单元,容器3、4共享剩余17个算力单元。此外,当容器2中没有进程打开GPU设备时,则容器1、2分别占用1、0个算力单元,容器3、4共享剩余19个算力单元。 在混合调度下,根据GPU_CONTAINER_QUOTA_PERCENT是否为0来区分容器是否开启算力隔离,GPU_CONTAINER_QUOTA_PERCENT为0的所有容器共享GPU的空闲算力。 混合调度策略不支持高优先级容器。
  • 权重抢占调度(policy=4) 权重抢占调度表示按照每个容器的算力比例为容器分配时间片。XGPU服务会从算力单元1开始调度,但如果某个算力单元没有分配给某个容器,则跳过调度切换到下一个时间片。例如为容器1、2、3分别分配5%、5%、10%的算力,则容器1、2、3分别占用1、1、2个算力单元。图中灰色部分的算力单元表示被跳过不参与调度。 本例中容器1、2、3占用的实际算力百分比为25%、25%、50%。
  • 产品优势 节约成本 随着显卡技术的不断发展,单张GPU卡的算力越来越强,同时价格也越来越高。但在很多的业务场景下,一个AI应用并不需要一整张的GPU卡。XGPU的出现让多个容器共享一张GPU卡,从而实现业务的安全隔离,提升GPU利用率,节约用户成本。 可灵活分配资源 XGPU实现了物理GPU的资源任意划分,您可以按照不同比例灵活配置。 支持按照显存和算力两个维度划分,您可以根据需要灵活分配。 XGPU支持只隔离显存而不隔离算力的策略,同时也支持基于权重的算力分配策略。算力支持最小1%粒度的划分,推荐最小算力不低于4%。 兼容性好 不仅适配标准的Docker和Containerd工作方式,而且兼容Kubernetes工作方式。 操作简单 无需重编译AI应用,运行时无需替换CUDA库。
  • XGPU服务使用示例 影响XGPU服务的环境变量如下表所示,您可以在创建容器时指定环境变量的值。容器引擎可以通过XGPU服务获得算力和显存。 表1 影响XGPU服务的环境变量 环境变量名称 取值类型 说明 示例 GPU_IDX Integer 指定容器可使用的GPU显卡。 为容器分第一张显卡: GPU_IDX=0 GPU_CONTAINER_MEM Integer 设置容器内可使用的显存大小,单位 MB。 为容器分配的显存大小为5120MB: GPU_CONTAINER_MEM=5120 GPU_CONTAINER_QUOTA_PERCENT Integer 指定显卡算力分配百分比。 以5%粒度向上取整,即申请 51%算力,实际分配 55%算力。 为容器分配50%的算力比例: GPU_CONTAINER_QUOTA_PERCEN=50 以nvidia的docker创建两个容器为例,介绍XGP服务的使用方法。 本示例中,两个容器共用一张显卡,通过设置环境变量GPU_IDX指定使用第一张显卡。通过变量GPU_CONTAINER_QUOTA_PERCENT和GPU_CONTAINER_MEM,为容器1分配50%算力,5120MB显存;为容器2分配30%算力,1024MB显存。 docker run --rm -it --runtime=nvidia -e GPU_CONTAINER_QUOTA_PERCENT=50 -e GPU_CONTAINER_MEM=5120 -e GPU_IDX=0 --shm-size 16g -v /mnt/:/mnt nvcr.io/nvidia/tensorrt:19.07-py3 bashdocker run --rm -it --runtime=nvidia -e GPU_CONTAINER_QUOTA_PERCENT=30 -e GPU_CONTAINER_MEM=1024 -e GPU_IDX=0 --shm-size 16g -v /mnt/:/mnt nvcr.io/nvidia/tensorrt:19.07-py3 bash