ابر TensorFlow

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

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

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

این بدان معناست که شما می توانید از طریق محاسبه منابع Google Cloud خود مستقیماً از یک دفترچه یادداشت پایتون استفاده کنید: نوت بوکی دقیقاً مانند این دفترچه یادداشت! همچنین می توانید از یک اسکریپت ساده Python .py مدل ها را به 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 باید، و نصب و راه اندازی به حساب ابر گوگل شما .

JOB_NAME اختیاری است و می توانید آن را روی هر رشته تنظیم کنید. اگر چندین تجربه آموزش (به عنوان مثال) به عنوان بخشی از یک پروژه بزرگتر انجام می دهید ، ممکن است بخواهید به هر یک از آنها یک 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 ، tfc.remote آموزشی را در 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 و دایرکتوری تعریف شده در بالا ذخیره می کنیم.

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 می فرستد. (به همین دلیل tfc.remote از راه دور if و if not مهم هستند.)

در این مرحله کد شما از این نوت بوک برای اجرای از راه دور آماده می شود و سپس یک کار آموزش از راه دور در Google Cloud Platform برای آموزش مدل شروع می شود.

در ابتدا ما اضافه tensorflow-cloud بسته پایتون به یک requirements.txt فایل، که همراه با کد امنیتی را در این نوت بوک ارسال خواهد شد. در صورت لزوم می توانید بسته های دیگری را در اینجا اضافه کنید.

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

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

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

سرانجام ، قلب ابر tfc.run : تماس با 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()