Penskalaan thread dinamis

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

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

Dengan penskalaan thread dinamis yang diaktifkan, layanan Dataflow akan otomatis memilih jumlah thread yang tepat untuk dijalankan di setiap worker Dataflow. Karena setiap thread menjalankan tugas, peningkatan jumlah thread memungkinkan lebih banyak tugas dijalankan secara paralel di worker. Saat Anda menggunakan fitur ini dengan fitur penskalaan otomatis horizontal, jumlah total thread yang digunakan oleh pipeline akan tetap sama, tetapi lebih sedikit worker yang digunakan.

Penskalaan thread dinamis menggunakan algoritma untuk menentukan jumlah thread yang dibutuhkan setiap worker 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 worker Dataflow memproses data dengan lebih efisien dengan meningkatkan penggunaan CPU dan memori per worker.
  • Meningkatkan pemrosesan paralel dengan menyesuaikan jumlah thread worker yang tersedia untuk menjalankan tugas secara paralel selama eksekusi pipeline.
  • Mengurangi jumlah worker yang diperlukan untuk memproses set data besar, yang dapat mengurangi biaya Anda.

Dukungan dan batasan

  • Penskalaan thread dinamis tersedia untuk pipeline yang menggunakan Java, Python, dan Go SDK.
  • Tugas Dataflow harus menggunakan Runner Portabel.
  • Hanya pipeline batch yang didukung.
  • Pipeline yang menggunakan CPU atau memori secara intensif mungkin tidak mendapatkan manfaat dari penskalaan thread dinamis.
  • Penskalaan thread dinamis tidak mengurangi jumlah waktu yang diperlukan tugas Dataflow untuk diselesaikan.
  • Penskalaan thread dinamis terutama ditujukan untuk masalah memori terkait data. Jika Anda kehabisan memori karena ukuran model ML, lihat Pengelolaan Memori.
  • Untuk kasus penggunaan memori tinggi, Anda mungkin masih perlu menyetel num_worker_harness_threads secara manual atau beralih ke jenis mesin memori tinggi.

Cara kerjanya

Penskalaan thread dinamis menggunakan prinsip penyetelan otomatis untuk menskalakan jumlah thread secara dinamis ke atas atau ke bawah pada setiap worker di kumpulan worker Dataflow. Jumlah thread diskalakan secara independen pada setiap worker. Setiap thread menjalankan tugas. Peningkatan jumlah thread memungkinkan lebih banyak tugas dijalankan secara paralel di worker. Saat tugas selesai dan thread tidak lagi diperlukan, jumlah thread akan diskalakan ke bawah. Algoritma menentukan jumlah thread yang dibutuhkan setiap worker.

Jumlah thread pada worker diskalakan hingga maksimum dua thread per vCPU jika kedua kondisi berikut terpenuhi:

  • Penggunaan memori pada worker kurang dari 50%.
  • Penggunaan CPU pada worker kurang dari 65%.

Jumlah thread pada worker diskalakan hingga minimum satu thread per vCPU jika kondisi berikut terpenuhi:

  • Penggunaan memori pada worker lebih dari 70%.

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

Untuk memastikan rekomendasi valid, Dataflow menunggu penggunaan resource stabil sebelum mengirim rekomendasi ke worker. Misalnya, penggunaan memori dan CPU mungkin berada dalam rentang untuk penskalaan, tetapi karena penggunaan resource masih meningkat, Dataflow tidak mengirim rekomendasi. Setelah penggunaan resource stabil, Dataflow akan mengirim rekomendasi.

Jika terjadi error kehabisan memori (OOM), penskalaan thread akan otomatis dinonaktifkan, dan pipeline akan berjalan dengan satu thread per vCPU.

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 awal dan maksimum worker yang tersedia untuk pipeline Anda selama eksekusi. Untuk mengetahui informasi selengkapnya, lihat Opsi pipeline.

Memastikan penskalaan thread dinamis diaktifkan

Jika penskalaan thread dinamis diaktifkan, pesan berikut akan muncul di file log worker Anda:

Enabling thread vertical scaling feature in worker.

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

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

Anda dapat melihat jumlah thread yang direkomendasikan di file log worker. Pesan berikut menyertakan jumlah thread yang direkomendasikan:

worker_thread_scaling_report_response { recommended_thread_count: NUMBER }

Jika penggunaan resource tidak berada dalam rentang untuk penskalaan, nilai yang ditampilkan akan sama dengan jumlah vCPU pada worker.

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

Pemecahan masalah

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

Performa menurun dengan penskalaan thread dinamis yang diaktifkan

Peningkatan jumlah thread dapat menyebabkan masalah performa dalam kasus berikut:

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

Verifikasi apakah jumlah thread telah meningkat. Untuk mengetahui informasi tentang cara me mverifikasi jumlah thread yang direkomendasikan, lihat Memastikan penskalaan thread diaktifkan di halaman ini.

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

Worker terpadu … diaktifkan dan dinonaktifkan

Setelah Anda 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 Portabel dinonaktifkan secara eksplisit.

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

Mengupgrade SDK

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

Java

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

Python

Unable to create workflow, because using Portable Runner with Apache Beam SDK requires the SDK version 2.21.0 or later. Upgrade your SDK, and then resubmit your job.

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

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

Fitur penskalaan vertikal thread tidak dapat diaktifkan

Setelah Anda 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 menetapkan jumlah thread per worker secara eksplisit menggunakan numberOfWorkerHarnessThreads atau number_of_worker_harness_threads opsi pipeline.

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