Melatih model Keras dalam skala besar dengan Azure Machine Learning

BERLAKU UNTUK:SDK Python azureml v1

Dalam artikel ini, pelajari cara menjalankan skrip pelatihan Keras Anda dengan Azure Machine Learning.

Kode contoh dalam artikel ini menunjukkan kepada Anda cara melatih dan mendaftarkan model klasifikasi Keras yang dibangun menggunakan backend TensorFlow dengan Azure Machine Learning. Ini menggunakan himpunan data MNIST populer untuk mengklasifikasikan digit tulisan tangan menggunakan jaringan neural mendalam (DNN) yang dibangun menggunakan pustaka Keras Python yang berjalan di atas TensorFlow.

Keras adalah API jaringan neural tingkat tinggi yang mampu menjalankan kerangka kerja DNN populer lainnya untuk menyederhanakan pengembangan. Dengan Azure Machine Learning, Anda dapat dengan cepat meluaskan skala pekerjaan pelatihan menggunakan sumber daya komputasi cloud elastis. Anda juga dapat melacak eksekusi pelatihan, model versi, model penyebaran, dan banyak lagi.

Baik Anda mengembangkan model Keras dari awal atau membawa model yang sudah ada ke cloud, Azure Machine Learning dapat membantu Anda membangun model siap produksi.

Catatan

Jika Anda menggunakan tf.keras Keras API yang ada di TensorFlow dan bukan paket Keras mandiri, lihat model Train TensorFlow.

Prasyarat

Jalankan kode ini pada salah satu lingkungan ini:

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

    • Menyelesaikan Mulai Cepat: Mulai menggunakan Azure Machine Learning untuk membuat server buku catatan khusus yang telah dimuat sebelumnya dengan SDK dan repositori sampel.
    • Di folder sampel di server buku catatan, temukan buku catatan yang telah selesai dan diperluas dengan membuka direktori ini: folder how-to-use-azureml > ml-frameworks > keras > train-hyperparameter-tune-deploy-with-keras.
  • Server Notebook Jupyter Anda sendiri

    Anda juga dapat menemukan versi Jupyter Notebook yang telah selesai dari panduan ini di halaman sampel GitHub. Buku catatan ini mencakup bagian yang diperluas yang mencakup penyetelan hyperparameter cerdas, penyebaran model, dan widget buku catatan.

Sebelum dapat menjalankan kode dalam artikel ini untuk membuat kluster GPU, Anda harus meminta peningkatan kuota untuk ruang kerja Anda.

Menyiapkan eksperimen

Bagian ini menyiapkan eksperimen pelatihan dengan memuat paket Python yang diperlukan, menginisialisasi ruang kerja, membuat FileDataset untuk input data pelatihan, membuat target komputasi, dan menentukan lingkungan pelatihan.

Mengimpor paket

Pertama, impor pustaka Python yang diperlukan.

import os
import azureml
from azureml.core import Experiment
from azureml.core import Environment
from azureml.core import Workspace, Run
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

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.

ws = Workspace.from_config()

Membuat himpunan data file

Objek FileDataset mereferensikan satu atau beberapa file di datastore ruang kerja atau url publik Anda. File dapat dalam format apa pun, dan kelas memberi Anda kemampuan untuk mengunduh atau menginstal file ke komputasi Anda. Dengan membuat FileDataset, Anda membuat referensi ke lokasi sumber data. Jika Anda menerapkan transformasi apa pun ke himpunan data, transformasi tersebut akan disimpan dalam himpunan data juga. Data tetap berada di lokasi yang ada, sehingga tidak ada biaya penyimpanan tambahan yang dikeluarkan. Lihat panduan cara pada paket Dataset untuk informasi selengkapnya.

from azureml.core.dataset import Dataset

web_paths = [
            'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz'
            ]
dataset = Dataset.File.from_files(path=web_paths)

Anda dapat menggunakan metode register() untuk mendaftarkan himpunan data ke ruang kerja Anda sehingga dapat dibagikan dengan yang lain, digunakan kembali di berbagai eksperimen, dan dirujuk berdasarkan nama dalam skrip pelatihan Anda.

dataset = dataset.register(workspace=ws,
                           name='mnist-dataset',
                           description='training and test dataset',
                           create_new_version=True)

Membuat target komputasi

Buat target komputasi untuk menjalankan tugas pelatihan Anda. Dalam contoh ini, buat kluster komputasi Azure Machine Learning yang diaktifkan GPU.

Penting

Sebelum dapat membuat kluster GPU, Anda harus meminta peningkatan kuota untuk ruang kerja Anda.

cluster_name = "gpu-cluster"

try:
    compute_target = ComputeTarget(workspace=ws, name=cluster_name)
    print('Found existing compute target')
except ComputeTargetException:
    print('Creating a new compute target...')
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6',
                                                           max_nodes=4)

    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

    compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)

Catatan

Anda dapat memilih untuk menggunakan VM prioritas rendah untuk menjalankan beberapa atau semua beban kerja Anda. Lihat cara membuat VM prioritas rendah.

