ענן TensorFlow

הצג באתר TensorFlow.org הפעל ב-Google Colab הצג ב-GitHub הורד מחברת לוגו של Kaggleרוץ בקאגל

TensorFlow Cloud היא ספרייה שמקלה על ביצוע הדרכה וכוונון היפרפרמטרים של דגמי Keras ב-Google Cloud.

באמצעות run API של TensorFlow Cloud, אתה יכול לשלוח את קוד הדגם שלך ישירות לחשבון Google Cloud שלך, ולהשתמש במשאבי המחשוב של Google Cloud ללא צורך בהתחברות ואינטראקציה עם ממשק המשתמש של Cloud (לאחר שהגדרת את הפרויקט שלך בקונסולה).

זה אומר שאתה יכול להשתמש במשאבי המחשוב של Google Cloud ישירות מתוך מחברת Python: מחברת בדיוק כמו זו! אתה יכול גם לשלוח דגמים ל-Google Cloud מסקריפט Python רגיל .py .

דוגמה פשוטה

זוהי דוגמה מבוא פשוטה כדי להדגים כיצד לאמן מודל מרחוק באמצעות TensorFlow Cloud ו-Google Cloud.

אתה יכול פשוט לקרוא אותו כדי לקבל מושג איך זה עובד, או שאתה יכול להפעיל את המחברת ב-Google Colab. הפעלת המחברת דורשת התחברות לחשבון Google Cloud והזנת האישורים ומזהה הפרויקט שלך. ראה הגדרה וחיבור לחשבון Google Cloud שלך אם אין לך עדיין חשבון או אם אינך בטוח כיצד להגדיר פרויקט במסוף.

ייבוא ​​מודולים נדרשים

import tensorflow as tf
tf.version.VERSION
'2.6.0'
! pip install -q tensorflow-cloud
import tensorflow_cloud as tfc
print(tfc.__version__)
import sys

תצורות פרויקט

הגדר פרמטרים של הפרויקט. אם אינך יודע מה אמור להיות GCP_PROJECT_ID או GCS_BUCKET שלך, ראה הגדרה וחיבור לחשבון Google Cloud שלך .

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

# Set Google Cloud Specific parameters

# TODO: Please set GCP_PROJECT_ID to your own Google Cloud project ID.
GCP_PROJECT_ID = 'YOUR_PROJECT_ID'

# TODO: set GCS_BUCKET to your own Google Cloud Storage (GCS) bucket.
GCS_BUCKET = 'YOUR_GCS_BUCKET_NAME'

# DO NOT CHANGE: Currently only the 'us-central1' region is supported.
REGION = 'us-central1'

# OPTIONAL: You can change the job name to any string.
JOB_NAME = 'mnist'

# Setting location were training logs and checkpoints will be stored
GCS_BASE_PATH = f'gs://{GCS_BUCKET}/{JOB_NAME}'
TENSORBOARD_LOGS_DIR = os.path.join(GCS_BASE_PATH,"logs")
MODEL_CHECKPOINT_DIR = os.path.join(GCS_BASE_PATH,"checkpoints")
SAVED_MODEL_DIR = os.path.join(GCS_BASE_PATH,"saved_model")

אימות המחברת לשימוש ב-Google Cloud Project שלך

קוד זה מאמת את המחברת, בודק את האישורים והזהות החוקיים שלך ב-Google Cloud. הוא נמצא בתוך הבלוק if not tfc.remote() כדי להבטיח שהוא מופעל רק במחברת, ולא יופעל כאשר קוד המחברת נשלח אל Google Cloud.

# Using tfc.remote() to ensure this code only runs in notebook
if not tfc.remote():

    # Authentication for Kaggle Notebooks
    if "kaggle_secrets" in sys.modules:
        from kaggle_secrets import UserSecretsClient
        UserSecretsClient().set_gcloud_credentials(project=GCP_PROJECT_ID)

    # Authentication for Colab Notebooks
    if "google.colab" in sys.modules:
        from google.colab import auth
        auth.authenticate_user()
        os.environ["GOOGLE_CLOUD_PROJECT"] = GCP_PROJECT_ID

הגדרת מודל ונתונים

מכאן אנו עוקבים אחר ההליך הבסיסי להגדרת מודל פשוט של Keras להפעלת סיווג על מערך הנתונים של MNIST.

טען ופיצול נתונים

קרא נתונים גולמיים ופצל כדי לאמן ולבדוק מערכי נתונים.

(x_train, y_train), (_, _) = tf.keras.datasets.mnist.load_data()

x_train = x_train.reshape((60000, 28 * 28))
x_train = x_train.astype('float32') / 255

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

צור מודל פשוט והגדר עבורו כמה התקשרויות חוזרות.

from tensorflow.keras import layers

