نمونه اولیه برای تولید: آموزش توزیع شده در Vertex AI

1. بررسی اجمالی

در این آزمایشگاه، از Vertex AI برای اجرای یک کار آموزشی توزیع شده بر روی Vertex AI Training با استفاده از TensorFlow استفاده خواهید کرد.

این آزمایشگاه بخشی از سری ویدیوهای Prototype to Production است. قبل از امتحان کردن این یکی، حتماً آزمایشگاه های قبلی را تکمیل کنید. برای کسب اطلاعات بیشتر می توانید مجموعه ویدیویی همراه را تماشا کنید:

.

چیزی که یاد می گیرید

شما یاد خواهید گرفت که چگونه:

  • آموزش توزیع شده را روی یک دستگاه با چندین پردازنده گرافیکی اجرا کنید
  • آموزش توزیع شده را در چندین ماشین اجرا کنید

کل هزینه اجرای این آزمایشگاه در Google Cloud حدود 2 دلار است.

2. مقدمه ای بر Vertex AI

این آزمایشگاه از جدیدترین محصول هوش مصنوعی موجود در Google Cloud استفاده می کند. Vertex AI پیشنهادات ML را در سراسر Google Cloud در یک تجربه توسعه یکپارچه ادغام می کند. پیش از این، مدل‌های آموزش دیده با AutoML و مدل‌های سفارشی از طریق سرویس‌های جداگانه قابل دسترسی بودند. پیشنهاد جدید هر دو را به همراه سایر محصولات جدید در یک API واحد ترکیب می کند. همچنین می توانید پروژه های موجود را به Vertex AI منتقل کنید.

Vertex AI شامل بسیاری از محصولات مختلف برای پشتیبانی از گردش کار ML سرتاسر است. این آزمایشگاه بر روی محصولاتی که در زیر برجسته شده اند تمرکز خواهد کرد: آموزش و میز کار

نمای کلی محصول Vertex

3. نمای کلی آموزش توزیع شده

اگر یک GPU دارید، TensorFlow از این شتاب دهنده برای سرعت بخشیدن به آموزش مدل ها بدون هیچ کار اضافی از جانب شما استفاده می کند. با این حال، اگر می‌خواهید با استفاده از چندین GPU تقویت بیشتری دریافت کنید، باید از tf.distribute استفاده کنید، که ماژول TensorFlow برای اجرای محاسبات در چندین دستگاه است.

بخش اول این آزمایشگاه از tf.distribute.MirroredStrategy استفاده می کند که می توانید تنها با چند تغییر کد به برنامه های آموزشی خود اضافه کنید. این استراتژی یک کپی از مدل را در هر پردازنده گرافیکی در دستگاه شما ایجاد می کند. به روز رسانی های گرادیان بعدی به صورت همزمان اتفاق می افتد. این به این معنی است که هر GPU گذرهای رو به جلو و عقب را از طریق مدل در بخش متفاوتی از داده های ورودی محاسبه می کند. سپس گرادیان‌های محاسبه‌شده از هر یک از این برش‌ها در تمام پردازنده‌های گرافیکی جمع‌آوری می‌شوند و در فرآیندی به نام all-reduce میانگین‌گیری می‌شوند. پارامترهای مدل با استفاده از این گرادیان های متوسط ​​به روز می شوند.

بخش اختیاری در انتهای آزمایشگاه از tf.distribute.MultiWorkerMirroredStrategy استفاده می کند که شبیه MirroredStrategy است با این تفاوت که با چندین ماشین کار می کند. هر یک از این ماشین ها ممکن است چندین پردازنده گرافیکی نیز داشته باشند. مانند MirroredStrategy ، MultiWorkerMirroredStrategy یک استراتژی موازی داده های همزمان است که می توانید تنها با چند تغییر کد از آن استفاده کنید. تفاوت اصلی هنگام حرکت از موازی سازی داده های سنکرون در یک ماشین به ماشین های دیگر این است که گرادیان ها در انتهای هر مرحله اکنون باید در تمام GPU های یک ماشین و در بین همه ماشین های موجود در خوشه همگام شوند.

