במדריך הזה נסביר איך להריץ משימת חיפוש של ארכיטקטורה עצבית ב-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.
-
target_device_typeמציין את סוג מכשיר היעד שנתמך ב- Cloud de Confiance, כמוNVIDIA_TESLA_P100. -
use_prebuilt_latency_calculatorמשתמש במחשבון השהיות המובנה שלנוtf_vision/latency_computation_using_saved_model.py. -
target_device_latency_msמציין את זמן האחזור של מכשיר היעד.
במאמר tf_vision/latency_computation_using_saved_model.py מוסבר איך להתאים אישית את פונקציית חישוב זמן האחזור.
מעקב אחר ההתקדמות של משימת Neural Architecture Search ב-Agent Platform
בתרשים שבדף המשימה במסוף Cloud de Confiance מוצג reward vs. trial number, ובטבלה מוצגים התגמולים לכל ניסיון. אפשר למצוא את תקופות הניסיון המובילות עם הפרס הגבוה ביותר.

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

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