1. نظرة عامة
في هذا التمرين المعملي، ستستخدم Vertex AI لإنشاء مسار مسطّح لتدريب نموذج Keras المخصّص في TensorFlow. سنستخدم بعد ذلك الوظيفة الجديدة المتاحة في تجارب Vertex AI لتتبُّع عمليات تنفيذ النماذج ومقارنتها من أجل تحديد مجموعة المَعلمات الفائقة التي تحقّق أفضل أداء.
ما ستتعرّف عليه
ستتعرّف على كيفية:
- تدريب نموذج Keras مخصّص للتنبؤ بتقييمات اللاعبين (مثلاً، الانحدار)
- استخدام حِزم تطوير البرامج (SDK) لمسار Kubeflow Pipelines لإنشاء مسارات تعلُّم آلي قابلة للتطوير
- يمكنك إنشاء وتشغيل مسار مؤلف من 5 خطوات لنقل البيانات من Cloud Storage، وقياس البيانات، وتدريب النموذج، وتقييمه، ثم حفظ النموذج الناتج في Cloud Storage مرة أخرى.
- الاستفادة من البيانات الوصفية لتعلُّم الآلة في Vertex لحفظ عناصر النموذج، مثل "نماذج Google" و"مقاييس النماذج"
- استخدام تجارب Vertex AI لمقارنة نتائج عمليات تنفيذ مسار الإحالة الناجحة المختلفة
تبلغ التكلفة الإجمالية لتنفيذ هذا البرنامج التدريبي على Google Cloud حوالي 1 دولار أمريكي.
2. مقدمة عن Vertex AI
يستخدم هذا المختبر أحدث منتجات الذكاء الاصطناعي المتاحة على Google Cloud. تدمج Vertex AI حلول تعلُّم الآلة في Google Cloud ضمن تجربة تطوير سلسة. في السابق، كان بالإمكان الوصول إلى النماذج المدربة باستخدام AutoML والنماذج المخصّصة من خلال خدمات منفصلة. ويجمع العرض الجديد بين الاثنين في واجهة برمجة تطبيقات واحدة، إلى جانب منتجات جديدة أخرى. يمكنك أيضًا نقل المشاريع الحالية إلى Vertex AI.
تتضمّن Vertex AI العديد من المنتجات المختلفة لدعم سير عمل تعلُّم الآلة من البداية إلى النهاية. سيركّز هذا الدرس التطبيقي على المنتجات المميّزة أدناه: التجارب ومسارات البيانات والبيانات الوصفية لتكنولوجيات الذكاء الاصطناعي وWorkbench.
3- نظرة عامة على حالة الاستخدام
سنستخدم مجموعة بيانات رائجة لكرة القدم مصدرها سلسلة ألعاب الفيديو FIFA من EA Sports. ويشمل أكثر من 25,000 مباراة كرة قدم وما يزيد عن 10,000 لاعب للمواسم 2008-2016. تمّت معالجة البيانات مسبقًا لكي تتمكّن من البدء بسهولة أكبر. ستستخدم مجموعة البيانات هذه خلال التمرين المعملي والتي يمكن العثور عليها الآن في حزمة Cloud Storage عامة. سنقدّم المزيد من التفاصيل لاحقًا في ورشة رموز البرامج حول كيفية الوصول إلى مجموعة البيانات. هدفنا النهائي هو توقّع التقييم العام للاعب استنادًا إلى الإجراءات المختلفة داخل اللعبة، مثل عمليات الاعتراضات والعقوبات.
لماذا تُعد تجربة Vertex AI مفيدة لعلوم البيانات؟
علم البيانات تجريبي بطبيعته، فنحن نُطلَق على علماء البيانات اسم "علماء". يعتمد علماء البيانات الجيدون على الفرضيات، ويستخدمون التجربة والخطأ لاختبار فرضيات مختلفة على أمل أن تؤدي التكرارات المتتالية إلى إنشاء نموذج أكثر أداءًا.
على الرغم من أنّ فِرق علم البيانات قد تبنّت التجارب، إلا أنّها غالبًا ما تواجه صعوبة في تتبُّع عملها و "السرّ" الذي تم اكتشافه من خلال جهودها التجريبية. يحدث ذلك لعدة أسباب:
- يمكن أن يصبح تتبُّع وظائف التدريب أمرًا صعبًا، ما يجعل من السهل عدم الانتباه إلى ما يحقّق أداءً جيدًا وما لا يحقّق ذلك.
- تتفاقم هذه المشكلة عند النظر إلى فريق علم البيانات، لأنّ بعض الأعضاء قد لا يتتبّعون التجارب أو حتى يشاركون نتائجهم مع الآخرين.
- تستغرق عملية جمع البيانات وقتًا طويلاً، وتعتمد معظم الفِرق على طرق يدوية (مثل جداول البيانات أو المستندات) تؤدي إلى الحصول على معلومات غير متّسقة وغير مكتملة يمكن الاستفادة منها.
تنجز أداة Vertex AI Experience المهمة نيابةً عنك، ما يساعدك في تتبُّع تجاربك ومقارنتها بسهولة أكبر.
لماذا Vertex AI Experiments للألعاب؟
كانت الألعاب في السابق مساحة للتعلّم الآلي وتجارب تعلُّم الآلة. لا تُنشئ الألعاب مليارات الأحداث في الوقت الفعلي يوميًا فحسب، بل تستخدِم أيضًا كل هذه البيانات من خلال الاستفادة من تعلُّم الآلة وتجارب تعلُّم الآلة لتحسين التجارب داخل اللعبة والاحتفاظ باللاعبين وتقييم اللاعبين المختلفين على منصّتهم. لذلك، اعتقدنا أنّ مجموعة بيانات الألعاب تناسب بشكل جيد تدريبنا التجريبي العام.
4. إعداد البيئة
ستحتاج إلى مشروع على Google Cloud Platform تم تفعيل ميزة الفوترة فيه لتشغيل هذا الدليل التعليمي. لإنشاء مشروع، اتّبِع التعليمات الواردة هنا.
الخطوة 1: تفعيل واجهة برمجة التطبيقات Compute Engine API
انتقِل إلى Compute Engine (محرك الحوسبة) واختَر تفعيل إذا لم يكن مفعّلاً.
الخطوة 2: تفعيل واجهة برمجة التطبيقات Vertex AI API
انتقِل إلى قسم Vertex AI في Cloud Console وانقر على تفعيل Vertex AI API.
الخطوة 3: إنشاء مثيل Vertex AI Workbench
من قسم Vertex AI في Cloud Console، انقر على Workbench:
فعِّل Notebooks API إذا لم يسبق لك تفعيلها.
بعد تفعيل هذه الميزة، انقر على دفاتر الملاحظات المُدارة:
بعد ذلك، اختَر دفتر ملاحظات جديد.
أدخِل اسمًا لدفتر الملاحظات، ثم انقر على الإعدادات المتقدّمة.
ضمن "الإعدادات المتقدّمة"، فعِّل ميزة "إيقاف الجهاز في حال عدم النشاط" واضبط عدد الدقائق على 60. وهذا يعني أنّه سيتم إيقاف الكمبيوتر المحمول تلقائيًا عند عدم استخدامه حتى لا تتحمل تكاليف غير ضرورية.
الخطوة 4: فتح دفتر الملاحظات
بعد إنشاء المثيل، اختَر فتح JupyterLab.
الخطوة 5: المصادقة (المرة الأولى فقط)
في المرة الأولى التي تستخدم فيها مثيلًا جديدًا، سيُطلب منك المصادقة. اتّبِع الخطوات الواردة في واجهة المستخدم لإجراء ذلك.
الخطوة 6: اختيار نواة التشغيل المناسبة
توفّر دفاتر الملاحظات المُدارة نوى متعددة في واجهة مستخدم واحدة. اختَر نواة Tensorflow 2 (محلي).
5- خطوات الإعداد الأولية في دفتر الملاحظات
ستحتاج إلى اتّخاذ سلسلة من الخطوات الإضافية لإعداد بيئتك في دفتر ملاحظاتك قبل إنشاء مسار الإحالة الناجحة. وتشمل هذه الخطوات ما يلي: تثبيت أي حزم إضافية، وضبط المتغيّرات، وإنشاء حزمة تخزين في السحابة الإلكترونية، ونسخ مجموعة بيانات الألعاب من حزمة تخزين علنية، واستيراد المكتبات وتحديد ثوابت إضافية.
الخطوة 1: تثبيت حِزم إضافية
سنحتاج إلى تثبيت حِزم إضافية غير مثبّتة حاليًا في بيئة دفتر الملاحظات. ومن الأمثلة على ذلك حزمة تطوير البرامج (SDK) الخاصة بحِزمة KFP.
!pip3 install --user --force-reinstall 'google-cloud-aiplatform>=1.15' -q --no-warn-conflicts
!pip3 install --user kfp -q --no-warn-conflicts
ستحتاج بعد ذلك إلى إعادة تشغيل النواة الدفترية لكي تتمكن من استخدام الحزم التي تم تنزيلها داخل دفتر الملاحظات.
# Automatically restart kernel after installs
import os
if not os.getenv("IS_TESTING"):
# Automatically restart kernel after installs
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
الخطوة 2: ضبط المتغيّرات
نريد تحديد PROJECT_ID
. إذا لم تكن تعرف Project_ID
، قد تتمكّن من الحصول على PROJECT_ID
باستخدام gcloud.
import os
PROJECT_ID = ""
# Get your Google Cloud project ID from gcloud
if not os.getenv("IS_TESTING"):
shell_output = !gcloud config list --format 'value(core.project)' 2>/dev/null
PROJECT_ID = shell_output[0]
print("Project ID: ", PROJECT_ID)
ويمكنك بدلاً من ذلك ضبط PROJECT_ID
هنا.
if PROJECT_ID == "" or PROJECT_ID is None:
PROJECT_ID = "[your-project-id]" # @param {type:"string"}
سنحتاج أيضًا إلى ضبط المتغيّر REGION
الذي يتم استخدامه في بقية صفحات دفتر الملاحظات هذا. في ما يلي المناطق التي تتوفّر فيها خدمة Vertex AI. ننصحك باختيار المنطقة الأقرب إليك.
- الأمريكتان: us-central1
- أوروبا: europe-west4
- آسيا والمحيط الهادئ: asia-east1
يُرجى عدم استخدام حزمة متعددة المناطق للتدريب باستخدام Vertex AI. لا توفّر بعض المناطق دعمًا لجميع خدمات Vertex AI. مزيد من المعلومات حول مناطق Vertex AI
#set your region
REGION = "us-central1" # @param {type: "string"}
أخيرًا، سنضبط متغيّر TIMESTAMP
. تُستخدَم هذه المتغيّرات لتجنُّب تعارض الأسماء بين المستخدِمين في الموارد التي تم إنشاؤها، ويمكنك إنشاء TIMESTAMP
لكل جلسة مثيل، وإرفاقها باسم الموارد التي تنشئها في هذا الدليل التعليمي.
#set timestamp to avoid collisions between multiple users
from datetime import datetime
TIMESTAMP = datetime.now().strftime("%Y%m%d%H%M%S")
الخطوة 3: إنشاء حزمة في Cloud Storage
ستحتاج إلى تحديد حزمة مؤقتة على Cloud Storage والاستفادة منها. الحزمة المؤقتة هي المكان الذي يتم فيه الاحتفاظ بجميع البيانات المرتبطة بمجموعة البيانات وموارد النماذج على مستوى الجلسات.
اضبط اسم حزمة Cloud Storage أدناه. يجب أن تكون أسماء الحِزم فريدة على مستوى العالم في جميع مشاريع Google Cloud، بما في ذلك المشاريع خارج مؤسستك.
#set cloud storage bucket
BUCKET_NAME = "[insert bucket name here]" # @param {type:"string"}
BUCKET_URI = f"gs://{BUCKET_NAME}"
إذا لم تكن حزمتك متوفّرة، يمكنك تشغيل الخلية التالية لإنشاء حزمتك على Cloud Storage.
! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI
يمكنك بعد ذلك التحقّق من إمكانية الوصول إلى حزمة Cloud Storage من خلال تنفيذ الخلية التالية.
#verify access
! gsutil ls -al $BUCKET_URI
الخطوة 4: نسخ مجموعة بيانات الألعاب
كما ذكرنا سابقًا، ستستفيد من مجموعة بيانات ألعاب رائجة من لعبة FIFA، وهي من ألعاب الفيديو الرائجة من EA Sports. لقد أجرينا عمليّات المعالجة المُسبَقة نيابةً عنك، لذا ما عليك سوى نسخ مجموعة البيانات من حزمة التخزين العام ونقلها إلى الحزمة التي أنشأتها.
# copy the data over to your cloud storage bucket
DATASET_URI = "gs://cloud-samples-data/vertex-ai/structured_data/player_data"
!gsutil cp -r $DATASET_URI $BUCKET_URI
الخطوة 5: استيراد المكتبات وتحديد ثوابت إضافية
بعد ذلك، سنحتاج إلى استيراد مكتباتنا من Vertex AI وKFP وغيرها.
import logging
import os
import time
logger = logging.getLogger("logger")
logging.basicConfig(level=logging.INFO)
import kfp.v2.compiler as compiler
# Pipeline Experiments
import kfp.v2.dsl as dsl
# Vertex AI
from google.cloud import aiplatform as vertex_ai
from kfp.v2.dsl import Artifact, Input, Metrics, Model, Output, component
from typing import NamedTuple
سنحدِّد أيضًا ثوابت إضافية سنشير إليها مرة أخرى في بقية دفتر البيانات، مثل مسارات الملفات المؤدية إلى بيانات التدريب.
#import libraries and define constants
# Experiments
TASK = "regression"
MODEL_TYPE = "tensorflow"
EXPERIMENT_NAME = f"{PROJECT_ID}-{TASK}-{MODEL_TYPE}-{TIMESTAMP}"
# Pipeline
PIPELINE_URI = f"{BUCKET_URI}/pipelines"
TRAIN_URI = f"{BUCKET_URI}/player_data/data.csv"
LABEL_URI = f"{BUCKET_URI}/player_data/labels.csv"
MODEL_URI = f"{BUCKET_URI}/model"
DISPLAY_NAME = "experiments-demo-gaming-data"
BQ_DATASET = "player_data"
BQ_LOCATION = "US"
VIEW_NAME = 'dataset_test'
PIPELINE_JSON_PKG_PATH = "experiments_demo_gaming_data.json"
PIPELINE_ROOT = f"gs://{BUCKET_URI}/pipeline_root"
6- لنبدأ بإنشاء مسار الإحالة الناجحة
يمكننا الآن البدء في استخدام Vertex AI لإنشاء مسار التدريب. سنبدأ حزمة تطوير البرامج (SDK) لمنصّة Vertex AI، وسنُعدّ وظيفة التدريب كمكوّن مسار عمل، وسننشئ مسار العمل، ونُرسل عمليات تشغيل مسار العمل، ونستفيد من حزمة تطوير البرامج (SDK) لمنصّة Vertex AI لعرض التجارب ومراقبة حالتها.
الخطوة 1: إعداد حزمة تطوير برامج Vertex AI
ابدأ إعداد حزمة تطوير برامج Vertex AI SDK، واضبط PROJECT_ID
وBUCKET_URI
.
#initialize vertex AI SDK
vertex_ai.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)
الخطوة 2: إعداد مهمة التدريب الخاصة بنا كمكوّن لمسار
لبدء تنفيذ تجاربنا، سنحتاج إلى تحديد وظيفة التدريب من خلال تحديدها كأحد مكوّنات مسار الإحالة الناجحة. ستستخدِم مسار الإحالة الناجحة بيانات التدريب ومدخلات الضبط (مثل DROPOUT_RATE وLEARNING_RATE وEPOCHS) كمدخلات ومقاييس نموذج الإخراج (مثل MAE وRMSE) وعنصر نموذج.
@component(
packages_to_install=[
"numpy==1.21.0",
"pandas==1.3.5",
"scikit-learn==1.0.2",
"tensorflow==2.9.0",
]
)
def custom_trainer(
train_uri: str,
label_uri: str,
dropout_rate: float,
learning_rate: float,
epochs: int,
model_uri: str,
metrics: Output[Metrics],
model_metadata: Output[Model],
):
# import libraries
import logging
import uuid
from pathlib import Path as path
import pandas as pd
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Dropout
from tensorflow.keras.metrics import Metric
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_absolute_error
import numpy as np
from math import sqrt
import os
import tempfile
# set variables and use gcsfuse to update prefixes
gs_prefix = "gs://"
gcsfuse_prefix = "/gcs/"
train_path = train_uri.replace(gs_prefix, gcsfuse_prefix)
label_path = label_uri.replace(gs_prefix, gcsfuse_prefix)
model_path = model_uri.replace(gs_prefix, gcsfuse_prefix)
def get_logger():
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setFormatter(
logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
)
logger.addHandler(handler)
return logger
def get_data(
train_path: str,
label_path: str
) -> (pd.DataFrame):
#load data into pandas dataframe
data_0 = pd.read_csv(train_path)
labels_0 = pd.read_csv(label_path)
#drop unnecessary leading columns
data = data_0.drop('Unnamed: 0', axis=1)
labels = labels_0.drop('Unnamed: 0', axis=1)
#save as numpy array for reshaping of data
labels = labels.values
data = data.values
# Split the data
labels = labels.reshape((labels.size,))
train_data, test_data, train_labels, test_labels = train_test_split(data, labels, test_size=0.2, shuffle=True, random_state=7)
#Convert data back to pandas dataframe for scaling
train_data = pd.DataFrame(train_data)
test_data = pd.DataFrame(test_data)
train_labels = pd.DataFrame(train_labels)
test_labels = pd.DataFrame(test_labels)
#Scale and normalize the training dataset
scaler = StandardScaler()
scaler.fit(train_data)
train_data = pd.DataFrame(scaler.transform(train_data), index=train_data.index, columns=train_data.columns)
test_data = pd.DataFrame(scaler.transform(test_data), index=test_data.index, columns=test_data.columns)
return train_data,train_labels, test_data, test_labels
""" Train your Keras model passing in the training data and values for learning rate, dropout rate,and the number of epochs """
def train_model(
learning_rate: float,
dropout_rate: float,
epochs: float,
train_data: pd.DataFrame,
train_labels: pd.DataFrame):
# Train tensorflow model
param = {"learning_rate": learning_rate, "dropout_rate": dropout_rate, "epochs": epochs}
model = Sequential()
model.add(Dense(500, input_dim=train_data.shape[1], activation= "relu"))
model.add(Dropout(param['dropout_rate']))
model.add(Dense(100, activation= "relu"))
model.add(Dense(50, activation= "relu"))
model.add(Dense(1))
model.compile(
tf.keras.optimizers.Adam(learning_rate= param['learning_rate']),
loss='mse',
metrics=[tf.keras.metrics.RootMeanSquaredError(),tf.keras.metrics.MeanAbsoluteError()])
model.fit(train_data, train_labels, epochs= param['epochs'])
return model
# Get Predictions
def get_predictions(model, test_data):
dtest = pd.DataFrame(test_data)
pred = model.predict(dtest)
return pred
# Evaluate predictions with MAE
def evaluate_model_mae(pred, test_labels):
mae = mean_absolute_error(test_labels, pred)
return mae
# Evaluate predictions with RMSE
def evaluate_model_rmse(pred, test_labels):
rmse = np.sqrt(np.mean((test_labels - pred)**2))
return rmse
#Save your trained model in GCS
def save_model(model, model_path):
model_id = str(uuid.uuid1())
model_path = f"{model_path}/{model_id}"
path(model_path).parent.mkdir(parents=True, exist_ok=True)
model.save(model_path + '/model_tensorflow')
# Main ----------------------------------------------
train_data, train_labels, test_data, test_labels = get_data(train_path, label_path)
model = train_model(learning_rate, dropout_rate, epochs, train_data,train_labels )
pred = get_predictions(model, test_data)
mae = evaluate_model_mae(pred, test_labels)
rmse = evaluate_model_rmse(pred, test_labels)
save_model(model, model_path)
# Metadata ------------------------------------------
#convert numpy array to pandas series
mae = pd.Series(mae)
rmse = pd.Series(rmse)
#log metrics and model artifacts with ML Metadata. Save metrics as a list.
metrics.log_metric("mae", mae.to_list())
metrics.log_metric("rmse", rmse.to_list())
model_metadata.uri = model_uri
الخطوة 3: إنشاء مسار الإحالة الناجحة
سنبدأ الآن بإعداد سير العمل باستخدام Domain Specific Language (DSL)
المتوفر في KFP وتجميع المسار في ملف JSON
.
# define our workflow
@dsl.pipeline(name="gaming-custom-training-pipeline")
def pipeline(
train_uri: str,
label_uri: str,
dropout_rate: float,
learning_rate: float,
epochs: int,
model_uri: str,
):
custom_trainer(
train_uri,label_uri, dropout_rate,learning_rate,epochs, model_uri
)
#compile our pipeline
compiler.Compiler().compile(pipeline_func=pipeline, package_path="gaming_pipeline.json")
الخطوة 4: إرسال عمليات تنفيذ مسار الإحالة الناجحة
ويأتي العمل الشاق في إعداد المكون وتحديد مسار العملية. نحن على استعداد لإرسال عمليات مختلفة من مسار الإحالة الناجحة الذي حدّدناه أعلاه. لإجراء ذلك، سنحتاج إلى تحديد قيم المَعلمات الفائقة المختلفة على النحو التالي:
runs = [
{"dropout_rate": 0.001, "learning_rate": 0.001,"epochs": 20},
{"dropout_rate": 0.002, "learning_rate": 0.002,"epochs": 25},
{"dropout_rate": 0.003, "learning_rate": 0.003,"epochs": 30},
{"dropout_rate": 0.004, "learning_rate": 0.004,"epochs": 35},
{"dropout_rate": 0.005, "learning_rate": 0.005,"epochs": 40},
]
بعد تحديد المَعلمات الفائقة، يمكننا بعد ذلك الاستفادة من for loop
لإضافة عمليات التشغيل المختلفة لمسار الإحالة الناجحة بنجاح:
for i, run in enumerate(runs):
job = vertex_ai.PipelineJob(
display_name=f"{EXPERIMENT_NAME}-pipeline-run-{i}",
template_path="gaming_pipeline.json",
pipeline_root=PIPELINE_URI,
parameter_values={
"train_uri": TRAIN_URI,
"label_uri": LABEL_URI,
"model_uri": MODEL_URI,
**run,
},
)
job.submit(experiment=EXPERIMENT_NAME)
الخطوة 5: الاستفادة من حزمة تطوير برامج Vertex AI لعرض التجارب
تتيح لك حزمة تطوير البرامج (SDK) لخدمة Vertex AI مراقبة حالة عمليات تشغيل مسار الإحالة الناجحة. يمكنك أيضًا استخدامها لعرض مَعلمات ومقاييس عمليات تنفيذ مسار الإحالة الناجحة في تجربة Vertex AI. استخدِم الرمز التالي للاطّلاع على المَعلمات المرتبطة بعمليات التشغيل وحالتها الحالية.
# see state/status of all the pipeline runs
vertex_ai.get_experiment_df(EXPERIMENT_NAME)
يمكنك الاستفادة من الرمز أدناه للحصول على آخر المعلومات عن حالة عمليات تنفيذ مسار الإحالة الناجحة.
#check on current status
while True:
pipeline_experiments_df = vertex_ai.get_experiment_df(EXPERIMENT_NAME)
if all(
pipeline_state != "COMPLETE" for pipeline_state in pipeline_experiments_df.state
):
print("Pipeline runs are still running...")
if any(
pipeline_state == "FAILED"
for pipeline_state in pipeline_experiments_df.state
):
print("At least one Pipeline run failed")
break
else:
print("Pipeline experiment runs have completed")
break
time.sleep(60)
يمكنك أيضًا استدعاء مهام مسار بيانات معيّنة باستخدام run_name
.
# Call the pipeline runs based on the experiment run name
pipeline_experiments_df = vertex_ai.get_experiment_df(EXPERIMENT_NAME)
job = vertex_ai.PipelineJob.get(pipeline_experiments_df.run_name[0])
print(job.resource_name)
print(job._dashboard_uri())
أخيرًا، يمكنك إعادة تحميل حالة عمليات التنفيذ على فترات زمنية محددة (مثلاً كل 60 ثانية) لمعرفة ما إذا كانت الحالة قد تغيّرت من RUNNING
إلى FAILED
أو COMPLETE
.
# wait 60 seconds and view state again
import time
time.sleep(60)
vertex_ai.get_experiment_df(EXPERIMENT_NAME)
7- تحديد الحملة الأفضل أداءً
رائع، لدينا الآن نتائج عمليات تشغيل مسار الإحالة الناجحة. قد تتساءل، ما الذي يمكنني تعلُّمه من النتائج؟ يجب أن تحتوي المخرجات من تجاربك على خمسة صفوف، واحد لكلّ عملية تشغيل للمسار. وسيبدو كما يلي:
يُعدّ كلّ من MAE وRMSE مقياسَين لمتوسط خطأ توقّعات النموذج، لذا من المستحسن الحصول على قيمة أقل لكلا المقياسَين في معظم الحالات. استنادًا إلى النتائج الواردة من تجارب Vertex AI، تبيّن لنا أنّ التجربة الأكثر نجاحًا في كلا المقياسَين هي التجربة النهائية التي كانت فيها قيمة dropout_rate
0.001 وقيمة learning_rate
0.001 وإجمالي عدد epochs
هو 20. استنادًا إلى هذه التجربة، سيتم استخدام مَعلمات النموذج هذه في النهاية في مرحلة الإنتاج لأنّها تؤدي إلى تحقيق أفضل أداء للنموذج.
بذلك تكون قد أكملت الدرس التطبيقي.
🎉 تهانينا. 🎉
لقد تعلّمت كيفية استخدام Vertex AI لتنفيذ ما يلي:
- تدريب نموذج Keras المخصّص للتنبؤ بتقييمات اللاعبين (مثل الانحدار)
- استخدام حِزم تطوير البرامج (SDK) لمسار Kubeflow Pipelines لإنشاء مسارات تعلُّم آلي قابلة للتطوير
- إنشاء وتشغيل مسار عمل مكوّن من 5 خطوات لاستيراد البيانات من GCS وتوسيع نطاقها وتدريب النموذج وتقييمه وحفظ النموذج الناتج مرة أخرى في GCS
- الاستفادة من Vertex ML Metadata لحفظ عناصر النماذج، مثل النماذج ومقاييس النماذج
- استخدام تجارب Vertex AI لمقارنة نتائج مسارات التعلّم المختلفة
لمعرفة المزيد عن الأجزاء المختلفة من Vertex، اطّلِع على المستندات.
8. تنظيف
لكي لا يتم تحصيل رسوم منك، ننصحك بحذف الموارد التي تم إنشاؤها خلال هذا الدرس العملي.
الخطوة 1: إيقاف أو حذف نسخة "دفاتر ملاحظات Google"
إذا أردت مواصلة استخدام دفتر البيانات الذي أنشأته في هذا الدرس العملي، ننصحك بإيقافه عندما لا يكون قيد الاستخدام. من واجهة مستخدم "دفاتر ملاحظات Google" في Cloud Console، اختَر دفتر الملاحظات ثم اختَر إيقاف. إذا كنت تريد حذف المثيل بالكامل، انقر على حذف:
الخطوة 2: حذف حزمة Cloud Storage
لحذف حزمة التخزين، استخدِم قائمة التنقّل في Cloud Console للانتقال إلى "مساحة التخزين"، واختَر الحزمة، ثم انقر على "حذف":