Prototipten Üretime Geçiş: Özel olarak eğitilmiş modellerden tahminler alma

1. Genel Bakış

Bu laboratuvarda, özel olarak eğitilmiş bir modelden online ve toplu tahminler almak için Vertex AI'ı kullanacaksınız.

Bu laboratuvar, Prototype to Production (Prototipten Üretime) video serisinin bir parçasıdır. Bu laboratuvarı denemeden önce önceki laboratuvarı tamamladığınızdan emin olun. Daha fazla bilgi edinmek için ilgili videoyu izleyebilirsiniz:

.

Öğrenecekleriniz

Öğrenecekleriniz:

  • Modelleri Vertex AI Model Registry'ye yükleme
  • Bir modeli uç noktaya dağıtma
  • Kullanıcı arayüzü ve SDK ile online ve toplu tahminler alma

Bu laboratuvarı Google Cloud'da çalıştırmanın toplam maliyeti yaklaşık 1 ABD dolarıdır.

2. Vertex AI'a giriş

Bu laboratuvarda, Google Cloud'da sunulan en yeni yapay zeka ürünü kullanılmaktadır. Vertex AI, Google Cloud'daki makine öğrenimi tekliflerini sorunsuz bir geliştirme deneyimi için entegre eder. Daha önce, AutoML ile eğitilmiş modeller ve özel modeller ayrı hizmetler üzerinden erişilebiliyordu. Yeni teklif, diğer yeni ürünlerle birlikte bu iki ürünü tek bir API'de birleştirir. Mevcut projeleri de Vertex AI'a taşıyabilirsiniz.

Vertex AI, uçtan uca makine öğrenimi iş akışlarını desteklemek için birçok farklı ürün içerir. Bu laboratuvarda, aşağıda vurgulanan ürünlere odaklanılacaktır: Tahminler ve Workbench

Vertex ürününe genel bakış

3. Ortamınızı ayarlama

Ortamınızı ayarlamak için Vertex AI ile özel modelleri eğitme laboratuvarındaki adımları tamamlayın.

4. Modeli kayıt defterine yükleme

Modelimizi tahmin almak için kullanmadan önce Vertex AI Model Registry'ye yüklememiz gerekir. Bu, makine öğrenimi modellerinizin yaşam döngüsünü yönetebileceğiniz bir depodur.

Özel eğitim işi yapılandırırken modelleri aşağıdaki gibi yükleyebilirsiniz.

training_prediction

Alternatif olarak, kaydedilen model yapılarını bir Cloud Storage paketinde depoladığınız sürece eğitim işi tamamlandıktan sonra modelleri içe aktarabilirsiniz. Bu laboratuvarda bu seçeneği kullanacağız.

Konsoldaki Modeller bölümüne gidin.

model menüsü

IMPORT'ı seçin.

import_model

Yeni model olarak içe aktar'ı seçin ve modeliniz için bir ad girin.

new_model

Model ayarları bölümünde, modeli önceden oluşturulmuş bir container ile içe aktarın ve TensorFlow 2.8'i kullanın. Önceden oluşturulmuş tahmin kapsayıcılarının tam listesini burada görebilirsiniz.

Ardından, özel eğitim işinde model yapılarını kaydettiğiniz bulut depolama alanı paketi yolunu belirtin. Bu, gs://{PROJECT_ID}-bucket/model_output gibi görünmelidir.

Açıklanabilirlik bölümünü atlayacağız ancak Vertex Açıklanabilir Yapay Zeka hakkında daha fazla bilgi edinmek isterseniz dokümanlara göz atın.

Model içe aktarıldığında kayıt defterinde görünür.

flower_model

Bunu kullanıcı arayüzü yerine SDK üzerinden yapmak isterseniz modeli yüklemek için Workbench not defterinizden aşağıdakileri çalıştırabilirsiniz.

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. Modeli uç noktaya dağıtma

Vertex AI'da çalıştırabileceğimiz iki tür tahmin işi vardır: toplu ve online.

Toplu tahmin, asenkron bir istektir. Hemen yanıt almanız gerekmediğinde ve biriken verileri tek bir istekle işlemek istediğinizde bu yöntem uygundur.

Öte yandan, modelinize anında iletilen verilerden düşük gecikmeli tahminler almak istiyorsanız online tahmini kullanırsınız.

Model kayıt defterinde olduğuna göre artık toplu tahminler için kullanabiliriz.

Ancak online tahminler almak istiyorsak modeli bir uç noktaya dağıtmamız gerekir. Bu işlem, kaydedilen model yapılarını düşük gecikmeli tahminler için fiziksel kaynaklarla ilişkilendirir.

Bir uç noktaya dağıtmak için modelin en sağındaki üç noktayı seçin, ardından Uç noktaya dağıt'ı seçin.

deploy_model

Uç noktanıza bir ad verin, ardından diğer ayarları olduğu gibi bırakıp DEVAM'ı tıklayın.

endpoint_name

Uç noktalar otomatik ölçeklendirmeyi destekler. Bu nedenle, minimum ve maksimum değer belirleyebilirsiniz. İşlem düğümleri, bu sınırlar içinde trafik talebini karşılayacak şekilde ölçeklenir.

Bu laboratuvar yalnızca gösterim amaçlı olduğundan ve bu uç noktayı yüksek trafik için kullanmayacağımızdan Maksimum işlem düğümü sayısı'nı 1 olarak ayarlayabilir ve Makine türü olarak n1-standard-4'ü seçebilirsiniz.

endpoint_compute

