您可以在整個 GPU 記憶體或僅在記憶體的專用磁碟分割中執行應用程式。vSphere Bitfusion 可以使用單一 CLI 命令配置 GPU、執行應用程式,以及取消配置 GPU,或者您可以使用個別命令執行相同的工作。

如何執行應用程式

vSphere Bitfusion 用戶端可以在遠端共用 GPU 上執行人工智慧 (AI) 和機器學習 (ML) 應用程式。

可以使用 run 命令為單一應用程式配置 GPU。依預設,應用程式會在 GPU 的整個記憶體資源中執行。必須從單一 vSphere Bitfusion 伺服器配置使用 run 命令所請求的所有 GPU,並且該伺服器必須將 GPU 列為具有不同 PCIe 位址的單獨裝置。

run 命令執行以下三項工作。
  1. 從共用集區配置 GPU。
  2. 當應用程式進行 CUDA 呼叫時,在環境中啟動可存取 GPU 的應用程式。
  3. 當應用程式關閉時取消配置 GPU。
可以透過使用 run 命令以及表示 GPU 數目的必要 -n num_gpus 引數在 vSphere Bitfusion 中啟動應用程式。若要區分 vSphere Bitfusion 引數與應用程式,請使用雙連字號分隔符號或將應用程式置於引號內。
  • bitfusion run -n num_gpus other switches -- applications and arguments
  • bitfusion run -n num_gpus other switches "applications and arguments"

例如,AI 應用程式 asimov_i.py 需要兩個引數:GPU 數目和批次大小。

  • 如果應用程式預期具有 1 個 GPU,則執行 bitfusion run -n 1 -- python asimov_i.py --num_gpus=1 --batchsz=64
  • 如果應用程式預期具有 2 個 GPU,則執行 bitfusion run -n 2 -- python asimov_i.py --num_gpus=2 --batchsz=64

如何使用部分 GPU 執行應用程式

可以在 GPU 記憶體的專用磁碟分割中執行您的應用程式,而其他應用程式可以使用其餘的 GPU 記憶體。

GPU 磁碟分割引數是選用的 run 命令引數。可以使用引數在 GPU 記憶體的磁碟分割中執行應用程式。

  • GPU 磁碟分割程序是動態的。啟動具有部分引數的 run 命令時,vSphere Bitfusion 將在應用程式執行之前配置磁碟分割,之後再取消配置磁碟分割。
  • 同時共用 GPU 的應用程式透過使用單獨的用戶端程序、網路串流、伺服器程序和記憶體磁碟分割相互隔離。
  • vSphere Bitfusion 僅對 GPU 的記憶體進行磁碟分割,而不對計算資源進行。應用程式嚴格包含在指派的記憶體磁碟分割中,但如果需要,此應用程式可存取完整的計算資源。如果需要相同的計算儲存格,應用程式會爭用計算資源。,否則應用程式會同時執行。

磁碟分割大小可以 MB 為單位指定,或指定為 GPU 記憶體總計的一部分。

按多個部分對 GPU 記憶體大小進行磁碟分割 (數字 > 0.0 且 <= 1.0,例如 0.37)

bitfusion run -n num_gpus -p gpu_fraction -- applications and arguments

以 MB 為單位對 GPU 記憶體大小進行磁碟分割

bitfusion run -n num_gpus -p MBs_per_gpu -- applications and arguments

GPU 磁碟分割範例

與單一應用程式相比,多個並行應用程式可能會更高效地使用 GPU 的計算容量。您可以使用多種方式對 GPU 的記憶體進行磁碟分割。

如果使用的推理應用程式具有較小的模型大小或小批次的工作 (例如映像數目),則可以在已進行磁碟分割的 GPU 上同時執行這些應用程式。

可以執行實證測試以瞭解應用程式所需的記憶體大小。某些應用程式會展開以使用所有可用的記憶體,但在超過特定臨界值的情況下可能無法獲得更佳效能。

下列範例假設您瞭解不同批次大小的可接受記憶體需求。

  • 如果預期批次大小為 64 的應用程式需要不超過 66% 的 GPU 記憶體,請執行 bitfusion run -n 1 -p 0.66 -- python asimov_i.py --num_gpus=1 --batchsz=64
  • 如果預期批次大小為 32 的應用程式需要不超過 5461 MB 的 GPU 記憶體,請執行 bitfusion run -n 1 -m 5461 -- python asimov_i.py --num_gpus=1 --batchsz=32

當您請求多個 GPU 時,所有 GPU 都會配置相同數量的記憶體。部分大小規格必須以具有最小記憶體數量的 GPU 為基礎。

