开源GPU虚拟化方案:HAMi 2024-10-11 作者 C3P00 在当今的计算环境中,GPU的高效利用变得愈加重要,尤其是在需要并行计算的AI和机器学习任务中。本文将深入探讨一个开源的GPU虚拟化方案——HAMi,涵盖其安装、配置和使用方法。 1. 为什么需要GPU共享与切分? 在深入HAMi之前,我们首先需要思考一个问题:为什么需要GPU共享和切分等方案?在裸机环境中,多个进程可以共享同一GPU,然而当我们转向Kubernetes(K8s)环境时,这种共享就变得复杂了。 资源感知 在K8s中,资源是与节点绑定的。NVIDIA提供的device-plugin可以帮助我们感知GPU资源,并将其上报到kube-apiserver。这样,我们就能在Node对象上看到相应的GPU资源。 例如,使用以下命令查看节点资源: root@liqivm:~# k describe node gpu01 | grep Capacity -A 7 Capacity: cpu: 128 memory: 1056457696Ki nvidia.com/gpu: 8 可以看出,该节点上有8个GPU可用。 资源申请 当我们创建Pod时,可以申请相应的GPU资源。例如,申请一个GPU: apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: gpu-container image: nvidia/cuda:11.0-base resources: limits: nvidia.com/gpu: 1 command: ["nvidia-smi"] 这样,K8s调度器就会将该Pod调度到拥有足够GPU资源的节点上,同时该Pod申请的资源会被标记为已使用,无法再分配给其他Pod。 2. 什么是HAMi? HAMi(Heterogeneous AI Computing Virtualization Middleware)是一个异构算力虚拟化平台,旨在为Kubernetes集群中的异构AI计算设备提供管理和调度功能。HAMi允许任务在不同类型的异构设备(如GPU、NPU等)之间共享资源,并基于设备的拓扑和调度策略做出更优的调度决策。 主要功能 HAMi支持GPU的细粒度隔离,可以对核心和内存使用进行1%级别的隔离。通过替换容器中的libvgpu.so库,HAMi能够实现CUDA API的拦截,从而实现对GPU资源的有效管理。 例如,您可以在Pod中这样指定资源: apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: ubuntu-container image: ubuntu:18.04 command: ["bash", "-c", "sleep 86400"] resources: limits: nvidia.com/gpu: 1 # 请求1个vGPU nvidia.com/gpumem: 3000 # 每个vGPU申请3000M显存 nvidia.com/gpucores: 30 # 每个vGPU使用30%的GPU算力 3. HAMi的部署 HAMi的安装使用Helm Chart,非常简单。首先,您需要部署NVIDIA的GPU Operator,以确保环境的兼容性。 部署步骤 添加HAMi仓库: helm repo add hami-charts https://project-hami.github.io/HAMi/ 获取集群服务端版本: kubectl version 使用Helm安装HAMi: helm install hami hami-charts/hami --set scheduler.kubeScheduler.imageTag=v1.27.4 -n kube-system 验证安装状态: kubectl get pods -n kube-system | grep hami 如果vgpu-device-plugin和vgpu-scheduler的状态为Running,则表示安装成功。 4. 验证GPU资源 在安装完成后,您可以检查节点的GPU资源是否已经按照预期扩容。例如,使用以下命令: kubectl get node xxx -oyaml | grep capacity -A 7 您将看到节点上可用的GPU资源数量增加。 5. 小结 HAMi作为一个开源vGPU方案,提供了细粒度的GPU资源隔离和管理能力,极大地提升了GPU的利用率。通过HAMi,用户可以在Kubernetes环境中实现对GPU资源的有效共享与管理,推动AI和机器学习任务的高效执行。 如需了解更多,欢迎访问HAMi的GitHub页面。
在当今的计算环境中,GPU的高效利用变得愈加重要,尤其是在需要并行计算的AI和机器学习任务中。本文将深入探讨一个开源的GPU虚拟化方案——HAMi,涵盖其安装、配置和使用方法。
1. 为什么需要GPU共享与切分?
在深入HAMi之前,我们首先需要思考一个问题:为什么需要GPU共享和切分等方案?在裸机环境中,多个进程可以共享同一GPU,然而当我们转向Kubernetes(K8s)环境时,这种共享就变得复杂了。
资源感知
在K8s中,资源是与节点绑定的。NVIDIA提供的device-plugin可以帮助我们感知GPU资源,并将其上报到kube-apiserver。这样,我们就能在Node对象上看到相应的GPU资源。
例如,使用以下命令查看节点资源:
可以看出,该节点上有8个GPU可用。
资源申请
当我们创建Pod时,可以申请相应的GPU资源。例如,申请一个GPU:
这样,K8s调度器就会将该Pod调度到拥有足够GPU资源的节点上,同时该Pod申请的资源会被标记为已使用,无法再分配给其他Pod。
2. 什么是HAMi?
HAMi(Heterogeneous AI Computing Virtualization Middleware)是一个异构算力虚拟化平台,旨在为Kubernetes集群中的异构AI计算设备提供管理和调度功能。HAMi允许任务在不同类型的异构设备(如GPU、NPU等)之间共享资源,并基于设备的拓扑和调度策略做出更优的调度决策。
主要功能
HAMi支持GPU的细粒度隔离,可以对核心和内存使用进行1%级别的隔离。通过替换容器中的
libvgpu.so
库,HAMi能够实现CUDA API的拦截,从而实现对GPU资源的有效管理。例如,您可以在Pod中这样指定资源:
3. HAMi的部署
HAMi的安装使用Helm Chart,非常简单。首先,您需要部署NVIDIA的GPU Operator,以确保环境的兼容性。
部署步骤
如果
vgpu-device-plugin
和vgpu-scheduler
的状态为Running,则表示安装成功。4. 验证GPU资源
在安装完成后,您可以检查节点的GPU资源是否已经按照预期扩容。例如,使用以下命令:
您将看到节点上可用的GPU资源数量增加。
5. 小结
HAMi作为一个开源vGPU方案,提供了细粒度的GPU资源隔离和管理能力,极大地提升了GPU的利用率。通过HAMi,用户可以在Kubernetes环境中实现对GPU资源的有效共享与管理,推动AI和机器学习任务的高效执行。
如需了解更多,欢迎访问HAMi的GitHub页面。