Menggunakan GPU

Anda dapat melampirkan akselerator GPU ke workload batch Managed Service untuk Apache Spark guna mencapai hasil berikut:

  • Mempercepat pemrosesan workload analisis data skala besar.

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

  • Melakukan analisis data lanjutan, seperti pemrosesan video atau natural language processing.

Semua runtime Managed Service untuk Apache Spark yang didukung menambahkan library Spark RAPIDS ke setiap node workload. Managed Service untuk Apache Spark runtime 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 intensif komputasi, seperti machine learning dan deep learning, pemrosesan grafik, dan analisis kompleks.

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

Akselerator GPU tersedia dengan paket harga premium. Lihat Harga Managed Service untuk Apache Spark guna mengetahui informasi harga akselerator.

Sebelum memulai

Sebelum membuat workload batch tanpa server dengan akselerator GPU terlampir, lakukan hal berikut:

  1. Login ke akun Anda. Google Cloud 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. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instal Google Cloud CLI.

  6. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  7. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  8. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instal Google Cloud CLI.

  12. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  13. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  14. Di Google Cloud konsol, buka halaman Buckets Cloud Storage.

    Buka Buckets

  15. Klik Create.
  16. Di halaman Create a bucket, masukkan informasi bucket Anda. Untuk melanjutkan ke langkah berikutnya, klik Continue.
    1. Di bagian Get started, lakukan hal berikut:
      • Masukkan nama yang unik secara global yang memenuhi persyaratan penamaan bucket.
      • Untuk menambahkan label bucket, luaskan bagian Labels (), klik Add label, lalu tentukan key dan value untuk label Anda.
    2. Di bagian Choose where to store your data, lakukan hal berikut:
      1. Pilih Jenis lokasi.
      2. 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.
      3. Untuk menyiapkan replikasi lintas bucket, pilih Add cross-bucket replication via Storage Transfer Service , lalu ikuti langkah-langkah berikut:

        Menyiapkan replikasi lintas bucket

        1. Di menu Bucket, pilih bucket.
        2. Di bagian Replication settings , klik Configure untuk mengonfigurasi setelan tugas replikasi.

          Panel Configure cross-bucket replication akan muncul muncul.

          • Untuk memfilter objek yang akan direplikasi berdasarkan awalan nama objek, masukkan awalan yang ingin Anda sertakan atau kecualikan objeknya, lalu klik Add a prefix.
          • 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.
    3. Di bagian Choose where to store your data, lakukan hal berikut:
      1. Pilih kelas penyimpanan default untuk bucket atau Autoclass untuk pengelolaan kelas penyimpanan otomatis untuk data bucket Anda.
      2. Untuk mengaktifkan namespace hierarkis, di bagian Optimize storage for data-intensive workloads, pilih Enable hierarchical namespace on this bucket.
    4. 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.
    5. Di bagian Choose how to protect object data, lakukan hal berikut:
      • Pilih salah satu opsi di bagian Data protection yang Anda ingin Anda tetapkan untuk bucket Anda.
        • Untuk mengaktifkan penghapusan sementara, klik kotak centang Soft delete policy (For data recovery), lalu tentukan jumlah hari Anda ingin mempertahankan objek setelah penghapusan.
        • Untuk menetapkan Pembuatan Versi Objek, klik kotak centang Object versioning (For version control) , lalu tentukan jumlah maksimum versi per objek dan jumlah hari setelah versi lama berakhir masa berlakunya.
        • 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 Enable object retention.
          • Untuk mengaktifkan Kunci Bucket, klik kotak centang Set bucket retention policy, lalu pilih satuan waktu dan lama untuk periode retensi data.
      • Untuk memilih cara data objek Anda akan dienkripsi, luaskan bagian Data encryption (), lalu pilih metode Data encryption.
  17. Klik Create.

Membuat workload batch tanpa server 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:

  1. Klik Expand me, lalu buat dan simpan kode PySpark yang tercantum ke file test-py-spark-gpu.py di mesin 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 mesin lokal Anda untuk mengirim tugas batch tanpa server Managed Service untuk Apache Spark dengan lima pekerja, dengan setiap pekerja 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 Anda Google Cloud .
  • REGION: Region Compute Engine yang tersedia untuk menjalankan workload.
  • BUCKET_NAME: Nama bucket Cloud Storage Anda. Spark mengupload dependensi workload ke folder /dependencies di bucket ini sebelum menjalankan workload batch.
  • --version: Semua Managed Service untuk Apache Spark runtime yang didukung menambahkan library RAPIDS ke setiap node workload yang diakselerasi GPU. Hanya runtime versi 1.1 yang menambahkan XGBoost library ke setiap node workload 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 runtime versi sebelum 2.2): Properti ini menetapkan set karakter default ke C.UTF-8.
    • spark.dataproc.executor.compute.tier=premium (wajib): Workload yang diakselerasi GPU ditagih menggunakan Unit Komputasi Data (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 disk tier 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-40
      A100 80GB a100-80

    • spark.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 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 L4 GPU dan 24, 48 atau 96 core memiliki 2, 4 atau 8 GPU yang terlampir ke setiap eksekutor. Semua konfigurasi lainnya memiliki 1 GPU terlampir.

    • spark.dataproc.executor.disk.size (wajib): GPU L4 memiliki ukuran disk tetap sebesar 375 GB, kecuali untuk konfigurasi dengan 24, 48, atau 96 core, yang masing-masing memiliki 750, 1,500, atau 3,000 GB. Jika Anda menetapkan properti ini ke nilai yang berbeda saat mengirimkan workload yang diakselerasi L4, akan terjadi error. Jika Anda memilih GPU A100 40 atau A100 80, ukuran yang valid adalah 375g, 750g, 1500g, 3000g, 6000g, dan 9000g.

    • spark.executor.memory (opsional) dan spark.executor.memoryOverhead (dibatasi): Anda dapat menetapkan memori, tetapi tidak memoryOverhead. Jumlah memori yang tersedia yang tidak digunakan oleh properti yang ditetapkan akan diterapkan ke properti yang tidak ditetapkan. 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 Spark RAPIDS (opsional): Secara default, Managed Service untuk Apache Spark 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. NVIDIA merekomendasikan untuk mengaktifkan pengelola shuffle RAPIDS saat menggunakan GPU untuk meningkatkan performa. Untuk melakukannya, tetapkan spark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager saat Anda mengirimkan workload.
      • spark.rapids.sql.concurrentGpuTasks= minimum of (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 Konfigurasi Akselerator RAPIDS untuk Apache Spark guna menetapkan properti Spark RAPIDS, dan Konfigurasi Lanjutan Akselerator RAPIDS untuk Apache Spark guna menetapkan properti lanjutan Spark.