1. مقدمه
در این آزمایشگاه، نحوه استفاده از روالهای پیشبینی سفارشی در Vertex AI برای نوشتن منطق پیشپردازش و پس پردازش سفارشی را خواهید آموخت. در حالی که این نمونه از Scikit-learn استفاده میکند، روالهای پیشبینی سفارشی میتوانند با سایر چارچوبهای Python ML مانند XGBoost، PyTorch و TensorFlow کار کنند.
چیزی که یاد خواهید گرفت
- منطق پیشبینی سفارشی را با روالهای پیشبینی سفارشی بنویسید
- ظرف سرو سفارشی و مدل را به صورت محلی تست کنید
- ظرف سرو سفارشی را روی Vertex AI Predictions آزمایش کنید
2. مقدمه ای بر Vertex AI
این آزمایشگاه از جدیدترین محصول هوش مصنوعی موجود در Google Cloud استفاده می کند. Vertex AI پیشنهادات ML را در سراسر Google Cloud در یک تجربه توسعه یکپارچه ادغام می کند. پیش از این، مدلهای آموزش دیده با AutoML و مدلهای سفارشی از طریق سرویسهای جداگانه قابل دسترسی بودند. پیشنهاد جدید هر دو را به همراه سایر محصولات جدید در یک API واحد ترکیب می کند. همچنین می توانید پروژه های موجود را به Vertex AI منتقل کنید.
Vertex AI شامل بسیاری از محصولات مختلف برای پشتیبانی از گردش کار ML سرتاسر است. این آزمایشگاه بر روی پیش بینی ها و میز کار تمرکز خواهد کرد.
3. از Case Overview استفاده کنید
در این آزمایشگاه، شما یک مدل رگرسیون جنگل تصادفی برای پیشبینی قیمت یک الماس بر اساس ویژگیهایی مانند برش، وضوح و اندازه میسازید.
شما منطق پیش پردازش سفارشی را می نویسید تا بررسی کنید که داده ها در زمان ارائه در قالب مورد انتظار مدل هستند. همچنین منطق پردازش پست سفارشی را برای گرد کردن پیشبینیها و تبدیل آنها به رشته مینویسید. برای نوشتن این منطق، از روال های پیش بینی سفارشی استفاده خواهید کرد.
مقدمه ای بر روال های پیش بینی سفارشی
کانتینرهای از پیش ساخته شده با هوش مصنوعی Vertex با انجام عملیات پیشبینی چارچوب یادگیری ماشین، درخواستهای پیشبینی را انجام میدهند. قبل از روالهای پیشبینی سفارشی، اگر میخواهید قبل از انجام پیشبینی، ورودی را از قبل پردازش کنید، یا پیشبینی مدل را قبل از برگرداندن نتیجه پس پردازش کنید، باید یک ظرف سفارشی بسازید.
ساختن یک کانتینر سرویس سفارشی نیاز به نوشتن یک سرور HTTP دارد که مدل آموزش دیده را بپیچد، درخواستهای HTTP را به ورودیهای مدل ترجمه کند و خروجیهای مدل را به پاسخها ترجمه کند.
با روالهای پیشبینی سفارشی، Vertex AI مؤلفههای مربوط به سرویس را برای شما فراهم میکند تا بتوانید روی مدل و تغییر دادههای خود تمرکز کنید.
چیزی که خواهی ساخت
شما یک شبکه VPC به نام aiml-vpc را راه اندازی خواهید کرد که از یک زیرشبکه میز کار تشکیل شده است که برای استقرار یک نوت بوک مدیریت شده توسط کاربر و دسترسی به پیش بینی آنلاین و نقطه پایانی مدل مستقر شده در us-central1 که در شکل 1 در زیر نشان داده شده است، استفاده می شود.
Figure1
4. API های آموزشی را فعال کنید
مرحله 1: Compute Engine API را فعال کنید
به Compute Engine بروید و اگر قبلاً فعال نشده است Enable را انتخاب کنید. برای ایجاد نمونه نوت بوک خود به این نیاز دارید.
مرحله ۲: Artifact Registry API را فعال کنید
به رجیستری Artifact بروید و اگر قبلاً وجود ندارد، Enable را انتخاب کنید. از این برای ایجاد یک ظرف سرو سفارشی استفاده خواهید کرد.
مرحله 3: Vertex AI API را فعال کنید
به بخش Vertex AI در Cloud Console خود بروید و روی Enable Vertex AI API کلیک کنید.
مرحله 4: یک نمونه Vertex AI Workbench ایجاد کنید
Notebooks AP I را فعال کنید اگر قبلاً فعال نشده باشد.
5. aiml-vpc را ایجاد کنید
این آموزش از $variables برای کمک به پیاده سازی پیکربندی gcloud در Cloud Shell استفاده می کند.
در داخل Cloud Shell موارد زیر را انجام دهید:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
aiml-vpc را ایجاد کنید
در داخل Cloud Shell موارد زیر را انجام دهید:
gcloud compute networks create aiml-vpc --project=$projectid --subnet-mode=custom
زیرشبکه نوت بوک مدیریت شده توسط کاربر را ایجاد کنید
در داخل Cloud Shell، workbench-subnet را ایجاد کنید.
gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access
روتر ابری و پیکربندی NAT
Cloud NAT در آموزش برای دانلود بسته های نرم افزاری استفاده می شود زیرا نوت بوک مدیریت شده توسط کاربر آدرس IP خارجی ندارد. Cloud NAT قابلیتهای egress NAT را فراهم میکند، به این معنی که میزبانهای اینترنتی مجاز به برقراری ارتباط با یک نوتبوک مدیریتشده توسط کاربر نیستند و امنیت آن را بیشتر میکند.
در داخل Cloud Shell، روتر ابر منطقه ای، us-central1 را ایجاد کنید.
gcloud compute routers create cloud-router-us-central1-aiml-nat --network aiml-vpc --region us-central1
در داخل Cloud Shell، دروازه منطقه ای ابر nat، us-central1 را ایجاد کنید.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
6. نوت بوک مدیریت شده توسط کاربر را ایجاد کنید
ایجاد یک حساب سرویس مدیریت شده توسط کاربر (Notebook)
در بخش زیر، یک حساب کاربری سرویس مدیریت شده توسط کاربر ایجاد میکنید که با Vertex Workbench (Notebook) مورد استفاده در آموزش مرتبط میشود.
در آموزش، حساب سرویس دارای قوانین زیر اعمال می شود:
در داخل Cloud Shell، حساب سرویس را ایجاد کنید.
gcloud iam service-accounts create user-managed-notebook-sa \
--display-name="user-managed-notebook-sa"
در داخل Cloud Shell، حساب سرویس را با نقش Storage Admin بهروزرسانی کنید.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"
در داخل Cloud Shell، حساب سرویس را با نقش Vertex AI User به روز کنید.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
در داخل Cloud Shell، حساب سرویس را با نقش Artifact Registry Admin بهروزرسانی کنید.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"
در داخل Cloud Shell، حساب سرویس را فهرست کنید و آدرس ایمیلی را که هنگام ایجاد نوت بوک مدیریت شده توسط کاربر استفاده می شود، یادداشت کنید.
gcloud iam service-accounts list
نوت بوک مدیریت شده توسط کاربر را ایجاد کنید
در بخش زیر، یک نوت بوک مدیریت شده توسط کاربر ایجاد کنید که دارای حساب کاربری سرویس قبلی، user-managed-notebook-sa باشد.
Inside Cloud Shell نمونه خصوصی مشتری را ایجاد کنید.
gcloud notebooks instances create workbench-tutorial \
--vm-image-project=deeplearning-platform-release \
--vm-image-family=common-cpu-notebooks \
--machine-type=n1-standard-4 \
--location=us-central1-a \
--shielded-secure-boot \
--subnet-region=us-central1 \
--subnet=workbench-subnet \
--no-public-ip --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com
7. کد آموزشی بنویسید
مرحله 1: یک سطل ذخیره سازی ابری ایجاد کنید
شما مدل و مصنوعات در حال پیش پردازش را در یک سطل Cloud Storage ذخیره خواهید کرد. اگر قبلاً یک سطل در پروژه خود دارید که می خواهید از آن استفاده کنید، می توانید از این مرحله صرف نظر کنید.
از لانچر یک جلسه ترمینال جدید باز کنید.
از ترمینال خود، موارد زیر را اجرا کنید تا یک متغیر env برای پروژه خود تعریف کنید و مطمئن شوید که پروژه ابری خود را با شناسه پروژه خود جایگزین کنید:
PROJECT_ID='your-cloud-project'
در مرحله بعد، موارد زیر را در ترمینال خود اجرا کنید تا یک سطل جدید در پروژه خود ایجاد کنید.
BUCKET="gs://${PROJECT_ID}-cpr-bucket"
gsutil mb -l us-central1 $BUCKET
مرحله 2: مدل قطار
از ترمینال، یک دایرکتوری جدید به نام cpr-codelab ایجاد کنید و cd در آن ایجاد کنید.
mkdir cpr-codelab
cd cpr-codelab
در مرورگر فایل، به دایرکتوری جدید cpr-codelab بروید و سپس از راهانداز برای ایجاد یک نوت بوک جدید پایتون 3 به نام task.ipynb استفاده کنید.
دایرکتوری cpr-codelab شما اکنون باید به شکل زیر باشد:
+ cpr-codelab/
+ task.ipynb
در نوت بوک کد زیر را بچسبانید.
ابتدا یک فایل require.txt بنویسید.
%%writefile requirements.txt
fastapi
uvicorn==0.17.6
joblib~=1.1.1
numpy>=1.17.3, <1.24.0
scikit-learn~=1.0.0
pandas
google-cloud-storage>=2.2.1,<3.0.0dev
google-cloud-aiplatform[prediction]>=1.18.2
مدلی که استقرار میکنید مجموعهای از وابستگیهای از پیش نصب شده متفاوت از محیط نوت بوک شما دارد. به همین دلیل، میخواهید همه وابستگیهای مدل را در request.txt فهرست کنید و سپس از pip برای نصب دقیقاً همان وابستگیها در نوتبوک استفاده کنید. بعداً، قبل از استقرار در Vertex AI مدل را به صورت محلی آزمایش خواهید کرد تا دوبار بررسی کنید که محیط ها مطابقت دارند.
پیپ وابستگی ها را در نوت بوک نصب می کند.
!pip install -U --user -r requirements.txt
توجه داشته باشید که پس از اتمام نصب پیپ، باید کرنل را مجددا راه اندازی کنید.
سپس، دایرکتوری هایی را ایجاد کنید که در آن مدل و مصنوعات پیش پردازش را ذخیره می کنید.
USER_SRC_DIR = "src_dir"
!mkdir $USER_SRC_DIR
!mkdir model_artifacts
# copy the requirements to the source dir
!cp requirements.txt $USER_SRC_DIR/requirements.txt
دایرکتوری cpr-codelab شما اکنون باید به شکل زیر باشد:
+ cpr-codelab/
+ model_artifacts/
+ scr_dir/
+ requirements.txt
+ task.ipynb
+ requirements.txt
اکنون که ساختار دایرکتوری تنظیم شده است، زمان آموزش یک مدل است!
ابتدا کتابخانه ها را وارد کنید.
import seaborn as sns
import numpy as np
import pandas as pd
from sklearn import preprocessing
from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import make_pipeline
from sklearn.compose import make_column_transformer
import joblib
import logging
# set logging to see the docker container logs
logging.basicConfig(level=logging.INFO)
سپس متغیرهای زیر را تعریف کنید. حتماً PROJECT_ID را با شناسه پروژه خود و BUCKET_NAME را با سطلی که در مرحله قبل ایجاد کردید جایگزین کنید.
REGION = "us-central1"
MODEL_ARTIFACT_DIR = "sklearn-model-artifacts"
REPOSITORY = "diamonds"
IMAGE = "sklearn-image"
MODEL_DISPLAY_NAME = "diamonds-cpr"
# Replace with your project
PROJECT_ID = "{PROJECT_ID}"
# Replace with your bucket
BUCKET_NAME = "gs://{BUCKET_NAME}"
داده ها را از کتابخانه seaborn بارگیری کنید و سپس دو قاب داده ایجاد کنید، یکی با ویژگی ها و دیگری با برچسب.
data = sns.load_dataset('diamonds', cache=True, data_home=None)
label = 'price'
y_train = data['price']
x_train = data.drop(columns=['price'])
بیایید نگاهی به داده های آموزشی بیندازیم. می توانید ببینید که هر ردیف نشان دهنده یک الماس است.
x_train.head()
و برچسب ها که قیمت های مربوطه هستند.
y_train.head()
اکنون، یک تبدیل ستون Sklearn را به یک رمزگذاری داغ ویژگی های طبقه بندی و مقیاس ویژگی های عددی تعریف کنید.
column_transform = make_column_transformer(
(preprocessing.OneHotEncoder(sparse=False), [1,2,3]),
(preprocessing.StandardScaler(), [0,4,5,6,7,8]))
مدل جنگل تصادفی را تعریف کنید
regr = RandomForestRegressor(max_depth=10, random_state=0)
بعد، یک خط لوله اسکلرن بسازید. این بدان معنی است که داده های تغذیه شده به این خط لوله ابتدا کدگذاری/مقیاس شده و سپس به مدل ارسال می شود.
my_pipeline = make_pipeline(column_transform, regr)
خط لوله را بر روی داده های آموزشی قرار دهید
my_pipeline.fit(x_train, y_train)
بیایید مدل را امتحان کنیم تا مطمئن شویم همانطور که انتظار می رود کار می کند. فراخوانی روش پیش بینی در مدل، عبور در یک نمونه آزمایشی.
my_pipeline.predict([[0.23, 'Ideal', 'E', 'SI2', 61.5, 55.0, 3.95, 3.98, 2.43]])
اکنون می توانیم خط لوله را در model_artifacts dir ذخیره کنیم و آن را در سطل Cloud Storage کپی کنیم.
joblib.dump(my_pipeline, 'model_artifacts/model.joblib')
!gsutil cp model_artifacts/model.joblib {BUCKET_NAME}/{MODEL_ARTIFACT_DIR}/
مرحله 3: یک مصنوع پیش پردازش را ذخیره کنید
سپس یک مصنوع پیش پردازش ایجاد می کنید. هنگامی که سرور مدل راه اندازی می شود، این مصنوع در کانتینر سفارشی بارگذاری می شود. مصنوع پیش پردازش شما می تواند تقریباً به هر شکلی باشد (مانند فایل ترشی)، اما در این مورد، یک فرهنگ لغت را در یک فایل JSON می نویسید.
clarity_dict={"Flawless": "FL",
"Internally Flawless": "IF",
"Very Very Slightly Included": "VVS1",
"Very Slightly Included": "VS2",
"Slightly Included": "S12",
"Included": "I3"}
ویژگی وضوح در داده های آموزشی ما همیشه به صورت اختصاری بود (یعنی "FL" به جای "Flawless"). در زمان ارائه، میخواهیم بررسی کنیم که دادههای این ویژگی نیز به صورت اختصاری باشد. این به این دلیل است که مدل ما می داند چگونه یک "FL" را رمزگذاری کند اما "Flawless" را نه. این منطق پیش پردازش سفارشی را بعداً خواهید نوشت. اما در حال حاضر، فقط این جدول جستجو را در یک فایل json ذخیره کنید و سپس آن را در سطل Cloud Storage بنویسید.
import json
with open("model_artifacts/preprocessor.json", "w") as f:
json.dump(clarity_dict, f)
!gsutil cp model_artifacts/preprocessor.json {BUCKET_NAME}/{MODEL_ARTIFACT_DIR}/
فهرست cpr-codelab محلی شما اکنون باید به شکل زیر باشد:
+ cpr-codelab/
+ model_artifacts/
+ model.joblib
+ preprocessor.json
+ scr_dir/
+ requirements.txt
+ task.ipynb
+ requirements.txt
8. با استفاده از سرور مدل CPR یک کانتینر خدمت سفارشی بسازید
اکنون که مدل آموزش دیده و مصنوع و پیش پردازش ذخیره شده است، زمان ساخت ظرف سرو سفارشی فرا رسیده است. به طور معمول ساختن کانتینر سرویس نیازمند نوشتن کد سرور مدل است. با این حال، با روالهای پیشبینی سفارشی، Vertex AI Predictions یک سرور مدل تولید میکند و یک تصویر ظرف سفارشی برای شما میسازد.
یک ظرف سرو سفارشی شامل 3 کد زیر است:
- سرور مدل (این به طور خودکار توسط SDK تولید می شود و در scr_dir/ ذخیره می شود)
- سرور HTTP که مدل را میزبانی می کند
- مسئول تنظیم مسیرها / پورت ها / و غیره.
- مسئول جنبههای سرور وب در رسیدگی به یک درخواست، مانند غیر سریالسازی بدنه درخواست، و سریالسازی پاسخ، تنظیم سرصفحههای پاسخ و غیره.
- در این مثال، از Handler پیشفرض، google.cloud.aiplatform.prediction.handler.PredictionHandler ارائه شده در SDK استفاده میکنید.
- مسئول منطق ML برای پردازش درخواست پیش بینی است.
هر یک از این اجزا را می توان بر اساس نیازهای مورد استفاده شما سفارشی کرد. در این مثال، شما فقط پیش بینی را پیاده سازی می کنید.
پیشگو مسئول منطق ML برای پردازش یک درخواست پیش بینی، مانند پیش پردازش سفارشی و پس پردازش است. برای نوشتن منطق پیشبینی سفارشی، رابط Vertex AI Predictor را زیر کلاس میدهید.
این نسخه از روتینهای پیشبینی سفارشی با پیشبینیکنندههای XGBoost و Sklearn قابل استفاده مجدد ارائه میشود، اما اگر نیاز به استفاده از چارچوب متفاوتی دارید، میتوانید با زیر کلاسبندی پیشبینیکننده پایه، چارچوب خود را ایجاد کنید.
در زیر می توانید نمونه ای از پیش بینی کننده Sklearn را مشاهده کنید. این تمام کدهایی است که برای ساخت این سرور مدل سفارشی باید بنویسید.
در نوت بوک خود کد زیر را برای زیر کلاس SklearnPredictor قرار دهید و آن را در فایل پایتون در src_dir/ بنویسید. توجه داشته باشید که در این مثال ما فقط روش های بارگذاری، پیش پردازش و پس پردازش را سفارشی می کنیم و نه روش پیش بینی.
%%writefile $USER_SRC_DIR/predictor.py
import joblib
import numpy as np
import json
from google.cloud import storage
from google.cloud.aiplatform.prediction.sklearn.predictor import SklearnPredictor
class CprPredictor(SklearnPredictor):
def __init__(self):
return
def load(self, artifacts_uri: str) -> None:
"""Loads the sklearn pipeline and preprocessing artifact."""
super().load(artifacts_uri)
# open preprocessing artifact
with open("preprocessor.json", "rb") as f:
self._preprocessor = json.load(f)
def preprocess(self, prediction_input: np.ndarray) -> np.ndarray:
"""Performs preprocessing by checking if clarity feature is in abbreviated form."""
inputs = super().preprocess(prediction_input)
for sample in inputs:
if sample[3] not in self._preprocessor.values():
sample[3] = self._preprocessor[sample[3]]
return inputs
def postprocess(self, prediction_results: np.ndarray) -> dict:
"""Performs postprocessing by rounding predictions and converting to str."""
return {"predictions": [f"${value}" for value in np.round(prediction_results)]}
بیایید نگاهی عمیق تر به هر یک از این روش ها بیندازیم.
- روش بارگذاری در مصنوع پیش پردازش بارگذاری می شود، که در این مورد فرهنگ لغت است که مقادیر شفافیت الماس را به اختصارات آنها نگاشت می کند.
- روش پیش پردازش از آن مصنوع استفاده می کند تا اطمینان حاصل کند که در زمان ارائه ویژگی وضوح در قالب اختصاری آن است. اگر نه، رشته کامل را به مخفف خود تبدیل می کند.
- متد postprocess مقدار پیش بینی شده را به صورت رشته ای با علامت $ برمی گرداند و مقدار را گرد می کند.
در مرحله بعد، از Vertex AI Python SDK برای ساخت تصویر استفاده کنید. با استفاده از روال های پیش بینی سفارشی، Dockerfile تولید می شود و یک تصویر برای شما ساخته می شود.
from google.cloud import aiplatform
aiplatform.init(project=PROJECT_ID, location=REGION)
import os
from google.cloud.aiplatform.prediction import LocalModel
from src_dir.predictor import CprPredictor # Should be path of variable $USER_SRC_DIR
local_model = LocalModel.build_cpr_model(
USER_SRC_DIR,
f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
predictor=CprPredictor,
requirements_path=os.path.join(USER_SRC_DIR, "requirements.txt"),
)
یک فایل تست با دو نمونه برای پیش بینی بنویسید. یکی از نمونه ها دارای نام اختصاری وضوح است، اما دیگری باید ابتدا تبدیل شود.
import json
sample = {"instances": [
[0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
[0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}
with open('instances.json', 'w') as fp:
json.dump(sample, fp)
با استقرار یک مدل محلی، ظرف را به صورت محلی آزمایش کنید.
with local_model.deploy_to_local_endpoint(
artifact_uri = 'model_artifacts/', # local path to artifacts
) as local_endpoint:
predict_response = local_endpoint.predict(
request_file='instances.json',
headers={"Content-Type": "application/json"},
)
health_check_response = local_endpoint.run_health_check()
شما می توانید نتایج پیش بینی را با:
predict_response.content
9. استقرار مدل به Vertex AI
اکنون که کانتینر را به صورت محلی آزمایش کردید، زمان آن رسیده است که تصویر را به Artifact Registry فشار دهید و مدل را در Vertex AI Model Registry آپلود کنید.
ابتدا Docker را برای دسترسی به رجیستری Artifact پیکربندی کنید.
!gcloud artifacts repositories create {REPOSITORY} --repository-format=docker \
--location=us-central1 --description="Docker repository"
!gcloud auth configure-docker {REGION}-docker.pkg.dev --quiet
سپس، تصویر را فشار دهید.
local_model.push_image()
و مدل رو آپلود کنید
model = aiplatform.Model.upload(local_model = local_model,
display_name=MODEL_DISPLAY_NAME,
artifact_uri=f"{BUCKET_NAME}/{MODEL_ARTIFACT_DIR}",)
وقتی مدل آپلود شد، باید آن را در کنسول ببینید:
سپس، مدل را مستقر کنید تا بتوانید از آن برای پیشبینیهای آنلاین استفاده کنید. روالهای پیشبینی سفارشی با پیشبینی دستهای نیز کار میکنند، بنابراین اگر مورد استفاده شما به پیشبینی آنلاین نیاز ندارد، نیازی به استقرار مدل ندارید.
سپس، تصویر را فشار دهید.
endpoint = model.deploy(machine_type="n1-standard-2")
در نهایت، مدل مستقر شده را با پیشبینی آزمایش کنید.
endpoint.predict(instances=[[0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43]])
🎉 تبریک می گویم! 🎉
شما یاد گرفته اید که چگونه از Vertex AI برای موارد زیر استفاده کنید:
- منطق پیش پردازش و پس پردازش سفارشی را با روال های پیش بینی سفارشی بنویسید
Cosmopup فکر می کند که نرم افزارهای کدنویسی عالی هستند!!
بعدش چی؟
ادامه مطلب و ویدیوها
- Vertex AI چیست؟
- با Vertex AI شروع کنید
- کدام راه حل AI/ML در Vertex AI برای من مناسب است؟
- ساخت سیستم پاسخگویی به سوال با Vertex AI