Öğretici: Azure Machine Learning'de model eğitme

ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)

Veri bilimcilerinin modeli eğitmek için Azure Machine Learning'i nasıl kullandığını öğrenin. Bu örnekte, sınıflandırma sorunu için Azure Machine Learning'in nasıl kullanılacağını anlamak için bir kredi kartı veri kümesi kullanırsınız. Hedef, bir müşterinin kredi kartı ödemesinde varsayılan olarak yüksek bir olasılık olup olmadığını tahmin etmektir. Eğitim betiği, veri hazırlamayı işler. Betik daha sonra modeli eğitip kaydeder.

Bu öğreticide bulut tabanlı eğitim işi (komut işi) gönderme adımları izlenir.

  • Azure Machine Learning çalışma alanınıza tanıtıcı alma
  • İşlem kaynağınızı ve iş ortamınızı oluşturma
  • Eğitim betiğinizi oluşturma
  • İşlem kaynağında eğitim betiğini çalıştırmak için komut işinizi oluşturma ve çalıştırma
  • Eğitim betiğinizin çıktısını görüntüleme
  • Yeni eğitilen modeli uç nokta olarak dağıtma
  • Çıkarım için Azure Machine Learning uç noktasını çağırma

Verilerinizi Azure'a yükleme hakkında daha fazla bilgi edinmek isterseniz bkz . Öğretici: Azure Machine Learning'de verilerinizi karşıya yükleme, erişme ve keşfetme.

Bu videoda, öğreticideki adımları izleyebilmek için Azure Machine Learning stüdyosu kullanmaya nasıl başlayabileceğiniz gösterilmektedir. Videoda not defteri oluşturma, işlem örneği oluşturma ve not defterini kopyalama gösterilmektedir. Adımlar aşağıdaki bölümlerde de açıklanmıştır.

Önkoşullar

Çekirdeğinizi ayarlayın ve Visual Studio Code'da (VS Code) açın

  1. Açık not defterinizin üst çubuğunda, henüz yoksa bir işlem örneği oluşturun.

    İşlem örneğinin nasıl oluşturulacağını gösteren ekran görüntüsü.

  2. İşlem örneği durdurulduysa İşlemi başlat'ı seçin ve çalışana kadar bekleyin.

    Durdurulmuş bir işlem örneğinin nasıl başlatılanı gösteren ekran görüntüsü.

  3. İşlem örneği çalışana kadar bekleyin. Ardından sağ üst kısımda bulunan çekirdeğin olduğundan Python 3.10 - SDK v2emin olun. Aksi takdirde, bu çekirdeği seçmek için açılan listeyi kullanın.

    Çekirdeğin nasıl ayarlandığını gösteren ekran görüntüsü.

    Bu çekirdeği görmüyorsanız işlem örneğinizin çalıştığını doğrulayın. Bu durumda, not defterinin sağ üst kısmındaki Yenile düğmesini seçin.

  4. Kimliğinizin doğrulanması gerektiğini belirten bir başlık görürseniz Kimliği Doğrula'yı seçin.

  5. Not defterini burada çalıştırabilir veya Azure Machine Learning kaynaklarının gücüyle tam tümleşik bir geliştirme ortamı (IDE) için VS Code'da açabilirsiniz. VS Code'da Aç'ı ve ardından web veya masaüstü seçeneğini belirleyin. Bu şekilde başlatıldığında VS Code işlem örneğinize, çekirdeğinize ve çalışma alanı dosya sisteminize eklenir.

    Vs Code'da not defterini açma işlemini gösteren ekran görüntüsü.

Önemli

Bu öğreticinin geri kalanı, öğretici not defterinin hücrelerini içerir. Bunları kopyalayıp yeni not defterinize yapıştırın veya kopyaladıysanız şimdi not defterine geçin.

Azure Machine Learning'de model eğitmek için komut işi kullanma

Modeli eğitmek için bir göndermeniz gerekir. Azure Machine Learning, modelleri eğitmek için birkaç farklı iş türü sunar. Kullanıcılar modelin karmaşıklığı, veri boyutu ve eğitim hızı gereksinimlerine göre kendi eğitim yöntemlerini seçebilir. Bu öğreticide, eğitim betiğini çalıştırmak için bir komut işi göndermeyi öğreneceksiniz.

Komut işi, modelinizi eğitmek için özel bir eğitim betiği göndermenizi sağlayan bir işlevdir. Bu iş özel bir eğitim işi olarak da tanımlanabilir. Azure Machine Learning'de komut işi, belirtilen bir ortamda betik veya komut çalıştıran bir iş türüdür. Komut işlerini kullanarak modelleri eğitebilir, verileri işleyebilir veya bulutta yürütmek istediğiniz diğer özel kodları kullanabilirsiniz.

Bu öğreticide, modeli eğitmek için kullandığınız özel bir eğitim işi oluşturmak için bir komut işi kullanmaya odaklanılmaktadır. Herhangi bir özel eğitim işi için aşağıdaki öğeler gerekir:

  • ortamı
  • veriler
  • komut işi
  • eğitim betiği

Bu öğreticide örnek için şu öğeler sağlanır: kredi kartı ödemelerinde varsayılan olarak varsayılan olma olasılığı yüksek olan müşterileri tahmin etmek için sınıflandırıcı oluşturma.

Çalışma alanına tanıtıcı oluşturma

Kodu incelemeden önce çalışma alanınıza başvurmak için bir yönteme ihtiyacınız vardır. Çalışma alanının tanıtıcısı için oluşturun ml_client . Ardından kaynakları ve işleri yönetmek için kullanın ml_client .

Sonraki hücreye abonelik kimliğinizi, kaynak grubu adınızı ve çalışma alanı adınızı girin. Bu değerleri bulmak için:

  1. Sağ üst Azure Machine Learning stüdyosu araç çubuğunda çalışma alanı adınızı seçin.
  2. Çalışma alanı, kaynak grubu ve abonelik kimliğinin değerini koda kopyalayın. Bir değeri kopyalamanız, alanı kapatıp yapıştırmanız ve ardından bir sonraki değer için geri dönmeniz gerekir.
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

# authenticate
credential = DefaultAzureCredential()

SUBSCRIPTION="<SUBSCRIPTION_ID>"
RESOURCE_GROUP="<RESOURCE_GROUP>"
WS_NAME="<AML_WORKSPACE_NAME>"
# Get a handle to the workspace
ml_client = MLClient(
    credential=credential,
    subscription_id=SUBSCRIPTION,
    resource_group_name=RESOURCE_GROUP,
    workspace_name=WS_NAME,
)

Not

MLClient oluşturma çalışma alanına bağlanmaz. İstemci başlatması gecikmeli. Bir sonraki kod hücresinde gerçekleşen bir çağrı yapması için ilk kez bekler.

# Verify that the handle works correctly.
# If you ge an error here, modify your SUBSCRIPTION, RESOURCE_GROUP, and WS_NAME in the previous cell.
ws = ml_client.workspaces.get(WS_NAME)
print(ws.location,":", ws.resource_group)

İş ortamı oluşturma

İşlem kaynağınızda Azure Machine Learning işinizi çalıştırmak için bir ortamınız olmalıdır. Bir ortamda, işlemde yüklenmesini istediğiniz yazılım çalışma zamanı ve kitaplıklar listelenir ve eğitim nerede yapılır. Yerel makinenizdeki Python ortamına benzer. Daha fazla bilgi için bkz. Azure Machine Learning ortamları nelerdir?

Azure Machine Learning, yaygın eğitim ve çıkarım senaryoları için yararlı olan birçok seçilmiş veya hazır ortam sağlar.

Bu örnekte, conda yaml dosyası kullanarak işleriniz için özel bir conda ortamı oluşturursunuz.

İlk olarak, dosyayı depolamak için bir dizin oluşturun.

import os

dependencies_dir = "./dependencies"
os.makedirs(dependencies_dir, exist_ok=True)

Sonraki hücre, oluşturduğunuz dizine conda dosyasını yazmak için IPython magic kullanır.

%%writefile {dependencies_dir}/conda.yaml
name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.8
  - numpy=1.21.2
  - pip=21.2.4
  - scikit-learn=1.0.2
  - scipy=1.7.1
  - pandas>=1.1,<1.2
  - pip:
    - inference-schema[numpy-support]==1.3.0
    - mlflow==2.8.0
    - mlflow-skinny==2.8.0
    - azureml-mlflow==1.51.0
    - psutil>=5.8,<5.9
    - tqdm>=4.59,<4.60
    - ipykernel~=6.0
    - matplotlib

Belirtim, işinizde kullandığınız numpy ve pip gibi bazı olağan paketleri içerir.

Bu özel ortamı oluşturmak ve çalışma alanınıza kaydetmek için bu yaml dosyasına başvurun:

from azure.ai.ml.entities import Environment

custom_env_name = "aml-scikit-learn"

custom_job_env = Environment(
    name=custom_env_name,
    description="Custom environment for Credit Card Defaults job",
    tags={"scikit-learn": "1.0.2"},
    conda_file=os.path.join(dependencies_dir, "conda.yaml"),
    image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
)
custom_job_env = ml_client.environments.create_or_update(custom_job_env)

print(
    f"Environment with name {custom_job_env.name} is registered to workspace, the environment version is {custom_job_env.version}"
)

Komut işlevini kullanarak eğitim işi yapılandırma

Modeli kredi varsayılan tahmini için eğitmek için bir Azure Machine Learning komut işi oluşturursunuz. Komut işi, belirtilen bir işlem kaynağında belirtilen bir ortamda bir eğitim betiği çalıştırır. Ortamı ve işlem kümesini zaten oluşturdunuz. Ardından eğitim betiğini oluşturun. Bu durumda, modeli kullanarak GradientBoostingClassifier bir sınıflandırıcı oluşturmak için veri kümesini eğitebilirsiniz.

Eğitim betiği, eğitilen modelin veri hazırlığı, eğitimi ve kaydedilmesini işler. yöntemi train_test_split , veri kümesini test ve eğitim verilerine böler. Bu öğreticide bir Python eğitim betiği oluşturacaksınız.

Komut işleri CLI, Python SDK veya stüdyo arabiriminden çalıştırılabilir. Bu öğreticide, komut işini oluşturmak ve çalıştırmak için Azure Machine Learning Python SDK v2'yi kullanın.

Eğitim betiği oluşturma

Başlangıç olarak eğitim betiğini oluşturun: main.py python dosyası. İlk olarak betik için bir kaynak klasör oluşturun:

import os

train_src_dir = "./src"
os.makedirs(train_src_dir, exist_ok=True)

Bu betik verileri önceden işleyip test ve eğitme verilerine böler. Ardından verileri kullanarak ağaç tabanlı bir modeli eğitir ve çıkış modelini döndürür.

MLFlow, bu iş sırasında parametreleri ve ölçümleri günlüğe kaydetmek için kullanılır. MLFlow paketi, Azure tarafından eğitilmiş her model için ölçümleri ve sonuçları izlemenize olanak tanır. Verileriniz için en iyi modeli elde etmek için MLFlow kullanın. Ardından Modelin ölçümlerini Azure studio'da görüntüleyin. Daha fazla bilgi için bkz . MLflow ve Azure Machine Learning.

%%writefile {train_src_dir}/main.py
import os
import argparse
import pandas as pd
import mlflow
import mlflow.sklearn
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

def main():
    """Main function of the script."""

    # input and output arguments
    parser = argparse.ArgumentParser()
    parser.add_argument("--data", type=str, help="path to input data")
    parser.add_argument("--test_train_ratio", type=float, required=False, default=0.25)
    parser.add_argument("--n_estimators", required=False, default=100, type=int)
    parser.add_argument("--learning_rate", required=False, default=0.1, type=float)
    parser.add_argument("--registered_model_name", type=str, help="model name")
    args = parser.parse_args()
   
    # Start Logging
    mlflow.start_run()

    # enable autologging
    mlflow.sklearn.autolog()

    ###################
    #<prepare the data>
    ###################
    print(" ".join(f"{k}={v}" for k, v in vars(args).items()))

    print("input data:", args.data)
    
    credit_df = pd.read_csv(args.data, header=1, index_col=0)

    mlflow.log_metric("num_samples", credit_df.shape[0])
    mlflow.log_metric("num_features", credit_df.shape[1] - 1)

    #Split train and test datasets
    train_df, test_df = train_test_split(
        credit_df,
        test_size=args.test_train_ratio,
    )
    ####################
    #</prepare the data>
    ####################

    ##################
    #<train the model>
    ##################
    # Extracting the label column
    y_train = train_df.pop("default payment next month")

    # convert the dataframe values to array
    X_train = train_df.values

    # Extracting the label column
    y_test = test_df.pop("default payment next month")

    # convert the dataframe values to array
    X_test = test_df.values

    print(f"Training with data of shape {X_train.shape}")

    clf = GradientBoostingClassifier(
        n_estimators=args.n_estimators, learning_rate=args.learning_rate
    )
    clf.fit(X_train, y_train)

    y_pred = clf.predict(X_test)

    print(classification_report(y_test, y_pred))
    ###################
    #</train the model>
    ###################

    ##########################
    #<save and register model>
    ##########################
    # Registering the model to the workspace
    print("Registering the model via MLFlow")
    mlflow.sklearn.log_model(
        sk_model=clf,
        registered_model_name=args.registered_model_name,
        artifact_path=args.registered_model_name,
    )

    # Saving the model to a file
    mlflow.sklearn.save_model(
        sk_model=clf,
        path=os.path.join(args.registered_model_name, "trained_model"),
    )
    ###########################
    #</save and register model>
    ###########################
    
    # Stop Logging
    mlflow.end_run()

if __name__ == "__main__":
    main()

Bu betikte, model eğitildikten sonra model dosyası kaydedilir ve çalışma alanına kaydedilir. Modelinizi kaydetmek, modellerinizi Azure bulutunda, çalışma alanınızda depolamanıza ve sürüm oluşturmanıza olanak tanır. Modeli kaydettikten sonra, Azure Studio'da model kayıt defteri olarak adlandırılan diğer tüm kayıtlı modelleri tek bir yerde bulabilirsiniz. Model kayıt defteri, eğitilen modellerinizi düzenlemenize ve izlemenize yardımcı olur.

Komutu yapılandırma

Sınıflandırma görevini gerçekleştirebilen bir betiğiniz olduğuna göre, komut satırı eylemlerini çalıştırabilen genel amaçlı komutu kullanın. Bu komut satırı eylemi, sistem komutlarını doğrudan çağırabilir veya bir betik çalıştırabilir.

Giriş verilerini, bölme oranını, öğrenme oranını ve kayıtlı model adını belirtmek için giriş değişkenleri oluşturun. Komut betiği:

  • Daha önce oluşturulan ortamı kullanır. Komut çalıştırıldığında ortamın @latest en son sürümünü göstermek için gösterimi kullanın.
  • Bu durumda komut python main.py satırı eylemini yapılandırılır. Komuttaki girişlere ve çıkışlara notasyon kullanarak ${{ ... }} erişebilirsiniz.
  • İşlem kaynağı belirtilmediğinden, betik otomatik olarak oluşturulan sunucusuz bir işlem kümesinde çalışır.
from azure.ai.ml import command
from azure.ai.ml import Input

registered_model_name = "credit_defaults_model"

job = command(
    inputs=dict(
        data=Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        ),
        test_train_ratio=0.2,
        learning_rate=0.25,
        registered_model_name=registered_model_name,
    ),
    code="./src/",  # location of source code
    command="python main.py --data ${{inputs.data}} --test_train_ratio ${{inputs.test_train_ratio}} --learning_rate ${{inputs.learning_rate}} --registered_model_name ${{inputs.registered_model_name}}",
    environment="aml-scikit-learn@latest",
    display_name="credit_default_prediction",
)

İşi gönderme

Azure Machine Learning stüdyosu çalıştırmak için işi gönderin. Bu kez üzerinde ml_clientkullanıncreate_or_update. ml_client , Python kullanarak Azure aboneliğinize bağlanmanızı ve Azure Machine Learning hizmetleriyle etkileşim kurmanızı sağlayan bir istemci sınıfıdır. ml_client Python kullanarak işlerinizi göndermenize olanak tanır.

ml_client.create_or_update(job)

İş çıktısını görüntüleme ve işin tamamlanmasını bekleme

İşi Azure Machine Learning stüdyosu görüntülemek için önceki hücrenin çıkışındaki bağlantıyı seçin. Bu işin çıktısı Azure Machine Learning stüdyosu şuna benzer. Ölçümler, çıkışlar vb. gibi çeşitli ayrıntılar için sekmeleri keşfedin. İş tamamlandıktan sonra, eğitimin bir sonucu olarak çalışma alanınıza bir model kaydeder.

İşin genel bakış sayfasını gösteren ekran görüntüsü.

Önemli

Devam etmek için bu not defterine dönmeden önce işin durumunun tamamlanmasını bekleyin. İşin çalıştırılması 2-3 dakika sürer. İşlem kümesinin ölçeği sıfır düğüme düşürüldüyse ve özel ortam hala derleniyorsa bu işlem 10 dakikaya kadar sürebilir.

Hücreyi çalıştırdığınızda, not defteri çıkışı Machine Learning studio'da işin ayrıntılar sayfasının bağlantısını gösterir. Alternatif olarak, sol gezinti menüsünde İşler'i de seçebilirsiniz.

İş, belirtilen bir betikten veya kod parçasından çok sayıda çalıştırmanın gruplandırılmasıdır. Çalıştırma bilgileri bu işin altında depolanır. Ayrıntılar sayfasında işe, çalıştırma süresine, ne zaman oluşturulduğuna ve diğer bilgilere genel bir bakış sunun. Sayfada ayrıca ölçümler, Çıkışlar + günlükler ve kod gibi iş hakkındaki diğer bilgilere de sekmeler bulunur. İşin ayrıntılar sayfasında yer alan sekmeler şunlardır:

  • Genel bakış: Durumu, başlangıç ve bitiş saatleri ve çalıştırılan işin türü de dahil olmak üzere iş hakkında temel bilgiler
  • Girişler: İş için giriş olarak kullanılan veriler ve kod. Bu bölüm eğitim sırasında kullanılan veri kümelerini, betikleri, ortam yapılandırmalarını ve diğer kaynakları içerebilir.
  • Çıkışlar + günlükler: İş çalışırken oluşturulan günlükler. Bu sekme, eğitim betiğinizde veya model oluşturma işleminizde bir sorun olursa sorun gidermeye yardımcı olur.
  • Ölçümler: Modelinizdeki eğitim puanı, f1 puanı ve duyarlık puanı gibi önemli performans ölçümleri.

Kaynakları temizleme

Şimdi diğer öğreticilere devam etmek istiyorsanız İlgili içerik bölümüne atlayın.

İşlem örneğini durdurma

Şimdi kullanmayacaksanız işlem örneğini durdurun:

  1. Stüdyoda, sol gezinti alanında İşlem'i seçin.
  2. Üst sekmelerde İşlem örnekleri'ni seçin.
  3. Listeden işlem örneğini seçin.
  4. Üst araç çubuğunda Durdur'u seçin.

Tüm kaynakları silme

Önemli

Oluşturduğunuz kaynaklar, diğer Azure Machine Learning öğreticileri ve nasıl yapılır makaleleri için önkoşul olarak kullanılabilir.

Oluşturduğunuz kaynaklardan hiçbirini kullanmayı planlamıyorsanız, ücret ödememek için bunları silin:

  1. Azure portalındaki arama kutusuna Kaynak grupları yazın ve sonuçlardan seçin.

  2. Listeden, oluşturduğunuz kaynak grubunu seçin.

  3. Genel Bakış sayfasında Kaynak grubunu sil'i seçin.

    Azure portalında kaynak grubunu silme seçimlerinin ekran görüntüsü.

  4. Kaynak grubu adını girin. Ardından Sil'i seçin.

Model dağıtma hakkında bilgi edinin:

Model dağıtma.

Bu öğreticide bir çevrimiçi veri dosyası kullanılmıştır. Verilere erişmenin diğer yolları hakkında daha fazla bilgi edinmek için bkz . Öğretici: Azure Machine Learning'de verilerinizi karşıya yükleme, erişme ve keşfetme.

Otomatik ML, veri bilimcisinin verileriyle en iyi şekilde çalışan bir model bulmak için harcadığı süreyi azaltmaya yönelik ek bir araçtır. Daha fazla bilgi için bkz . Otomatik makine öğrenmesi nedir?

Bu öğreticiye benzer daha fazla örnek istiyorsanız bkz . Örnek not defterlerinden öğrenme. Bu örnekler GitHub örnekleri sayfasında bulunabilir. Örnek olarak kod çalıştırabileceğiniz ve modeli eğitmeyi öğrenebileceğiniz eksiksiz Python Not Defterleri verilebilir. Sınıflandırma, doğal dil işleme ve anomali algılama gibi senaryoları içeren örneklerdeki mevcut betikleri değiştirebilir ve çalıştırabilirsiniz.