برای تکمیل این آزمایشگاه نیازی به دانستن جزئیات نیست، اما اگر می‌خواهید درباره نحوه عملکرد آموزش توزیع‌شده در TensorFlow اطلاعات بیشتری کسب کنید، ویدیوی زیر را ببینید:

4. محیط خود را تنظیم کنید

مراحل آموزش مدل‌های سفارشی را با Vertex AI lab تکمیل کنید تا محیط خود را تنظیم کنید.

5. آموزش تک ماشین، چند GPU

با قرار دادن کد برنامه آموزشی خود در یک ظرف Docker و فشار دادن این کانتینر به Google Artifact Registry، کار آموزشی توزیع شده خود را به Vertex AI ارسال خواهید کرد. با استفاده از این رویکرد، می توانید مدلی را که با هر چارچوبی ساخته شده است، آموزش دهید.

برای شروع، از منوی Launcher نوت بوک Workbench که در آزمایشگاه های قبلی ایجاد کردید، یک پنجره ترمینال را باز کنید.

ترمینال را در نوت بوک باز کنید

مرحله 1: کد آموزشی را بنویسید

یک دایرکتوری جدید به نام flowers-multi-gpu و cd در آن ایجاد کنید:

mkdir flowers-multi-gpu
cd flowers-multi-gpu

برای ایجاد یک دایرکتوری برای کد آموزشی و یک فایل پایتون که در آن کد زیر را اضافه خواهید کرد، موارد زیر را اجرا کنید.

mkdir trainer
touch trainer/task.py

اکنون باید موارد زیر را در شاخه flowers-multi-gpu/ خود داشته باشید:

+ trainer/
    + task.py

سپس فایل task.py را که ایجاد کرده اید باز کنید و کد زیر را کپی کنید.

باید {your-gcs-bucket} در BUCKET_ROOT با سطل Cloud Storage که در آن مجموعه داده گل‌ها را در آزمایشگاه 1 ذخیره کرده‌اید، جایگزین کنید.

import tensorflow as tf
import numpy as np
import os

## Replace {your-gcs-bucket} !!
BUCKET_ROOT='/gcs/{your-gcs-bucket}'

# Define variables
NUM_CLASSES = 5
EPOCHS=10
BATCH_SIZE = 32

IMG_HEIGHT = 180
IMG_WIDTH = 180

DATA_DIR = f'{BUCKET_ROOT}/flower_photos'

def create_datasets(data_dir, batch_size):
  '''Creates train and validation datasets.'''

  train_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="training",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  validation_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="validation",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  train_dataset = train_dataset.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
  validation_dataset = validation_dataset.cache().prefetch(buffer_size=tf.data.AUTOTUNE)

  return train_dataset, validation_dataset


def create_model():
  '''Creates model.'''

  model = tf.keras.Sequential([
    tf.keras.layers.Resizing(IMG_HEIGHT, IMG_WIDTH),
    tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
    tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')
  ])
  return model

def main():  

  # Create distribution strategy
  strategy = tf.distribute.MirroredStrategy()

  # Get data
  GLOBAL_BATCH_SIZE = BATCH_SIZE * strategy.num_replicas_in_sync
  train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)

  # Wrap model creation and compilation within scope of strategy
  with strategy.scope():
    model = create_model()
    model.compile(optimizer=tf.keras.optimizers.Adam(),
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(),
                  metrics=['accuracy'])

  history = model.fit(
    train_dataset,
    validation_data=validation_dataset,
    epochs=EPOCHS
  )

  model.save(f'{BUCKET_ROOT}/model_output')


if __name__ == "__main__":
    main()

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

  • در تابع main() شی MirroredStrategy ایجاد می شود. سپس، ایجاد متغیرهای مدل خود را در محدوده استراتژی قرار می دهید. این مرحله به TensorFlow می گوید که کدام متغیرها باید در سراسر GPU ها منعکس شوند.
  • اندازه دسته با num_replicas_in_sync بزرگ شده است. مقیاس بندی اندازه دسته بهترین روش هنگام استفاده از استراتژی های موازی داده های همزمان در TensorFlow است. در اینجا می توانید اطلاعات بیشتری کسب کنید.

