İşlem hattında hiper parametre ayarlaması yapma (v2)
ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)
Python SDK azure-ai-ml v2 (geçerli)
Bu makalede Azure Machine Learning işlem hattında hiper parametre ayarlamayı öğreneceksiniz.
Önkoşul
- Hyperparameter tuning nedir ve Azure Machine Learning'de SweepJob kullanarak hiper parametre ayarlamanın nasıl yapıldığını anlayın.
- Azure Machine Learning işlem hattı nedir anlama
- Giriş olarak hiper parametre alan bir komut bileşeni oluşturun.
Azure Machine Learning işlem hattında hiper parametre ayarlaması yapma
Bu bölümde, CLI v2 ve Python SDK'sını kullanarak Azure Machine Learning işlem hattında hiper parametre ayarlamanın nasıl yapılacağını açıklanmaktadır. Her iki yaklaşım da aynı önkoşulu paylaşır: zaten bir komut bileşeniniz oluşturulmuştur ve komut bileşeni hiper parametreleri giriş olarak alır. Henüz bir komut bileşeniniz yoksa. Önce bir komut bileşeni oluşturmak için aşağıdaki bağlantıları izleyin.
CLI v2
Bu makalede kullanılan örnek azureml-example deposunda bulunabilir. Örneği denetlemek için [azureml-examples/cli/jobs/pipelines-with-components/pipeline_with_hyperparameter_sweep adresine gidin.
içinde train.yaml
tanımlanmış bir komut bileşeniniz olduğunu varsayalım. İki aşamalı işlem hattı işi (eğit ve tahmin) YAML dosyası aşağıdaki gibi görünür.
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: pipeline_with_hyperparameter_sweep
description: Tune hyperparameters using TF component
settings:
default_compute: azureml:cpu-cluster
jobs:
sweep_step:
type: sweep
inputs:
data:
type: uri_file
path: wasbs://datasets@azuremlexamples.blob.core.windows.net/iris.csv
degree: 3
gamma: "scale"
shrinking: False
probability: False
tol: 0.001
cache_size: 1024
verbose: False
max_iter: -1
decision_function_shape: "ovr"
break_ties: False
random_state: 42
outputs:
model_output:
test_data:
sampling_algorithm: random
trial: ./train.yml
search_space:
c_value:
type: uniform
min_value: 0.5
max_value: 0.9
kernel:
type: choice
values: ["rbf", "linear", "poly"]
coef0:
type: uniform
min_value: 0.1
max_value: 1
objective:
goal: minimize
primary_metric: training_f1_score
limits:
max_total_trials: 5
max_concurrent_trials: 3
timeout: 7200
predict_step:
type: command
inputs:
model: ${{parent.jobs.sweep_step.outputs.model_output}}
test_data: ${{parent.jobs.sweep_step.outputs.test_data}}
outputs:
predict_result:
component: ./predict.yml
sweep_step
, hiper parametre ayarlama adımıdır. Türünün olması sweep
gerekir. Ve trial
içinde tanımlanan komut bileşenine başvurur train.yaml
. Alandan search space
arama alanına üç hyparmeter (c_value
, kernel
ve coef
) eklendiğini görebiliriz. Bu işlem hattı işini gönderdikten sonra Azure Machine Learning, içinde tanımladığınız sweep_step
arama alanına ve sonlandırma ilkesine göre hiper parametreler üzerinde tarama yapmak için deneme bileşenini birden çok kez çalıştırır. Süpürme işinin tam şeması için süpürme işi YAML şemasını denetleyin.
Aşağıda deneme bileşeni tanımı (train.yml dosyası) yer almaktadır.
$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
type: command
name: train_model
display_name: train_model
version: 1
inputs:
data:
type: uri_folder
c_value:
type: number
default: 1.0
kernel:
type: string
default: rbf
degree:
type: integer
default: 3
gamma:
type: string
default: scale
coef0:
type: number
default: 0
shrinking:
type: boolean
default: false
probability:
type: boolean
default: false
tol:
type: number
default: 1e-3
cache_size:
type: number
default: 1024
verbose:
type: boolean
default: false
max_iter:
type: integer
default: -1
decision_function_shape:
type: string
default: ovr
break_ties:
type: boolean
default: false
random_state:
type: integer
default: 42
outputs:
model_output:
type: mlflow_model
test_data:
type: uri_folder
code: ./train-src
environment: azureml://registries/azureml/environments/sklearn-1.0/labels/latest
command: >-
python train.py
--data ${{inputs.data}}
--C ${{inputs.c_value}}
--kernel ${{inputs.kernel}}
--degree ${{inputs.degree}}
--gamma ${{inputs.gamma}}
--coef0 ${{inputs.coef0}}
--shrinking ${{inputs.shrinking}}
--probability ${{inputs.probability}}
--tol ${{inputs.tol}}
--cache_size ${{inputs.cache_size}}
--verbose ${{inputs.verbose}}
--max_iter ${{inputs.max_iter}}
--decision_function_shape ${{inputs.decision_function_shape}}
--break_ties ${{inputs.break_ties}}
--random_state ${{inputs.random_state}}
--model_output ${{outputs.model_output}}
--test_data ${{outputs.test_data}}
pipeline.yml arama alanına eklenen hiper parametreler, deneme bileşeni için girişler olmalıdır. Deneme bileşeninin kaynak kodu klasörün altındadır ./train-src
. Bu örnekte tek train.py
bir dosyadır. Bu, süpürme işinin her denemesinde yürütülecek koddur. Deneme bileşeni kaynak kodundaki ölçümleri, pipeline.yml dosyasındaki değerle tam olarak primary_metric
aynı adla kaydettiğinizden emin olun. Bu örnekte, ML denemelerinizi izlemenin önerilen yolu olan öğesini kullanırız mlflow.autolog()
. Mlflow hakkında daha fazla bilgi için buraya bakın
Aşağıdaki kod parçacığı, deneme bileşeninin kaynak kodudur.
# imports
import os
import mlflow
import argparse
import pandas as pd
from pathlib import Path
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
# define functions
def main(args):
# enable auto logging
mlflow.autolog()
# setup parameters
params = {
"C": args.C,
"kernel": args.kernel,
"degree": args.degree,
"gamma": args.gamma,
"coef0": args.coef0,
"shrinking": args.shrinking,
"probability": args.probability,
"tol": args.tol,
"cache_size": args.cache_size,
"class_weight": args.class_weight,
"verbose": args.verbose,
"max_iter": args.max_iter,
"decision_function_shape": args.decision_function_shape,
"break_ties": args.break_ties,
"random_state": args.random_state,
}
# read in data
df = pd.read_csv(args.data)
# process data
X_train, X_test, y_train, y_test = process_data(df, args.random_state)
# train model
model = train_model(params, X_train, X_test, y_train, y_test)
# Output the model and test data
# write to local folder first, then copy to output folder
mlflow.sklearn.save_model(model, "model")
from distutils.dir_util import copy_tree
# copy subdirectory example
from_directory = "model"
to_directory = args.model_output
copy_tree(from_directory, to_directory)
X_test.to_csv(Path(args.test_data) / "X_test.csv", index=False)
y_test.to_csv(Path(args.test_data) / "y_test.csv", index=False)
def process_data(df, random_state):
# split dataframe into X and y
X = df.drop(["species"], axis=1)
y = df["species"]
# train/test split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=random_state
)
# return split data
return X_train, X_test, y_train, y_test
def train_model(params, X_train, X_test, y_train, y_test):
# train model
model = SVC(**params)
model = model.fit(X_train, y_train)
# return model
return model
def parse_args():
# setup arg parser
parser = argparse.ArgumentParser()
# add arguments
parser.add_argument("--data", type=str)
parser.add_argument("--C", type=float, default=1.0)
parser.add_argument("--kernel", type=str, default="rbf")
parser.add_argument("--degree", type=int, default=3)
parser.add_argument("--gamma", type=str, default="scale")
parser.add_argument("--coef0", type=float, default=0)
parser.add_argument("--shrinking", type=bool, default=False)
parser.add_argument("--probability", type=bool, default=False)
parser.add_argument("--tol", type=float, default=1e-3)
parser.add_argument("--cache_size", type=float, default=1024)
parser.add_argument("--class_weight", type=dict, default=None)
parser.add_argument("--verbose", type=bool, default=False)
parser.add_argument("--max_iter", type=int, default=-1)
parser.add_argument("--decision_function_shape", type=str, default="ovr")
parser.add_argument("--break_ties", type=bool, default=False)
parser.add_argument("--random_state", type=int, default=42)
parser.add_argument("--model_output", type=str, help="Path of output model")
parser.add_argument("--test_data", type=str, help="Path of output model")
# parse args
args = parser.parse_args()
# return args
return args
# run script
if __name__ == "__main__":
# parse args
args = parse_args()
# run main function
main(args)
Python SDK'sı
Python SDK örneği azureml-example deposunda bulunabilir. Örneği denetlemek için azureml-examples/sdk/jobs/pipelines/1c_pipeline_with_hyperparameter_sweep adresine gidin.
Azure Machine Learning Python SDK v2'de, yöntemini çağırarak .sweep()
herhangi bir komut bileşeni için hiper parametre ayarlamasını etkinleştirebilirsiniz.
Aşağıdaki kod parçacığında için train_model
süpürmeyi etkinleştirme gösterilmektedir.
train_component_func = load_component(source="./train.yml")
score_component_func = load_component(source="./predict.yml")
# define a pipeline
@pipeline()
def pipeline_with_hyperparameter_sweep():
"""Tune hyperparameters using sample components."""
train_model = train_component_func(
data=Input(
type="uri_file",
path="wasbs://datasets@azuremlexamples.blob.core.windows.net/iris.csv",
),
c_value=Uniform(min_value=0.5, max_value=0.9),
kernel=Choice(["rbf", "linear", "poly"]),
coef0=Uniform(min_value=0.1, max_value=1),
degree=3,
gamma="scale",
shrinking=False,
probability=False,
tol=0.001,
cache_size=1024,
verbose=False,
max_iter=-1,
decision_function_shape="ovr",
break_ties=False,
random_state=42,
)
sweep_step = train_model.sweep(
primary_metric="training_f1_score",
goal="minimize",
sampling_algorithm="random",
compute="cpu-cluster",
)
sweep_step.set_limits(max_total_trials=20, max_concurrent_trials=10, timeout=7200)
score_data = score_component_func(
model=sweep_step.outputs.model_output, test_data=sweep_step.outputs.test_data
)
pipeline_job = pipeline_with_hyperparameter_sweep()
# set pipeline level compute
pipeline_job.settings.default_compute = "cpu-cluster"
İlk olarak train_component_func
dosyada tanımlandık train.yml
. oluştururken train_model
arama alanına ve coef0
ekleriz c_value
kernel
(satır 15-17). Satır 30-35 birincil ölçümü, örnekleme algoritmasını vb. tanımlar.
Studio'da süpürme adımıyla işlem hattı işini denetleme
İşlem hattı işi gönderdikten sonra SDK veya CLI pencere öğesi size Studio kullanıcı arabirimine bir web URL'si bağlantısı verir. Bağlantı, varsayılan olarak işlem hattı grafı görünümüne yönlendirecektir.
Süpürme adımının ayrıntılarını denetlemek için süpürme adımına çift tıklayın ve sağ taraftaki panelde alt iş sekmesine gidin.
Bu, aşağıdaki ekran görüntüsünde gösterildiği gibi sizi süpürme işi sayfasına bağlar. Alt iş sekmesine gidin, burada tüm alt işlerin ölçümlerini ve tüm alt işlerin listesini görebilirsiniz.
Bir alt iş başarısız olursa, ilgili alt işin ayrıntı sayfasını girmek için bu alt işin adını seçin (aşağıdaki ekran görüntüsüne bakın). Yararlı hata ayıklama bilgileri Çıkışlar + Günlükler altındadır.
Örnek not defterleri
Sonraki adımlar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin