Anda dapat melampirkan akselerator GPU ke workload batch Google Cloud Serverless for Apache Spark untuk mencapai hasil berikut:
Mempercepat pemrosesan workload analisis data berskala besar.
Percepat pelatihan model pada set data besar menggunakan library machine learning GPU.
Melakukan analisis data tingkat lanjut, seperti pemrosesan video atau bahasa alami.
Semua runtime Spark Serverless for Apache Spark yang didukung menambahkan library Spark RAPIDS ke setiap node workload. Runtime Spark Serverless for 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 dipercepat GPU.
Manfaat GPU
Berikut beberapa manfaat saat Anda menggunakan GPU dengan workload Spark Serverless for Apache Spark:
Peningkatan performa: Akselerasi GPU dapat meningkatkan performa workload Spark secara signifikan, terutama untuk tugas-tugas yang intensif komputasi, seperti machine learning dan deep learning, pemrosesan grafik, dan analisis kompleks.
Pelatihan model yang lebih cepat: Untuk tugas machine learning, memasang GPU dapat mengurangi waktu yang diperlukan untuk melatih model secara signifikan, sehingga memungkinkan ilmuwan dan engineer data melakukan iterasi dan bereksperimen dengan cepat.
Skalabilitas: Pelanggan dapat menambahkan lebih banyak node GPU atau GPU yang lebih canggih ke node untuk menangani kebutuhan pemrosesan yang semakin kompleks.
Efisiensi biaya: Meskipun GPU memerlukan investasi awal, Anda dapat menghemat biaya dari waktu ke 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 pemrosesan bahasa alami, pada set data berukuran 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 melampirkan GPU NVIDIA A100 atau NVIDIA L4 ke workload batch Serverless for Apache Spark. Google Cloud Akselerator A100 dan L4 tunduk pada ketersediaan regional GPU Compute Engine.
Library XGBoost hanya disediakan untuk workload yang diakselerasi GPU Serverless for Apache Spark saat menggunakan Serverless for Apache Spark versi runtime Spark 1.x.
Batch yang dipercepat GPU Serverless untuk Apache Spark dengan XGBoost menggunakan kuota Compute Engine yang lebih besar. Misalnya, untuk menjalankan workload batch serverless yang menggunakan GPU NVIDIA L4, Anda harus mengalokasikan kuota NVIDIA_L4_GPUS.
Tugas yang diaktifkan akselerator tidak kompatibel dengan kebijakan organisasi
constraints/compute.requireShieldedVm. Jika organisasi Anda menerapkan kebijakan ini, tugas yang diaktifkan akseleratornya tidak akan berhasil dijalankan.Anda harus menyetel set karakter default ke UTF-8 saat menggunakan akselerasi GPU RAPIDS dengan runtime Serverless for 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 tingkat harga premium. Lihat harga Serverless for Apache Spark untuk mengetahui informasi harga akselerator.
Sebelum memulai
Sebelum membuat beban kerja batch tanpa server dengan akselerator GPU yang 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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
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 Mulai, lakukan tindakan berikut:
- Masukkan nama yang unik secara global yang memenuhi persyaratan penamaan bucket.
- Untuk menambahkan
label bucket,
luaskan bagian Label (),
klik add_box
Tambahkan label, lalu tentukan
keydanvalueuntuk label Anda.
-
Di bagian Pilih tempat untuk menyimpan data Anda, lakukan tindakan berikut:
- Pilih Jenis lokasi.
- 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 dengan 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 Setelan replikasi, klik Konfigurasi untuk mengonfigurasi setelan bagi tugas replikasi.
Panel Konfigurasi replikasi lintas bucket akan muncul.
- Untuk memfilter objek yang akan direplikasi menurut awalan nama objek, masukkan awalan yang ingin Anda sertakan atau kecualikan objeknya, lalu klik Tambahkan awalan.
- Untuk menetapkan kelas penyimpanan bagi objek yang direplikasi, pilih kelas penyimpanan dari menu Kelas penyimpanan. 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 beban kerja intensif data, pilih Aktifkan namespace hierarkis di bucket ini.
- Di bagian Pilih cara mengontrol akses ke objek, pilih apakah bucket Anda menerapkan pencegahan akses publik atau tidak, lalu pilih metode kontrol akses untuk objek bucket Anda.
-
Di bagian Pilih cara melindungi data objek, lakukan
tindakan berikut:
- Pilih salah satu opsi di bagian Perlindungan data yang ingin Anda tetapkan untuk bucket Anda.
- Untuk mengaktifkan penghapusan sementara, klik kotak centang Kebijakan penghapusan sementara (Untuk pemulihan data), dan tentukan jumlah hari Anda ingin mempertahankan objek setelah penghapusan.
- Untuk menyetel Pembuatan Versi Objek, klik kotak centang Pembuatan versi objek (Untuk kontrol versi), dan tentukan jumlah maksimum versi per objek dan jumlah hari setelah versi lama berakhir.
- Untuk mengaktifkan kebijakan retensi pada objek dan bucket, klik kotak centang Retensi (Untuk kepatuhan), lalu lakukan hal berikut:
- Untuk mengaktifkan Penguncian Retensi Objek, centang kotak Aktifkan retensi objek.
- Untuk mengaktifkan Bucket Lock, centang kotak Setel kebijakan retensi bucket, lalu pilih satuan waktu dan durasi untuk periode retensi data Anda.
- Untuk memilih cara mengenkripsi data objek Anda, luaskan bagian Enkripsi data (), lalu pilih metode Enkripsi data.
- Pilih salah satu opsi di bagian Perlindungan data yang ingin Anda tetapkan untuk bucket Anda.
-
Di bagian Mulai, lakukan tindakan berikut:
- Klik Create.
Membuat workload batch serverless dengan akselerator GPU
Kirimkan workload batch Serverless for 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 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 Serverless for Apache Spark dengan lima pekerja, dengan setiap pekerja dipercepat menggunakan 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 beban kerja.
- BUCKET_NAME: Nama bucket Cloud Storage Anda. Spark mengupload dependensi workload ke folder
/dependenciesdi bucket ini sebelum menjalankan workload batch. - --version: Semua runtime Serverless for Apache Spark yang Didukung Google Cloud menambahkan library RAPIDS ke setiap node beban kerja yang diakselerasi GPU. Hanya versi runtime 1.1 yang menambahkan library XGBoost ke setiap node workload yang dipercepat GPU.
--properties (lihat properti alokasi resource Spark) :
spark.dataproc.driverEnv.LANG=C.UTF-8danspark.executorEnv.LANG=C.UTF-8(wajib ada pada versi runtime sebelum2.2): Properti ini menetapkan himpunan karakter default ke C.UTF-8.spark.dataproc.executor.compute.tier=premium(wajib): Beban kerja yang dipercepat dengan GPU ditagih menggunakan Unit Komputasi Data (DCU) premium. Lihat Harga akselerator Serverless 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. Contoh tugas 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): Minimal harus 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 dan24,48, atau96core memiliki2,4, atau8GPU yang terpasang ke setiap eksekutor. Semua konfigurasi lainnya memiliki1GPU yang terpasang.spark.dataproc.executor.disk.size(wajib): GPU L4 memiliki ukuran disk tetap sebesar 375 GB, kecuali untuk konfigurasi dengan24,48, atau96core, yang masing-masing memiliki750,1,500, atau3,000GB. Jika Anda menetapkan properti ini ke nilai yang berbeda saat mengirimkan beban kerja yang dipercepat L4, akan terjadi error. Jika Anda memilih GPU A100 40 atau A100 80, ukuran yang valid adalah 375 g, 750 g, 1.500 g, 3.000 g, 6.000 g, dan 9.000 g.spark.executor.memory(opsional) danspark.executor.memoryOverhead(dibatasi): Anda dapat menyetel memori, tetapi tidak dapat menyetel memoryOverhead. Jumlah memori yang tersedia yang tidak digunakan oleh properti yang ditetapkan diterapkan ke properti yang tidak ditetapkan.spark.executor.memoryOverheadditetapkan ke 40% dari 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 Spark RAPIDS (opsional): Secara default, Serverless for Apache Spark menetapkan nilai properti Spark RAPIDS 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 disetel. NVIDIA merekomendasikan untuk mengaktifkan pengelola shuffle RAPIDS saat menggunakan GPU untuk meningkatkan performa. Untuk melakukannya, tetapkanspark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManagersaat Anda mengirimkan beban kerja.spark.rapids.sql.concurrentGpuTasks= minimum dari (gpuMemoryinMB/ 8, 4)spark.rapids.shuffle.multiThreaded.writer.threads= minimum (inti CPU di VM / jumlah GPU per VM, 32)spark.rapids.shuffle.multiThreaded.reader.threads= minimum (inti CPU di VM / jumlah GPU per VM, 32)
Lihat Konfigurasi RAPIDS Accelerator for Apache Spark untuk menyetel properti Spark RAPIDS, dan Konfigurasi Lanjutan RAPIDS Accelerator for Apache Spark untuk menyetel properti lanjutan Spark.