Google Cloud Dataproc 部署指南#
Dataproc 是 Google Cloud 的完全托管式 Apache Spark 和 Hadoop 服务。NVIDIA RAPIDS 加速器(用于 Apache Spark)在 Dataproc 上可用,允许用户使用 GPU 加速数据处理和机器学习工作负载。此集成完全受 Google Cloud 支持,并使用户能够以优化的性能和效率运行其 Spark 工作负载。
步骤概述#
本指南提供了有关开始使用 RAPIDS 加速器(用于 Dataproc 集群)的分步说明。我们从基于 Ubuntu 的操作系统开始,运行 Google CLI 以连接 Dataproc 集群和 Google Storage 存储桶并与之交互。然后,我们使用 spark-rapids Java 存档 (jar) 文件来集成必要的依赖项和类,这些依赖项和类启用 Apache Spark 工作负载的 GPU 加速。jar 文件上传到 Google Cloud Storage 存储桶,然后在集群创建时加载。集群创建完成后,我们就可以提交 GPU 加速的 Spark 作业/应用程序。
先决条件#
在开始使用 Dataproc 上的 RAPIDS 加速器(用于 Apache Spark)之前,请确保您具备以下先决条件
具有互联网访问 Google Cloud 的 Ubuntu 操作系统。
具有 NGC 目录访问权限的 NGC 帐户
Google Cloud 工具
注意
其他操作系统也可以使用,但以下步骤需要 Ubuntu。
连接性#
从具有上述先决条件的 Ubuntu 操作系统中,使用 gcloud init
命令来验证和连接到启用了 Dataproc 的 Google Cloud 项目和区域。
gcloud dataproc clusters list
利用具有所需 GPU 实例的区域。完整列表请参见此处: https://cloud.google.com/compute/docs/gpus/gpu-regions-zones
配置 gcloud 以使用您的首选区域。
以下是将区域设置为 us-central1
的示例。
1export REGION=us-central1
2gcloud config set compute/region ${REGION}
注意
您可能需要为指定的区域请求额外的 GPU 资源使用配额。有关更多信息,请参阅 Google Cloud 资源使用配额和权限管理文档。
将 Jar 上传到云端(GCP 存储桶)#
为了加快集群创建速度,请将 jar 文件上传到集群所在区域内的 GCP 存储桶。设置终端变量并使用 gsutil 命令创建 GCS 存储桶。
提示
从 NGC 目录将 jar 文件拉取到您的本地计算机。请回顾访问 NVIDIA AI Enterprise RAPIDS 加速器部分。
根据需要更改 exampleuser1
和 rapids-4-spark_2.12-23.02.0.jar
。
1export USER_NAME=exampleuser1
2export JAR_NAME=rapids-4-spark_2.12-23.02.0.jar
将 jar 放在您当前的工作目录中并设置位置变量。
export LOCAL_JAR_LOCATION=./${JAR_NAME}
导出变量,以便将 jar 放置在 GCP 存储桶中。
1export GCS_BUCKET=${USER_NAME}-bucket
2export GCS_JAR_LOCATION=gs://$GCS_BUCKET/jars/${JAR_NAME}
将 jar 复制到 GCP 存储桶。
1gsutil mkdir gs://${GCS_BUCKET}
2gsutil cp ${LOCAL_JAR_LOCATION} ${GCS_JAR_LOCATION}
注意
如果需要,Google Cloud Console 具有传输文件的功能。
创建集群并更新 Dataproc Jar#
在本节中,您将使用 gcloud 命令创建 Dataproc 集群,然后将现有 jar 替换为 RAPIDS 加速器 jar。
使用 export 命令设置适当的集群配置变量。以下是示例变量。替换以下变量以匹配您的环境。
注意
某些区域没有 GPU 实例。
1export REGION=us-central1
2export ZONE=us-central1-a
3export CLUSTER_NAME=${USER_NAME}-gpu
4export MASTER_MACHINE_TYPE=n1-standard-16
5export WORKER_MACHINE_TYPE=n1-highmem-32
6export NUM_WORKERS=4
7export NUM_WORKER_SSDS=2
8export WORKER_ACCEL_TYPE=nvidia-tesla-t4
9export NUM_GPUS_PER_WORKER=2
既然已设置上述变量,请使用以下命令创建具有上述配置的集群。
1gcloud dataproc clusters create ${CLUSTER_NAME} \
2 --image-version=2.1.2-ubuntu20 \
3 --region ${REGION}\
4 --zone ${ZONE} \
5 --master-machine-type ${MASTER_MACHINE_TYPE} \
6 --num-workers ${NUM_WORKERS} \
7 --worker-accelerator type=${WORKER_ACCEL_TYPE},count=${NUM_GPUS_PER_WORKER} \
8 --worker-machine-type ${WORKER_MACHINE_TYPE} \
9 --num-worker-local-ssds ${NUM_WORKER_SSDS} \
10 --worker-local-ssd-interface=NVME \
11 --initialization-actions gs://goog-dataproc-initialization-actions-${REGION}/spark-rapids/spark-rapids.sh \
12 --optional-components=JUPYTER,ZEPPELIN \
13 --properties 'spark:spark.eventLog.enabled=true,spark:spark.eventLog.compress=true' \
14 --bucket ${GCS_BUCKET} \
15 --enable-component-gateway \
16 --subnet=default \
17 --no-shielded-secure-boot
注意
GPU 集群创建时间可能需要 15 分钟以上。
从 Dataproc 中删除任何现有的 RAPIDS 加速器和 cudf jar。替换为 RAPIDS 加速器 jar。
1WORKER_LIST=$(echo $(for n in $(seq 0 $((NUM_WORKERS - 1))); do echo -n w-${n} ' '; done))
2for node in m $WORKER_LIST; do gcloud compute ssh ${CLUSTER_NAME}-${node} --command="sudo rm /usr/lib/spark/jars/cudf-*.jar" ;gcloud compute ssh ${CLUSTER_NAME}-${node} --command="sudo rm /usr/lib/spark/jars/rapids-4-spark_*.jar" ; gcloud compute ssh ${CLUSTER_NAME}-${node} --command="sudo gsutil cp ${GCS_JAR_LOCATION} /usr/lib/spark/jars/" ; done
验证#
现在,您可以像提交任何其他集群一样向该集群提交作业了。有关提交示例作业,请参见此处。
此作业将显示 jar 已成功加载。
1gcloud dataproc jobs submit spark \
2 --cluster=${CLUSTER_NAME} \
3 --region=${REGION} \
4 --class=org.apache.spark.examples.SparkPi \
5 --properties=spark.rapids.sql.explain=ALL \
6 --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
7 -- 1000
有关所有配置选项、与 Apache Spark 的兼容性主题以及 NVIDIA 运算符支持的完整列表,请参见配置附录和支持的运算符附录。
集群清理#
可以通过以下方式删除集群
gcloud dataproc clusters delete -q $CLUSTER_NAME
提示
如果不再需要,请删除您的 GCP 存储桶。
gsutil -m rm -rf gs://<Your-Bucket-Name>