Vertex Pipelines'da özel model eğitimi çalıştırma

1. Genel Bakış

Bu laboratuvarda, Vertex Pipelines'da Kubeflow Pipelines SDK'yı kullanarak özel model eğitim işi çalıştırmayı öğreneceksiniz.

Öğrenecekleriniz

Öğrenecekleriniz:

  • Ölçeklenebilir makine öğrenimi ardışık düzenleri derlemek için Kubeflow Pipelines SDK'yı kullanma
  • Vertex AI tarafından yönetilen veri kümelerini kullanan ve bir ardışık düzen içinde Vertex AI Training'de çalışacak özel bir Scikit-learn model eğitim işi oluşturup container mimarisine alın
  • Vertex Pipelines içinde toplu tahmin işi çalıştırma
  • Vertex AI hizmetleriyle etkileşime geçmek için google_cloud_pipeline_components kitaplığı üzerinden sağlanan önceden oluşturulmuş bileşenleri kullanın

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

2. Vertex AI'a giriş

Bu laboratuvarda, Google Cloud'daki uçtan uca yönetilen ML platformumuz olan Vertex AI kullanılmaktadır. Vertex AI, Google'ın Google Cloud'daki makine öğrenimi tekliflerini sorunsuz bir geliştirme deneyimiyle entegre eder. Vertex AI, model eğitimi ve dağıtım hizmetlerinin yanı sıra Vertex Pipelines (bu laboratuvarın odak noktası), Model Monitoring ve Feature Store gibi çeşitli MLOps ürünlerini de içerir. Vertex AI'ın sunduğu tüm ürün tekliflerini aşağıdaki şemada görebilirsiniz.

Vertex ürününe genel bakış

Geri bildiriminiz varsa lütfen destek sayfasını inceleyin.

Makine öğrenimi ardışık düzenleri neden faydalıdır?

Başlamadan önce, neden bir ardışık düzen kullanmak isteyeceğinizi öğrenelim. Veri işleme, model eğitme, hiperparametre ayarı, değerlendirme ve model dağıtımı özelliklerini içeren bir ML iş akışı oluşturduğunuzu hayal edin. Bu adımların her birinin farklı bağımlılıkları olabilir. İş akışının tamamını monolit olarak ele alırsanız bunlar zorlaşabilir. Makine öğrenimi sürecinizi ölçeklendirmeye başladığınızda, makine öğrenimi iş akışınızı ekibinizdeki diğer kişilerle paylaşarak onların da çalıştırıp kod katkısında bulunmasına yardımcı olabilirsiniz. Güvenilir, tekrarlanabilir bir süreç olmadan bu zor olabilir. Ardışık düzenler sayesinde makine öğrenimi sürecinizdeki her adım kendi container'ıdır. Bu, adımları bağımsız olarak geliştirmenize ve her adımdaki giriş ve çıkışı tekrarlanabilir bir şekilde izlemenize olanak tanır. Ayrıca, yeni eğitim verileri kullanılabilir olduğunda bir ardışık düzen çalıştırması başlatmak gibi, Cloud ortamınızdaki diğer etkinliklere göre ardışık düzeninizin çalıştırılmasını planlayabilir veya tetikleyebilirsiniz.

Özet: Ardışık düzenler, makine öğrenimi iş akışlarınızı kolaylaştırmanıza ve yeniden üretmenize yardımcı olur.

3. Bulut ortamı kurulumu

Bu codelab'i çalıştırmak için faturalandırmanın etkin olduğu bir Google Cloud Platform projesine ihtiyacınız var. Proje oluşturmak için buradaki talimatları uygulayın.

1. adım: Cloud Shell'i başlatın

Bu laboratuvarda, Google'ın bulutunda çalışan bir sanal makine tarafından barındırılan bir komut çevirmeni olan Cloud Shell oturumunda çalışacaksınız. Bu bölümü yerel olarak kendi bilgisayarınızda da yerel olarak çalıştırabilirsiniz. Ancak Cloud Shell kullanarak herkes tutarlı bir ortamda tekrarlanabilir bir deneyime erişebilir. Laboratuvardan sonra bu bölümü bilgisayarınızda yeniden deneyebilirsiniz.

Cloud Shell'i yetkilendirin

Cloud Shell'i etkinleştirme

Cloud Console'un sağ üst köşesinden aşağıdaki düğmeyi tıklayarak Cloud Shell'i etkinleştirin:

Cloud Shell'i etkinleştirme

