نمونه اولیه برای تولید: دریافت پیش‌بینی از مدل‌های آموزش‌دیده سفارشی

۱. مرور کلی

در این آزمایشگاه، شما از Vertex AI برای دریافت پیش‌بینی‌های آنلاین و دسته‌ای از یک مدل آموزش‌دیده سفارشی استفاده خواهید کرد.

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

.

آنچه یاد می‌گیرید

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

  • مدل‌ها را در رجیستری مدل Vertex AI بارگذاری کنید
  • استقرار یک مدل در یک نقطه پایانی
  • با رابط کاربری و SDK، پیش‌بینی‌های آنلاین و دسته‌ای دریافت کنید

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

۲. مقدمه‌ای بر هوش مصنوعی ورتکس

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

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

بررسی اجمالی محصولات ورتکس

۳. محیط خود را آماده کنید

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

۴. مدل را در رجیستری آپلود کنید

قبل از اینکه بتوانیم از مدل خود برای دریافت پیش‌بینی‌ها استفاده کنیم، باید آن را در Vertex AI Model Registry آپلود کنیم، که مخزنی است که می‌توانید چرخه حیات مدل‌های یادگیری ماشین خود را در آن مدیریت کنید.

همانطور که در زیر نشان داده شده است، می‌توانید هنگام پیکربندی یک کار آموزشی سفارشی، مدل‌ها را آپلود کنید.

آموزش_پیش‌بینی

یا می‌توانید مدل‌ها را پس از اتمام کار آموزشی وارد کنید، البته تا زمانی که مصنوعات مدل ذخیره شده را در یک فضای ذخیره‌سازی ابری ذخیره کنید. این گزینه‌ای است که ما در این تمرین از آن استفاده خواهیم کرد.

به بخش مدل‌ها در کنسول بروید.

منوی مدل

انتخاب واردات

مدل_وارداتی

گزینه Import as new model را انتخاب کنید و سپس نامی برای مدل خود انتخاب کنید.

مدل_جدید

در قسمت تنظیمات مدل ، مدل را با یک کانتینر از پیش ساخته شده وارد کنید و از TensorFlow 2.8 استفاده کنید. می‌توانید لیست کامل کانتینرهای پیش‌بینی از پیش ساخته شده را اینجا مشاهده کنید.

سپس مسیر سطل ذخیره‌سازی ابری را که در آن مصنوعات مدل را در کار آموزشی سفارشی ذخیره کرده‌اید، ارائه دهید. این باید چیزی شبیه به gs://{PROJECT_ID}-bucket/model_output باشد.

از بخش «قابلیت توضیح» صرف نظر می‌کنیم، اما اگر مایلید درباره هوش مصنوعی قابل توضیح Vertex بیشتر بدانید، به مستندات مراجعه کنید.

وقتی مدل وارد شد، آن را در رجیستری مشاهده خواهید کرد.

مدل_گل

توجه داشته باشید که اگر می‌خواستید این کار را به جای رابط کاربری از طریق SDK انجام دهید، می‌توانید دستور زیر را از نوت‌بوک Workbench خود برای آپلود مدل اجرا کنید.

from google.cloud import aiplatform

