Tutorial: Melatih dan menyebarkan model klasifikasi gambar dengan contoh Notebook Jupyter

BERLAKU UNTUK:Python SDK azureml v1

Dalam tutorial ini, Anda melatih model pembelajaran mesin di sumber daya komputasi jarak jauh. Anda akan menggunakan alur kerja pelatihan dan penyebaran untuk Azure Machine Learning di Python Jupyter Notebook. Kemudian, Anda dapat menggunakan buku catatan sebagai templat untuk melatih model pembelajaran mesin Anda sendiri dengan data Anda sendiri.

Tutorial ini melatih regresi logistik sederhana dengan menggunakan himpunan data MNIST dan scikit-learn dengan Azure Machine Learning. MNIST adalah himpunan data populer yang terdiri dari 70.000 gambar skala abu-abu. Setiap gambar adalah digit tulisan tangan 28 x 28 piksel, yang mewakili angka dari nol hingga sembilan. Tujuannya adalah untuk membuat pengklasifikasi multi-kelas untuk mengidentifikasi digit yang diwakili gambar tertentu.

Pelajari cara melakukan tindakan berikut:

  • Unduh himpunan data dan lihat datanya.
  • Latih model klasifikasi gambar dan metrik log menggunakan MLflow.
  • Sebarkan model untuk melakukan inferensi real time.

Prasyarat

Menjalankan buku catatan di ruang kerja Anda

Azure Machine Learning menyertakan server buku catatan cloud di ruang kerja Anda untuk pengalaman tanpa pemasangan dan prakonfigurasi. Gunakan lingkungan Anda sendiri jika lebih suka memiliki kontrol atas lingkungan, paket, dan dependensi Anda.

Ikuti video ini atau gunakan langkah-langkah yang detail untuk mengkloning dan menjalankan buku catatan tutorial dari ruang kerja Anda.

Catatan

Video ini membantu Anda memahami prosesnya, tetapi menunjukkan pembukaan file yang berbeda. Untuk tutorial ini, setelah Anda mengkloning folder tutorial, gunakan instruksi di bawah ini untuk membuka buku catatan yang dikloning.

Mengkloning folder buku catatan

Anda menyelesaikan persiapan eksperimen berikut dan menjalankan langkah-langkah di studio Azure Machine Learning. Antarmuka konsolidasi ini mencakup alat pembelajaran mesin untuk melakukan skenario ilmu data untuk praktisi ilmu data dari semua tingkat keterampilan.

  1. Masuk ke studio Azure Machine Learning.

  2. Pilih langganan dan ruang kerja yang Anda buat.

  3. Di sebelah kiri, pilih Buku catatan.

  4. Di bagian atas, pilih tab Sampel.

  5. Buka folder dengan nomor versi di dalamnya. Nomor ini menunjukkan rilis saat ini untuk SDK Python.

  6. Pilih tombol ... di sebelah kanan folder tutorial, lalu pilih Klon.

    Screenshot that shows the Clone tutorials folder.

  7. Daftar folder menunjukkan masing-masing pengguna yang mengakses ruang kerja. Pilih folder Anda untuk mengkloning folder tutorial di sana.

Membuka buku catatan yang dikloning

  1. Buka folder tutorial yang dikloning ke bagian File pengguna.

    Penting

    Anda dapat melihat buku catatan di folder sampel, tetapi Anda tidak dapat menjalankan buku catatan dari sana. Untuk menjalankan buku catatan, pastikan Anda membuka versi kloning buku catatan di bagian File Pengguna.

  2. Pilih file quickstart-azureml-in-10mins.ipynb dari folder compute-instance-quickstarts/quickstart-azureml-in-10mins Anda.

    Screenshot shows the Open tutorials folder.

  3. Di bilah atas, pilih instans komputasi yang Anda buat saat Mulai Cepat: Memulai dengan Azure Machine Learning untuk digunakan menjalankan buku catatan.

Instal paket

Setelah instans komputasi berjalan dan kernel muncul, tambahkan sel kode baru untuk memasang paket yang diperlukan untuk tutorial ini.

  1. Di bagian atas buku catatan, tambahkan sel kode. Screenshot of add code cell for notebook.

  2. Tambahkan hal berikut ke dalam sel, lalu jalankan sel dengan menggunakan alat Jalankan atau dengan menggunakan Shift+Enter.

    %pip install scikit-learn==0.22.1
    %pip install scipy==1.5.2
    

Anda mungkin akan melihat beberapa peringatan pemasangan. Hal ini dapat diabaikan dengan aman.

Menjalankan notebook

Tutorial ini dan file utils.py yang menyertainya juga tersedia di GitHub jika Anda ingin menggunakannya di lingkungan lokal Anda sendiri. Jika Anda tidak menggunakan instans komputasi, tambahkan %pip install azureml-sdk[notebooks] azureml-opendatasets matplotlib ke pemasangan di atas.

Penting

Bagian lain dari artikel ini berisi konten yang sama seperti yang Anda lihat di buku catatan.

Beralih ke Notebook Jupyter sekarang jika Anda ingin menjalankan kode sambil membaca. Untuk menjalankan sel kode tunggal di buku catatan, klik sel kode dan tekan Shift+Enter. Atau, jalankan seluruh buku catatan dengan memilih Jalankan semua dari toolbar atas.

Impor data

Sebelum anda melatih model, anda perlu memahami data yang anda gunakan untuk melatihnya. Di bagian ini, pelajari cara untuk:

  • Mengunduh himpunan data MNIST
  • Menampilkan beberapa sampel gambar

Anda akan menggunakan Azure Open Datasets untuk mendapatkan file data MNIST mentah. Azure Open Datasets adalah kumpulan himpunan data publik yang dapat Anda gunakan untuk menambahkan fitur khusus skenario ke solusi pembelajaran mesin untuk model yang lebih baik. Setiap himpunan data memiliki kelas yang sesuai, MNIST dalam hal ini, untuk mengambil data dengan cara yang berbeda.

import os
from azureml.opendatasets import MNIST

data_folder = os.path.join(os.getcwd(), "/tmp/qs_data")
os.makedirs(data_folder, exist_ok=True)

mnist_file_dataset = MNIST.get_file_dataset()
mnist_file_dataset.download(data_folder, overwrite=True)

Perhatikan datanya

Muat file terkompresi ke array numpy. Kemudian, gunakan matplotlib untuk merencanakan 30 gambar acak dari himpunan data dengan label di atasnya.

Perhatikan bahwa langkah ini memerlukan fungsi load_data yang disertakan dalam file utils.py. File ini ditempatkan di folder yang sama dengan buku catatan ini. Fungsi load_data ini hanya menguraikan file terkompresi ke dalam array numpy.

from utils import load_data
import matplotlib.pyplot as plt
import numpy as np
import glob


# note we also shrink the intensity values (X) from 0-255 to 0-1. This helps the model converge faster.
X_train = (
    load_data(
        glob.glob(
            os.path.join(data_folder, "**/train-images-idx3-ubyte.gz"), recursive=True
        )[0],
        False,
    )
    / 255.0
)
X_test = (
    load_data(
        glob.glob(
            os.path.join(data_folder, "**/t10k-images-idx3-ubyte.gz"), recursive=True
        )[0],
        False,
    )
    / 255.0
)
y_train = load_data(
    glob.glob(
        os.path.join(data_folder, "**/train-labels-idx1-ubyte.gz"), recursive=True
    )[0],
    True,
).reshape(-1)
y_test = load_data(
    glob.glob(
        os.path.join(data_folder, "**/t10k-labels-idx1-ubyte.gz"), recursive=True
    )[0],
    True,
).reshape(-1)


# now let's show some randomly chosen images from the traininng set.
count = 0
sample_size = 30
plt.figure(figsize=(16, 6))
for i in np.random.permutation(X_train.shape[0])[:sample_size]:
    count = count + 1
    plt.subplot(1, sample_size, count)
    plt.axhline("")
    plt.axvline("")
    plt.text(x=10, y=-10, s=y_train[i], fontsize=18)
    plt.imshow(X_train[i].reshape(28, 28), cmap=plt.cm.Greys)
plt.show()

Kode di atas menampilkan satu set gambar acak dengan labelnya, serupa dengan ini:

Sample images with their labels.

Melatih model dan metrik log dengan MLflow

Anda akan melatih model menggunakan kode di bawah ini. Perhatikan bahwa Anda menggunakan pembuatan log otomatis MLflow untuk melacak metrik dan membuat log artefak model.

Anda akan menggunakan pengklasifikasi LogisticRegression dari kerangka kerja SciKit Learn untuk mengklasifikasikan data.

Catatan

Pelatihan model membutuhkan waktu sekitar 2 menit untuk selesai.**

# create the model
import mlflow
import numpy as np
from sklearn.linear_model import LogisticRegression
from azureml.core import Workspace

# connect to your workspace
ws = Workspace.from_config()

# create experiment and start logging to a new run in the experiment
experiment_name = "azure-ml-in10-mins-tutorial"

# set up MLflow to track the metrics
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
mlflow.set_experiment(experiment_name)
mlflow.autolog()

# set up the Logistic regression model
reg = 0.5
clf = LogisticRegression(
    C=1.0 / reg, solver="liblinear", multi_class="auto", random_state=42
)

# train the model
with mlflow.start_run() as run:
    clf.fit(X_train, y_train)

Lihat eksperimen

Di menu sebelah kiri di Studio Azure Machine Learning, pilih Eksperimen lalu pilih eksperimen Anda (azure-ml-in10-mins-tutorial). Eksperimen adalah pengelompokan banyak eksekusi dari skrip atau sepotong kode tertentu. Informasi untuk eksekusi disimpan pada percobaan. Jika nama tidak ada saat Anda mengirimkan eksperimen, jika Anda memilih eksekusi, Anda akan melihat berbagai tab yang berisi metrik, log, penjelasan, dll.

Kontrol versi model Anda dengan registri model

Anda dapat menggunakan pendaftaran model untuk menyimpan dan membuat versi model di ruang kerja Anda. Model terdaftar diidentifikasi berdasarkan nama dan versi. Setiap kali Anda mendaftarkan model dengan nama yang sama dengan yang sudah ada, registri akan meningkatkan versinya. Kode di bawah ini mendaftarkan dan membuat versi model yang Anda latih di atas. Setelah Anda menjalankan sel kode di bawah ini, Anda akan dapat melihat model di registri dengan memilih Model di menu sebelah kiri di Studio Azure Machine Learning.

# register the model
model_uri = "runs:/{}/model".format(run.info.run_id)
model = mlflow.register_model(model_uri, "sklearn_mnist_model")

Menyebarkan model untuk inferensi real time

Di bagian ini Anda mempelajari cara menyebarkan model sehingga aplikasi dapat mengonsumsi (inferensi) model melalui REST.

Membuat konfigurasi penyebaran

Sel kode mendapatkan lingkungan yang dikumpulkan, yang menentukan semua dependensi yang diperlukan untuk menghosting model (misalnya, paket seperti scikit-learn). Selain itu, Anda membuat konfigurasi penyebaran, yang menentukan jumlah komputasi yang diperlukan untuk menghosting model. Dalam hal ini, komputasi akan memiliki 1CPU dan 1GB memori.

# create environment for the deploy
from azureml.core.environment import Environment
from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.webservice import AciWebservice

# get a curated environment
env = Environment.get(
    workspace=ws, 
    name="AzureML-sklearn-0.24.1-ubuntu18.04-py37-cpu-inference",
    version=1
)
env.inferencing_stack_version='latest'

# create deployment config i.e. compute resources
aciconfig = AciWebservice.deploy_configuration(
    cpu_cores=1,
    memory_gb=1,
    tags={"data": "MNIST", "method": "sklearn"},
    description="Predict MNIST with sklearn",
)

Menyebarkan model

Sel kode berikutnya ini menyebarkan model ke Instans Kontainer Azure.

Catatan

Penyebaran membutuhkan waktu sekitar 3 menit untuk selesai.**

%%time
import uuid
from azureml.core.model import InferenceConfig
from azureml.core.environment import Environment
from azureml.core.model import Model

# get the registered model
model = Model(ws, "sklearn_mnist_model")

# create an inference config i.e. the scoring script and environment
inference_config = InferenceConfig(entry_script="score.py", environment=env)

# deploy the service
service_name = "sklearn-mnist-svc-" + str(uuid.uuid4())[:4]
service = Model.deploy(
    workspace=ws,
    name=service_name,
    models=[model],
    inference_config=inference_config,
    deployment_config=aciconfig,
)

service.wait_for_deployment(show_output=True)

File skrip penilaian yang direferensikan dalam kode di atas dapat ditemukan di folder yang sama dengan buku catatan ini, dan memiliki dua fungsi:

  1. Fungsi init yang dijalankan sekali ketika layanan dimulai - dalam fungsi ini Anda biasanya mendapatkan model dari registri dan mengatur variabel global
  2. Fungsi run(data) yang dijalankan setiap kali panggilan dilakukan ke layanan. Dalam fungsi ini, Anda biasanya memformat data input, menjalankan prediksi, dan membuat output hasil yang diprediksi.

Menampilkan titik akhir

Setelah model berhasil disebarkan, Anda dapat melihat titik akhir dengan masuk ke Titik Akhir di menu sebelah kiri di Studio Azure Machine Learning. Anda akan dapat melihat status titik akhir (sehat/tidak sehat), log, dan konsumsi (bagaimana aplikasi dapat mengonsumsi model).

Menguji layanan model

Anda dapat menguji model dengan mengirimkan permintaan HTTP mentah untuk menguji layanan web.

# send raw HTTP request to test the web service.
import requests

# send a random row from the test set to score
random_index = np.random.randint(0, len(X_test) - 1)
input_data = '{"data": [' + str(list(X_test[random_index])) + "]}"

headers = {"Content-Type": "application/json"}

resp = requests.post(service.scoring_uri, input_data, headers=headers)

print("POST to url", service.scoring_uri)
print("label:", y_test[random_index])
print("prediction:", resp.text)

Membersihkan sumber daya

Jika Anda tidak akan terus menggunakan model ini, hapus Layanan model menggunakan:

# if you want to keep workspace and only delete endpoint (it will incur cost while running)
service.delete()

Jika Anda ingin mengontrol biaya lebih lanjut, hentikan instans komputasi dengan memilih tombol "Hentikan komputasi" di samping dropdown Komputasi. Kemudian mulai instans komputasi lagi saat Anda membutuhkannya.

Menghapus semuanya

Gunakan langkah-langkah ini untuk menghapus ruang kerja dan semua sumber daya komputasi Azure Machine Learning Anda.

Penting

Sumber daya yang Anda buat sebagai prasyarat untuk tutorial dan artikel cara penggunaan Azure Machine Learning lainnya.

Jika Anda tidak berencana menggunakan sumber daya yang sudah Anda buat, hapus sehingga Anda tidak dikenakan biaya apa pun:

  1. Dari portal Microsoft Azure, pilih Grup sumber daya dari sisi sebelah kiri.

  2. Dari daftar, pilih grup sumber daya yang Anda buat.

  3. Pilih Hapus grup sumber daya.

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

  4. Masukkan nama grup sumber daya. Kemudian pilih Hapus.

Langkah berikutnya