Aracılığıyla paylaş


Azure Machine Learning CLI ile bileşenleri kullanarak makine öğrenmesi işlem hatları oluşturma ve çalıştırma

ŞUNUN IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

Bu makalede, Azure CLI ve bileşenleri kullanarak makine öğrenmesi işlem hatları oluşturmayı ve çalıştırmayı öğreneceksiniz. Bileşenleri kullanmadan işlem hatları oluşturabilirsiniz, ancak bileşenler en fazla esneklik ve yeniden kullanım sunar. Azure Machine Learning İşlem Hatları YAML'de tanımlanabilir ve CLI'dan çalıştırılabilir, Python'da yazılabilir veya sürükleyip bırakma kullanıcı arabirimiyle Azure Machine Learning stüdyosu Tasarım Aracı oluşturulabilir. Bu belge CLI'ya odaklanır.

Önkoşullar

  • Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning'in ücretsiz veya ücretli sürümünü deneyin.

  • Azure Machine Learning çalışma alanı. Çalışma alanı kaynakları oluşturun.

  • Machine Learning için Azure CLI uzantısını yükleyin ve ayarlayın.

  • Örnek deposunu kopyalayın:

    git clone https://github.com/Azure/azureml-examples --depth 1
    cd azureml-examples/cli/jobs/pipelines-with-components/basics
    

Önerilen ön okuma

Bileşenle ilk işlem hattınızı oluşturma

Şimdi bir örnek kullanarak bileşenlerle ilk işlem hattınızı oluşturalım. Bu bölüm, bir işlem hattının ve bileşenin Azure Machine Learning'de nasıl göründüğüne ilişkin ilk izlenimi size somut bir örnekle sunmayı amaçlamaktadır.

Deponun cli/jobs/pipelines-with-components/basicsdizininden azureml-examples alt dizine 3b_pipeline_with_data gidin. Bu dizinde üç tür dosya vardır. Bunlar, kendi işlem hattınızı oluştururken oluşturmanız gereken dosyalardır.

  • pipeline.yml: Bu YAML dosyası, makine öğrenmesi işlem hattını tanımlar. Bu YAML dosyasında, tam makine öğrenmesi görevinin çok adımlı bir iş akışına nasıl bölündiği açıklanır. Örneğin, geçmiş verileri kullanarak satış tahmini modelini eğitmeye yönelik basit bir makine öğrenmesi görevini göz önünde bulundurarak, veri işleme, model eğitimi ve model değerlendirme adımlarıyla sıralı bir iş akışı oluşturmak isteyebilirsiniz. Her adım, iyi tanımlanmış bir arabirime sahip olan ve bağımsız olarak geliştirilebilen, test edilebilen ve iyileştirilebilen bir bileşendir. İşlem hattı YAML, alt adımların işlem hattındaki diğer adımlara nasıl bağlanacağını da tanımlar; örneğin, model eğitim adımı bir model dosyası oluşturur ve model dosyası bir model değerlendirme adımına geçer.

  • component.yml: Bu YAML dosyası bileşeni tanımlar. Aşağıdaki bilgileri paketler:

    • Meta veriler: ad, görünen ad, sürüm, açıklama, tür vb. Meta veriler, bileşeni açıklamaya ve yönetmeye yardımcı olur.
    • Arabirim: girişler ve çıkışlar. Örneğin, bir model eğitim bileşeni giriş olarak eğitim verilerini ve dönem sayısını alır ve çıktı olarak eğitilmiş bir model dosyası oluşturur. Arabirim tanımlandıktan sonra, farklı ekipler bileşeni bağımsız olarak geliştirebilir ve test edebilir.
    • Komut, kod ve ortam: bileşeni çalıştırmak için komut, kod ve ortam. Komut, bileşeni yürütmek için kullanılan kabuk komutudur. Kod genellikle bir kaynak kod dizinine başvurur. Ortam bir Azure Machine Learning ortamı (seçilmiş veya müşteri tarafından oluşturulmuş), docker görüntüsü veya conda ortamı olabilir.
  • component_src: Bu, belirli bir bileşenin kaynak kod dizinidir. Bileşende yürütülen kaynak kodunu içerir. Tercih ettiğiniz dili (Python, R...) kullanabilirsiniz. Kod bir kabuk komutuyla yürütülmelidir. Kaynak kodu, bu adımın nasıl yürütüleceğini denetlemek için kabuk komut satırından birkaç giriş alabilir. Örneğin, bir eğitim adımı eğitim sürecini denetlemek için eğitim verilerini, öğrenme oranını, dönem sayısını alabilir. Bir kabuk komutunun bağımsız değişkeni, koda girişleri ve çıkışları geçirmek için kullanılır.

Şimdi örneği kullanarak 3b_pipeline_with_data bir işlem hattı oluşturalım. Her dosyanın ayrıntılı anlamını aşağıdaki bölümlerde açıklıyoruz.

İlk olarak aşağıdaki komutla kullanılabilir işlem kaynaklarınızı listeleyin:

az ml compute list

Bu kümeye sahip değilseniz, komutunu çalıştırarak adlı cpu-cluster bir küme oluşturun:

Not

Sunucusuz işlem kullanmak için bu adımı atlayın.

az ml compute create -n cpu-cluster --type amlcompute --min-instances 0 --max-instances 10

Şimdi aşağıdaki komutla pipeline.yml dosyasında tanımlanan bir işlem hattı işi oluşturun. İşlem hedefini pipeline.yml dosyasında olarak başvurulur azureml:cpu-cluster. İşlem hedefiniz farklı bir ad kullanıyorsa pipeline.yml dosyasında güncelleştirmeyi unutmayın.

az ml job create --file pipeline.yml

İşlem hattı işi hakkında aşağıdaki bilgileri içeren bir JSON sözlüğü almanız gerekir:

Tuş Açıklama
name İşin GUID tabanlı adı.
experiment_name İşlerin stüdyoda düzenlendiği ad.
services.Studio.endpoint İşlem hattı işini izlemek ve gözden geçirmek için bir URL.
status İşin durumu. Bu büyük olasılıkla bu noktada olacaktır Preparing .

İşlem hattının services.Studio.endpoint grafik görselleştirmesini görmek için URL'yi açın.

Screenshot of a graph visualization of the pipeline.

YAML işlem hattı tanımını anlama

şimdi 3b_pipeline_with_data/pipeline.yml dosyasındaki işlem hattı tanımına göz atalım.

Not

Sunucusuz işlem kullanmak için değerini bu dosyada ile default_compute: azureml:serverless değiştirindefault_compute: azureml:cpu-cluster.

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline

display_name: 3b_pipeline_with_data
description: Pipeline with 3 component jobs with data dependencies

settings:
  default_compute: azureml:cpu-cluster

outputs:
  final_pipeline_output:
    mode: rw_mount

jobs:
  component_a:
    type: command
    component: ./componentA.yml
    inputs:
      component_a_input: 
        type: uri_folder
        path: ./data

    outputs:
      component_a_output: 
        mode: rw_mount
  component_b:
    type: command
    component: ./componentB.yml
    inputs:
      component_b_input: ${{parent.jobs.component_a.outputs.component_a_output}}
    outputs:
      component_b_output: 
        mode: rw_mount
  component_c:
    type: command
    component: ./componentC.yml
    inputs:
      component_c_input: ${{parent.jobs.component_b.outputs.component_b_output}}
    outputs:
      component_c_output: ${{parent.outputs.final_pipeline_output}}
      #  mode: upload

Tabloda, işlem hattı YAML şemasının en yaygın kullanılan alanları açıklanmaktadır. Daha fazla bilgi edinmek için tüm işlem hattı YAML şemasına bakın.

anahtar açıklama
Tür Gerekli. İş türü işlem hattı işleri için olmalıdır pipeline .
display_name Studio kullanıcı arabiriminde işlem hattı işinin görünen adı. Studio kullanıcı arabiriminde düzenlenebilir. Çalışma alanı içindeki tüm işlerde benzersiz olması gerekmez.
Işleri Gerekli. İşlem hattı içinde adım olarak çalıştırılacak tek tek işler kümesinin sözlüğü. Bu işler, üst işlem hattı işinin alt işleri olarak kabul edilir. Bu sürümde işlem hattında desteklenen iş türleri şunlardır command : ve sweep
Giriş İşlem hattı işine girişlerin sözlüğü. anahtar, iş bağlamında girişin adı ve değer giriş değeridir. Bu işlem hattı girişlerine$ {{ parent.inputs kullanılarak işlem hattındaki tek bir adımlı işin girişleri tarafından başvurulabilir.<> }} ifadesini input_name.
Çıkış İşlem hattı işinin çıkış yapılandırmaları sözlüğü. Anahtar, iş bağlamındaki çıkışın adıdır ve değer çıkış yapılandırmasıdır. Bu işlem hattı çıkışlarına$ {{ parents.outputs kullanılarak işlem hattındaki tek bir adımlı işin çıkışları tarafından başvurulabilir.<> output_name }} ifadesi.

3b_pipeline_with_data örnekte üç adımlı bir işlem hattı oluşturduk.

  • Üç adım altında jobstanımlanır. Üç adım türü de komut işidir. Her adımın tanımı ilgili component.yml dosyadadır. bileşen YAML dosyalarını 3b_pipeline_with_data dizinin altında görebilirsiniz. sonraki bölümde componentA.yml açıklayacağız.
  • Bu işlem hattı, çoğu gerçek işlem hattında yaygın olan veri bağımlılığına sahiptir. Component_a yerel klasörden ./data(satır 17-20) altındaki veri girişini alır ve çıktısını componentB'ye (29. satır) geçirir. Component_a çıktısı olarak ${{parent.jobs.component_a.outputs.component_a_output}}başvurulabilir.
  • , compute bu işlem hattı için varsayılan işlem değerini tanımlar. altındaki jobs bir bileşen bu bileşen için farklı bir işlem tanımlıyorsa, sistem bileşene özgü ayara saygı gösterir.

Screenshot of the pipeline with data example.

İşlem hattında verileri okuma ve yazma

Yaygın senaryolardan biri, işlem hattınızdaki verileri okumak ve yazmaktır. Azure Machine Learning'de her tür iş (işlem hattı işi, komut işi ve süpürme işi) için verileri okumak ve yazmak için aynı şemayı kullanırız. Yaygın senaryolar için verileri kullanmaya yönelik işlem hattı işi örnekleri aşağıda verilmiştir.

YAML bileşen tanımını anlama

Şimdi bileşen tanımı YAML'yi anlamak için örnek olarak componentA.yml bakalım.

$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
type: command

name: component_a
display_name: componentA
version: 1

inputs:
  component_a_input:
    type: uri_folder

outputs:
  component_a_output:
    type: uri_folder

code: ./componentA_src

environment: 
  image: python

command: >-
  python hello.py --componentA_input ${{inputs.component_a_input}} --componentA_output ${{outputs.component_a_output}}

YAML bileşeninin en yaygın kullanılan şeması tabloda açıklanmıştır. Daha fazla bilgi edinmek için tam bileşen YAML şemasına bakın.

anahtar açıklama
Adı Gerekli. Bileşenin adı. Azure Machine Learning çalışma alanında benzersiz olmalıdır. Küçük harfle başlamalıdır. Küçük harflere, sayılara ve alt çizgiye(_) izin verin. Uzunluk üst sınırı 255 karakterdir.
display_name Studio kullanıcı arabiriminde bileşenin görünen adı. Çalışma alanı içinde nonunique olabilir.
komut Komutun yürütülmesini gerekli kılın
kod Yüklenecek ve bileşen için kullanılacak kaynak kod dizinine yönelik yerel yol.
ortamı Gerekli. Bileşeni yürütmek için kullanılan ortam.
Giriş Bileşen girişlerinin sözlüğü. anahtar, bileşen bağlamında girişin adı ve değer de bileşen giriş tanımıdır. Komutta ${{ girişleri kullanılarak girişlere başvurulabilir.<> }} ifadesini input_name.
Çıkış Bileşen çıkışlarının sözlüğü. Anahtar, bileşen bağlamındaki çıkışın adıdır ve değer bileşen çıkış tanımıdır. Çıkışlara komutta ${{ çıkışları kullanılarak başvurulabilir.<> output_name }} ifadesi.
is_deterministic Bileşen girişleri değişmediyse önceki işin sonucunun yeniden kullanılıp yeniden kullanılmayacağı. Varsayılan değer, truevarsayılan olarak yeniden kullanım olarak da bilinir. Olarak false ayarlandığında yaygın senaryo, verileri bir bulut depolama alanından veya URL'den yeniden yüklemeye zorlamaktır.

