1. بررسی اجمالی
در این آزمایشگاه، نحوه اجرای یک کار آموزشی سفارشی بر روی Vertex AI Training با ویژگی بسته بندی خودکار را خواهید آموخت. مشاغل آموزشی سفارشی در Vertex AI از کانتینرها استفاده می کنند. اگر نمیخواهید تصویر خود را بسازید، میتوانید از بستهبندی خودکار استفاده کنید، که یک تصویر Docker سفارشی بر اساس کد شما ایجاد میکند، تصویر را به Container Registry فشار میدهد و یک CustomJob
بر اساس تصویر شروع میکند.
چیزی که یاد می گیرید
شما یاد خواهید گرفت که چگونه:
- از حالت محلی برای تست کد خود استفاده کنید.
- یک کار آموزشی سفارشی با بسته بندی خودکار پیکربندی و راه اندازی کنید.
کل هزینه اجرای این آزمایشگاه در Google Cloud حدود 2 دلار است.
2. از Case Overview استفاده کنید
با استفاده از کتابخانه های Hugging Face ، می توانید مدل Bert را در مجموعه داده های IMDB تنظیم کنید. این مدل مثبت یا منفی بودن نقد فیلم را پیش بینی می کند. مجموعه داده از کتابخانه مجموعه داده های Hugging Face و مدل Bert از کتابخانه ترانسفورماتور Hugging Face دانلود خواهد شد.
3. مقدمه ای بر Vertex AI
این آزمایشگاه از جدیدترین محصول هوش مصنوعی موجود در Google Cloud استفاده می کند. Vertex AI پیشنهادات ML را در سراسر Google Cloud در یک تجربه توسعه یکپارچه ادغام می کند. پیش از این، مدلهای آموزش دیده با AutoML و مدلهای سفارشی از طریق سرویسهای جداگانه قابل دسترسی بودند. پیشنهاد جدید هر دو را به همراه سایر محصولات جدید در یک API واحد ترکیب می کند. همچنین می توانید پروژه های موجود را به Vertex AI منتقل کنید. اگر بازخوردی دارید، لطفاً صفحه پشتیبانی را ببینید.
Vertex AI شامل بسیاری از محصولات مختلف برای پشتیبانی از گردش کار ML سرتاسر است. این آزمایشگاه بر روی Training و Workbench تمرکز خواهد کرد.
4. محیط خود را تنظیم کنید
برای اجرای این کد لبه به یک پروژه Google Cloud Platform با فعال بودن صورتحساب نیاز دارید. برای ایجاد یک پروژه، دستورالعمل های اینجا را دنبال کنید.
مرحله 1: Compute Engine API را فعال کنید
به Compute Engine بروید و اگر قبلاً فعال نشده است Enable را انتخاب کنید.
مرحله ۲: Vertex AI API را فعال کنید
به بخش Vertex AI در Cloud Console خود بروید و روی Enable Vertex AI API کلیک کنید.
مرحله 3: Container Registry API را فعال کنید
به رجیستری کانتینر بروید و اگر قبلاً وجود ندارد، Enable را انتخاب کنید. شما از این برای ایجاد یک ظرف برای کار آموزشی سفارشی خود استفاده خواهید کرد.
مرحله 4: یک نمونه Vertex AI Workbench ایجاد کنید
از بخش Vertex AI در Cloud Console خود، روی Workbench کلیک کنید:
از آنجا، روی دفترچه یادداشت مدیریت شده کلیک کنید:
سپس NEW NOTEBOOK را انتخاب کنید.
نوت بوک خود را نامی بگذارید و سپس روی تنظیمات پیشرفته کلیک کنید.
در قسمت تنظیمات پیشرفته، خاموش شدن بیحرکت را فعال کنید و تعداد دقیقهها را روی 60 دقیقه تنظیم کنید. این بدان معناست که نوت بوک شما در صورت عدم استفاده به طور خودکار خاموش میشود تا هزینههای غیرضروری متحمل نشوید.
شما می توانید تمام تنظیمات پیشرفته دیگر را به همین صورت رها کنید.
بعد، روی ایجاد کلیک کنید.
پس از ایجاد نمونه، Open JupyterLab را انتخاب کنید.
اولین باری که از یک نمونه جدید استفاده می کنید، از شما خواسته می شود که احراز هویت کنید.
5. کد آموزشی را بنویسید
برای شروع، از منوی Launcher، یک پنجره ترمینال را در نمونه نوت بوک خود باز کنید:
یک دایرکتوری جدید به نام autopkg-codelab
و cd در آن ایجاد کنید.
mkdir autopkg-codelab
cd autopkg-codelab
از ترمینال خود، موارد زیر را اجرا کنید تا یک دایرکتوری برای کد آموزشی و یک فایل پایتون ایجاد کنید که در آن کد را اضافه کنید:
mkdir trainer
touch trainer/task.py
اکنون باید موارد زیر را در فهرست راهنمای autopkg-codelab/
خود داشته باشید:
+ trainer/
+ task.py
سپس فایل task.py
را که ایجاد کرده اید باز کنید و کد زیر را کپی کنید.
import argparse
import tensorflow as tf
from datasets import load_dataset
from transformers import AutoTokenizer
from transformers import TFAutoModelForSequenceClassification
CHECKPOINT = "bert-base-cased"
def get_args():
'''Parses args.'''
parser = argparse.ArgumentParser()
parser.add_argument(
'--epochs',
required=False,
default=3,
type=int,
help='number of epochs')
parser.add_argument(
'--job_dir',
required=True,
type=str,
help='bucket to store saved model, include gs://')
args = parser.parse_args()
return args
def create_datasets():
'''Creates a tf.data.Dataset for train and evaluation.'''
raw_datasets = load_dataset('imdb')
tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)
tokenized_datasets = raw_datasets.map((lambda examples: tokenize_function(examples, tokenizer)), batched=True)
# To speed up training, we use only a portion of the data.
# Use full_train_dataset and full_eval_dataset if you want to train on all the data.
small_train_dataset = tokenized_datasets['train'].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets['test'].shuffle(seed=42).select(range(1000))
full_train_dataset = tokenized_datasets['train']
full_eval_dataset = tokenized_datasets['test']
tf_train_dataset = small_train_dataset.remove_columns(['text']).with_format("tensorflow")
tf_eval_dataset = small_eval_dataset.remove_columns(['text']).with_format("tensorflow")
train_features = {x: tf_train_dataset[x] for x in tokenizer.model_input_names}
train_tf_dataset = tf.data.Dataset.from_tensor_slices((train_features, tf_train_dataset["label"]))
train_tf_dataset = train_tf_dataset.shuffle(len(tf_train_dataset)).batch(8)
eval_features = {x: tf_eval_dataset[x] for x in tokenizer.model_input_names}
eval_tf_dataset = tf.data.Dataset.from_tensor_slices((eval_features, tf_eval_dataset["label"]))
eval_tf_dataset = eval_tf_dataset.batch(8)
return train_tf_dataset, eval_tf_dataset
def tokenize_function(examples, tokenizer):
'''Tokenizes text examples.'''
return tokenizer(examples['text'], padding='max_length', truncation=True)
def main():
args = get_args()
train_tf_dataset, eval_tf_dataset = create_datasets()
model = TFAutoModelForSequenceClassification.from_pretrained(CHECKPOINT, num_labels=2)
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=0.01),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=tf.metrics.SparseCategoricalAccuracy(),
)
model.fit(train_tf_dataset, validation_data=eval_tf_dataset, epochs=args.epochs)
model.save(f'{args.job_dir}/model_output')
if __name__ == "__main__":
main()
چند نکته در مورد کد قابل ذکر است:
-
CHECKPOINT
مدلی است که میخواهیم آن را تنظیم کنیم. در این مورد از Bert استفاده می کنیم. - روش
TFAutoModelForSequenceClassification
معماری مدل زبان مشخص شده + وزن ها را در TensorFlow بارگذاری می کند و یک سر طبقه بندی را با وزن های اولیه تصادفی در بالا اضافه می کند. در این حالت، ما یک مشکل طبقه بندی باینری داریم (مثبت یا منفی) بنابراینnum_labels=2
را برای این طبقه بندی کننده مشخص می کنیم.
6. Containerize و کد آموزشی را به صورت محلی اجرا کنید
میتوانید از دستور gcloud ai custom-jobs local-run
برای ایجاد یک تصویر ظرف Docker بر اساس کد آموزشی خود استفاده کنید و تصویر را به عنوان یک ظرف در دستگاه محلی خود اجرا کنید. اجرای یک کانتینر به صورت محلی، کد آموزشی شما را به روشی مشابه نحوه اجرای آن در Vertex AI Training اجرا میکند و میتواند به شما کمک کند مشکلات کد خود را قبل از انجام آموزش سفارشی بر روی Vertex AI رفع اشکال کنید.
در کار آموزشی خود، مدل آموزش دیده خود را به یک سطل ذخیره سازی ابری صادر می کنیم. از ترمینال خود، موارد زیر را اجرا کنید تا یک متغیر env برای پروژه خود تعریف کنید و مطمئن شوید که your-cloud-project
با ID پروژه خود جایگزین کنید:
PROJECT_ID='your-cloud-project'
سپس، یک سطل ایجاد کنید. اگر یک سطل موجود دارید، در عوض از آن استفاده کنید.
BUCKET_NAME="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET_NAME
وقتی کار آموزش سفارشی را در Vertex AI Training اجرا می کنیم، از یک GPU استفاده می کنیم. اما از آنجایی که نمونه Workbench خود را با GPU مشخص نکردهایم، از یک تصویر مبتنی بر CPU برای آزمایش محلی استفاده میکنیم. در این مثال، ما از یک کانتینر از پیش ساخته شده Vertex AI Training استفاده می کنیم.
موارد زیر را اجرا کنید تا URI یک تصویر Docker را به عنوان پایه کانتینر تنظیم کنید.
BASE_CPU_IMAGE=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-7:latest
سپس یک نام برای تصویر Docker ایجاد شده توسط دستور اجرای محلی تعیین کنید.
OUTPUT_IMAGE=$PROJECT_ID-local-package-cpu:latest
کد آموزشی ما از مجموعه داده های Hugging Face و کتابخانه های ترانسفورماتور استفاده می کند. این کتابخانهها در تصویری که ما بهعنوان تصویر پایه انتخاب کردهایم، گنجانده نشدهاند، بنابراین باید آنها را بهعنوان الزامات ارائه کنیم. برای انجام این کار، یک فایل requirements.txt
در فهرست راهنمای autopkg-codelab
خود ایجاد می کنیم.
مطمئن شوید که در فهرست راهنمای autopkg-codelab
هستید و موارد زیر را در ترمینال خود تایپ کنید.
touch requirements.txt
اکنون باید موارد زیر را در فهرست راهنمای autopkg-codelab
خود داشته باشید:
+ requirements.txt
+ trainer/
+ task.py
فایل نیازمندی ها را باز کرده و در زیر قرار دهید
datasets==1.18.2
transformers==4.16.2
در نهایت، دستور gcloud ai custom-jobs local-run
را برای شروع آموزش در نمونه مدیریت شده Workbench ما اجرا کنید.
gcloud ai custom-jobs local-run \
--executor-image-uri=$BASE_CPU_IMAGE \
--python-module=trainer.task \
--output-image-uri=$OUTPUT_IMAGE \
-- \
--job_dir=$BUCKET_NAME
شما باید تصویر داکر در حال ساخت را ببینید. وابستگی هایی که به فایل requirements.txt
اضافه کردیم پیپ نصب می شود. اولین باری که این دستور را اجرا می کنید ممکن است چند دقیقه طول بکشد. هنگامی که تصویر ساخته شد، فایل task.py
شروع به اجرا می کند و آموزش مدل را مشاهده خواهید کرد. شما باید چیزی شبیه به این را ببینید:
از آنجایی که ما از GPU به صورت محلی استفاده نمی کنیم، آموزش مدل زمان زیادی طول خواهد کشید. شما می توانید Ctrl+c را بزنید و آموزش محلی را به جای منتظر ماندن برای تکمیل کار لغو کنید.
توجه داشته باشید که اگر میخواهید آزمایش بیشتری انجام دهید، میتوانید مستقیماً تصویر ساخته شده در بالا را بدون بستهبندی مجدد اجرا کنید.
gcloud beta ai custom-jobs local-run \
--executor-image-uri=$OUTPUT_IMAGE \
-- \
--job_dir=$BUCKET_NAME \
--epochs=1
7. یک کار سفارشی ایجاد کنید
اکنون که حالت محلی را آزمایش کردهایم، از ویژگی بستهبندی خودکار برای راهاندازی آموزش سفارشی خود در Vertex AI Training استفاده میکنیم. با یک فرمان، این ویژگی:
- یک تصویر Docker سفارشی بر اساس کد خود بسازید.
- تصویر را به Container Registry فشار دهید.
- یک
CustomJob
بر اساس تصویر شروع کنید.
به ترمینال برگردید و یک سطح بالاتر از فهرست راهنمای autopkg-codelab
خود سی دی بگیرید.
+ autopkg-codelab
+ requirements.txt
+ trainer/
+ task.py
تصویر گرافیکی TensorFlow از پیش ساخته شده توسط Vertex AI Training را به عنوان تصویر پایه برای کار آموزشی سفارشی مشخص کنید.
BASE_GPU_IMAGE=us-docker.pkg.dev/vertex-ai/training/tf-gpu.2-7:latest
سپس دستور gcloud ai custom-jobs create
را اجرا کنید. ابتدا این دستور یک تصویر داکر سفارشی را بر اساس کد آموزشی می سازد. تصویر پایه، محفظه از پیش ساخته شده Vertex AI Training است که ما به عنوان BASE_GPU_IMAGE
تنظیم کرده ایم. سپس ویژگی بستهبندی خودکار مجموعه دادهها و کتابخانههای ترانسفورماتور را همانطور که در فایل requirements.txt
ما مشخص شده است، نصب میکند.
gcloud ai custom-jobs create \
--region=us-central1 \
--display-name=fine_tune_bert \
--args=--job_dir=$BUCKET_NAME \
--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,accelerator-type=NVIDIA_TESLA_V100,executor-image-uri=$BASE_GPU_IMAGE,local-package-path=autopkg-codelab,python-module=trainer.task
بیایید نگاهی به استدلال worker-pool-spec
بیندازیم. این پیکربندی استخر کارگر مورد استفاده توسط کار سفارشی را تعریف می کند. برای ایجاد یک کار سفارشی با چندین استخر کارگر برای آموزش های توزیع شده، می توانید مشخصات چند کارگری را مشخص کنید. در این مثال، ما فقط یک Worker Pool را مشخص می کنیم، زیرا کد آموزشی ما برای آموزش توزیع شده پیکربندی نشده است.
در اینجا برخی از زمینه های کلیدی این مشخصات آورده شده است:
-
machine-type
(الزامی): نوع ماشین. برای انواع پشتیبانی شده اینجا را کلیک کنید . -
replica-count
: تعداد ماکت های کارگری که برای این مجموعه کارگری استفاده می شود، به طور پیش فرض مقدار 1 است. -
accelerator-type
: نوع پردازنده های گرافیکی. برای انواع پشتیبانی شده اینجا را کلیک کنید . در این مثال، ما یک پردازنده گرافیکی NVIDIA Tesla V100 را مشخص کردیم. -
accelerator-count
: تعداد پردازنده های گرافیکی برای هر VM در Worker Pool که به طور پیش فرض مقدار آن 1 است. -
executor-image-uri
: URI یک تصویر ظرف که بسته ارائه شده را اجرا می کند. این به تصویر پایه ما تنظیم شده است. -
local-package-path
: مسیر محلی یک پوشه که حاوی کد آموزشی است. -
python-module
: نام ماژول پایتون برای اجرا در بسته ارائه شده.
مشابه زمانی که فرمان محلی را اجرا میکنید، تصویر Docker ساخته میشود و سپس کار آموزشی شروع میشود. به جز اینکه به جای دیدن خروجی کار آموزشی، پیام زیر را مشاهده خواهید کرد که تأیید می کند کار آموزشی شما راه اندازی شده است. توجه داشته باشید که اولین باری که دستور custom-jobs create
اجرا می کنید، ممکن است چند دقیقه طول بکشد تا تصویر ساخته شود و فشار داده شود.
به بخش Vertex AI Training کنسول ابری بازگردید و در زیر CUSTOM JOBS باید کار خود را در حال اجرا ببینید.
این کار حدود 20 دقیقه طول خواهد کشید.
پس از تکمیل، باید مصنوعات مدل ذخیره شده زیر را در پوشه model_output
در سطل خود مشاهده کنید.
🎉 تبریک می گویم! 🎉
شما یاد گرفته اید که چگونه از Vertex AI برای موارد زیر استفاده کنید:
- کانتینرسازی و اجرای کد آموزشی به صورت محلی
- مشاغل آموزشی را با بسته بندی خودکار به آموزش هوش مصنوعی Vertex ارسال کنید
برای کسب اطلاعات بیشتر در مورد بخشهای مختلف Vertex AI، مستندات را بررسی کنید.
8. پاکسازی
از آنجایی که ما نوت بوک را طوری پیکربندی کردهایم که پس از 60 دقیقه بیحرکت، زمان آن تمام شود، نیازی نیست نگران خاموش کردن نمونه باشیم. اگر می خواهید نمونه را به صورت دستی خاموش کنید، روی دکمه Stop در بخش Vertex AI Workbench کنسول کلیک کنید. اگر می خواهید نوت بوک را به طور کامل حذف کنید، روی دکمه Delete کلیک کنید.
برای حذف Storage Bucket، با استفاده از منوی Navigation در Cloud Console خود، به Storage بروید، سطل خود را انتخاب کنید و روی Delete کلیک کنید: