共用方式為


Azure Synapse Analytics 中的 Apache Spark GPU 加速集區 (取代)

Apache Spark 是一個平行處理架構,可支援記憶體內部處理,以大幅提升巨量資料分析應用程式的效能。 Azure Synapse Analytics 中的 Apache Spark 是 Microsoft 在雲端中的其中一種 Apache Spark 實作。

Azure Synapse 現在可讓您建立支援 Azure Synapse GPU 的集區,以使用可利用 GPU 大量平行處理功能來加速處理的基礎 RAPIDS 程式庫,執行 Spark 工作負載。 RAPIDS Accelerator for Apache Spark 可讓您執行現有的 Spark 應用程式,而無須變更任何程式碼,只要啟用為支援 GPU 的集區預先設定的組態設定即可。 您可以藉由設定此設定,選擇為您的工作負載或部分工作負載開啟/關閉 RAPIDS 型 GPU 加速:

spark.conf.set('spark.rapids.sql.enabled','true/false')

注意

Azure Synapse 啟用 GPU 預覽功能集區現已取代。

Apache Spark 的 RAPIDS 加速器

Spark RAPIDS 加速器是一種外掛程式,其運作方式是透過支援的 GPU 作業覆寫 Spark 作業的實體方案,並在 GPU 上執行這些作業,進而加快處理的過程。 此程式庫目前為預覽狀態,不支援所有 Spark 作業 (這裡列出目前支援的運算子,並透過新發行累加方式新增更多支援)。

叢集組態選項

RAPIDS 加速器外掛程式僅支援 GPU 與執行程式之間的一對一對應。 這表示 Spark 作業必須要求可由集區資源支應的執行程式和驅動程式資源 (根據可用的 GPU 和 CPU 核心數目)。 為了符合這種情況,並確保所有集區資源都能有最佳使用率,我們需要針對在已啟用 GPU 的集區上執行的 Spark 應用程式進行下列驅動程式和執行程式設定:

集區大小 驅動程式大小選項 驅動程式核心 驅動程式記憶體 (GB) 執行程式核心 執行程式記憶體 (GB) 執行程式數目
GPU-Large 小型驅動程式 4 30 12 六十 集區中的節點數目
GPU-Large 中型驅動程式 7 30 9 六十 集區中的節點數目
GPU-XLarge 中型驅動程式 8 40 14 80 4 * 集區中的節點數目
GPU-XLarge 大型驅動程式 12 40 13 80 4 * 集區中的節點數目

任何不符合上述設定的工作負載,均不接受。 這麼做的目的是為了確保 Spark 作業會使用集區上的所有可用資源,以最有效率且高效能的設定來執行。

使用者可透過其工作負載設定上述設定。 在筆記本中,使用者可使用 %%configure Magic 命令來設定上述其中一個設定,如下所示。 例如,使用具有三個節點的大型集區:

%%configure -f
{
    "driverMemory": "30g",
    "driverCores": 4,
    "executorMemory": "60g",
    "executorCores": 12,
    "numExecutors": 3
}

透過筆記本在 Azure Synapse GPU 加速集區上執行範例 Spark 作業

在繼續本節之前,最好先熟悉如何在 Azure Synapse Analytics 中使用筆記本的基本概念。 我們將逐步討論使用 GPU 加速執行 Spark 應用程式的步驟。 您可以用 Synapse、PySpark (Python)、Spark (Scala)、SparkSQL 及 .NET for Spark (C#) 中支援的四種語言,來撰寫 Spark 應用程式。

  1. 建立已啟用 GPU 的集區。

  2. 建立筆記本,並將其附加至您在第一個步驟中建立、已啟用 GPU 功能的集區。

  3. 依照上一節的說明進行設定。

  4. 在筆記本的第一個儲存格中複製下列程式碼,以建立範例資料框架:

import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.Row
import scala.collection.JavaConversions._

val schema = StructType( Array(
  StructField("emp_id", IntegerType),
  StructField("name", StringType),
  StructField("emp_dept_id", IntegerType),
  StructField("salary", IntegerType)
))

val emp = Seq(Row(1, "Smith", 10, 100000),
    Row(2, "Rose", 20, 97600),
    Row(3, "Williams", 20, 110000),
    Row(4, "Jones", 10, 80000),
    Row(5, "Brown", 40, 60000),
    Row(6, "Brown", 30, 78000)
  )

val empDF = spark.createDataFrame(emp, schema)
  1. 現在讓我們來進行彙總,方法是取得每個部門識別碼的最高薪資,並顯示結果:
val resultDF = empDF.groupBy("emp_dept_id").max("salary")
resultDF.show()
  1. 您可以透過 Spark 記錄伺服器查看 SQL 方案,以檢視您在 GPU 上執行之查詢中的作業:顯示透過歷程記錄伺服器的 SQL 查詢計劃螢幕擷取畫面

如何針對 GPU 微調您的應用程式

大部分的 Spark 作業都可藉由微調預設值的設定來查看改進的效能,而運用 Apache Spark 的 RAPIDS 加速器外掛程式執行的作業也是如此。

已啟用 Azure Synapse GPU 功能的集區中的配額和資源限制

工作區層級

每個 Azure Synapse 工作區都附有 50 個 GPU 虛擬核心的預設配額。 為了增加 GPU 核心的配額,請透過 Azure 入口網站提交支援要求

下一步