求求了,別再讓你的 GPU 公開“摸魚”了!

先看幾個令人心動又讓錢包一緊的 GPU 型號:NVIDIA A100 80GB、H800 80GB、RTX 4090 24GB...

這些 AI 時代的“超級馬力”,無論我們是砸錢買斷,還是花高價租用,都只能整塊拿下??沙四P陀柧?,更多時候只是用來跑推理、開發/測試環境,幾十上百 GB 的顯存真的全能派上用場嗎?多數情況下,你的 GPU 算力其實都在“摸魚”,利用率可能連 20% 都不到。
在算力就是鈔票的 AI 時代,GPU 閑置哪是“摸魚”,這分明是“撒幣”行為。
- 如果你是 AI 團隊的 Leader,一邊要交代高昂算力開銷,一邊還要安撫抱怨“GPU 不夠、流程太慢”的團隊成員,是不是早已身心俱疲?
- 如果你是 MLOps 或平臺工程師,每天盯著 GPU 集群利用率長期低于 20%,還得處理各種“搶資源”工單,是不是覺得自己的技術沒用在刀刃上?
- 如果你是 AI 算法工程師,只是想跑個預處理、驗證模型、調試代碼,卻要為一張被“霸占”卻沒被用滿的 A100/H800 排隊數小時,靈感都快被磨光了吧?
別急,今天的主角——HAMi,就是你的“開源解藥”!

GitHub 地址:github.com/Project-HAMi/HAMi
簡單來說,HAMi 是由上海密瓜智能發起的,面向 K8s 的異構 AI 計算虛擬化中間件。它的核心能力,就是像切蛋糕一樣,把一整塊物理 GPU 靈活切分為多塊虛擬 GPU(vGPU),并按需分配給不同業務(Pod),實現算力的精細化共享與隔離。
最關鍵的是,你的 AI 應用代碼,一行都不用改!
一、GPU 共享的兩個“陷阱”,為何需要 HAMi?
要理解 HAMi 的價值,我們首先要明白一塊 GPU 包含了兩種核心資源:顯存 (Memory) 和計算核心 (Compute Cores)。在沒有管理機制的“原生共享”模式下,這兩種資源都會陷入困境:
- 顯存的“獨占性”(OOM 問題):GPU 顯存是一個“硬性資源”。一個程序啟動時,必須先申請到足夠的顯存空間來加載模型和數據。在原生共享模式下,這就是一場“先到先得”的游戲。
- 算力的“混沌競爭”(性能問題):即便多個任務都成功擠進了顯存,它們接下來也要爭搶有限的算力核心。這就像一場沒有規則的“大亂斗”。一個計算密集型任務可能會在某個瞬間霸占幾乎所有的計算資源,導致其他任務被“餓死”,響應變得極慢。
面對以上兩個陷阱,HAMi 提供了精準且優雅的解決方案。它能同時對顯存和算力進行精細化切分和管理:
對于顯存:實現“硬性隔離”
HAMi 會為每個任務劃分出一段完全獨立的、大小固定的虛擬顯存空間。每個任務只能在自己的“包間”里活動,徹底杜絕了因某個任務過度占用而導致其他任務無法啟動的 OOM 問題。
對于算力:實現按比例分配
HAMi 允許你為每個任務分配特定比例的算力(例如,為 A 任務(pod)分配 30% 的算力,B 任務 50%)。確保每個任務都能獲得其應有的計算資源,從而保障性能的穩定和可預期,告別“性能抖動”。
總結一下,HAMi 可以將 GPU 從一個混亂、不可預測的“公共資源”,轉變為多個獨立、穩定、可度量的“私有資源”,這就是它實現 GPU 高效利用的核心所在。
搞懂了這一點,我們再來看 HAMi 在 K8s 里的操作,你就會覺得豁然開朗。
二、三步搞定,簡單到不像話!
在我們熟悉的 K8s 環境里,GPU 一直是個“倔強的老頑固”——一個 Pod 就得獨占一整張卡,申請 GPU 資源也只能按“卡”來。
但 HAMi 的出現,徹底改變了這一游戲規則。

有了 HAMi,你可以像點菜一樣,隨心為 AI 應用選配告別 GPU 資源浪費,比如「1GB 顯存、30% 算力」。
別看功能這么牛,但安裝 HAMi 卻超級簡單。它就像 K8s 的即插即用擴展包,用 Helm 工具三條命令搞定:
# 1. 先給你有 GPU 的機器打個標簽,讓 HAMi 認識它
kubectl label nodes {nodeid} gpu=on
# 2. 添加 HAMi 的官方“菜單”
helm repo add hami-charts https://project-hami.github.io/HAMi/
# 3. 下單安裝!
helm install hami hami-charts/hami -n kube-system
搞定!看到 hami-device-plugin 和 hami-scheduler 這兩個 Pod 都正常地 Running 起來,就說明你已經成功化身“GPU 管理大師”了。
以后,你就可以用下面的配置,為你的 AI 應用輕松+愉快地申請任意大小的 vGPU 了。
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: 1024 # 每個 vGPU 包含 1024MB 設備內存
nvidia.com/gpucores: 30 # 每個 vGPU 分配 30% 的計算核心
此外,官方還貼心地準備了可視化界面 HAMi-WebUI,讓摸魚的 GPU 無所遁形!

