Cara menggunakan ruang penelusuran bawaan dan trainer bawaan

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 konfigurasi tf_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 coba max_parallel_nas_trial secara paralel, dan berakhir setelah uji coba max_nas_trial.

  • Jika flag --target_device_latency_ms ditetapkan, tugas latency 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 (di os.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.

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.

Neural Architecture Search di dalam Konsol Google Cloud.

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:

Pengklasteran TensorBoard.

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.