Penskalaan thread dinamis

Penskalaan thread dinamis adalah bagian dari rangkaian fitur penskalaan vertikal Dataflow. Paket ini melengkapi fitur penskalaan horizontal Dataflow dengan menyesuaikan jumlah tugas paralel, yang juga disebut sebagai paket, yang dijalankan oleh setiap pekerja Dataflow. Tujuannya adalah untuk meningkatkan efisiensi keseluruhan dari pipeline Dataflow Anda.

Saat Dataflow menjalankan pipeline, pemrosesan didistribusikan ke beberapa virtual machine (VM) Compute Engine yang juga dikenal sebagai pekerja. Thread adalah tugas tunggal yang dapat dieksekusi yang berjalan dalam proses yang lebih besar. Dataflow meluncurkan beberapa thread pada setiap pekerja.

Dengan mengaktifkan penskalaan thread dinamis, layanan Dataflow secara otomatis memilih jumlah thread yang sesuai untuk dijalankan pada setiap pekerja Dataflow. Karena setiap thread menjalankan tugas, penambahan jumlah thread memungkinkan lebih banyak tugas dijalankan secara paralel pada pekerja. Saat Anda menggunakan fitur ini dengan fitur penskalaan otomatis horizontal, jumlah total thread yang digunakan oleh pipeline tetap sama, tetapi lebih sedikit pekerja yang digunakan.

Penskalaan thread dinamis menggunakan algoritma untuk menentukan jumlah thread yang dibutuhkan setiap pekerja berdasarkan sinyal penggunaan resource yang dihasilkan selama eksekusi pipeline. Untuk mengetahui informasi selengkapnya, lihat bagian Cara kerjanya di halaman ini.

Manfaat

Penskalaan thread dinamis memiliki potensi manfaat berikut.

  • Memungkinkan pekerja Dataflow memproses data secara lebih efisien dengan meningkatkan penggunaan memori dan CPU per pekerja.
  • Meningkatkan pemrosesan paralel dengan menyesuaikan jumlah thread pekerja yang tersedia untuk menjalankan tugas secara paralel selama eksekusi pipeline.
  • Mengurangi jumlah pekerja yang diperlukan untuk memproses set data besar, sehingga dapat mengurangi biaya Anda.

Dukungan dan batasan

  • Penskalaan thread dinamis tersedia untuk pipeline yang menggunakan SDK Java, Python, dan Go.
  • Tugas Dataflow harus menggunakan Runner v2.
  • Hanya pipeline batch yang didukung.
  • Pipeline yang menggunakan CPU atau memori intensif mungkin tidak mendapatkan manfaat dari penskalaan thread dinamis.
  • Penskalaan thread dinamis tidak mengurangi jumlah waktu yang diperlukan untuk menyelesaikan tugas Dataflow.

Cara kerja Duet AI

Penskalaan thread dinamis menggunakan prinsip penyesuaian otomatis untuk meningkatkan atau menurunkan jumlah thread secara dinamis pada setiap pekerja di kumpulan pekerja Dataflow. Jumlah thread diskalakan secara independen pada setiap pekerja. Setiap thread menjalankan tugas. Peningkatan jumlah thread memungkinkan lebih banyak tugas dijalankan secara paralel pada pekerja. Setelah tugas selesai dan thread tidak lagi diperlukan, jumlah thread akan turun. Algoritma menentukan jumlah thread yang diperlukan setiap pekerja.

Jumlah thread pada pekerja meningkat jika kedua kondisi berikut terpenuhi:

  • Pemakaian memori pada pekerja kurang dari 50%.
  • Pemakaian CPU pada pekerja kurang dari 65%.

Jumlah thread pada pekerja memperkecil skala jika kondisi berikut terpenuhi:

  • Pemakaian memori pada pekerja lebih dari 70%.

Untuk melihat penggunaan memori dan CPU untuk tugas Anda, gunakan tab Job metrics pada antarmuka web Dataflow.

Untuk memastikan bahwa rekomendasi valid, Dataflow menunggu hingga pemanfaatan resource stabil sebelum mengirim rekomendasi kepada pekerja. Misalnya, pemakaian memori dan CPU mungkin berada dalam rentang penskalaan, tetapi karena pemanfaatan resource masih meningkat, Dataflow tidak mengirimkan rekomendasi. Setelah pemanfaatan resource stabil, Dataflow akan mengirimkan rekomendasi.

Jika terjadi error kehabisan memori (OOM), penskalaan thread akan otomatis dinonaktifkan, dan pipeline berjalan tanpa penskalaan thread dinamis.

Mengaktifkan penskalaan thread dinamis

Untuk mengaktifkan penskalaan thread dinamis, gunakan opsi layanan Dataflow berikut.

Java

