View a markdown version of this page

Gunakan Nvidia RAPIDS Accelerator untuk Apache Spark - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Gunakan Nvidia RAPIDS Accelerator untuk Apache Spark

Dengan Amazon EMR rilis 6.2.0 dan yang lebih baru, Anda dapat menggunakan plugin RAPIDS Accelerator for Apache Spark oleh Nvidia untuk mempercepat Spark menggunakan tipe instance unit pemrosesan grafis (GPU) EC2. RAPIDS Accelerator akan membuat pipeline ilmu data Apache Spark 3.0 GPU-accelerate Anda tanpa perubahan kode, dan mempercepat pemrosesan data dan pelatihan model sambil secara substansif menurunkan biaya infrastruktur.

Bagian berikut memandu Anda melalui konfigurasi cluster EMR Anda untuk menggunakan Spark-RAPIDS Plugin untuk Spark.

Pilih jenis instans

Untuk menggunakan Spark-RAPIDS plugin Nvidia untuk Spark, grup instance inti dan tugas harus menggunakan jenis instans GPU EC2 yang memenuhi persyaratan Perangkat Keras. Spark-RAPIDS Untuk melihat daftar lengkap jenis instans GPU yang didukung Amazon EMR, lihat Jenis instans yang Di dukung di Panduan Manajemen Amazon EMR. Jenis instans untuk grup instans utama dapat berupa tipe GPU atau non-GPU, tetapi jenis instans ARM tidak didukung.

Mengatur konfigurasi aplikasi untuk cluster

1. Aktifkan Amazon EMR untuk menginstal plugin di cluster baru Anda

Untuk menginstal plugin, berikan konfigurasi berikut saat Anda membuat cluster Anda:

{ "Classification":"spark", "Properties":{ "enableSparkRapids":"true" } }

2. Configure YARN para usar

Untuk detail tentang cara menggunakan GPU di YARN, lihat Menggunakan GPU di YARN dalam dokumentasi Apache Hadoop. Contoh berikut menunjukkan contoh konfigurasi YARN untuk rilis Amazon EMR 6.x dan 7.x:

Amazon EMR 7.x

Contoh konfigurasi YARN untuk Amazon EMR 7.x

{ "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.resource-plugins":"yarn.io/gpu", "yarn.resource-types":"yarn.io/gpu", "yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices":"auto", "yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables":"/usr/bin", "yarn.nodemanager.linux-container-executor.cgroups.mount":"true", "yarn.nodemanager.linux-container-executor.cgroups.mount-path":"/spark-rapids-cgroup", "yarn.nodemanager.linux-container-executor.cgroups.hierarchy":"yarn", "yarn.nodemanager.container-executor.class":"org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor" } },{ "Classification":"container-executor", "Properties":{ }, "Configurations":[ { "Classification":"gpu", "Properties":{ "module.enabled":"true" } }, { "Classification":"cgroups", "Properties":{ "root":"/spark-rapids-cgroup", "yarn-hierarchy":"yarn" } } ] }
Amazon EMR 6.x

Contoh konfigurasi YARN untuk Amazon EMR 6.x

{ "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.resource-plugins":"yarn.io/gpu", "yarn.resource-types":"yarn.io/gpu", "yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices":"auto", "yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables":"/usr/bin", "yarn.nodemanager.linux-container-executor.cgroups.mount":"true", "yarn.nodemanager.linux-container-executor.cgroups.mount-path":"/sys/fs/cgroup", "yarn.nodemanager.linux-container-executor.cgroups.hierarchy":"yarn", "yarn.nodemanager.container-executor.class":"org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor" } },{ "Classification":"container-executor", "Properties":{ }, "Configurations":[ { "Classification":"gpu", "Properties":{ "module.enabled":"true" } }, { "Classification":"cgroups", "Properties":{ "root":"/sys/fs/cgroup", "yarn-hierarchy":"yarn" } } ] }

3. Configurar Spark para usar

Berikut adalah konfigurasi yang diperlukan untuk mengaktifkan Spark untuk menggunakan RAPIDS Plugin:

{ "Classification":"spark-defaults", "Properties":{ "spark.plugins":"com.nvidia.spark.SQLPlugin", "spark.executor.resource.gpu.discoveryScript":"/usr/lib/spark/scripts/gpu/getGpusResources.sh", "spark.executor.extraLibraryPath":"/usr/local/cuda/targets/x86_64-linux/lib:/usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/compat/lib:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native" } }