在下列範例中,-p 引數會從兩個請求的 GPU 中的每一個 GPU 分別請求 33% 的記憶體。GPU 實際必須位於相同的伺服器上。如果 GPU 為 16 GB 裝置或最小 GPU 為 16 GB 裝置,則會在每個 GPU 上配置約 5461 MB。如果沒有其他應用程式正在執行,asimov_i.py 可存取兩個 GPU 的全部計算能力。

執行 bitfusion run -n 2 -p 0.33 -- python asimov_i.py --num_gpus=1 --batchsz=64

可以同時在同一個 GPU 上從單一用戶端執行多個應用程式。

例如,若要在背景中啟動兩個並行應用程式執行個體,請執行這兩個命令。
  1. bitfusion run -n 1 -p 0.66 -- python asimov_i.py --num_gpus=1 --batchsz=64 &
  2. bitfusion run -n 1 -p 0.33 -- python asimov_i.py --num_gpus=1 --batchsz=32 &

NVIDIA 系統管理介面 (nvidia-smi)

例如,您可以執行 NVIDIA 系統管理介面 nvidia-smi 監控應用程式,以檢查 GPU 磁碟分割大小或驗證 vSphere Bitfusion 伺服器上的可用資源。通常,當您安裝 NVIDIA 驅動程式時,會在伺服器上提供此應用程式。

例如,若要瞭解 GPU 的功能或確定 GPU 記憶體大小調整,在 vSphere Bitfusion 用戶端上執行的應用程式不需要 NVIDIA 驅動程式,但可能需要 nvidia-smi 應用程式。為了支援此類作業,自 vSphere Bitfusion 3.0 起,將在所有 vSphere Bitfusion 用戶端上提供 nvidia-smi 應用程式。vSphere Bitfusion 將應用程式從伺服器複製到用戶端。

例如,若要在 GPU 上請求並查看 1024 MB 磁碟分割,請執行 bitfusion run -n 1 -m 1024 -- nvidia-smi

nvidia-smi 應用程式的輸出會顯示請求的磁碟分割值 1024MiB

Requested resources:
Server List: 172.16.31.241:56001
Client idle timeout: 0 min
Wed Sep 23 15:21:17 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100      Driver Version: 440.64.00    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:13:00.0 Off |                    0 |
| N/A   36C    P8     9W /  70W |      0MiB /  1024MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

如何使用保留的 GPU 執行應用程式

您可以配置 GPU,並在同一 GPU 上執行多個應用程式。

雖然 run 命令能夠同時配置 GPU、執行應用程式和取消配置 GPU,但 vSphere Bitfusion 提供了三個單獨的命令來分別執行這些工作。

  • 若要配置 GPU,請執行 request_gpus 命令。
  • 若要啟動應用程式,請執行 client 命令。
  • 若要取消配置 GPU,請執行 release_gpus 命令。

透過使用單獨命令,您可以對多個應用程式使用相同的 GPU,並在將 vSphere Bitfusion 整合至其他工具和工作流程 (例如,排程軟體 SLURM) 時提供更好的控制。

run 命令封裝了 request_gpusclientrelease_gpus 命令。 run 命令的引數會在 request_gpusclient 命令之間分割。
備註: request_gpus 命令會建立可轉送至其他工具的檔案和環境變數。這些工具可使用相同的配置組態來執行 client 命令。

若要瞭解個別命令的使用情況,請參閱下列使用 AI 應用程式 asimov_i.py 的範例工作流程。

  1. 若要配置 GPU 以啟動多個連續的應用程式,請執行 bitfusion request_gpus -n 1 -m 5461
    Requested resources:
    Server List: 172.16.31.241:56001
    Client idle timeout: 0 min
  2. 若要透過執行 client 命令啟動應用程式,請執行 bitfusion client nvidia-smi
    Wed Sep 23 15:26:02 2020
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 440.100      Driver Version: 440.64.00    CUDA Version: 10.2     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla T4            Off  | 00000000:13:00.0 Off |                    0 |
    | N/A   36C    P8    10W /  70W |      0MiB /  5461MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+                                        	|
    
  3. 若要透過執行 client 命令按順序在相同的 GPU 上啟動另一個應用程式,請執行 bitfusion client -- python asimov_i.py --num_gpus=1 --batchsz=64
  4. 若要取消配置 GPU,請執行 bitfusion release_gpus

如何在特定 GPU 和伺服器上執行應用程式

vSphere Bitfusion 4.0 起,可以使用 CLI 命令引數篩選資源集區中的 GPU,並在一組特定的 GPU 上啟動應用程式。

