
# GPU虚拟化兼容Kubernetes默认GPU调度
开启GPU虚拟化后，**除显存隔离模式** （设置volcano.sh/gpu-mem.128Mi参数）、**算显隔离模式** （同时设置volcano.sh/gpu-mem.128Mi和volcano.sh/gpu-core.percentage参数）外，工作负载还支持[Kubernetes默认GPU调度](https://support.huaweicloud.com/usermanual-cce/cce_10_0345.html)（设置nvidia.com/gpu参数）。
开启GPU虚拟化并使用Kubernetes默认GPU调度时，存在以下场景：
- 若nvidia.com/gpu被设置为小数：
  - 工作负载被调度至不支持GPU虚拟化的节点（详见[前提条件](https://support.huaweicloud.com/usermanual-cce/cce_10_0644.html#cce_10_0644__section911495392713)）时，表示GPU共享调度，即多个容器可共享同一张物理GPU卡的计算资源和显存，适用于轻量级推理等对算力需求较低的场景。
  
  - 工作负载被调度至支持GPU虚拟化的节点（详见[前提条件](https://support.huaweicloud.com/usermanual-cce/cce_10_0644.html#cce_10_0644__section911495392713)）时，表示GPU虚拟化的显存隔离模式，此时可以和显存隔离模式的工作负载共用一张GPU卡，但无法与算显隔离模式负载共用一张GPU卡。系统将按nvidia.com/gpu设定的比例为容器分配GPU显存，分配给容器的显存量需为128MiB的整数倍，否则自动向下取整。例如，在16GiB的GPU上，nvidia.com/gpu设置为0.5，则容器将被分配0.5×16GiB=8GiB=8192MiB（128MiB的64倍）。
   
- 若nvidia.com/gpu被设置为整数，则表示GPU整卡调度，即该容器将独占使用一张物理GPU卡，系统不会将该卡划分给其他容器使用，适用于对资源性能和隔离要求高的场景。
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
使用不同GPU资源名称的Pod之间不支持装箱调度。例如，使用nvidia.com/gpu和volcano.sh/gpu-mem.128Mi声明资源的Pod，由于资源标识不一致，调度器无法将其视为同类资源，因此二者之间不支持装箱调度原则。
#### 约束与限制
使用GPU虚拟化兼容Kubernetes默认GPU调度模式，要求配套的CCE AI 套件 (NVIDIA GPU)插件版本为2.0.10及以上、Volcano调度器插件版本为1.10.5及以上。
#### 兼容GPU共享调度模式示例
1. 使用kubectl连接集群。
2. 创建一个使用nvidia.com/gpu资源的工作负载。 
   创建gpu-app.yaml文件，示例如下：
   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: gpu-app
     namespace: default
   spec:
     replicas: 1
     selector:
       matchLabels:
         app: gpu-app
     template:
       metadata:
         labels:
           app: gpu-app
       spec:
         schedulerName: volcano
         containers:
         - image: <your_image_address>     # 请替换为您的镜像地址
           name: container-0
           resources:
             requests:
               cpu: 250m
               memory: 512Mi
               nvidia.com/gpu: 0.1   # 填写时必须与limits.nvidia.com/gpu保持一致
             limits:
               cpu: 250m
               memory: 512Mi
               nvidia.com/gpu: 0.1   # 表示GPU申请值
         imagePullSecrets:
         - name: default-secret
   ```
   
   
3. 执行以下命令，创建应用。 
   ```
   kubectl apply -f gpu-app.yaml
   ```
   
   
4. 登录容器查看容器被分配显存总量。 
   ```
   kubectl exec -it gpu-app -- nvidia-smi
   ```
   预期输出：
   ```
   Thu Jul 27 07:53:49 2023       
   +-----------------------------------------------------------------------------+
   | NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4     |
   |-------------------------------+----------------------+----------------------+
   | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
   | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
   |                               |                      |               MIG M. |
   |===============================+======================+======================|
   |   0  NVIDIA A30          Off  | 00000000:00:0D.0 Off |                    0 |
   | N/A   47C    P0    34W / 165W |      0MiB /  2304MiB |      0%      Default |
   |                               |                      |             Disabled |
   +-------------------------------+----------------------+----------------------+
   +-----------------------------------------------------------------------------+
   | Processes:                                                                  |
   |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
   |        ID   ID                                                   Usage      |
   |=============================================================================|
   |  No running processes found                                                 |
   +-----------------------------------------------------------------------------+
   ```
   预期输出表明，Pod可使用的显存总量为2304MiB。
   本示例中，GPU节点上的显存总量为24258MiB，而24258MiB \* 0.1 = 2425.8MiB并非128MiB的整数倍，因此进行向下取整至18倍，即18 \* 128MiB=2304MiB。
   
   
 
#### 相关文档
- [GPU虚拟化多卡均分调度](https://support.huaweicloud.com/usermanual-cce/cce_10_0965.html)
- [GPU弹性伸缩](https://support.huaweicloud.com/usermanual-cce/cce_10_1017.html)
- [GPU监控](https://support.huaweicloud.com/usermanual-cce/cce_10_1016.html)
- [GPU故障处理](https://support.huaweicloud.com/usermanual-cce/cce_10_0779.html)
 
