使用Kubernetes進(jìn)行AI推理的五個(gè)理由
Kubernetes 的關(guān)鍵特性如何自然地滿足 AI 推理的需求,以及它們?nèi)绾问雇评砉ぷ髫?fù)載受益。
譯自5 Reasons To Use Kubernetes for AI Inference,作者 Zulyar Ilakhunov。
Kubernetes的許多關(guān)鍵特性自然適合 AI 推理的需求,無論是 AI 驅(qū)動(dòng)的微服務(wù)還是 ML 模型,幾乎像是專門為這個(gè)目的而設(shè)計(jì)的。讓我們來看看這些特性以及它們?nèi)绾问雇评砉ぷ髫?fù)載受益。
1. 可擴(kuò)展性
AI 驅(qū)動(dòng)的應(yīng)用程序和 ML 模型的可擴(kuò)展性確保它們能夠處理所需的負(fù)載,例如并發(fā)用戶請求的數(shù)量。Kubernetes 有三種原生自動(dòng)擴(kuò)展機(jī)制,每種機(jī)制都對可擴(kuò)展性有益:水平 Pod 自動(dòng)擴(kuò)展器 (HPA)、垂直 Pod 自動(dòng)擴(kuò)展器 (VPA) 和集群自動(dòng)擴(kuò)展器 (CA)。
- 水平 Pod Autoscaler根據(jù)各種指標(biāo)(例如 CPU、GPU 和內(nèi)存利用率)擴(kuò)展運(yùn)行應(yīng)用程序或 ML 模型的 Pod 數(shù)量。當(dāng)需求增加時(shí),例如用戶請求激增,HPA 會(huì)向上擴(kuò)展資源。當(dāng)負(fù)載減少時(shí),HPA 會(huì)向下擴(kuò)展資源。
- 垂直 Pod Autoscaler根據(jù) Pod 的實(shí)際使用情況調(diào)整 Pod 中容器的 CPU、GPU 和內(nèi)存需求和限制。通過更改 Pod 規(guī)范中的limits,您可以控制 Pod 可以接收的特定資源量。它對于最大化節(jié)點(diǎn)上每個(gè)可用資源的利用率很有用。
- 集群 Autoscaler調(diào)整整個(gè)集群中可用的計(jì)算資源池,以滿足工作負(fù)載需求。它根據(jù) Pod 的資源需求動(dòng)態(tài)地向集群添加或刪除工作節(jié)點(diǎn)。這就是為什么 CA 對推理具有龐大用戶群的大型 ML 模型至關(guān)重要。
以下是 K8s 可擴(kuò)展性對 AI 推理的主要益處:
- 通過根據(jù)需要自動(dòng)向上和向下擴(kuò)展 Pod 副本數(shù)量,確保 AI 工作負(fù)載的高可用性
- 通過根據(jù)需要自動(dòng)調(diào)整集群大小來支持產(chǎn)品增長
- 根據(jù)應(yīng)用程序的實(shí)際需求優(yōu)化資源利用率,從而確保您只為 Pod 使用的資源付費(fèi)
2. 資源優(yōu)化
通過徹底優(yōu)化推理工作負(fù)載的資源利用率,您可以為它們提供適當(dāng)數(shù)量的資源。這可以為您節(jié)省資金,這在租用通常昂貴的 GPU 時(shí)尤其重要。允許您優(yōu)化推理工作負(fù)載的資源使用的關(guān)鍵 Kubernetes 特性是高效的資源分配、對limits和requests的詳細(xì)控制以及自動(dòng)擴(kuò)展。
- 高效的資源分配: 您可以通過在 Pod 清單中指定來為 Pod 分配特定數(shù)量的 GPU、CPU 和 RAM。但是,目前只有 NVIDIA 加速器支持 GPU 的時(shí)間切片和多實(shí)例分區(qū)。如果您使用 Intel 或 AMD 加速器,Pod 只能請求整個(gè) GPU。
- 對資源“l(fā)imits”和“requests”的詳細(xì)控制:requests定義容器所需的最小資源,而limits阻止容器使用超過指定資源的資源。這提供了對計(jì)算資源的細(xì)粒度控制。
- 自動(dòng)擴(kuò)展: HPA、VPA 和 CA 可以防止浪費(fèi)閑置資源。如果您正確配置這些功能,您將不會(huì)有任何閑置資源。
借助這些 Kubernetes 功能,您的工作負(fù)載將獲得所需的計(jì)算能力,不多不少。由于在云中租用中檔 GPU 的成本可能在每小時(shí) 1 美元到 2 美元之間,因此從長遠(yuǎn)來看,您可以節(jié)省大量資金。
3. 性能優(yōu)化
雖然 AI 推理通常比訓(xùn)練資源密集度低,但它仍然需要 GPU 和其他計(jì)算資源才能高效運(yùn)行。HPA、VPA 和 CA 是 Kubernetes 能夠提高推理性能的關(guān)鍵貢獻(xiàn)者。它們確保即使負(fù)載發(fā)生變化,也能為 AI 驅(qū)動(dòng)的應(yīng)用程序分配最佳資源。但是,您可以使用其他工具來幫助您控制和預(yù)測 AI 工作負(fù)載的性能,例如StormForge或Magalix Agent。
總的來說,Kubernetes 的彈性和微調(diào)資源使用能力使您能夠?yàn)?AI 應(yīng)用程序?qū)崿F(xiàn)最佳性能,無論其大小和負(fù)載如何。
4. 可移植性
對于 AI 工作負(fù)載(例如 ML 模型)來說,可移植性至關(guān)重要。這使您能夠在不同環(huán)境中一致地運(yùn)行它們,而無需擔(dān)心基礎(chǔ)設(shè)施差異,從而節(jié)省時(shí)間和資金。Kubernetes 主要通過兩個(gè)內(nèi)置功能實(shí)現(xiàn)可移植性:容器化和與任何環(huán)境的兼容性。
- 容器化: Kubernetes 使用容器化技術(shù)(如 containerd 和 Docker)將 ML 模型和 AI 驅(qū)動(dòng)的應(yīng)用程序與其依賴項(xiàng)一起打包到可移植容器中。然后,您可以在任何集群、任何環(huán)境中甚至使用其他容器編排工具使用這些容器。
- 支持多云和混合環(huán)境: Kubernetes 集群可以分布在多個(gè)環(huán)境中,包括公有云、私有云和本地基礎(chǔ)設(shè)施。這為您提供了靈活性并減少了供應(yīng)商鎖定。
以下是 K8s 可移植性的主要優(yōu)勢:
- 在不同環(huán)境中一致的 ML 模型部署
- 更輕松地遷移和更新 AI 工作負(fù)載
- 選擇云提供商或本地基礎(chǔ)設(shè)施的靈活性
在運(yùn)行 AI 推理時(shí),基礎(chǔ)設(shè)施故障和停機(jī)可能會(huì)導(dǎo)致顯著的精度下降、不可預(yù)測的模型行為或僅僅是服務(wù)中斷。對于許多 AI 驅(qū)動(dòng)的應(yīng)用程序來說,這是不可接受的,包括安全關(guān)鍵型應(yīng)用程序,例如機(jī)器人、自動(dòng)駕駛和醫(yī)療分析。Kubernetes 的自我修復(fù)和容錯(cuò)功能有助于防止這些問題。
- Pod 級和節(jié)點(diǎn)級容錯(cuò): 如果 Pod 出現(xiàn)故障或沒有響應(yīng),Kubernetes 會(huì)自動(dòng)檢測問題并重新啟動(dòng) Pod。這確保了應(yīng)用程序保持可用和響應(yīng)。如果運(yùn)行 Pod 的節(jié)點(diǎn)出現(xiàn)故障,Kubernetes 會(huì)自動(dòng)將 Pod 調(diào)度到健康的節(jié)點(diǎn)。
- 滾動(dòng)更新: Kubernetes 支持滾動(dòng)更新,因此您可以以最小的停機(jī)時(shí)間更新容器鏡像。這使您能夠快速部署錯(cuò)誤修復(fù)或模型更新,而不會(huì)中斷正在運(yùn)行的推理服務(wù)。
- 就緒性和存活性探測: 這些探測是健康檢查,用于檢測容器何時(shí)無法接收流量或變得不健康,并在必要時(shí)觸發(fā)重新啟動(dòng)或替換。
- 集群自我修復(fù): K8s 可以自動(dòng)修復(fù)控制平面和工作節(jié)點(diǎn)問題,例如替換故障節(jié)點(diǎn)或重新啟動(dòng)不健康的組件。這有助于維護(hù)運(yùn)行 AI 推理的集群的整體健康狀況和可用性。
以下是 K8s 容錯(cuò)的主要優(yōu)勢:
- 通過保持 AI 驅(qū)動(dòng)的應(yīng)用程序高度可用和響應(yīng),提高了應(yīng)用程序的彈性
- 出現(xiàn)問題時(shí)停機(jī)時(shí)間和中斷最小
- 通過使應(yīng)用程序和模型高度可用并更能抵御意外的基礎(chǔ)設(shè)施故障,提高了用戶滿意度
結(jié)論
隨著組織繼續(xù)將 AI 整合到其應(yīng)用程序中,使用大型 ML 模型并面臨動(dòng)態(tài)負(fù)載,采用 Kubernetes 作為基礎(chǔ)技術(shù)至關(guān)重要。作為托管 Kubernetes 提供商,我們看到了對可擴(kuò)展、容錯(cuò)且經(jīng)濟(jì)高效的基礎(chǔ)設(shè)施的需求不斷增長,這種基礎(chǔ)設(shè)施可以處理AI 推理規(guī)模。Kubernetes 是一個(gè)原生提供所有這些功能的工具。