可以將 --filter 引數與 runrequest_gpuslist_gpus 命令搭配使用,並對一組特定的 GPU 或伺服器執行命令。還可以組合使用篩選器,列出滿足多個條件的伺服器和 GPU。對於每種資料類型,必須使用適當的運算子,例如,<>>=<==!=

表 1. 可用 GPU 和伺服器篩選器清單
篩選器 資料類型 說明
device.index 以逗號分隔的整數清單 GPU 的系統索引。例如,--filter "device.index=1"--filter "device.index=0,1,2,3"。若要查看 GPU 的索引,請執行 nvidia-smi 命令。
device.name 字串 GPU 裝置的型號名稱。例如,--filter "device.name=NVIDIA Tesla T4"
device.memory 整數 GPU 裝置的實體記憶體大小 (以 MB 為單位)。例如,對於記憶體大小為 16 GB 的 GPU 裝置,輸入 --filter "device.memory=16384"
device.capability 版本 NVIDIA 裝置 CUDA 計算能力。CUDA 計算能力是一種機制,即 NVIDIA 與 CUDA API 搭配使用以指定 GPU 支援的功能。值必須以 XX.Y 格式輸入。例如,--filter "device.capability=8.0"。如需詳細資訊,請參閱 NVIDIA CUDA GPU 說明文件。
server.addr 字串 vSphere Bitfusion 伺服器的 IP 位址。例如,--filter "server.addr=10.202.8.209"
server.hostname 字串 vSphere Bitfusion 伺服器的主機名稱。例如,--filter "server.hostname=bitfusion-server-4.0.0-13"
server.has-rdma 布林值 vSphere Bitfusion 伺服器使用 RDMA 網路連線。例如,--filter "server.has-rdma=true"
server.cuda-version 版本 vSphere Bitfusion 伺服器上安裝的 CUDA 版本。值必須以 XX.YX.Y.Z 格式輸入。例如,--filter "server.cuda-version=11.3"
server.driver-version 版本 vSphere Bitfusion 伺服器上安裝的 NVIDIA 驅動程式版本。值必須以 XX.YX.Y.Z 格式輸入。例如,--filter "server.driver-version=460.73"
例如,若要列出記憶體大小大於 16 GB 的 GPU 裝置,請執行 bitfusion list_gpus --filter "device.memory>16384" 命令。
例如,若要在僅具有 Ampere GPU 微架構的 GPU 裝置上執行 AI 或 ML 工作負載,請執行 bitfusion run -n 1 --filter "device.capability=8.0" -- workload 命令。同樣,若要在僅具有 Volta GPU 微架構的 GPU 裝置上執行工作負載,請執行 bitfusion run -n 1 --filter "device.capability=7.0" -- workload 命令。
備註: 具有 Ampere GPU 微架構的 GPU 裝置的 CUDA 計算能力相當於 CUDA 版本 8.0,具有 Volta GPU 微架構的 GPU 裝置的 CUDA 計算能力相當於 CUDA 版本 7.0。如需詳細資訊,請參閱 NVIDIA CUDA GPU 說明文件。

如何使用 vSphere Bitfusion 伺服器的備用清單執行應用程式

可以建立備用 vSphere Bitfusion 伺服器清單,並使用 runrequest_gpuslist_gpus 命令在特定 GPU 上啟動應用程式。備用清單是 vSphere Bitfusion~/.bitfusion/servers.conf 檔案中維護的 GPU 伺服器的主要伺服器清單的子集。

vSphere Bitfusion 僅支援 IPv4 位址。

程序

  • 使用 servers.conf 檔案或建立伺服器清單。
    • 若要使用 vSphere Bitfusion 伺服器的備用 servers.conf 檔案,請執行 bitfusion run --servers value, -s value,其中 value 引數是 servers.conf 檔案的檔案路徑。
    • 若要建立 vSphere Bitfusion 伺服器的備用清單,請執行 bitfusion run --server_list value, -l value,其中 value 引數是採用 "ip_address:port;ip_address:port" 格式的伺服器清單。
      備註: 將清單括在引號內,因為在列出多個位址時,分號會用作分隔符號,而命令列解譯器可將清單剖析為多個命令。

如何變更可用 GPU 的等待時間

啟動應用程式時,依預設,vSphere Bitfusion 用戶端會等待長達 30 分鐘,以便有足夠的 GPU 可用。

若要修改 vSphere Bitfusion 用戶端等待可用 GPU 的預設時間,您可以將 --timeout value, -t value 引數新增至 runrequest_gpus 命令。

例如,您可以為 value 引數定義下列值。
10 10 秒
10s 10 秒
10m 10 分鐘
10h 10 小時