Menggunakan GPU dengan Dataproc Serverless

Anda dapat memasang akselerator GPU ke workload batch Dataproc Serverless untuk mendapatkan hasil berikut:

  • Mempercepat pemrosesan beban kerja analisis data berskala besar.

  • Mempercepat pelatihan model pada set data besar menggunakan library machine learning GPU.

  • Melakukan analisis data lanjutan, seperti pemrosesan video atau bahasa alam.

Semua runtime Dataproc Serverless Spark yang didukung menambahkan library RAPIDS Spark ke setiap node workload. Runtime Spark Dataproc Serverless 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 beban kerja yang dipercepat GPU.

Manfaat GPU

Berikut adalah beberapa manfaat saat Anda menggunakan GPU dengan workload Spark Dataproc Serverless:

  • Peningkatan performa: Akselerasi GPU dapat meningkatkan performa workload Spark secara signifikan, terutama untuk tugas yang membutuhkan komputasi intensif, seperti machine dan deep learning, pemrosesan grafik, dan analisis kompleks.

  • Pelatihan model yang lebih cepat: Untuk tugas machine learning, memasang GPU dapat secara drastis mengurangi waktu yang diperlukan untuk melatih model, sehingga data scientist dan engineer dapat 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 seiring waktu karena waktu pemrosesan yang lebih singkat dan penggunaan 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 besar.

  • Produk yang lebih baik: Pemrosesan yang lebih cepat memungkinkan pengambilan keputusan yang lebih cepat dan aplikasi yang lebih responsif.

Batasan dan pertimbangan

Harga

Lihat Harga Dataproc Serverless untuk informasi harga akselerator.

Sebelum memulai

Sebelum membuat beban kerja batch serverless dengan akselerator GPU yang terpasang, lakukan hal berikut:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Aktifkan API Dataproc, Compute Engine, and Cloud Storage.

    Mengaktifkan API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Aktifkan API Dataproc, Compute Engine, and Cloud Storage.

    Mengaktifkan API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.

    Buka halaman Bucket

  13. Klik Buat bucket.
  14. Di halaman Buat bucket, masukkan informasi bucket Anda. Untuk melanjutkan ke langkah berikutnya, klik Lanjutkan.
    • Untuk Beri nama bucket, masukkan nama yang memenuhi persyaratan penamaan bucket.
    • Untuk Pilih tempat untuk menyimpan data, lakukan tindakan berikut:
      • Pilih opsi Jenis lokasi.
      • Pilih opsi Lokasi.
    • Untuk Memilih kelas penyimpanan default untuk data Anda, pilih kelas penyimpanan.
    • Untuk Memilih cara mengontrol akses ke objek, pilih opsi Kontrol akses.
    • Untuk Setelan lanjutan (opsional), tentukan metode enkripsi, kebijakan retensi, atau label bucket.
  15. Klik Buat.

Membuat workload batch serverless dengan akselerator GPU

Kirimkan workload batch Dataproc Serverless yang menggunakan GPU NVIDIA L4 untuk menjalankan tugas PySpark yang diparalelkan. Ikuti langkah-langkah berikut menggunakan gcloud CLI:

  1. Klik Luaskan, lalu buat dan simpan kode PySpark yang tercantum ke file test-py-spark-gpu.py di 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()
    )
  2. Gunakan gcloud CLI di komputer lokal Anda untuk mengirimkan tugas batch serverless Dataproc Serverless dengan lima pekerja, dengan setiap pekerja diakselerasi 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: ID project 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 /dependencies di bucket ini sebelum menjalankan workload batch.
  • --version: Semua Runtime Dataproc Serverless yang Didukung menambahkan library RAPIDS ke setiap node beban kerja yang dipercepat GPU. Hanya runtime versi 1.1 yang menambahkan library XGBoost ke setiap node beban kerja yang diakselerasi GPU.
  • --properties (lihat Properti alokasi resource Spark) :

    • spark.dataproc.driverEnv.LANG=C.UTF-8 dan spark.executorEnv.LANG=C.UTF-8 (diperlukan dengan versi runtime sebelum 2.2): Properti ini menetapkan set karakter default ke C.UTF-8.
    • spark.dataproc.executor.compute.tier=premium (wajib): Beban kerja yang dipercepat GPU ditagih menggunakan Unit Komputasi Data (DCU) premium. Lihat Harga Accelerator Dataproc Serverless.

    • 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-40
      A100 80GB a100-80

    • spark.executor.instances=5 (wajib diisi): Minimal harus dua. Tetapkan ke lima untuk contoh ini.

    • spark.executor.cores (opsional): Anda dapat menetapkan properti ini untuk menentukan jumlah vCPU core. Nilai yang valid untuk GPU L4 adalah 4, default, atau 8, 12, 16, 24, 48, atau 96. Satu-satunya nilai yang valid dan default untuk GPU A100 adalah 12. Konfigurasi dengan GPU L4 dan core 24, 48, atau 96 memiliki GPU 2, 4, atau 8 yang terpasang ke setiap eksekutor. Semua konfigurasi lainnya memiliki GPU 1 yang terpasang.

    • spark.dataproc.executor.disk.size (wajib): GPU L4 memiliki ukuran disk tetap sebesar 375 GB, kecuali untuk konfigurasi dengan core 24, 48, atau 96, yang masing-masing memiliki 750, 1,500, atau 3,000 GB. Jika Anda menetapkan properti ini ke nilai yang berbeda saat mengirimkan beban kerja yang dipercepat L4, error akan terjadi. 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) dan spark.executor.memoryOverhead (opsional): Anda dapat menetapkan salah satu properti ini, tetapi tidak keduanya. Jumlah memori yang tersedia yang tidak digunakan oleh properti set diterapkan ke properti unset. Secara default, spark.executor.memoryOverhead ditetapkan 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 1024 MB.

      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 RAPIDS Spark (opsional): Secara default, Dataproc Serverless menetapkan nilai properti RAPIDS Spark berikut:

      • spark.plugins=com.nvidia.spark.SQLPlugin
      • spark.executor.resource.gpu.amount=1
      • spark.task.resource.gpu.amount=1/$spark_executor_cores
      • spark.shuffle.manager=''. Secara default, properti ini tidak ditetapkan. Namun, NVIDIA merekomendasikan untuk mengaktifkan RAPIDS shuffle manager saat menggunakan GPU untuk meningkatkan performa. Untuk melakukannya, tetapkan spark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager saat Anda mengirimkan beban kerja.

      Lihat Konfigurasi RAPIDS Accelerator untuk Apache Spark guna menetapkan properti RAPIDS Spark, dan Konfigurasi Lanjutan RAPIDS Accelerator untuk Apache Spark guna menetapkan properti lanjutan Spark.