三、揭秘 HAMi 技術核心,個人開發者也能玩轉!
你肯定好奇,HAMi 到底用了什么黑科技,竟然能瞞天過海,“騙”過 CUDA,讓程序覺得自己擁有一整塊 GPU?
答案全在它的核心武器:HAMi-core。
這玩意兒的原理,說白了,就是“欺上瞞下”的高級玩法。
3.1 HAMi 核心原理
HAMi-core 本質上是一個實現了 CUDA API Hook(鉤子)的動態鏈接庫 (libvgpu.so)。它的工作原理非常巧妙,也十分經典:

如上圖所示,它通過 LD_PRELOAD 環境變量,在你的應用程序和真正的 CUDA 驅動之間“插入”了自己。當你的程序調用一個 CUDA API(比如申請顯存)時,HAMi-core 會先“劫持”這個請求,然后根據你設置的限制(比如 2GB 顯存)進行判斷和管理,最后再把一個“修改過”的請求或者一個“虛擬”的響應回傳給你的程序。
整個過程,你的程序和驅動都被蒙在鼓里,還以為對方是原裝的。就靠這手“瞞天過?!?,它輕松實現了顯存虛擬化、算力限制和用量監控。
3.2 本地體驗 GPU 虛擬化
這個設計的精髓在于,HAMi-core 完全可以脫離 K8s 單飛!這意味著,在你自己的電腦上,用 Docker 就能體驗到 GPU 精準分配的快樂!
這對于想在單張卡上模擬多環境測試的個人開發者來說,簡直太實用了!
假設你的顯卡是 12G,我們切個 2G 的 vGPU 出來玩玩。
第一步:構建包含 HAMi-core 的鏡像
# 在 HAMi-core 項目里,用官方 Dockerfile 構建一個新鏡像
docker build . -f=dockerfiles/Dockerfile -t cuda_vmem:tf1.8-cu90
第二步:準備 Docker 運行所需的環境變量
# 把英偉達驅動、工具啥的都準備好掛載進去
export DEVICE_MOUNTS="..."
export LIBRARY_MOUNTS="..."
第三步:運行容器并應用 vGPU 限制!
最關鍵的一步來了,通過環境變量“激活”我們的 GPU 管家:
docker run ${LIBRARY_MOUNTS} ${DEVICE_MOUNTS} -it \
-e CUDA_DEVICE_MEMORY_LIMIT=2g \
-e LD_PRELOAD=/libvgpu/build/libvgpu.so \
cuda_vmem:tf1.8-cu90
當你在容器里敲下 nvidia-smi 并回車,你會看到……

總顯存不多不少,正好是我們設定的 2048MB!在這個容器里,任何程序都休想突破這個“結界”。是不是泰酷辣!
四、為什么說 HAMi 是 AI 算力的“必選項”?
看到這里,你應該明白了,HAMi 代表了一種更聰明、更高效的算力利用方式。
-
降本增效,立竿見影:GPU 利用率大幅提升,讓本只能跑一個任務的顯卡,輕松承載更多任務,資源價值直接翻倍。
-
國產芯的“瑞士軍刀”:不止支持英偉達,HAMi 還兼容寒武紀、海光、昇騰等眾多國產 AI 芯片。在信創大潮下,戰略價值不言而喻。
-
出身名門,CNCF 認證:作為 CNCF 官方沙箱項目,HAMi 擁有云原生世界的“正統身份”,穩定性和社區支持有保障,選它更安心。
-
久經沙場,巨頭驗證:順豐、AWS 等國內外頭部企業都已在生產環境深度應用,早已證明 HAMi 不是“玩具”,是真正能打的“正規軍”。

五、最后
在 AI 大模型“軍備競賽”白熱化的今天,誰能把算力用得更精、更省,誰就掌握了未來的主動權。HAMi 正是為此而生的一把“瑞士軍刀”,它優雅、無感,卻能實實在在地幫你把錢花在刀刃上。
最后,別再讓你的 GPU 繼續摸魚了,給它上點強度吧!
- GitHub 地址:github.com/Project-HAMi/HAMi
- 社區動態:HAMi 2.7.0 重磅發布
開源不易,期待你的 Star 支持!
作者:削微寒
掃描左側的二維碼可以聯系到我

本作品采用署名-非商業性使用-禁止演繹 4.0 國際 進行許可。


浙公網安備 33010602011771號