Menggunakan GPU dengan Dataproc Serverless

Anda dapat menambahkan akselerator GPU ke workload batch Dataproc Serverless untuk mencapai hasil berikut:

  • Percepat pemrosesan workload analisis data berskala besar.

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

  • Lakukan analisis data tingkat lanjut, seperti video atau natural language processing.

Semua runtime Dataproc Serverless Spark yang didukung menambahkan library Spark RAPIDS ke setiap node beban kerja. Runtime Dataproc Serverless Spark versi 1.1 juga menambahkan library XGBoost ke node workload. Library ini memberikan transformasi data yang canggih dan alat machine learning yang dapat Anda gunakan dalam beban kerja yang dipercepat GPU.

Manfaat GPU

Berikut beberapa manfaat saat Anda menggunakan GPU dengan beban kerja Dataproc Serverless Spark:

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

  • Pelatihan model yang lebih cepat: Untuk tugas machine learning, penambahan GPU dapat mengurangi waktu yang diperlukan untuk melatih model secara dramatis, 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 semakin kompleks.

  • Efisiensi biaya: Meskipun GPU memerlukan investasi awal, Anda dapat mencapai penghematan biaya dari waktu ke waktu karena pengurangan waktu pemrosesan dan penggunaan 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 ditingkatkan: Pemrosesan yang lebih cepat memungkinkan pengambilan keputusan yang lebih cepat dan aplikasi yang lebih responsif.

Batasan dan pertimbangan

Harga

Lihat Harga Dataproc Serverless untuk mengetahui informasi harga akselerator.

Sebelum memulai

Sebelum membuat workload batch serverless dengan akselerator GPU terpasang, lakukan hal berikut:

  1. 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.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Mengaktifkan API

  5. Menginstal Google Cloud CLI.
  6. Untuk initialize gcloud CLI, jalankan perintah berikut:

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

    Buka pemilih project

  8. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Mengaktifkan API

  10. Menginstal Google Cloud CLI.
  11. Untuk initialize gcloud CLI, jalankan perintah berikut:

    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 me, lalu buat dan simpan kode PySpark yang tercantum ke file test-py-spark-gpu.py di komputer lokal 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 mesin lokal Anda untuk mengirimkan tugas batch serverless Dataproc Serverless dengan lima pekerja, dengan setiap pekerja yang dipercepat dengan L4 GPU:

    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 Serverless Dataproc yang didukung menambahkan library RAPIDS ke setiap node beban kerja yang dipercepat GPU. Saat ini, hanya runtime versi 1.1 yang menambahkan library XGBoost ke setiap node beban kerja yang dipercepat GPU.
  • --properties (lihat Properti alokasi resource Spark) :

    • spark.dataproc.driverEnv.LANG=C.UTF-8 dan spark.executorEnv.LANG=C.UTF-8 (wajib dengan versi runtime sebelum 2.2): Properti ini menetapkan karakter default yang disetel 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 Akselerator 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:

      GPU type Nama argumen
      A100 40GB a100-40
      A100 80GB a100-80

    • spark.executor.instances=5 (wajib): 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 adalah 4, default, atau 8, 12, atau 16. Satu-satunya nilai yang valid dan default untuk GPU A100 adalah 12.

    • spark.dataproc.executor.disk.size (opsional untuk A100-40 dan A100-80 GPU): Dataproc Serverless menetapkan ukuran disk SSD GPU default ke 375 GB. Anda dapat mengubah ukuran saat menggunakan GPU A100 40 atau A100 80 (lihat Properti alokasi resource Spark). GPU L4 memerlukan ukuran 375 GB. Jika Anda menetapkan properti ini ke nilai yang berbeda saat mengirimkan beban kerja yang diakselerasi L4, error akan terjadi.

    • spark.executor.memory (opsional) dan spark.executor.memoryOverhead (opsional): Anda dapat menetapkan salah satu properti ini, tetapi tidak keduanya. Jumlah memori tersedia yang tidak dipakai oleh properti yang ditetapkan akan diterapkan ke properti yang tidak disetel. Sebagai default, spark.executor.memoryOverhead ditetapkan ke 40% dari memori yang tersedia untuk beban kerja batch PySpark, dan 10% untuk beban kerja 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 kedua properti tersebut adalah 1024 MB.

      A100 (40 GB) A100 (80 GB) L4 (4 core) L4 (8 core) L4 (12 core) L4 (16 core)
      Total memori maksimum (MB) 78040 165080 13384 26768 40152 53536
    • Properti Spark RAPIDS (opsional): Secara default, Dataproc Serverless menetapkan nilai properti Spark RAPIDS 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 pengelola pengacakan RAPIDS saat menggunakan GPU untuk meningkatkan performa. Untuk melakukannya, tetapkan spark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager saat Anda mengirimkan beban kerja.

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