איך משתמשים במרחבי חיפוש מוכנים מראש ובמאמן מוכן מראש

במדריך הזה נסביר איך להריץ משימת חיפוש של ארכיטקטורה עצבית ב-Agent Platform באמצעות מרחבי חיפוש מוכנים מראש של Google וקוד אימון מוכן מראש שמבוסס על TF-vision עבור MnasNet ו-SpineNet. דוגמאות מקצה לקצה מופיעות במחברת הסיווג של MnasNet ובמחברת זיהוי האובייקטים של SpineNet.

הכנת נתונים לאימון מודל מוכן מראש

המאמן המובנה של Agent Platform Neural Architecture Search דורש שהנתונים יהיו בפורמט TFRecord, ויכילו tf.train.Example. הפרמטרים tf.train.Example חייבים לכלול את השדות הבאים:

'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)

כאן אפשר למצוא הוראות להכנת נתונים של ImageNet.

כדי להמיר את הנתונים המותאמים אישית, השתמשו בסקריפט הניתוח שכלול בקוד לדוגמה ובכלי השירות שהורדתם. כדי להתאים אישית את ניתוח הנתונים, משנים את הקבצים tf_vision/dataloaders/*_input.py.

מידע נוסף על TFRecord ועל tf.train.Example

הגדרת משתני סביבה של הניסוי

לפני שמריצים את הניסויים, צריך להגדיר כמה משתני סביבה, כולל:

  • ‫TRAINER_DOCKER_ID: ${USER}_nas_experiment (הפורמט המומלץ)
  • מיקומי Cloud Storage של מערכי נתוני האימון והאימות שבהם הניסוי ישתמש. לדוגמה (CoCo לזיהוי):

    • gs://cloud-samples-data/ai-platform/built-in/image/coco/train*
    • gs://cloud-samples-data/ai-platform/built-in/image/coco/val*
  • מיקום ב-Cloud Storage לפלט של הניסוי. פורמט מומלץ:

    • gs://${USER}_nas_experiment
  • אזור: אזור שצריך להיות זהה לאזור של קטגוריית הפלט של הניסוי. לדוגמה: us-central1.

  • ‫PARAM_OVERRIDE: קובץ YAML שמשנה את הפרמטרים של כלי האימון המובנה. פלטפורמת הסוכנים Neural Architecture Search מספקת כמה הגדרות ברירת מחדל שאפשר להשתמש בהן:

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

אולי תרצו לבחור או לשנות את קובץ ההחלפה שמתאים לדרישות האימון שלכם. כמה נקודות שכדאי לחשוב עליהן:

  • אפשר להגדיר את --accelerator_type לבחירה בין GPU ל-CPU. כדי להריץ רק כמה תקופות לצורך בדיקה מהירה באמצעות CPU, אפשר להגדיר את הדגל --accelerator_type="" ולהשתמש בקובץ ההגדרות tf_vision/test_files/fast_nas_detection_spinenet_search_for_testing.yaml.
  • מספר התקופות של זמן המערכת
  • זמן ריצה של אימון
  • היפר-פרמטרים כמו קצב הלמידה

רשימה של כל הפרמטרים לשליטה במשימות האימון מופיעה במאמר בנושא tf_vision/configs/. אלה הפרמטרים העיקריים:

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

יוצרים קטגוריה של Cloud Storage כדי לאחסן את פלט המשימות (כלומר, נקודות ביקורת) של Agent Platform Neural Architecture Search:

gcloud storage buckets create $GCS_ROOT_DIR

יצירת קונטיינר לאימון וקונטיינר לחישוב זמן האחזור

הפקודה הבאה תיצור קובץ אימג' של מאמן ב- Cloud de Confiance by S3NS עם ה-URI הבא: gcr.io/PROJECT_ID/TRAINER_DOCKER_ID שבו ישמש בתהליך חיפוש הארכיטקטורה העצבית של Agent Platform בשלב הבא.

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

כדי לשנות את מרחב החיפוש ואת התגמול, מעדכנים אותם בקובץ Python ואז בונים מחדש את תמונת ה-Docker.

בדיקה של המאמן באופן מקומי

הפעלת משימה בשירות Cloud de Confiance לוקחת כמה דקות, ולכן יכול להיות שיהיה לכם נוח יותר לבדוק את ה-trainer docker באופן מקומי, למשל כדי לאמת את הפורמט TFRecord. לדוגמה, אם משתמשים במרחב החיפוש spinenet, אפשר להריץ את משימת החיפוש באופן מקומי (המודל יידגם באופן אקראי):

# 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 ו-validation_data_path הם הנתיבים לקובצי TFRecord.

הפעלת חיפוש בשלב 1 ואחריו משימת אימון בשלב 2 ב- Cloud de Confiance

דוגמאות מקצה לקצה אפשר למצוא במחברת הסיווג של MnasNet ובמחברת זיהוי האובייקטים של SpineNet.

  • כדי להתאים אישית, אפשר להגדיר את הדגל --max_parallel_nas_trial ואת הדגל --max_nas_trial. Agent Platform Neural Architecture Search תתחיל max_parallel_nas_trial ניסיונות במקביל ותסיים אחרי max_nas_trial ניסיונות.

  • אם הדגל --target_device_latency_ms מוגדר, תופעל משימה נפרדת latency calculator עם המאיץ שצוין בדגל --target_device_type.

  • ה-Agent Platform Neural Architecture Search Controller יספק לכל ניסיון הצעה לארכיטקטורה חדשה דרך ה-FLAG‏ --nas_params_str.

  • בכל תקופת ניסיון ייווצר גרף על סמך הערך של הדגל nas_params_str ותתחיל משימת אימון. בנוסף, הערך של כל תקופת ניסיון נשמר בקובץ JSON (בנתיב os.path.join(nas_job_dir, str(trial_id), "nas_params_str.json")).

תגמול עם אילוץ של זמן אחזור

במחברת הסיווג MnasNet מוצגת דוגמה לחיפוש מבוסס-מכשיר בענן עם מגבלות על זמן האחזור.

כדי לחפש מודלים עם מגבלת זמן אחזור, המאמן יכול לדווח על תגמול כפונקציה של דיוק וזמן אחזור.

בקוד המקור המשותף, התגמול מחושב באופן הבא:

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)

אפשר להשתמש בחישובים אחרים של reward בדף 3 של המאמר על MnasNet.

במאמר tf_vision/latency_computation_using_saved_model.py מוסבר איך להתאים אישית את פונקציית חישוב זמן האחזור.

מעקב אחר ההתקדמות של משימת Neural Architecture Search ב-Agent Platform

בתרשים שבדף המשימה במסוף Cloud de Confiance מוצג reward vs. trial number, ובטבלה מוצגים התגמולים לכל ניסיון. אפשר למצוא את תקופות הניסיון המובילות עם הפרס הגבוה ביותר.

דף פרטי המשרה שבו מוצגים תרשים של תגמול על תקופת ניסיון וטבלת מדדים במסוף Cloud de Confiance .

שרטוט עקומת אימון של שלב 2

אחרי האימון בשלב 2, משתמשים ב-Cloud Shell או ב- Cloud de Confiance TensorBoard כדי לשרטט את עקומת האימון על ידי הפנייה לספריית העבודות:

מדדים של עקומת האימון לאורך השלבים, שמוצגים ב-TensorBoard.

פריסת מודל שנבחר

כדי ליצור SavedModel, אפשר להשתמש בסקריפט export_saved_model.py עם params_override=${GCS_ROOT_DIR}/${TRIAL_ID}/params.yaml.