Penyesuaian yang tepat

Fitur penyesuaian yang tepat menggunakan petunjuk resource Apache Beam untuk menyesuaikan resource pekerja untuk pipeline. Kemampuan untuk menargetkan beberapa resource berbeda ke langkah-langkah pipeline tertentu memberikan fleksibilitas dan kemampuan pipeline tambahan, serta potensi penghematan biaya. Anda dapat menerapkan resource yang lebih mahal ke langkah-langkah pipeline yang memerlukannya, dan resource yang lebih murah ke langkah-langkah pipeline lainnya. Gunakan penyesuaian kanan untuk menentukan persyaratan resource bagi seluruh pipeline atau untuk langkah-langkah pipeline tertentu.

Dukungan dan batasan

Mengaktifkan penyesuaian yang tepat

Untuk mengaktifkan penyesuaian kanan, gunakan satu atau beberapa petunjuk resource yang tersedia di pipeline Anda. Saat Anda menggunakan petunjuk resource di pipeline, penyesuaian yang tepat akan otomatis diaktifkan. Untuk mengetahui informasi selengkapnya, lihat bagian Menggunakan petunjuk resource dalam dokumen ini.

Petunjuk resource yang tersedia

Petunjuk resource berikut tersedia.

Petunjuk resource Deskripsi
min_ram

Jumlah minimum RAM dalam gigabyte yang akan dialokasikan ke pekerja. Dataflow menggunakan nilai ini sebagai batas bawah saat mengalokasikan memori ke pekerja baru (penskalaan horizontal) atau ke pekerja yang ada (penskalaan vertikal).

Contoh:

min_ram=NUMBERGB
  • Ganti NUMBER dengan nilai minimum memori pekerja yang diperlukan oleh pipeline atau langkah pipeline Anda.
  • min_ram adalah spesifikasi gabungan per pekerja. Fitur ini bukan spesifikasi per-vCPU. Misalnya, jika Anda menetapkan min_ram=15GB, Dataflow akan menetapkan total memori yang tersedia di semua vCPU dalam pekerja menjadi minimal 15 GB.
accelerator

Alokasi GPU yang disediakan pengguna yang memungkinkan Anda mengontrol penggunaan dan biaya GPU dalam pipeline dan langkah-langkahnya. Tentukan jenis dan jumlah GPU yang akan dipasang ke worker Dataflow sebagai parameter ke flag.

Contoh:

accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
  • Ganti GPU_TYPE dengan jenis GPU yang akan digunakan. Untuk mengetahui daftar jenis GPU yang didukung dengan Dataflow, lihat Dukungan Dataflow untuk GPU.
  • Ganti GPU_COUNT dengan jumlah GPU yang akan digunakan.
  • Opsional: Ganti MACHINE_TYPE dengan jenis mesin yang akan digunakan dengan GPU Anda.
    • Jenis mesin harus kompatibel dengan jenis GPU yang dipilih. Untuk mengetahui detail tentang jenis GPU dan jenis mesin yang kompatibel, lihat platform GPU.
    • Jika Anda menentukan jenis mesin di accelerator hint resource dan di jenis mesin pekerja opsi pipeline, maka opsi pipeline akan diabaikan selama penyesuaian yang tepat.
  • Untuk menggunakan GPU NVIDIA dengan Dataflow, tetapkan install-nvidia-driver opsi konfigurasi.

Untuk mengetahui informasi selengkapnya tentang penggunaan GPU, lihat GPU dengan Dataflow.

Penyusunan petunjuk resource

Petunjuk resource diterapkan ke hierarki transformasi pipeline sebagai berikut:

  • min_ram: Nilai pada transformasi dievaluasi sebagai nilai petunjuk min_ram terbesar di antara nilai yang ditetapkan pada transformasi itu sendiri dan semua induknya dalam hierarki transformasi.
    • Contoh: Jika petunjuk transformasi dalam menetapkan min_ram ke 16 GB, dan petunjuk transformasi luar dalam hierarki menetapkan min_ram ke 32 GB, petunjuk 32 GB akan digunakan untuk semua langkah dalam seluruh transformasi.
    • Contoh: Jika petunjuk transformasi dalam menetapkan min_ram ke 16 GB, dan petunjuk transformasi luar dalam hierarki menetapkan min_ram ke 8 GB, petunjuk 8 GB akan digunakan untuk semua langkah dalam transformasi luar yang tidak ada dalam transformasi dalam, dan petunjuk 16 GB akan digunakan untuk semua langkah dalam transformasi dalam.
  • accelerator: Nilai paling dalam dalam hierarki transformasi lebih diutamakan.
    • Contoh: Jika petunjuk transformasi dalam accelerator berbeda dari petunjuk transformasi luar accelerator dalam hierarki, petunjuk transformasi dalam accelerator digunakan untuk transformasi dalam.