Untuk informasi selengkapnya tentang target komputasi, lihat artikel apa yang dimaksud dengan target komputasi.

Menentukan lingkungan Anda

Tentukan Lingkungan Azure ML yang merangkum dependensi skrip pelatihan Anda.

Pertama, tentukan dependensi conda Anda dalam file YAML; dalam contoh ini file bernama conda_dependencies.yml.

channels:
- conda-forge
dependencies:
- python=3.6.2
- pip:
  - azureml-defaults
  - tensorflow-gpu==2.0.0
  - keras<=2.3.1
  - matplotlib

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

Secara default, jika tidak ada gambar dasar yang ditentukan, Azure ML akan menggunakan gambar CPU azureml.core.environment.DEFAULT_CPU_IMAGE sebagai gambar dasar. Karena contoh ini menjalankan pelatihan pada kluster GPU, Anda harus menentukan gambar dasar GPU yang memiliki driver dan dependensi GPU yang diperlukan. Azure ML mempertahankan sekumpulan gambar dasar yang diterbitkan di Microsoft Container Registry (MCR) yang dapat Anda gunakan, lihat repositori GitHub Azure/AzureML-Containers untuk informasi selengkapnya.

keras_env = Environment.from_conda_specification(name='keras-env', file_path='conda_dependencies.yml')

# Specify a GPU base image
keras_env.docker.enabled = True
keras_env.docker.base_image = 'mcr.microsoft.com/azureml/openmpi3.1.2-cuda10.0-cudnn7-ubuntu18.04'

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

Pertama, dapatkan data dari datastore ruang kerja menggunakan kelas Dataset.

dataset = Dataset.get_by_name(ws, 'mnist-dataset')

# list the files referenced by mnist-dataset
dataset.to_path()

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. DatasetConsumptionConfig untuk FileDataset diteruskan sebagai argumen ke skrip pelatihan, untuk argumen --data-folder. Azure ML akan menyelesaikan DatasetConsumptionConfig ini ke titik pemasangan datastore cadangan, yang kemudian dapat diakses dari skrip pelatihan.

from azureml.core import ScriptRunConfig

args = ['--data-folder', dataset.as_mount(),
        '--batch-size', 50,
        '--first-layer-neurons', 300,
        '--second-layer-neurons', 100,
        '--learning-rate', 0.001]

src = ScriptRunConfig(source_directory=script_folder,
                      script='keras_mnist.py',
                      arguments=args,
                      compute_target=compute_target,
                      environment=keras_env)

Untuk informasi selengkapnya tentang mengonfigurasi pekerjaan dengan ScriptRunConfig, lihat Mengonfigurasi dan mengirimkan eksekusi pelatihan.

Peringatan

Jika sebelumnya Anda menggunakan estimator TensorFlow untuk mengonfigurasi tugas pelatihan Keras, harap perhatikan bahwa Estimator tidak digunakan lagi sejak rilis SDK 1.19.0. Dengan SDK Azure ML >= 1.15.0, ScriptRunConfig adalah cara yang disarankan untuk mengonfigurasi pekerjaan pelatihan, termasuk yang menggunakan kerangka kerja pembelajaran mendalam. Untuk pertanyaan migrasi umum, lihat Panduan migrasi Estimator ke ScriptRunConfig.

Mengirimkan eksekusi Anda

Objek Jalankan menyediakan antarmuka untuk riwayat eksekusi saat pekerjaan sedang berjalan dan setelah selesai.

run = Experiment(workspace=ws, name='Tutorial-Keras-Minst').submit(src)
run.wait_for_completion(show_output=True)

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.

  • Pasca-Pemrosesan: folder ./outputs dari eksekusi disalin ke riwayat eksekusi.

Mendaftarkan model

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

model = run.register_model(model_name='keras-mnist', model_path='outputs/model')

Tip

Cara penyebaran berisi bagian tentang mendaftarkan model, tetapi Anda dapat langsung melompat ke membuat target komputasi untuk penyebaran, karena Anda sudah memiliki model terdaftar.

Anda juga dapat mengunduh salinan lokal model. Ini dapat berguna untuk melakukan pekerjaan validasi model tambahan secara lokal. Dalam skrip pelatihan, keras_mnist.py, objek penghemat TensorFlow mempertahankan model ke folder lokal (lokal ke target komputasi). Anda dapat menggunakan objek Jalankan untuk mengunduh salinan dari riwayat eksekusi.

# Create a model folder in the current directory
os.makedirs('./model', exist_ok=True)

for f in run.get_file_names():
    if f.startswith('outputs/model'):
        output_file_path = os.path.join('./model', f.split('/')[-1])
        print('Downloading from {} to {} ...'.format(f, output_file_path))
        run.download_file(name=f, output_file_path=output_file_path)

Langkah berikutnya

Dalam artikel ini, Anda melatih dan mendaftarkan model Keras di Azure Machine Learning. Untuk mempelajari cara menyebarkan model, lanjutkan ke artikel penyebaran model.