Aracılığıyla paylaş


Hızlı Başlangıç: Azure Machine Learning'i kullanmaya başlama

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

Bu öğretici, Azure Machine Learning hizmetinin en çok kullanılan özelliklerinden bazılarını tanıtır. Model oluşturur, kaydeder ve dağıtırsınız. Bu öğretici, Azure Machine Learning'in temel kavramlarını ve bunların en yaygın kullanımını öğrenmenize yardımcı olur.

Bu hızlı başlangıçta, Azure Machine Learning'i kullanarak bir makine öğrenmesi modelini eğitin, kaydedin ve dağıtın. Bunların tümü python not defterinden kullanılmaktadır. Sonunda, tahminler için çağırabileceğiniz çalışan bir uç noktanız olacak.

Şunları yapmayı öğreneceksiniz:

  • Ölçeklenebilir bulut işlemde eğitim işi çalıştırma
  • Eğitilen modelinizi kaydedin
  • Modeli çevrimiçi uç nokta olarak dağıtma
  • Uç noktayı örnek verilerle test edin

Veri hazırlama, eğitma ve modeli kaydetme işlemlerini işlemek için bir eğitim betiği oluşturursunuz. Modeli eğittikten sonra bir uç nokta olarak dağıtıp, çıkarım yapmak amacıyla uç noktayı çağırırsınız.

Gerçekleştirdiğiniz adımlar şunlardır:

  • Azure Machine Learning çalışma alanınıza tanıtıcı ayarlama
  • Eğitim betiğinizi oluşturma
  • Ölçeklenebilir bir işlem kaynağı, işlem kümesi oluşturma
  • Uygun iş ortamıyla yapılandırılmış işlem kümesinde eğitim betiğini çalıştıran bir komut işi oluşturun ve ç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

Önkoşullar

  1. Azure Machine Learning'i kullanmak için 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.

    Önemli

    Azure Machine Learning çalışma alanınız yönetilen bir sanal ağ ile yapılandırılmışsa, genel Python paket depolarına erişime izin vermek için giden kuralları eklemeniz gerekebilir. Daha fazla bilgi için bkz . Senaryo: Genel makine öğrenmesi paketlerine erişme.

  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:

    • Kod kopyalayıp hücrelere yapıştırmak istiyorsanız yeni bir not defteri oluşturun.
    • Veya studio'nun Örnekler bölümünde tutorials/get-started-notebooks/quickstart.ipynb dosyasını açın. Ardından Kopyala'yı seçerek not defterini Dosyalarınıza ekleyin. Örnek not defterlerini bulmak için bkz . Örnek not defterlerinden öğrenme.

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

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

Koda dalmadan önce, çalışma alanınıza başvurmak için bir yola ihtiyacınız var. Çalışma alanı Azure Machine Learning'in en üst düzey kaynağıdır. Azure Machine Learning'i kullanırken oluşturduğunuz tüm yapıtlarla çalışmak için merkezi bir konum sağlar.

Çalışma alanınızın tanıtıcısı olarak oluşturun ml_client ; bu istemci tüm kaynaklarınızı ve işlerinizi yönetir.

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ğer kopyalayın, alanı kapatın ve yapıştırın. Ardından sonraki değer için geri dönün.

Ekran görüntüsü: Araç çubuğunun sağ üst kısmında kodunuzun kimlik bilgilerini bulun.

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

# authenticate
try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception:
    credential = InteractiveBrowserCredential()

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. İlk kez arama yapması gerekene kadar bekler. Bu eylem 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)

Eğitim betiği oluşturma

main.py Python dosyası olan eğitim betiğini oluşturun.

Öncelikle senaryo 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ğitim veri kümelerine böler. Bu verileri kullanarak ağaç tabanlı bir modeli eğitip çıkış modelini döndürür.

İşlem hattı çalıştırması sırasında, parametreleri ve ölçümleri günlüğe kaydetmek için MLFlow kullanın.

Aşağıdaki hücre, az önce oluşturduğunuz dizine eğitim betiğini yazmak için IPython magic kullanır.

