已啟用 GPU 的計算
注意
某些已啟用 GPU 的實體類型位於 Beta 中,當您在計算建立期間選取驅動程式和背景工作角色類型時,會在下拉式清單中標示為這類類型。
概觀
Azure Databricks 支援使用圖形處理單位 (GPU) 加速計算。 本文說明如何使用已啟用 GPU 的實例來建立計算,並描述這些實例上安裝的 GPU 驅動程式和連結庫。
若要深入瞭解已啟用 GPU 計算的深度學習,請參閱 深度學習。
建立 GPU 計算
建立 GPU 計算類似於建立任何計算。 您應該記住下列事項:
- Databricks 運行時間版本必須是已啟用 GPU 的版本,例如 Runtime 13.3 LTS ML(GPU、Scala 2.12.15、Spark 3.4.1)。
- 背景工作類型和驅動程式類型必須是 GPU 實例類型。
支援的實例類型
Azure Databricks 支援下列實例類型:
- NC 實例類型系列:Standard_NC12、Standard_NC24
- NC v3 實例類型系列:Standard_NC6s_v3、Standard_NC12s_v3、Standard_NC24s_v3
- NC T4 v3 實例類型系列:Standard_NC4as_T4_v3、Standard_NC8as_T4_v3、Standard_NC16as_T4_v3、Standard_NC64as_T4_v3
- NC A100 v4 實例類型系列:Standard_NC24ads_A100_v4、Standard_NC48ads_A100_v4、Standard_NC96ads_A100_v4
- NCads H100 v5 實例類型系列:Standard_NC40ads_H100_v5,Standard_NC80adis_H100_v5
- ND A100 v4 實例類型系列:Standard_ND96asr_v4
- NV A10 v5 實例類型系列:Standard_NV36ads_A10_v5、Standard_NV36adms_A10_v5、Standard_NV72ads_A10_v5
如需支援的 GPU 實例類型及其可用性區域的最新清單,請參閱 Azure Databricks 定價 。 您的 Azure Databricks 部署必須位於支援的區域中,才能啟動已啟用 GPU 的計算。
GPU 排程
GPU 排程可有效率地將 Spark 工作分散到大量的 GPU。
Databricks Runtime 支援 Apache Spark 3.0 的 GPU 感知排程。 Azure Databricks 在 GPU 計算上預先設定它。
注意
單一節點計算上未啟用 GPU 排程。
用戶定義的 GPU 排程僅適用於 Databricks Runtime 7.1 和更新版本。 針對舊版的 Databricks Runtime,Databricks 會自動設定 GPU 計算,讓每個節點最多有一個執行中的工作。 如此一來,工作就可以使用節點上的所有 GPU,而不會與其他工作發生衝突。
AI 和 ML 的 GPU 排程
spark.task.resource.gpu.amount
是唯一與 GPU 感知排程相關的 Spark 設定,您可能需要進行設定。
如果您使用的是所有 GPU 節點,預設組態會針對每個工作使用一個 GPU,這是分散式推斷工作負載和分散式定型的良好基準。
為了減少分散式定型期間的通訊額外負荷,Databricks 建議將設定 spark.task.resource.gpu.amount
為計算 Spark 組態中每個背景工作節點的 GPU 數目。 這隻會為每個 Spark 背景工作建立一個 Spark 工作,並將該背景工作節點中的所有 GPU 指派給相同的工作。
若要增加分散式深度學習推斷的平行處理,您可以將 設定 spark.task.resource.gpu.amount
為分數值,例如 1/2、1/3、1/4... 1/N。 這會建立比 GPU 更多的 Spark 工作,讓更多的並行工作平行處理推斷要求。 例如,如果您將 設定 spark.task.resource.gpu.amount
為 0.5
、 0.33
或 0.25
,則可用的 GPU 將會分割成雙精度浮點數、三倍或四倍的工作數。
GPU 索引
針對 PySpark 工作,Azure Databricks 會自動將指派的 GPU 重新對應至以零起始的索引。 針對每個工作使用一個 GPU 的預設組態,您可以使用預設 GPU,而不檢查指派給工作的 GPU。
如果您為每個工作設定多個 GPU,例如 4,指派 GPU 的索引一律為 0、1、2 和 3。 如果您需要指派之 GPU 的實體索引,您可以從環境變數取得它們 CUDA_VISIBLE_DEVICES
。
如果您使用 Scala,您可以從 取得指派給工作的 TaskContext.resources().get("gpu")
GPU 索引。
NVIDIA GPU 驅動程式、CUDA 和 cuDNN
Azure Databricks 會安裝在 Spark 驅動程式和背景工作實例上使用 GPU 所需的 NVIDIA 驅動程式和連結庫:
- CUDA Toolkit,安裝在 底下
/usr/local/cuda
。 - cuDNN:NVIDIA CUDA 深度類神經網路連結庫。
- NCCL:NVIDIA 集體通訊連結庫。
隨附的 NVIDIA 驅動程式版本是 535.54.03,其支援 CUDA 11.0。 針對 NV A10 v5 實體類型系列,包含的 NVIDIA 驅動程式版本為 535.154.05
。
如需包含的連結庫版本,請參閱 您所使用之特定 Databricks Runtime 版本的版本資訊 。
注意
此軟體包含 NVIDIA Corporation 所提供的原始程式碼。 具體而言,為了支援 GPU,Azure Databricks 包含來自 CUDA 範例的程式代碼。
NVIDIA 使用者授權合約 (EULA)
當您在 Azure Databricks 中選取已啟用 GPU 的「Databricks 運行時間版本」時,會隱含同意 NVIDIA EULA 中針對 NCCL 連結庫、cuDNN 和 Tesla 連結庫所概述的條款及條件,以及 NCCL 連結庫的 NVIDIA 終端使用者許可協定(含 NCCL 補充)。
GPU 計算上的 Databricks Container Services
重要
這項功能處於公開預覽狀態。
您可以使用 計算上的 Databricks Container Services 搭配 GPU 來建立具有自定義連結庫的可攜式深度學習環境。 如需相關指示,請參閱 使用 Databricks Container Service 自定義容器。
若要建立 GPU 計算的自定義映像,您必須選取標準運行時間版本,而不是適用於 GPU 的 Databricks Runtime ML。 當您選取 [ 使用您自己的 Docker 容器] 時,可以選擇具有標準運行時間版本的 GPU 計算。 GPU 的自定義映像是以官方 CUDA 容器為基礎,這與適用於 GPU 的 Databricks Runtime ML 不同。
當您建立 GPU 計算的自定義映射時,無法變更 NVIDIA 驅動程式版本,因為它必須符合主電腦上的驅動程式版本。
databricksruntime
Docker Hub 包含具有 GPU 功能的範例基底映像。 用來產生這些映像的 Dockerfiles 位於範例容器 GitHub 存放庫中,其中也有範例映射提供的詳細數據,以及如何自定義這些映像。