Petunjuk yang ditetapkan untuk seluruh pipeline diperlakukan seolah-olah ditetapkan pada transformasi terluar yang terpisah.

Menggunakan petunjuk resource

Anda dapat menetapkan petunjuk resource di seluruh pipeline atau di langkah-langkah pipeline.

Petunjuk resource pipeline

Anda dapat menetapkan petunjuk resource di seluruh pipeline saat menjalankan pipeline dari command line.

Untuk menyiapkan lingkungan Python, lihat tutorial Python.

Contoh:

    python my_pipeline.py \
        --runner=DataflowRunner \
        --resource_hints=min_ram=numberGB \
        --resource_hints=accelerator="type:type;count:number;install-nvidia-driver" \
        ...

Petunjuk resource langkah pipeline

Anda dapat menetapkan petunjuk resource pada langkah-langkah pipeline (transformasi) secara terprogram.

Java

Untuk menginstal Apache Beam SDK untuk Java, lihat Menginstal Apache Beam SDK.

Anda dapat menetapkan petunjuk resource secara terprogram pada transformasi pipeline menggunakan class ResourceHints.

Contoh berikut menunjukkan cara menyetel petunjuk resource secara terprogram pada transformasi pipeline.

pcoll.apply(MyCompositeTransform.of(...)
    .setResourceHints(
        ResourceHints.create()
            .withMinRam("15GB")
            .withAccelerator(
    "type:nvidia-l4;count:1;install-nvidia-driver")))

pcoll.apply(ParDo.of(new BigMemFn())
    .setResourceHints(
        ResourceHints.create().withMinRam("30GB")))

Untuk menyetel petunjuk resource secara terprogram di seluruh pipeline, gunakan antarmuka ResourceHintsOptions.

Python

Untuk menginstal Apache Beam SDK untuk Python, lihat Menginstal Apache Beam SDK.

Anda dapat menetapkan petunjuk resource secara terprogram pada transformasi pipeline menggunakan class PTransforms.with_resource_hints. Untuk mengetahui informasi selengkapnya, lihat class ResourceHint.

Contoh berikut menunjukkan cara menyetel petunjuk resource secara terprogram pada transformasi pipeline.

pcoll | MyPTransform().with_resource_hints(
    min_ram="4GB",
    accelerator="type:nvidia-tesla-l4;count:1;install-nvidia-driver")

pcoll | beam.ParDo(BigMemFn()).with_resource_hints(
    min_ram="30GB")

Untuk menetapkan petunjuk resource di seluruh pipeline, gunakan opsi pipeline --resource_hints saat Anda menjalankan pipeline. Sebagai contoh, lihat Petunjuk resource pipeline.

Go

Petunjuk resource tidak didukung di Go.

Dukungan beberapa akselerator

Dalam pipeline, berbagai transformasi dapat memiliki konfigurasi akselerator yang berbeda. Hal ini mencakup konfigurasi yang memerlukan jenis mesin yang berbeda. Konfigurasi akselerator tingkat transformasi ini lebih diprioritaskan daripada konfigurasi tingkat pipeline jika ada.

Penyesuaian dan penggabungan yang tepat

Dalam beberapa kasus, transformasi yang ditetapkan dengan petunjuk resource yang berbeda dapat dieksekusi di pekerja dalam kumpulan pekerja yang sama, sebagai bagian dari proses pengoptimalan penggabungan. Saat transformasi digabungkan, Dataflow akan mengeksekusinya di lingkungan yang memenuhi gabungan petunjuk resource yang ditetapkan pada transformasi. Dalam beberapa kasus, hal ini mencakup seluruh pipeline.

Jika petunjuk resource tidak dapat digabungkan, penggabungan tidak akan terjadi. Misalnya, petunjuk resource untuk GPU yang berbeda tidak dapat digabungkan, sehingga transformasi tersebut tidak digabungkan.

Anda juga dapat mencegah penggabungan dengan menambahkan operasi ke pipeline yang memaksa Dataflow untuk mewujudkan PCollection perantara. Hal ini sangat berguna saat mencoba mengisolasi resource mahal seperti GPU atau mesin dengan memori tinggi dari langkah-langkah yang lambat atau mahal secara komputasi yang tidak memerlukan resource khusus tersebut. Dalam kasus tersebut, mungkin berguna untuk memaksakan jeda penggabungan antara langkah-langkah yang terikat CPU lambat dan langkah-langkah yang memerlukan GPU mahal atau mesin dengan memori tinggi, serta membayar biaya materialisasi yang terkait dengan penghentian penggabungan. Untuk mempelajari lebih lanjut, lihat Mencegah penggabungan.