%%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)

    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")

    # pin numpy
    conda_env = {
        'name': 'mlflow-env',
        'channels': ['conda-forge'],
        'dependencies': [
            'python=3.10.15',
            'pip<=21.3.1',
            {
                'pip': [
                    'mlflow==2.17.0',
                    'cloudpickle==2.2.1',
                    'pandas==1.5.3',
                    'psutil==5.8.0',
                    'scikit-learn==1.5.2',
                    'numpy==1.26.4',
                ]
            }
        ],
    }

    mlflow.sklearn.log_model(
        sk_model=clf,
        registered_model_name=args.registered_model_name,
        artifact_path=args.registered_model_name,
        conda_env=conda_env,
    )

    # 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()

Model eğitildiğinde, betik model dosyasını kaydedip çalışma alanına ekler. Kayıtlı modeli çıkarım uç noktaları içinde kullanabilirsiniz.

Yeni klasörü ve betiği Dosyalarınızda görmek için Yenile'yi seçmeniz gerekebilir.

Yenileme simgesini gösteren ekran görüntüsü.

Komutu yapılandırma

Artık istenen görevleri gerçekleştirebilen bir betiğiniz ve betiği çalıştırmak için bir işlem kümeniz var. Komut satırı eylemlerini çalıştırabilen genel amaçlı bir komut kullanın. Bu komut satırı eylemi doğrudan sistem komutlarını ç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:

  • Eğitim betiği için ihtiyaç duyulan yazılım ve runtime kitaplıklarını tanımlayan bir ortam kullanır. 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 ortamlardan birini burada kullanırsınız. Öğretici: Azure Machine Learning'de model eğitme bölümünde özel ortam oluşturmayı öğreneceksiniz.
  • Bu durumda, komut satırı eyleminin kendisi python main.py yapılandırılır. Girişlere ve çıkışlara komutlarda kullanılan ${{ ... }} formatı aracılığıyla erişilebilir.
  • Verilere İnternet'te bulunan bir dosyadan erişir.
  • İşlem kaynağı belirtmediğiniz için 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="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
    display_name="credit_default_prediction",
)

İşi gönderme

Azure Machine Learning'de çalıştırılacak işi gönderin. Bu kez üzerinde create_or_updatekullanınml_client.

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 şuna benzer. Ölçümler, çıkışlar ve daha fazlası 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.

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

Önemli

Devam etmeden önce iş durumu Tamamlandı (genellikle 2-3 dakika) olarak gösterene kadar bekleyin. Eğer işlem kümesi sıfıra ölçeklendiyse, sağlama işlemi sırasında 10 dakikaya kadar beklemeniz gerekebilir.

Beklerken stüdyodaki iş ayrıntılarını keşfedin:

  • Ölçümler sekmesi: MLflow tarafından günlüğe kaydedilen eğitim ölçümlerini görüntüleme
  • Çıkışlar + günlükler sekmesi: Eğitim günlüklerini denetleyin
  • Modeller sekmesi: Kayıtlı modele bakın (tamamlandıktan sonra)

Modeli çevrimiçi uç nokta olarak dağıtma

kullanarak online endpointmakine öğrenmesi modelinizi Azure bulutunda bir web hizmeti olarak dağıtın.

Makine öğrenmesi hizmetini dağıtmak için kaydettiğiniz modeli kullanın.

Yeni bir çevrimiçi uç nokta oluşturma

Bir modeli kaydettiğinize göre çevrimiçi uç noktanızı oluşturun. Uç nokta adının Azure bölgesinin tamamında benzersiz olması gerekir. Bu öğretici için UUID kullanarak benzersiz bir ad oluşturun.

import uuid

# Creating a unique name for the endpoint
online_endpoint_name = "credit-endpoint-" + str(uuid.uuid4())[:8]

Uç noktayı oluşturun.

# Expect the endpoint creation to take a few minutes
from azure.ai.ml.entities import (
    ManagedOnlineEndpoint,
    ManagedOnlineDeployment,
    Model,
    Environment,
)

# create an online endpoint
endpoint = ManagedOnlineEndpoint(
    name=online_endpoint_name,
    description="this is an online endpoint",
    auth_mode="key",
    tags={
        "training_dataset": "credit_defaults",
        "model_type": "sklearn.GradientBoostingClassifier",
    },
)

endpoint = ml_client.online_endpoints.begin_create_or_update(endpoint).result()

