Kubeflow Pipelines - GitHub Sorun Özetleme

1. Giriş

Kubeflow, Kubernetes için kullanılan bir makine öğrenimi araç setidir. Projenin amacı, Kubernetes'te Makine Öğrenimi (ML) iş akışlarının dağıtımlarını basit, taşınabilir ve ölçeklenebilir hale getirmektir. Amaç, çeşitli altyapılara makine öğrenimi için sınıfının en iyisi açık kaynak sistemleri dağıtmanın basit bir yolunu sunmaktır.

Makine öğrenimi iş akışı; veri hazırlama ve analizden eğitime, değerlendirmeden dağıtıma ve daha birçok aşamada birbirine bağımlı olan birçok adım içerebilir. Bu süreçleri, örneğin bir dizi not defteri veya komut dosyası halinde, anlık bir şekilde oluşturmak ve takip etmek zordur. Ayrıca, denetleme ve yeniden üretilebilirlik gibi konular giderek daha da sorunlu hale gelmektedir.Kubeflow Pipelines (KFP) güçlü ve tekrarlanabilir makine öğrenimi ardışık düzenlerinin yanı sıra izleme, denetleme, sürüm izleme ve yeniden üretme imkanı sunarak bu sorunların çözülmesine yardımcı olur. Cloud AI Pipelines, KFP kurulumu kurmayı kolaylaştırır.

Oluşturacaklarınız

Bu codelab'de model eğitmek ve sunmak için Kubeflow Pipelines'ı kullanarak GitHub sorunlarını özetleyen bir web uygulaması derleyeceksiniz. Bu özellik, Kubeflow Örnek deposundaki bir örneği temel alır. Bu işlemin ardından altyapınız şunları içerecektir:

  • Kubeflow Pipelines'ın yüklü olduğu bir Google Kubernetes Engine (GKE) kümesi (Cloud AI Pipelines aracılığıyla).
  • GPU'lar üzerinde Tensor2Tensor modelini eğiten bir ardışık düzen
  • Eğitilen modelden tahminler sağlayan bir sunum container'ı
  • GitHub sorunları için özetler sağlamak üzere tahminleri yorumlayan kullanıcı arayüzü
  • Kubeflow Pipelines (KFP) SDK'sını kullanarak sıfırdan ardışık düzen oluşturan bir not defteri

Neler öğreneceksiniz?

Derleyeceğiniz ardışık düzen, GitHub sorun verileri üzerinde bir Tensor2Tensor modeli eğiterek sorun gövdelerinden sorun başlıklarını tahmin etmeyi öğrenir. Ardından, eğitilen modeli dışa aktarır ve dışa aktarılan modeli Tensorflow Sunumu'nu kullanarak dağıtır. Ardışık düzendeki son adım, model tahminleri almak için TF-Serving örneğiyle etkileşime geçen bir web uygulamasını başlatır.

  • GKE kümesine Kubeflow Pipelines'ı yükleme
  • Kubeflow Pipelines'ı kullanarak makine öğrenimi iş akışları oluşturma ve çalıştırma
  • AI Platform Notebooks'tan ardışık düzen tanımlama ve çalıştırma

Gerekenler

2. Kurulum

Cloud Shell

Tarayıcıda GCP Console'u ziyaret edin ve proje kimlik bilgilerinizle giriş yapın:

"Select a project"i (Proje seç) tıklayın kod laboratuvarı projenizle çalışmanızı sağlar.

4f23e1fe87a47cb2.png

Ardından "Cloud Shell'i etkinleştir"i tıklayın. Cloud Shell başlatmak için konsolun sağ üst tarafındaki "simgesine dokunun.

ecf212797974dd31.png

Cloud Shell'i başlattığınızda, kullanmak üzere ayarlandığı projenin adı belirtilir. Bu ayarın doğru olup olmadığını kontrol edin.

Proje kimliğinizi bulmak için GCP Console'un Ana panelini ziyaret edin. Ekran boşsa "Evet"i tıklayın. kontrol paneli oluşturun.

115cdf745978ad.png

