این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

آموزش مدلهای Keras با TensorFlow Cloud

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

معرفی

TensorFlow Cloud یک بسته پایتون است که API ها را برای انتقال بی نقص از اشکال زدایی محلی به آموزش توزیع شده در Google Cloud فراهم می کند. این فرایند آموزش مدلهای TensorFlow روی ابر را به یک تماس عملکردی ساده و ساده ، ساده می کند ، که به تنظیمات کمتری نیاز دارد و هیچ تغییری در مدل شما ایجاد نمی شود. TensorFlow Cloud وظایف خاص ابر مانند ایجاد نمونه های VM و استراتژی های توزیع را برای مدل های شما به طور خودکار انجام می دهد. این راهنما نحوه ارتباط با Google Cloud از طریق TensorFlow Cloud و طیف گسترده ای از قابلیت های ارائه شده در TensorFlow Cloud را نشان می دهد. ما با ساده ترین حالت استفاده شروع خواهیم کرد.

برپایی

ما با نصب TensorFlow Cloud و وارد کردن بسته های مورد نیاز در این راهنما شروع به کار خواهیم کرد.

pip install -q tensorflow_cloud
import tensorflow as tf
import tensorflow_cloud as tfc

from tensorflow import keras
from tensorflow.keras import layers

بررسی اجمالی API: اولین مثال پایان به انتها

بیایید با یک اسکریپت آموزش مدل Keras مانند CNN زیر شروع کنیم:

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

model = keras.Sequential(
    [
        keras.Input(shape=(28, 28)),
        # Use a Rescaling layer to make sure input values are in the [0, 1] range.
        layers.experimental.preprocessing.Rescaling(1.0 / 255),
        # The original images have shape (28, 28), so we reshape them to (28, 28, 1)
        layers.Reshape(target_shape=(28, 28, 1)),
        # Follow-up with a classic small convnet
        layers.Conv2D(32, 3, activation="relu"),
        layers.MaxPooling2D(2),
        layers.Conv2D(32, 3, activation="relu"),
        layers.MaxPooling2D(2),
        layers.Conv2D(32, 3, activation="relu"),
        layers.Flatten(),
        layers.Dense(128, activation="relu"),
        layers.Dense(10),
    ]
)

model.compile(
    optimizer=keras.optimizers.Adam(),
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=keras.metrics.SparseCategoricalAccuracy(),
)

model.fit(x_train, y_train, epochs=20, batch_size=128, validation_split=0.1)

برای آموزش این مدل در Google Cloud ، فقط باید در ابتدای اسکریپت ، قبل از وارد کردن ، فراخوانی برای run() اضافه کنیم:

tfc.run()

هنگام استفاده از TensorFlow Cloud نیازی نیست نگران کارهای خاص Cloud مانند ایجاد نمونه های VM و استراتژی های توزیع باشید. API شامل پیش فرض های هوشمند برای همه پارامترها است - همه چیز قابل تنظیم است ، اما بسیاری از مدل ها می توانند به این پیش فرض ها اعتماد کنند.

با فراخوانی run() ، TensorFlow Cloud:

  • توزیع اسکریپت یا نوت بوک پایتون را آماده کنید.
  • با وابستگی های لازم ، آن را به یک تصویر Docker تبدیل کنید.
  • کار آموزش را روی یک ماشین مجازی GCP GPU انجام دهید.
  • گزارشهای مربوطه و شغلی مربوطه را پخش جریانی کنید.

پیکربندی پیش فرض VM 1 رئیس و 0 کارگر با 8 هسته پردازنده و 1 پردازنده گرافیکی Tesla T4 است.

پیکربندی Google Cloud

به منظور تسهیل مسیرهای مناسب برای آموزش Cloud ، باید تنظیماتی را برای اولین بار انجام دهید. اگر کاربر جدید Google Cloud هستید ، چند مرحله اولیه وجود دارد که باید انجام دهید:

  1. ایجاد یک پروژه GCP ؛
  2. فعال کردن خدمات بستر های نرم افزاری هوش مصنوعی ؛
  3. ایجاد یک حساب کاربری
  4. بارگیری یک کلید مجوز ؛
  5. یک سطل Cloud Storage ایجاد کنید.

دستورالعمل های دقیق نصب اولین بار را می توان در TensorFlow Cloud README یافت و یک مثال تنظیمات اضافی در TensorFlow Blog نشان داده شده است.

گردش کار معمول و فضای ذخیره سازی Cloud

در بیشتر موارد ، شما می خواهید پس از آموزش در Google Cloud ، مدل خود را بازیابی کنید. برای این امر ، هدایت مجدد ذخیره و بارگیری به Cloud Storage هنگام آموزش از راه دور بسیار مهم است. ما می توانیم TensorFlow Cloud را برای کارهای مختلف به سطل Cloud Storage خود هدایت کنیم. از سطل ذخیره سازی می توان برای ذخیره و بارگذاری مجموعه داده های بزرگ آموزشی ، ذخیره سیاهههای مربوط به پاسخ تماس یا وزن مدل و ذخیره فایلهای مدل آموزش دیده استفاده کرد. برای شروع ، بیایید fit() برای ذخیره مدل در Cloud Storage پیکربندی fit() و برای پیگیری پیشرفت آموزش ، نظارت بر TensorBoard را تنظیم کنیم.

def create_model():
    model = keras.Sequential(
        [
            keras.Input(shape=(28, 28)),
            layers.experimental.preprocessing.Rescaling(1.0 / 255),
            layers.Reshape(target_shape=(28, 28, 1)),
            layers.Conv2D(32, 3, activation="relu"),
            layers.MaxPooling2D(2),
            layers.Conv2D(32, 3, activation="relu"),
            layers.MaxPooling2D(2),
            layers.Conv2D(32, 3, activation="relu"),
            layers.Flatten(),
            layers.Dense(128, activation="relu"),
            layers.Dense(10),
        ]
    )

    model.compile(
        optimizer=keras.optimizers.Adam(),
        loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
        metrics=keras.metrics.SparseCategoricalAccuracy(),
    )
    return model

بیایید سیاهههای مربوط به TensorBoard و ایست بازرسی مدل تولید شده در حین آموزش را در سطل ذخیره سازی ابر خود ذخیره کنیم.

import datetime
import os

# Note: Please change the gcp_bucket to your bucket name.
gcp_bucket = "keras-examples"

checkpoint_path = os.path.join("gs://", gcp_bucket, "mnist_example", "save_at_{epoch}")

tensorboard_path = os.path.join(  # Timestamp included to enable timeseries graphs
    "gs://", gcp_bucket, "logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
)

callbacks = [
    # TensorBoard will store logs for each epoch and graph performance for us.
    keras.callbacks.TensorBoard(log_dir=tensorboard_path, histogram_freq=1),
    # ModelCheckpoint will save models after each epoch for retrieval later.
    keras.callbacks.ModelCheckpoint(checkpoint_path),
    # EarlyStopping will terminate training when val_loss ceases to improve.
    keras.callbacks.EarlyStopping(monitor="val_loss", patience=3),
]

model = create_model()

در اینجا ، ما مستقیماً داده های خود را از Keras بارگیری می کنیم. به طور کلی ، بهترین روش این است که مجموعه داده خود را در سطل Cloud Storage خود ذخیره کنید ، با این وجود TensorFlow Cloud همچنین می تواند مجموعه داده های ذخیره شده محلی را در خود جای دهد. که در بخش چند پرونده ای این راهنما آمده است.

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

TensorFlow Cloud API عملکرد remote() برای تعیین اینکه کد به صورت محلی اجرا می شود یا روی ابر فراهم می کند. این امکان را برای تعیین پارامترهای fit() برای اجرای محلی و از راه دور فراهم می کند ، و وسیله ای برای اشکال زدایی آسان بدون بارگذاری بیش از حد دستگاه محلی شما فراهم می کند.

if tfc.remote():
    epochs = 100
    callbacks = callbacks
    batch_size = 128
else:
    epochs = 5
    batch_size = 64
    callbacks = None

model.fit(x_train, y_train, epochs=epochs, callbacks=callbacks, batch_size=batch_size)
Epoch 1/5
938/938 [==============================] - 2s 2ms/step - loss: 0.2018 - sparse_categorical_accuracy: 0.9399
Epoch 2/5
938/938 [==============================] - 2s 2ms/step - loss: 0.0556 - sparse_categorical_accuracy: 0.9832
Epoch 3/5
938/938 [==============================] - 2s 2ms/step - loss: 0.0404 - sparse_categorical_accuracy: 0.9879
Epoch 4/5
938/938 [==============================] - 2s 2ms/step - loss: 0.0302 - sparse_categorical_accuracy: 0.9904
Epoch 5/5
938/938 [==============================] - 2s 2ms/step - loss: 0.0258 - sparse_categorical_accuracy: 0.9918