XGBoost4J-Spark pust aka dalam dokumentasi XGBoost juga tersedia ketika plugin Spark RAPIDS diaktifkan di cluster Anda. Anda dapat menggunakan konfigurasi berikut untuk mengintegrasikan XGBoost dengan Anda Spark job:

{ "Classification":"spark-defaults", "Properties":{ "spark.submit.pyFiles":"/usr/lib/spark/jars/xgboost4j-spark_3.0-1.4.2-0.3.0.jar" } }

Untuk konfigurasi Spark tambahan yang dapat Anda gunakan untuk menyetel cluster GPU-accelerated EMR, silakan lihat panduan penyetelan Rapids Accelerator untuk Apache Spark dalam Nvidia.github.io dokumentasi.

4. Konfigurasi Penjadwalan Kapasitas

DominantResourceCalculator harus dikonfigurasi untuk mengaktifkan penjadwalan dan isolasi GPU. Untuk informasi lebih lanjut, lihat: Menggunakan GPU pada BEARN dalam dokumentasi Apache Hadoop.

{ "Classification":"capacity-scheduler", "Properties":{ "yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator" } }

5. Buat file JSON untuk menyertakan konfigurasi Anda

Anda dapat membuat file JSON yang berisi konfigurasi Anda untuk menggunakan plugin RAPIDS untuk cluster Spark Anda. Anda menyediakan file nanti ketika Anda meluncurkan cluster Anda.

Anda dapat menyimpan file secara lokal atau di S3. Untuk informasi selengkapnya tentang cara menyediakan konfigurasi aplikasi untuk kluster Anda, lihat Konfigurasikan aplikasi.

Gunakan file contoh berikut sebagai templat untuk membangun konfigurasi Anda sendiri.

Amazon EMR 7.x

Contoh my-configurations.json file untuk Amazon EMR 7.x