Penyesuaian yang tepat untuk streaming

Untuk tugas streaming, Anda dapat mengaktifkan penyesuaian yang tepat dengan menetapkan opsi pipeline --experiments=enable_streaming_rightfitting.

Pengepasan yang tepat dapat meningkatkan performa pipeline Anda jika melibatkan tahap dengan persyaratan resource yang berbeda.

Contoh: Pipeline dengan tahap yang intensif CPU dan tahap yang memerlukan GPU

Contoh pipeline yang mungkin diuntungkan dari penyesuaian yang tepat adalah pipeline yang menjalankan tahap intensif CPU, diikuti dengan tahap yang memerlukan GPU. Tanpa penyesuaian yang tepat, satu kumpulan worker GPU harus dikonfigurasi untuk mengeksekusi semua tahap pipeline, termasuk tahap yang intensif CPU. Hal ini dapat menyebabkan kurangnya pemanfaatan resource GPU saat kumpulan pekerja menjalankan tahap yang intensif CPU.

Jika penyesuaian yang tepat diaktifkan dan Petunjuk Resource diterapkan ke langkah yang memerlukan GPU, pipeline akan membuat dua kumpulan terpisah, sehingga tahap yang intensif CPU dieksekusi oleh kumpulan pekerja CPU, dan tahap yang memerlukan GPU dieksekusi oleh kumpulan pekerja GPU.

Untuk pipeline contoh ini, tabel penskalaan otomatis menunjukkan bahwa kumpulan pekerja yang menjalankan tahap intensif CPU, Pool 0, awalnya di-upgrade menjadi 99 pekerja, dan kemudian di-downgrade menjadi 87 pekerja. Kumpulan pekerja yang menjalankan tahap yang memerlukan GPU, Pool 1, di-upscale menjadi 13 pekerja:

Tabel yang menampilkan penskalaan otomatis dua kumpulan.

Grafik Penggunaan CPU menunjukkan bahwa pekerja di kedua kumpulan pekerja menunjukkan penggunaan CPU tinggi secara keseluruhan:

Grafik yang menunjukkan pemakaian CPU pekerja dari dua kumpulan yang berbeda.

Memecahkan masalah penyesuaian yang tepat

Bagian ini memberikan petunjuk untuk memecahkan masalah umum terkait kecocokan yang tepat.

Konfigurasi tidak valid

Saat Anda mencoba menggunakan pencocokan kanan, error berikut akan terjadi:

Workflow failed. Causes: One or more operations had an error: 'operation-OPERATION_ID':
[UNSUPPORTED_OPERATION] 'NUMBER vCpus with NUMBER MiB memory is
an invalid configuration for NUMBER count of 'GPU_TYPE' in family 'MACHINE_TYPE'.'.

Error ini terjadi saat jenis GPU yang dipilih tidak kompatibel dengan jenis mesin yang dipilih. Untuk mengatasi error ini, pilih jenis GPU dan jenis mesin yang kompatibel. Untuk mengetahui detail kompatibilitas, lihat platform GPU.

Memverifikasi kecocokan yang tepat

Anda dapat memverifikasi bahwa penyesuaian yang tepat diaktifkan dengan melihat metrik penskalaan otomatis dan memverifikasi bahwa kolom Worker pool terlihat dan mencantumkan berbagai pool:

Tabel yang menampilkan histori pekerja pipeline dengan beberapa kumpulan saat penyesuaian kanan diaktifkan.

Performa penyesuaian yang tepat untuk streaming

Pipeline streaming dengan pengoptimalan yang tepat diaktifkan mungkin tidak selalu berperforma lebih baik daripada pipeline tanpa pengoptimalan yang tepat diaktifkan. Contoh:

  1. Pipeline menggunakan lebih banyak pekerja
  2. Latensi sistem lebih tinggi, atau throughput lebih rendah
  3. Ukuran kumpulan pekerja berubah lebih sering, atau tidak stabil

Jika mengamati hal ini untuk pipeline Anda, Anda dapat menonaktifkan penyesuaian kanan dengan menghapus opsi pipeline --experiments=enable_streaming_rightfitting. Selain itu, pipeline streaming dengan penyesuaian yang tepat diaktifkan menggunakan Petunjuk Resource akselerator mungkin menggunakan lebih banyak akselerator daripada yang diinginkan. Jika mengamati hal ini untuk pipeline, Anda dapat mengonfigurasi jumlah maksimum akselerator yang digunakan oleh pipeline dengan menyetel opsi pipeline --experiments=max_num_accelerators=NUM.