Spark 3.x는 YARN, Kubernetes 및 독립 실행형 클러스터 관리자와의 통합을 추가하여 GPU 및 플러그인 포인트를 요청하며, 이는 GPU에서 작업을 실행하도록 확장할 수 있습니다. Kubernetes의 경우, Spark 3.x는 실행자 포드 수준에서 GPU 격리를 제공합니다. 이를 통해 Spark 애플리케이션 개발자가 GPU를 더 쉽게 요청하고 사용할 수 있으며, Spark의 Horovod 및 TensorFlow와 같은 DL 및 AI 프레임워크와 더 쉽게 통합되고 GPU를 더 잘 활용할 수 있습니다.
아래 다이어그램에 GPU 스케줄링에 대한 흐름의 예가 나와 있습니다. 사용자는 GPU 리소스 구성 검색 스크립트가 있는 애플리케이션을 제출합니다. Spark는 구성을 사용하여 클러스터 관리자에게 전달하는 드라이버를 시작하여 지정된 양의 리소스와 GPU가 있는 컨테이너를 요청합니다. 클러스터 관리자는 컨테이너를 반환합니다. Spark가 컨테이너를 시작합니다. 실행자가 시작되면 검색 스크립트가 실행됩니다. Spark는 해당 정보를 드라이버로 다시 전송하고 드라이버는 해당 정보를 사용하여 작업을 GPU로 예약할 수 있습니다.
Spark 웹 UI는 할당된 리소스를 확인하기 위해 새 확인란을 갖도록 수정되었습니다. 이 경우 2개의 GPU가 할당되었습니다.
Spark 3.x 스테이지 수준 리소스 스케줄링을 사용하면 한 스테이지에 대해 하나의 컨테이너 크기, 그리고 다른 스테이지에 대해서는 다른 크기를 선택할 수 있습니다. 예를 들어 하나는 ETL용, 다른 하나는 ML용으로 선택할 수 있습니다.