实例演示如何使用CCE XGPU虚拟化
本文分享自华为云社区《CCE XGPU虚拟化的使用》,作者: 可以交个朋友。
一 背景
在互联网场景中,用户的AI训练和推理任务对GPU虚拟化有着强烈的诉求。GPU卡作为重要的计算资源不管是在算法训练还是预测上都不可或缺,而对于常见的算法训练业务或智能业务都有往容器迁移演进的趋势,所以如何更好的利用GPU资源成了容器云平台需要解决的问题。云厂商如果提供GPU虚拟化可以为用户带来的如下收益:
- 提高资源利用率(GPU/显存)。GPU共享后,总利用率接近运行任务利用率之和,减少了资源浪费。
- 提高服务质量(QoS),增强公平性。多个任务既可以同时开始享受资源,也可以单独保证某一个任务的运行。
- 减少任务排队时间和总任务的消耗时间。假设两个任务结束时间分别是x,y,通过GPU共享,两个任务全部结束的时间小于x+y。
- 集群中可以运行更多任务,通过分时复用,减少抢占。
二 CCE平台上GPU虚拟化的优势
CCE GPU虚拟化采用自研xGPU虚拟化技术,能够动态对GPU设备显存与算力进行划分,单个GPU卡最多虚拟化成20个GPU虚拟设备。相对于静态分配来说,虚拟化的方案更加灵活,最大程度保证业务稳定的前提下,可以完全由用户自己定义使用的GPU量,
- 灵活:精细配置GPU算力占比及显存大小,算力分配粒度为5%GPU,显存分配粒度达MB级别。
- 隔离:支持显存和算力的严格隔离,支持单显存隔离,算力与显存同时隔离两类场景。
- 兼容:业务无需重新编译,无需进行CUDA库替换,对业务无感。
三 CCE上如何更好的使用xGPU能力
建议用户在使用GPU资源时,提前创建好对应规格型号的GPU节点资源池,方便后期管理和调度。
3.1 安装插件
GPU的使用需要借助CCE插件能力实现,前往CCE 插件市场进行插件的安装。
安装Volcano调度器插件
插件安装完成后,可前往配置中心-调度设置,设置默认调度器为Volcano,如果不设置需要在负载yaml中指定调度器spec.schedulerName: volcano
安装GPU插件(CCE AI 套件)
插件中心安装GPU插件,CCE平台已经提供多个版本的驱动,在列出的驱动列表中选择使用即可,支持不同节点池选择不同驱动版本。也支持自行配置其它版本的驱动,需要自行提供驱动下载链接。
3.2 创建负载任务调用xGPU资源
根据xGPU支持虚拟化维度进行操作实践
注意: 未开启volcano作为全局调度器时,需要在yaml指定调度器为volcano
3.2.1 xGPU模式之显存隔离如何使用
创建负载app01.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app01
spec:
replicas: 1
selector:
matchLabels:
app: app01
template:
metadata:
labels:
app: app01
spec:
containers:
- name: bert-container
image: swr.cn-north-4.myhuaweicloud.com/container-solution/bert-intent-detection:v1
ports:
- containerPort: 80
resources:
limits:
volcano.sh/gpu-mem.128Mi: '16'
requests:
volcano.sh/gpu-mem.128Mi: '16'
schedulerName: volcano
volcano.sh/gpu-mem.128Mi: '16'
: 显存申请量等于 128Mi x 16=2048Mi=2Gi;也当前负载最多只能使用2Gi的显存资源。
查看Pod信息,pod yaml自动生成两条注解,同样也标注了负载使用了2Gi显存
容器内使用nvidia-smi查看显存,表现最大显存为2Gi,显存隔离生效
xGPU显存隔离能力通过在HCE2.0上实现,在节点上查看/proc/xgpu目录,0表示使用的物理gpu显卡的序列号(如果是多个卡则有多个目录,文件名从0开始,各个文件对应相关下标的GPU卡),container目录下存放使用gpu虚拟化的 容器信息。
查看容器ID对应命令,查看meminfo和quota文件,可以看到HCE2.0控制给容器GPU卡显存和算力的上限配置。
meminfo
:容器分配显存为2Gi,quota
:容器分配的算力,0代表不限制算力可以使用到整卡的算力
路径中xgpu3
: 代表虚拟gpu卡的卡号 每创建一个新的容器都会按次序生成一个新的虚拟gpu卡号
3.3.2 单节点多张gpu卡场景分析
购买多gpu卡机型
虚拟化模式下不支持单pod申请超过一张卡的gpu资源,如单pod需要使用多卡资源请关闭gpu虚拟化;同时多卡调度,也不支持1.x,2.x 形式,需要为大于1的整数
节点上能看到两张gpu物理卡编号
看到容器资源显存隔离生效,xGPU1是从0号gpu卡上软件连接过来的
3.2.3 xGPU模式之显存算力均隔离如何使用
创建负载app02,yaml如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: app02
spec:
replicas: 1
selector:
matchLabels:
app: app02
template:
metadata:
labels:
app: app02
spec:
containers:
- name: bert-container
image: swr.cn-north-4.myhuaweicloud.com/container-solution/bert-intent-detection:v1
ports:
- containerPort: 80
resources:
limits:
volcano.sh/gpu-mem.128Mi: '32'
volcano.sh/gpu-core.percentage: '20'
requests:
volcano.sh/gpu-mem.128Mi: '32'
volcano.sh/gpu-core.percentage: '20'
schedulerName: volcano
volcano.sh/gpu-mem.128Mi: '32'
: 显存申请量等于 128Mi x 32=4096Mi=4Gi
volcano.sh/gpu-core.percentage: '20'
: 算力申请量等于整卡算力的20%
表示当前负载最多只能使用4Gi的显存,算力上限为20%。
查看Pod信息,yaml文件自动生成3条注解,标注了负载使用了4Gi显存,算力可使用整卡算力的20%
容器内执行nvidia-smi
命令查看显卡驱动信息也可发现显存为4Gi
前往宿主机查看GPU资源使用状况
节点上/proc/xgpu/container
目录下查看相关容器的xGPU的配额,发现可用显存为4Gi,可用算力为20%
3.3.3 xGPU兼容GPU共享模式
如果您在集群中已使用nvidia.com/gpu
资源的工作负载,可在gpu-device-plugin插件配置中选择“虚拟化节点兼容GPU共享模式”选项,即可兼容Kubernetes默认GPU调度能力。
开启该兼容能力后,使用nvidia.com/gpu
配额时等价于开启虚拟化GPU显存隔离,可以和显存隔离模式的工作负载共用一张GPU卡,但不支持和算显隔离模式负载共用一张GPU卡。
创建工作负载app03,yaml如下,使用整卡调度
apiVersion: apps/v1
kind: Deployment
metadata:
name: app03
spec:
replicas: 1
selector:
matchLabels:
app: app03
template:
metadata:
labels:
app: app03
spec:
containers:
- name: bert-container
image: swr.cn-north-4.myhuaweicloud.com/container-solution/bert-intent-detection:v1
ports:
- containerPort: 80
resources:
limits:
nvidia.com/gpu: 1
requests:
nvidia.com/gpu: 1
schedulerName: volcano
查看Pod信息,yaml文件中自动生成2条注解,算力可使用整卡百分之100的算力
容器内执行 nvidia-smi
命令查看显卡驱动信息
可以发现当我们申请1张GPU整卡时,容器里的显存上限为整卡的显存配额
节点上查看/proc/xgpu/container/
目录下为空,容器使用到整卡的显存和算力资源
创建工作负载app04, yaml如下,使用分卡共享调度
apiVersion: apps/v1
kind: Deployment
metadata:
name: app04
spec:
replicas: 1
selector:
matchLabels:
app: app04
template:
metadata:
labels:
app: app04
spec:
containers:
- name: bert-container
image: swr.cn-north-4.myhuaweicloud.com/container-solution/bert-intent-detection:v1
ports:
- containerPort: 80
resources:
limits:
nvidia.com/gpu: 0.4
requests:
nvidia.com/gpu: 0.4
schedulerName: volcano
注意:兼容Kubernetes默认GPU调度模式时,如使用nvidia.com/gpu: 0.1参数,最终计算后 ,指定的显存值如非128MiB的整数倍时会向下取整,例如:GPU节点上的显存总量为24258MiB,而24258MiB * 0.1 = 2425.8MiB,此时会向下取整至128MiB的18倍,即18 * 128MiB=2304MiB
查看Pod信息,yaml文件自动转换成显存隔离,算力不隔离
容器内执行 nvidia-smi
命令查看容器中使用的显卡信息
可以发现容器中显存配额为整卡百分之40显存资源
前往节点 /proc/xgpu/container
目录查看分配的xGPU的信息
可以发现对应的容器限制效果为:显存隔离生效算力不进行隔离
3.3.4 单pod中多个容器(显存隔离)
创建工作负载app05,yaml如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app05
spec:
replicas: 1
selector:
matchLabels:
app: app05
template:
metadata:
labels:
app: app05
spec:
containers:
- name: bert-container
image: swr.cn-north-4.myhuaweicloud.com/container-solution/bert-intent-detection:v1
ports:
- containerPort: 80
resources:
limits:
volcano.sh/gpu-mem.128Mi: '16'
requests:
volcano.sh/gpu-mem.128Mi: '16'
- name: bert-container2
image: swr.cn-north-4.myhuaweicloud.com/container-solution/bert-intent-detection:v1
command:
- /bin/bash
args:
- '-c'
- while true; do echo hello; sleep 10;done
ports:
- containerPort: 81
resources:
limits:
volcano.sh/gpu-mem.128Mi: '16'
requests:
volcano.sh/gpu-mem.128Mi: '16'
schedulerName: volcano
查看Pod信息,yaml文件注解中会有两个容器的资源使用2Gi+2Gi、
容器中执行nvidia-smi
命令,查看容器中显存分配信息
两个容器中各自都看到有2Gi显存的资源
节点查看 /proc/xgpu/congtainer
目录下生成两个容器文件,显存隔离都为2Gi,算力都没有做限制
3.4 GPU监控相关指标
查看监控指标需要安装kube-prometheus-stack插件的server模式
xGPU核心监控指标
xgpu_memory_total
:容器GPU虚拟化显存总量,该指标为container级别
xgpu_memory_used
:容器使用GPU虚拟化显存使用量,该指标为container级别
xgpu_core_percentage_total
:容器GPU虚拟化算力总量,该指标为container级别,20代表可以使用整卡算力的20%,该指标为container级别
xgpu_core_percentage_used
:容器GPU虚拟化算力使用量,该指标为container级别,目前使用量为0
gpu_schedule_policy
:GPU虚拟化分三种模式(0:显存隔离算力共享模式、1:显存算力隔离模式、2:默认模式,表示当前卡还没被用于GPU虚拟化设备分配),该指标为节点级别
多卡场景,gpu_index字段为gpu物理卡的编号
xgpu_device_health
:GPU虚拟化设备的健康情况,0:表示GPU虚拟化设备为健康状态;1:表示GPU虚拟化设备为非健康状态。该指标为container级别
其他监控指标请参考:https://support.huaweicloud.com/usermanual-cce/cce_10_0741.html
3.5 升级GPU驱动版本
Nvidia driver驱动程序定期会发布新版本,如果负载需要使用新版本驱动,可以通过CCE AI套件的能力进行驱动版本的更新
1.编辑gpu插件 点击使用获取535.54.03版本的驱动下载链接
https://hgcs-drivers-cn-north-4.obs.cn-north-4.myhuaweicloud.com/release/driver/tesla/NVIDIA-Linux-x86_64-535.54.03.run
2.更改gpu001节点池的下载驱动链接为535.54.03版本
3.插件升级完成后必须手动重启gpu节点才能生效
注意:重启节点会造成该节点上业务中断,需要提前将该节点设置禁止调度,然后扩容该节点上关键业务,再进行驱逐处理,最后重启节点,恢复调度。
节点重启中
节点驱动升级完成
验证:gpu驱动升级成功到535.54.03版本
实例演示如何使用CCE XGPU虚拟化的更多相关文章
- SSO之CAS单点登录实例演示
本文目录: 一.概述 二.演示环境 三.JDK安装配置 四.安全证书配置 五.部署CAS-Server相关的Tomcat 六.部署CAS-Client相关的Tomcat 七. 测试验证SSO 一.概述 ...
- Thrift入门及Java实例演示<转载备用>
Thrift入门及Java实例演示 作者: Michael 日期: 年 月 日 •概述 •下载配置 •基本概念 .数据类型 .服务端编码基本步骤 .客户端编码基本步骤 .数据传输协议 •实例演示(ja ...
- 原生JS编写的照片墙效果实例演示特效
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 实例演示使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程-Web
实例演示使用RDIFramework.NET 框架的工作流组件 进行业务流程的定义—请假申请流程-Web 参考文章: RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系 ...
- 审核流(3)低调奢华,简单不凡,实例演示-SNF.WorkFlow--SNF快速开发平台3.1
下面我们就从什么都没有,结合审核流进行演示实例.从无到有如何快速完美的实现,然而如此简单.低调而奢华,简单而不凡. 从只有数据表通过SNF.CodeGenerator代码生成器快速生成单据并与审核流进 ...
- Thrift入门及Java实例演示
目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...
- Apache Thrift学习之一(入门及Java实例演示)
目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...
- jquery.validate.js实例演示
validate是前端重要的交互手段,提升性能的同时更能提升用户操作体验,validate的实现大概有三种方式:HTML5部分支 持,validate验证框架,手动写js或ajax调用接口.使用val ...
- jquery仿alert提示框、confirm确认对话框、prompt带输入的提示框插件[附实例演示]
jquery仿alert提示框.confirm确认对话框.prompt带输入的提示框插件实例演示 第一步:引入所需要的jquery插件文件: http://www.angelweb.cn/Inc/eg ...
- jmeter实例演示
Jmeter 是比较轻便的性能测试工具,下面根据一个实例演示下jmeter的常见用法 一.前期准备,在使用之前,先分析测试需求,比如:需不要登录?需不需要监视服务器性能?多线程还是多循环?需不需根据流 ...
随机推荐
- CentOS8安装Geant4笔记(二):CentOS8安装Qt5.15.2并测试运行环境
前言 在服务器CentOs8.2上安装geant4软件,但是运行不起来,所以本节开始主要是安装qt,测试qt基本功能. 要点 添加qt环境到系统环境中,是geant4启动qt的必要条件. ...
- extra用法
做子查询时,有些orm语句满足不了的时候使用 select参数 ## select age,(age > 18) as is_adult from myapp_person; Person.ob ...
- java图书管理系统
一 .需求 1.使用数组存储学生(学号.姓名.性别.年级.院系.班级)信息数据和图书(书号.书名.出版日期.作者.价格.类别)信息数据 2.学生管理功能:增加学生.删除学生信息.修改学生信息.查询学生 ...
- DataGear 制作基于 three.js 的 3D 数据可视化看板
DataGear专业版 1.0.0 已发布,欢迎试用! http://datagear.tech/pro/ DataGear 支持采用原生的HTML.JavaScript.CSS制作数据可视化看板,也 ...
- 【Azure Redis】Azure Redis添加了内部虚拟网络后,其他区域的主机通过虚拟网络对等互连访问失败
问题描述 跨区域无法访问Azure Redis服务, Redis 启用了Network并设置在一个VNET中,现在客户端部署在另一个区域数据中心中,两个数据中心区域使用VNET Peer(对等互连)访 ...
- 【Azure 存储服务】关于Storage Account Queue使用的几个问题
1) 在消费Storage Queue中的数据的时候,如何只过滤出 Subject 为"message/{messageid}"这种,去掉subject为"informa ...
- 如何运维多集群数据库?58 同城 NebulaGraph Database 运维实践
图计算业务背景介绍 我们为什么选择 NebulaGraph? 在公司各个业务线中,有不少部门都有着关系分析等图探索场景,随着业务发展,相关的需求越来越多.大量需求使用多模数据库来实现,开发成本和管理成 ...
- 为Oracle链接服务器使用分布式事务
1 现象 在SQL Server中创建指向Oracle的链接服务器,SQL语句在事务中向链接服务器插入数据.返回链接服务器无法启动分布式事务的报错. 2 解决 在Windows平台下,SQL Serv ...
- forward配置
Adb connect 127.0.0.1:62001 adb forward tcp:27042 tcp:27042 #设置端口转发 adb forward tcp:27043 tcp:27 ...
- Github无法读取远程仓库
主页 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ Git无法访问 今早起来访问Github炸了,Git不能用了,提示: ...