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 aşağıdaki videoyu izleyebilirsiniz:

.

Öğrenecekleriniz

Öğrenecekleriniz:

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

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 deneyimiyle entegre eder. Önceden, AutoML ve özel modellerle eğitilen modellere ayrı hizmetler üzerinden erişilebiliyordu. Yeni teklif, her ikisi de tek bir API'de ve diğer yeni ürünlerle birleştirilir. Dilerseniz mevcut projeleri Vertex AI'a taşıyabilirsiniz.

Vertex AI, uçtan uca makine öğrenimi iş akışlarını destekleyen 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 kayıt defterine yükleyin

Modelimizi tahmin almak için kullanmadan önce, makine öğrenimi modellerinizin yaşam döngüsünü yönetebileceğiniz bir depo olan Vertex AI Model Registry'ye yüklenmesini sağlamamız gerekir.

Aşağıda gösterildiği gibi, özel bir eğitim işi yapılandırdığınızda 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, bu laboratuvarda kullanacağımız seçenektir.

Konsolda 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. gs://{PROJECT_ID}-bucket/model_output gibi bir değer olacaktır

Açıklanabilirlik bölümünü atlayacağız, ancak Vertex Explainable AI hakkında daha fazla bilgi edinmek istiyorsanız belgelere göz atabilirsiniz.

İçe aktarılan modelleri kayıt defterinde görürsünüz.

flower_model

Bunu kullanıcı arayüzü yerine SDK aracılığıyla yapmak isterseniz modeli yüklemek için Workbench not defterinizden aşağıdaki komutu ç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, eşzamansız bir istektir. Acil yanıt almanız gerekmiyorsa ve biriken verileri tek bir istekte işlemek istiyorsanız bu yöntem idealdir.

Diğer 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 istersek 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ı ve 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 da minimum ve maksimum değerler ayarlayabileceğiniz anlamına gelir. İşlem düğümleri bu sınırlar içindeki trafik talebini karşılayacak şekilde ölçeklendirilir.

Bu laboratuvar yalnızca tanıtım amaçlı olduğundan ve bu uç nokta fazla trafik olduğunda kullanılmayacak. Bu nedenle Maksimum 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 istiyorsanız belgelere göz atabilirsiniz.

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.

SDK aracılığıyla bir model 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 herhangi bir dinlenme uç noktası gibi onu kullanabilirsiniz. Yani modeli bir bulut işlevinden, chatbot'tan, web uygulamasından vb. çağırabilirsiniz.

Gösterim 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, numpy ve PIL'yi 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. Bu karahindiba resmi üzerinde modeli test edeceğiz.

test_image

İlk olarak uç noktayı tanımlayın. Aşağıdaki {PROJECT_NUMBER} ve {ENDPOINT_ID} öğelerini değiştirmeniz gerekecek.

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

Endpoints_id bilginizi Cloud Console'un Endpoints bölümünde bulabilirsiniz.

endpoint_id

Proje Numaranızı konsolun ana sayfasında bulabilirsiniz. Bunun Proje Kimliğinden farklı olduğunu unutmayın.

proje_numarası

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 bir listeye dönüştürün. Numpy verileri JSON serileştirilemeyeceğinden isteğimizin gövdesinde gönderemiyoruz. Bu nedenle, verileri listeye dönüştürüyoruz.

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

Son olarak, endpoint.predict adlı kişiyi arayın.

endpoint.predict(instances=x_test).predictions

Elde ettiğiniz sonuç modelin çıkışıdır. Bu model, 5 birimli bir softmax katmanıdır. Dizin yerine dize etiketini döndürecek özel bir mantık yazmak isterseniz özel tahmin rutinlerini kullanabilirsiniz.

Toplu tahminler

Verilerinizi toplu tahmin için biçimlendirmenin farklı yolları vardır. Kolaylık sağlaması için, numpy verilerini bir json dosyasına aktarıp 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 öğesini sağlamanız gerekir.

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

Konsolun Modeller bölümünden model adını ve sürümünü, 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. Bunun için 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 görüntüsünü NumPy'ye dönüştürdük. Daha gerçekçi kullanım örnekleri için, muhtemelen resmi göndermek ve önce NumPy'ye yüklemek zorunda kalmamak istersiniz. 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! 🎉

Vertex AI'ı kullanarak şunları öğ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 modellerin uç noktadaki dağıtımını kaldırmak isteyebilirsiniz. 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 boşta kalma dakikalarının sonunda otomatik olarak zaman aşımına uğradığından örneği kapatma konusunda endişelenmeniz gerekmez. Örneği manuel olarak kapatmak isterseniz 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

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ı sil