Melatih model scikit-learn dalam skala besar dengan Azure Machine Learning (SDK v1)

BERLAKU UNTUK:Python SDK azureml v1

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

Anda dapat menjalankan kode ini dalam instans komputasi Azure Machine Learning, atau Jupyter Notebook Anda sendiri:

  • Instans komputasi Azure Machine Learning

    • Menyelesaikan Mulai Cepat: Mulai menggunakan Azure Machine Learning untuk membuat instans komputasi. Setiap instans komputasi menyertakan server buku catatan khusus yang dimuat sebelumnya dengan SDK dan repositori sampel notebook.
    • Pilih tab notebook di studio Azure Machine Learning. 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.
    • Anda dapat menggunakan kode pra-populated di folder pelatihan sampel untuk menyelesaikan tutorial ini.
  • Buat server Jupyter Notebook dan jalankan kode di bagian berikut.

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 sudah disediakan untuk Anda. Dalam praktiknya, Anda harus dapat mengambil skrip pelatihan kustom apa adanya dan menjalankannya dengan Azure Machine Learning tanpa harus memodifikasi kode Anda.

Catatan

  • Skrip pelatihan yang disediakan menunjukkan cara mencatat beberapa metrik ke eksekusi Azure Machine Learning Anda menggunakan Run objek 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 Machine Learning yang merangkum dependensi skrip pelatihan Anda, Anda dapat menentukan lingkungan kustom atau penggunaan dan lingkungan yang dikumpulkan Azure Machine Learning.

Menggunakan lingkungan yang dikumpulkan

Secara opsional, Azure Machine Learning menyediakan lingkungan bawaan yang dikumpulkan jika Anda tidak ingin menentukan lingkungan Anda sendiri.

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.7
  - scikit-learn
  - numpy
  - pip:
    - azureml-defaults

Buat lingkungan Azure Machine Learning 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 Machine Learning.

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 eksekusi 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 eksekusi dan dapat digunakan untuk memantau eksekusi.

  • 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 disebarkan dengan cara yang sama persis seperti model terdaftar lainnya di Azure Machine Learning. Cara penyebaran berisi bagian tentang mendaftarkan model, tetapi Anda dapat langsung melompat ke [creating a compute targethow-to-deploy-and-where.md#choose-a-compute-target) untuk penyebaran, karena Anda sudah memiliki model terdaftar.

(Pratinjau) Penyebaran model tanpa kode

Penting

Fitur ini sedang dalam pratinjau umum. Versi pratinjau ini disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan yang dibatasi.

Untuk informasi lebih lanjut, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

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 Anda seperti yang ditunjukkan di atas dengan model_framework, model_framework_version, resource_configuration parameter, Anda cukup menggunakan fungsi statis deploy() untuk menyebarkan model Anda.

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.