Halaman ini menunjukkan cara menggunakan penyesuaian hyperparameter Pelatihan AI Platform saat melatih model Anda. Penyesuaian hyperparameter mengoptimalkan variabel target yang Anda tentukan. Variabel target disebut metrik hyperparameter. Saat memulai tugas dengan penyesuaian hyperparameter, Anda akan menetapkan nama metrik hyperparameter. Ini adalah nama yang Anda berikan pada ringkasan skalar yang Anda tambahkan ke pelatih.
Langkah-langkah yang diperlukan dalam penyesuaian hyperparameter
Untuk menggunakan penyesuaian hyperparameter dalam tugas pelatihan, Anda harus melakukan langkah-langkah berikut:
Tentukan konfigurasi penyesuaian hyperparameter untuk tugas pelatihan Anda dengan menyertakan HyperparameterSpec dalam objek TrainingInput Anda.
Sertakan kode berikut dalam aplikasi pelatihan Anda:
- Mengurai argumen command line yang merepresentasikan hyperparameter yang ingin Anda sesuaikan, dan gunakan nilai tersebut untuk menetapkan hyperparameter untuk uji coba pelatihan Anda.
- Tambahkan metrik hyperparameter ke ringkasan untuk grafik Anda.
Berikut detail selengkapnya dari setiap langkah.
Menentukan konfigurasi penyesuaian hyperparameter untuk tugas pelatihan Anda
Buat objek HyperparameterSpec untuk menyimpan konfigurasi penyesuaian
hyperparameter untuk tugas pelatihan Anda, dan tambahkan HyperparameterSpec
sebagai
objek hyperparameters
dalam objek TrainingInput Anda.
Tugas penyesuaian hyperparameter akan membuat tugas uji coba. Jika ingin mempercepat
proses tugas uji coba pelatihan, Anda dapat menentukan jenis mesin kustom di
objek TrainingInput. Misalnya, untuk membuat tugas uji coba dengan setiap tugas uji coba menggunakan VM n1-standard-8
, Anda dapat menentukan masterType
menjadi n1-standard-8
dan membiarkan konfigurasi pekerja kosong.
Di HyperparameterSpec
, tetapkan hyperparameterMetricTag
ke nilai yang mewakili metrik yang Anda pilih. Jika Anda tidak menentukan hyperparameterMetricTag
, AI Platform Training akan mencari metrik dengan nama training/hptuning/metric
. Contoh berikut menunjukkan cara membuat konfigurasi untuk metrik bernama metric1
:
gcloud
Tambahkan informasi konfigurasi hyperparameter ke file YAML konfigurasi Anda. Berikut contohnya. Untuk file konfigurasi yang berfungsi, lihat
hptuning_config.yaml
dalam contoh estimator sensus.
trainingInput:
scaleTier: CUSTOM
masterType: complex_model_m
workerType: complex_model_m
parameterServerType: large_model
workerCount: 9
parameterServerCount: 3
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: metric1
maxTrials: 30
maxParallelTrials: 1
enableTrialEarlyStopping: True
params:
- parameterName: hidden1
type: INTEGER
minValue: 40
maxValue: 400
scaleType: UNIT_LINEAR_SCALE
- parameterName: numRnnCells
type: DISCRETE
discreteValues:
- 1
- 2
- 3
- 4
- parameterName: rnnCellType
type: CATEGORICAL
categoricalValues:
- BasicLSTMCell
- BasicRNNCell
- GRUCell
- LSTMCell
- LayerNormBasicLSTMCell
Python
Buat kamus yang mewakili HyperparameterSpec Anda dan tambahkan ke
input pelatihan. Contoh berikut mengasumsikan bahwa Anda telah membuat kamus TrainingInput
(dalam hal ini bernama training_inputs
) seperti yang ditunjukkan dalam panduan konfigurasi tugas pelatihan.
# Add hyperparameter tuning to the job config.
hyperparams = {
'goal': 'MAXIMIZE',
'hyperparameterMetricTag': 'metric1',
'maxTrials': 30,
'maxParallelTrials': 1,
'enableTrialEarlyStopping': True,
'params': []}
hyperparams['params'].append({
'parameterName':'hidden1',
'type':'INTEGER',
'minValue': 40,
'maxValue': 400,
'scaleType': 'UNIT_LINEAR_SCALE'})
hyperparams['params'].append({
'parameterName':'numRnnCells',
'type':'DISCRETE',
'discreteValues': [1, 2, 3, 4]})
hyperparams['params'].append({
'parameterName':'rnnCellType',
'type': 'CATEGORICAL',
'categoricalValues': [
'BasicLSTMCell',
'BasicRNNCell',
'GRUCell',
'LSTMCell',
'LayerNormBasicLSTMCell'
]
})
# Add hyperparameter specification to the training inputs dictionary.
training_inputs['hyperparameters'] = hyperparams
# Build the job spec.
job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}
Memeriksa kode di aplikasi pelatihan
Dalam aplikasi Anda, tangani argumen command line untuk hyperparameter dan laporkan metrik hyperparameter Anda ke Pelatihan AI Platform.
Menangani argumen command line untuk hyperparameter yang ingin Anda sesuaikan
AI Platform Training menetapkan argumen command line saat memanggil aplikasi pelatihan Anda. Gunakan argumen command line dalam kode Anda:
Tentukan nama untuk setiap argumen hyperparameter dan uraikan menggunakan parser argumen apa pun yang Anda inginkan (biasanya
argparse
). Nama argumen harus cocok dengan nama parameter yang Anda tentukan dalam konfigurasi tugas, seperti dijelaskan di atas.Tetapkan nilai dari argumen command line ke hyperparameter dalam kode pelatihan Anda.
Melaporkan metrik hyperparameter Anda ke Pelatihan AI Platform
Cara melaporkan metrik hyperparameter ke layanan Pelatihan AI Platform bergantung pada apakah Anda menggunakan TensorFlow untuk pelatihan atau tidak. Hal ini juga bergantung pada apakah Anda menggunakan versi runtime atau penampung kustom untuk pelatihan.
Sebaiknya kode pelatihan Anda melaporkan metrik hyperparameter Anda ke Pelatihan AI Platform secara rutin untuk memanfaatkan perhentian awal.
TensorFlow dengan versi runtime
Jika menggunakan versi runtime Pelatihan AI Platform dan berlatih dengan TensorFlow, Anda dapat melaporkan metrik hyperparameter ke Pelatihan AI Platform dengan menulis metrik ke ringkasan TensorFlow. Gunakan salah satu fungsi berikut:
tf.compat.v1.summary.FileWriter.add_summary
(juga dikenal sebagaitf.summary.FileWriter.add_summary
di TensorFlow 1.x)tf.summary.scalar
(hanya di TensorFlow 2.x)
Menggunakan TensorFlow API berbeda yang memanggil salah satu fungsi sebelumnya, seperti dalam contoh Estimator berikut, juga melaporkan metrik hyperparameter ke Pelatihan AI Platform.
Contoh berikut menunjukkan dasar-dasar dua cara berbeda untuk menulis metrik hyperparameter Anda ke sebuah ringkasan. Kedua contoh ini mengasumsikan bahwa Anda melatih model regresi, dan menulis error akar rata-rata kuadrat antara label kebenaran dasar dan prediksi evaluasi sebagai metrik hyperparameter yang bernama metric1
.
Keras
Contoh berikut menggunakan callback Keras kustom untuk menulis ringkasan skalar di akhir setiap epoch pelatihan:
class MyMetricCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
tf.summary.scalar('metric1', logs['RootMeanSquaredError'], epoch)
logdir = "logs/scalars/" + datetime.now().strftime("%Y%m%d-%H%M%S")
file_writer = tf.summary.create_file_writer(logdir + "/metrics")
file_writer.set_as_default()
model = tf.keras.Sequential(
tf.keras.layers.Dense(1, activation='linear', input_dim=784))
model.compile(
optimizer='rmsprop',
loss='mean_squared_error',
metrics=['RootMeanSquaredError'])
model.fit(
x_train,
y_train,
batch_size=64,
epochs=10,
steps_per_epoch=5,
verbose=0,
callbacks=[MyMetricCallback()])
Estimator
Contoh berikut menggunakan tf.estimator.add_metrics
untuk menambahkan metrik hyperparameter ke ringkasan untuk grafik Anda.
Perhatikan bahwa Estimator menulis ringkasan grafik setiap kali metode
evaluate
berjalan. Contoh ini menggunakan tf.estimator.EvalSpec
dengan tf.estimator.train_and_evaluate
untuk mengonfigurasi estimator agar mengevaluasi dan menulis ringkasan setiap 300 detik selama pelatihan.
# Create metric for hyperparameter tuning
def my_metric(labels, predictions):
# Note that different types of estimator provide different different
# keys on the predictions Tensor. predictions['predictions'] is for
# regression output.
pred_values = predictions['predictions']
return {'metric1': tf.compat.v1.metrics.root_mean_squared_error(labels, pred_values)}
# Create estimator to train and evaluate
def train_and_evaluate(output_dir):
estimator = tf.estimator.DNNLinearCombinedRegressor(...)
estimator = tf.estimator.add_metrics(estimator, my_metric)
train_spec = ...
eval_spec = tf.estimator.EvalSpec(
start_delay_secs = 60, # start evaluating after 60 seconds
throttle_secs = 300, # evaluate every 300 seconds
...)
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
Framework machine learning atau container kustom lainnya
Jika Anda menggunakan penampung kustom untuk pelatihan atau jika ingin melakukan penyesuaian hyperparameter dengan framework selain TensorFlow, Anda harus menggunakan paket Python cloudml-hypertune
untuk melaporkan metrik hyperparameter ke Pelatihan AI Platform.
Lihat contoh penggunaan
cloudml-hypertune
.
Mendapatkan detail tugas penyesuaian hyperparameter saat berjalan
Anda dapat memantau penyesuaian hyperparameter dengan mendapatkan status mendetail dari tugas pelatihan yang sedang berjalan.
Objek TrainingOutput
dalam resource Tugas respons memiliki nilai berikut yang ditetapkan selama tugas pelatihan dengan penyesuaian hyperparameter:
isHyperparameterTuningJob
disetel keTrue
.trials
ada dan berisi daftar objekHyperparameterOutput
, satu per uji coba.
Anda juga dapat mengambil ID uji coba dari variabel lingkungan TF_CONFIG
.
Lihat panduan untuk
mendapatkan detail dari TF_CONFIG
.
Mendapatkan hasil penyesuaian hyperparameter
Setelah pelatihan selesai, Anda dapat melihat hasil setiap uji coba di Konsol Google Cloud.
Atau, Anda dapat memanggil
projects.jobs.get
untuk mendapatkan
hasilnya. Objek
TrainingOutput
dalam resource tugas berisi metrik untuk semua eksekusi, dengan metrik
untuk urutan terbaik yang diidentifikasi.
Gunakan permintaan status mendetail yang sama seperti yang Anda gunakan untuk memantau tugas selama pemrosesan untuk mendapatkan informasi ini.
Anda dapat melihat hasil dari setiap uji coba di deskripsi pekerjaan. Di
Konsol Google Cloud, Anda dapat memfilter uji coba menurut rmse
, learning_rate
, dan
training steps
. Temukan uji coba yang menghasilkan nilai yang paling diinginkan untuk metrik hyperparameter Anda. Jika uji coba memenuhi standar keberhasilan model, Anda dapat menggunakan nilai hyperparameter yang ditampilkan untuk uji coba tersebut pada proses selanjutnya dari model Anda.
Terkadang beberapa uji coba memberikan hasil yang sama untuk metrik penyesuaian Anda. Dalam kasus tersebut, Anda harus menentukan nilai hyperparameter mana yang paling menguntungkan oleh ukuran lain. Misalnya, jika Anda menyesuaikan jumlah node dalam lapisan tersembunyi dan mendapatkan hasil yang sama saat nilainya disetel ke 8 seperti saat disetel ke 20, Anda harus menggunakan 8, karena lebih banyak node berarti lebih banyak pemrosesan dan biaya tanpa peningkatan pada model Anda.
Status uji coba FAILED
di
HyperparameterOutput dapat
berarti bahwa pelatihan gagal untuk uji coba tersebut, atau uji coba gagal
melaporkan metrik penyesuaian hyperparameter. Dalam kasus terakhir, tugas induk dapat
berhasil meskipun uji coba gagal. Anda dapat melihat log uji coba untuk mengetahui apakah pelatihan gagal untuk uji coba.
Menetapkan batas jumlah uji coba
Anda harus menentukan jumlah uji coba yang diizinkan untuk menjalankan layanan dan menetapkan
nilai maxTrials
dalam objek HyperparameterSpec.
Ada dua minat yang bersaing untuk dipertimbangkan saat memutuskan jumlah uji coba yang diizinkan:
- waktu (dan akibatnya)
- akurasi
Peningkatan jumlah uji coba umumnya memberikan hasil yang lebih baik, tetapi tidak selalu demikian. Dalam sebagian besar kasus, ada titik penurunan hasil, yang mana uji coba tambahan memiliki sedikit atau tidak berpengaruh pada akurasi. Sebaiknya mulai dengan sedikit uji coba untuk mengukur efek hyperparameter yang dipilih terhadap akurasi model Anda sebelum memulai tugas dengan uji coba dalam jumlah besar.
Untuk mendapatkan hasil maksimal dari penyesuaian hyperparameter, Anda tidak boleh menetapkan nilai maksimum lebih rendah dari sepuluh kali jumlah hyperparameter yang digunakan.
Menangani uji coba yang gagal
Jika uji coba penyesuaian hyperparameter Anda keluar dengan error, Anda mungkin ingin mengakhiri tugas pelatihan lebih awal. Tetapkan kolom maxFailedTrials
di
HyperparameterSpec ke jumlah uji coba gagal yang ingin Anda izinkan.
Setelah jumlah uji coba ini gagal, AI Platform Training mengakhiri tugas pelatihan.
Nilai maxFailedTrials
harus kurang dari atau sama dengan maxTrials
.
Jika maxFailedTrials
tidak ditetapkan, atau jika Anda menyetelnya ke 0
,
AI Platform Training akan menggunakan aturan berikut untuk menangani uji coba yang gagal:
- Jika uji coba pertama tugas Anda gagal, Pelatihan AI Platform akan langsung mengakhiri tugas. Kegagalan selama uji coba pertama menunjukkan adanya masalah pada kode pelatihan Anda, sehingga uji coba berikutnya juga mungkin akan gagal. Mengakhiri tugas memberi Anda kesempatan untuk mendiagnosis masalah tanpa menunggu lebih banyak uji coba dan menimbulkan biaya yang lebih besar.
- Jika uji coba pertama berhasil, Pelatihan AI Platform dapat mengakhiri tugas setelah
gagal selama uji coba berikutnya berdasarkan salah satu kriteria berikut:
- Jumlah uji coba yang gagal bertambah terlalu tinggi.
- Rasio uji coba yang gagal terhadap uji coba yang berhasil meningkat terlalu tinggi.
Batas internal ini dapat berubah sewaktu-waktu. Untuk memastikan perilaku tertentu,
tetapkan kolom maxFailedTrials
.
Menjalankan uji coba paralel
Anda dapat menentukan jumlah uji coba yang akan dijalankan secara paralel dengan menetapkan
maxParallelTrials
dalam objek HyperparameterSpec.
Menjalankan uji coba paralel memiliki manfaat mengurangi waktu yang dibutuhkan tugas pelatihan (real time—total waktu pemrosesan yang diperlukan biasanya tidak berubah). Namun, menjalankan tugas secara paralel dapat mengurangi efektivitas tugas penyesuaian secara keseluruhan. Hal ini karena penyesuaian hyperparameter menggunakan hasil uji coba sebelumnya untuk menginformasikan nilai yang akan ditetapkan ke hyperparameter dari uji coba berikutnya. Saat berjalan secara paralel, beberapa uji coba dimulai tanpa mendapatkan manfaat dari hasil uji coba yang masih berjalan.
Jika Anda menggunakan uji coba paralel, layanan pelatihan akan menyediakan beberapa cluster pemrosesan pelatihan (atau beberapa mesin individu untuk pelatih proses tunggal). Tingkat skala yang Anda tetapkan untuk tugas Anda digunakan untuk setiap cluster pelatihan.
Menghentikan uji coba lebih awal
Anda dapat menentukan bahwa Pelatihan AI Platform harus otomatis menghentikan uji coba yang jelas-jelas tidak menjanjikan. Hal ini menghemat biaya untuk melanjutkan uji coba yang kemungkinan tidak akan berguna.
Untuk mengizinkan penghentian uji coba lebih awal, tetapkan nilai enableTrialEarlyStopping
di HyperparameterSpec ke TRUE
.
Melanjutkan tugas penyesuaian hyperparameter yang telah selesai
Anda dapat melanjutkan tugas penyesuaian hyperparameter yang telah selesai, untuk memulai dari status yang dioptimalkan sebagian. Hal ini memungkinkan penggunaan kembali pengetahuan yang diperoleh dalam tugas penyesuaian hyperparameter sebelumnya.
Untuk melanjutkan tugas penyesuaian hyperparameter, kirimkan tugas penyesuaian hyperparameter baru dengan konfigurasi berikut:
- Tetapkan nilai
resumePreviousJobId
di HyperparameterSpec ke ID tugas dari uji coba sebelumnya. - Menentukan nilai untuk
maxTrials
danmaxParallelTrials
.
Pelatihan AI Platform menggunakan ID tugas sebelumnya untuk menemukan dan menggunakan kembali nilai goal
, params
, dan hyperparameterMetricTag
yang sama untuk melanjutkan tugas penyesuaian hyperparameter.
Gunakan nama hyperparameterMetricTag
dan params
yang konsisten untuk tugas serupa,
meskipun tugas memiliki parameter yang berbeda. Praktik ini memungkinkan
Pelatihan AI Platform meningkatkan pengoptimalan dari waktu ke waktu.
Contoh berikut menunjukkan penggunaan konfigurasi resumePreviousJobId
:
gcloud
trainingInput:
scaleTier: CUSTOM
masterType: complex_model_m
workerType: complex_model_m
parameterServerType: large_model
workerCount: 9
parameterServerCount: 3
hyperparameters:
enableTrialEarlyStopping: TRUE
maxTrials: 30
maxParallelTrials: 1
resumePreviousJobId: [PREVIOUS_JOB_IDENTIFIER]
Python
# Add hyperparameter tuning to the job config.
hyperparams = {
'enableTrialEarlyStopping': True,
'maxTrials': 30,
'maxParallelTrials': 1,
'resumePreviousJobId': [PREVIOUS_JOB_IDENTIFIER]}
# Add the hyperparameter specification to the training inputs dictionary.
training_inputs['hyperparameters'] = hyperparams
# Build the job spec.
job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}
Penyesuaian hyperparameter dengan Cloud TPU
Jika Anda menjalankan tugas penyesuaian hyperparameter dengan Cloud TPU di Pelatihan AI Platform, praktik terbaiknya adalah menggunakan properti eval_metrics
di TPUEstimatorSpec
.
Lihat contoh penyesuaian hyperparameter ResNet-50 TPU untuk contoh kerja penyesuaian hyperparameter dengan Cloud TPU.
Sebagai ganti penggunaan properti eval_metrics
untuk menggunakan layanan penyesuaian hyperparameter, Anda dapat menggunakan alternatifnya dengan memanggil tf.summary
di host_call
. Untuk mengetahui detailnya,
lihat TPUEstimatorSpec
.
Langkah selanjutnya
- Pelajari konsep yang terlibat dalam penyesuaian hyperparameter lebih lanjut.
- Baca postingan blog yang mengukur dampak peningkatan terbaru pada penyesuaian hyperparameter.
- Membaca postingan blog tentang pengoptimalan Bayesian dan penyesuaian hyperparameter.