Terapkan model ke Azure Machine Learning

Selesai

Seperti yang telah kita bahas di unit sebelumnya, Anda dapat menerapkan model ke beberapa jenis target komputasi: termasuk komputasi lokal, Azure Container Instance (ACI), kluster Azure Kubernetes Service (AKS), atau modul Internet of Things (IoT). . Azure Machine Learning menggunakan kontainer sebagai mekanisme penyebaran, mengemas model dan kode untuk digunakan sebagai citra yang dapat disebarkan ke kontainer di target komputasi yang Anda pilih.

Untuk menerapkan model sebagai layanan web inferensi, Anda harus melakukan tugas berikut:

  1. Daftarkan model terlatih.
  2. Tentukan Konfigurasi Inferensi.
  3. Tentukan Konfigurasi Deployment.
  4. Menyebarkan Model.

1. Mendaftarkan model terlatih

Setelah berhasil melatih model, Anda harus mendaftarkannya di ruang kerja Azure Machine Learning Anda. Layanan real time Anda kemudian akan dapat memuat model ketika diperlukan.

Untuk mendaftarkan model dari file lokal, Anda dapat menggunakan metode daftar objek Model seperti yang ditunjukkan di sini:

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. Tentukan Konfigurasi Inferensi

Model akan di-deploy sebagai layanan yang terdiri dari:

  • Skrip untuk memuat model dan menampilkan prediksi untuk data yang dikirimkan.
  • Lingkungan tempat skrip akan dijalankan.

Oleh karena itu, Anda harus menentukan skrip dan lingkungan untuk layanan ini.

Membuat Skrip Entri

Buat skrip entri (kadang-kadang disebut sebagai skrip penilaian) untuk layanan sebagai file Python (.py). Hal ini harus mencakup dua fungsi:

  • init(): Dipanggil ketika layanan diinisialisasi.
  • run(raw_data): Dipanggil ketika data baru dikirimkan ke layanan.

Biasanya, Anda menggunakan fungsi init untuk memuat model dari registri model dan menggunakan fungsi run untuk menghasilkan prediksi dari data input. Contoh skrip berikut menunjukkan pola ini:

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

Menciptakan Lingkungan

Lingkungan Azure Machine Learning adalah enkapsulasi lingkungan tempat pelatihan pembelajaran mesin Anda terjadi. Mereka mendefinisikan paket Python, variabel lingkungan, pengaturan Docker, dan atribut lainnya secara deklaratif. Cuplikan kode di bagian ini menunjukkan contoh bagaimana Anda dapat membuat lingkungan untuk penerapan Anda:

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

Menggabungkan Skrip dan Lingkungan dalam InferenceConfig

Setelah membuat lingkungan dan skrip entri, Anda dapat menggabungkannya dalam InferenceConfig untuk layanan seperti ini:

from azureml.core.model import InferenceConfig

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

3. Tentukan Konfigurasi Deployment

Sekarang setelah Anda memiliki skrip entri dan lingkungan, Anda perlu mengonfigurasi komputasi yang akan disebarkan layanan. Jika Anda menyebarkan ke kluster AKS, Anda harus membuat kluster dan target komputasi untuk kluster tersebut sebelum menyebarkan:

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)

Dengan target komputasi yang dibuat, Anda sekarang dapat menentukan konfigurasi penyebaran, yang menetapkan spesifikasi komputasi khusus target untuk penyebaran yang dalam kontainer:

from azureml.core.webservice import AksWebservice

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

Penyebaran ACI dikonfigurasi dengan kode yang serupa. Hal yang berbeda adalah Anda tidak perlu secara eksplisit membuat target komputasi ACI dan Anda harus menggunakan kelas deploy_configuration dari namespace layanan azureml.core.webservice.AciWebservice. Demikian pula, Anda dapat menggunakan namespace layanan azureml.core.webservice.LocalWebservice untuk mengonfigurasi layanan lokal berbasis Docker.

4. Terapkan Model

Setelah semua konfigurasi disiapkan, Anda dapat menyebarkan model. Cara termudah untuk melakukan hal ini adalah dengan memanggil metode penyebaran dari kelas Model, seperti ini:

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)

Untuk ACI atau layanan lokal, Anda dapat menghilangkan parameter deployment_target (atau mengaturnya ke Tidak Ada).

Catatan

Informasi Lebih Lanjut: Untuk informasi selengkapnya tentang menerapkan model dengan Azure Machine Learning, lihat Menerapkan model dengan Azure Machine Learning dalam dokumentasi.