4. sGPU介绍
sGPU是软件实现的算力切分方案,可以基于物理GPU创建最多16个虚拟GPU实例,主要面向基于容器的云端推理和小模型训练场景。
4.1. 在单机场景下使用sGPU
4.1.1. 基础环境要求
Docker版本≥19.03
主机上已经正确安装了 MXMACA® SDK和内核态驱动
4.1.2. 安装metax-docker
获取安装包
以 0.13.0 版本为例,从 沐曦软件中心 获取离线安装包 metax-docker_0.13.0.tar。
解压并安装
mkdir metax-docker tar -C metax-docker -xvf metax-docker_0.13.0.tar cd metax-docker sudo ./metax-docker_0.13.0.<ARCH>.run
验证安装
metax-docker version显示metax-docker版本,代表安装成功。
4.1.3. 开启/停用sGPU功能
检查GPU设备状态
mx-smi -L GPU#序号 GPU版本 BDF 状态(UUID) GPU#0 MXC500 0000:08:00.0 Available(UUID: GPU-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) GPU#1 MXC500 0000:09:00.0 Available(UUID: GPU-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
当状态栏显示
Available时,代表GPU状态正常。查看当前GPU模式
mx-smi sgpu --show-mode
观察显示结果中
sgpu mode,Disable代表未开启sGPU功能,Enable代表开启sGPU功能。配置sGPU模式
开启sGPU:
mx-smi sgpu -i UUID --enable
关闭sGPU:
mx-smi sgpu -i UUID --disable
4.1.4. 创建/销毁sGPU资源
创建sGPU资源
在GPU <BDF>/UUID/deviceId 上,创建一个显存配额128M,计算资源配额为30%的sGPU。
mx-smi sgpu -i <BDF>/UUID/deviceId -c --vram 128M --compute 30
验证sGPU创建
mx-smi -L GPU#0 MXC500 0000:08:00.0 Available (UUID: GPU-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) SGPU#(sgpuid) vram compute 状态 (UUID) SGPU#0 30% 0.125gb Available (UUID: GPU-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) GPU#1 MXC500 0000:09:00.0 Available (UUID: GPU-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
当出现高亮第二行类似内容,且vram和compute参数和创建时传参一致,则代表sGPU设备创建成功。
销毁sGPU资源
mx-smi sgpu -i <BDF>/UUID/deviceId -r sgpuid
验证sGPU销毁
mx-smi -L GPU#0 MXC500 0000:08:00.0 Available (UUID: GPU-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) GPU#1 MXC500 0000:09:00.0 Available (UUID: GPU-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
sGPU不再显示,代表sGPU资源已被销毁。
4.1.5. 在容器中挂载sGPU
挂载sGPU到容器
使用metax-docker的
--gpus=[<sgpu:UUID>,<sgpu:UUID>]参数,将sGPU挂载到容器中。metax-docker run -it --rm --gpus="[<sgpu:GPU-24ed2eec-7f19-7945-4c9f-825439238327>, <sgpu:GPU-24342eec-ab19-7901-4c9f-125914288327>]" ubuntu:18.04 /bin/bash验证sGPU挂载
mx-smi -L当显示sgpu设备数量和挂载数量相同且配置相等时,代表sGPU挂载成功。
更多 metax-docker 使用方案,参见《曦云系列通用GPU云原生参考手册》。
4.2. 在K8s场景下使用sGPU
4.2.1. 安装 GPU Operator
备注
关于 GPU Operator 所依赖的前置资源,参见《曦云系列通用GPU云原生参考手册》中“安装与维护”章节。
获取安装包
以 0.13.0 版本为例,从 沐曦软件中心 下载离线安装包 metax-gpu-k8s-package.0.13.0.tar.gz,解压后获取以下文件:
metax-k8s-images.0.13.0.run:镜像资源包
metax-operator-0.13.0.tgz:Operator Helm Chart
metax-gpu-extensions-0.13.0.tgz:Extensions Helm Chart
准备内核驱动和 MXMACA® SDK 镜像
GPU Operator 会自动管理节点上的内核驱动及 MXMACA® SDK 的部署与更新,需确保所有工作节点均可正常拉取相关镜像资源。
内核驱动与 MXMACA® SDK 可从 沐曦软件中心 下载。
资源包格式:
内核驱动镜像包
metax-k8s-driver-image.<VERSION>-<ARCH>.run:包含内核态驱动和配套 mx-smi 工具的资源包
MXMACA® SDK 镜像包
随 MXMACA® 的发布包发布,例如 maca-c500-container-*.xz 或者 mxc500-maca-*-container.xz
推送镜像
# 假设容器仓库服务器域名为 DOMAIN ,用于存放沐曦Kubernetes组件镜像的项目名为 PROJECT。 # 默认使用docker进行镜像推送 metax-k8s-images.0.13.0.run push DOMAIN/PROJECT # 使用nerdctl进行镜像推送 metax-k8s-images.0.13.0.run nerdctl push DOMAIN/PROJECT
备注
自 0.13.0 起,该工具支持多种运行时:
docker、nerdctl、ctr。若未显式指定,默认使用
docker。若主机未安装docker,系统将自动检测可用运行时并执行镜像推送。
推送 Helm Charts
helm push ./k8s/metax-operator-0.13.0.tgz oci://DOMAIN/PROJECT
4.2.1.1. 集群内所有沐曦 GPU 都需要启用 GPU 共享功能
安装 GPU Operator
以容器镜像仓库地址为
DOMAIN/PROJECT为例,在 Kubernetes 管理节点执行以下命令安装 GPU Operator 。helm install ./k8s/metax-operator-0.13.0.tgz \ --create-namespace -n metax-operator \ --generate-name \ --wait \ --set registry=DOMAIN/PROJECT \ --set gpuDevice.sGPUHybridMode=true
验证安装状态
在 Kubernetes 管理节点执行以下命令检查 Pod 是否处于
Running状态。kubectl get pod -n metax-operator NAME READY STATUS RESTARTS AGE metax-container-runtime-4lsd7 1/1 Running 0 31s metax-gpu-device-7774b 1/1 Running 0 31s metax-gpu-label-l5tkf 1/1 Running 0 31s metax-operator-1755847288-77bfc94568-7wqlh 1/1 Running 0 31s ...
检查节点资源配置
以 sample-node1 节点为例,在 Kubernetes 管理节点执行以下命令检查节点资源配置。
kubectl get node sample-node1 -o json | jq '.status.allocatable | with_entries(select(.key | startswith("metax-tech.com/sgpu")))' # 示例输出 { "metax-tech.com/sgpu": "16" }
4.2.1.2. 集群内仅部分节点的沐曦 GPU 需要启用 GPU 共享功能
安装 GPU Operator
以容器镜像仓库地址为
DOMAIN/PROJECT为例,在 Kubernetes 管理节点执行以下命令安装 GPU Operator 。helm install ./k8s/metax-operator-0.13.0.tgz \ --create-namespace -n metax-operator \ --generate-name \ --wait \ --set registry=DOMAIN/PROJECT
验证安装状态
在 Kubernetes 管理节点执行以下命令检查 Pod 是否处于
Running状态。kubectl get pod -n metax-operator NAME READY STATUS RESTARTS AGE metax-container-runtime-4lsd7 1/1 Running 0 31s metax-gpu-device-7774b 1/1 Running 0 31s metax-gpu-label-l5tkf 1/1 Running 0 31s metax-operator-1755847288-77bfc94568-7wqlh 1/1 Running 0 31s ...
创建ConfigMap配置
在 Kubernetes 管理节点执行以下命令创建
ConfigMap配置集群级别和节点级别的 gpu-device 的运行模式。 配置为sgpu模式的节点将启用 GPU 共享功能。cat << "EOF" | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: metax-device-config namespace: metax-operator data: version: v1 cluster-config: | mode: "native" nodes-config: | - nodeName: "sample-node1" mode: "sgpu" EOF
检查节点资源配置
以 sample-node1 节点为例,在 Kubernetes 管理节点执行以下命令检查配置为
sgpu模式的节点资源。kubectl get node sample-node1 -o json | jq '.status.allocatable | with_entries(select(.key | startswith("metax-tech.com/sgpu")))' # 示例输出 { "metax-tech.com/sgpu": "16" }
4.2.2. 安装 HAMi
备注
HAMi 版本需≥2.6.0。
安装 HAMi
在 Kubernetes 管理节点执行以下命令安装 HAMi 。
helm repo add hami-charts https://project-hami.github.io/HAMi/ helm install hami hami-charts/hami -n hami --create-namespace
更多相关信息可参见 通过 Helm 在线安装(推荐)。 如果集群无法直接访问外部网络,操作步骤参见离线安装 。
验证安装状态
在 Kubernetes 管理节点执行以下命令检查 Pod 是否处于
Running状态。kubectl get pod -n hami NAME READY STATUS RESTARTS AGE hami-scheduler-5888f74b95-l8s6p 2/2 Running 0 31s
4.2.3. 编写任务 YAML
创建 sample.yaml,用户可参考以下示例编写任务文件。
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
containers:
- name: ubuntu
image: ubuntu:22.04
imagePullPolicy: IfNotPresent
command: ['bash', '-c']
args: ["sleep infinity"]
resources:
limits:
metax-tech.com/sgpu: 1 # requesting 1 GPU
metax-tech.com/vcore: 60 # requesting 60% compute of full GPU
metax-tech.com/vmemory: 4 # requesting 4 GiB device memory of full GPU
4.2.4. 提交任务
在 Kubernetes 管理节点执行以下命令提交任务。
kubectl create -f sample.yaml
4.2.5. 检查调度结果
在 Kubernetes 管理节点执行以下命令检查任务的调度节点。
kubectl get pod -owide
NAME READY STATUS RESTARTS AGE NODE
sample-pod 1/1 Running 0 31s sgpu-node
4.2.6. sGPU挂载检查
检查sGPU挂载是否成功。
mx-smi -L
当显示sgpu设备数量和挂载数量相同且配置相等时,代表sGPU挂载成功。