Ardından gcloud uygulamasını doğru projeyi kullanacak şekilde yapılandırmak için gerekirse Cloud Shell terminalinde şu komutları çalıştırın:

export PROJECT_ID=<your_project_id>
gcloud config set project ${PROJECT_ID}

Storage paketi oluşturma

Ardışık düzen dosyalarını depolamak için Cloud Storage paketi oluşturun. Genel olarak benzersiz bir kimlik kullanmanız gerekir. Bu nedenle, proje kimliğinizi içeren bir paket adı kolayca tanımlayabilirsiniz. gsutil mb (paket oluşturma) komutunu kullanarak paketi oluşturun:

export PROJECT_ID=<your_project_id>
export BUCKET_NAME=kubeflow-${PROJECT_ID}
gsutil mb gs://${BUCKET_NAME}

Alternatif olarak GCP Console üzerinden bir paket oluşturabilirsiniz.

İsteğe bağlı**: GitHub jetonu oluşturun**

Bu codelab'de, herkese açık verileri almak için GitHub API'ye çağrı yapılır. Özellikle GitHub API'lerine çok sayıda anonimleştirilmiş isteğin gönderildiği etkinliklerde hız sınırlamasını önlemek için izni olmayan bir erişim jetonu oluşturun. Bu, sizi anonim kullanıcı olarak değil, birey olarak yetkilendirmek içindir.

  1. https://github.com/settings/tokens adresine gidin ve kapsam olmayan yeni bir jeton oluşturun.
  2. Güvenli bir yere kaydedin. Hesabınızı kaybederseniz yeni bir hesap oluşturup silmeniz gerekir.

Bu adımı atlarsanız laboratuvar çalışmaya devam eder. Modelinizi test etmek için giriş verisi oluşturma seçenekleriniz biraz daha sınırlı olur.

İsteğe bağlı: Faydalı kontrol panellerini sabitleme

Daha kolay erişim için GCP Console'da Kubernetes Engine ve Storage kontrol panellerini sabitleyin.

2a50622902d75f6a.png

AI Platform Ardışık Düzenleri (Barındırılan Kubeflow Pipelines) kurulumu oluşturma

"Başlamadan önce" ve "Örneğinizi ayarlayın" KFP yüklü bir GKE örneği oluşturmak için buradaki bölümlerden yararlanabilirsiniz. Dokümanlarda belirtildiği şekilde Aşağıdaki Cloud APIs'e erişime izin ver kutusunu işaretlediğinizden emin olun. (Bunu yapmazsanız örnek ardışık düzen başarıyla çalışmaz). Yükleme ad alanını default olarak bırakın.

Nvidia k80s'yi destekleyen bir alt bölge seçmeniz gerekir. Varsayılan olarak us-central1-a veya us-central1-c'yi kullanabilirsiniz.

Yükleme tamamlandıktan sonra AI Ardışık Düzenleri kontrol panelinde yüklemeniz için listelenen GKE küme adını ve alt bölgeyi not edin ve kolaylık sağlamak için ortam değişkenlerini bu değerlere ayarlayın.

6f0729a4fdee88ac.png

export ZONE=<your zone>
export CLUSTER_NAME=<your cluster name>

Yeni GKE kümenizin kimlik bilgilerini kullanmak için kubectl'i kurun

GKE kümesi oluşturulduktan sonra Cloud Shell'inizde aşağıdaki komutu çalıştırarak kubectl hizmetini yeni kümenin kimlik bilgilerini kullanacak şekilde yapılandırın:

gcloud container clusters get-credentials ${CLUSTER_NAME} \
  --project ${PROJECT_ID} \
  --zone ${ZONE}

Alternatif olarak AI Pipelines kontrol panelinde kümenin adını tıklayarak GKE sayfasını ziyaret edebilir ve "Bağlan"ı tıklayabilirsiniz. tıklayın. Pop-up'ta açılan komutu Cloud Shell'inize yapıştırın.

Bu işlem, kubectl bağlamını kümenizle etkileşim kurabilmeniz için yapılandırır. Yapılandırmayı doğrulamak için aşağıdaki komutu çalıştırın:

kubectl get nodes -o wide

