开源GPU虚拟化方案:HAMi

在当今的计算环境中,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,以确保环境的兼容性。

部署步骤

  1. 添加HAMi仓库:
   helm repo add hami-charts https://project-hami.github.io/HAMi/
  1. 获取集群服务端版本:
   kubectl version
  1. 使用Helm安装HAMi:
   helm install hami hami-charts/hami --set scheduler.kubeScheduler.imageTag=v1.27.4 -n kube-system
  1. 验证安装状态:
   kubectl get pods -n kube-system | grep hami

如果vgpu-device-pluginvgpu-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页面


发表评论