TensorFlow Cloud

مشاهده در TensorFlow.org در GitHub مشاهده کنید دانلود دفترچه یادداشت لوگوی Kaggleدر Kaggle بدوید

TensorFlow Cloud کتابخانه ای است که آموزش و تنظیم هایپرپارامتر مدل های Keras را در Google Cloud آسان تر می کند.

با استفاده از API run TensorFlow Cloud، می توانید کد مدل خود را مستقیماً به حساب Google Cloud خود ارسال کنید و از منابع محاسباتی Google Cloud بدون نیاز به ورود به سیستم و تعامل با Cloud UI (پس از راه اندازی پروژه خود در کنسول) استفاده کنید.

این بدان معنی است که می توانید از منابع محاسباتی Google Cloud خود مستقیماً از داخل یک نوت بوک پایتون استفاده کنید: یک دفترچه یادداشت درست مانند این! همچنین می‌توانید مدل‌ها را از طریق یک اسکریپت .py Python به Google Cloud ارسال کنید.

مثال ساده

این یک مثال مقدماتی ساده برای نشان دادن نحوه آموزش یک مدل از راه دور با استفاده از 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) دوره آموزش می‌دهیم تا مطمئن شویم همه چیز به درستی تنظیم شده است، و آن دستور آموزشی را در tfc.remote قرار if not ، به طوری که فقط در اینجا در محیط اجرا که در آن شما اتفاق می‌افتد این را می خوانند، نه زمانی که به 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 و دایرکتوری تعریف شده در بالا ذخیره می کند.

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 را به یک فایل requirements.txt اضافه می کنیم که به همراه کد موجود در این دفترچه ارسال می شود. در صورت نیاز می توانید بسته های دیگر را در اینجا اضافه کنید.

سپس یک GPU و یک تصویر CPU مشخص می شود. شما فقط باید یکی یا دیگری را مشخص کنید. GPU در کد زیر استفاده شده است.

در نهایت، قلب ابر TensorFlow: تماس با tfc.run . هنگامی که این در داخل این نوت بوک اجرا می شود، تمام کدهای این نوت بوک و بقیه فایل های این دایرکتوری بسته بندی شده و برای اجرا به Google Cloud ارسال می شود. پارامترهای روی روش run ، جزئیات تصاویر پردازنده گرافیکی را مشخص می کند. شما فقط باید یکی یا دیگری را مشخص کنید. GPU در کد زیر استفاده شده است.

در نهایت، قلب ابر TensorFlow: تماس با tfc.run . هنگامی که این در داخل این نوت بوک اجرا می شود، تمام کدهای این نوت بوک و بقیه فایل های این دایرکتوری بسته بندی شده و برای اجرا به Google Cloud ارسال می شود. پارامترهای روی روش run جزئیات GPU را مشخص می کنند و تصاویر CPU مشخص می شوند. شما فقط باید یکی یا دیگری را مشخص کنید. 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()