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 ML ardışık düzenleri oluşturmak için Kubeflow Pipelines SDK'sını 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 ardışık düzenlerinde toplu tahmin işi çalıştırma
google_cloud_pipeline_components
kitaplığı aracılığıyla sağlanan, Vertex AI hizmetleriyle etkileşim kurmak için önceden oluşturulmuş bileşenleri kullanma
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 Vertex AI kullanılmaktadır. Vertex AI, Google'ın Google Cloud'daki makine öğrenimi tekliflerini sorunsuz bir geliştirme deneyiminde birleştirir. 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. Tüm Vertex AI ürün tekliflerini aşağıdaki şemada görebilirsiniz.
Geri bildirimde bulunmak isterseniz lütfen destek sayfasını inceleyin.
ML ardışık düzenleri neden yararlıdır?
Konuyu incelemeye başlamadan önce, ardışık düzeni neden kullanmak isteyebileceğinizi anlayalım. Veri işleme, model eğitimi, hiper parametre ayarı, değerlendirme ve model dağıtımı içeren bir makine öğrenimi 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, ekibinizdeki diğer kullanıcıların çalıştırabilmesi ve kod katkısında bulunabilmesi için makine öğrenimi iş akışınızı onlarla paylaşabilirsiniz. Güvenilir, tekrarlanabilir bir süreç olmadan bu zor olabilir. Veri akışlarında, makine öğrenimi işleminizdeki her adım kendi kapsayıcısına sahiptir. Bu sayede adımları bağımsız olarak geliştirebilir ve her adımdaki giriş ile çıkışı tekrarlanabilir bir şekilde izleyebilirsiniz. Ayrıca, Cloud ortamınızdaki diğer etkinliklere göre ardışık düzeninizin çalıştırılmasını planlayabilir veya tetikleyebilirsiniz (ör. yeni eğitim verileri mevcut olduğunda ardışık düzen çalıştırma).
Özet: Ardışık düzenler, ML iş akışlarınızı basitleştirmenize ve yeniden oluşturmanıza yardımcı olur.
3. Bulut ortamı kurulumu
Bu kod laboratuvarını çalıştırmak için faturalandırmanın etkin olduğu bir Google Cloud Platform projeniz olmalıdır. 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 yorumlayıcısı olan Cloud Shell oturumunda çalışacaksınız. Bu bölümü kendi bilgisayarınızda yerel olarak da çalıştırabilirsiniz ancak Cloud Shell'i kullanmak, herkese tutarlı bir ortamda yeniden üretilebilir bir deneyime erişim sağlar. Laboratuvardan sonra bu bölümü kendi bilgisayarınızda tekrar deneyebilirsiniz.
Cloud Shell'i etkinleştirme
Cloud Shell'i etkinleştirmek için Cloud Console'un sağ üst kısmındaki aşağıdaki düğmeyi tıklayın:
Cloud Shell'i daha önce hiç başlatmadıysanız Cloud Shell'in ne olduğunu açıklayan bir ara ekran (ekranın altında) gösterilir. Bu durumda Devam'ı tıklayın (bu ekranı bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:
Cloud Shell'e bağlanmak ve ortam oluşturmak yalnızca birkaç dakikanızı alır.
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 göre ayarlandığını görürsünüz.
Kimliğinizi doğrulamak 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:
gcloud komutunun projeniz hakkında bilgi sahibi olduğunu 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, mevcut Cloud projemizin adını içeren GOOGLE_CLOUD_PROJECT
gibi birkaç ortam değişkeni vardır. Bu laboratuvar boyunca çeşitli yerlerde bu değişkeni kullanacağız. Aşağıdaki komutu çalıştırarak bu bilgileri görebilirsiniz:
echo $GOOGLE_CLOUD_PROJECT
2. Adım: API'leri etkinleştirme
Bu hizmetlerin nerelerde (ve neden) gerekli olduğunu sonraki adımlarda göreceksiniz. Şimdilik projenize Compute Engine, Container Registry ve Vertex AI hizmetlerine erişim vermek için aşağıdaki komutu çalıştırın:
gcloud services enable compute.googleapis.com \
containerregistry.googleapis.com \
aiplatform.googleapis.com
Bu işlem, aşağıdakine benzer bir başarılı mesaj döndürür:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. Adım: Cloud Storage paketi oluşturun
Vertex AI'da bir 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
bölgesini kullanıyoruz ancak başka bir bölge de kullanabilirsiniz (bu laboratuvar boyunca bölgeyi değiştirin). Halihazırda 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, bilgi işlem hizmet hesabımıza bu pakete erişim izni vereceğiz. Bu işlem, Vertex Pipelines'in bu pakete dosya yazmak için gerekli izinlere sahip olmasını sağlar. 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'unuzun Vertex AI bölümünden Workbench'i tıklayın:
Buradan Kullanıcı tarafından yönetilen not defterleri bölümünde Yeni Not Defteri'ni tıklayın:
Ardından, GPU'suz TensorFlow Enterprise 2.3 (LTS özellikli) örnek türünü seçin:
Varsayılan seçenekleri kullanın ve Oluştur'u tıklayın.
5. Adım: Not defterinizi açın
Örnek oluşturulduktan sonra JupyterLab'i aç'ı seçin:
4. Vertex Pipelines kurulumu
Vertex Pipelines'i kullanmak için yüklememiz gereken birkaç ek kitaplık vardır:
- Kubeflow Pipelines: Ardışık düzenimizi oluşturmak için kullanacağımız SDK budur. Vertex Pipelines, hem Kubeflow Pipelines hem de TFX ile oluşturulan ardışık düzenlerin çalıştırılmasını destekler.
- Google Cloud Ardışık Düzen Bileşenleri: Bu kitaplık, ardışık düzen adımlarınızdan Vertex AI hizmetleriyle etkileşimi kolaylaştıran önceden derlenmiş bileşenler sağlar.
1. adım: Python not defteri oluşturun ve kitaplıkları yükleyin
Öncelikle, not defteri örneğinizin Başlatıcı menüsünden (not defterinizin sol üst kısmındaki + simgesini tıklayarak erişebilirsiniz) Python 3'ü seçerek bir not defteri oluşturun:
Not defteri örneğinizin sol üst kısmındaki + 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ğıdakileri ç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 laboratuvar boyunca Cloud proje kimliğinize ve daha önce oluşturduğunuz pakete referans vereceksiniz. Ardından 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 takdirde buradan ayarlayın:
if PROJECT_ID == "" or PROJECT_ID is None:
PROJECT_ID = "your-project-id" # @param {type:"string"}
Ardından, paketinizin adını depolayacak bir değişken oluşturun. Bu laboratuvarda oluşturduysanız aşağıdaki yöntem işe 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: Sabitler 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ılmaktadır 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örürsünüz. Bu, ardışık düzeninizdeki yapıların yazılacağı Cloud Storage konumudur. gs://YOUR-BUCKET-NAME/pipeline_root/
biçimindedir.
5. Özel model eğitim işini yapılandırma
Ardışık düzenimizi oluşturmadan önce özel model eğitim işimizin kodunu yazmamız gerekir. 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ırması.""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 fasulye türlerini sınıflandırmak için Scikit-learn
DecisionTreeClassifier
modeli yazma - Eğitim kodunu Docker container'da paketleyip Container Registry'ye gönderme
Buradan doğrudan ardışık düzenimizden bir Vertex AI Eğitim işi başlatabiliriz. Haydi, başlayalım.
1. Adım: Eğitim kodumuzu Docker container'ında tanımlayın
Not Defteri örneğinizde Başlatıcı'yı açıp Terminal'i seçin:
Ardından, kapsayıcıya alınmış kodunuzu ekleyeceğiniz bir dizin oluşturmak için aşağıdakileri çalıştırın:
mkdir traincontainer
cd traincontainer
touch Dockerfile
mkdir trainer
touch trainer/train.py
Bu komutları çalıştırdıktan sonra, solda traincontainer/
adlı bir dizin oluşturulduğunu görürsünüz (bu dizini görmek için yenile simgesini tıklamanız gerekebilir). traincontainer/
dizininizde aşağıdakileri görürsünüz:
+ Dockerfile
+ trainer/
+ train.py
Kodumuzu kapsayıcıya dönüştürmedeki ilk adımımız bir Dockerfile oluşturmaktır. Dockerfile'imize, görüntümüzü çalıştırmak için gereken tüm komutları ekleriz. Bu işlem, kullandığımız tüm kitaplıkları yükler ve eğitim kodumuz için giriş noktasını ayarlar. Yeni oluşturduğunuz Dockerfile dosyasını açın ve aşağıdakileri 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"]
Not defteri örneğinizde düzenlediğiniz dosyaları kaydederken ctrl+s
simgesini kullanabilirsiniz.
Ardından train.py
dosyasını açın. Eğitim kodumuzu buraya ekleyeceğiz. Aşağıdakileri train.py
klasörüne kopyalayın. Bu kod, verileri yönetilen veri kümemizden alır, bir Pandas DataFrame'e yerleştirir, bir Scikit-learn modeli 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
İsterseniz bu işlemi 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 artık bir Docker kapsayıcısında. Bu nedenle, eğitimi bulutta ç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ırırken Vertex Pipelines'i bu kapsayıcıya 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, kapsayıcıyı 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:
6. Toplu tahmin işini yapılandırma
Ardışık düzenimizin son adımında bir toplu tahmin işi çalıştırılır. Bunun işe yaraması için Cloud Storage'da, tahmin almak istediğimiz örnekleri içeren bir CSV dosyası 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, beans veri kümemizdeki her sınıftan 3 örnek içerir. Aşağıdaki örnekte, modelimizin tahmin edeceği Class
sütunu yer almamıştır. Bu CSV dosyasını not defterinizde yerel olarak oluşturmak için aşağıdakileri ç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
Sonraki adımda ardışık düzenimizi tanımlarken bu dosyaya referans vereceğiz.
7. Önceden oluşturulmuş bileşenlerle 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 ayarlamak için yazmamız gereken kodu basitleştirir ve model eğitimi ve toplu tahmin gibi Vertex AI hizmetlerini kullanmamıza olanak tanır.
Üç adımlı ardışık düzenimiz şu işlemleri yapar:
- Vertex AI'da yönetilen veri kümesi oluşturma
- Oluşturduğumuz özel kapsayıcıyı kullanarak Vertex AI'da bir 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. Aşağıdakileri bir not defteri hücresine 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
Oluşturduğunuz ardışık düzeni derlemeye hazırsınız. 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"
)
Ardından 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ç parametre göndererek 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, ardışık düzenin çalıştırılmasını konsolunuzda görüntüleme bağlantısını içeren günlükleri görürsünüz:
İlgili bağlantıya gidin. Dönüşüm hunileri kontrol panelinizi açarak da bu rapora erişebilirsiniz. Ardışık düzeniniz tamamlandığında aşağıdaki gibi görünmelidir:
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ın her birini daha ayrıntılı olarak 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. Konsolinüzün Ardışık düzenler bölümünde aşağıdaki veri kümesi bağlantısını tıklarsanız:
Vertex AI'da veri kümenizi görürsünüz. Bu veri kümesinde, BigQuery'deki veri kaynağının bağlantısı ve veri kümenizdeki farklı sütunlarla ilgili bilgiler yer alır. Vertex AI'a yüklediğiniz yönetilen veri kümeleri, AutoML veya özel modelleri eğitmek için kullanılabilir.
Yönetilen veri kümelerini kullanan özel model işlerinde Vertex AI, eğitim işlerinize özel ortam değişkenleri iletir ve verilerinizi eğitim ve test kümelerine bölme işlemini gerçekleştirir. 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ğitimi
Ö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 işiyle ilgili ayrıntıları Vertex AI Eğitim kontrol panelinizde de görebilirsiniz. Eğitim işi tamamlandığında Vertex AI'da bir Model kaynağı oluşturulur. Ardından bu modeli online tahminler için bir uç noktaya dağıtabilir veya toplu tahmin işi oluşturabiliriz. Bunu bir sonraki ardışık düzen adımımızda yapacağız.
Ardışık düzen 3. Adım: Modelimizde toplu tahmin işi çalıştırma
Son olarak, ardışık düzenimiz, ilettiğimiz örneklerle ilgili tahminleri CSV dosyası üzerinden 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 iş tamamlandığında işi tıklayın:
Tahmin sonuçlarını bulabileceğiniz Cloud Storage dizinine gitmek için bu bağlantıyı tıklayın ve ardından prediction.results
dosyalarından birini indirmek için tıklayın. Dosyada aşağıdaki gibi görünen 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"}
Bu, modelimizin tahmin ettiği sınıfın yanı sıra belirli bir örneğin özellik değerlerini içerir. Bu örnekte modelimiz bunun "HOROZ" fasulyesi olduğunu düşünüyor.
Bu işlemle birlikte laboratuvarı tamamladınız.
🎉 Tebrikler. 🎉
Aşağıdakiler için Vertex AI'ı nasıl kullanacağınızı öğrendiniz:
- Özel bileşenlerle uçtan uca ardışık düzenler oluşturmak için Kubeflow Pipelines SDK'sını kullanın
- Ardışık düzenlerinizi Vertex Pipelines'de çalıştırma ve SDK ile ardışık düzen çalıştırma işlemlerini başlatma
- Konsolda Vertex Pipelines grafiğinizi görüntüleme ve analiz etme
- Ardışık düzeninize Vertex AI hizmetleri eklemek için önceden oluşturulmuş ardışık düzen bileşenlerini kullanma
- Yinelenen ardışık düzen işlerini planlama
Vertex'in farklı bölümleri hakkında daha fazla bilgi edinmek için belgelere göz atın.
9. Temizleme
Sizden ücret alınmaması için bu laboratuvarda 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 Not Defteri kullanıcı arayüzünde not defterini ve ardından Durdur'u seçin. Örneği tamamen silmek istiyorsanız Sil'i seçin:
2. adım: Cloud Storage paketinizi silin
Depolama paketini silmek için Cloud Console'daki Gezinme menüsünü kullanarak Depolama'ya gidin, paketinizi seçin ve Sil'i tıklayın: