Note
之前实践过 install_nvidia_gpu_operator
是在 priv_cloud_infra
的 z-k8s
集群,当时还没有搞 vgpu
,所以是将完整的 tesla_p10
直接通过 ovmf_gpu_nvme
实现。
为了能够更好迷你大规模 gpu_k8s
,我重新部署 y-k8s
(集群部署采用 kubespray_startup
)来实现多 vgpu
的 machine_learning
本文为 install_nvidia_gpu_operator
再次实践
在安装NVIDIA GPU Operator之前,去需要确保 Kubernetes 集群 ( z-k8s
)满足以下条件:
- Kubernetes工作节点已经配置好容器引擎如
docker
CE/EE,cri-o
或containerd
( 注意NVIDIA GPU Operator
会自动完成节点的nvidia_container_runtimes
配置,所以不需要手工install_nvidia_container_toolkit_for_containerd
,只需要标准安装的container_runtimes
): 通过kubespray_startup
部署的集群默认采用了containerd
- 每个节点都需要部署Node Feature Discovery (NFD) : 默认情况下 NVIDIA GPU Operator会自动部署NFD master 和 worker
- 在Kubernetes 1.13 和 1.14,需要激活
kubelet
的KubeletPodResources
功能,从 Kubernetes 1.15以后是默认激活的
此外还需要确认:
- 每个hypervisor主机
vgpu
加速Kubernetes worker节点虚拟机必须先完成安装 NVIDIA vGPU Host Driver version 12.0 (or later) :install_vgpu_license_server
install_vgpu_manager
install_vgpu_guest_driver
vgpu_unlock
- 需要安装NVIDIA vGPU License Server服务于所有Kubernetes虚拟机节点
- 部署好私有仓库以便能够上传NVIDIA vGPU specific driver container image
- 每个Kubernetes worker节点能够访问私有仓库
- 需要使用 Git 和 Docker/Podman 来构建vGPU 驱动镜像(从源代码仓库)并推送到私有仓库
- 安装
helm
:
../deploy/helm/helm_startup/linux_helm_install
- 添加NVIDIA Helm仓库:
install_nvidia_gpu_operator/helm_add_nvidia_repo
Note
这步跳过,目前我的 y-k8s
集群的2个worker都已经部署了 vgpu
,而且也没有不部署的必须跳过的节点( NVIDIA GPU Operator
会自动部署有GPU的节点 )
默认情况下,GPU Operator operands会部署到集群中所有GPU工作节点。GPU工作节点的标签由 feature.node.kubernetes.io/pci-10de.present=true
标记,这里的 0x10de
是PCI vender ID,是分配给 NVIDIA 的供应商ID
- 首先给集群中安装了NVIDIA GPU的节点打上标签:
install_nvidia_gpu_operator/label_nvidia_gpu_node
- 要禁止在一个GPU工作节点部署operands,则对该节点标签
nvidia.com/gpu.deploy.operands=false
:
install_nvidia_gpu_operator/label_gpu_deploy_operands_false
有多重安装场景,以下是常见场景,请选择合适的方法
- 在Ubuntu的Bare-metal/Passthrough上使用默认配置(很好,正是我需要的场景,因为我只有一个绩点有 passthrough 的
tesla_p10
)
install_nvidia_gpu_operator/helm_install_gnu-operator_baremetal_passthrough
安装输出信息:
install_nvidia_gpu_operator/helm_install_gnu-operator_baremetal_passthrough_output
- 完成后见检查:
install_nvidia_gpu_operator/get_gnu-operator_pods
可以看到运行了如下pods:
install_nvidia_gpu_operator_y-k8s/get_gnu-operator_pods_output
- 首先可以运行NVIDIA提供了一个简单的CUDA示例,将两个向量相加:
install_nvidia_gpu_operator/simple_cuda_sample_1
提示信息:
install_nvidia_gpu_operator/simple_cuda_sample_1_output
在 install_nvidia_gpu_operator
初次实践时遇到过问题和排查(见原文)
- 检查:
install_nvidia_gpu_operator_y-k8s/get_pods
状态输出:
install_nvidia_gpu_operator_y-k8s/get_pods_output
- 通过检查日志来了解计算结果:
install_nvidia_gpu_operator_y-k8s/logs_pods
显示如下,表明NVIDIA GPU Operator安装正常:
install_nvidia_gpu_operator_y-k8s/logs_pods_output
Note
计算结果后pod部署不删除会导致GPU始终被占用,就无法继续调度新的GPU计算任务,此时需要删除 Completed
状态的pod来释放GPU资源。详见 gpu_node_schedule_err_debug
有什么好玩的呢?
玩一下 stable_diffusion_on_k8s
,体验在GPU加速下的 文本倒置(Textual Inversion)
图像生成