Cloud Shell'i daha önce hiç başlatmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmında) gösterilir. Bu durumda Devam'ı tıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:

Cloud Shell kurulumu

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

Cloud Shell başlatma

Bu sanal makinede, ihtiyacınız olan tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.

Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:

gcloud auth list

Komut çıkışında şuna benzer bir çıkış görürsünüz:

Cloud Shell çıkışı

gcloud komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:

gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

Cloud Shell'de birkaç ortam değişkeni bulunur. Bunların arasında mevcut Cloud projemizin adını içeren GOOGLE_CLOUD_PROJECT yer alır. Bu adı, bu laboratuvar boyunca çeşitli yerlerde kullanacağız. Bu klasörü şu komutu çalıştırarak görebilirsiniz:

echo $GOOGLE_CLOUD_PROJECT

2. Adım: API'leri etkinleştirme

Sonraki adımlarda bu hizmetlerin nerede, neden gerekli olduğunu göreceksiniz. Şimdilik projenizin Compute Engine, Container Registry ve Vertex AI hizmetlerine erişmesine izin vermek için şimdilik şu komutu çalıştırın:

gcloud services enable compute.googleapis.com         \
                       containerregistry.googleapis.com  \
                       aiplatform.googleapis.com

Bu işlem, aşağıdakine benzer başarılı bir mesaj üretir:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. Adım: Cloud Storage Paketi oluşturun

Vertex AI'da eğitim işi çalıştırmak için kayıtlı model öğelerimizi depolayacak bir depolama paketine ihtiyacımız vardır. Paketin bölgesel olması gerekir. Burada us-central kullanıyoruz, ancak başka bir bölge de kullanabilirsiniz (bu laboratuvar boyunca başka bir bölgeyi değiştirmeniz yeterlidir). Zaten bir paketiniz varsa bu adımı atlayabilirsiniz.

Paket oluşturmak için Cloud Shell terminalinizde aşağıdaki komutları çalıştırın:

BUCKET_NAME=gs://$GOOGLE_CLOUD_PROJECT-bucket
gsutil mb -l us-central1 $BUCKET_NAME

Ardından, işlem hizmeti hesabımızın bu pakete erişmesine izin vereceğiz. Bu sayede Vertex Pipelines bu pakete dosya yazmak için gerekli izinlere sahip olur. Bu izni eklemek için aşağıdaki komutu çalıştırın:

gcloud projects describe $GOOGLE_CLOUD_PROJECT > project-info.txt
PROJECT_NUM=$(cat project-info.txt | sed -nre 's:.*projectNumber\: (.*):\1:p')
SVC_ACCOUNT="${PROJECT_NUM//\'/}-compute@developer.gserviceaccount.com"
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member serviceAccount:$SVC_ACCOUNT --role roles/storage.objectAdmin

4. Adım: Vertex AI Workbench örneği oluşturun

Cloud Console'un Vertex AI bölümünde Workbench'i tıklayın:

Vertex AI menüsü

İlgili sayfada, Kullanıcı tarafından yönetilen Not Defteri'nde Yeni Not Defteri'ni tıklayın:

Yeni not defteri oluştur

Ardından GPU'suz TensorFlow Enterprise 2.3 (LTS özellikli) örnek türünü seçin:

TFE örneği

Varsayılan seçenekleri kullanın ve ardından Oluştur'u tıklayın.

5. Adım: Not Defterinizi açın

Örnek oluşturulduktan sonra JupyterLab'i aç'ı seçin:

Not defterini aç

4. Vertex Pipelines kurulumu

Vertex Pipelines'ı kullanmak için yüklememiz gereken birkaç kitaplık daha vardır:

  • Kubeflow Pipelines: Bu, ardışık düzenimizi oluşturmak için kullanacağımız SDK'dır. Vertex Pipelines, hem Kubeflow Pipelines hem de TFX ile derlenen ardışık düzenlerin çalıştırılmasını destekler.
  • Google Cloud Ardışık Düzeni Bileşenleri: Bu kitaplık, ardışık düzen adımlarınızdan Vertex AI hizmetleriyle etkileşime geçmeyi kolaylaştıran önceden oluşturulmuş bileşenler sağlar.

1. adım: Python not defteri oluşturun ve kitaplıkları yükleyin

Öncelikle Not Defteri örneğinizdeki Başlatıcı menüsünden (not defterinizin sol üst tarafındaki + simgesini tıklayarak erişebilirsiniz) Python 3'ü seçerek not defteri oluşturun:

Python3 not defteri oluşturma

Not defteri örneğinizin sol üst köşesindeki + işaretini tıklayarak Başlatıcı menüsüne erişebilirsiniz.

Bu laboratuvarda kullanacağımız her iki hizmeti de yüklemek için önce bir not defteri hücresinde kullanıcı işaretini ayarlayın:

USER_FLAG = "--user"

Ardından not defterinizden aşağıdaki komutu çalıştırın:

!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0 --upgrade
!pip3 install {USER_FLAG} kfp==1.8.9 google-cloud-pipeline-components==0.2.0

Bu paketleri yükledikten sonra çekirdeği yeniden başlatmanız gerekir:

import os

if not os.getenv("IS_TESTING"):
    # Automatically restart kernel after installs
    import IPython

    app = IPython.Application.instance()
    app.kernel.do_shutdown(True)

Son olarak, paketleri doğru şekilde yüklediğinizden emin olun. KFP SDK sürümü 1.8 veya üzeri olmalıdır:

!python3 -c "import kfp; print('KFP SDK version: {}'.format(kfp.__version__))"
!python3 -c "import google_cloud_pipeline_components; print('google_cloud_pipeline_components version: {}'.format(google_cloud_pipeline_components.__version__))"

2. Adım: Proje kimliğinizi ve paketinizi ayarlayın

Bu laboratuvarda Cloud projenize ve daha önce oluşturduğunuz pakete atıfta bulunacaksınız. Sonra, bunların her biri için değişkenler oluşturacağız.

Proje kimliğinizi bilmiyorsanız aşağıdaki kodu çalıştırarak alabilirsiniz:

import os
PROJECT_ID = ""

# Get your Google Cloud project ID from gcloud
if not os.getenv("IS_TESTING"):
    shell_output=!gcloud config list --format 'value(core.project)' 2>/dev/null
    PROJECT_ID = shell_output[0]
    print("Project ID: ", PROJECT_ID)

Aksi halde buradan ayarlayın:

if PROJECT_ID == "" or PROJECT_ID is None:
    PROJECT_ID = "your-project-id"  # @param {type:"string"}

Ardından paket adınızı kaydedecek bir değişken oluşturun. Projeyi bu laboratuvarda oluşturduysanız aşağıdaki adımlar işinize yarayacaktır. Aksi takdirde, bunu manuel olarak ayarlamanız gerekir:

BUCKET_NAME="gs://" + PROJECT_ID + "-bucket"

3. Adım: Kitaplıkları içe aktarın

Bu codelab'de kullanacağımız kitaplıkları içe aktarmak için şunları ekleyin:

from kfp.v2 import compiler, dsl
from kfp.v2.dsl import pipeline

from google.cloud import aiplatform
from google_cloud_pipeline_components import aiplatform as gcc_aip

4. adım: Sabit değerleri tanımlayın

Ardışık düzenimizi oluşturmadan önce yapmamız gereken son şey bazı sabit değişkenler tanımlamaktır. PIPELINE_ROOT, ardışık düzenimiz tarafından oluşturulan yapıların yazılacağı Cloud Storage yoludur. Burada bölge olarak us-central1 kullanıyoruz. Ancak paketinizi oluştururken farklı bir bölge kullandıysanız aşağıdaki kodda REGION değişkenini güncelleyin:

PATH=%env PATH
%env PATH={PATH}:/home/jupyter/.local/bin
REGION="us-central1"

PIPELINE_ROOT = f"{BUCKET_NAME}/pipeline_root/"
PIPELINE_ROOT

Yukarıdaki kodu çalıştırdıktan sonra, ardışık düzeninizin kök dizininin yazdırıldığını görmeniz gerekir. Bu, ardışık düzeninizdeki yapıların yazılacağı Cloud Storage konumudur. gs://YOUR-BUCKET-NAME/pipeline_root/ biçiminde olacaktır

5. Özel model eğitim işi yapılandırma

Ardışık düzenimizi kurmadan önce özel model eğitim işmizin kodunu yazmamız gerekiyor. Modeli eğitmek için KOKLU, M. ve OZKAN, I.A., (2020), "Bilgisayar Görüşü ve Makine Öğrenimi Tekniklerini Kullanarak Kuru Fasulyelerin Çok Sınıflı Sınıflandırılması.""Tarımda Bilgisayar ve Elektronikte, 174, 105507. DOI.

İlk ardışık düzen adımımız, bu çekirdek verilerinin sürümünü içeren bir BigQuery tablosu kullanarak Vertex AI'da yönetilen bir veri kümesi oluşturacaktır. Veri kümesi, eğitim işimize giriş olarak aktarılır. Eğitim kodumuzda, bu yönetilen veri kümesine erişmek için ortam değişkenine erişimimiz olacak.

Özel eğitim işimizi şu şekilde oluşturacağız:

  • Verilerimizdeki çekirdek türlerini sınıflandırmak için Scikit-learn DecisionTreeClassifier modeli yazın
  • Eğitim kodunu bir Docker container'ında paketleyin ve Container Registry'ye aktarın

Bu noktadan sonra doğrudan kendi ardışık düzenimizden Vertex AI Eğitimi işi başlatabileceğiz. Haydi, başlayalım.

1. Adım: Eğitim kodumuzu Docker container'ında tanımlayın

Not defterleri örneğinizden Başlatıcı'yı açın ve Terminal'i seçin:

Terminali aç

Ardından aşağıdaki komutu çalıştırarak container mimarisine alınmış kodunuzu ekleyeceğiniz bir dizin oluşturun:

mkdir traincontainer
cd traincontainer
touch Dockerfile

mkdir trainer
touch trainer/train.py

Bu komutları çalıştırdıktan sonra, sol tarafta traincontainer/ adında bir dizin oluşturulur. Bu dizini görmek için yenile simgesini tıklamanız gerekebilir. traincontainer/ dizininizde aşağıdakiler gösterilir:

+ Dockerfile
+ trainer/
    + train.py

Kodumuzu container mimarisine almanın ilk adımı bir Dockerfile oluşturmaktır. Dockerfile'ımıza görüntümüzü çalıştırmak için gereken tüm komutları ekleyeceğiz. Kullandığımız tüm kitaplıkları yükler ve eğitim kodumuzun giriş noktasını ayarlar. Yeni oluşturduğunuz Dockerfile'ı açın ve aşağıdakini ekleyin:

FROM gcr.io/deeplearning-platform-release/sklearn-cpu.0-23
WORKDIR /

# Copies the trainer code to the docker image.
COPY trainer /trainer

RUN pip install sklearn google-cloud-bigquery joblib pandas google-cloud-storage

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.train"]

Dosyaları not defteri örneğinizde düzenlerken kaydetmek için ctrl+s işlevini kullanabilirsiniz.

Sonra, train.py dosyasını açın. Eğitim kodumuzu buraya ekleyeceğiz. Aşağıdakini train.py hedefine kopyalayın. Bu işlem, verileri yönetilen veri kümemizden getirir, bir Pandas DataFrame'e yerleştirir, Scikit-learn modelini eğitir ve eğitilen modeli Cloud Storage'a yükler:

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve
from sklearn.model_selection import train_test_split
from google.cloud import bigquery
from google.cloud import storage
from joblib import dump

import os
import pandas as pd

bqclient = bigquery.Client()
storage_client = storage.Client()

def download_table(bq_table_uri: str):
    prefix = "bq://"
    if bq_table_uri.startswith(prefix):
        bq_table_uri = bq_table_uri[len(prefix):]

    table = bigquery.TableReference.from_string(bq_table_uri)
    rows = bqclient.list_rows(
        table,
    )
    return rows.to_dataframe(create_bqstorage_client=False)

# These environment variables are from Vertex AI managed datasets
training_data_uri = os.environ["AIP_TRAINING_DATA_URI"]
test_data_uri = os.environ["AIP_TEST_DATA_URI"]

# Download data into Pandas DataFrames, split into train / test
df = download_table(training_data_uri)
test_df = download_table(test_data_uri)
labels = df.pop("Class").tolist()
data = df.values.tolist()
test_labels = test_df.pop("Class").tolist()
test_data = test_df.values.tolist()

# Define and train the Scikit model
skmodel = DecisionTreeClassifier()
skmodel.fit(data, labels)
score = skmodel.score(test_data, test_labels)
print('accuracy is:',score)

# Save the model to a local file
dump(skmodel, "model.joblib")

# Upload the saved model file to GCS
bucket = storage_client.get_bucket("YOUR_GCS_BUCKET")
model_directory = os.environ["AIP_MODEL_DIR"]
storage_path = os.path.join(model_directory, "model.joblib")
blob = storage.blob.Blob.from_string(storage_path, client=storage_client)
blob.upload_from_filename("model.joblib")

Ardından not defterinize geri dönün ve yukarıdaki komut dosyasındaki YOUR_GCS_BUCKET öğesini Cloud Storage paketinizin adıyla değiştirmek için aşağıdaki komutu çalıştırın:

BUCKET = BUCKET_NAME[5:] # Trim the 'gs://' before adding to train script
!sed -i -r 's@YOUR_GCS_BUCKET@'"$BUCKET"'@' traincontainer/trainer/train.py

Dilerseniz bunu manuel olarak da yapabilirsiniz. Bunu yaparsanız komut dosyasını güncellerken gs:// öğesini paket adınıza eklemediğinizden emin olun.

Eğitim kodumuz bir Docker container'ında bulunuyor ve Cloud'da eğitim çalıştırmaya hazırız.

2. Adım: Container'ı Container Registry'ye aktarın

Eğitim kodumuz tamamlandığında bunu Google Container Registry'ye aktarmaya hazırız. Daha sonra ardışık düzenimizin eğitim bileşenini yapılandırdığımızda bu container'a Vertex Ardışık Düzenleri'ni yönlendireceğiz.

Terminalinize dönün ve traincontainer/ dizininizin kök dizininden Container Registry'deki container görüntünüzün URI'sıyla bir değişken tanımlayın.

PROJECT_ID=$(gcloud config get-value project)
IMAGE_URI="gcr.io/$PROJECT_ID/scikit:v1"

Ardından aşağıdaki komutu çalıştırarak container'ınızı derleyin:

docker build ./ -t $IMAGE_URI

Son olarak, container'ı Container Registry'ye aktarın:

docker push $IMAGE_URI

Kapsayıcınızın mevcut olduğunu doğrulamak için Cloud Console'un Container Registry bölümüne gidin. Şuna benzeyecektir:

Container Registry

6. Toplu tahmin işi yapılandırma

Ardışık düzenimizin son adımı bir toplu tahmin işi çalıştırır. Bunun işe yaraması için, tahmin almak istediğimiz örnekleri içeren bir CSV dosyasını Cloud Storage'da sağlamamız gerekir. Bu CSV dosyasını not defterimizde oluşturup gsutil komut satırı aracını kullanarak Cloud Storage'a kopyalayacağız.

Toplu tahmin örneklerini Cloud Storage'a kopyalama

Aşağıdaki dosya, çekirdek veri kümemizdeki her bir sınıftan 3 örnek içerir. Aşağıdaki örnekte, modelimiz tahmin edeceğinden Class sütunu dahil değildir. Bu CSV dosyasını not defterinizde yerel olarak oluşturmak için aşağıdaki komutu çalıştırın:

%%writefile batch_examples.csv
Area,Perimeter,MajorAxisLength,MinorAxisLength,AspectRation,Eccentricity,ConvexArea,EquivDiameter,Extent,Solidity,roundness,Compactness,ShapeFactor1,ShapeFactor2,ShapeFactor3,ShapeFactor4
23288,558.113,207.567738,143.085693,1.450653336,0.7244336162,23545,172.1952453,0.8045881703,0.9890847314,0.9395021523,0.8295857874,0.008913077034,0.002604069884,0.6882125787,0.9983578734
23689,575.638,205.9678003,146.7475015,1.403552348,0.7016945718,24018,173.6714472,0.7652721693,0.9863019402,0.8983750474,0.8431970773,0.00869465998,0.002711119968,0.7109813112,0.9978994889
23727,559.503,189.7993849,159.3717704,1.190922235,0.5430731512,24021,173.8106863,0.8037601626,0.9877607094,0.952462433,0.9157600082,0.007999299741,0.003470231343,0.8386163926,0.9987269085
31158,641.105,212.0669751,187.1929601,1.132879009,0.4699241567,31474,199.1773023,0.7813134733,0.989959967,0.9526231013,0.9392188582,0.0068061806,0.003267009878,0.8821320637,0.9993488983
32514,649.012,221.4454899,187.1344232,1.183349841,0.5346736437,32843,203.4652564,0.7849831,0.9899826447,0.9700068737,0.9188051492,0.00681077351,0.002994124691,0.8442029022,0.9989873701
33078,659.456,235.5600775,178.9312328,1.316483846,0.6503915309,33333,205.2223615,0.7877214708,0.9923499235,0.9558229607,0.8712102818,0.007121351881,0.002530662194,0.7590073551,0.9992209221
33680,683.09,256.203255,167.9334938,1.525623324,0.7552213942,34019,207.081404,0.80680321,0.9900349805,0.9070392732,0.8082699962,0.007606985006,0.002002710402,0.6533003868,0.9966903078
33954,716.75,277.3684803,156.3563259,1.773951126,0.825970469,34420,207.9220419,0.7994819873,0.9864613597,0.8305492781,0.7496238998,0.008168948587,0.001591181142,0.5619359911,0.996846984
36322,719.437,272.0582306,170.8914975,1.591993952,0.7780978465,36717,215.0502424,0.7718560075,0.9892420405,0.8818487005,0.7904566678,0.007490177594,0.001803782407,0.6248217437,0.9947124371
36675,742.917,285.8908964,166.8819538,1.713132487,0.8119506999,37613,216.0927123,0.7788277766,0.9750618137,0.8350248381,0.7558572692,0.0077952528,0.001569528272,0.5713202115,0.9787472145
37454,772.679,297.6274753,162.1493177,1.835514817,0.8385619338,38113,218.3756257,0.8016695205,0.9827093118,0.7883332637,0.7337213257,0.007946480356,0.001420623993,0.5383469838,0.9881438654
37789,766.378,313.5680678,154.3409867,2.031657789,0.8704771226,38251,219.3500608,0.7805870567,0.9879218844,0.8085170916,0.6995293312,0.008297866252,0.001225659709,0.4893412853,0.9941740339
47883,873.536,327.9986493,186.5201272,1.758516115,0.822571799,48753,246.9140116,0.7584464543,0.9821549443,0.7885506623,0.7527897207,0.006850002074,0.00135695419,0.5666923636,0.9965376533
49777,861.277,300.7570338,211.6168613,1.42123379,0.7105823885,50590,251.7499649,0.8019106536,0.9839296304,0.843243269,0.8370542883,0.00604208839,0.001829706116,0.7006598815,0.9958014989
49882,891.505,357.1890036,179.8346914,1.986207449,0.8640114945,51042,252.0153467,0.7260210171,0.9772736178,0.7886896753,0.7055518063,0.007160679276,0.001094585314,0.4978033513,0.9887407248
53249,919.923,325.3866286,208.9174205,1.557489212,0.7666552108,54195,260.3818974,0.6966846347,0.9825445152,0.7907120655,0.8002231025,0.00611066177,0.001545654241,0.6403570138,0.9973491406
61129,964.969,369.3481688,210.9473449,1.750902193,0.8208567513,61796,278.9836198,0.7501135067,0.9892064211,0.8249553283,0.7553404711,0.006042110436,0.001213219664,0.5705392272,0.9989583843
61918,960.372,353.1381442,224.0962377,1.575832543,0.7728529173,62627,280.7782864,0.7539207091,0.9886790043,0.8436218213,0.7950947556,0.005703319619,0.00140599258,0.6321756704,0.9962029945
141953,1402.05,524.2311633,346.3974998,1.513380332,0.7505863011,143704,425.1354762,0.7147107987,0.9878152313,0.9074598849,0.8109694843,0.003692991084,0.0009853172185,0.6576715044,0.9953071199
145285,1440.991,524.9567463,353.0769977,1.486805285,0.7400216694,146709,430.0960442,0.7860466375,0.9902937107,0.8792413513,0.8192980608,0.003613289371,0.001004269363,0.6712493125,0.9980170255
146153,1476.383,526.1933264,356.528288,1.475881001,0.7354662103,149267,431.3789276,0.7319360978,0.9791380546,0.8425962592,0.8198107159,0.003600290972,0.001003163512,0.6720896099,0.991924286

Ardından dosyayı Cloud Storage paketinize kopyalayın:

!gsutil cp batch_examples.csv $BUCKET_NAME

Bir sonraki adımda ardışık düzenimizi tanımlarken bu dosyayı referanslayacağız.

7. Önceden oluşturulmuş bileşenlere sahip ardışık düzen oluşturma

Eğitim kodumuz bulutta yer aldığına göre artık ardışık düzenimizden çağrıda bulunmaya hazırız. Tanımlayacağımız ardışık düzen, daha önce yüklediğimiz google_cloud_pipeline_components kitaplığından önceden oluşturulmuş üç bileşen kullanacaktır. Bu önceden tanımlanmış bileşenler, ardışık düzenimizi kurmak için yazmamız gereken kodu basitleştirir. Ayrıca, model eğitimi ve toplu tahmin gibi Vertex AI hizmetlerini kullanmamıza olanak tanır.

Üç adımlı ardışık düzenimizin işlevi şu şekildedir:

  • Vertex AI'da yönetilen bir veri kümesi oluşturma
  • Kurduğumuz özel container'ı kullanarak Vertx AI'da eğitim işi çalıştırma
  • Eğitilmiş Scikit-learn sınıflandırma modelimizde toplu tahmin işi çalıştırma

1. Adım: Ardışık düzenimizi tanımlayın

Önceden oluşturulmuş bileşenler kullandığımız için tüm ardışık düzenimizi ardışık düzen tanımına yerleştirebiliriz. Not defteri hücresine aşağıdakileri ekleyin:

@pipeline(name="automl-beans-custom",
                  pipeline_root=PIPELINE_ROOT)
def pipeline(
    bq_source: str = "bq://sara-vertex-demos.beans_demo.large_dataset",
    bucket: str = BUCKET_NAME,
    project: str = PROJECT_ID,
    gcp_region: str = REGION,
    bq_dest: str = "",
    container_uri: str = "",
    batch_destination: str = ""
):
    dataset_create_op = gcc_aip.TabularDatasetCreateOp(
        display_name="tabular-beans-dataset",
        bq_source=bq_source,
        project=project,
        location=gcp_region
    )

    training_op = gcc_aip.CustomContainerTrainingJobRunOp(
        display_name="pipeline-beans-custom-train",
        container_uri=container_uri,
        project=project,
        location=gcp_region,
        dataset=dataset_create_op.outputs["dataset"],
        staging_bucket=bucket,
        training_fraction_split=0.8,
        validation_fraction_split=0.1,
        test_fraction_split=0.1,
        bigquery_destination=bq_dest,
        model_serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest",
        model_display_name="scikit-beans-model-pipeline",
        machine_type="n1-standard-4",
    )
    batch_predict_op = gcc_aip.ModelBatchPredictOp(
        project=project,
        location=gcp_region,
        job_display_name="beans-batch-predict",
        model=training_op.outputs["model"],
        gcs_source_uris=["{0}/batch_examples.csv".format(BUCKET_NAME)],
        instances_format="csv",
        gcs_destination_output_uri_prefix=batch_destination,
        machine_type="n1-standard-4"
    )

2. Adım: Ardışık düzeni derleyin ve çalıştırın

Ardışık düzeniniz tanımlandıktan sonra derlemeye hazırsınız demektir. Aşağıdaki işlem, ardışık düzeni çalıştırmak için kullanacağınız bir JSON dosyası oluşturur:

compiler.Compiler().compile(
    pipeline_func=pipeline, package_path="custom_train_pipeline.json"
)

Sonra, bir TIMESTAMP değişkeni oluşturun. İş kimliğimizde bunu kullanacağız:

from datetime import datetime

TIMESTAMP = datetime.now().strftime("%Y%m%d%H%M%S")

Ardından, projeye özgü birkaç parametreyi ileterek ardışık düzen işinizi tanımlayın:

pipeline_job = aiplatform.PipelineJob(
    display_name="custom-train-pipeline",
    template_path="custom_train_pipeline.json",
    job_id="custom-train-pipeline-{0}".format(TIMESTAMP),
    parameter_values={
        "project": PROJECT_ID,
        "bucket": BUCKET_NAME,
        "bq_dest": "bq://{0}".format(PROJECT_ID),
        "container_uri": "gcr.io/{0}/scikit:v1".format(PROJECT_ID),
        "batch_destination": "{0}/batchpredresults".format(BUCKET_NAME)
    },
    enable_caching=True,
)

Son olarak, yeni bir ardışık düzen yürütmesi oluşturmak için işi çalıştırın:

pipeline_job.submit()

Bu hücreyi çalıştırdıktan sonra konsolunuzda ardışık düzen çalıştırmasını görüntüleme bağlantısı içeren günlükleri göreceksiniz:

Ardışık düzen işi günlükleri

Bu bağlantıya gidin. Bu sayfaya Ardışık düzenler kontrol panelinizi açarak da erişebilirsiniz. Ardışık düzeniniz tamamlandığında aşağıdaki gibi görünmelidir:

Giriş ardışık düzeni tamamlandı

Bu ardışık düzenin çalıştırılması 5-10 dakika sürer ancak tamamlanmadan önce sonraki adıma geçebilirsiniz. Bir sonraki bölümde, bu ardışık düzen adımlarının her birinde neler olduğu hakkında daha fazla bilgi edineceksiniz.

8. Ardışık düzeninizin yürütülmesini anlama

Üç ardışık düzen adımımızı daha ayrıntılı bir şekilde inceleyelim.

Ardışık düzen 1. Adım: Yönetilen veri kümesi oluşturma

