Spark 3.x 已集成 YARN、Kubernetes 和 Standalone 集群管理器,便于用户请求 GPU 以及可通过扩展在 GPU 上执行操作的插件点。对于 Kubernetes,Spark 3.x 在执行程序单元级别进行 GPU 隔离。这样一来,Spark 应用程序开发者便可更轻松地请求和使用 GPU,并与 DL 和 AI 框架(例如 Spark 上的 Horovod 和 TensorFlow)更紧密地集成,同时还能更充分地利用 GPU。
GPU 调度流示例如下图所示。用户提交一个包含 GPU 资源配置发现脚本的应用程序。Spark 启动驱动,以便使用配置传递给集群管理器,并请求包含指定数量资源和 GPU 的容器。集群管理器返回容器。Spark 启动容器。执行程序启动时,会运行发现脚本。Spark 将该信息发送回驱动,而驱动随后使用该信息将任务调度至 GPU。
Spark Web UI 已经过修改,用户现可使用新复选框查看已分配的资源。此实例中已分配两个 GPU。
Spark 3.x 阶段级资源调度功能可让用户为一个阶段选择一种容器大小,而为另一阶段选择另一种大小。例如,为 ETL 阶段选择一种容器大小,为 ML 阶段选择另一种大小。