ToB企服应用市场:ToB评测及商务社交产业平台

标题: 云原生环境下GPU算力调度发展分析 [打印本页]

作者: 欢乐狗    时间: 2024-6-21 05:24
标题: 云原生环境下GPU算力调度发展分析
 


云原生环境下GPU算力调度深度分析 

   
概述:
云原生时代,GPU算力调度与管理备受瞩目,成为企业和云服务提供商关注的焦点,助力AI、深度学习、高性能计算等领域,满足对GPU资源的迫切需求。
云原生GPU算力调度与管理方案,全面涵盖硬件适配、资源调度、智能优化与上层服务化,为企业提供高效稳固的GPU计算能力。持续的技术创新,驱动AI与高性能计算应用迈向新高度,为企业带来无限可能。
以下是深度分析:
01 GPU介绍
GPU以多焦点、高速内存为特色,善于并行处理,广泛应用于深度学习、图形处理与科学计算。主要厂商有NVIDIA、AMD等,其性能关键指标涵盖焦点数目与内存速度。
02 Kubernetes管理GPU
随着AI技术的飞速发展,GPU需求激增。在资源管理中,Kubernetes已成为主流标准,浩繁客户选择利用其在Kubernetes中运行AI使命。为高效管理GPU资源,Kubernetes采用插件扩展机制,包括两个焦点内部机制,确保AI计算在Kubernetes集群中的顺畅运行。

# 启动 Kubernetes 的客户端 proxy,这样你就可以直接利用 curl 来跟 Kubernetes 的 API Server 举行交互了 $ kubectl proxy
# 执行 PACTH 操作 $ curl --header "Content-Type: application/json-patch+json" \ --request PATCH \ --data '[{"op": "add", "path": "/status/capacity/nvidia.com/gpu", "value": "1"}]' \ http://localhost:8001/api/v1/nodes/<your-node-name>/status
‍ 
apiVersion: v1, Node资源状态精简呈现:CPU容量2核,内存高达2GB(2049008K),并配备invidia.com/gpu资源1个,满足您的多元计算需求。