Düğümlerin durumu "Ready" olarak listelenir. Bu sayfada düğüm yaşı, sürüm, harici IP adresi, işletim sistemi görüntüsü, çekirdek sürümü ve kapsayıcı çalışma zamanıyla ilgili diğer bilgiler gösterilir.

Nvidia sürücüsünü gpu özellikli düğüm havuzlarına yüklemek için kümeyi yapılandırın

Ardından kümeye bir arka plan kümesi uygulayacağız. Bu işlem, Nvidia sürücüsünü GPU özellikli tüm küme düğümlerine yükleyecektir:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml

Ardından aşağıdaki komutu çalıştırın. Bu komut, KFP bileşenlerine yeni Kubernetes kaynakları oluşturma izni verir:

kubectl create clusterrolebinding sa-admin --clusterrole=cluster-admin --serviceaccount=kubeflow:pipeline-runner

GPU düğüm havuzu oluşturma

Ardından, boyutu 1 olan bir GPU düğüm havuzu oluşturacağız:

gcloud container node-pools create gpu-pool \
    --cluster=${CLUSTER_NAME} \
    --zone ${ZONE} \
    --num-nodes=1 \
    --machine-type n1-highmem-8 \
    --scopes cloud-platform --verbosity error \
    --accelerator=type=nvidia-tesla-k80,count=1

3. Ardışık düzenler kontrol panelinden ardışık düzen çalıştırma

Ardışık düzenler kontrol panelini açın

Henüz Cloud Console'da değilseniz Ardışık düzenler panelini ziyaret edin. Ardından "PIPELINES KONTROL PANELİNİ AÇ"ı tıklayın. seçin ve sol menü çubuğundaki Ardışık düzenler'i tıklayın. Yükleme hatası alırsanız sekmeyi yenileyin. Şuna benzer yeni bir sayfa görürsünüz:

7bb5a9cf0773c3bc.png

Ardışık düzen açıklaması

Çalıştıracağınız ardışık düzende birkaç adım bulunur (ayrıntılar için bu codelab'in Ek bölümüne bakın):

  1. Mevcut model kontrol noktası, paketinize kopyalandı.
  2. Tensor2Tensor modelleri, önceden işlenmiş veriler kullanılarak eğitilir.
  • Eğitim, ilk adımda kopyalanan mevcut model kontrol noktasından başlar ve ardından birkaç yüz adım daha eğitilir. (Codelab sırasında tam olarak eğitilmesi çok uzun sürer).
  • Eğitim tamamlandığında, ardışık düzen adımı modeli TensorFlow sunumu tarafından sunulmaya uygun bir biçimde dışa aktarır.
  1. Bir TensorFlow sunma örneği bu model kullanılarak dağıtılır.
  2. Sunulan modelle etkileşimde bulunarak tahminleri almak için bir web uygulaması başlatılır.

Ardışık düzeni indirme ve derleme

Bu bölümde ardışık düzen tanımının nasıl derleneceğini göreceğiz. İlk olarak KFP SDK'sını yüklememiz gerekiyor. Cloud Shell'de aşağıdaki komutu çalıştırın:

pip3 install -U kfp

Ardışık düzen tanım dosyasını indirmek için Cloud Shell'den şu komutu yürütün:

curl -O https://raw.githubusercontent.com/amygdala/kubeflow-examples/ghsumm/github_issue_summarization/pipelines/example_pipelines/gh_summ_hosted_kfp.py

Ardından, ardışık düzen tanım dosyasını şu şekilde çalıştırarak derleyin:

python3 gh_summ_hosted_kfp.py

Sonuç olarak gh_summ_hosted_kfp.py.tar.gz dosyasının görüntülendiğini görürsünüz.

Derlenen ardışık düzeni yükleme

Kubeflow Pipelines web kullanıcı arayüzünde Yükleme ardışık düzeni'ni tıklayın ve URL ile içe aktar'ı seçin. Aşağıdaki URL'yi kopyalayıp yapıştırın. Bu URL, az önce derlediğiniz ardışık düzene işaret eder. (Cloud Shell'den dosya yüklemek için tamamlamanız gereken birkaç ek adım olduğu için kısayolu tercih ediyoruz.)

https://storage.googleapis.com/aju-dev-demos-codelabs/KF/compiled_pipelines/gh_summ_hosted_kfp.py.tar.gz

Ardışık düzene bir ad verin (ör. gh_summ).

867fdbe248d13bab.png

Ardışık düzeni çalıştırma

Listede yüklenen ardışık düzeni tıklayın. Bu, ardışık düzenin statik grafiğini görüntülemenizi sağlar. Ardışık düzeni kullanarak yeni bir Deneme oluşturmak için Deneme oluştur'u tıklayın. Deneme, anlam açısından ilgili çalıştırmaları birlikte gruplandırmanın bir yoludur.

d4b5b1a043d32d4a.png

Denemeye bir ad verin (ör. ardışık düzen ile aynı ad, gh_summ) ve ardından oluşturmak için Sonraki'yi tıklayın.

d9f7d2177efad53.png

Çalıştırma işlemi için parametreleri girip başlatabileceğiniz bir sayfa açılır.

Parametreleri doldurmanıza yardımcı olması için Cloud Shell'de aşağıdaki komutları çalıştırabilirsiniz.

gcloud config get-value project
echo "gs://${BUCKET_NAME}/codelab"

Çalıştırma adı otomatik olarak doldurulur, ancak isterseniz farklı bir ad da verebilirsiniz.

Ardından üç parametre alanını doldurun:

  • project
  • (isteğe bağlı) github-token
  • working-dir

Çalışma dizini için, oluşturduğunuz GCS paketinin altına bir yol girin. "gs://" özelliğini dahil edin ön eki ile değiştirebilirsiniz. github-token alanına, isteğe bağlı olarak daha önce oluşturduğunuz jetonu girin veya jeton oluşturmadıysanız yer tutucu dizesini olduğu gibi bırakın.

8676afba6fd32ac1.png

Alanları doldurduktan sonra Start'ı (Başlat) tıklayın. Ardından, ayrıntılarını görüntülemek için listelenen çalıştırmayı tıklayın. Belirli bir ardışık düzen adımı çalışırken pod günlüklerini görüntülemek de dahil olmak üzere daha fazla bilgi edinmek için bu adımı tıklayabilirsiniz. (Ayrıca, küme düğümü bozulmuş olsa bile ardışık düzen adımının günlüklerini Cloud Logging (Stackdriver) günlüklerinin bağlantısı aracılığıyla görüntüleyebilirsiniz.

db2dc819ac0f5c1.png

Ardışık düzen tanımını görüntüleme

Ardışık düzen çalışırken nasıl oluşturulduğunu ve ne yaptığını daha yakından incelemek isteyebilirsiniz. Codelab'in Ek bölümünde daha ayrıntılı bilgi bulabilirsiniz.

TensorBoard'da model eğitim bilgilerini görüntüleme

Eğitim adımı tamamlandıktan sonra Visualizations (Görselleştirmeler) sekmesini seçin ve mavi TensorBoard'u Başlat düğmesini tıklayın. Ardından, hazır olduğunda Tensorboard'u Aç'ı tıklayın.

6cb511540a64b9e5.png

d55eb03c4d04f64d.png

Yapılar ve Yürütmeler kontrol panelini keşfetme

Kubeflow Pipelines, bir ardışık düzen yürütülürken ardışık düzen adımlarıyla ilgili meta verileri otomatik olarak günlüğe kaydeder. Hem Artifact hem de Artifact bilgileri kaydedilir. Daha fazla bilgi edinmek için kontrol panelinin sol gezinme çubuğundaki bu girişleri tıklayın.

3002c4055cc8960b.png

Yapılar için hem genel bakış panelini hem de Sıra Gezgini panelini görüntüleyebilirsiniz.

7885776e899d1183.png

40c4f7e5b6545dec.png

Ardışık düzen tarafından oluşturulan web uygulamasını açıp bazı tahminler yapma

Ardışık düzendeki son adımda bir web uygulaması dağıtılır. Bu uygulama, tahminde bulunmak amacıyla eğitilen modelin (TF Sunumu aracılığıyla sunulan) sorgulanmasına yönelik bir kullanıcı arayüzü sağlar.

Ardışık düzen tamamlandıktan sonra hizmetine bağlantı noktası yönlendirerek web uygulamasına bağlanın. (Bu codelab için web uygulaması hizmeti harici bir uç noktaya sahip olacak şekilde ayarlanmadığından bağlantı noktası yönlendiriyoruz.)

Cloud Shell'de şu komutu çalıştırarak hizmet adını bulun:

kubectl get services

Listede şuna benzer bir hizmet adı arayın: ghsumm-*-webappsvc.

Ardından, Cloud Shell'de bu hizmete yönlendirme yaparak aşağıdaki komutu webappsvc'nizin adını kullanacak şekilde değiştirin:

kubectl port-forward svc/ghsumm-xxxxx-webappsvc 8080:80

Bağlantı noktası yönlendirme çalışmaya başladıktan sonra "preview" (önizleme) seçeneğini tıklayın simgesini tıklayın ve açılır listeden "8080 bağlantı noktasında önizle"yi tıklayın.

65572bb3b12627cc

Yeni bir sekmede şuna benzer bir sayfa açılır:

902ad2d555281508.png

Bir metin bloku almak için Rastgele Sorunu Doldur düğmesini tıklayın. Eğitilen modeli çağırmak ve bir tahmin görüntülemek için Generate TItle'ı (Oluştur) tıklayın.

b7c39ce51ee603bd.png

Ardışık düzen parametreleriniz geçerli bir GitHub jetonu içeriyorsa alternatif olarak ikinci alana bir GitHub URL'si girip "Başlık Oluştur"u tıklayabilirsiniz. Geçerli bir GitHub jetonu oluşturmadıysanız yalnızca "Populate Random Issue" (Rastgele Sorunu Doldur) seçeneğini kullanın. girin.

4. AI Platform Notebooks'tan ardışık düzen çalıştırma

Ayrıca KFP SDK'sını kullanarak Jupyter not defterinden Kubeflow Pipelines'ı etkileşimli olarak tanımlayabilir ve çalıştırabilirsiniz. Bu codelab için kullanacağımız AI Platform Notebooks, bu işlemi çok basit hale getirir.

Not defteri örneği oluşturma

API'sini kullanarak Cloud Shell'den not defteri örneği oluşturacağız. (Alternatif olarak, Cloud Console aracılığıyla bir not defteri oluşturabilirsiniz. Daha fazla bilgi için dokümanları inceleyin).

Cloud Shell'de aşağıdaki ortam değişkenlerini ayarlayın:

export INSTANCE_NAME="kfp-ghsumm"
export VM_IMAGE_PROJECT="deeplearning-platform-release"
export VM_IMAGE_FAMILY="tf2-2-3-cpu"
export MACHINE_TYPE="n1-standard-4"
export LOCATION="us-central1-c"

Ardından Cloud Shell'de aşağıdaki komutu çalıştırarak not defteri örneğini oluşturun:

gcloud beta notebooks instances create $INSTANCE_NAME \
  --vm-image-project=$VM_IMAGE_PROJECT \
  --vm-image-family=$VM_IMAGE_FAMILY \
  --machine-type=$MACHINE_TYPE --location=$LOCATION

Bu komutu ilk kez çalıştırdığınızda projeniz için notebooks API'yi etkinleştirmeniz istenebilir. "y" yanıtını verin belirtin.

Birkaç dakika sonra not defteri sunucunuz hazır ve çalışır hale gelir. Not defteri örneklerinizin Cloud Console'da listelendiğini görebilirsiniz.

206adf3905413dfa.png

Codelab not defterini yükleme

Not defteri örneği oluşturulduktan sonra codelab'in Jupyter not defterini yüklemek için bu bağlantıyı tıklayın. Kullanılacak not defteri örneğini seçin. Not defteri otomatik olarak açılır.

Not defterini yürütme

Laboratuvarın geri kalanı için not defterindeki talimatları uygulayın. "Kurulum" bölümünde parçasını çalıştırmadan önce kendi değerlerinizi girmeniz gerekir.

