سحابة TensorFlow

عرض على TensorFlow.org تشغيل في جوجل كولاب عرض على جيثب تحميل دفتر شعار كاجلتشغيل في Kaggle

TensorFlow Cloud هي مكتبة تسهل إجراء التدريب وضبط المعلمات الفائقة لنماذج Keras على Google Cloud.

باستخدام واجهة برمجة تطبيقات run TensorFlow Cloud، يمكنك إرسال رمز النموذج الخاص بك مباشرةً إلى حساب Google Cloud الخاص بك، واستخدام موارد حساب Google Cloud دون الحاجة إلى تسجيل الدخول والتفاعل مع Cloud UI (بمجرد إعداد مشروعك في وحدة التحكم).

هذا يعني أنه يمكنك استخدام موارد الحوسبة السحابية الخاصة بك على Google من داخل دفتر ملاحظات Python مباشرة: دفتر ملاحظات مثل هذا تمامًا! يمكنك أيضًا إرسال النماذج إلى Google Cloud من خلال برنامج نصي عادي .py Python.

مثال بسيط

هذا مثال تمهيدي بسيط لتوضيح كيفية تدريب نموذج عن بعد باستخدام 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 الخاص بك

يقوم هذا الرمز بمصادقة دفتر الملاحظات، والتحقق من بيانات اعتماد وهوية 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 والدليل المحدد أعلاه.

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 لتدريب النموذج.

نقوم أولاً بإضافة حزمة Python tensorflow-cloud إلى ملف requirements.txt ، والذي سيتم إرساله مع الكود الموجود في هذا الدفتر. يمكنك إضافة حزم أخرى هنا حسب الحاجة.

ثم يتم تحديد GPU وصورة وحدة المعالجة المركزية. ما عليك سوى تحديد واحد أو آخر؛ يتم استخدام GPU في الكود التالي.

أخيرًا، قلب سحابة TensorFlow: الدعوة إلى tfc.run . عند تنفيذ ذلك داخل هذا الكمبيوتر المحمول، سيتم تجميع جميع التعليمات البرمجية من هذا الكمبيوتر المحمول وبقية الملفات الموجودة في هذا الدليل وإرسالها إلى Google Cloud للتنفيذ. تحدد المعلمات الموجودة في طريقة run تفاصيل صور وحدة المعالجة المركزية GPU المحددة. ما عليك سوى تحديد واحد أو آخر؛ يتم استخدام GPU في الكود التالي.

أخيرًا، قلب سحابة TensorFlow: الدعوة إلى tfc.run . عند تنفيذ ذلك داخل هذا الكمبيوتر المحمول، سيتم تجميع جميع التعليمات البرمجية من هذا الكمبيوتر المحمول وبقية الملفات الموجودة في هذا الدليل وإرسالها إلى Google Cloud للتنفيذ. تحدد المعلمات الموجودة في طريقة run تفاصيل وحدة معالجة الرسومات وصور وحدة المعالجة المركزية. ما عليك سوى تحديد واحد أو آخر؛ يتم استخدام 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 الخاص بك

لا تقم بإعادة تشغيل بقية التعليمات البرمجية.

تحميل Tensorboard

أثناء تقدم التدريب، يمكنك استخدام Tensorboard لعرض النتائج. لاحظ أن النتائج لن تظهر إلا بعد بدء التدريب. قد يستغرق هذا بضع دقائق.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

قم بتحميل النموذج المدرب الخاص بك

بمجرد اكتمال التدريب، يمكنك استرداد النموذج الخاص بك من مجموعة GCS التي حددتها أعلاه.

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