如何在Google Dataproc中正确配置spark.task.resource.gpu.amount
解决Google Dataproc上Spark GPU调度配置问题
问题背景
在Dataproc上运行TensorFlow MirroredStrategyRunner时,因缺失spark.task.resource.gpu.amount配置报错;单独配置该参数会触发executor GPU资源未定义的错误;使用Workflow模板配置时出现类型错误。以下是两种场景的正确配置方法:
场景1:使用gcloud dataproc clusters create创建集群后,在脚本内配置
Spark的GPU调度需同时配置executor级和task级的GPU资源参数,仅配置task参数会导致Spark无法识别executor的GPU资源。
步骤1:创建GPU集群(必须)
先确保集群使用带GPU的机器类型,开启GPU加速:
gcloud dataproc clusters create <集群名称> \ --region <区域> \ --worker-machine-type n1-standard-8 \ --worker-accelerator type=nvidia-tesla-t4,count=1 \ --master-machine-type n1-standard-8 \ --image-version 2.1-debian11
步骤2:脚本内配置完整GPU参数
在SparkSession构建时,同时配置executor和task的GPU参数:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("GPU_TensorFlow_App") \ .config("spark.executor.resource.gpu.amount", "1") \ .config("spark.task.resource.gpu.amount", "1") \ .config("spark.executor.resource.gpu.discoveryScript", "/usr/lib/spark/scripts/gpu/getGpusResources.sh") \ .getOrCreate()
简化方案:创建集群时直接配置默认Spark参数,后续脚本无需重复配置:
gcloud dataproc clusters create <集群名称> \ --region <区域> \ --worker-machine-type n1-standard-8 \ --worker-accelerator type=nvidia-tesla-t4,count=1 \ --master-machine-type n1-standard-8 \ --image-version 2.1-debian11 \ --properties spark.executor.resource.gpu.amount=1,spark.task.resource.gpu.amount=1,spark.executor.resource.gpu.discoveryScript=/usr/lib/spark/scripts/gpu/getGpusResources.sh
场景2:使用DataprocInstantiateInlineWorkflowTemplateOperator模板配置
需满足两个核心要求:集群配置为GPU类型,且Spark参数完整、值为字符串类型。
完整模板配置示例
{ "project_id": "<项目ID>", "region": "<区域>", "jobs": [ { "step_id": "<任务步骤ID>", "pyspark_job": { "args": ["<参数1>", "<参数2>"], "main_python_file_uri": "<GCS上的脚本路径>", "properties": { "spark.executor.resource.gpu.amount": "1", "spark.task.resource.gpu.amount": "1", "spark.executor.resource.gpu.discoveryScript": "/usr/lib/spark/scripts/gpu/getGpusResources.sh" }, "jar_file_uris": [ "gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar", "gs://onedemand-analytics/jars/spark-tensorflow-connector_2.12-1.11.0.jar" ] } } ], "cluster_config": { "master_config": { "machine_type_uri": "n1-standard-8" }, "worker_config": { "machine_type_uri": "n1-standard-8", "accelerators": [ { "accelerator_type_uri": "nvidia-tesla-t4", "accelerator_count": 1 } ] }, "software_config": { "image_version": "2.1-debian11" } } }
关键注意事项
- 所有
properties的值必须为字符串类型(如"1"而非1),否则会触发类型错误。 cluster_config中必须定义accelerators字段,确保集群具备GPU硬件资源。
内容的提问来源于stack exchange,提问作者Anirban Saha
相关产品推荐
相关产品推荐

