偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何使用Kubernetes合理調(diào)整GPU和CPU資源以訓(xùn)練和推理AI模型?

譯文 精選
云計(jì)算 人工智能
本文將探索如何使用Kubernetes的先進(jìn)功能,根據(jù)需要?jiǎng)討B(tài)高效地對(duì)工作負(fù)載進(jìn)行優(yōu)先級(jí)排序,從而優(yōu)化GPU和CPU資源的分配。

譯者 | 李睿

審校 | 重樓

如今,人工智能服務(wù)的迅速崛起創(chuàng)造了對(duì)計(jì)算資源的巨大需求,而如何有效管理這些資源成為一項(xiàng)關(guān)鍵挑戰(zhàn)。雖然使用Kubernetes運(yùn)行人工智能工作負(fù)載已經(jīng)取得了長(zhǎng)足的進(jìn)步,但基于動(dòng)態(tài)需求優(yōu)化調(diào)度仍然是一個(gè)亟待改進(jìn)的領(lǐng)域。在全球范圍內(nèi),許多組織面臨與GPU集群的成本和可用性相關(guān)的限制,并且通常依賴于這些計(jì)算集群來進(jìn)行推理工作負(fù)載和持續(xù)的模型訓(xùn)練和微調(diào)。

Kubernetes中的人工智能模型訓(xùn)練和模型推理

與推理相比,訓(xùn)練通常需要更多的計(jì)算能力。另一方面,使用推理的頻率遠(yuǎn)高于訓(xùn)練,這是因?yàn)樗挥糜谠谠S多應(yīng)用程序中反復(fù)進(jìn)行預(yù)測(cè)。本文將探索如何利用Kubernetes的先進(jìn)功能,通過根據(jù)需要?jiǎng)討B(tài)高效地對(duì)工作負(fù)載進(jìn)行優(yōu)先級(jí)排序來優(yōu)化資源分配。

圖1展示了訓(xùn)練與推理的過程。對(duì)于人工智能模型的訓(xùn)練,工作負(fù)載運(yùn)行的頻率可能較低,但需要更多的計(jì)算資源,因?yàn)閷?shí)際上是在“教”它如何響應(yīng)新數(shù)據(jù)。一旦經(jīng)過訓(xùn)練,就會(huì)部署人工智能模型,并經(jīng)常在GPU計(jì)算實(shí)例上運(yùn)行,以提供低延遲的最佳結(jié)果。因此,推理將更頻繁地運(yùn)行,但強(qiáng)度不會(huì)那么大與此同時(shí),開發(fā)人員可能需要重新訓(xùn)練模型以容納新數(shù)據(jù),甚至嘗試使用其他需要在部署前進(jìn)行訓(xùn)練的模型。

圖1 人工智能模型訓(xùn)練vs. 人工智能模型推理圖1 人工智能模型訓(xùn)練vs. 人工智能模型推理

人工智能工作負(fù)載與高性能計(jì)算(HPC)工作負(fù)載類似,尤其是在訓(xùn)練方面。Kubernetes并不是為HPC設(shè)計(jì)的,但是由于Kubernetes是開源的,并且很大程度上是由社區(qū)推動(dòng)的,因此在這個(gè)領(lǐng)域出現(xiàn)了快速的創(chuàng)新。而對(duì)優(yōu)化的需求推動(dòng)了KubeFlow和Kueue等工具的開發(fā)。

Kubernetes的人工智能工作負(fù)載

KubeFlow使用管道將數(shù)據(jù)科學(xué)中的步驟簡(jiǎn)化為邏輯操作塊,并提供了許多可以插入這些步驟的庫,從而幫助開發(fā)人員快速上手并順利運(yùn)行。

Kueue提供了多種資源“風(fēng)格”,使其能夠根據(jù)當(dāng)時(shí)可用的硬件配置定制工作負(fù)載,并相應(yīng)地調(diào)度相應(yīng)的工作負(fù)載(當(dāng)然,其功能遠(yuǎn)不止于此)。社區(qū)在這些工具及其他工具方面出色地解決了擴(kuò)展、效率、分發(fā)和調(diào)度等問題。

以下是一個(gè)示例,展示了如何使用Kubernetes在支持遠(yuǎn)程直接內(nèi)存訪問RDMA (RoCEv2)的GPU集群上調(diào)度和優(yōu)先考慮訓(xùn)練和推理任務(wù)。創(chuàng)建一些示例代碼來演示這個(gè)概念。注:在代碼中,使用了虛構(gòu)的網(wǎng)站gpuconfig.com表示GPU制造商。此外,<gpu name>是希望指定的特定GPU的占位符。

Shell 
 apiVersion: scheduling.k8s.io/v1

 kind: PriorityClass

 metadata:

 name: high-priority-<gpu name>

 value: 1000000

 globalDefault: false

 description: "This priority class should be used for high priority <GPU NAME> GPU jobs only."

 ---

 apiVersion: scheduling.k8s.io/v1

 kind: PriorityClass

 metadata:

 name: medium-priority-<gpu name>

 value: 100000

 globalDefault: false

 description: "This priority class should be used for medium priority <GPU NAME> GPU jobs."

 ---

 apiVersion: v1

 kind: Pod

 metadata:

 name: high-priority-gpu-job

 spec:

 priorityClassName: high-priority-<gpu name>

 containers:

 - name: gpu-container

 image: gpu/<gpu image>

 command: [" <gpu vendor>-smi"]

 resources:

 limits:

 gpuconfig.com/gpu: 1

 nodeSelector:

 gpu-type: <gpu name>

 rdma: "true"

---

 apiVersion: v1

 kind: Pod

 metadata:

 name: medium-priority-gpu-job

 spec:

 priorityClassName: medium-priority-<gpu name>

 containers:

 - name: gpu-container

 image: gpu/<gpu image>

 command: [" <gpu vendor>-smi"]

 resources:

 limits:

 gpuconfig.com/gpu: 1

 nodeSelector:

 gpu-type: <gpu name>

 rdma: "true"

這個(gè)Kubernetes配置演示了如何使用RDMA主干網(wǎng)對(duì)GPU節(jié)點(diǎn)上的作業(yè)進(jìn)行優(yōu)先級(jí)排序。以下分解其中的關(guān)鍵組件:

1. PriorityClasses:為GPU的任務(wù)定義了兩個(gè)優(yōu)先級(jí)類:

  • high-priority-<gpu name>:用于需要立即執(zhí)行的關(guān)鍵任務(wù)。
  • medium-priority-<gpu name>:用于重要但必要時(shí)可以等待的任務(wù)。

2. Pod規(guī)范:創(chuàng)建了兩個(gè)示例Pod來展示如何使用這些優(yōu)先級(jí)類:

  • high-priority-gpu-job:使用high-priority-<gpu name>類。
  • medium-priority-gpu-job:使用medium-priority-<gpu name>類。

3.節(jié)點(diǎn)選擇:兩個(gè)pod都使用nodeSelector來確保它們被調(diào)度到具有RDMA的特定GPU節(jié)點(diǎn)上。

Shell 
 nodeSelector:

 gpu-type: <gpu name>

 rdma: "true"

4.資源請(qǐng)求:每個(gè)pod請(qǐng)求一個(gè)GPU:

Shell 
 resources:

 limits:

 gpuconfig.com/gpu: 1

Kubernetes使用優(yōu)先級(jí)類別來決定Pod的調(diào)度順序,以及在系統(tǒng)資源緊張時(shí)決定哪些Pod應(yīng)被優(yōu)先移除。以下是一個(gè)使用高優(yōu)先級(jí)類別創(chuàng)建CronJob的示例:

Shell 
 apiVersion: batch/v1beta1

 kind: CronJob

 metadata:

 name: high-priority-ml-training

 spec:

 schedule: "0 2 * * *"

 jobTemplate:

 spec:

 template:

 metadata:

 name: ml-training-job

 spec:

 priorityClassName: high-priority-<gpu name>

 containers:

 - name: ml-training

 image: your-ml-image:latest

 resources:

 limits:

 gpuconfig.com/gpu: 2

 restartPolicy: OnFailure

 nodeSelector:

 gpu-type: <gpu name>

 rdma: "true"

Kubernetes中的GPU資源管理

以下是Kubernetes中GPU資源管理的一些示例。

Shell 
 

 apiVersion: v1

 kind: ResourceQuota

 metadata:

 name: gpu-quota

 namespace: ml-workloads

 spec:

 hard:

 requests.gpuconfig.com/gpu: 8

 limits.gpuconfig.com/gpu: 8

 ---

 apiVersion: v1

 kind: LimitRange

 metadata:

 name: gpu-limits

 namespace: ml-workloads

 spec:

 limits:

 - default:

 gpuconfig.com/gpu: 1

 defaultRequest:

 gpuconfig.com/gpu: 1

 max:

 gpuconfig.com/gpu: 4

 min:

 gpuconfig.com/gpu: 1

 type: Container

 ---

 apiVersion: scheduling.k8s.io/v1

 kind: PriorityClass

 metadata:

 name: gpu-burst

 value: 1000000

 globalDefault: false

 description: "This priority class allows for burst GPU usage, but may be preempted."

 ---

 apiVersion: v1

 kind: Pod

 metadata:

 name: gpu-burst-job

 namespace: ml-workloads

 spec:

 priorityClassName: gpu-burst

 containers:

 - name: gpu-job

 image: gpu/<gpu image>

 command: [" <gpu vendor>-smi"]

 resources:

 limits:

 gpuconfig.com/gpu: 2

 nodeSelector:

 gpu-type: <gpu name>

在過去,了解硬件的當(dāng)前狀態(tài)以確定工作負(fù)載的優(yōu)先級(jí)可能是一項(xiàng)挑戰(zhàn),但得益于開源工具,現(xiàn)在已經(jīng)有了解決方案。為了監(jiān)控GPU利用率,采用了諸如Prometheus和Grafana等工具。以下是一個(gè)用于抓取GPU指標(biāo)的Prometheus配置示例:

