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

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

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

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

.

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

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

  • مدل ها را در Vertex AI Model Registry آپلود کنید
  • یک مدل را به نقطه پایانی مستقر کنید
  • با UI و SDK پیش‌بینی‌های دسته‌ای و آنلاین دریافت کنید

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

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

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

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

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

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

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

4. آپلود مدل در رجیستری

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

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

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

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

به بخش Models در کنسول بروید.

منوی مدل

IMPORT را انتخاب کنید

import_model

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

new_model

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

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

از بخش Explainability صرف نظر می کنیم، اما اگر می خواهید درباره Vertex Explainable AI اطلاعات بیشتری کسب کنید، اسناد را بررسی کنید.

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

گل_مدل

توجه داشته باشید که اگر می‌خواهید این کار را از طریق SDK به جای UI انجام دهید، می‌توانید موارد زیر را از Notebook 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')

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

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

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

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

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

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

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

deploy_model

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

endpoint_name

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

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

endpoint_compute

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

سپس روی DEPLOY کلیک کنید

استقرار چند دقیقه طول می کشد، اما پس از اتمام، خواهید دید که وضعیت استقرار مدل شما به 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,
   )

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

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

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

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

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

tf_kernel

Vertex AI Python SDK، numpy و PIL را وارد کنید

from google.cloud import aiplatform

import numpy as np
from PIL import Image

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

test_image

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

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

می توانید endpoint_id خود را در بخش Endpoints کنسول ابری بیابید.

endpoint_id

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

شماره پروژه

کد زیر تصویر را با 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 با 5 واحد است. اگر می‌خواهید منطق سفارشی بنویسید تا برچسب رشته را به جای فهرست برگرداند، می‌توانید از روتین‌های پیش‌بینی سفارشی استفاده کنید.

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

روش های مختلفی برای قالب بندی داده های شما برای پیش بینی دسته ای وجود دارد. برای سادگی، داده های 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 می توانید شناسه مدل را پیدا کنید.

مدل_id

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

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 برای موارد زیر استفاده کنید:

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

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

7. پاکسازی

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

undeploy_model

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

توقف نمونه

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

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