print(f"Endpoint {endpoint.name} provisioning state: {endpoint.provisioning_state}")

Not

Uç nokta oluşturma işleminin birkaç dakika sürmesini bekleyin.

Uç noktayı oluşturduktan sonra aşağıdaki kodda gösterildiği gibi alın:

endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)

print(
    f'Endpoint "{endpoint.name}" with provisioning state "{endpoint.provisioning_state}" is retrieved'
)

Modeli uç noktaya dağıtma

Uç noktayı oluşturduktan sonra, giriş betiğini kullanarak modeli dağıtın. Her uç noktanın birden çok dağıtımı olabilir. Trafiği bu dağıtımlara yönlendirmek için kurallar belirtebilirsiniz. Bu örnekte, gelen trafiğin %100'ünü yönlendiren tek bir dağıtım tasarlayacaksınız. Dağıtım için mavi, yeşil veya kırmızı gibi bir renk adı seçin. Seçim rastgeledir.

Kayıtlı modelinizin en son sürümünü bulmak için Azure Machine Learning studio'daki Modeller sayfasına bakın. Alternatif olarak, en son sürüm numarasını almak için aşağıdaki kodu kullanın.

# Let's pick the latest version of the model
latest_model_version = max(
    [int(m.version) for m in ml_client.models.list(name=registered_model_name)]
)
print(f'Latest model is version "{latest_model_version}" ')

Modelin en son sürümünü dağıtın.

# picking the model to deploy. Here we use the latest version of our registered model
model = ml_client.models.get(name=registered_model_name, version=latest_model_version)

# Expect this deployment to take approximately 6 to 8 minutes.
# create an online deployment.
# if you run into an out of quota error, change the instance_type to a comparable VM that is available.
# Learn more on https://azure.microsoft.com/pricing/details/machine-learning/.
blue_deployment = ManagedOnlineDeployment(
    name="blue",
    endpoint_name=online_endpoint_name,
    model=model,
    instance_type="Standard_DS3_v2",
    instance_count=1,
)

blue_deployment = ml_client.begin_create_or_update(blue_deployment).result()

Not

Bu dağıtımın yaklaşık 6-8 dakika sürmesini bekleyebilirsiniz.

Dağıtım tamamlandığında, test etmeye hazır olursunuz.

Örnek sorguyla test edin

Modeli uç noktaya dağıttığınızda, modeli kullanarak çıkarım çalıştırın.

Score betiğindeki yönteminde beklenen tasarıma run göre bir örnek istek dosyası oluşturun.

deploy_dir = "./deploy"
os.makedirs(deploy_dir, exist_ok=True)
%%writefile {deploy_dir}/sample-request.json
{
  "input_data": {
    "columns": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],
    "index": [0, 1],
    "data": [
            [20000,2,2,1,24,2,2,-1,-1,-2,-2,3913,3102,689,0,0,0,0,689,0,0,0,0],
            [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 9, 8]
        ]
  }
}
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
    endpoint_name=online_endpoint_name,
    request_file="./deploy/sample-request.json",
    deployment_name="blue",
)

Kaynakları temizleme

Uç noktaya ihtiyacınız yoksa, kaynağı kullanmayı durdurmak için uç noktayı silin. Silmeden önce başka dağıtımlarda uç noktanın kullanılmadığından emin olun.

Not

Tam silme işleminin yaklaşık 20 dakika sürmesini bekleyin.

ml_client.online_endpoints.begin_delete(name=online_endpoint_name)

İşlem örneğini durdurma

Şimdi ihtiyacınız yoksa işlem örneğini durdurun:

  1. Stüdyoda, sol bölmede İş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.

Sonraki adımlar

Azure Machine Learning ile derlemenin diğer yollarını keşfedin:

Öğretici Açıklama
Verilerinizi karşıya yükleyin, erişin ve keşfedin Büyük verileri bulutta depolama ve not defterlerinden erişme
Bulut iş istasyonunda model geliştirme Modelleri etkileşimli olarak prototip oluşturma ve geliştirme
Modeli çevrimiçi uç nokta olarak dağıtma Gelişmiş dağıtım yapılandırmalarını öğrenin
Üretim işlem hatları oluşturma Otomatik, yeniden kullanılabilir ML iş akışları oluşturma