Halaman ini menunjukkan cara menggunakan penyesuaian hyperparameter Pelatihan AI Platform saat melatih model. 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 tetapkan ke ringkasan skalar yang Anda tambahkan ke pelatih.
Langkah-langkah yang terlibat dalam penyesuaian hyperparameter
Untuk menggunakan penyesuaian hyperparameter dalam tugas pelatihan, Anda harus melakukan langkah-langkah berikut:
Tentukan konfigurasi penyesuaian hyperparameter untuk tugas pelatihan dengan menyertakan HyperparameterSpec dalam objek TrainingInput.
Sertakan kode berikut dalam aplikasi pelatihan Anda:
- Urai argumen command line yang merepresentasikan hyperparameter yang ingin Anda sesuaikan, lalu gunakan nilai tersebut untuk menetapkan hyperparameter untuk uji coba pelatihan Anda.
- Tambahkan metrik hyperparameter ke ringkasan untuk grafik Anda.
Berikut detail selengkapnya tentang setiap langkah.
Menentukan konfigurasi penyesuaian hyperparameter untuk tugas pelatihan
Buat objek HyperparameterSpec untuk menyimpan konfigurasi penyesuaian hyperparameter
untuk tugas pelatihan Anda, dan tambahkan HyperparameterSpec
sebagai
objek hyperparameters
di objek TrainingInput.
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. 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 dan tambahkan ke
input pelatihan Anda. 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 AI Platform Training.
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 yang dijelaskan di atas.Tetapkan nilai dari argumen command line ke hyperparameter dalam kode pelatihan Anda.
Melaporkan metrik hyperparameter ke AI Platform Training
Cara melaporkan metrik hyperparameter ke layanan AI Platform Training bergantung pada apakah Anda menggunakan TensorFlow untuk pelatihan atau tidak. Hal ini juga bergantung pada apakah Anda menggunakan versi runtime atau container kustom untuk pelatihan.
Sebaiknya kode pelatihan Anda melaporkan metrik hyperparameter ke Pelatihan AI Platform secara rutin untuk memanfaatkan penghentian 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 yang berbeda yang memanggil salah satu fungsi sebelumnya, seperti dalam contoh Estimator berikut, juga melaporkan metrik hyperparameter ke Pelatihan Platform AI.
Contoh berikut menunjukkan dasar-dasar dua cara berbeda untuk menulis
metrik hyperparameter ke ringkasan. Kedua contoh tersebut mengasumsikan bahwa Anda melatih
model regresi, dan keduanya menulis root-mean-square-error antara label
kebenaran nyata dan prediksi evaluasi sebagai metrik hyperparameter 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 guna 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 Anda ingin melakukan penyesuaian hyperparameter dengan framework selain
TensorFlow, Anda harus menggunakan
paket Python cloudml-hypertune
untuk melaporkan metrik hyperparameter ke AI Platform Training.
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 percobaan.
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 dijalankan, Anda dapat melihat hasil setiap uji coba di konsol Google Cloud.
Atau, Anda dapat memanggil
projects.jobs.get
untuk mendapatkan
hasilnya. Objek
TrainingOutput
di resource tugas berisi metrik untuk semua operasi, dengan metrik
untuk operasi yang disesuaikan terbaik 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 tugas. 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 dalam
eksekusi model berikutnya.
Terkadang beberapa uji coba memberikan hasil yang identik untuk metrik penyesuaian Anda. Dalam kasus tersebut, Anda harus menentukan nilai hyperparameter mana yang paling menguntungkan berdasarkan ukuran lain. Misalnya, jika Anda menyesuaikan jumlah node di lapisan tersembunyi dan mendapatkan hasil yang identik saat nilai disetel ke 8 seperti saat disetel ke 20, Anda harus menggunakan 8, karena semakin banyak node berarti semakin 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 bahwa 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 melihat apakah
pelatihan gagal untuk uji coba.
Menetapkan batas jumlah uji coba
Anda harus menentukan jumlah uji coba yang ingin Anda izinkan untuk menjalankan layanan, dan tetapkan
nilai maxTrials
dalam objek HyperparameterSpec.
Ada dua minat yang bersaing untuk dipertimbangkan saat memutuskan jumlah uji coba yang diizinkan:
- waktu (dan akibatnya biaya)
- akurasi
Meningkatkan jumlah uji coba umumnya memberikan hasil yang lebih baik, tetapi tidak selalu demikian. Dalam sebagian besar kasus, ada titik penurunan laba, yang setelahnya uji coba tambahan memiliki sedikit atau tidak berpengaruh pada akurasi. Sebaiknya mulai dengan sedikit uji coba untuk mengukur efek hyperparameter yang Anda pilih terhadap akurasi model sebelum memulai tugas dengan jumlah uji coba yang 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 akan mengakhiri tugas pelatihan.
Nilai maxFailedTrials
harus kurang dari atau sama dengan maxTrials
.
Jika maxFailedTrials
tidak ditetapkan, atau jika Anda menetapkannya ke 0
,
Pelatihan AI Platform akan menggunakan aturan berikut untuk menangani uji coba yang gagal:
- Jika uji coba pertama tugas Anda gagal, AI Platform Training akan langsung mengakhiri tugas Anda. Kegagalan selama uji coba pertama menunjukkan adanya masalah pada kode pelatihan Anda, sehingga uji coba berikutnya juga mungkin akan gagal. Dengan mengakhiri tugas, Anda dapat mendiagnosis masalah tanpa menunggu uji coba lebih banyak dan menimbulkan biaya yang lebih besar.
- Jika uji coba pertama berhasil, Pelatihan AI Platform mungkin akan 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.
Nilai minimum 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
di 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 individual untuk pelatih proses tunggal). Tingkat skala yang Anda tetapkan untuk tugas digunakan untuk setiap cluster pelatihan.
Menghentikan uji coba lebih awal
Anda dapat menentukan bahwa Pelatihan AI Platform harus otomatis menghentikan uji coba yang jelas tidak akan memberikan hasil yang baik. 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, kirim tugas penyesuaian hyperparameter baru dengan konfigurasi berikut:
- Tetapkan nilai
resumePreviousJobId
di HyperparameterSpec ke ID tugas uji coba sebelumnya. - Tentukan nilai untuk
maxTrials
danmaxParallelTrials
.
AI Platform Training 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 yang 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 TPU ResNet-50 untuk contoh penerapan penyesuaian hyperparameter dengan Cloud TPU.
Sebagai ganti menggunakan properti eval_metrics
untuk menggunakan layanan penyesuaian hyperparameter, alternatifnya adalah 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.