model = tf.keras.Sequential([
  tf.keras.layers.Dense(512, activation='relu', input_shape=(28 * 28,)),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(loss='sparse_categorical_crossentropy',
              optimizer=tf.keras.optimizers.Adam(),
              metrics=['accuracy'])

אימון אימות מהיר

נאמן את המודל לתקופה אחת (1) רק כדי לוודא שהכל מוגדר כהלכה, ואנחנו נעטוף את פקודת האימון הזו ב if not tfc.remote , כך שהיא תתרחש רק כאן בסביבת זמן הריצה שבה אתה קוראים את זה, לא כאשר הוא נשלח אל Google Cloud.

if not tfc.remote():
    # Run the training for 1 epoch and a small subset of the data to validate setup
    model.fit(x=x_train[:100], y=y_train[:100], validation_split=0.2, epochs=1)

היכונו לאימון מרחוק

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

ראשית, אנו מגדירים התקשרויות חוזרות שיעשו:

  • צור יומנים עבור TensorBoard .
  • צור מחסומים ושמור אותם בספריית המחסומים שצוינה לעיל.
  • הפסק את אימון המודל אם ההפסד אינו משתפר במידה מספקת.

לאחר מכן אנו קוראים model.fit ו- model.save , אשר (כאשר קוד זה פועל ב-Google Cloud) אשר למעשה מריצים את ההדרכה המלאה (100 עידנים) ולאחר מכן שומרים את המודל המאומן ב-GCS Bucket ובספרייה שהוגדרו למעלה.

if tfc.remote():
    # Configure Tensorboard logs
    callbacks=[
        tf.keras.callbacks.TensorBoard(log_dir=TENSORBOARD_LOGS_DIR),
        tf.keras.callbacks.ModelCheckpoint(
            MODEL_CHECKPOINT_DIR,
            save_best_only=True),
        tf.keras.callbacks.EarlyStopping(
            monitor='loss',
            min_delta =0.001,
            patience=3)]

    model.fit(x=x_train, y=y_train, epochs=100,
              validation_split=0.2, callbacks=callbacks)

    model.save(SAVED_MODEL_DIR)

התחל את האימון מרחוק

TensorFlow Cloud לוקח את כל הקוד מסביבת הביצוע המקומית שלו (המחברת הזו), עוטף אותו ושולח אותו ל-Google Cloud לביצוע. (לכן חשובות העטיפות if ואם if not tfc.remote .)

שלב זה יכין את הקוד שלך מהמחברת הזו לביצוע מרחוק ולאחר מכן יתחיל עבודת הדרכה מרחוק ב-Google Cloud Platform כדי להכשיר את המודל.

ראשית נוסיף את חבילת tensorflow-cloud Python לקובץ requirements.txt , שיישלח יחד עם הקוד במחברת זו. ניתן להוסיף כאן חבילות אחרות לפי הצורך.

לאחר מכן מצוינים GPU ותמונת CPU. אתה רק צריך לציין זה או אחר; ה-GPU משמש בקוד הבא.

לבסוף, הלב של ענן TensorFlow: הקריאה ל- tfc.run . כאשר זה מבוצע בתוך מחברת זו, כל הקוד מהמחברת הזו, ושאר הקבצים בספרייה זו, ייארזו ונשלחו ל-Google Cloud לביצוע. הפרמטרים בשיטת run מציינים את הפרטים של תמונות המעבד של GPU שצוינו. אתה רק צריך לציין זה או אחר; ה-GPU משמש בקוד הבא.

לבסוף, הלב של ענן TensorFlow: הקריאה ל- tfc.run . כאשר זה מבוצע בתוך מחברת זו, כל הקוד מהמחברת הזו, ושאר הקבצים בספרייה זו, ייארזו ונשלחו ל-Google Cloud לביצוע. הפרמטרים בשיטת run מציינים את הפרטים של ה-GPU ותמונות המעבד שצוינו. אתה רק צריך לציין זה או אחר; ה-GPU משמש בקוד הבא.

לבסוף, הלב של ענן TensorFlow: הקריאה ל- tfc.run . כאשר זה מבוצע בתוך מחברת זו, כל הקוד מהמחברת הזו, ושאר הקבצים בספרייה זו, ייארזו ונשלחו ל-Google Cloud לביצוע. הפרמטרים על שיטת run מציינים את הפרטים של סביבת הביצוע ואסטרטגיית ההפצה (אם יש) שבה יש להשתמש.

לאחר הגשת המשרה תוכל לעבור לשלב הבא כדי לעקוב אחר התקדמות העבודות באמצעות Tensorboard.

# If you are using a custom image you can install modules via requirements
# txt file.
with open('requirements.txt','w') as f:
    f.write('tensorflow-cloud\n')

# Optional: Some recommended base images. If you provide none the system
# will choose one for you.
TF_GPU_IMAGE= "tensorflow/tensorflow:latest-gpu"
TF_CPU_IMAGE= "tensorflow/tensorflow:latest"

# Submit a single node training job using GPU.
tfc.run(
    distribution_strategy='auto',
    requirements_txt='requirements.txt',
    docker_config=tfc.DockerConfig(
        parent_image=TF_GPU_IMAGE,
        image_build_bucket=GCS_BUCKET
        ),
    chief_config=tfc.COMMON_MACHINE_CONFIGS['K80_1X'],
    job_labels={'job': JOB_NAME}
)

תוצאות אימון

חבר מחדש את מופע ה-Colab שלך

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

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

  1. ייבוא ​​מודולים נדרשים
  2. תצורות פרויקט
  3. אימות המחברת לשימוש ב-Google Cloud Project שלך

אל תפעיל מחדש את שאר הקוד.

טען Tensorboard

בזמן שהאימון בעיצומו אתה יכול להשתמש ב- Tensorboard כדי לראות את התוצאות. שימו לב שהתוצאות יופיעו רק לאחר תחילת האימון. פעולה זו עשויה להימשך מספר דקות.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

טען את הדגם המאומן שלך

לאחר השלמת האימון, תוכל לאחזר את הדגם שלך מדלי ה-GCS שציינת למעלה.

trained_model = tf.keras.models.load_model(SAVED_MODEL_DIR)
trained_model.summary()