Anda dapat memasang akselerator GPU ke workload batch Managed Service untuk Apache Spark guna mencapai hasil berikut:
Mempercepat pemrosesan workload analisis data berskala besar.
Mempercepat pelatihan model pada set data besar menggunakan library machine learning GPU.
Melakukan analisis data tingkat lanjut, seperti pemrosesan video atau natural language.
Semua runtime Managed Service untuk Apache Spark yang didukung menambahkan library NVIDIA cuDF untuk Apache Spark ke setiap node workload. Runtime Managed Service untuk Apache Spark versi 1.1 juga menambahkan library XGBoost ke node workload. Library ini menyediakan alat transformasi data dan machine learning yang canggih, yang dapat Anda gunakan dalam workload yang diakselerasi GPU.
Manfaat GPU
Berikut beberapa manfaat saat Anda menggunakan GPU dengan workload Spark Managed Service untuk Apache Spark:
Peningkatan performa: Akselerasi GPU dapat meningkatkan performa workload Spark secara signifikan, terutama untuk tugas-tugas yang memerlukan komputasi intensif, seperti machine learning dan deep learning, pemrosesan grafik, dan analisis yang kompleks.
Pelatihan model yang lebih cepat: Untuk tugas machine learning, memasang GPU dapat secara signifikan mengurangi waktu yang diperlukan untuk melatih model, sehingga data scientist dan engineer dapat melakukan iterasi dan eksperimen dengan cepat.
Skalabilitas: Pelanggan dapat menambahkan lebih banyak node GPU atau GPU yang lebih canggih ke node untuk menangani kebutuhan pemrosesan yang makin kompleks.
Efisiensi biaya: Meskipun GPU memerlukan investasi awal, Anda dapat menghemat biaya seiring waktu karena waktu pemrosesan yang lebih singkat dan pemanfaatan resource yang lebih efisien.
Analisis data yang ditingkatkan: Akselerasi GPU memungkinkan Anda melakukan analisis lanjutan, seperti analisis gambar dan video serta natural language processing, pada set data besar.
Produk yang lebih baik: Pemrosesan yang lebih cepat memungkinkan pengambilan keputusan yang lebih cepat dan aplikasi yang lebih responsif.
Batasan dan pertimbangan
Akselerator GPU tersedia dengan tingkat harga premium.
Anda dapat memasang GPU NVIDIA A100 atau NVIDIA L4 ke workload batch Managed Service untuk Apache Spark. Akselerator A100 dan L4 tunduk pada ketersediaan regional GPU Compute Engine.
Library XGBoost hanya disediakan untuk workload yang diakselerasi GPU Managed Service untuk Apache Spark saat menggunakan Spark runtime versi 1.x Managed Service untuk Apache Spark.
Batch yang dipercepat GPU Managed Service for Apache Spark dengan XGBoost menggunakan kuota Compute Engine yang ditingkatkan. Misalnya, untuk menjalankan workload batch serverless yang menggunakan GPU NVIDIA L4, Anda harus mengalokasikan kuota NVIDIA_L4_GPUS.
Tugas yang mendukung akselerator tidak kompatibel dengan kebijakan organisasi
constraints/compute.requireShieldedVm. Jika organisasi Anda menerapkan kebijakan ini, tugas yang mendukung akselerator tidak akan berjalan dengan baik.Anda harus menetapkan himpunan karakter default ke UTF-8 saat menggunakan akselerasi GPU CUDA-X dengan runtime Managed Service untuk Apache Spark yang didukung sebelum versi
2.2. Lihat Membuat workload batch serverless dengan akselerator GPU untuk mengetahui informasi selengkapnya.
Harga
Akselerator GPU tersedia dengan paket harga premium. Lihat harga Managed Service untuk Apache Spark untuk mengetahui informasi harga akselerator.
Sebelum memulai
Sebelum membuat workload batch serverless dengan akselerator GPU terpasang, lakukan hal berikut:
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Compute Engine, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Compute Engine, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - Di konsol Google Cloud , buka halaman Buckets Cloud Storage.
- Klik Create.
- Di halaman Buat bucket, masukkan informasi bucket Anda. Untuk melanjutkan ke
langkah berikutnya, klik Lanjutkan.
-
Di bagian Get started, lakukan tindakan berikut:
- Masukkan nama yang unik secara global dan memenuhi persyaratan penamaan bucket.
- Untuk menambahkan label bucket, luaskan bagian Labels (), klik add_box
Add label, lalu tentukan
keydanvalueuntuk label Anda.
-
Di bagian Choose where to store your data, lakukan tindakan berikut:
- Pilih Location type.
- Pilih lokasi tempat data bucket Anda disimpan secara permanen dari menu drop-down Location type.
- Jika memilih jenis lokasi dual-region, Anda juga dapat memilih untuk mengaktifkan replikasi turbo menggunakan kotak centang yang relevan.
- Untuk menyiapkan replikasi lintas bucket, pilih
Add cross-bucket replication via Storage Transfer Service dan
ikuti langkah-langkah berikut:
Menyiapkan replikasi lintas bucket
- Di menu Bucket, pilih bucket.
Di bagian Replication settings, klik Configure guna mengonfigurasi setelan untuk tugas replikasi.
Panel Configure cross-bucket replication akan muncul.
- Untuk memfilter objek yang akan direplikasi berdasarkan awalan nama objek, masukkan awalan yang ingin Anda sertakan atau kecualikan objek, lalu klik Tambahkan awalan.
- Untuk menetapkan kelas penyimpanan bagi objek yang direplikasi, pilih kelas penyimpanan dari menu Storage class. Jika Anda melewati langkah ini, objek yang direplikasi akan menggunakan kelas penyimpanan bucket tujuan secara default.
- Klik Done.
-
Di bagian Choose how to store your data, lakukan tindakan berikut:
- Pilih kelas penyimpanan default untuk bucket atau Autoclass untuk pengelolaan kelas penyimpanan otomatis untuk data bucket Anda.
- Untuk mengaktifkan namespace hierarkis, di bagian Optimalkan penyimpanan untuk workload yang memerlukan banyak data, pilih Aktifkan namespace hierarkis di bucket ini.
- Di bagian Choose how to control access to objects, pilih apakah bucket Anda menerapkan pencegahan akses publik atau tidak, lalu pilih metode kontrol akses untuk objek bucket Anda.
-
Di bagian Choose how to protect object data, lakukan hal berikut:
- Pilih salah satu opsi di bagian Perlindungan data yang ingin Anda tetapkan untuk bucket.
- Untuk mengaktifkan penghapusan sementara, centang kotak Kebijakan penghapusan sementara (Untuk pemulihan data), dan tentukan jumlah hari yang Anda inginkan untuk mempertahankan objek setelah penghapusan.
- Untuk menetapkan Object Versioning, klik kotak centang Object versioning (Untuk kontrol versi), lalu tentukan jumlah maksimum versi per objek dan jumlah hari setelah versi lama tidak berlaku.
- Untuk mengaktifkan kebijakan retensi pada objek dan bucket, klik kotak centang Retention (For compliance), lalu lakukan hal berikut:
- Untuk mengaktifkan Kunci Retensi Objek, klik kotak centang Aktifkan retensi objek.
- Untuk mengaktifkan Bucket Lock, centang kotak Set bucket retention policy, lalu pilih satuan waktu dan lama periode retensi data.
- Untuk memilih cara data objek Anda akan dienkripsi, luaskan bagian Data encryption (), lalu pilih metode Data encryption.
- Pilih salah satu opsi di bagian Perlindungan data yang ingin Anda tetapkan untuk bucket.
-
Di bagian Get started, lakukan tindakan berikut:
- Klik Create.
Membuat workload batch serverless dengan akselerator GPU
Kirim workload batch Managed Service untuk Apache Spark yang menggunakan GPU NVIDIA L4 untuk menjalankan tugas PySpark yang diparalelkan. Ikuti langkah-langkah berikut menggunakan gcloud CLI:
Klik Expand me, lalu buat dan simpan kode PySpark yang tercantum ke file
test-py-spark-gpu.pydi komputer lokal Anda menggunakan editor teks atau editor kode.#!/usr/bin/env python """S8s Accelerators Example.""" import subprocess from typing import Any from pyspark.sql import SparkSession from pyspark.sql.functions import col from pyspark.sql.types import IntegerType from pyspark.sql.types import StructField from pyspark.sql.types import StructType spark = SparkSession.builder.appName("joindemo").getOrCreate() def get_num_gpus(_: Any) -> int: """Returns the number of GPUs.""" p_nvidia_smi = subprocess.Popen( ["nvidia-smi", "-L"], stdin=None, stdout=subprocess.PIPE ) p_wc = subprocess.Popen( ["wc", "-l"], stdin=p_nvidia_smi.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, ) [out, _] = p_wc.communicate() return int(out) num_workers = 5 result = ( spark.sparkContext.range(0, num_workers, 1, num_workers) .map(get_num_gpus) .collect() ) num_gpus = sum(result) print(f"Total accelerators: {num_gpus}") # Run the join example schema = StructType([StructField("value", IntegerType(), True)]) df = ( spark.sparkContext.parallelize(range(1, 10000001), 6) .map(lambda x: (x,)) .toDF(schema) ) df2 = ( spark.sparkContext.parallelize(range(1, 10000001), 6) .map(lambda x: (x,)) .toDF(schema) ) joined_df = ( df.select(col("value").alias("a")) .join(df2.select(col("value").alias("b")), col("a") == col("b")) .explain() )
Gunakan gcloud CLI di komputer lokal Anda untuk mengirimkan tugas batch serverless Managed Service untuk Apache Spark dengan lima worker, dengan setiap worker dipercepat dengan GPU L4:
gcloud dataproc batches submit pyspark test-py-spark-gpu.py \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_NAME \ --version=1.1 \ --properties=spark.dataproc.executor.compute.tier=premium,spark.dataproc.executor.disk.tier=premium,spark.dataproc.executor.resource.accelerator.type=l4,spark.executor.instances=5,spark.dataproc.driverEnv.LANG=C.UTF-8,spark.executorEnv.LANG=C.UTF-8,spark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager
Catatan:
- PROJECT_ID: Project ID Google Cloud Anda.
- REGION: Region Compute Engine yang tersedia untuk menjalankan workload.
- BUCKET_NAME: Nama bucket Cloud Storage Anda. Spark mengupload dependensi workload ke folder
/dependenciesdi bucket ini sebelum menjalankan workload batch. - --version: Semua Runtime Managed Service untuk Apache Spark yang didukung menambahkan library NVIDIA cuDF untuk Apache Spark ke setiap node workload yang diakselerasi GPU. Hanya runtime versi 1.1 yang menambahkan library XGBoost ke setiap node workload yang diakselerasi GPU.
--properties (lihat properti alokasi resource Spark) :
spark.dataproc.driverEnv.LANG=C.UTF-8danspark.executorEnv.LANG=C.UTF-8(diperlukan dengan versi runtime sebelum2.2): Properti ini menetapkan himpunan karakter default ke C.UTF-8.spark.dataproc.executor.compute.tier=premium(wajib): Workload yang dipercepat GPU ditagih menggunakan Data Compute Unit (DCU) premium. Lihat harga Akselerator Managed Service untuk Apache Spark.spark.dataproc.executor.disk.tier=premium(wajib): Node dengan akselerator A100-40, A100-80, atau L4 harus menggunakan tingkat disk premium.spark.dataproc.executor.resource.accelerator.type=l4(wajib): Hanya satu jenis GPU yang harus ditentukan. Tugas contoh memilih GPU L4. Jenis akselerator berikut dapat ditentukan dengan nama argumen berikut:Jenis GPU Nama argumen A100 40GB a100-40A100 80GB a100-80spark.executor.instances=5(wajib): Harus minimal dua. Tetapkan ke lima untuk contoh ini.spark.executor.cores(opsional): Anda dapat menetapkan properti ini untuk menentukan jumlah vCPU inti. Nilai yang valid untuk GPU L4 adalah4, default, atau8,12,16,24,48, atau96. Satu-satunya nilai yang valid dan default untuk GPU A100 adalah12. Konfigurasi dengan GPU L4 dan core24,48, atau96memiliki GPU2,4, atau8yang terpasang ke setiap eksekutor. Semua konfigurasi lainnya memiliki GPU1yang terpasang.spark.dataproc.executor.disk.size(wajib): GPU L4 memiliki ukuran disk tetap sebesar 375 GB, kecuali untuk konfigurasi dengan core24,48, atau96, yang masing-masing memiliki750,1,500, atau3,000GB. Jika Anda menetapkan properti ini ke nilai yang berbeda saat mengirimkan workload yang dipercepat L4, error akan terjadi. Jika Anda memilih GPU A100 40 atau A100 80, ukuran yang valid adalah 375g, 750g, 1500g, 3000g, 6000g, dan 9000g.spark.executor.memory(opsional) danspark.executor.memoryOverhead(dibatasi): Anda dapat menetapkan memori, tetapi bukan memoryOverhead. Jumlah memori yang tersedia yang tidak digunakan oleh properti yang ditetapkan akan diterapkan ke properti yang tidak ditetapkan.spark.executor.memoryOverheadditetapkan ke 40% memori yang tersedia untuk workload batch PySpark, dan 10% untuk workload lainnya (lihat Properti alokasi resource Spark).Tabel berikut menunjukkan jumlah memori maksimum yang dapat ditetapkan untuk berbagai konfigurasi GPU A100 dan L4. Nilai minimum untuk salah satu properti adalah
1024MB.A100 (40 GB) A100 (80 GB) L4 (4 core) L4 (8 core) L4 (12 core) L4 (16 core) L4 (24 core) L4 (48 core) L4 (96 core) Total memori maksimum (MB) 78040 165080 13384 26768 40152 53536 113072 160608 321216 Properti library NVIDIA cuDF untuk Apache Spark (opsional): Secara default, Managed Service untuk Apache Spark menetapkan nilai properti library NVIDIA cuDF untuk Apache Spark berikut:
spark.plugins=com.nvidia.spark.SQLPluginspark.executor.resource.gpu.amount=1spark.task.resource.gpu.amount=1/$spark_executor_coresspark.shuffle.manager=''. Secara default, properti ini tidak ditetapkan. NVIDIA merekomendasikan untuk mengaktifkan pengelola shuffle CUDA-X saat menggunakan GPU untuk meningkatkan performa. Untuk melakukannya, tetapkanspark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManagersaat Anda mengirimkan workload.spark.rapids.sql.concurrentGpuTasks= minimum (gpuMemoryinMB/ 8, 4)spark.rapids.shuffle.multiThreaded.writer.threads= minimum of (cpu cores in the VM / gpu count per VM, 32)spark.rapids.shuffle.multiThreaded.reader.threads= minimum of (cpu cores in the VM / gpu count per VM, 32)
Lihat Plugin NVIDIA cuDF untuk Konfigurasi Apache Spark guna menetapkan properti library NVIDIA cuDF untuk Apache Spark, dan Plugin NVIDIA cuDF untuk Konfigurasi Lanjutan Apache Spark guna menetapkan properti lanjutan Spark.