设备插件API接口界说于pkg/kubelet/apis/deviceplugin/v1beta1/api.pb.go文件第567行,专业、精简,满足高效设备交互需求。
type DevicePluginServer interface {// GetDevicePluginOptions returns options to be communicated with Device// Manager GetDevicePluginOptions(context.Context, *Empty) (*DevicePluginOptions, error)// ListAndWatch returns a stream of List of Devices// Whenever a Device state change or a Device disappears, ListAndWatch// returns the new list ListAndWatch(*Empty, DevicePlugin_ListAndWatchServer) error// Allocate is called during container creation so that the Device// Plugin can run device specific operations and instruct Kubelet// of the steps to make the Device available in the container Allocate(context.Context, *AllocateRequest) (*AllocateResponse, error)// PreStartContainer is called, if indicated by Device Plugin during registeration phase,// before each container start. Device plugin can run device specific operations// such as reseting the device before making devices available to the container PreStartContainer(context.Context, *PreStartContainerRequest) (*PreStartContainerResponse, error) }


     Device Plugin 与 Kubelet 交互过程
如今主流的GPU厂商都提供了对应的设备插件,如NVIDIA提供的Device Plugin (https://github.com/NVIDIA/k8s-device-plugin)。安装了插件,集群就会袒露一个自界说可调度的资源,例如 amd.com/gpu 或 nvidia.com/gpu。可以通过哀求这个自界说的 GPU 资源在你的容器中利用这些 GPU,其哀求方式与哀求 cpu 或 memory 时雷同。不外,在如何指定自界说设备的资源哀求方面存在一些限制:
GPU 只能在limits部分指定,这意味着:

以下是一个 Pod 哀求 GPU 的示例清单:

apiVersion: v1kind: Podmetadata:name: example-vector-addspec:restartPolicy: OnFailurecontainers:- name: example-vector-addimage: "registry.example/example-vector-add:v42"resources:limits:gpu-vendor.example/example-gpu: 1 # 哀求 1 个 GPU
利用Kubernetes中的厂商Device Plugin插件,高效管理GPU资源,但仍有诸多未便与局限,需持续优化以提升体验。

接下来介绍业内的一些GPU算力共享方案。
03 业内共享GPU算力方案
3.1  阿里GPU Share Device Plugin
实现思路:
通过Kubernetes的Extended Resource机制,我们准确界说了GPU资源,涵盖显存和数目,实现高效资源管理和利用。
通过Device Plugin机制,我们精准地在节点上陈诉GPU卡数目及总显存容量(数目×显存),确保kubelet及时更新至Kubernetes API Server,为资源调度提供精准数据支持。
通过k8s scheduler Extender机制,我们增强了调度器的功能。在全局调度过程中,Filter和Bind阶段均精准判断节点GPU显存是否满足需求。特别地,在Bind时,我们及时将GPU分配结果以annotation情势记载至Pod Spec,确保后续Filter能准确查抄分配状态,实现资源的高效利用与管理。
利用示例
apiVersion: apps/v1beta1kind: StatefulSet
metadata: name: binpack-1labels:    app: binpack-1spec: replicas: 3serviceName: "binpack-1"podManagementPolicy: "arallel"selector: # define how the deployment finds the pods it managesmatchLabels:      app: binpack-1 template: # define the pods specificationsmetadata: labels:        app: binpack-1 spec: containers: - name: binpack-1image: cheyang/gpu-player:v2resources: limits: # GiB aliyun.com/gpu-mem: 3
优点:开源,利用简单。
不敷之处:不支持共享资源的隔离,存在资源抢占情况;不支持算力维度的权衡划分。

 GPU应用调用链

3.2 阿里cGPU
cGPU,阿里云创新推出的容器共享技术,基于内核虚拟GPU隔离,实现多容器共享单GPU卡。这一技术不但确保业务安全隔离,更明显提升GPU资源利用率,降低利用成本。cGPU通过内核驱动为容器提供虚拟GPU设备,实现显存与算力隔离,配合轻量用户态运行库,轻松配置容器内虚拟GPU,为您的业务带来前所未有的高效与便捷。

  cGPU架构图       
利用以下YAML内容,创建申请GPU显存和算力的使命:
apiVersion: batch/v1kind: Jobmetadata:name: cuda-samplespec:parallelism: 1template:metadata:labels:app: cuda-samplespec:containers:- name: cuda-sampleimage: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:cuda-sample-11.0.3command:- bandwidthTestresources:limits: #申请2 GiB显存。aliyun.com/gpu-mem: 2 #申请一张GPU卡的30%算力。aliyun.com/gpu-core.percentage: 30workingDir: /rootrestartPolicy: Never
优点:支持算力、显存维度的管理调度,支持共享资源隔离。
不敷之处:商业产物,只能在阿里云容器服务利用;自研难度极大。
3.3 腾讯qGPU
腾讯云推出GPU容器共享技术,实现多容器间GPU卡共享,显存、算力隔离。原理与阿里云cGPU相近,高效提升资源利用,简化管理。

 qGPU架构图
3.4 vCUDA
这里主要是讨论腾讯开源的GaiaGPU。vCUDA的体系架构采用一个Manager来管理GPU,Manager负责配置容器的GPU计算能力和显存资源,做到利用者无法利用多余申请的显存,GPU的平均利用率不会大幅超出申请值。vCUDA的计划只侵入了CUDA层,用户的程序无需重新编译就可以运行在基于vCUDA的GPU实现共享。vCUDA利用修改后cuda library来达到资源控制,vCUDA分别修改了计算操作,显存操作和信息获取3个方面的API。
GaiaGPU,尖端图形处理单位解决方案的代名词。我们专注于为业界提供开始辈、性能杰出的GPU产物,通过高效的计算能力和杰出的图形渲染,助您轻松应对各种复杂场景。选择GaiaGPU,体验前所未有的高效与流畅,让您的项目更上一层楼!

vCUDA智能管理GPU资源,通过拦截容器内CUDA驱动调用,精准控制进程对GPU和显存的占用,提升资源利用效率。
优点:开源,可以在恣意地方利用,不依靠任何云。
缺点:必要更换CUDA库,版本要对齐;部分场景下有兼容性问题。
04 云原生方式管理GPU资源
cGPU、qGPU、vCUDA、gpu share、GPU 池化 等 GPU 共享技术越来越被用户采用。每种方案都有本身独立的一套 Kubernetes 集成实现方式,通常是由调度器 + device plugin 构成。这些方案相互独立,没有同一标准,无法共通。这导致用户在单个集群中很难同时利用多种 GPU 后端技术,同时也没有一个全局的视角获取集群层面 GPU 信息。这为基于 Kubernetes 构建同一的GPU算力基础设施平台增加了许多难度。
Elastic GPU引领创新,引入三款Kubernetes CRD,深受PV/PVC/StorageClass模型启发。这些CRD精准界说了GPU资源的各类抽象,助您实现更精致化的资源管理和高效利用,让GPU算力发挥到极致。详情访问https://github.com/elastic-ai/elastic-gpu。

支持用户通过云原生方式管理GPU资源。此方案分为四个模块:

同一GPU框架   
以qGPU为例,形貌团结Elastic GPU方案

`apiVersion: elasticgpu.io/v1alpha1
kind: ElasticGPUClass
metadata:
name: qgpu-class
spec:
provisioner: elasticgpu.io/qgpu
reclaimPolicy: Retain
eGPUBindingMode: Immediate
精简界说,快速部署ElasticGPUClass资源`qgpu-class`,实现GPU资源的弹性管理与即时绑定,确保资源高效利用与回收。```
ElasticGPUClaim 精准界说qGPU资源需求。`tke.cloud.tencent.com/qgpu-core` 标识10% GPU算力申请,而`tke.cloud.tencent.com/qgpu-memory`则确保4GB显存需求。简便高效,满足您对GPU资源的精准管理与优化。
ElasticGPU资源申请优化
```yaml
apiVersion: elasticgpu.io/v1alpha1
kind: ElasticGPUClaim
metadata:
name: qgpu-egpuc
spec:
storageClassName: qgpu-class
resources:
requests:
tke.cloud.tencent.com/qgpu-core: 10
tke.cloud.tencent.com/qgpu-memory: 4Gi
```
简便高效的ElasticGPU申请配置,明确指定了GPU焦点数和内存量,确保资源合理分配与应用性能最大化。
用户通过指定ElasticGPUClaim,轻松申领qGPU资源,实现Pod创建过程中的高效资源配置。
```yaml
apiVersion: v1
kind: Pod
metadata:
name: qgpu-pod
annotations:
elasticgpu.io/egpuc-<container-name>: qgpu-egpuc
spec:
containers:
- name: test
# 高效GPU容器部署,专注于性能优化
```
优化后的文案简便明了,突出了GPU容器部署的专业性和性能优化的重点。
05 总结
Kubernetes通过Device Plugin机制对GPU举行管理,利用GPU厂商提供的Device Plugin插件,即可在集群中申请利用GPU资源。对于必要共享GPU算力,并且不考虑资源隔离的场景,可考虑利用开源的GPU Share Device Plugin插件。cGPU、qGPU、vCUDA等方案在支持共享GPU算力的同时,提供了资源隔离的能力,企业可根据需求举行选择。Elastic GPU通过扩展界说CRD,对GPU资源举行了抽象,能较好的支持gpu share、cGPU、qGPU、vCUDA等多种技术,是一种非常好的云原生方式管理GPU思路。如今社区只适配了qGPU,其他技术如gpu share如今必要自行完成适配。

 

-对此,您有什么见解见解?-
-欢迎在评论区留言探讨和分享。-

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4