Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan CuDF Accelerator untuk Apache Spark dengan Amazon EMR di EKS
Dengan Amazon EMR di EKS, Anda dapat menjalankan pekerjaan untuk NVIDIA CuDF Accelerator untuk Apache Spark. Tutorial ini mencakup cara menjalankan tugas Spark menggunakan CuDF pada tipe instance unit pemrosesan grafis (GPU) EC2. Tutorial ini menggunakan versi berikut:
-
Amazon EMR di EKS rilis versi 6.9.0 dan yang lebih baru
-
Apache Spark 3.x
Anda dapat mempercepat Spark dengan jenis instans GPU Amazon EC2 dengan menggunakan plugin NVIDIA CuDF Accelerator untuk Apache Spark
Sebelum Anda mulai, pastikan Anda memiliki sumber daya berikut.
-
Amazon EMR pada klaster virtual EKS
-
Cluster Amazon EKS dengan grup node yang diaktifkan GPU
Cluster virtual Amazon EKS adalah pegangan terdaftar ke namespace Kubernetes pada cluster Amazon EKS, dan dikelola oleh Amazon EMR di EKS. Pegangan ini memungkinkan Amazon EMR menggunakan namespace Kubernetes sebagai tujuan untuk menjalankan pekerjaan. Untuk informasi selengkapnya tentang cara mengatur cluster virtual, lihat Menyiapkan Amazon EMR di EKS dalam panduan ini.
Anda harus mengonfigurasi cluster virtual Amazon EKS dengan grup node yang memiliki instans GPU. Anda harus mengkonfigurasi node dengan plugin perangkat Nvidia. Lihat grup node terkelola untuk mempelajari selengkapnya.
Untuk mengonfigurasi cluster Amazon EKS Anda untuk menambahkan grup GPU-enabled node, lakukan prosedur berikut:
Untuk menambahkan grup simpul yang diaktifkan GPU
-
Buat grup GPU-enabled node dengan perintah create-nodegroup berikut. Pastikan untuk mengganti parameter yang benar untuk cluster Amazon EKS Anda. Gunakan jenis instance yang mendukung Spark CuDF, seperti P4, P3, G5 atau G4dn.
aws eks create-nodegroup \ --cluster-nameEKS_CLUSTER_NAME\ --nodegroup-nameNODEGROUP_NAME\ --scaling-config minSize=0,maxSize=5,desiredSize=2CHOOSE_APPROPRIATELY\ --ami-type AL2_x86_64_GPU \ --node-roleNODE_ROLE\ --subnetsSUBNETS_SPACE_DELIMITED\ --remote-access ec2SshKey=SSH_KEY\ --instance-typesGPU_INSTANCE_TYPE\ --disk-sizeDISK_SIZE\ --regionAWS_REGION -
Instal plugin perangkat Nvidia di cluster Anda untuk memancarkan jumlah GPU pada setiap node cluster Anda dan untuk menjalankan GPU-enabled wadah di cluster Anda. Jalankan kode berikut untuk menginstal plugin:
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.9.0/nvidia-device-plugin.yml -
Untuk memvalidasi berapa banyak GPU yang tersedia di setiap node cluster Anda, jalankan perintah berikut:
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
Untuk menjalankan tugas Spark cuDF
-
Kirim pekerjaan Spark cuDF ke Amazon EMR Anda di kluster EKS. Kode berikut menunjukkan contoh perintah untuk memulai pekerjaan. Pertama kali Anda menjalankan pekerjaan, mungkin perlu beberapa menit untuk mengunduh gambar dan men-cache pada node.
aws emr-containers start-job-run \ --virtual-cluster-idVIRTUAL_CLUSTER_ID\ --execution-role-arnJOB_EXECUTION_ROLE\ --release-label emr-6.9.0-spark-rapids-latest \ --job-driver '{"sparkSubmitJobDriver": {"entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar","entryPointArguments": ["10000"], "sparkSubmitParameters":"--class org.apache.spark.examples.SparkPi "}}' \ ---configuration-overrides '{"applicationConfiguration": [{"classification": "spark-defaults","properties": {"spark.executor.instances": "2","spark.executor.memory": "2G"}}],"monitoringConfiguration": {"cloudWatchMonitoringConfiguration": {"logGroupName": "LOG_GROUP _NAME"},"s3MonitoringConfiguration": {"logUri": "LOG_GROUP_STREAM"}}}' -
Untuk memvalidasi bahwa Spark CuDF Accelerator diaktifkan, periksa log driver Spark. Log ini disimpan baik di CloudWatch atau di lokasi S3 yang Anda tentukan saat menjalankan
start-job-runperintah. Contoh berikut umumnya menunjukkan seperti apa garis log:22/11/15 00:12:44 INFO RapidsPluginUtils: RAPIDS Accelerator build: {version=22.08.0-amzn-0, user=release, url=, date=2022-11-03T03:32:45Z, revision=, cudf_version=22.08.0, branch=} 22/11/15 00:12:44 INFO RapidsPluginUtils: RAPIDS Accelerator JNI build: {version=22.08.0, user=, url=https://github.com/NVIDIA/spark-rapids-jni.git, date=2022-08-18T04:14:34Z, revision=a1b23cd_sample, branch=HEAD} 22/11/15 00:12:44 INFO RapidsPluginUtils: cudf build: {version=22.08.0, user=, url=https://github.com/rapidsai/cudf.git, date=2022-08-18T04:14:34Z, revision=a1b23ce_sample, branch=HEAD} 22/11/15 00:12:44 WARN RapidsPluginUtils: RAPIDS Accelerator 22.08.0-amzn-0 using cudf 22.08.0. 22/11/15 00:12:44 WARN RapidsPluginUtils: spark.rapids.sql.multiThreadedRead.numThreads is set to 20. 22/11/15 00:12:44 WARN RapidsPluginUtils: RAPIDS Accelerator is enabled, to disable GPU support set `spark.rapids.sql.enabled` to false. 22/11/15 00:12:44 WARN RapidsPluginUtils: spark.rapids.sql.explain is set to `NOT_ON_GPU`. Set it to 'NONE' to suppress the diagnostics logging about the query placement on the GPU.
-
Untuk melihat operasi yang akan dijalankan pada GPU, lakukan langkah-langkah berikut untuk mengaktifkan logging tambahan. Perhatikan konfigurasi
spark.rapids.sql.explain : ALL"”.aws emr-containers start-job-run \ --virtual-cluster-idVIRTUAL_CLUSTER_ID\ --execution-role-arnJOB_EXECUTION_ROLE\ --release-label emr-6.9.0-spark-rapids-latest \ --job-driver '{"sparkSubmitJobDriver": {"entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar","entryPointArguments": ["10000"], "sparkSubmitParameters":"--class org.apache.spark.examples.SparkPi "}}' \ ---configuration-overrides '{"applicationConfiguration": [{"classification": "spark-defaults","properties": {"spark.rapids.sql.explain":"ALL","spark.executor.instances": "2","spark.executor.memory": "2G"}}],"monitoringConfiguration": {"cloudWatchMonitoringConfiguration": {"logGroupName": "LOG_GROUP_NAME"},"s3MonitoringConfiguration": {"logUri": "LOG_GROUP_STREAM"}}}'Perintah sebelumnya adalah contoh pekerjaan yang menggunakan GPU. Outputnya akan terlihat seperti contoh di bawah ini. Lihat kunci ini untuk bantuan untuk memahami output:
-
*— menandai operasi yang bekerja pada GPU -
!— menandai operasi yang tidak dapat berjalan pada GPU -
@— menandai operasi yang bekerja pada GPU, tetapi tidak akan berjalan karena ada di dalam paket yang tidak dapat berjalan pada GPU
22/11/15 01:22:58 INFO GpuOverrides: Plan conversion to the GPU took 118.64 ms 22/11/15 01:22:58 INFO GpuOverrides: Plan conversion to the GPU took 4.20 ms 22/11/15 01:22:58 INFO GpuOverrides: GPU plan transition optimization took 8.37 ms 22/11/15 01:22:59 WARN GpuOverrides: *Exec <ProjectExec> will run on GPU *Expression <Alias> substring(cast(date#149 as string), 0, 7) AS month#310 will run on GPU *Expression <Substring> substring(cast(date#149 as string), 0, 7) will run on GPU *Expression <Cast> cast(date#149 as string) will run on GPU *Exec <SortExec> will run on GPU *Expression <SortOrder> date#149 ASC NULLS FIRST will run on GPU *Exec <ShuffleExchangeExec> will run on GPU *Partitioning <RangePartitioning> will run on GPU *Expression <SortOrder> date#149 ASC NULLS FIRST will run on GPU *Exec <UnionExec> will run on GPU !Exec <ProjectExec> cannot run on GPU because not all expressions can be replaced @Expression <AttributeReference> customerID#0 could run on GPU @Expression <Alias> Charge AS kind#126 could run on GPU @Expression <Literal> Charge could run on GPU @Expression <AttributeReference> value#129 could run on GPU @Expression <Alias> add_months(2022-11-15, cast(-(cast(_we0#142 as bigint) + last_month#128L) as int)) AS date#149 could run on GPU ! <AddMonths> add_months(2022-11-15, cast(-(cast(_we0#142 as bigint) + last_month#128L) as int)) cannot run on GPU because GPU does not currently support the operator class org.apache.spark.sql.catalyst.expressions.AddMonths @Expression <Literal> 2022-11-15 could run on GPU @Expression <Cast> cast(-(cast(_we0#142 as bigint) + last_month#128L) as int) could run on GPU @Expression <UnaryMinus> -(cast(_we0#142 as bigint) + last_month#128L) could run on GPU @Expression <Add> (cast(_we0#142 as bigint) + last_month#128L) could run on GPU @Expression <Cast> cast(_we0#142 as bigint) could run on GPU @Expression <AttributeReference> _we0#142 could run on GPU @Expression <AttributeReference> last_month#128L could run on GPU -