3b_pipeline_with_data/componentA.yml örneğinde componentA'nın bir veri girişi ve bir veri çıkışı vardır ve bu giriş üst işlem hattındaki diğer adımlara bağlanabilir. Bileşen YAML'deki bölümün altındaki code tüm dosyalar işlem hattı işi gönderilirken Azure Machine Learning'e yüklenir. Bu örnekte, altındaki ./componentA_src dosyalar karşıya yüklenir (componentA.yml 16. satır). Karşıya yüklenen kaynak kodunu Studio kullanıcı arabiriminde görebilirsiniz: Aşağıdaki ekran görüntüsünde gösterildiği gibi ComponentA adımını çift seçin ve Anlık Görüntü sekmesine gidin. Basit bir yazdırma işlemi yapan ve geçerli tarih saatlerini componentA_output yola yazan bir hello-world betiği olduğunu görebiliriz. Bileşen, komut satırı bağımsız değişkeni aracılığıyla giriş ve çıkış alır ve kullanılarak argparsehello.py işlenir.

Screenshot of pipeline with data example showing componentA.

Girdi ve çıktı

Giriş ve çıkış, bir bileşenin arabirimini tanımlar. Giriş ve çıkış değişmez değerlerden (türü string,number,integer veya ) veya booleangiriş şeması içeren bir nesne olabilir.

Nesne girişi (, uri_folder,mltable,,mlflow_modelcustom_model türündeuri_file), üst işlem hattı işindeki diğer adımlara bağlanabilir ve bu nedenle verileri/modeli diğer adımlara geçirebilir. İşlem hattı grafında, nesne türü girişi bir bağlantı noktası olarak işlenir.

Değişmez değer girişleri (string,number,,booleaninteger), çalışma zamanında bileşene geçirebileceğiniz parametrelerdir. Alanın altına default değişmez değer girişlerinin varsayılan değerini ekleyebilirsiniz. ve integer türü içinnumber, ve max alanlarını kullanarak min kabul edilen değerin en düşük ve en yüksek değerini de ekleyebilirsiniz. Giriş değeri min ve max değerlerini aşarsa işlem hattı doğrulama sırasında başarısız olur. Doğrulama, zaman kazanmak için işlem hattı işi göndermeden önce gerçekleşir. Doğrulama CLI, Python SDK ve tasarımcı kullanıcı arabirimi için çalışır. Aşağıdaki ekran görüntüsünde tasarımcı kullanıcı arabiriminde bir doğrulama örneği gösterilmektedir. Benzer şekilde, alanda izin verilen değerleri enum tanımlayabilirsiniz.

Screenshot of the input and output of the train linear regression model component.

Bir bileşene giriş eklemek istiyorsanız üç yeri düzenlemeyi unutmayın:

  • inputs yaml bileşenindeki alan
  • command alanını seçin.
  • Komut satırı girişini işlemek için bileşen kaynak kodu. Önceki ekran görüntüsünde yeşil kutuda işaretlenmiştir.

Girişler ve çıkışlar hakkında daha fazla bilgi edinmek için bkz . Bileşen ve işlem hattı girişlerini ve çıkışlarını yönetme.

Ortam

Ortam, bileşeni yürütmek için ortamı tanımlar. Bir Azure Machine Learning ortamı (seçilmiş veya özel kayıtlı), docker görüntüsü veya conda ortamı olabilir. Aşağıdaki örneklere bakın.

Bileşeni yeniden kullanmak ve paylaşmak için kaydetme

Bazı bileşenler belirli bir işlem hattına özgü olsa da, bileşenlerin gerçek avantajı yeniden kullanım ve paylaşımdır. Yeniden kullanılabilir hale getirmek için Machine Learning çalışma alanınıza bir bileşen kaydedin. Kayıtlı bileşenler, bileşeni güncelleştirebilmeniz için otomatik sürüm oluşturma desteği sunar, ancak daha eski bir sürüm gerektiren işlem hatlarının çalışmaya devam edeceğinden emin olabilirsiniz.

azureml-examples deposunda dizinine cli/jobs/pipelines-with-components/basics/1b_e2e_registered_components gidin.

Bir bileşeni kaydetmek için komutunu az ml component create kullanın:

az ml component create --file train.yml
az ml component create --file score.yml
az ml component create --file eval.yml

Bu komutlar tamamlandıktan sonra, Studio'da Varlık -> Bileşenler altında bileşenleri görebilirsiniz:

Screenshot of Studio showing the components that were just registered.

Bir bileşen seçin. Bileşenin her sürümü için ayrıntılı bilgiler görürsünüz.

Ayrıntılar sekmesinde, bileşenin ad, oluşturan, sürüm vb. gibi temel bilgilerini görürsünüz. Etiketler ve Açıklama için düzenlenebilir alanlar görürsünüz. Etiketler, hızlı bir şekilde aranan anahtar sözcükler eklemek için kullanılabilir. Açıklama alanı Markdown biçimlendirmesini destekler ve bileşeninizin işlevselliğini ve temel kullanımını açıklamak için kullanılmalıdır.

İşler sekmesinde, bu bileşeni kullanan tüm işlerin geçmişini görürsünüz.

İşlem hattı işi YAML dosyasında kayıtlı bileşenleri kullanma

İşlem hattı YAML'de kayıtlı bileşenin nasıl kullanılacağını tanıtım olarak kullanmak için kullanalım 1b_e2e_registered_components . Dizine 1b_e2e_registered_components gidin, dosyayı açın pipeline.yml . ve outputs alanlarındaki inputs anahtarlar ve değerler, daha önce tartışılanlara benzer. Tek önemli fark, girişlerdeki jobs.<JOB_NAME>.component alanın değeridircomponent. component Değer biçimindedirazureml:<COMPONENT_NAME>:<COMPONENT_VERSION>. train-job Örneğin tanım, kayıtlı bileşenin my_train kullanılması gereken en son sürümü belirtir:

type: command
component: azureml:my_train@latest
inputs:
  training_data: 
    type: uri_folder 
    path: ./data      
  max_epocs: ${{parent.inputs.pipeline_job_training_max_epocs}}
  learning_rate: ${{parent.inputs.pipeline_job_training_learning_rate}}
  learning_rate_schedule: ${{parent.inputs.pipeline_job_learning_rate_schedule}}
outputs:
  model_output: ${{parent.outputs.pipeline_job_trained_model}}
services:
  my_vscode:

Bileşenleri yönetme

CLI (v2) kullanarak bileşen ayrıntılarını denetleyebilir ve bileşeni yönetebilirsiniz. Bileşen komutuyla ilgili ayrıntılı yönergeleri almak için kullanın az ml component -h . Aşağıdaki tabloda tüm kullanılabilir komutlar listelenir. Azure CLI başvurusundaki diğer örneklere bakın.

komutlar açıklama
az ml component create Bileşen oluşturma
az ml component list Çalışma alanında bileşenleri listeleme
az ml component show Bileşenin ayrıntılarını gösterme
az ml component update Bir bileşeni güncelleştirme. Yalnızca birkaç alan (açıklama, display_name) desteği güncelleştirmesi
az ml component archive Bileşen kapsayıcısı arşivle
az ml component restore Arşivlenmiş bileşeni geri yükleme

Sonraki adımlar