<tensorflow.python.keras.callbacks.History at 0x7f6b800baef0>

پس از اتمام آموزش بیایید مدل را در GCS ذخیره کنیم.

save_path = os.path.join("gs://", gcp_bucket, "mnist_example")

if tfc.remote():
    model.save(save_path)

ما همچنین می توانیم به جای نمونه Docker محلی شما ، از این سطل ذخیره سازی برای ساخت تصویر Docker استفاده کنیم. برای این کار ، کافیست سطل خود را به پارامتر docker_image_bucket_name اضافه کنید.

tfc.run(docker_image_bucket_name=gcp_bucket)

پس از آموزش مدل ، می توانیم مدل ذخیره شده را بارگیری کرده و سیاهههای مربوط به TensorBoard خود را برای نظارت بر عملکرد مشاهده کنیم.

model = keras.models.load_model(save_path)
!tensorboard dev upload --logdir "gs://keras-examples-jonah/logs/fit" --name "Guide MNIST"

پروژه های بزرگ

در بسیاری از موارد ، پروژه شما حاوی مدل Keras ممکن است بیش از یک اسکریپت پایتون را در بر داشته باشد ، یا ممکن است شامل داده های خارجی یا وابستگی های خاص باشد. TensorFlow Cloud کاملاً انعطاف پذیر برای استقرار در مقیاس بزرگ است و تعدادی از قابلیت های هوشمند را برای کمک به پروژه های شما فراهم می کند.

نقاط ورودی: پشتیبانی از اسکریپت های پایتون و نوت بوک های مشتری

تماس شما با API run() همیشه در همان اسکریپت پایتون کد آموزش مدل شما وجود ندارد. برای این منظور ، یک پارامتر entry_point ارائه می entry_point . از پارامتر entry_point می توان اسکریپت یا دفترچه یادداشت پایتون را که کد آموزش مدل شما در آن زندگی می کند ، مشخص کرد. هنگام فراخوانی run() از همان اسکریپت مدل خود ، از پیش فرض entry_point None .

pip وابستگی

اگر پروژه شما وابستگی های بیشتری را به pip فراخوانی می کند ، می توانید کتابخانه های اضافی مورد نیاز را با قرار دادن یک فایل requirements.txt کنید. در این فایل ، به سادگی لیستی از تمام وابستگی های مورد نیاز را قرار دهید و TensorFlow Cloud ادغام اینها را در ساخت ابر شما انجام می دهد.

دفترچه های پایتون

TensorFlow Cloud نیز از طریق دفترچه های پایتون قابل اجرا است. بعلاوه ، entry_point مشخص شده شما در صورت نیاز می تواند یک دفترچه یادداشت باشد. دو تفاوت اساسی باید در خاطر داشته باشید که بین TensorFlow Cloud در نوت بوک ها نسبت به اسکریپت ها وجود دارد:

  • هنگام تماس با run() از داخل یک نوت بوک ، یک سطل Cloud Storage برای ساخت و ذخیره تصویر Docker شما باید مشخص شود.
  • احراز هویت GCloud کاملاً از طریق کلید احراز هویت شما انجام می شود ، بدون مشخصات پروژه. به عنوان مثال گردش کار با استفاده از TensorFlow Cloud از یک نوت بوک در بخش "قرار دادن همه اینها" در این راهنما ارائه شده است.

پروژه های چند پرونده ای

اگر مدل شما به پرونده های اضافی بستگی دارد ، فقط باید اطمینان حاصل کنید که این پرونده ها در همان دایرکتوری (یا زیرشاخه) نقطه ورود مشخص شده زندگی می کنند. هر فایلی که در همان دایرکتوری با entry_point مشخص entry_point شده باشد ، و همچنین هر پرونده ذخیره شده در زیر دایرکتوری های مجاور entry_point در تصویر Docker گنجانده خواهد شد. این مورد در مورد وابستگی هایی که ممکن است لازم داشته باشید و از طریق pip به دست نمی pip نیز صادق است

برای نمونه ای از پروژه ورودی و چند پرونده ای سفارشی با وابستگی های اضافی pip ، به این مثال چند پرونده ای در مخزن ابر TensorFlow نگاهی بیندازید. برای اختصار ، ما فقط فراخوانی run() مثال را درج می کنیم:

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    entry_point="train_model.py",
    requirements="requirements.txt"
)

