CUDA 13.4 的 MPS V3 新增工作級 GPU 記憶體限制功能。記憶體配置若超過硬性上限,將以記憶體不足錯誤告終。
NVIDIA(NVIDIA,$NVDA)27 日在技術部落格公開如何將這項功能用於 Kubernetes 工作。做法是結合 CUDA 多進程服務 MPS V3 與 Linux cgroup,為各容器設定 GPU 記憶體使用範圍。
記憶體上限分為軟性上限與硬性上限。軟性上限是工作預期使用的記憶體目標,即使超過,配置仍可能成功;但實際發生記憶體競爭時,MPS 可能會將該工作驅逐或終止。
硬性上限則是記憶體配置的最高值。超過上限的配置會被視為記憶體不足錯誤。與軟性上限不同,硬性上限不允許超額使用。
在 Kubernetes 中,單靠安裝 CUDA 功能不會自動為工作分配 GPU。排程器仍須決定工作使用哪個 GPU、記憶體請求量,以及共享運算資源的方式。
開源 GPU Fractioning Operator 會將設定套用至 GPU 節點,並以 GPU 分割單位而非整張 GPU 為範圍,衡量記憶體與運算資源使用量。排程器負責分配 GPU 和選擇模式,Operator 則在節點上套用限制。
NVIDIA 表示,KAI Scheduler 是首個整合 GPU Fractioning 的排程器。KAI Scheduler 的變更紀錄顯示,9 月 23 日發布的 v0.18.0 新增了分割 GPU 記憶體請求與運算模式支援。
工作可以分別設定所需記憶體與最高使用上限。設定最高使用上限後,也能指定工作超出所請求記憶體後可使用的範圍。
運算資源共享分為時間切片與 SM 共享。時間切片讓多個工作輪流使用 GPU;SM 共享則讓多個工作同時使用 GPU 運算資源。
NVIDIA 說明,兩種方式的錯誤隔離程度不同。時間切片會隔離各工作的錯誤範圍,SM 共享則由工作共同使用錯誤範圍。排程器會避免兩種運算模式混用同一張 GPU。
既有的 GPU 共享方式 MIG 會以硬體單位切分 GPU。這次的記憶體分割功能則透過 MPS V3 設定各工作的記憶體邊界;NVIDIA 文件明確指出,MIG 裝置不支援這項功能。
使用環境也須符合要求。CUDA 13.4 的新功能需要 R615 或更新版本的驅動程式;記憶體分割則要求 Linux cgroup v2。
Kubernetes 叢集還須在 GPU 節點部署 Operator,並配置支援該功能的排程器。因此,僅有 CUDA 13.4 支援並不代表所有 GPU 與叢集都能立即使用相同功能。
NVIDIA 先前公開了以 Rust 撰寫 GPU 核心程式的途徑,這次則提出在單張 GPU 上配置多個工作時,管理記憶體與運算資源的功能。
留言 0