? Leave a star to support the project! ?
在多個用戶之間共享高階 GPU 甚至產消者和消費者 GPU 是加速 AI 開發的最具成本效益的方式。不幸的是,到目前為止,唯一適用於 MIG/Slicing 高階 GPU (A100+) 和所需 Kubernetes 的現有解決方案,
?歡迎使用適用於任何 Nvidia 卡的基於容器的分數 GPU! ?
我們提供支援 CUDA 11.x 和 CUDA 12.x 的預先包裝容器,並具有預先建置的硬記憶體限制!這意味著可以在同一 GPU 上啟動多個容器,確保一個使用者無法分配整個主機 GPU 記憶體! (不再有貪婪的進程搶佔整個 GPU 記憶體!最後我們有一個驅動程式層級的硬限制記憶體選項)。
ClearML 提供了多種選項來透過對 GPU 進行分割來優化 GPU 資源利用率:
借助這些選項,ClearML 能夠以優化的硬體利用率和工作負載效能來運行 AI 工作負載。此儲存庫涵蓋基於容器的分數 GPU。有關 ClearML 的部分 GPU 產品的更多信息,請參閱 ClearML 文件。
選擇適合您的容器並啟動它:
docker run -it --gpus 0 --ipc=host --pid=host clearml/fractional-gpu:u22-cu12.3-8gb bash
若要驗證分數 GPU 記憶體限制是否正常運作,請在容器內執行:
nvidia-smi
以下是 A100 GPU 的輸出範例:
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.08 Driver Version: 545.23.08 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 A100-PCIE-40GB Off | 00000000:01:00.0 Off | N/A |
| 32% 33C P0 66W / 250W | 0MiB / 8128MiB | 3% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
+---------------------------------------------------------------------------------------+
記憶體限制 | CUDA版本 | Ubuntu版本 | Docker 映像 |
---|---|---|---|
12GiB | 12.3 | 22.04 | clearml/fractional-gpu:u22-cu12.3-12gb |
12GiB | 12.3 | 20.04 | clearml/fractional-gpu:u20-cu12.3-12gb |
12GiB | 11.7 | 22.04 | clearml/fractional-gpu:u22-cu11.7-12gb |
12GiB | 11.1 | 20.04 | clearml/fractional-gpu:u20-cu11.1-12gb |
8GiB | 12.3 | 22.04 | clearml/fractional-gpu:u22-cu12.3-8gb |
8GiB | 12.3 | 20.04 | clearml/fractional-gpu:u20-cu12.3-8gb |
8GiB | 11.7 | 22.04 | clearml/fractional-gpu:u22-cu11.7-8gb |
8GiB | 11.1 | 20.04 | clearml/fractional-gpu:u20-cu11.1-8gb |
4GiB | 12.3 | 22.04 | clearml/fractional-gpu:u22-cu12.3-4gb |
4GiB | 12.3 | 20.04 | clearml/fractional-gpu:u20-cu12.3-4gb |
4GiB | 11.7 | 22.04 | clearml/fractional-gpu:u22-cu11.7-4gb |
4GiB | 11.1 | 20.04 | clearml/fractional-gpu:u20-cu11.1-4gb |
2GiB | 12.3 | 22.04 | clearml/fractional-gpu:u22-cu12.3-2gb |
2GiB | 12.3 | 20.04 | clearml/fractional-gpu:u20-cu12.3-2gb |
2GiB | 11.7 | 22.04 | clearml/fractional-gpu:u22-cu11.7-2gb |
2GiB | 11.1 | 20.04 | clearml/fractional-gpu:u20-cu11.1-2gb |
重要的
您必須使用--pid=host
執行容器!
筆記
--pid=host
需要允許驅動程式在限制記憶體/利用率使用時區分容器進程和其他主機進程
提示
ClearML-Agent 使用者將[--pid=host]
新增至設定檔中的agent.extra_docker_arguments
部分
建立您自己的容器並繼承原始容器。
您可以在這裡找到一些範例。
部分 GPU 容器可用於裸機執行以及 Kubernetes POD。是的!透過使用 Fractional GPU 容器之一,您可以限制 Job/Pod 的記憶體消耗,並輕鬆共享 GPU,而不必擔心它們會互相記憶體崩潰!
這是一個簡單的 Kubernetes POD 範本:
apiVersion : v1
kind : Pod
metadata :
name : train-pod
labels :
app : trainme
spec :
hostPID : true
containers :
- name : train-container
image : clearml/fractional-gpu:u22-cu12.3-8gb
command : ['python3', '-c', 'print(f"Free GPU Memory: (free, global) {torch.cuda.mem_get_info()}")']
重要的
您必須使用hostPID: true
來執行 pod!
筆記
hostPID: true
才能允許驅動程式在限制記憶體/使用率使用時區分 Pod 進程和其他主機進程
容器支援 Nvidia 驅動程式 <= 545.xx
。隨著新驅動程式的不斷發布,我們將不斷更新和支援它們
支援的 GPU :RTX 系列 10、20、30、40、A 系列和資料中心 P100、A100、A10/A40、L40/s、H100
限制:目前不支援 Windows 主機。如果這對您很重要,請在問題部分留下請求
Q :在容器內執行nvidia-smi
會報告本地進程的 GPU 消耗嗎?
答:是的, nvidia-smi
直接與低階驅動程式通信,並報告準確的容器 GPU 記憶體以及容器本地記憶體限制。
請注意,GPU 使用率將是全域(即主機端)GPU 使用率,而不是特定的本機容器 GPU 利用率。
Q :如何確保我的 Python / Pytorch / Tensorflow 實際上受到記憶體限制?
答:對於 PyTorch,您可以執行:
import torch
print ( f'Free GPU Memory: (free, global) { torch . cuda . mem_get_info () } ' )
努巴範例:
from numba import cuda
print ( f'Free GPU Memory: { cuda . current_context (). get_memory_info () } ' )
Q : 使用者可以突破這個限制嗎?
答:我們確信惡意使用者會找到方法。我們從來沒有打算防範惡意用戶。
如果您的惡意使用者可以存取您的機器,那麼分數 GPU 不是您的第一大問題嗎?
Q :如何以程式設計方式檢測記憶體限制?
答:您可以檢查作業系統環境變數GPU_MEM_LIMIT_GB
。
請注意,更改它不會消除或減少限制。
Q :使用--pid=host
運行容器是否安全?
答:它應該既安全又安全。從安全角度來看,主要的警告是容器進程可以看到主機系統上執行的任何命令列。如果進程命令行包含“秘密”,那麼是的,這可能會成為潛在的資料外洩。請注意,在命令列中傳遞「秘密」是不明智的,因此我們不認為這是安全風險。也就是說,如果安全性是關鍵,那麼企業版(見下文)消除了使用pid-host
運行的需要,從而完全安全。
Q :您可以在沒有--pid=host
情況下運行容器嗎?
答:可以!但是您必須使用企業版的clearml-fractional-gpu 容器(否則記憶體限制將套用至系統範圍而不是容器範圍)。如果此功能對您很重要,請聯絡 ClearML 銷售和支援。
使用 ClearML 的許可僅用於研究或開發目的。 ClearML 可用於教育、個人或內部商業用途。
可在產品或服務中使用的擴充商業授權作為 ClearML Scale 或 Enterprise 解決方案的一部分提供。
ClearML 提供企業和商業許可證,在部分 GPU 之上添加許多附加功能,其中包括編排、優先順序佇列、配額管理、運算叢集儀表板、資料集管理和實驗管理,以及企業級安全性和支援。了解更多關於 ClearML Orchestration 的資訊或直接與 ClearML 銷售人員聯繫。
告訴大家吧! #ClearMLFractionalGPU
加入我們的 Slack 頻道
當出現問題時告訴我們,並幫助我們在問題頁面上進行調試
該產品由 ClearML 團隊為您帶來❤️