مرحله 2: یک Dockerfile ایجاد کنید

برای کانتینری کردن کد خود، باید یک Dockerfile ایجاد کنید. در Dockerfile شما تمام دستورات مورد نیاز برای اجرای تصویر را درج خواهید کرد. تمام کتابخانه‌های لازم را نصب می‌کند و نقطه ورودی کد آموزشی را تنظیم می‌کند.

از ترمینال خود، یک Dockerfile خالی در ریشه دایرکتوری flowers خود ایجاد کنید:

touch Dockerfile

اکنون باید موارد زیر را در شاخه flowers-multi-gpu/ خود داشته باشید:

+ Dockerfile
+ trainer/
    + task.py

Dockerfile را باز کنید و موارد زیر را در آن کپی کنید:

FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-8

WORKDIR /

# Copies the trainer code to the docker image.
COPY trainer /trainer

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.task"]

مرحله 3: ظرف را بسازید

از ترمینال خود، موارد زیر را اجرا کنید تا یک متغیر env برای پروژه خود تعریف کنید و مطمئن شوید که your-cloud-project با ID پروژه خود جایگزین کنید:

PROJECT_ID='your-cloud-project'

در Artifact Registry یک مخزن ایجاد کنید. ما از مخزنی که در اولین آزمایشگاه ایجاد کردیم استفاده خواهیم کرد.

REPO_NAME='flower-app'

یک متغیر با URI تصویر کانتینر خود در Artifact Registry تعریف کنید:

IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image_distributed:single_machine

داکر را پیکربندی کنید

gcloud auth configure-docker \
    us-central1-docker.pkg.dev

سپس، با اجرای موارد زیر از ریشه دایرکتوری flowers-multi-gpu کانتینر را بسازید:

docker build ./ -t $IMAGE_URI

در نهایت، آن را به آرتیفکت رجیستری فشار دهید:

docker push $IMAGE_URI

با فشار دادن کانتینر به Artifact Registry، اکنون آماده شروع یک کار آموزشی هستید.

مرحله 4: کار را با SDK اجرا کنید

در این بخش، نحوه پیکربندی و راه اندازی کار آموزشی توزیع شده را با استفاده از Vertex AI Python SDK خواهید دید.

از Launcher، یک نوت بوک TensorFlow 2 ایجاد کنید.

نوت بوک

Vertex AI SDK را وارد کنید.

from google.cloud import aiplatform

سپس یک CustomContainerTrainingJob تعریف کنید.

باید {PROJECT_ID} در container_uri و {YOUR_BUCKET} در staging_bucket جایگزین کنید.

job = aiplatform.CustomContainerTrainingJob(display_name='flowers-multi-gpu',
                                            container_uri='us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image_distributed:single_machine',
                                            staging_bucket='gs://{YOUR_BUCKET}')

هنگامی که کار تعریف شد، می توانید کار را اجرا کنید. تعداد شتاب‌دهنده‌ها را روی 2 تنظیم می‌کنید. اگر فقط از 1 GPU استفاده کنیم، این آموزش توزیع‌شده در نظر گرفته نمی‌شود . آموزش توزیع شده روی یک ماشین زمانی است که از 2 یا بیشتر شتاب دهنده استفاده می کنید.

my_custom_job.run(replica_count=1,
                  machine_type='n1-standard-4',
                  accelerator_type='NVIDIA_TESLA_V100',
                  accelerator_count=2)

در کنسول، می توانید پیشرفت کار خود را مشاهده کنید.

multigpu_job

6. [اختیاری] آموزش چند کارگری

اکنون که آموزش های توزیع شده را روی یک دستگاه با چندین پردازنده گرافیکی امتحان کرده اید، می توانید مهارت های آموزشی توزیع شده خود را با آموزش در چندین دستگاه به سطح بعدی ارتقا دهید. برای پایین نگه داشتن هزینه ها، ما هیچ پردازنده گرافیکی به آن دستگاه ها اضافه نمی کنیم، اما در صورت تمایل می توانید با افزودن GPU آزمایش کنید.

یک پنجره ترمینال جدید در نمونه نوت بوک خود باز کنید:

ترمینال را در نوت بوک باز کنید

مرحله 1: کد آموزشی را بنویسید

یک دایرکتوری جدید به نام flowers-multi-machine ایجاد کنید و سی دی در آن ایجاد کنید:

mkdir flowers-multi-machine
cd flowers-multi-machine

برای ایجاد یک دایرکتوری برای کد آموزشی و یک فایل پایتون که در آن کد زیر را اضافه خواهید کرد، موارد زیر را اجرا کنید.

mkdir trainer
touch trainer/task.py

اکنون باید موارد زیر را در شاخه flowers-multi-machine/ خود داشته باشید:

+ trainer/
    + task.py

سپس فایل task.py را که ایجاد کرده اید باز کنید و کد زیر را کپی کنید.

باید {your-gcs-bucket} در BUCKET_ROOT با سطل Cloud Storage که در آن مجموعه داده گل‌ها را در آزمایشگاه 1 ذخیره کرده‌اید، جایگزین کنید.

import tensorflow as tf
import numpy as np
import os

## Replace {your-gcs-bucket} !!
BUCKET_ROOT='/gcs/{your-gcs-bucket}'

# Define variables
NUM_CLASSES = 5
EPOCHS=10
BATCH_SIZE = 32

IMG_HEIGHT = 180
IMG_WIDTH = 180

DATA_DIR = f'{BUCKET_ROOT}/flower_photos'
SAVE_MODEL_DIR = f'{BUCKET_ROOT}/multi-machine-output'

def create_datasets(data_dir, batch_size):
  '''Creates train and validation datasets.'''

  train_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="training",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  validation_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="validation",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  train_dataset = train_dataset.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
  validation_dataset = validation_dataset.cache().prefetch(buffer_size=tf.data.AUTOTUNE)

  return train_dataset, validation_dataset


def create_model():
  '''Creates model.'''

  model = tf.keras.Sequential([
    tf.keras.layers.Resizing(IMG_HEIGHT, IMG_WIDTH),
    tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
    tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')
  ])
  return model

def _is_chief(task_type, task_id):
  '''Helper function. Determines if machine is chief.'''

  return task_type == 'chief'


def _get_temp_dir(dirpath, task_id):
  '''Helper function. Gets temporary directory for saving model.'''

  base_dirpath = 'workertemp_' + str(task_id)
  temp_dir = os.path.join(dirpath, base_dirpath)
  tf.io.gfile.makedirs(temp_dir)
  return temp_dir


def write_filepath(filepath, task_type, task_id):
  '''Helper function. Gets filepath to save model.'''

  dirpath = os.path.dirname(filepath)
  base = os.path.basename(filepath)
  if not _is_chief(task_type, task_id):
    dirpath = _get_temp_dir(dirpath, task_id)
  return os.path.join(dirpath, base)

def main():
  # Create distribution strategy
  strategy = tf.distribute.MultiWorkerMirroredStrategy()

  # Get data
  GLOBAL_BATCH_SIZE = BATCH_SIZE * strategy.num_replicas_in_sync
  train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)

  # Wrap variable creation within strategy scope
  with strategy.scope():
    model = create_model()
    model.compile(optimizer=tf.keras.optimizers.Adam(),
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(),
                  metrics=['accuracy'])

  history = model.fit(
    train_dataset,
    validation_data=validation_dataset,
    epochs=EPOCHS
  )

  # Determine type and task of the machine from
  # the strategy cluster resolver
  task_type, task_id = (strategy.cluster_resolver.task_type,
                        strategy.cluster_resolver.task_id)

  # Based on the type and task, write to the desired model path
  write_model_path = write_filepath(SAVE_MODEL_DIR, task_type, task_id)
  model.save(write_model_path)

if __name__ == "__main__":
    main()

