
# 准备GPU虚拟化资源
CCE GPU虚拟化采用自研xGPU虚拟化技术，能够动态对GPU设备显存与算力进行划分，单个GPU卡最多虚拟化成20个GPU虚拟设备。本文介绍如何在GPU节点上实现GPU的调度和隔离能力。
 #### 前提条件
| 配置     | 支持版本                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|
| 集群版本   | v1.23.8-r0、v1.25.3-r0及以上                                                                                                                                                                                                                                                                                                                                                                                                                          |
| 操作系统   | Huawei Cloud EulerOS 2.0操作系统，且内核版本为5.10及以上版本                                                                                                                                                                                                                                                                                                                                                                                                      |
| GPU类型  | 支持Tesla T4、Tesla V100类型的GPU                                                                                                                                                                                                                                                                                                                                                                                                                       |
| 驱动版本   | GPU虚拟化功能仅支持570.86.15、535.216.03、535.54.03（EOL）、510.47.03（EOL）、470.57.02（EOL）版本的GPU驱动 说明： 对于已停止维护（EOL）的GPU驱动，2.7.84以上版本的CCE AI 套件（NVIDIA GPU）插件将不再兼容，请及时升级至受支持的驱动版本。                                                                                                                                                                                           |
| CUDA版本 | 仅支持CUDA 12.2.0至12.8.0版本                                                                                                                                                                                                                                                                                                                                                                                                                           |
| 运行时    | 仅支持containerd                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| 插件     | 集群中需要同时安装以下插件： - [Volcano调度器](https://support.huaweicloud.com/usermanual-cce/cce_10_0193.html)插件：1.10.5及以上版本  - [CCE AI套件（NVIDIA GPU）](https://support.huaweicloud.com/usermanual-cce/cce_10_0141.html)插件：2.0.5及以上版本   |
   
#### 步骤一：开启GPU虚拟化
集群中需要同时安装[CCE AI套件（NVIDIA GPU）](https://support.huaweicloud.com/usermanual-cce/cce_10_0141.html)插件和[Volcano调度器](https://support.huaweicloud.com/usermanual-cce/cce_10_0193.html)插件。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群，在左侧选择"配置中心"。
2. 切换至"异构资源配置"页签，开启"GPU虚拟化"，支持配置集群级别和节点池级别的GPU虚拟化。 
   - **集群级别的GPU虚拟化：**
     1. 开启"GPU配置 \> GPU虚拟化"，开启后，全局默认开启GPU虚拟化，支持单GPU卡的算力与显存切分。
     
     2. 在"集群默认驱动"的中选择支持GPU虚拟化的驱动。
     
     3. 在页面右下角单击"确认配置"。
     
     
     图1开启集群级别GPU虚拟化   
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002201096984.png "点击放大") 
   
   - **节点池级别的GPU虚拟化** ：安装2.7.2及以上版本的CCE AI套件（NVIDIA GPU）插件时，支持以节点池级别配置GPU虚拟化开关。
     1. 在"GPU配置 \> 节点池配置"中单击添加行。
     
     2. 在"节点池"列表中选择需要配置GPU虚拟化的节点池，并在"驱动选择"中选择支持GPU虚拟化的驱动。配置节点池自定义驱动后，节点池中节点优先使用当前节点池自定义驱动，未指定驱动的节点将使用集群默认驱动。
        ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
        - 系统将根据节点池指定的驱动版本进行安装，仅对节点池新建节点生效。
        
        - 更新驱动版本后，新建节点直接生效，存量节点需重启节点生效。
          
     
     3. 在GPU虚拟化列中，单击![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002201242094.png)，开启节点池级别的GPU虚拟化。如果您需要为多个节点池配置GPU虚拟化，请单击"添加行"，继续添加。
     
     4. 在页面右下角单击"确认配置"。
     
     
     图2开启节点池级别GPU虚拟化   
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002201258656.png "点击放大") 
   
   
   
   
3. GPU虚拟化配置完成后，您可以进一步验证GPU虚拟化是否配置成功。 
   在左侧导航栏单击"集群 \> 节点管理"，在右侧切换至"节点"页签，找到配置GPU虚拟化的节点。在对应节点的"操作"列，单击"更多 \> 查看YAML"。如果YAML中"node-status.volcano.sh/nvidia"字段的值为"{"enableXGPU":true}"，则说明该节点GPU虚拟化配置成功。
   图3验证GPU虚拟化是否成功   
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002201268540.png "点击放大")
   
   
 
#### 步骤二：创建GPU节点
您需要在集群中创建支持GPU虚拟化的节点以使用GPU虚拟化功能，具体操作步骤请参见[创建节点](https://support.huaweicloud.com/usermanual-cce/cce_10_0363.html)或[创建节点池](https://support.huaweicloud.com/usermanual-cce/cce_10_0012.html)。如果您的集群中已有符合[前提条件]的GPU节点，您可以跳过此步骤。
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000001520080872.png "点击放大")
 #### 步骤三（可选）：修改Volcano调度策略
Volcano针对GPU节点的调度策略默认为Spread，即如果节点配置相同，会选择一个正在运行的容器数量最少的节点，可以尽量将容器平均分配到各个节点。而Binpack调度策略与之相反，它会尽可能地把所有的容器调度到一台节点上运行，尽量少用节点，避免资源碎片化。
如果在使用GPU虚拟化特性时需要使用Binpack调度策略，可以在Volcano插件的高级配置中进行修改，具体操作步骤如下。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群，在左侧选择"配置中心"。
2. 在"调度配置"页面，在"默认调度器"中将"Kube-scheduler调度器"切换至"Volcano调度器"，并在下方"专家模式"中，单击"开始使用"。 
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002165757089.png "点击放大")
   
   
   
   
   
3. 修改Volcano调度配置。 
   1. 在**nodeorder** 插件中，添加**arguments**参数，配置leastrequested.weight为0，即资源分配最少的节点优先级设置为0。
   
   2. 新增**binpack** 插件，并指定GPU虚拟化自定义资源（**volcano.sh/gpu-core.percentage** 和**volcano.sh/gpu-mem.128Mi**）的权重。
   
   
   示例如下：
   ```
   ...
   default_scheduler_conf:
     actions: allocate, backfill, preempt
     tiers:
       - plugins:
           - name: priority
           - enablePreemptable: false
             name: gang
           - name: conformance
       - plugins:
           - enablePreemptable: false
             name: drf
           - name: predicates
           - name: nodeorder
             arguments:
               leastrequested.weight: 0 # 将资源分配最少的节点优先级设置为0
       - plugins:
           - name: cce-gpu-topology-predicate
           - name: cce-gpu-topology-priority
           - name: xgpu
           - name: binpack # 添加binpack插件，并指定GPU虚拟化资源的权重
             arguments:
               binpack.resources: volcano.sh/gpu-core.percentage,volcano.sh/gpu-mem.128Mi
               binpack.resources.volcano.sh/gpu-mem.128Mi: 10
               binpack.resources.volcano.sh/gpu-core.percentage: 10
       - plugins:
           - name: nodelocalvolume
           - name: nodeemptydirvolume
           - name: nodeCSIscheduling
           - name: networkresource
   ...
   ```
   
   
4. 单击"保存"。
 
#### 相关文档
如果需要创建使用GPU虚拟化的工作负载，请参见[使用GPU虚拟化](https://support.huaweicloud.com/usermanual-cce/cce_10_0646.html)
