Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan
Hyperopt versi sumber terbuka tidak lagi dipertahankan .
Hyperopt akan dihapus dalam versi ML DBR utama berikutnya. Azure Databricks merekomendasikan penggunaan
Artikel ini menjelaskan beberapa konsep yang perlu Anda ketahui untuk menggunakan Hyperopt terdistribusi.
Di bagian ini:
Untuk contoh yang mengilustrasikan cara menggunakan Hyperopt di Azure Databricks, lihat Hyperopt.
fmin()
Anda menggunakan fmin()
untuk menjalankan eksekusi Hyperopt. Argumen untuk fmin()
diperlihatkan dalam tabel; lihat dokumentasi Hyperopt untuk informasi selengkapnya. Untuk contoh cara menggunakan setiap argumen, lihat contoh notebook.
Nama argumen | Deskripsi |
---|---|
fn |
Fungsi objektif. Hyperopt memanggil fungsi ini dengan nilai yang dihasilkan dari ruang hyperparameter yang disediakan dalam argumen space. Fungsi ini dapat mengembalikan kerugian sebagai nilai skalar atau dalam kamus (lihat Dokumen Hyperopt untuk detailnya). Fungsi ini biasanya berisi kode untuk pelatihan model dan perhitungan kerugian. |
space |
Mendefinisikan ruang hyperparameter untuk mencari. Hyperopt memberikan fleksibilitas besar dalam cara ruang ini didefinisikan. Anda dapat memilih opsi kategoris seperti algoritma, atau distribusi probabilistik untuk nilai numerik seperti seragam dan log. |
algo |
Algoritme pencarian hyperopt digunakan untuk mencari ruang hyperparameter. Yang paling umum digunakan adalah hyperopt.rand.suggest untuk Random Search dan hyperopt.tpe.suggest untuk TPE. |
max_evals |
Jumlah pengaturan hiperparameter untuk dicoba (jumlah model yang akan diimplementasikan). |
max_queue_len |
Jumlah pengaturan hyperparameter yang harus dihasilkan Hyperopt terlebih dahulu. Karena algoritme generasi Hyperopt TPE dapat memakan waktu, sangat disarankan untuk menetapkan nilai lebih tinggi dari nilai default 1, tetapi umumnya tidak lebih besar dari pengaturan SparkTrials parallelism . |
trials |
Objek Trials atau SparkTrials . Gunakan SparkTrials saat Anda memanggil algoritme mesin tunggal seperti metode scikit-learn dalam fungsi objektif. Gunakan Trials saat Anda memanggil algoritme pelatihan terdistribusi seperti metode MLlib atau Horovod dalam fungsi objektif. |
early_stop_fn |
Fungsi penghentian awal opsional untuk menentukan apakah fmin harus berhenti sebelum max_evals tercapai. Defaultnya adalah None . Tanda tangan input dari fungsi ini adalah Trials, *args dan tanda tangan output adalah bool, *args . Output boolean menunjukkan apakah akan berhenti atau tidak.
*args adalah status apa pun, di mana output panggilan ke early_stop_fn berfungsi sebagai input ke panggilan berikutnya.
Trials bisa berupa objek SparkTrials . Saat menggunakan SparkTrials , fungsi henti awal tidak dijamin berjalan setelah setiap percobaan, dan malah dipantau.
Contoh fungsi henti awal |
Kelas SparkTrials
SparkTrials
adalah API yang dikembangkan oleh Databricks yang memungkinkan Anda mendistribusikan eksekusi Hyperopt tanpa membuat perubahan lain pada kode Hyperopt Anda.
SparkTrials
mempercepat penyetelan pada mesin tunggal dengan mendistribusikan uji coba kepada pekerja Spark.
Catatan
SparkTrials
dirancang untuk paralelisasi perhitungan untuk model ML mesin tunggal seperti scikit-learn. Untuk model yang dibuat dengan algoritme ML terdistribusi seperti MLlib atau Horovod, jangan gunakan SparkTrials
. Dalam kasus ini, proses pembuatan model secara otomatis diparalelkan pada kluster, dan Anda harus menggunakan kelas Hyperopt Trials
default.
Bagian ini menjelaskan cara mengonfigurasi argumen yang Anda sampaikan ke SparkTrials
dan aspek implementasi SparkTrials
.
Argumen
SparkTrials
mengambil dua argumen opsional:
parallelism
: Jumlah maksimum uji coba untuk dievaluasi secara bersamaan. Angka yang lebih tinggi memungkinkan Anda menskalakan pengujian lebih banyak pengaturan hyperparameter. Karena Hyperopt mengusulkan uji coba baru berdasarkan hasil masa lalu, ada pertukaran antara paralelisme dan adaptivitas. Untuk paralelismemax_evals
tetap, paralelisme yang lebih besar mempercepat perhitungan, tetapi paralelisme yang lebih rendah dapat mengarah pada hasil yang lebih baik karena setiap iterasi memiliki akses ke lebih banyak hasil masa lalu.Default: Jumlah eksekutor Spark yang tersedia. Maksimum: 128. Jika nilainya lebih besar dari jumlah tugas bersamaan yang diizinkan oleh konfigurasi kluster,
SparkTrials
mengurangi paralelisme dengan nilai ini.timeout
: Jumlah maksimum detik saat panggilanfmin()
dapat dilakukan. Saat jumlah ini terlampaui, semua eksekusi dihentikan danfmin()
menutup. Informasi mengenai pengoperasian yang telah selesai sudah disimpan.
implementasi
Saat menentukan fungsi objektif fn
diteruskan ke fmin()
, dan saat memilih pengaturan kluster, akan sangat membantu untuk memahami cara SparkTrials
mendistribusikan tugas penyetelan.
Dalam Hyperopt, percobaan umumnya sesuai dengan menyesuaikan satu model pada satu set hyperparameter. Hyperopt secara berulang menghasilkan uji coba, mengevaluasinya, dan mengulangi.
Dengan SparkTrials
, node driver kluster Anda menghasilkan uji coba baru, dan node pekerja mengevaluasi uji coba tersebut. Setiap percobaan dihasilkan dengan pekerjaan Spark yang memiliki satu tugas, dan dievaluasi dalam tugas pada mesin pekerja. Jika kluster Anda disiapkan untuk menjalankan beberapa tugas per pekerja, maka beberapa uji coba dapat dievaluasi sekaligus pada pekerja tersebut.
SparkTrials
dan MLflow
ML Databricks Runtime mendukung pencatatan ke MLflow dari pekerja. Anda dapat menambahkan kode pencatatan log kustom dalam fungsi tujuan yang Anda teruskan ke Hyperopt.
SparkTrials
mencatat hasil penyetelan sebagai eksekusi bertingkat MLflow sebagai berikut:
- Eksekusi utama: Panggilan ke
fmin()
dicatat sebagai eksekusi utama. Jika ada eksekusi aktif,SparkTrials
mencatat pada eksekusi aktif ini dan tidak mengakhiri eksekusi saatfmin()
dikembalikan. Jika tidak ada eksekusi aktif,SparkTrials
membuat eksekusi baru, mencatat di dalamnya, dan mengakhiri eksekusi sebelumfmin()
kembali. - Eksekusi turunan: Setiap pengaturan hyperparameter yang diuji ("uji coba") dicatat sebagai eksekusi turunan di bawah eksekusi utama. Catatan log MLflow dari pekerja juga disimpan di dalam sesi eksekusi turunan yang sesuai.
Saat memanggil fmin()
, Databricks merekomendasikan pengelolaan run MLflow aktif; yakni, membungkus pemanggilan ke fmin()
dalam pernyataan with mlflow.start_run():
. Ini memastikan bahwa setiap panggilan fmin()
dicatat dalam setiap run utama MLflow yang terpisah, dan memudahkan pencatatan tag, parameter, atau metrik tambahan ke run tersebut.
Catatan
Saat Anda memanggil fmin()
beberapa kali dalam eksekusi MLflow aktif yang sama, MLflow mencatat panggilan tersebut ke eksekusi utama yang sama. Untuk mengatasi konflik nama untuk parameter dan tag yang dicatat, MLflow menambahkan UUID ke nama dengan konflik.
Ketika mencatat dari pekerja, Anda tidak perlu secara eksplisit mengelola run dalam fungsi objektif. Panggil mlflow.log_param("param_from_worker", x)
dalam fungsi objektif untuk mencatat parameter ke eksekusi turunan. Anda dapat mencatat parameter, metrik, tag, dan artefak dalam fungsi tujuan.