Gunakan RAPIDS Akselerator Nvidia 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 RAPIDS Akselerator Nvidia untuk Apache Spark

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

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

Pilih jenis instans

Untuk menggunakan RAPIDS plugin Nvidia Spark- untuk Spark, grup instance inti dan tugas harus menggunakan tipe EC2 GPU instans yang memenuhi persyaratan Perangkat Keras Spark-. RAPIDS Untuk melihat daftar lengkap jenis GPU instans yang EMR didukung Amazon, lihat Jenis instans yang didukung di Panduan EMR Manajemen Amazon. Jenis instans untuk grup instance utama dapat berupa salah satu GPU atau GPU non-tipe, tetapi tipe ARM instance 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 klaster:

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

2. Konfigurasikan YARN untuk digunakan GPU

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

Amazon EMR 7.x

Contoh YARN konfigurasi 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 YARN konfigurasi 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. Konfigurasikan Spark untuk digunakan RAPIDS

Berikut adalah konfigurasi yang diperlukan untuk mengaktifkan Spark 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" } }

XGBoost4JPustaka -Spark dalam XGBoost dokumentasi juga tersedia saat RAPIDS plugin Spark diaktifkan di cluster Anda. Anda dapat menggunakan konfigurasi berikut untuk mengintegrasikan XGBoost dengan pekerjaan Spark Anda:

{ "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 EMR klaster yang GPU dipercepat, silakan merujuk ke panduan penyetelan Rapids Accelerator for Apache Spark di dokumentasi Nvidia.github.io.

4. Konfigurasikan Penjadwal YARN Kapasitas

DominantResourceCalculatorharus dikonfigurasi untuk mengaktifkan GPU penjadwalan dan isolasi. Untuk informasi lebih lanjut, silakan merujuk ke Menggunakan GPU di YARN dalam dokumentasi Apache Hadoop.

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

5. Buat JSON file untuk menyertakan konfigurasi Anda

Anda dapat membuat JSON file yang berisi konfigurasi Anda untuk menggunakan RAPIDS plugin 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 membuat 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 klaster, lihat Dasar-dasar tindakan Bootstrap di Panduan EMR Manajemen Amazon.

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 digunakan YARN untuk mengelola GPU sumber daya dengan rilis Amazon EMR 7.x, Anda harus memasang secara manual CGroup v1 di cluster Anda. Anda dapat melakukan ini dengan sebagai 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 adalah contoh perintah untuk meluncurkan cluster dari Amazon EMRCLI:

aws emr create-cluster \ --release-label emr-7.3.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