Panduan ini menunjukkan cara untuk menjalankan tugas Vertex AI Neural Architecture Search menggunakan ruang penelusuran bawaan Google, dan kode trainer bawaan berdasarkan TF-vision untuk MnasNet dan SpineNet. Lihat Notebook klasifikasi MnasNet dan Notebook deteksi objek SpineNet untuk contoh end-to-end-nya.
Persiapan data untuk trainer bawaan
Trainer Neural Architecture Search bawaan mengharuskan data Anda
menggunakan format TFRecord
, yang berisi
tf.train.Example
. tf.train.Example
harus menyertakan kolom berikut ini:
'image/encoded': tf.FixedLenFeature(tf.string)
'image/height': tf.FixedLenFeature(tf.int64)
'image/width': tf.FixedLenFeature(tf.int64)
# For image classification only.
'image/class/label': tf.FixedLenFeature(tf.int64)
# For object detection only.
'image/object/bbox/xmin': tf.VarLenFeature(tf.float32)
'image/object/bbox/xmax': tf.VarLenFeature(tf.float32)
'image/object/bbox/ymin': tf.VarLenFeature(tf.float32)
'image/object/bbox/ymax': tf.VarLenFeature(tf.float32)
'image/object/class/label': tf.VarLenFeature(tf.int64)
Anda dapat mengikuti petunjuk persiapan data ImageNet di sini.
Untuk mengonversi data kustom, gunakan skrip penguraian yang disertakan dengan kode contoh dan utilitas yang telah Anda download. Untuk menyesuaikan penguraian data, ubah file tf_vision/dataloaders/*_input.py.
Pelajari lebih lanjut tentang
TFRecord
dan tf.train.Example
.
Menentukan variabel lingkungan eksperimen
Sebelum menjalankan eksperimen, Anda perlu menentukan beberapa variabel lingkungan yang meliputi:
- TRAINER_DOCKER_ID:
${USER}_nas_experiment
(format yang disarankan) Lokasi Cloud Storage dari set data pelatihan dan validasi yang akan digunakan oleh eksperimen tersebut. Misalnya (CoCo untuk deteksi):
gs://cloud-samples-data/ai-platform/built-in/image/coco/train*
gs://cloud-samples-data/ai-platform/built-in/image/coco/val*
Lokasi Cloud Storage untuk output eksperimen. Format yang disarankan:
gs://${USER}_nas_experiment
REGION: Region yang harus sama dengan region bucket output eksperimen. Misalnya:
us-central1
.PARAM_OVERRIDE: file .yaml yang mengganti parameter trainer bawaan. Neural Architecture Search menyediakan beberapa konfigurasi default yang dapat Anda gunakan:
PROJECT_ID=PROJECT_ID
TRAINER_DOCKER_ID=TRAINER_DOCKER_ID
LATENCY_CALCULATOR_DOCKER_ID=LATENCY_CALCULATOR_DOCKER_ID
GCS_ROOT_DIR=OUTPUT_DIR
REGION=REGION
PARAM_OVERRIDE=tf_vision/configs/experiments/spinenet_search_gpu.yaml
TRAINING_DATA_PATH=gs://PATH_TO_TRAINING_DATA
VALIDATION_DATA_PATH=gs://PATH_TO_VALIDATION_DATA
Anda mungkin ingin memilih dan/atau mengubah file penggantian yang cocok dengan persyaratan pelatihan Anda. Pertimbangkan hal berikut ini:
- Anda dapat menyetel
--accelerator_type
untuk memilih dari GPU atau CPU. Untuk menjalankan beberapa epoch untuk pengujian yang cepat hanya menggunakan CPU, Anda dapat menetapkan Flag--accelerator_type=""
dan menggunakan file konfigurasitf_vision/test_files/fast_nas_detection_spinenet_search_for_testing.yaml
. - Jumlah epoch
- Runtime pelatihan
- Hyperparameter seperti kecepatan pembelajaran
Untuk mengetahui daftar semua parameter guna mengontrol tugas pelatihan, lihat
tf_vision/configs/
. Berikut ini adalah parameter utamanya:
task:
train_data:
global_batch_size: 80
validation_data:
global_batch_size: 16
init_checkpoint: null
trainer:
train_steps: 16634
steps_per_loop: 1386
optimizer_config:
learning_rate:
cosine:
initial_learning_rate: 0.16
decay_steps: 16634
type: 'cosine'
warmup:
type: 'linear'
linear:
warmup_learning_rate: 0.0067
warmup_steps: 1386
Membuat bucket Cloud Storage untuk Neural Architecture Search guna menyimpan output tugas Anda (misalnya, checkpoint):
gsutil mkdir $GCS_ROOT_DIR
Membuat container trainer dan container kalkulator latensi
Perintah berikut ini akan mem-build image trainer di Google Cloud dengan
URI sebagai berikut:
gcr.io/PROJECT_ID/TRAINER_DOCKER_ID
yang akan digunakan dalam tugas Neural Architecture Search
pada langkah berikutnya.
python3 vertex_nas_cli.py build \
--project_id=PROJECT_ID \
--trainer_docker_id=TRAINER_DOCKER_ID \
--latency_calculator_docker_id=LATENCY_CALCULATOR_DOCKER_ID \
--trainer_docker_file=tf_vision/nas_multi_trial.Dockerfile \
--latency_calculator_docker_file=tf_vision/latency_computation_using_saved_model.Dockerfile
Untuk mengubah ruang penelusuran dan reward, update keduanya di file Python Anda, lalu build ulang image docker-nya.
Menguji trainer secara lokal
Karena peluncuran tugas di layanan Google Cloud memerlukan waktu beberapa menit, mungkin akan lebih
mudah untuk menguji docker secara lokal, misalnya, memvalidasi format
TFRecord. Gunakan ruang penelusuran spinenet
sebagai contoh, Anda dapat menjalankan tugas penelusuran
secara lokal (model akan diambil sampelnya secara acak):
# Define the local job output dir.
JOB_DIR="/tmp/iod_${search_space}"
python3 vertex_nas_cli.py search_in_local \
--project_id=PROJECT_ID \
--trainer_docker_id=TRAINER_DOCKER_ID \
--prebuilt_search_space=spinenet \
--use_prebuilt_trainer=True \
--local_output_dir=${JOB_DIR} \
--search_docker_flags \
params_override="tf_vision/test_files/fast_nas_detection_spinenet_search_for_testing.yaml" \
training_data_path=TEST_COCO_TF_RECORD \
validation_data_path=TEST_COCO_TF_RECORD \
model=retinanet
training_data_path
dan validation_data_path
adalah
jalur ke TFRecords Anda.
Meluncurkan penelusuran tahap 1, diikuti dengan tugas pelatihan tahap 2 di Google Cloud
Anda harus melihat Notebook klasifikasi MnasNet dan Notebook deteksi objek SpineNet untuk contoh end-to-end-nya.
Anda dapat menetapkan flag
--max_parallel_nas_trial
dan--max_nas_trial
untuk menyesuaikan. Neural Architecture Search akan memulai uji cobamax_parallel_nas_trial
secara paralel, dan berakhir setelah uji cobamax_nas_trial
.Jika flag
--target_device_latency_ms
ditetapkan, tugaslatency calculator
terpisah akan diluncurkan dengan akselerator yang telah ditentukan oleh flag--target_device_type
.Neural Architecture Search Controller akan memberikan setiap uji coba dengan saran untuk kandidat arsitektur yang baru melalui
--nas_params_str
FLAG.Setiap uji coba akan membuat grafik berdasarkan nilai
nas_params_str
FLAG dan memulai tugas pelatihan. Setiap uji coba juga menyimpan nilainya ke dalam file json (dios.path.join(nas_job_dir, str(trial_id), "nas_params_str.json")
).
Reward dengan batasan latensi
Notebook klasifikasi MnasNet menampilkan contoh penelusuran terbatas latensi berbasis perangkat cloud-cpu.
Untuk menelusuri model dengan batasan latensi, trainer dapat melaporkan reward sebagai fungsi dari akurasi dan latensi.
Dalam kode sumber bersama, reward-nya dihitung sebagai berikut:
def compute_reward(target_latency, accuracy, inference_latency, weight=0.07):
"""Compute reward from accuracy and latency."""
speed_ratio = target_latency / inference_latency
return accuracy * (speed_ratio**weight)
Anda dapat menggunakan varian penghitungan reward
lainnya di halaman 3
dalam kertas mnasnet.
target_device_type
menentukan jenis perangkat target yang didukung di Google Cloud, seperti,NVIDIA_TESLA_P100
.use_prebuilt_latency_calculator
menggunakan kalkulator latensitf_vision/latency_computation_using_saved_model.py
bawaan kami.target_device_latency_ms
menentukan latensi perangkat target.
Untuk mengetahui informasi tentang cara untuk menyesuaikan fungsi penghitungan latensi,
lihat tf_vision/latency_computation_using_saved_model.py
.
Memantau progres tugas Neural Architecture Search Anda
Di dalam Konsol Google Cloud, di halaman tugas, chart menampilkan reward vs. trial number
sedangkan table menampilkan reward untuk setiap uji coba. Anda dapat menemukan uji coba
teratas dengan reward tertinggi.
Memetakan kurva pelatihan tahap 2
Setelah pelatihan tahap 2, Anda menggunakan Cloud Shell atau Google Cloud
TensorBoard
untuk merencanakan
kurva pelatihan dengan mengarahkannya ke direktori tugas:
Men-deploy model yang dipilih
Untuk membuat SavedModel, Anda dapat menggunakan
skrip export_saved_model.py
dengan
params_override=${GCS_ROOT_DIR}/${TRIAL_ID}/params.yaml
.