Aracılığıyla paylaş


Bileşenler ve işlem hatları için girişleri ve çıkışları yönetme

Azure Machine Learning işlem hatları hem bileşen hem de işlem hattı düzeylerinde girişleri ve çıkışları destekler. Bu makalede işlem hattı ve bileşen girişleri ile çıkışları ve bunların nasıl yönetileceğini açıklanmaktadır.

Bileşen düzeyinde girişler ve çıkışlar bileşen arabirimini tanımlar. Bir bileşenin çıkışını aynı üst işlem hattındaki başka bir bileşen için giriş olarak kullanabilir ve bileşenler arasında veri veya modellerin geçirilmesini sağlayabilirsiniz. Bu bağlantı, işlem hattı içindeki veri akışını temsil eder.

İşlem hattı düzeyinde, giriş ve çıkışları kullanarak farklı veri girişlerine veya parametrelerine sahip işlem hattı işlerini gönderebilirsiniz.learning_rate Girişler ve çıkışlar özellikle BIR REST uç noktası aracılığıyla işlem hattı çağırdığınızda kullanışlıdır. İşlem hattı girişine farklı değerler atayabilir veya farklı işlem hattı işlerinin çıkışına erişebilirsiniz. Daha fazla bilgi için bkz . Toplu iş uç noktaları için iş ve giriş verileri oluşturma.

Giriş ve çıkış türleri

Aşağıdaki türler, bileşenlerin veya işlem hatlarının hem girişleri hem de çıkışları olarak desteklenir:

  • Veri türleri. Daha fazla bilgi için bkz. Veri türleri.

    • uri_file
    • uri_folder
    • mltable
  • Model türleri.

    • mlflow_model
    • custom_model

Aşağıdaki ilkel türler yalnızca girişler için de desteklenir:

  • İlkel türler
    • string
    • number
    • integer
    • boolean

Temel tür çıkışı desteklenmez.

Örnek girişler ve çıkışlar

Bu örnekler, Azure Machine Learning örnekleri GitHub deposundaki NYC Taxi Data Regression işlem hattından alınmaktadır.

  • Tren bileşeni adlı test_split_ratiobir number girişe sahiptir.
  • Hazırlık bileşeninin bir uri_folder tür çıkışı vardır. Bileşen kaynak kodu giriş klasöründen CSV dosyalarını okur, dosyaları işler ve işlenen CSV dosyalarını çıkış klasörüne yazar.
  • Tren bileşeni bir mlflow_model tür çıkışına sahiptir. Bileşen kaynak kodu, yöntemini kullanarak mlflow.sklearn.save_model eğitilen modeli kaydeder.

Çıktı serileştirme

Veri veya model çıkışlarının kullanılması çıkışları seri hale getirir ve bunları bir depolama konumuna dosya olarak kaydeder. Sonraki adımlar, bu depolama konumunu takarak veya dosyaları indirerek veya işlem dosya sistemine yükleyerek iş yürütme sırasında dosyalara erişebilir.

Bileşen kaynak kodu genellikle bellekte depolanan çıkış nesnesini dosyalar halinde seri hale getirmelidir. Örneğin, bir pandas veri çerçevesini CSV dosyasında seri hale getirebilirsiniz. Azure Machine Learning, nesne serileştirme için standartlaştırılmış yöntem tanımlamaz. Nesneleri dosyalar halinde seri hale getirmek için tercih ettiğiniz yöntemleri seçme esnekliğine sahipsiniz. Aşağı akış bileşeninde, bu dosyaların seri durumdan çıkarılıp okunmasını seçebilirsiniz.

Veri türü giriş ve çıkış yolları

Veri varlığı girişleri ve çıkışları için veri konumuna işaret eden bir yol parametresi belirtmeniz gerekir. Aşağıdaki tabloda, parametre örnekleriyle birlikte path Azure Machine Learning işlem hattı giriş ve çıkışları için desteklenen veri konumları gösterilmektedir.