(Kendi projenizi kullanıyorsanız geri dönüp bu laboratuvarın "Temizlik" bölümünü tamamlamayı unutmayın).

5. Temizleme

Geçici bir codelab hesabı kullanıyorsanız bunu yapmanız gerekmez, ancak kendi projenizi kullanıyorsanız Pipelines kurulumunuzu ve Notebook'unuzu kaldırmak isteyebilirsiniz.

Ardışık düzenler GKE kümesini yayından kaldırma

Ardışık düzenler kümesini Cloud Console'dan silebilirsiniz. (GKE kümesini yeniden kullanmak istiyorsanız yalnızca Pipelines yüklemesini silebilirsiniz).

AI Not Defteri örneğini silme

"Not Defteri"ni çalıştırdıysanız kod laboratuvarı kapsamında, not defteri örneğini Cloud Console'dan DELETE veya DURDUR.

İsteğe bağlı: GitHub jetonunu kaldırın

https://github.com/settings/tokens adresine gidin ve oluşturulan jetonu kaldırın.

6. Ekler

Koda bakış

Ardışık düzeni tanımlama

Bu codelab'de kullanılan ardışık düzen burada tanımlanmıştır.

Şimdi, dönüşüm kavramının nasıl tanımlandığına ve bileşenlerinin (adımlar) nasıl tanımlandığına bakalım. Burada bazı önemli noktalara değineceğiz, ancak daha ayrıntılı bilgi için belgeleri inceleyin.

Kubeflow Ardışık Düzeni adımları container tabanlıdır. Ardışık düzen oluştururken, önceden oluşturulmuş container görüntülerine sahip önceden oluşturulmuş bileşenleri kullanabilir veya kendi bileşenlerinizi derleyebilirsiniz. Bu codelab için kendi uygulamamızı derledik.

Ardışık düzen adımlarından dördü, bileşen tanımı dosyaları aracılığıyla erişilen yeniden kullanılabilir bileşenler üzerinden tanımlanır. Bu ilk kod snippet'inde, bu bileşen tanımı dosyalarına URL'leri üzerinden erişiyoruz ve bu tanımları kullanarak "işlemler"i oluşturuyoruz. Ardışık düzen adımı oluşturmak için kullanacağız.

import kfp.dsl as dsl
import kfp.gcp as gcp
import kfp.components as comp

...

copydata_op = comp.load_component_from_url(
  'https://raw.githubusercontent.com/kubeflow/examples/master/github_issue_summarization/pipelines/components/t2t/datacopy_component.yaml'
  )

train_op = comp.load_component_from_url(
  'https://raw.githubusercontent.com/kubeflow/examples/master/github_issue_summarization/pipelines/components/t2t/train_component.yaml'
  )

Aşağıda, eğitim operasyonu için yaml biçimindeki bileşen tanımlarından biri verilmiştir. Giriş, çıkış, container görüntüsü ve container giriş noktası bağımsız değişkenlerinin tanımlandığını görüyorsunuz.

name: Train T2T model
description: |
  A Kubeflow Pipeline component to train a Tensor2Tensor
  model
metadata:
  labels:
    add-pod-env: 'true'
inputs:
  - name: train_steps
    description: '...'
    type: Integer
    default: 2019300
  - name: data_dir
    description: '...'
    type: GCSPath
  - name: model_dir
    description: '...'
    type: GCSPath
  - name: action
    description: '...'
    type: String
  - name: deploy_webapp
    description: '...'
    type: String
outputs:
  - name: launch_server
    description: '...'
    type: String
  - name: train_output_path
    description: '...'
    type: GCSPath
  - name: MLPipeline UI metadata
    type: UI metadata
implementation:
  container:
    image: gcr.io/google-samples/ml-pipeline-t2ttrain:v3ap
    args: [
      --data-dir, {inputValue: data_dir},
      --action, {inputValue: action},
      --model-dir, {inputValue: model_dir},
      --train-steps, {inputValue: train_steps},
      --deploy-webapp, {inputValue: deploy_webapp},
      --train-output-path, {outputPath: train_output_path}
    ]
    env:
      KFP_POD_NAME: "{{pod.name}}"
    fileOutputs:
      launch_server: /tmp/output
      MLPipeline UI metadata: /mlpipeline-ui-metadata.json

