Melatih model scikit-learn dalam skala besar dengan Azure Machine Learning

Dalam artikel ini, pelajari cara menjalankan skrip pelatihan scikit-learn dengan Azure Machine Learning.

Contoh skrip dalam artikel ini digunakan untuk mengklasifikasikan gambar bunga iris untuk membangun model pembelajaran mesin berdasarkan himpunan data iris scikit-learn.

Baik melatih model scikit-learn pembelajaran mesin dari awal atau membawa model yang ada ke cloud, Anda dapat menggunakan Azure Machine Learning untuk memperluas skala pekerjaan pelatihan sumber terbuka menggunakan sumber daya komputasi cloud elastis. Anda dapat membuat, menyebarkan, membuat versi, dan memantau model tingkat produksi dengan Azure Machine Learning.

Prasyarat

Jalankan kode ini pada salah satu lingkungan tersebut:

  • Instans komputasi Azure Machine Learning - tidak perlu mengunduh atau memasang

    • Selesaikan Mulai Cepat: Mulai menggunakan Azure Machine Learning untuk membuat server buku catatan khusus yang telah dimuat sebelumnya dengan SDK dan repositori sampel.
    • Dalam contoh folder pelatihan di server notebook, temukan notebook yang telah selesai dan diperluas dengan menavigasi ke direktori ini: folder how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn.
  • Server Notebook Jupyter Anda sendiri

Menyiapkan eksperimen

Bagian ini menyiapkan eksperimen pelatihan dengan memuat paket Python yang diperlukan, menginisialisasi ruang kerja, membuat lingkungan pelatihan, dan menyiapkan skrip pelatihan.

Menginisialisasi ruang kerja

Ruang kerja Azure Machine Learning adalah sumber daya tingkat teratas untuk layanan ini. Ini menyediakan tempat terpusat untuk bekerja dengan semua artefak yang Anda buat. Di Python SDK, Anda dapat mengakses artefak ruang kerja dengan membuat objek workspace.

Buat objek ruang kerja dari file config.json yang dibuat di bagian prasyarat.

from azureml.core import Workspace

ws = Workspace.from_config()

Mempersiapkan skrip

Dalam tutorial ini, skrip pelatihan train_iris.py disediakan untuk Anda di sini. Dalam praktiknya, Anda harus dapat mengambil skrip pelatihan kustom apa adanya dan menjalankannya dengan Azure ML tanpa harus memodifikasi kode.

Catatan:

  • Skrip pelatihan yang disediakan menunjukkan cara mencatat beberapa metrik ke proses Azure ML menggunakan objek Run dalam skrip.
  • Skrip pelatihan yang disediakan menggunakan data contoh dari fungsi iris = datasets.load_iris(). Untuk menggunakan dan mengakses data Anda sendiri, lihat cara berlatih dengan himpunan data agar data tersedia selama pelatihan.

Menentukan lingkungan

Untuk menentukan Lingkungan Azure ML yang merangkum dependensi skrip pelatihan, Anda dapat menentukan lingkungan kustom atau menggunakan lingkungan yang dikumpulkan Azure ML.

Menggunakan lingkungan yang dikumpulkan

Azure ML menyediakan lingkungan yang telah dibangun dan dikumpulkan jika Anda tidak ingin menentukan lingkungan Anda sendiri. Untuk informasi selengkapnya, lihat di sini. Jika ingin menggunakan lingkungan yang dikumpulkan, Anda dapat menjalankan perintah berikut:

from azureml.core import Environment

sklearn_env = Environment.get(workspace=ws, name='AzureML-Tutorial')

Membuat lingkungan kustom

Anda juga dapat membuat lingkungan kustom Anda sendiri. Tentukan dependensi conda dalam file YAML; dalam contoh ini file diberi nama conda_dependencies.yml.

dependencies:
  - python=3.6.2
  - scikit-learn
  - numpy
  - pip:
    - azureml-defaults

Buat lingkungan Azure ML dari spesifikasi lingkungan Conda ini. Lingkungan akan dikemas ke dalam kontainer Docker pada saat runtime.

from azureml.core import Environment

sklearn_env = Environment.from_conda_specification(name='sklearn-env', file_path='conda_dependencies.yml')

Untuk informasi selengkapnya tentang membuat dan menggunakan lingkungan, lihat Membuat dan menggunakan lingkungan perangkat lunak di Azure Machine Learning.

Mengonfigurasi dan mengirimkan eksekusi pelatihan Anda

Membuat ScriptRunConfig

Buat objek ScriptRunConfig untuk menentukan detail konfigurasi pekerjaan pelatihan, yang mencakup skrip pelatihan, lingkungan yang akan digunakan, dan target komputasi yang akan dijalankan. Argumen apa pun ke skrip pelatihan Anda akan diteruskan melalui baris perintah jika ditentukan dalam parameter arguments.

Kode berikut akan mengonfigurasi objek ScriptRunConfig untuk mengirimkan pekerjaan Anda untuk dieksekusi di komputer lokal.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      environment=sklearn_env)

Jika Anda ingin menjalankan pekerjaan Anda pada kluster jarak jauh, Anda dapat menentukan target komputasi yang diinginkan ke parameter compute_target ScriptRunConfig.

from azureml.core import ScriptRunConfig

compute_target = ws.compute_targets['<my-cluster-name>']
src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      compute_target=compute_target,
                      environment=sklearn_env)

Mengirimkan eksekusi Anda

from azureml.core import Experiment

run = Experiment(ws,'Tutorial-TrainIRIS').submit(src)
run.wait_for_completion(show_output=True)

Peringatan

Azure Machine Learning menjalankan skrip pelatihan dengan menyalin seluruh direktori sumber. Jika Anda memiliki data sensitif yang tidak ingin diunggah, gunakan file .ignore atau jangan sertakan dalam direktori sumber. Sebagai gantinya, akses data Anda menggunakan himpunan data Azure ML.

Apa yang terjadi selama eksekusi dijalankan

Saat eksekusi dijalankan, eksekusi melewati tahap-tahap berikut:

  • Persiapan: Gambar docker dibuat sesuai dengan lingkungan yang ditentukan. Gambar diunggah ke registri kontainer ruang kerja dan di-cache untuk dijalankan nantinya. Log juga di-streaming ke riwayat eksekusi dan dapat ditampilkan untuk memantau perkembangan. Jika lingkungan yang dikumpulkan ditentukan, gambar yang di-cache dan mendukung lingkungan yang dikumpulkan akan digunakan.

  • Penskalaan: Kluster mencoba meningkatkan skala jika kluster Batch AI membutuhkan lebih banyak simpul untuk menjalankan proses daripada yang tersedia saat ini.

  • Dijalankan: Semua skrip dalam folder skrip diunggah ke target komputasi, penyimpanan data dipasang atau disalin, dan script dijalankan. Output dari stdout dan folder ./logs di-streaming ke riwayat proses dam dapat digunakan untuk memantau proses.

  • Pascapemrosesan: folder ./outputs dari proses disalin ke riwayat proses.

Menyimpan dan mendaftarkan model

Setelah melatih model, Anda dapat menyimpan dan mendaftarkannya ke ruang kerja. Pendaftaran model memungkinkan Anda menyimpan dan membuat versi model di ruang kerja untuk menyederhanakan manajemen dan penyebaran model.

Tambahkan kode berikut ke skrip pelatihan, train_iris.py, untuk menyimpan model.

import joblib

joblib.dump(svm_model_linear, 'model.joblib')

Daftarkan model ke ruang kerja dengan kode berikut. Dengan menentukan parameter model_framework,model_framework_version, dan resource_configuration, penyebaran model tanpa kode menjadi tersedia. Penyebaran model tanpa kode memungkinkan Anda secara langsung menyebarkan model sebagai layanan web dari model terdaftar, dan objek ResourceConfigurationmenentukan sumber daya komputasi untuk layanan web.

from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration

model = run.register_model(model_name='sklearn-iris', 
                           model_path='outputs/model.joblib',
                           model_framework=Model.Framework.SCIKITLEARN,
                           model_framework_version='0.19.1',
                           resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))

Penyebaran

Model yang baru saja Anda daftarkan dapat digunakan dengan cara yang sama persis seperti model terdaftar lainnya di Azure ML. Petunjuk penyebaran berisi bagian tentang mendaftarkan model, tetapi Anda dapat langsung melompat ke membuat target komputasi untuk penyebaran, karena Anda sudah memiliki model terdaftar.

(Pratinjau) Penyebaran model tanpa kode

Alih-alih rute penyebaran tradisional, Anda juga dapat menggunakan fitur penyebaran tanpa kode (pratinjau) untuk scikit-learn. Penyebaran model tanpa kode didukung untuk semua jenis model scikit-learn bawaan. Dengan mendaftarkan model seperti yang ditunjukkan di atas dengan model_framework, model_framework_version, resource_configuration parameter, Anda cukup menggunakan fungsi statis deploy() untuk menyebarkan model.

web_service = Model.deploy(ws, "scikit-learn-service", [model])

CATATAN: Dependensi ini disertakan dalam kontainer inferensi scikit-learn bawaan.

    - azureml-defaults
    - inference-schema[numpy-support]
    - scikit-learn
    - numpy

Cara lengkap untuk mencakup penyebaran di Azure Machine Learning secara lebih mendalam.

Langkah berikutnya

Dalam artikel ini, Anda melatih dan mendaftarkan model scikit-learn, dan mempelajari tentang opsi penyebaran. Lihat artikel lainnya ini untuk mempelajari selengkapnya tentang Azure Machine Learning.