Konum Girdi Çıktı Örnek
Yerel bilgisayarınızdaki bir yol ./home/<username>/data/my_data
Ortak http/s sunucusundaki bir yol https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv
Azure Depolama'da bir yol * wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>
veya
abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
Azure Machine Learning veri deposundaki yol azureml://datastores/<data_store_name>/paths/<path>
Veri varlığının yolu azureml:my_data:<version>

* Verileri okumak için ek kimlik yapılandırması gerekebileceğinden giriş için Azure Depolama'nın doğrudan kullanılması önerilmez. Çeşitli işlem hattı iş türlerinde desteklenen Azure Machine Learning veri deposu yollarını kullanmak daha iyidir.

Veri türü giriş ve çıkış modları

Veri türü girişleri ve çıkışları için, işlem hedefinin verilere nasıl erişeceğini tanımlamak için çeşitli indirme, karşıya yükleme ve bağlama modlarından birini seçebilirsiniz. Aşağıdaki tabloda farklı giriş ve çıkış türleri için desteklenen modlar gösterilmektedir.

Tür upload download ro_mount rw_mount direct eval_download eval_mount
uri_folder girdi
uri_file girdi
mltable girdi
uri_folder çıktı
uri_file çıktı
mltable çıktı

Veya ro_mount rw_mount modları çoğu durumda önerilir. Daha fazla bilgi için bkz . Modlar.

İşlem hattı grafiklerindeki girişler ve çıkışlar

Azure Machine Learning stüdyosu'daki işlem hattı işi sayfasında, bileşen girişleri ve çıkışları giriş/çıkış bağlantı noktaları olarak adlandırılan küçük daireler olarak görünür. Bu bağlantı noktaları işlem hattındaki veri akışını temsil eder. İşlem hattı düzeyi çıkışı, kolay tanımlama için mor kutularda görüntülenir.

NYC Taxi Veri Regresyon işlem hattı grafiğinin aşağıdaki ekran görüntüsünde birçok bileşen ve işlem hattı girişi ve çıkışı gösterilmektedir.

İşlem hattı giriş ve çıkış bağlantı noktalarını vurgulayan ekran görüntüsü.

Bir giriş/çıkış bağlantı noktasının üzerine geldiğinizde, tür görüntülenir.

Bağlantı noktasının üzerine gelindiğinde bağlantı noktası türünü vurgulayan ekran görüntüsü.

İşlem hattı grafı ilkel tür girişlerini görüntülemez. Bu girişler, işlem hattı düzeyinde girişler için işlem hattı İşine genel bakış panelinin Ayarlar sekmesinde veya bileşen düzeyi girişleri için bileşen panelinde görünür. Bileşen panelini açmak için grafikteki bileşene çift tıklayın.

İşe genel bakış ayarı panelini vurgulayan ekran görüntüsü.

Studio Designer'da bir işlem hattını düzenlediğinizde işlem hattı girişleri ve çıkışları İşlem hattı arabirim panelinde, bileşen girişleri ve çıkışları ise bileşen panelinde yer alır.

Tasarımcı'da işlem hattı arabirimini vurgulayan ekran görüntüsü.

Bileşen girişlerini/çıkışlarını işlem hattı düzeyine yükseltme

Bir bileşenin giriş/çıkışını işlem hattı düzeyine yükseltme, işlem hattı işi gönderdiğinizde bileşenin giriş/çıkışının üzerine yazmanıza olanak tanır. Bu özellik özellikle REST uç noktalarını kullanarak işlem hatlarını tetiklemede kullanışlıdır.

Aşağıdaki örneklerde bileşen düzeyi girişlerinin/çıkışlarının işlem hattı düzeyi girişlerine/çıkışlarına nasıl yükseltilebilecekleri gösterilmektedir.

Aşağıdaki işlem hattı, üç girişi ve üç çıkışı işlem hattı düzeyine yükseltmektedir. Örneğin, pipeline_job_training_max_epocs kök düzeyindeki bölümü altında inputs bildirildiği için işlem hattı düzeyi girişidir.