--dataflowServiceOptions=enable_dynamic_thread_scaling

Python

--dataflow_service_options=enable_dynamic_thread_scaling

Go

--dataflow_service_options=enable_dynamic_thread_scaling

Saat penskalaan thread dinamis diaktifkan, Anda juga dapat menetapkan jumlah pekerja awal dan maksimum yang tersedia untuk pipeline Anda selama eksekusi. Untuk mengetahui informasi selengkapnya, lihat Opsi pipeline.

Memastikan penskalaan thread dinamis diaktifkan

Saat penskalaan thread dinamis diaktifkan, pesan berikut akan muncul di file log pekerja Anda:

Enabling thread vertical scaling feature in worker.

Untuk melihat file log pekerja, di Logs Explorer, gunakan panel Query untuk memfilter log menurut Log name. Gunakan nama log berikut dalam filter Anda:

projects/PROJECT_ID/logs/dataflow.googleapis.com%2Fharness

Anda dapat melihat jumlah thread yang disarankan dalam file log pekerja. Pesan berikut menyertakan jumlah thread yang direkomendasikan:

worker_thread_scaling_report_response { recommended_thread_count: NUMBER }

Jika pemanfaatan resource tidak berada dalam rentang penskalaan, nilai yang ditampilkan sama dengan jumlah vCPU pada pekerja.

Anda juga dapat menggunakan konsol Google Cloud untuk melihat apakah penskalaan thread dinamis diaktifkan atau tidak. Jika diaktifkan, enable_dynamic_thread_scaling akan ditampilkan pada panel Job info Dataflow, di baris dataflowServiceOptions pada bagian Pipeline options.

Pemecahan masalah

Bagian ini memberikan petunjuk untuk memecahkan masalah umum terkait penskalaan thread dinamis.

Performa menurun jika penskalaan thread dinamis diaktifkan

Peningkatan jumlah thread dapat menyebabkan masalah performa dalam kasus berikut:

  • Ketika beberapa proses mencoba menggunakan resource yang sama, satu proses dapat menggunakan resource, sementara proses lainnya harus menunggu. Situasi ini dikenal sebagai pertentangan resource. Ketika pertentangan resource terjadi, performa pipeline mungkin akan menurun.
  • Saat terjadi error kehabisan memori, penskalaan thread dinamis dinonaktifkan. Pada beberapa kasus, error kehabisan memori dapat menyebabkan kegagalan pipeline.

Periksa apakah jumlah rangkaian pesan telah meningkat. Untuk mengetahui informasi tentang cara memverifikasi jumlah thread yang direkomendasikan, lihat Memverifikasi bahwa penskalaan thread diaktifkan di halaman ini.

Jika penskalaan thread diaktifkan, jangan sertakan opsi layanan penskalaan thread dinamis untuk menyelesaikan masalah ini, saat Anda menjalankan pipeline.

Pekerja terpadu ... diaktifkan dan dinonaktifkan

Setelah mengaktifkan penskalaan thread dinamis, tugas Anda mungkin gagal dengan error berikut:

The workflow could not be created. Causes: (ID): Unified worker misconfigured by user and was both enabled and disabled.

Error ini terjadi saat Runner v2 dinonaktifkan secara eksplisit.

Untuk mengatasi masalah ini, aktifkan Runner v2. Untuk mengetahui informasi selengkapnya, lihat bagian Mengaktifkan Dataflow Runner v2 di halaman "Menggunakan Dataflow Runner V2".

Mengupgrade SDK Anda

Setelah mengaktifkan penskalaan thread dinamis, tugas Anda mungkin gagal dengan error berikut:

Java

Dataflow Runner v2 requires the Apache Beam Java SDK version 2.29.0 or higher. Please upgrade your SDK and resubmit your job.

Python

Dataflow Runner v2 requires the Apache Beam SDK, version 2.21.0 or higher. Please upgrade your SDK and resubmit your job.

Error ini terjadi saat Runner v2 tidak dapat diaktifkan karena versi SDK tidak mendukungnya.

Untuk mengatasi masalah ini, gunakan versi SDK yang mendukung Runner v2.

Fitur penskalaan vertikal thread tidak dapat diaktifkan

Setelah mengaktifkan penskalaan thread dinamis, tugas Anda mungkin gagal dengan error berikut:

The workflow could not be created. Causes: (ID): Thread vertical scaling feature can not be enabled while number_of_worker_harness_threads is specified.

Error ini terjadi saat pipeline secara eksplisit menetapkan jumlah thread per pekerja menggunakan opsi pipeline numberOfWorkerHarnessThreads atau number_of_worker_harness_threads.

Untuk mengatasi masalah ini, hapus opsi pipeline numberOfWorkerHarnessThreads atau number_of_worker_harness_threads dari pipeline Anda.