Databricks 部署指南#

Databricks 开发了一个基于 Web 的平台,用于使用 Spark,该平台提供自动化的集群管理和 IPython 风格的笔记本。NVIDIA RAPIDS Accelerator for Apache Spark 在 Databricks 上可用,允许用户使用 GPU 加速数据处理和机器学习工作负载。此集成完全由 Databricks 支持,并使用户能够以优化的性能和效率运行其 Spark 工作负载。

步骤概述#

本指南提供了关于开始在 Databricks 集群上使用 RAPIDS Accelerator 的分步说明。

RAPIDS Accelerator Java 存档 (JAR) 文件用于集成必要的依赖项和类,这些依赖项和类启用 Apache Spark 工作负载的 GPU 加速。集群创建完成后,将提交 GPU 加速的 Spark 作业/应用程序。

先决条件#

在 Databricks 上开始使用 RAPIDS Accelerator for Apache Spark 之前,请确保您具备以下先决条件

连接性#

检查与 Databricks 的连接性的一个简单方法是列出工作区。

databricks workspace ls

上传 Jar 和初始化脚本#

为了加快集群创建速度,请将 jar 文件上传到 Databricks 文件系统 (DBFS) 目录,并为集群创建初始化脚本。

从命令行,导航到与从 NGC 下载的 jar 文件相同的目录。将 JAR_NAME 替换为您的 jar 的名称。运行以下命令以上传 jar 并创建一个初始化脚本,该脚本将 jar 从 DBFS 移动到集群中的每个节点

 1export JAR_NAME=rapids-4-spark_2.12-23.02.0.jar
 2
 3# Create directory for jars.
 4dbfs mkdirs dbfs:/FileStore/jars
 5
 6# Copy local jar into DBFS for reuse:
 7dbfs cp ./$JAR_NAME dbfs:/FileStore/jars
 8
 9# Create init script:
10echo "sudo cp /dbfs/FileStore/jars/${JAR_NAME} /databricks/jars/" > init.sh
11
12# Upload init.sh:
13dbfs cp ./init.sh dbfs:/databricks/init_scripts/init.sh --overwrite

使用 Databricks Clusters API 创建集群#

通过命令行界面,用户可以绕过对 GUI 的一些限制,例如在 GPU 加速集群上使用仅 CPU 的驱动程序节点以节省额外成本。CLI 中公开了 GUI 中可能尚不可用的其他功能。

以下是使用仅 CPU 的驱动程序节点在 AWS Databricks 上创建基本 GPU 加速集群的集群创建脚本

 1databricks clusters create --json '{
 2"cluster_name": "my-cluster",
 3"spark_version": "10.4.x-gpu-ml-scala2.12",
 4"driver_node_type_id": "m5d.4xlarge",
 5"node_type_id": "g4dn.4xlarge",
 6"num_workers": "2",
 7"spark_conf": {
 8    "spark.plugins": "com.nvidia.spark.SQLPlugin",
 9    "spark.task.resource.gpu.amount": "0.1",
10    "spark.rapids.memory.pinnedPool.size": "2G",
11    "spark.rapids.sql.concurrentGpuTasks": "2",
12    "spark.databricks.optimizer.dynamicFilePruning": "false"
13    },
14"init_scripts": [{
15    "dbfs": {"destination": "dbfs:/databricks/init_scripts/init.sh"}
16    }]
17}'

在 Azure Databricks 中,需要替换实例类型才能使集群有效。提供了一个示例替换

1"driver_node_type_id": "Standard_E16ads_v5",
2"node_type_id": "Standard_NC16as_T4_v3",

cluster_id 作为 CLI 中上述集群创建命令的响应提供。保存此 cluster_id 以供后续步骤使用。也可以通过在 GUI 中选择集群并检查 URL 来查看 cluster_id。

https://<databricks-instance>/#/setting/clusters/<cluster-id>

有关 Databricks Clusters API 的更多信息,请访问 此处

databricks clusters list

验证#

使用 CLI 界面创建一个作业。在 JSON 中输入您的 cluster_id 作为 existing_cluster_id

 1# Download pi example jar:
 2wget https://docs.databricks.com/_static/examples/SparkPi-assembly-0.1.jar
 3
 4# Upload jar to /docs/sparkpi.jar
 5dbfs cp ./SparkPi-assembly-0.1.jar dbfs:/docs/sparkpi.jar
 6
 7# Create job:
 8databricks jobs create --json '{
 9"name": "pi_computation",
10"max_concurrent_runs": 1,
11"tasks": [
12    {
13        "task_key": "pi_test",
14        "description": "Compute pi",
15        "depends_on": [ ],
16        "existing_cluster_id": "<cluster_id>",
17        "spark_jar_task": {
18        "main_class_name": "org.apache.spark.examples.SparkPi",
19        "parameters": "1000"
20        },
21        "libraries": [{ "jar": "dbfs:/docs/sparkpi.jar"}]
22    }]
23}'

确保集群在线并准备好接受新任务。启动 GPU 加速集群大约需要 10 分钟。可以在 GUI 的“计算”选项卡下查看集群状态。或者在 CLI 中使用:databricks clusters list 查看。

通过进入“工作流”选项卡并查找名为“pi_computation”的作业来运行作业,然后按右上角的“立即运行”按钮。或者,响应中给出的 job_id 可以用于

databricks jobs run-now --job-id <job_id>

通过单击最近完成的运行的“Spark”列下的 日志 链接来检查日志。

_images/rapids-accelerator-databricks-01.png

然后查看“标准输出”以查看 π 的估计值。

_images/rapids-accelerator-databricks-02.png

集群清理#

使用 GUI 通过选择“计算” >> [集群名称] >> “终止”来终止集群。终止的集群可以在未来某个时间使用相同的配置和 cluster_id 完整地重新启动。您也可以通过单击集群名称旁边的三点菜单并选择“删除”来完全删除集群。