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, 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 ekteki videoyu izleyebilirsiniz:

.

Öğrenecekleriniz

Öğrenecekleriniz:

  • Modelleri Vertex AI Model Registry'ye yükleme
  • 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'daki en yeni AI ürün teklifi kullanılmaktadır. Vertex AI, Google Cloud'daki makine öğrenimi tekliflerini sorunsuz bir geliştirme deneyiminde birleştirir. Önceden, AutoML ve özel modellerle eğitilen modellere ayrı hizmetler üzerinden erişilebiliyordu. Yeni teklif, diğer yeni ürünlerle birlikte her ikisini de tek bir API'de birleştirir. Mevcut projeleri Vertex AI'a da 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ılmaktadır: Estimateions (Tahminler) ve Workbench (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 sicile yükleme

Modelimizi tahmin almak amacıyla kullanabilmemiz için modelimizi, makine öğrenimi modellerinizin yaşam döngüsünü yönetebileceğiniz bir depo olan Vertex AI Model Registry'ye yüklememiz gerekir.

Özel bir eğitim işi yapılandırırken aşağıda gösterildiği gibi model yükleyebilirsiniz.

training_prediction

Alternatif olarak, kayıtlı 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 kullanacağımız seçenek budur.

Konsoldaki Modeller bölümüne gidin.

model menüsü

IMPORT'u (İÇE AKTAR) seçin.

import_model

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

new_model

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

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

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

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

flower_model

Bu işlemi kullanıcı arayüzü yerine SDK üzerinden yapmak isterseniz modeli yüklemek için Workbench not defterinizden aşağıdakileri çalıştırabileceğinizi unutmayın.

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 toplu tahmini kullanın.

Ö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 kullanılabilir.

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

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

deploy_model

Bitiş noktanıza bir ad verin, ardından ayarların geri kalanını olduğu gibi bırakıp DEVAM'ı tıklayın.

endpoint_name

Uç noktalar otomatik ölçeklendirmeyi destekler. Bu, minimum ve maksimum bir değer belirleyebileceğiniz anlamına gelir. İşlem düğümleri, bu sınırlar dahilindeki 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 bilgi işlem notu sayısı'nı 1 olarak ayarlayabilir ve Makine türü olarak n1-standard-4'ü seçebilirsiniz.

endpoint_compute

Model izlemeyi 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 birkaç dakika sürer ancak tamamlandıktan sonra 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 erişebilirsiniz. Yani modeli bir bulut işlevinden, chatbot'tan, web uygulamasından vb. çağırabilirsiniz.

Demo amacıyla bu uç noktayı 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'i 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, bu karahindiba resminde 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 değerinizi Cloud Console'un Uç Noktalar bölümünde bulabilirsiniz.

endpoint_id

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

project_number

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

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

Ardından, numpy verilerini float32 türüne ve bir listeye dönüştürün. Numpy verileri JSON olarak serileştirilemez olduğundan isteğimizin gövdesinde gönderemediğimiz için 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ç, modelin çıkışıdır. Bu çıkış, 5 birimli bir softmax katmanıdır. Dizin yerine dize etiketini döndürecek özel mantık yazmak istiyorsanız özel tahmin rutinlerini kullanabilirsiniz.

Toplu tahminler

Verilerinizi toplu tahmin için biçimlendirmenin farklı yolları vardır. Basitlik açısından, 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. Tek fark, ENDPOINT_ID yerine MODEL_ID sağlamanız gerektiğidir.

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

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

model_id

Son olarak, SDK'yı kullanarak bir toplu tahmin işini çağırın. Bunun için JSON dosyasını sakladığı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ını yapmadan önce test resmini NumPy'ye dönüştürdük. Daha gerçekçi kullanım alanları için muhtemelen resmin kendisini göndermek ve önce NumPy'ye yüklemek istemezsiniz. Bunu yapmak için TensorFlow sunma işlevinizi, resim baytlarının kodunu çözecek şekilde ayarlamanız gerekir. Biraz daha fazla çalışma gerektirir ancak bu yöntem, büyük resimler ve uygulama geliştirme için çok daha verimli olur. Bu not defterinde bir örnek görebilirsiniz.

🎉 Tebrikler. 🎉

Aşağıdakiler için Vertex AI'ı nasıl kullanacağınızı öğrendiniz:

  • Vertex AI Model Registry'ye model yükleme
  • Toplu ve online tahminler alın

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

7. Temizleme

Kullanmayı planlamıyorsanız modelleri uç noktadan dağıtımdan kaldırmanız gerekir. Uç noktayı tamamen de silebilirsiniz. Gerekirse istediğiniz zaman bir uç noktaya modeli yeniden dağıtabilirsiniz.

undeploy_model

Workbench tarafından yönetilen not defterleri, 180 dakika boyunca boşta kaldığında otomatik olarak zaman aşımına uğrar. Bu nedenle, örneği kapatma konusunda endişelenmenize gerek yoktur. Örneğini manuel olarak kapatmak istiyorsanız konsolun Vertex AI Workbench bölümündeki Durdur düğmesini tıklayın. Not defterini tamamen silmek istiyorsanız Sil düğmesini tıklayın.

Örneği durdur

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

Depolama alanını silme