train_job jobs bölümünde altında adlı max_epocs girişe olarak ${{parent.inputs.pipeline_job_training_max_epocs}}başvurulur, yani train_job'nin max_epocs girişi işlem hattı düzeyindeki pipeline_job_training_max_epocs girişe başvurur. İşlem hattı çıkışı aynı şema kullanılarak yükseltilir.

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: 1b_e2e_registered_components
description: E2E dummy train-score-eval pipeline with registered components

inputs:
  pipeline_job_training_max_epocs: 20
  pipeline_job_training_learning_rate: 1.8
  pipeline_job_learning_rate_schedule: 'time-based'

outputs: 
  pipeline_job_trained_model:
    mode: upload
  pipeline_job_scored_data:
    mode: upload
  pipeline_job_evaluation_report:
    mode: upload

settings:
 default_compute: azureml:cpu-cluster

jobs:
  train_job:
    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:
        type: vs_code
      my_jupyter_lab:
        type: jupyter_lab
      my_tensorboard:
        type: tensor_board
        log_dir: "outputs/tblogs"
    #  my_ssh:
    #    type: tensor_board
    #    ssh_public_keys: <paste the entire pub key content>
    #    nodes: all # Use the `nodes` property to pick which node you want to enable interactive services on. If `nodes` are not selected, by default, interactive applications are only enabled on the head node.

  score_job:
    type: command
    component: azureml:my_score@latest
    inputs:
      model_input: ${{parent.jobs.train_job.outputs.model_output}}
      test_data: 
        type: uri_folder 
        path: ./data
    outputs:
      score_output: ${{parent.outputs.pipeline_job_scored_data}}

  evaluate_job:
    type: command
    component: azureml:my_eval@latest
    inputs:
      scoring_result: ${{parent.jobs.score_job.outputs.score_output}}
    outputs:
      eval_output: ${{parent.outputs.pipeline_job_evaluation_report}}

Tam örneği , kayıtlı bileşenlere sahip train-score-eval işlem hattında Azure Machine Learning örnekleri deposunda bulabilirsiniz.

İsteğe bağlı girişleri tanımlama

Varsayılan olarak, tüm girişler gereklidir ve varsayılan bir değere sahip olmalıdır veya her işlem hattı işi gönderdiğinizde bir değer atanmalıdır. Ancak, isteğe bağlı bir giriş tanımlayabilirsiniz.

Not

İsteğe bağlı çıkışlar desteklenmez.

İsteğe bağlı girişleri ayarlamak iki senaryoda yararlı olabilir:

  • İsteğe bağlı bir veri/model türü girişi tanımlarsanız ve işlem hattı işini gönderirken buna değer atamazsanız, işlem hattı bileşeninde bu veri bağımlılığı yoktur. Bileşenin giriş bağlantı noktası herhangi bir bileşene veya veri/model düğümüne bağlı değilse, işlem hattı önceki bir bağımlılığı beklemek yerine bileşeni doğrudan çağırır.

  • İşlem hattı için ayarlar continue_on_step_failure = True ancak öğesinden node2 node1gerekli girişi kullanırsanız, başarısız olursa node1 yürütülmüyor.node2 Giriş isteğe bağlıysa node1 , node2 başarısız olsa node1 bile yürütülür. Aşağıdaki grafikte bu senaryo gösterilmektedir.

    İsteğe bağlı girişin düzenleme mantığını gösteren ve hataya devam eden ekran görüntüsü.

Aşağıdaki kod örneğinde isteğe bağlı girişin nasıl tanımlanacağı gösterilmektedir. Giriş olarak optional = trueayarlandığında, örneğin vurgulanan satırlarında olduğu gibi komut satırı girişlerini benimsemek için komutunu kullanmanız $[[]] gerekir.

$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
name: train_data_component_cli
display_name: train_data
description: A example train component
tags:
  author: azureml-sdk-team
type: command
inputs:
  training_data: 
    type: uri_folder
  max_epocs:
    type: integer
    optional: true
  learning_rate: 
    type: number
    default: 0.01
    optional: true
  learning_rate_schedule: 
    type: string
    default: time-based
    optional: true
