Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Dengan Amazon EMR di EKS, Anda dapat menjalankan pekerjaan untuk Nvidia RAPIDS Accelerator untuk Apache Spark. Tutorial ini mencakup cara menjalankan pekerjaan Spark menggunakan RAPIDS pada jenis EC2 instance graphics processing unit (GPU). Tutorial menggunakan versi berikut:
-
Amazon EMR pada versi rilis EKS 6.9.0 dan yang lebih baru
-
Apache Spark 3.x
Anda dapat mempercepat Spark dengan jenis instans EC2 GPU Amazon dengan menggunakan plugin Nvidia RAPIDS Accelerator for
Sebelum Anda mulai, pastikan Anda memiliki sumber daya berikut.
-
Amazon EMR pada klaster virtual EKS
-
Cluster Amazon EKS dengan grup node berkemampuan GPU
Cluster virtual Amazon EKS adalah pegangan terdaftar ke namespace Kubernetes di cluster Amazon EKS, dan dikelola oleh Amazon EMR di EKS. Pegangan ini memungkinkan Amazon EMR untuk menggunakan namespace Kubernetes sebagai tujuan untuk menjalankan pekerjaan. Untuk informasi selengkapnya tentang cara menyiapkan klaster virtual, lihat Menyiapkan Amazon EMR di EKS di panduan ini.
Anda harus mengonfigurasi klaster virtual Amazon EKS dengan grup node yang memiliki instance GPU. Anda harus mengkonfigurasi node dengan plugin perangkat Nvidia. Lihat grup node terkelola untuk mempelajari lebih lanjut.
Untuk mengonfigurasi klaster Amazon EKS Anda untuk menambahkan grup node berkemampuan GPU, lakukan prosedur berikut:
Untuk menambahkan grup node yang diaktifkan GPU
-
Buat grup node berkemampuan GPU dengan perintah create-nodegroup berikut. Pastikan untuk mengganti parameter yang benar untuk cluster Amazon EKS Anda. Gunakan jenis instans yang mendukung Spark RAPIDS, seperti P4, P3, G5 atau G4dn.
aws eks create-nodegroup \ --cluster-name
EKS_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 GPUs pada setiap node cluster Anda dan untuk menjalankan kontainer berkemampuan GPU 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 GPUs 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 pekerjaan Spark RAPIDS
-
Kirimkan pekerjaan Spark RAPIDS ke EMR Amazon Anda di klaster EKS. Kode berikut menunjukkan contoh perintah untuk memulai pekerjaan. Pertama kali Anda menjalankan pekerjaan, mungkin perlu beberapa menit untuk mengunduh gambar dan menyimpannya di node.
aws emr-containers start-job-run \ --virtual-cluster-id
VIRTUAL_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 Akselerator Spark RAPIDS diaktifkan, periksa log driver Spark. Log ini disimpan baik di dalam CloudWatch atau di lokasi S3 yang Anda tentukan saat Anda menjalankan
start-job-run
perintah. 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-id
VIRTUAL_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 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
-