my_model = aiplatform.Model.upload(display_name='flower-model',
                                  artifact_uri='gs://{PROJECT_ID}-bucket/model_output',
                                  serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')

۵. استقرار مدل در نقطه پایانی

دو نوع کار پیش‌بینی وجود دارد که می‌توانیم در Vertex AI اجرا کنیم: دسته‌ای و آنلاین.

پیش‌بینی دسته‌ای یک درخواست ناهمزمان است. این روش زمانی مناسب است که نیازی به پاسخ فوری ندارید و می‌خواهید داده‌های انباشته شده را در یک درخواست واحد پردازش کنید.

از طرف دیگر، اگر می‌خواهید پیش‌بینی‌هایی با تأخیر کم از داده‌هایی که در لحظه به مدل شما ارسال می‌شوند، دریافت کنید، از پیش‌بینی آنلاین استفاده خواهید کرد.

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

اما اگر بخواهیم پیش‌بینی‌های آنلاین دریافت کنیم، باید مدل را در یک نقطه پایانی مستقر کنیم. این کار، مصنوعات مدل ذخیره شده را برای پیش‌بینی‌های با تأخیر کم، با منابع فیزیکی مرتبط می‌کند.

برای استقرار در یک نقطه پایانی، سه نقطه در منتهی‌الیه سمت راست مدل را انتخاب کنید، سپس Deploy to endpoint را انتخاب کنید.

deploy_model

به نقطه پایانی خود یک نام بدهید، و سپس بقیه تنظیمات را همانطور که هست بگذارید و روی ادامه کلیک کنید

نام_نقطه_پایانی

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

از آنجایی که این آزمایش فقط برای نمایش است و ما قصد نداریم از این نقطه پایانی برای ترافیک بالا استفاده کنیم، می‌توانید حداکثر تعداد یادداشت‌های محاسباتی را روی ۱ تنظیم کنید و نوع ماشین را n1-standard-4 انتخاب کنید.

محاسبه نقطه پایانی

از بحث نظارت بر مدل صرف نظر می‌کنیم، اما اگر مایلید درباره این ویژگی بیشتر بدانید، مستندات را بررسی کنید.

سپس روی استقرار کلیک کنید

استقرار چند دقیقه طول می‌کشد، اما پس از اتمام، خواهید دید که وضعیت استقرار مدل شما به Deployed on Vertex AI تغییر کرده است.

اگر می‌خواهید یک مدل را از طریق SDK مستقر کنید، دستور زیر را اجرا کنید.

my_model = aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

endpoint = my_model.deploy(
     deployed_model_display_name='my-endpoint',
     traffic_split={"0": 100},
     machine_type="n1-standard-4",
     accelerator_count=0,
     min_replica_count=1,
     max_replica_count=1,
   )

۶. پیش‌بینی‌ها را دریافت کنید

پیش‌بینی‌های آنلاین

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

برای اهداف نمایشی، این نقطه پایانی را از Workbench فراخوانی می‌کنیم.

به دفترچه یادداشتی که در تمرین قبلی ایجاد کردید برگردید. از لانچر، یک دفترچه یادداشت TensorFlow 2 جدید ایجاد کنید.

tf_kernel

کیت توسعه نرم‌افزاری Vertex AI Python، numpy و PIL را وارد کنید

from google.cloud import aiplatform

import numpy as np
from PIL import Image

تصویر زیر را دانلود کرده و آن را در محیط کاری خود آپلود کنید. ما مدل را روی این تصویر از یک قاصدک آزمایش خواهیم کرد.

تصویر_آزمایشی

ابتدا، نقطه پایانی را تعریف کنید. شما باید {PROJECT_NUMBER} و {ENDPOINT_ID} را در زیر جایگزین کنید.

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")

می‌توانید endpoint_id خود را در بخش Endpoints در cloud Console پیدا کنید.

شناسه نقطه پایانی

و می‌توانید شماره پروژه خود را در صفحه اصلی کنسول پیدا کنید. توجه داشته باشید که این با شناسه پروژه متفاوت است.

شماره_پروژه

کد زیر تصویر را با PIL باز و تغییر اندازه می‌دهد.

IMAGE_PATH = "test-image.jpg"
im = Image.open(IMAGE_PATH)

سپس، داده‌های numpy را به نوع float32 و به یک لیست تبدیل کنید. ما به یک لیست تبدیل می‌کنیم زیرا داده‌های numpy قابل سریال‌سازی JSON نیستند، بنابراین نمی‌توانیم آن را در بدنه درخواست خود ارسال کنیم.

x_test = np.asarray(im).astype(np.float32).tolist()

در نهایت، تابع endpoint.predict را فراخوانی کنید.

endpoint.predict(instances=x_test).predictions

نتیجه‌ای که دریافت می‌کنید، خروجی مدل است که یک لایه softmax با ۵ واحد است. اگر می‌خواهید منطق سفارشی بنویسید تا به جای اندیس، برچسب رشته را برگرداند، می‌توانید از روال‌های پیش‌بینی سفارشی استفاده کنید.

پیش‌بینی‌های دسته‌ای

روش‌های مختلفی برای قالب‌بندی داده‌های شما برای پیش‌بینی دسته‌ای وجود دارد. برای سادگی، داده‌های numpy را در یک فایل json قرار می‌دهیم و فایل را در Cloud Storage ذخیره می‌کنیم.

with open('test-data.json', 'w') as fp:
    json.dump(x_test, fp)

!gsutil cp test-data.json gs://{YOUR_BUCKET}

سپس، مدل را تعریف کنید. این کار مشابه تعریف نقطه پایانی است، با این تفاوت که به جای ENDPOINT_ID باید MODEL_ID ارائه دهید.

my_model=aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

شما می‌توانید شناسه مدل را با انتخاب نام و نسخه مدل از بخش Models کنسول و سپس انتخاب VERSION DETAILS پیدا کنید.

شناسه مدل

در نهایت، از SDK برای فراخوانی یک کار پیش‌بینی دسته‌ای استفاده کنید، مسیر ذخیره‌سازی ابری را که فایل json را در آن ذخیره کرده‌اید، ارسال کنید و یک مکان ذخیره‌سازی ابری برای ذخیره نتایج پیش‌بینی ارائه دهید.

batch_prediction_job = my_model.batch_predict(
    job_display_name='flower_batch_predict',
    gcs_source='gs://{YOUR_BUCKET}/test-data.json',
    gcs_destination_prefix='gs://{YOUR_BUCKET}/prediction-results',
    machine_type='n1-standard-4',)

شما می‌توانید پیشرفت کار را در بخش پیش‌بینی‌های دسته‌ای کنسول پیگیری کنید. توجه داشته باشید که اجرای یک کار پیش‌بینی دسته‌ای برای یک تصویر واحد کارآمد نیست.

batch_pred

قدم بعدی چیست؟

در این مثال، ما ابتدا تصویر آزمایشی را قبل از انجام فراخوانی پیش‌بینی به NumPy تبدیل کردیم. برای موارد استفاده واقع‌بینانه‌تر، احتمالاً می‌خواهید خود تصویر را ارسال کنید و نیازی به بارگذاری آن در NumPy نداشته باشید. برای انجام این کار، باید تابع سرویس TensorFlow خود را برای رمزگشایی بایت‌های تصویر تنظیم کنید. این کار به کار بیشتری نیاز دارد، اما برای تصاویر بزرگتر و ساخت برنامه بسیار کارآمدتر خواهد بود. می‌توانید مثالی را در این دفترچه یادداشت مشاهده کنید.

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

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

  • مدل‌ها را در رجیستری مدل Vertex AI بارگذاری کنید
  • دریافت پیش‌بینی‌های دسته‌ای و آنلاین

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

۷. پاکسازی

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

undeploy_model

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

مثال را متوقف کنید

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

حذف فضای ذخیره‌سازی