Aşağıda göreceğimiz gibi, dsl.ContainerOp oluşturucu aracılığıyla bir ardışık düzen adımı da tanımlayabilirsiniz.

Ardışık düzen tanımının büyük bir kısmı aşağıda verilmiştir. Ardışık düzen girişlerini (ve varsayılan değerlerini) tanımlıyoruz. Ardından ardışık düzen adımlarını tanımlıyoruz. Çoğu durumda ama aynı zamanda yeni bir "hizmet" adımını ContainerOp aracılığıyla satır içi yaparak container görüntüsünü ve giriş noktası bağımsız değişkenlerini doğrudan belirtin.

train, log_model ve serve adımlarının, önceki adımlardaki çıkışlara giriş olarak eriştiğini görebilirsiniz. Bunun nasıl belirtildiği hakkında daha fazla bilgiyi burada bulabilirsiniz.

@dsl.pipeline(
 name='Github issue summarization',
 description='Demonstrate Tensor2Tensor-based training and TF-Serving'
)
def gh_summ(  #pylint: disable=unused-argument
 train_steps: 'Integer' = 2019300,
 project: str = 'YOUR_PROJECT_HERE',
 github_token: str = 'YOUR_GITHUB_TOKEN_HERE',
 working_dir: 'GCSPath' = 'gs://YOUR_GCS_DIR_HERE',
 checkpoint_dir: 'GCSPath' = 'gs://aju-dev-demos-codelabs/kubecon/model_output_tbase.bak2019000/',
 deploy_webapp: str = 'true',
 data_dir: 'GCSPath' = 'gs://aju-dev-demos-codelabs/kubecon/t2t_data_gh_all/'
 ):


 copydata = copydata_op(
   data_dir=data_dir,
   checkpoint_dir=checkpoint_dir,
   model_dir='%s/%s/model_output' % (working_dir, dsl.RUN_ID_PLACEHOLDER),
   action=COPY_ACTION,
   )


 train = train_op(
   data_dir=data_dir,
   model_dir=copydata.outputs['copy_output_path'],
   action=TRAIN_ACTION, train_steps=train_steps,
   deploy_webapp=deploy_webapp
   )

 serve = dsl.ContainerOp(
     name='serve',
     image='gcr.io/google-samples/ml-pipeline-kubeflow-tfserve:v6',
     arguments=["--model_name", 'ghsumm-%s' % (dsl.RUN_ID_PLACEHOLDER,),
         "--model_path", train.outputs['train_output_path']
         ]
     )

 train.set_gpu_limit(1)

"Tren"in zorunlu tutulduğunu ve kümedeki en az 1 GPU'su olan bir düğümde çalıştırma adımıdır.

  train.set_gpu_limit(1)

Ardışık düzendeki son adım (satır içi olarak da tanımlanır) koşulludir. "serve" sonrasında çalışacak yalnızca eğitim adımı launch_server çıkışının "true" dizesi olması durumunda adım tamamlanır. Eğitilen T2T modelinden sorun özeti talebinde bulunmak için kullandığımız "tahmin web uygulaması"nı kullanıma sunar.

 with dsl.Condition(train.outputs['launch_server'] == 'true'):
   webapp = dsl.ContainerOp(
       name='webapp',
       image='gcr.io/google-samples/ml-pipeline-webapp-launcher:v1',
       arguments=["--model_name", 'ghsumm-%s' % (dsl.RUN_ID_PLACEHOLDER,),
           "--github_token", github_token]

       )
   webapp.after(serve)

Bileşen kapsayıcı görüntüsü tanımları

Kubeflow Ardışık Düzeni belgelerinde, kendi bileşenlerinizi derlemeyle ilgili bazı en iyi uygulamalar açıklanmaktadır. Bu süreç kapsamında bir container görüntüsü tanımlamanız ve oluşturmanız gerekir. Bu codelab'in ardışık düzeninin bileşen adımlarını burada bulabilirsiniz. Dockerfile tanımları containers alt dizinlerinde bulunur, ör. burada bulabilirsiniz.

