Azure Machine Learning model dağıtma

Tamamlandı

Önceki birimde anlatıldığı gibi, bir modeli birçok işlem hedefi türüne dağıtabilirsiniz: yerel işlem, Azure Container Instance (acı), bir Azure Kubernetes hizmeti (AKS) kümesi veya Nesnelerin İnterneti (IoT) modülü. Azure Machine Learning hizmeti, dağıtım mekanizması olarak kapsayıcıları kullanır ve model ile kodu paketleyerek seçilen işlem hedefindeki bir kapsayıcıya dağıtılabilecek bir görüntü olarak kullanmanızı sağlar.

Bir modeli ikinci dereceden bir Web hizmeti olarak dağıtmak için aşağıdaki görevleri gerçekleştirmeniz gerekir:

  1. Eğitilen bir modeli kaydedin.
  2. Bir çıkarım yapılandırması tanımlayın.
  3. Dağıtım yapılandırması tanımlayın.
  4. Modeli dağıtın.

1. eğitilen bir modeli kaydedin

Bir modeli başarıyla eğittikten sonra Azure Machine Learning çalışma alanınıza kaydetmeniz gerekir. Bu işlemin ardından gerçek zamanlı hizmetiniz, gerektiğinde modeli yükleyebilecektir.

Yerel dosyadan model kaydetmek için burada gösterildiği gibi Model nesnesinin register yöntemini kullanabilirsiniz:

from azureml.core import Model

model = Model.register(workspace=ws, 
                       model_name='nyc-taxi-fare',
                       model_path='model.pkl', # local path
                       description='Model to predict taxi fares in NYC.')

2. bir çıkarım yapılandırması tanımlayın

Model, aşağıdakilerden oluşan bir hizmet olarak dağıtılır:

  • Modeli yükleyen ve gönderilen verilerle ilgili tahminleri döndüren bir betik.
  • Betiğin çalıştırılacağı ortam.

Bu nedenle hizmette kullanılacak betiği ve ortamı tanımlamanız gerekir.

Giriş betiği oluşturma

Hizmetin giriş betiğini (bazen puanlama betiği olarak da adlandırılır) Python (.py) dosyası olarak oluşturun. Bu dosya iki işlev içermelidir:

  • init (): hizmet başlatıldığında çağırılır.
  • (raw_data) Çalıştır: hizmete yeni veriler gönderildiğinde çağırılır.

Genellikle init işlevi modeli model kayıt defterinden yüklemek için, run işlevi de giriş verilerinden tahmin oluşturmak için kullanılır. Aşağıdaki örnek betikte bu yöntem göstermektedir:

import json
import joblib
import numpy as np
from azureml.core.model import Model

# Called when the service is loaded
def init():
    global model
    # Get the path to the registered model file and load it
    model_path = Model.get_model_path('nyc-taxi-fare')
    model = joblib.load(model_path)

# Called when a request is received
def run(raw_data):
    # Get the input data as a numpy array
    data = np.array(json.loads(raw_data)['data'])
    # Get a prediction from the model
    predictions = model.predict(data)
    # Return the predictions as any JSON serializable format
    return predictions.tolist()

Ortam oluşturma

Azure Machine Learning ortamlar, Machine Learning eğitiminin gerçekleştiği ortamın kapsüllenmesi. Bunlar, bildirime dayalı olarak Python paketlerini, ortam değişkenlerini, Docker ayarlarını ve diğer öznitelikleri tanımlar. Aşağıdaki kod parçacığında, dağıtımınız için nasıl ortam oluşturabileceğiniz hakkında bir örnek gösterilmektedir:

from azureml.core import Environment
from azureml.core.environment import CondaDependencies

my_env_name="nyc-taxi-env"
myenv = Environment.get(workspace=ws, name='AzureML-Minimal').clone(my_env_name)
conda_dep = CondaDependencies()
conda_dep.add_pip_package("numpy==1.18.1")
conda_dep.add_pip_package("pandas==1.1.5")
conda_dep.add_pip_package("joblib==0.14.1")
conda_dep.add_pip_package("scikit-learn==0.24.1")
conda_dep.add_pip_package("sklearn-pandas==2.1.0")
myenv.python.conda_dependencies=conda_dep

Betiği ve ortamı bir InferenceConfig içinde birleştirme

Giriş betiği ve ortamı oluşturduktan sonra, bunları hizmet için aşağıdaki gibi bir ınenceconfig içinde birleştirebilirsiniz:

from azureml.core.model import InferenceConfig

from azureml.core.model import InferenceConfig
inference_config = InferenceConfig(entry_script='score.py', 
                                   source_directory='.', 
                                   environment=myenv)

3. bir dağıtım yapılandırması tanımlayın

Giriş betiğini ve ortamı oluşturduktan sonra hizmetin dağıtılacağı işlemi yapılandırmanız gerekir. Dağıtımı bir AKS kümesine yapıyorsanız dağıtım öncesinde kümeyi ve işlem hedefini oluşturmanız gerekir:

from azureml.core.compute import ComputeTarget, AksCompute

cluster_name = 'aks-cluster'
compute_config = AksCompute.provisioning_configuration(location='eastus')
production_cluster = ComputeTarget.create(ws, cluster_name, compute_config)
production_cluster.wait_for_completion(show_output=True)

İşlem hedefini oluşturduktan sonra kapsayıcılı dağıtım için hedefe özgü işlem belirtimini ayarlayan dağıtım yapılandırmasını tanımlayabilirsiniz:

from azureml.core.webservice import AksWebservice

deploy_config = AksWebservice.deploy_configuration(cpu_cores = 1,
                                                   memory_gb = 1)

ACI dağıtımını yapılandırmak için kullanılan kod benzerdir ancak farklı olarak bir ACI işlem hedefi oluşturmanız gerekmez, bunun yerine azureml.core.webservice.AciWebservice ad alanındaki deploy_configuration sınıfını kullanmanız gerekir. Benzer şekilde yerel bir Docker tabanlı hizmet yapılandırmak için de azureml.core.webservice.LocalWebservice ad alanını kullanabilirsiniz.

4. modeli dağıtma

Tüm yapılandırmalar hazırlandıktan sonra modeli dağıtabilirsiniz. Bunu yapmanın en kolay yolu, aşağıdaki gibi Model sınıfının deploy yöntemini çağırmaktır:

from azureml.core.model import Model

service = Model.deploy(workspace=ws,
                       name = 'nyc-taxi-service',
                       models = [model],
                       inference_config = inference_config,
                       deployment_config = deploy_config,
                       deployment_target = production_cluster)
service.wait_for_deployment(show_output = True)

ACI veya yerel hizmetler için deployment_target parametresini kaldırabilirsiniz (veya None olarak ayarlayabilirsiniz).

Not

daha fazla bilgi: modelleri Azure Machine Learning ile dağıtma hakkında daha fazla bilgi için bkz. belgelerde Azure Machine Learning ile modelleri dağıtma .