Ardışık düzenimizdeki ilk adım, Vertex AI'da yönetilen bir veri kümesi oluşturur. Konsolunuzun Ardışık düzenler bölümünde aşağıdaki veri kümesi bağlantısını tıklarsanız:

Ardışık düzendeki veri kümesine bağlantı

Veri kümenizi Vertex AI'da görürsünüz. Bu platformda, BigQuery'deki veri kaynağının bağlantısı ve veri kümenizdeki farklı sütunlarla ilgili bilgiler bulunur. Vertex AI'a yönetilen bir veri kümesi yüklendikten sonra, AutoML veya özel model eğitmek için bu veri kümesini kullanabilirsiniz.

Yönetilen veri kümeleri kullanan özel model işleri için Vertex AI, eğitim işlerinize özel ortam değişkenlerini iletir ve verilerinizi eğitim ve test kümelerine ayırmayı sağlar. Bunu bir sonraki ardışık düzen adımımızda kullanacağız.

Ardışık düzen 2. adımı: Vertex AI Training'de model eğitme

Özel eğitim işiniz çalışırken günlükleri doğrudan Vertex Pipelines konsolunda görüntülemek için tıklayabilirsiniz:

Özel eğitim günlükleri

Özel eğitim işiyle ilgili ayrıntıları Vertex AI Eğitim kontrol panelinizde de görebilirsiniz. Eğitim işi tamamlandığında Vertex AI'da Model kaynağı oluşturulur. Böylece bu modeli online tahminler için bir uç noktaya dağıtabilir veya bir sonraki ardışık düzen adımımızda yapacağımız toplu tahmin işi oluşturabiliriz.

Ardışık düzen 3. Adım: Modelimizde toplu tahmin işi çalıştırma

Son olarak, ardışık düzenimiz CSV dosyası aracılığıyla iletilen örnekler hakkında tahminler alır. Toplu tahmin işi tamamlandığında Vertex AI, Cloud Storage'da belirttiğimiz konuma bir CSV dosyası yazar. Bu ardışık düzen adımı çalışmaya başladığında, oluşturulan işi görmek için Vertex AI konsolunuzun Toplu Tahminler bölümüne gidebilirsiniz.

Toplu tahminlerinizin Cloud Storage URL'sini görmek için tamamlandığında işi tıklayın:

Toplu tahmin işi

Bu bağlantıyı tıklayarak tahmin sonuçlarını bulabileceğiniz Cloud Storage dizinine gidin ve ardından prediction.results dosyalarından birini indirmek için tıklayın. Dosyada şuna benzer satırlar görürsünüz:

{"instance": [33954.0, 716.75, 277.3684803, 156.3563259, 1.773951126, 0.825970469, 34420.0, 207.9220419, 0.7994819873, 0.9864613597, 0.8305492781, 0.7496238998, 0.008168948587, 0.001591181142, 0.5619359911, 0.996846984], "prediction": "HOROZ"}

Buna, modelimizin tahmin ettiği sınıfla birlikte belirli bir örnek için özellik değerleri dahildir. Bu örnekteki modelimiz bunun bir "HOROZ" olduğunu düşünüyor. fasulye.

Böylece laboratuvarı tamamlamış oldunuz.

🎉 Tebrikler! 🎉

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

  • Özel bileşenlerle uçtan uca ardışık düzenler derlemek için Kubeflow Pipelines SDK'yı kullanın
  • Ardışık düzenlerinizi Vertex Pipelines'da çalıştırın ve SDK ile ardışık düzen çalıştırmalarını başlatın
  • Konsolda Vertex Pipelines grafiğinizi görüntüleme ve analiz etme
  • Ardışık düzeninize Vertex AI hizmetlerini eklemek için önceden oluşturulmuş ardışık düzen bileşenlerini kullanın
  • Yinelenen ardışık düzen işlerini planlama

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

9. Temizleme

Ücret ödememek için bu laboratuvar boyunca oluşturulan kaynakları silmeniz önerilir.

1. Adım: Notebooks örneğinizi durdurun veya silin

Bu laboratuvarda oluşturduğunuz not defterini kullanmaya devam etmek istiyorsanız, kullanmadığınız not defterini kapatmanız önerilir. Cloud Console'daki Notebooks kullanıcı arayüzünde not defterini, ardından Stop'ı (Durdur) seçin. Örneği tamamen silmek istiyorsanız Sil'i seçin:

Örneği durdur

2. Adım: Cloud Storage paketinizi silin

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