Shell 
 global:

 scrape_interval: 15s

 

 scrape_configs:

 - job_name: 'gpu_gpu_exporter'

 static_configs:

 - targets: ['localhost:9835']

以下是一個(gè)簡(jiǎn)單的Python腳本,使用它來根據(jù)利用率指標(biāo)優(yōu)化GPU分配:

Python 
 import kubernetes

 from prometheus_api_client import PrometheusConnect

 

 def get_gpu_utilization(prometheus_url, pod_name):

 prom = PrometheusConnect(url=prometheus_url, disable_ssl=True)

 query = f'gpu_gpu_utilization{{pod="{pod_name}"}}'

 result = prom.custom_query(query)

 return float(result[0]['value'][1]) if result else 0

 

  def optimize_gpu_allocation():

 kubernetes.config.load_kube_config()

 v1 = kubernetes.client.CoreV1Api()

 

 pods = v1.list_pod_for_all_namespaces(label_selector='gpu=true').items

 for pod in pods:

 utilization = get_gpu_utilization('http://prometheus:9090', pod.metadata.name)

 if utilization < 30: # If GPU utilization is less than 30%

 # Reduce GPU allocation

 patch = {

 "spec": {

 "containers": [{

 "name": pod.spec.containers[0].name,

 "resources": {

 "limits": {

 "gpuconfig.com/gpu": "1"

 }

 }

 }]

 }

 }

 v1.patch_namespaced_pod(name=pod.metadata.name, namespace=pod.metadata.namespace, body=patch)

 print(f"Reduced GPU allocation for pod {pod.metadata.name}")



 if __name__ == "__main__":

 optimize_gpu_allocation()

腳本用于檢查Pod的GPU利用率,并在利用率較低時(shí)減少資源分配。該腳本作為優(yōu)化資源使用的一項(xiàng)功能運(yùn)行。

利用Kubernetes管理GPU和CPU資源

因此,利用Kubernetes和OCI Kubernetes引擎(OKE)在人工智能模型的訓(xùn)練和推理工作負(fù)載中動(dòng)態(tài)管理GPU和CPU資源。具體來說,專注于利用RDMA(RoCEv2)功能調(diào)整GPU分配的大小。開發(fā)人員開發(fā)了Kubernetes配置、Helm圖,包括自定義優(yōu)先級(jí)類、節(jié)點(diǎn)選擇器和資源配額,以確保高優(yōu)先級(jí)和中優(yōu)先級(jí)人工智能任務(wù)的最佳調(diào)度和資源優(yōu)先級(jí)。

通過利用Kubernetes的靈活性和OKE在Oracle Cloud Infrastructure(OCI)上的管理能力,平衡了訓(xùn)練的繁重計(jì)算需求和推理的較輕計(jì)算需求。這確保了資源的動(dòng)態(tài)分配,減少了資源浪費(fèi),同時(shí)保持了關(guān)鍵任務(wù)的高性能。此外,還集成了Prometheus等監(jiān)控工具以跟蹤GPU利用率,并使用Python腳本自動(dòng)調(diào)整分配。這種自動(dòng)化有助于優(yōu)化性能,同時(shí)管理成本和可用性。

結(jié)語

在這里概述的解決方案普遍適用于使用Kubernetes進(jìn)行AI/ML工作負(fù)載的云平臺(tái)和內(nèi)部部署平臺(tái)。而無論是硬件還是任何其他計(jì)算平臺(tái),使用Kubernetes進(jìn)行動(dòng)態(tài)調(diào)度和資源管理的關(guān)鍵原則都是相同的。Kubernetes允許組織有效地對(duì)工作負(fù)載進(jìn)行優(yōu)先級(jí)排序,優(yōu)化他們對(duì)任何可用硬件資源的使用。通過采用相同的方法,組織可以微調(diào)其基礎(chǔ)設(shè)施,減少瓶頸,降低資源閑置率,從而實(shí)現(xiàn)更高效、更具成本效益的運(yùn)營(yíng)。

原文標(biāo)題:Right-Sizing GPU and CPU Resources For Training and Inferencing Using Kubernetes,作者:Sanjay Basu,Victor Agreda

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2023-01-05 09:33:37

視覺模型訓(xùn)練

2022-03-24 08:04:50

Kubernetes資源限制

2024-09-19 18:49:54

完全同態(tài)加密FHE機(jī)器學(xué)習(xí)

2024-03-20 11:07:57

AI計(jì)算CPUGPU

2024-03-26 00:10:08

預(yù)測(cè)AI泛化

2023-05-12 18:42:13

得物AI平臺(tái)

2024-07-26 08:59:33

2020-05-29 15:40:40

NVIDIA

2025-01-09 08:01:10

2025-02-07 14:04:44

2025-03-05 00:22:00

2024-07-25 08:25:35

2024-02-19 00:21:45

開源圖片

2017-11-01 15:13:49

TensorFlow神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2024-06-12 09:52:49

2025-05-14 08:16:46

?Redis機(jī)器學(xué)習(xí)推薦模型

2024-09-29 10:56:58

2018-12-24 10:53:48

2025-04-01 09:54:09

AI算法大模型AI

2017-06-23 14:11:56

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)