سحابة TensorFlow

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

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

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

هذا يعني أنه يمكنك استخدام موارد حساب Google Cloud من داخل دفتر ملاحظات 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 .

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 ، وليس داخل وقت التشغيل الذي تقرأ فيه هذا.

أولاً ، قمنا بإعداد عمليات الاسترجاعات التي سوف:

ثم نسمي model.fit و model.save ، اللذان (عند تشغيل هذا الكود على جوجل كلاود) model.save بالفعل بتشغيل التدريب الكامل (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 Python إلى ملف requirements.txt ، والذي سيتم إرساله مع الكود الموجود في هذا الكمبيوتر المحمول. يمكنك إضافة حزم أخرى هنا حسب الحاجة.

ثم يتم تحديد GPU وصورة CPU. ما عليك سوى تحديد أحدهما أو الآخر ؛ يتم استخدام 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()