Model izleme adımını atlayacağız ancak bu özellik hakkında daha fazla bilgi edinmek isterseniz dokümanlara göz atın.

Ardından DAĞIT'ı tıklayın.

Dağıtım işlemi birkaç dakika sürer. Tamamlandığında modelinizin dağıtım durumunun Vertex AI'da dağıtıldı olarak değiştiğini görürsünüz.

Bir modeli SDK üzerinden dağıtmak istiyorsanız aşağıdaki komutu çalıştırın.

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. Tahmin alma

Online tahminler

Modeliniz bir uç noktaya dağıtıldığında, diğer tüm REST uç noktaları gibi bu uç noktaya da erişebilirsiniz. Bu, modeli bir Cloud Functions işlevinden, chatbot'tan, web uygulamasından vb. çağırabileceğiniz anlamına gelir.

Bu uç noktayı, gösterim amacıyla Workbench'ten çağıracağız.

Önceki laboratuvarda oluşturduğunuz not defterine dönün. Başlatıcıdan yeni bir TensorFlow 2 not defteri oluşturun.

tf_kernel

Vertex AI Python SDK'sını, numpy'ı ve PIL'i içe aktarma

from google.cloud import aiplatform

import numpy as np
from PIL import Image

Aşağıdaki resmi indirip Workbench örneğinize yükleyin. Modeli, karahindiba çiçeğinin bu görüntüsünde test edeceğiz.

test_image

Öncelikle uç noktayı tanımlayın. Aşağıdaki {PROJECT_NUMBER} ve {ENDPOINT_ID} değerlerini değiştirmeniz gerekir.

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

endpoint_id'nizi Cloud Console'un Uç Noktalar bölümünde bulabilirsiniz.

endpoint_id

Proje numaranızı konsolun ana sayfasında bulabilirsiniz. Bunun proje kimliğinden farklı olduğunu unutmayın.

project_number

Aşağıdaki kod, resmi PIL ile açar ve yeniden boyutlandırır.

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

Ardından, numpy verilerini float32 türüne ve listeye dönüştürün. Numpy verileri JSON olarak serileştirilemediği için isteğimizin gövdesinde gönderemeyiz. Bu nedenle, verileri listeye dönüştürürüz.

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

Son olarak, endpoint.predict numaralı telefonu arayın.

endpoint.predict(instances=x_test).predictions

Elde ettiğiniz sonuç, 5 birimli bir softmax katmanı olan modelin çıkışıdır. Dizini döndürmek yerine dize etiketini döndürmek için özel mantık yazmak istiyorsanız özel tahmin rutinlerini kullanabilirsiniz.

Toplu tahminler

Toplu tahmin için verilerinizi biçimlendirmenin farklı yolları vardır. Basitlik için numpy verilerini bir JSON dosyasına aktarıp dosyayı Cloud Storage'a kaydedeceğiz.

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

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

Ardından, modeli tanımlayın. Bu, uç noktayı tanımlamaya benzer. Ancak ENDPOINT_ID yerine MODEL_ID sağlamanız gerekir.

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

Model adını ve sürümünü konsolun Modeller bölümünden, ardından SÜRÜM AYRINTILARI'nı seçerek model kimliğini bulabilirsiniz.

model_id

Son olarak, SDK'yı kullanarak bir toplu tahmin işi çağırın, JSON dosyasını depoladığınız Cloud Storage yolunu iletin ve tahmin sonuçlarının depolanacağı bir Cloud Storage konumu sağlayın.

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',)

İşin ilerleme durumunu konsolun Toplu Tahminler bölümünden takip edebilirsiniz. Tek bir görüntü için toplu tahmin işi çalıştırmanın verimli olmadığını unutmayın.

batch_pred

Sırada ne var?

Bu örnekte, tahmin çağrısı yapmadan önce test resmini NumPy'ye dönüştürdük. Daha gerçekçi kullanım alanları için muhtemelen görüntünün kendisini göndermek ve önce NumPy'ye yüklemek istemezsiniz. Bunu yapmak için TensorFlow sunma işlevinizi görüntü baytlarını çözecek şekilde ayarlamanız gerekir. Bu yöntem biraz daha fazla çalışma gerektirir ancak daha büyük resimler ve uygulama oluşturma için çok daha verimlidir. Bu not defterinde bir örnek görebilirsiniz.

🎉 Tebrikler! 🎉

Vertex AI'ı kullanarak şunları yapmayı öğrendiniz:

  • Modelleri Vertex AI Model Registry'ye yükleme
  • Toplu ve online tahminler alma

Vertex'in farklı bölümleri hakkında daha fazla bilgi edinmek için belgelere göz atın.

7. Temizleme

Kullanmayı planlamadığınız modellerin dağıtımını uç noktadan kaldırmanız gerekir. Uç noktayı tamamen de silebilirsiniz. Gerekirse bir modeli uç noktaya istediğiniz zaman yeniden dağıtabilirsiniz.

undeploy_model

Workbench tarafından yönetilen not defterleri, 180 dakika boyunca işlem yapılmadığında otomatik olarak zaman aşımına uğrar. Bu nedenle, örneği kapatmanız gerekmez. Örneği manuel olarak kapatmak istiyorsanız konsolun Vertex AI Workbench bölümündeki Durdur düğmesini tıklayın. Not defterini tamamen silmek isterseniz Sil düğmesini tıklayın.

Örneği durdur

Cloud Console'unuzdaki gezinme menüsünü kullanarak depolama paketini silmek için Storage'a gidin, paketinizi seçin ve Sil'i tıklayın:

Depolama alanını silme