Eğitim için GPU'lu öncelikli sanal makineleri kullanma

Öncelikli Sanal Makineler, maksimum 24 saat süren ve kullanılabilirlik garantisi sağlamayan Compute Engine Sanal Makine örnekleridir. Öncelikli sanal makinelerin fiyatı, standart Compute Engine sanal makinelerinin fiyatlandırmasından düşüktür.

Google Kubernetes Engine (GKE) ile öncelikli sanal makineler kullanan bir küme veya düğüm havuzu kurmak kolaydır. Bu tür bir düğüm havuzu oluşturmak için öncelikli örneklere bağlı GPU'lar kullanabilirsiniz. Bunlar, GPU özellikli normal düğümlerle aynı şekilde çalışır, ancak GPU'lar yalnızca örneğin kullanım ömrü boyunca kalır.

Aşağıdakine benzer bir komut çalıştırarak, küme adınız ve alt bölgeniz ile aşağıdaki komutu düzenleyerek ve hızlandırıcı türü ile sayısını gereksinimlerinize göre ayarlayarak kümeniz için öncelikli, GPU özellikli bir düğüm havuzu oluşturabilirsiniz. İsteğe bağlı olarak, düğüm havuzunu mevcut iş yüklerine göre otomatik olarak ölçeklendirilecek şekilde tanımlayabilirsiniz.

gcloud container node-pools create preemptible-gpu-pool \
    --cluster=<your-cluster-name> \
    --zone <your-cluster-zone> \
    --enable-autoscaling --max-nodes=4 --min-nodes=0 \
    --machine-type n1-highmem-8 \
    --preemptible \
    --node-taints=preemptible=true:NoSchedule \
    --scopes cloud-platform --verbosity error \
    --accelerator=type=nvidia-tesla-k80,count=4

Cloud Console aracılığıyla da düğüm havuzu oluşturabilirsiniz.

Öncelikli GKE düğümlerini kullanan bir Kubeflow Ardışık Düzeni tanımlama

Kubeflow'u GKE'de çalıştırıyorsanız artık bir veya daha fazla ardışık düzen adımının (bileşen) öncelikli düğümlerde çalıştırıldığı Kubeflow Pipelines'ı tanımlamak ve çalıştırmak kolaydır. Doğru sonuçları vermek amacıyla öncelikli sanal makinelerin kullanılması için öncelikli olarak belirlediğiniz adımlar ihtiyatlı olmalıdır (bir adımı birden fazla kez çalıştırırsanız sonuç aynı olur) veya kesintiye uğrarsa adımın kaldığı yerden devam edebilmesi için kontrol noktası çalışmalıdır.

Bir Kubeflow Ardışık Düzeni tanımlarken operasyonu aşağıdaki şekilde değiştirerek belirli bir adımın öncelikli bir düğümde çalışması gerektiğini belirtebilirsiniz:

your_pipelines_op.apply(gcp.use_preemptible_nodepool())

Ayrıntılar için belgeleri inceleyin.

Düğüm öncelikliyse bu adımı birkaç kez yeniden denemek de isteyebilirsiniz. Bunu aşağıdaki gibi yapabilirsiniz. Burada 5 yeniden deneme olduğunu belirtiyoruz.

your_pipelines_op.set_gpu_limit(1).apply(gcp.use_preemptible_nodepool()).set_retry(5)

Öncelikli bir sanal makinede eğitim adımını çalıştırmak için bu codelab'de kullandığımız Kubeflow ardışık düzenini düzenlemeyi deneyin.

Ek olarak öncelikli bir düğüm havuzu kullanmak (yukarıda belirtildiği gibi oluşturduğunuzda emin olun) ve 5 kez yeniden denemek için ardışık düzen spesifikasyonunda aşağıdaki satırı değiştirin:

  train.set_gpu_limit(1)

Ardından ardışık düzeni yeniden derleyin, yeni sürümü yükleyin (ona yeni bir ad verin) ve ardışık düzenin yeni sürümünü çalıştırın.