Öğ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'i nasıl kullanabileceğinizi göstermek için ilişkili kredi kartı veri kümesini kullanırı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, ardından modeli eğitir ve kaydeder. Bu öğreticide bulut tabanlı eğitim işi (komut işi) gönderme adımları izlenir. 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. Adımlar şunlardır:

  • 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
  • Komut işinizi oluşturup çalıştırarak uygun iş ortamı ve veri kaynağıyla yapılandırılmış işlem kaynağında eğitim betiğini çalıştırın
  • 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

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

  1. Azure Machine Learning'i kullanmak için öncelikle bir çalışma alanı gerekir. Bir çalışma alanınız yoksa, çalışma alanı oluşturmaya başlamak ve bu çalışma alanını kullanma hakkında daha fazla bilgi edinmek için ihtiyacınız olan kaynakları oluşturma'yı tamamlayın.

  2. Stüdyoda oturum açın ve henüz açık değilse çalışma alanınızı seçin.

  3. Çalışma alanınızda bir not defteri açın veya oluşturun:

    • Hücrelere kod kopyalamak/yapıştırmak istiyorsanız yeni bir not defteri oluşturun.
    • Veya studio'nun Örnekler bölümünde tutorials/get-started-notebooks/train-model.ipynb dosyasını açın. Ardından Kopyala'yı seçerek not defterini Dosyalarınıza ekleyin. (Bkz. Örneklerin bulunacağı yer.)

Çekirdeğinizi ayarlama

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

    Screenshot shows how to create a compute instance.

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

    Screenshot shows how to start compute if it is stopped.

  3. 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.

    Screenshot shows how to set the kernel.

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

Ö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. Bu öğreticide göndereceğimiz iş türü bir komut işidir. 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, ö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 kullanacağımız özel bir eğitim işi oluşturmak için bir komut işi kullanmaya odaklanacağız. Herhangi bir özel eğitim işi için aşağıdaki öğeler gereklidir:

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

Bu öğreticide, örneğimiz için şu öğelerin tümünü sağlayacağız: 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şturacaksınız ml_client . Daha sonra kaynakları ve işleri yönetmek için kullanacaksınız 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.
  3. 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şlatma yavaştır, ilk kez çağrı yapmasını bekler (bu bir sonraki kod hücresinde gerçekleşir).

# 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. Ortam, eğiteceğiniz işlemde yüklenmesini istediğiniz yazılım çalışma zamanını ve kitaplıkları listeler. Yerel makinenizdeki Python ortamınıza benzer.

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şturacaksınız.

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

import os

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

Aşağıdaki hücre, conda dosyasını yeni oluşturduğunuz dizine 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 kullanacağınız bazı olağan paketleri içerir (numpy, pip).

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şturacaksınız. Bizim örneğimizde, modeli kullanarak GradientBoostingClassifier bir sınıflandırıcı üretmek için veri kümemizi eğitiyoruz.

Eğitim betiği , eğitilen modelin veri hazırlamasını, eğitilmesi ve kaydedilmesini işler. yöntemi train_test_split , veri kümesini test ve eğitim verilerine bölmeyi iş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 kullanacaksınız.

Eğitim betiği oluşturma

Başlangıç olarak main.py python dosyası olan eğitim betiğini oluşturalım.

İ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, verilerin önceden işlenmesini işler ve verileri test ve eğitme işlemine böler. Ardından bu verileri kullanarak ağaç tabanlı modeli eğitir ve çıkış modelini döndürür.

MLFlow , işimiz 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. MlFlow'ı kullanarak verilerimiz için en iyi modeli alacağız, ardından modelin ölçümlerini Azure studio'da görüntüleyeceğiz.

%%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. Bir 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.

Burada 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ın; komut çalıştırıldığında ortamın en son sürümünü belirtmek için gösterimi kullanabilirsiniz @latest .
  • Bu durumda komut satırı eyleminin kendisini python main.py yapılandırın. Girişlere/çıkışlara komutta gösterimi aracılığıyla ${{ ... }} erişilebilir.
  • İşlem kaynağı belirtilmediğinden betik, otomatik olarak oluşturulan sunucusuz bir işlem kümesinde çalıştırılı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

Şimdi işi Azure Machine Learning stüdyosu çalıştırmak üzere gönderme zamanı geldi. Bu kez üzerinde ml_clientkullanacaksınızcreate_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

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

Screenshot shows the overview page for the job.

Ö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 daha uzun sürebilir (10 dakikaya kadar).

Hücreyi çalıştırdığınızda, not defteri çıkışı Azure 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 vb. genel bakış bilgileri verebilirsiniz. Sayfada ayrıca ölçümler, Çıkışlar + günlükler ve kod gibi iş hakkındaki diğer bilgilere de sekmeler bulunur. İş ayrıntıları sayfasında bulunan sekmeler aşağıda listelenmiştir:

  • Genel bakış: Genel bakış bölümü, durumu, başlangıç ve bitiş saatleri ve çalıştırılan işin türü de dahil olmak üzere iş hakkında temel bilgiler sağlar
  • Girişler: Giriş bölümünde iş için giriş olarak kullanılan veriler ve kod listelenir. 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: Çıkışlar + günlükler sekmesi, iş çalışırken oluşturulan günlükleri içerir. Bu sekme, eğitim betiğinizde veya model oluşturma işleminizde bir sorun oluştuğunda sorun gidermeye yardımcı olur.
  • Ölçümler: Ölçümler sekmesinde modelinizdeki eğitim puanı, f1 puanı ve duyarlık puanı gibi önemli performans ölçümleri gösterilir.

Kaynakları temizleme

Şimdi diğer öğreticilere devam etmek istiyorsanız Sonraki adımlar'a 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ının en sol tarafındaki Kaynak gruplarını seçin.

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

  3. Kaynak grubunu sil'i seçin.

    Screenshot of the selections to delete a resource group in the Azure portal.

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

Sonraki Adımlar

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.

Azure Machine Learning'de modelleri eğitmenin farklı yolları hakkında daha fazla bilgi edinmek isterseniz bkz . Otomatik makine öğrenmesi (AutoML) nedir?. 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.

Bu öğreticiye benzer daha fazla örnek isterseniz, studio'nun Örnekler bölümüne bakın. Bu örneklerin aynısını GitHub örnekleri sayfamızda bulabilirsiniz. Ö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.