outputs:
  model_output:
    type: uri_folder
code: ./train_src
environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
command: >-
  python train.py 
  --training_data ${{inputs.training_data}} 
  $[[--max_epocs ${{inputs.max_epocs}}]]
  $[[--learning_rate ${{inputs.learning_rate}}]]
  $[[--learning_rate_schedule ${{inputs.learning_rate_schedule}}]]
  --model_output ${{outputs.model_output}}

Çıkış yollarını özelleştirme

Varsayılan olarak, bileşen çıkışı işlem hattı azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}için ayarladığınız içinde {default_datastore} depolanır. Ayarlanmadıysa, varsayılan değer çalışma alanı blob depolama alanıdır.

İş {name} , iş yürütme zamanında çözümlenir ve {output_name} YAML bileşeninde tanımladığınız addır. Çıkış yolunu tanımlayarak çıkışın depolandığı yeri özelleştirebilirsiniz.

Kayıtlı bileşenlere sahip train-score-eval işlem hattındaki pipeline.yml dosyası, üç işlem hattı düzeyinde çıkışı olan bir işlem hattı tanımlar. Çıktı için özel çıkış yolları ayarlamak için pipeline_job_trained_model aşağıdaki komutu kullanabilirsiniz.

# define the custom output path using datastore uri
# add relative path to your blob container after "azureml://datastores/<datastore_name>/paths"
output_path="azureml://datastores/{datastore_name}/paths/{relative_path_of_container}"  

# create job and define path using --outputs.<outputname>
az ml job create -f ./pipeline.yml --set outputs.pipeline_job_trained_model.path=$output_path  

Çıkışları indirme

Çıkışları işlem hattı veya bileşen düzeyinde indirebilirsiniz.

İşlem hattı düzeyi çıkışlarını indirme

Bir işin tüm çıkışlarını indirebilir veya belirli bir çıkışı indirebilirsiniz.

# Download all the outputs of the job
az ml job download --all -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>

# Download a specific output
az ml job download --output-name <OUTPUT_PORT_NAME> -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>

Bileşen çıkışlarını indirme

Bir alt bileşenin çıkışlarını indirmek için önce işlem hattı işinin tüm alt işlerini listeleyin ve ardından çıkışları indirmek için benzer kodu kullanın.

# List all child jobs in the job and print job details in table format
az ml job list --parent-job-name <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID> -o table

# Select the desired child job name to download output
az ml job download --all -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>

Çıkışı adlandırılmış varlık olarak kaydetme

Bir bileşen veya işlem hattının çıkışını, çıkışa ve version atayarak name adlandırılmış varlık olarak kaydedebilirsiniz. Kayıtlı varlık, çalışma alanınızda stüdyo kullanıcı arabirimi, CLI veya SDK aracılığıyla listelenebilir ve gelecekteki çalışma alanı işlerinde başvurulabilir.

İşlem hattı düzeyi çıkışını kaydetme

display_name: register_pipeline_output
type: pipeline
jobs:
  node:
    type: command
    inputs:
      component_in_path:
        type: uri_file
        path: https://dprepdata.blob.core.windows.net/demo/Titanic.csv
    component: ../components/helloworld_component.yml
    outputs:
      component_out_path: ${{parent.outputs.component_out_path}}
outputs:
  component_out_path:
    type: mltable
    name: pipeline_output  # Define name and version to register pipeline output
    version: '1'
settings:
  default_compute: azureml:cpu-cluster

Bileşen çıkışını kaydetme

display_name: register_node_output
type: pipeline
jobs:
  node:
    type: command
    component: ../components/helloworld_component.yml
    inputs:
      component_in_path:
        type: uri_file
        path: 'https://dprepdata.blob.core.windows.net/demo/Titanic.csv'
    outputs:
      component_out_path:
        type: uri_folder
        name: 'node_output'  # Define name and version to register a child job's output
        version: '1'
settings:
  default_compute: azureml:cpu-cluster