قبل از ساختن کانتینر، اجازه دهید نگاهی عمیق تر به کد بیندازیم. چند مؤلفه در کد وجود دارد که برای برنامه آموزشی شما برای کار با MultiWorkerMirroredStrategy ضروری است.

  • در تابع main() شی MultiWorkerMirroredStrategy ایجاد می شود. سپس، ایجاد متغیرهای مدل خود را در محدوده استراتژی قرار می دهید. این مرحله حیاتی به TensorFlow می گوید که کدام متغیرها باید در سراسر کپی ها منعکس شوند.
  • اندازه دسته با num_replicas_in_sync بزرگ شده است. مقیاس بندی اندازه دسته بهترین روش هنگام استفاده از استراتژی های موازی داده های همزمان در TensorFlow است.
  • ذخیره مدل شما در مورد چند کارگری کمی پیچیده تر است زیرا مقصد باید برای هر یک از کارگران متفاوت باشد. کارگر اصلی در دایرکتوری مدل مورد نظر ذخیره می کند، در حالی که سایر کارگران مدل را در دایرکتوری های موقت ذخیره می کنند. مهم است که این دایرکتوری های موقت منحصر به فرد باشند تا از نوشتن چندین کارگر در یک مکان جلوگیری شود. پس انداز می تواند شامل عملیات جمعی باشد، به این معنی که همه کارگران باید پس انداز کنند و نه فقط رئیس. توابع _is_chief() , _get_temp_dir() , write_filepath() و همچنین تابع main() همگی شامل کد boilerplate هستند که به ذخیره مدل کمک می کند.

مرحله 2: یک Dockerfile ایجاد کنید

برای کانتینری کردن کد خود، باید یک Dockerfile ایجاد کنید. در Dockerfile شما تمام دستورات مورد نیاز برای اجرای تصویر را درج خواهید کرد. تمام کتابخانه‌های لازم را نصب می‌کند و نقطه ورودی کد آموزشی را تنظیم می‌کند.

از ترمینال خود، یک Dockerfile خالی در ریشه دایرکتوری flowers خود ایجاد کنید:

touch Dockerfile

اکنون باید موارد زیر را در شاخه flowers-multi-machine/ خود داشته باشید:

+ Dockerfile
+ trainer/
    + task.py

Dockerfile را باز کنید و موارد زیر را در آن کپی کنید:

FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-8

WORKDIR /

# Copies the trainer code to the docker image.
COPY trainer /trainer

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.task"]

مرحله 3: ظرف را بسازید

از ترمینال خود، موارد زیر را اجرا کنید تا یک متغیر env برای پروژه خود تعریف کنید و مطمئن شوید که your-cloud-project با ID پروژه خود جایگزین کنید:

PROJECT_ID='your-cloud-project'

در Artifact Registry یک مخزن ایجاد کنید. ما از مخزنی که در اولین آزمایشگاه ایجاد کردیم استفاده خواهیم کرد.

REPO_NAME='flower-app'

یک متغیر با URI تصویر کانتینر خود در Google Artifact Registry تعریف کنید:

IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image_distributed:multi_machine

داکر را پیکربندی کنید

gcloud auth configure-docker \
    us-central1-docker.pkg.dev

سپس، با اجرای موارد زیر از ریشه دایرکتوری flowers-multi-machine کانتینر را بسازید:

docker build ./ -t $IMAGE_URI

در نهایت، آن را به آرتیفکت رجیستری فشار دهید:

docker push $IMAGE_URI

با فشار دادن کانتینر به Artifact Registry، اکنون آماده شروع یک کار آموزشی هستید.

مرحله 4: کار را با SDK اجرا کنید

در این بخش، نحوه پیکربندی و راه اندازی کار آموزشی توزیع شده را با استفاده از Vertex AI Python SDK خواهید دید.

از Launcher، یک نوت بوک TensorFlow 2 ایجاد کنید.

نوت بوک

Vertex AI SDK را وارد کنید.

from google.cloud import aiplatform

سپس worker_pool_specs تعریف کنید.

Vertex AI 4 استخر کارگر را برای پوشش انواع مختلف وظایف ماشین فراهم می کند.

Worker pool 0 Primary، chief، timer و یا "master" را پیکربندی می کند. در MultiWorkerMirroredStrategy ، همه ماشین‌ها به‌عنوان کارگر تعیین می‌شوند، که ماشین‌های فیزیکی هستند که محاسبات تکرار شده روی آن‌ها اجرا می‌شود. علاوه بر اینکه هر دستگاه یک کارگر است، باید یک کارگر وجود داشته باشد که کارهای اضافی مانند ذخیره نقاط بازرسی و نوشتن فایل‌های خلاصه در TensorBoard را انجام دهد. این دستگاه به عنوان رئیس شناخته می شود. تنها یک کارگر اصلی وجود دارد، بنابراین تعداد کارگران شما برای Worker pool 0 همیشه 1 خواهد بود.

Worker Pool 1 جایی است که کارگران اضافی را برای خوشه خود پیکربندی می کنید.

اولین دیکشنری در لیست worker_pool_specs نشان دهنده Worker pool 0 و فرهنگ لغت دوم نشان دهنده Worker pool 1 است. در این نمونه، دو پیکربندی یکسان هستند. با این حال، اگر می‌خواهید روی 3 ماشین آموزش دهید، با تنظیم replica_count روی 2، کارگران دیگری را به Worker Pool 1 اضافه می‌کنید. اگر می‌خواهید GPU اضافه کنید، باید آرگومان‌های accelerator_type و accelerator_count برای هر دو به machine_spec اضافه کنید. استخرهای کارگری توجه داشته باشید که اگر می‌خواهید از پردازنده‌های گرافیکی با MultiWorkerMirroredStrategy استفاده کنید، هر دستگاه در کلاستر باید تعداد واحدهای گرافیکی یکسانی داشته باشد. در غیر این صورت کار شکست خواهد خورد.

باید {PROJECT_ID} را در image_uri جایگزین کنید.

# The spec of the worker pools including machine type and Docker image
# Be sure to replace PROJECT_ID in the "image_uri" with your project.

worker_pool_specs=[
     {
        "replica_count": 1,
        "machine_spec": {
          "machine_type": "n1-standard-4",
        },
        "container_spec": {"image_uri": "us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image_distributed:multi_machine"}
      },
      {
        "replica_count": 1,
        "machine_spec": {
          "machine_type": "n1-standard-4",
        },
        "container_spec": {"image_uri": "us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image_distributed:multi_machine"}
      }
          ]

سپس یک CustomJob ایجاد و اجرا کنید، {YOUR_BUCKET} در staging_bucket با یک سطل در پروژه خود برای مرحله بندی جایگزین کنید.

my_custom_job = aiplatform.CustomJob(display_name='flowers-multi-worker',
                                     worker_pool_specs=worker_pool_specs,
                                     staging_bucket='gs://{YOUR_BUCKET}')

my_custom_job.run()

در کنسول، می توانید پیشرفت کار خود را مشاهده کنید.

چند_کارگر_شغل

🎉 تبریک می گویم! 🎉

شما یاد گرفته اید که چگونه از Vertex AI برای موارد زیر استفاده کنید:

  • کارهای آموزشی توزیع شده را با TensorFlow اجرا کنید

برای کسب اطلاعات بیشتر در مورد بخش های مختلف Vertex، مستندات را بررسی کنید.

7. پاکسازی

از آنجایی که ما نوت بوک را طوری پیکربندی کرده‌ایم که پس از 60 دقیقه بی‌حرکت، زمان آن تمام شود، نیازی نیست نگران خاموش کردن نمونه باشیم. اگر می خواهید نمونه را به صورت دستی خاموش کنید، روی دکمه Stop در بخش Vertex AI Workbench کنسول کلیک کنید. اگر می خواهید نوت بوک را به طور کامل حذف کنید، روی دکمه Delete کلیک کنید.

توقف نمونه

برای حذف Storage Bucket، با استفاده از منوی Navigation در Cloud Console خود، به Storage بروید، سطل خود را انتخاب کنید و روی Delete کلیک کنید:

ذخیره سازی را حذف کنید