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 yang tepat untuk menentukan persyaratan resource untuk seluruh pipeline atau untuk langkah-langkah pipeline tertentu.
Dukungan dan batasan
- Petunjuk resource didukung dengan Apache Beam Java dan Python SDK, versi 2.31.0 dan yang lebih baru.
- Penyesuaian yang tepat didukung dengan pipeline batch.
Penyesuaian yang tepat didukung dengan pipeline streaming dengan pensakalaan otomatis horizontal diaktifkan.
- Anda dapat mengaktifkannya dengan menetapkan opsi pipeline
--experiments=enable_streaming_rightfitting.
- Anda dapat mengaktifkannya dengan menetapkan opsi pipeline
Penyesuaian yang tepat mendukung Dataflow Prime.
Penyesuaian yang tepat tidak mendukung FlexRS.
Saat menggunakan penyesuaian yang tepat, jangan gunakan opsi layanan
worker_accelerator.Saat Anda menggunakan Dataflow Prime, Pemilihan VM Otomatis tidak didukung.
Mengaktifkan penyesuaian yang tepat
Untuk mengaktifkan penyesuaian yang tepat, 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 RAM minimum 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
|
cpu_count |
Jumlah vCPU yang akan dialokasikan per pekerja. Saat Anda menggunakan petunjuk resource ini, Dataflow akan memilih jenis mesin yang memiliki jumlah vCPU yang ditentukan dan memenuhi persyaratan memori. Contoh: cpu_count=NUMBER
|
accelerator |
Alokasi GPU yang disediakan pengguna yang memungkinkan Anda mengontrol penggunaan dan biaya GPU di pipeline dan langkah-langkahnya. Tentukan jenis dan jumlah GPU yang akan dilampirkan ke pekerja Dataflow sebagai parameter ke flag. Contoh: accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
Untuk mengetahui informasi selengkapnya tentang penggunaan GPU, lihat GPU dengan Dataflow. |
Pemilihan VM Otomatis untuk jenis mesin pekerja
Saat Anda menggunakan min_ram atau cpu_count petunjuk resource untuk langkah-langkah pipeline yang
tidak memerlukan akselerator,
Fleksibilitas Instance (Pemilihan VM Otomatis)
akan diaktifkan secara otomatis. Dengan Pemilihan VM Otomatis, pekerja disediakan dari pilihan jenis mesin yang memenuhi persyaratan RAM dan CPU Anda.
Jika Anda menggunakan reservasi Compute Engine dengan Pemilihan VM Otomatis, perhatikan hal berikut:
- Jika Anda memiliki reservasi yang digunakan secara otomatis, reservasi tersebut mungkin akan digunakan jika Compute Engine menyediakan VM dari jenis mesin yang cocok.
- Pemilihan VM Otomatis tidak mendukung penggunaan instance dari reservasi tertentu.
- Pemilihan VM Otomatis tidak didukung dengan Dataflow Prime.
Untuk mengetahui informasi selengkapnya, lihat Fleksibilitas dan reservasi instance.
Petunjuk resource bertingkat
Petunjuk resource diterapkan ke hierarki transformasi pipeline sebagai berikut:
min_ram: Nilai pada transformasi dievaluasi sebagai nilai petunjukmin_ramterbesar di antara nilai yang ditetapkan pada transformasi itu sendiri dan semua induknya dalam hierarki transformasi.- Contoh: Jika petunjuk transformasi dalam menetapkan
min_ramke 16 GB, dan petunjuk transformasi luar dalam hierarki menetapkanmin_ramke 32 GB, petunjuk 32 GB akan digunakan untuk semua langkah dalam seluruh transformasi. - Contoh: Jika petunjuk transformasi dalam menetapkan
min_ramke 16 GB, dan petunjuk transformasi luar dalam hierarki menetapkanmin_ramke 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.
- Contoh: Jika petunjuk transformasi dalam menetapkan
accelerator: Nilai terdalam dalam hierarki transformasi akan diprioritaskan.- Contoh: Jika petunjuk
acceleratortransformasi dalam berbeda dengan petunjukacceleratortransformasi luar dalam hierarki, petunjukacceleratortransformasi dalam akan digunakan untuk transformasi dalam.
- Contoh: Jika petunjuk
Petunjuk yang ditetapkan untuk seluruh pipeline diperlakukan seolah-olah ditetapkan pada transformasi terluar yang terpisah.
Menggunakan petunjuk resource
Anda dapat menetapkan petunjuk resource pada seluruh pipeline atau pada langkah-langkah pipeline.
Petunjuk resource pipeline
Anda dapat menetapkan petunjuk resource pada 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=cpu_count=number \
--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 the
ResourceHints class.
Contoh berikut menunjukkan cara menetapkan petunjuk resource secara terprogram pada transformasi pipeline.
pcoll.apply(MyCompositeTransform.of(...)
.setResourceHints(
ResourceHints.create()
.withMinRam("15GB")
.withCpuCount(8)
.withAccelerator(
"type:nvidia-l4;count:1;install-nvidia-driver")))
pcoll.apply(ParDo.of(new BigMemFn())
.setResourceHints(
ResourceHints.create()
.withMinRam("30GB")
.withCpuCount(16)))
Untuk menetapkan petunjuk resource secara terprogram pada 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 menetapkan petunjuk resource secara terprogram pada transformasi pipeline.
pcoll | MyPTransform().with_resource_hints(
min_ram="4GB",
cpu_count=8,
accelerator="type:nvidia-tesla-l4;count:1;install-nvidia-driver")
pcoll | beam.ParDo(BigMemFn()).with_resource_hints(
min_ram="30GB",
cpu_count=16)
Untuk menetapkan petunjuk resource pada seluruh pipeline, gunakan opsi pipeline --resource_hints saat Anda menjalankan pipeline. Untuk mengetahui contohnya, lihat
Petunjuk resource pipeline.
Go
Petunjuk resource tidak didukung di Go.
Dukungan beberapa akselerator
Dalam pipeline, transformasi yang berbeda dapat memiliki konfigurasi akselerator yang berbeda. Konfigurasi ini mencakup konfigurasi yang memerlukan jenis mesin yang berbeda. Konfigurasi akselerator tingkat transformasi ini diprioritaskan daripada konfigurasi tingkat pipeline jika ada.
Penyesuaian yang tepat dan fusi
Dalam beberapa kasus, transformasi yang ditetapkan dengan petunjuk resource yang berbeda dapat dijalankan pada pekerja di kumpulan pekerja yang sama, sebagai bagian dari proses pengoptimalan fusi. Saat transformasi digabungkan, Dataflow akan menjalankannya 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, fusi tidak akan terjadi. Misalnya, petunjuk resource untuk GPU yang berbeda tidak dapat digabungkan, sehingga transformasi tersebut tidak digabungkan.
Anda juga dapat mencegah fusi 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 memori tinggi dari langkah-langkah yang lambat atau mahal secara komputasi yang tidak memerlukan resource khusus tersebut. Dalam kasus tersebut, sebaiknya paksa pemisahan fusi antara langkah-langkah yang terikat CPU lambat dan langkah-langkah yang memerlukan GPU mahal atau mesin memori tinggi dan bayar biaya materialisasi yang terkait dengan pemisahan fusi. Untuk mempelajari lebih lanjut, lihat
Mencegah fusi.
Penyesuaian yang tepat untuk streaming
Untuk tugas streaming, Anda dapat mengaktifkan penyesuaian yang tepat dengan menetapkan opsi pipeline --experiments=enable_streaming_rightfitting.
Penyesuaian yang tepat dapat meningkatkan performa pipeline Anda jika melibatkan tahap dengan persyaratan resource yang berbeda.
Contoh: Pipeline dengan tahap yang menggunakan banyak CPU dan tahap yang memerlukan GPU
Contoh pipeline yang mungkin mendapatkan manfaat dari penyesuaian yang tepat adalah pipeline yang menjalankan tahap yang menggunakan banyak CPU, diikuti oleh tahap yang memerlukan GPU. Tanpa penyesuaian yang tepat, satu kumpulan pekerja GPU harus dikonfigurasi untuk menjalankan semua tahap pipeline, termasuk tahap yang menggunakan banyak CPU. Hal ini dapat menyebabkan penggunaan resource GPU yang kurang optimal saat kumpulan pekerja menjalankan tahap yang menggunakan banyak CPU.
Jika penyesuaian yang tepat diaktifkan dan Petunjuk Resource diterapkan ke langkah yang memerlukan GPU, pipeline akan membuat dua kumpulan terpisah, sehingga tahap yang menggunakan banyak CPU dijalankan oleh kumpulan pekerja CPU, dan tahap yang memerlukan GPU dijalankan oleh kumpulan pekerja GPU.
Untuk contoh pipeline ini, tabel penskalaan otomatis menunjukkan bahwa kumpulan pekerja yang menjalankan tahap yang menggunakan banyak CPU, Pool 0, awalnya ditingkatkan skalanya menjadi 99 pekerja, dan kemudian diturunkan skalanya menjadi 87 pekerja. Kumpulan pekerja yang menjalankan tahap yang memerlukan GPU, Pool 1, ditingkatkan skalanya menjadi 13 pekerja:
Grafik Penggunaan CPU menunjukkan bahwa pekerja di kedua kumpulan pekerja menunjukkan penggunaan CPU yang tinggi secara keseluruhan:
Memecahkan masalah penyesuaian yang tepat
Bagian ini memberikan petunjuk untuk memecahkan masalah umum terkait penyesuaian yang tepat.
Konfigurasi tidak valid
Saat Anda mencoba menggunakan penyesuaian yang tepat, 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 jika 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 penyesuaian yang tepat
Anda dapat memverifikasi bahwa penyesuaian yang tepat diaktifkan dengan melihat metrik penskalaan otomatis dan memverifikasi bahwa kolom Worker pool terlihat dan mencantumkan kumpulan yang berbeda:
Performa penyesuaian yang tepat untuk streaming
Pipeline streaming dengan penyesuaian yang tepat diaktifkan mungkin tidak selalu berperforma lebih baik daripada pipeline tanpa penyesuaian yang tepat diaktifkan. Contoh:
- Pipeline menggunakan lebih banyak pekerja
- Latensi sistem lebih tinggi, atau throughput lebih rendah
- Ukuran kumpulan pekerja lebih sering berubah, atau tidak stabil
Jika Anda mengamati hal ini untuk pipeline, Anda dapat menonaktifkan penyesuaian yang tepat 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 Anda mengamati hal ini untuk pipeline, Anda dapat mengonfigurasi jumlah maksimum akselerator yang digunakan oleh pipeline dengan menetapkan opsi pipeline --experiments=max_num_accelerators=NUM.