[ { "Classification":"spark", "Properties":{ "enableSparkRapids":"true" } }, { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.resource-plugins":"yarn.io/gpu", "yarn.resource-types":"yarn.io/gpu", "yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices":"auto", "yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables":"/usr/bin", "yarn.nodemanager.linux-container-executor.cgroups.mount":"true", "yarn.nodemanager.linux-container-executor.cgroups.mount-path":"/spark-rapids-cgroup", "yarn.nodemanager.linux-container-executor.cgroups.hierarchy":"yarn", "yarn.nodemanager.container-executor.class":"org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor" } }, { "Classification":"container-executor", "Properties":{ }, "Configurations":[ { "Classification":"gpu", "Properties":{ "module.enabled":"true" } }, { "Classification":"cgroups", "Properties":{ "root":"/spark-rapids-cgroup", "yarn-hierarchy":"yarn" } } ] }, { "Classification":"spark-defaults", "Properties":{ "spark.plugins":"com.nvidia.spark.SQLPlugin", "spark.executor.resource.gpu.discoveryScript":"/usr/lib/spark/scripts/gpu/getGpusResources.sh", "spark.executor.extraLibraryPath":"/usr/local/cuda/targets/x86_64-linux/lib:/usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/compat/lib:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native", "spark.submit.pyFiles":"/usr/lib/spark/jars/xgboost4j-spark_3.0-1.4.2-0.3.0.jar", "spark.rapids.sql.concurrentGpuTasks":"1", "spark.executor.resource.gpu.amount":"1", "spark.executor.cores":"2", "spark.task.cpus":"1", "spark.task.resource.gpu.amount":"0.5", "spark.rapids.memory.pinnedPool.size":"0", "spark.executor.memoryOverhead":"2G", "spark.locality.wait":"0s", "spark.sql.shuffle.partitions":"200", "spark.sql.files.maxPartitionBytes":"512m" } }, { "Classification":"capacity-scheduler", "Properties":{ "yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator" } } ]
Amazon EMR 6.x

Contoh my-configurations.json file untuk Amazon EMR 6.x

[ { "Classification":"spark", "Properties":{ "enableSparkRapids":"true" } }, { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.resource-plugins":"yarn.io/gpu", "yarn.resource-types":"yarn.io/gpu", "yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices":"auto", "yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables":"/usr/bin", "yarn.nodemanager.linux-container-executor.cgroups.mount":"true", "yarn.nodemanager.linux-container-executor.cgroups.mount-path":"/sys/fs/cgroup", "yarn.nodemanager.linux-container-executor.cgroups.hierarchy":"yarn", "yarn.nodemanager.container-executor.class":"org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor" } }, { "Classification":"container-executor", "Properties":{ }, "Configurations":[ { "Classification":"gpu", "Properties":{ "module.enabled":"true" } }, { "Classification":"cgroups", "Properties":{ "root":"/sys/fs/cgroup", "yarn-hierarchy":"yarn" } } ] }, { "Classification":"spark-defaults", "Properties":{ "spark.plugins":"com.nvidia.spark.SQLPlugin", "spark.executor.resource.gpu.discoveryScript":"/usr/lib/spark/scripts/gpu/getGpusResources.sh", "spark.executor.extraLibraryPath":"/usr/local/cuda/targets/x86_64-linux/lib:/usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/compat/lib:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native", "spark.submit.pyFiles":"/usr/lib/spark/jars/xgboost4j-spark_3.0-1.4.2-0.3.0.jar", "spark.rapids.sql.concurrentGpuTasks":"1", "spark.executor.resource.gpu.amount":"1", "spark.executor.cores":"2", "spark.task.cpus":"1", "spark.task.resource.gpu.amount":"0.5", "spark.rapids.memory.pinnedPool.size":"0", "spark.executor.memoryOverhead":"2G", "spark.locality.wait":"0s", "spark.sql.shuffle.partitions":"200", "spark.sql.files.maxPartitionBytes":"512m" } }, { "Classification":"capacity-scheduler", "Properties":{ "yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator" } } ]

Menambahkan tindakan bootstrap untuk cluster Anda

Untuk informasi selengkapnya tentang cara menyediakan skrip tindakan bootstrap saat Anda membuat cluster, lihat dasar-dasar tindakan Bootstrap di Panduan Manajemen Amazon EMR.

Contoh skrip berikut menunjukkan cara membuat file tindakan bootstrap untuk Amazon EMR 6.x dan 7.x:

Amazon EMR 7.x

Contoh my-bootstrap-action.sh file untuk Amazon EMR 7.x

Untuk menggunakan YARN untuk mengelola sumber daya GPU dengan rilis Amazon EMR 7.x, Anda harus memasang secara manual CGroup v1 di cluster Anda. Anda dapat melakukan ini dengan skrip tindakan bootstrap, seperti yang ditunjukkan dalam contoh ini.

#!/bin/bash set -ex sudo mkdir -p /spark-rapids-cgroup/devices sudo mount -t cgroup -o devices cgroupv1-devices /spark-rapids-cgroup/devices sudo chmod a+rwx -R /spark-rapids-cgroup
Amazon EMR 6.x

Contoh my-bootstrap-action.sh file untuk Amazon EMR 6.x

Untuk rilis Amazon EMR 6.x, Anda harus membuka CGroup izin untuk YARN di cluster Anda. Anda dapat melakukan ini dengan skrip tindakan bootstrap, seperti yang ditunjukkan dalam contoh ini.

#!/bin/bash set -ex sudo chmod a+rwx -R /sys/fs/cgroup/cpu,cpuacct sudo chmod a+rwx -R /sys/fs/cgroup/devices

Luncurkan cluster Anda

Langkah terakhir adalah meluncurkan cluster Anda dengan konfigurasi cluster yang disebutkan di atas. Berikut contoh perintah untuk meluncurkan cluster dari Amazon EMR CLI:

aws emr create-cluster \ --release-label emr-7.13.0 \ --applications Name=Hadoop Name=Spark \ --service-role EMR_DefaultRole_V2 \ --ec2-attributes KeyName=my-key-pair,InstanceProfile=EMR_EC2_DefaultRole \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.4xlarge \ InstanceGroupType=CORE,InstanceCount=1,InstanceType=g4dn.2xlarge \ InstanceGroupType=TASK,InstanceCount=1,InstanceType=g4dn.2xlarge \ --configurations file:///my-configurations.json \ --bootstrap-actions Name='My Spark Rapids Bootstrap action',Path=s3://amzn-s3-demo-bucket/my-bootstrap-action.sh