پیکربندی ماشین و آموزش توزیع شده

آموزش مدل بسته به اندازه مدل یا مجموعه داده ممکن است به طیف گسترده ای از منابع مختلف نیاز داشته باشد. هنگام محاسبه پیکربندی ها با چندین پردازنده گرافیکی ، انتخاب استراتژی توزیع مناسب بسیار مهم است . در اینجا ، ما چند پیکربندی احتمالی را شرح می دهیم:

توزیع چند کارگر

در اینجا ، ما می توانیم از COMMON_MACHINE_CONFIGS برای تعیین 1 پردازنده اصلی و 4 GPU کارگر استفاده کنیم.

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    chief_config=tfc.COMMON_MACHINE_CONFIGS['CPU'],
    worker_count=2,
    worker_config=tfc.COMMON_MACHINE_CONFIGS['T4_4X']
)

به طور پیش فرض ، TensorFlow Cloud بهترین فرمول توزیع را برای پیکربندی دستگاه شما با یک فرمول ساده با استفاده از chief_config ، worker_config و worker_count ارائه شده انتخاب می کند.

توزیع TPU

همانطور که نشان داده شده است ، بیایید همان مدل را روی TPU آموزش دهیم:

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    chief_config=tfc.COMMON_MACHINE_CONFIGS["CPU"],
    worker_count=1,
    worker_config=tfc.COMMON_MACHINE_CONFIGS["TPU"]
)

استراتژی توزیع سفارشی

برای مشخص کردن یک استراتژی توزیع سفارشی، فرمت بندی شما به طور معمول به عنوان شما را با توجه به راهنمای آموزش توزیع و مجموعه distribution_strategy به None . در زیر ، ما استراتژی توزیع خود را برای همان مدل MNIST مشخص خواهیم کرد.

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

mirrored_strategy = tf.distribute.MirroredStrategy()
with mirrored_strategy.scope():
  model = create_model()

if tfc.remote():
    epochs = 100
    batch_size = 128
else:
    epochs = 10
    batch_size = 64
    callbacks = None

model.fit(
    x_train, y_train, epochs=epochs, callbacks=callbacks, batch_size=batch_size
)

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    chief_config=tfc.COMMON_MACHINE_CONFIGS['CPU'],
    worker_count=2,
    worker_config=tfc.COMMON_MACHINE_CONFIGS['T4_4X'],
    distribution_strategy=None
)

تصاویر داکر سفارشی

به طور پیش فرض ، TensorFlow Cloud از یک تصویر پایه Docker ارائه شده توسط Google و مربوط به نسخه فعلی TensorFlow شما استفاده می کند. با این حال ، در صورت لزوم می توانید یک تصویر Docker سفارشی متناسب با نیازهای ساخت خود نیز تعیین کنید. برای این مثال ، ما تصویر Docker را از نسخه قدیمی TensorFlow مشخص خواهیم کرد:

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    base_docker_image="tensorflow/tensorflow:2.1.0-gpu"
)

سنجه های اضافی

برای شما مفید است که مشاغل Cloud خود را با برچسب های خاص برچسب گذاری کنید ، یا سیاهههای مربوط به مدل خود را در طول آموزش Cloud پخش کنید. نگه داشتن برچسب گذاری مناسب برای همه مشاغل Cloud ، برای نگهداری سوابق ، روش خوبی است. برای این منظور ، run() فرهنگ نامه ای از برچسب ها تا 64 جفت مقدار کلید را که از سیاهههای مربوط به ساخت Cloud قابل مشاهده هستند ، می پذیرد. با استفاده از پیوندی که با اجرای tfc.run ارائه شده است یا با استفاده از پرچم stream_logs در ترمینال محلی شما چاپ می شود ، می توان به سیاهههای مربوط به عملکرد دوره و صرفه جویی در مدل داخلی دسترسی داشت.

job_labels = {"job": "mnist-example", "team": "keras-io", "user": "jonah"}

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    job_labels=job_labels,
    stream_logs=True
)

همه اش را بگذار کنار هم

برای یک Colab عمیق که از بسیاری از ویژگی های توصیف شده در این راهنما استفاده می کند ، این مثال را دنبال کنید تا یک مدل پیشرفته را برای شناسایی نژادهای سگ از عکس ها با استفاده از استخراج ویژگی آموزش دهید.