Melatih model PyTorch dalam skala besar dengan Azure Machine Learning SDK (v1)

BERLAKU UNTUK:SDK Python azureml v1

Dalam artikel ini, pelajari cara menjalankan skrip pelatihan PyTorch Anda pada skala perusahaan menggunakan Azure Machine Learning.

Contoh skrip dalam artikel ini digunakan untuk mengklasifikasikan gambar ayam dan kalkun untuk membangun jaringan neural pembelajaran mendalam (DNN) berdasarkan tutorial pembelajaran transfer PyTorch. Pembelajaran transfer adalah teknik yang menerapkan pengetahuan yang diperoleh dari pemecahan satu masalah ke masalah lain tetapi masih terkait. Pembelajaran transfer mempersingkat proses pelatihan dengan membutuhkan lebih sedikit data, waktu, dan sumber daya komputasi daripada pelatihan dari awal. Untuk mempelajari selengkapnya tentang pembelajaran transfer, lihat artikel pembelajaran mendalam vs pembelajaran mesin.

Baik melatih model pembelajaran mendalam PyTorch dari awal atau membawa model yang sudah ada ke cloud, Anda dapat menggunakan Azure Machine Learning untuk meningkatkan 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 ini:

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

    • 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 pembelajaran mendalam di server buku catatan, temukan buku catatan yang telah selesai dan diperluas dengan menavigasi ke direktori ini: folder how-to-use-azureml > ml-frameworks > pytorch > train-hyperparameter-tune-deploy-with-pytorch.
  • 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 target komputasi, dan mendefinisikan lingkungan pelatihan.

Mengimpor paket

Pertama, impor pustaka Python yang diperlukan.

import os
import shutil

from azureml.core.workspace import Workspace
from azureml.core import Experiment
from azureml.core import Environment

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 SDK Python, 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()

Mendapatkan data

Dataset terdiri dari sekitar 120 gambar pelatihan, masing-masing untuk kalkun dan ayam, dengan 100 gambar validasi untuk setiap kelas. Kami akan mengunduh dan mengekstrak himpunan data sebagai bagian dari skrip pelatihan kamipytorch_train.py. Gambar adalah subkumpulan dari Open Images v5 Dataset. Untuk langkah-langkah selengkapnya mengenai pembuatan JSONL untuk dilatih dengan data Anda sendiri, lihat buku catatan Jupyter ini.

Mempersiapkan skrip pelatihan

Dalam tutorial ini, skrip pelatihan, pytorch_train.py, telah disediakan. Dalam praktiknya, Anda dapat mengambil skrip pelatihan kustom apa pun, apa adanya, dan menjalankannya dengan Azure Machine Learning.

Buat folder untuk skrip pelatihan Anda.

project_folder = './pytorch-birds'
os.makedirs(project_folder, exist_ok=True)
shutil.copy('pytorch_train.py', project_folder)

Membuat target komputasi

Buat target komputasi agar pekerjaan PyTorch dapat dijalankan. 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.


# Choose a name for your CPU cluster
cluster_name = "gpu-cluster"

# Verify that cluster does not exist already
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)

    # Create the cluster with the specified name and configuration
    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

    # Wait for the cluster to complete, show the output log
    compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)

Jika Anda ingin membuat kluster CPU, berikan ukuran VM yang berbeda ke parameter vm_size, seperti STANDARD_D2_V2.

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

Menentukan lingkungan Anda

Untuk menentukan Azure Pembelajaran Mesin Environment yang merangkum dependensi skrip pelatihan, Anda dapat menentukan lingkungan kustom atau menggunakan lingkungan yang dikumpulkan Azure Pembelajaran Mesin.

Menggunakan lingkungan yang dikumpulkan

Azure Pembelajaran Mesin menyediakan lingkungan bawaan yang dikumpulkan jika Anda tidak ingin menentukan lingkungan Anda sendiri. Ada beberapa lingkungan pilihan CPU dan GPU untuk PyTorch yang sesuai dengan versi PyTorch lain.

Jika ingin menggunakan lingkungan yang dikumpulkan, Anda dapat menjalankan perintah berikut:

curated_env_name = 'AzureML-PyTorch-1.6-GPU'
pytorch_env = Environment.get(workspace=ws, name=curated_env_name)

Untuk mengetahui paket yang disertakan dalam lingkungan yang dikumpulkan, Anda dapat menuliskan dependensi conda ke disk:

pytorch_env.save_to_directory(path=curated_env_name)

Pastikan lingkungan yang dikumpulkan mencakup semua dependensi yang diperlukan oleh skrip pelatihan Anda. Jika tidak, Anda harus mengubah lingkungan untuk menyertakan dependensi yang tidak ada. Jika lingkungan diubah, Anda harus memberinya nama baru, karena awalan 'AzureML' disediakan untuk lingkungan pilihan. Jika Anda mengubah file YAML dependensi conda, Anda dapat membuat lingkungan baru darinya dengan nama baru, misalnya:

pytorch_env = Environment.from_conda_specification(name='pytorch-1.6-gpu', file_path='./conda_dependencies.yml')

Jika telah memodifikasi objek lingkungan yang dikumpulkan secara langsung, Anda dapat mengkloning lingkungan tersebut dengan nama baru:

pytorch_env = pytorch_env.clone(new_name='pytorch-1.6-gpu')

Membuat lingkungan kustom

Anda juga dapat membuat lingkungan Azure Pembelajaran Mesin Anda sendiri 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.7
- pip=21.3.1
- pip:
  - azureml-defaults
  - torch==1.6.0
  - torchvision==0.7.0
  - future==0.17.1
  - pillow

Buat lingkungan Azure Pembelajaran Mesin dari spesifikasi lingkungan conda ini. Lingkungan akan dikemas ke dalam kontainer Docker pada saat runtime bahasa umum.

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

pytorch_env = Environment.from_conda_specification(name='pytorch-1.6-gpu', file_path='./conda_dependencies.yml')

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

Tip

Secara opsional, Anda dapat mengambil semua dependensi langsung dalam gambar Docker kustom atau Dockerfile, dan membuat lingkungan Anda dari dependensi tersebut. Untuk informasi selengkapnya, lihat Berlatih dengan gambar kustom.

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 Anda, 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 pekerjaan PyTorch satu simpul.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='pytorch_train.py',
                      arguments=['--num_epochs', 30, '--output_dir', './outputs'],
                      compute_target=compute_target,
                      environment=pytorch_env)

Peringatan

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

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

Peringatan

Jika sebelumnya Anda menggunakan estimator PyTorch untuk mengonfigurasi pekerjaan pelatihan PyTorch, perlu diperhatikan bahwa Estimator sudah tidak digunakan lagi sejak rilis SDK 1.19.0. Dengan Azure Pembelajaran Mesin SDK >= 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 jalankan saat pekerjaan berjalan dan setelah selesai.

run = Experiment(ws, name='Tutorial-pytorch-birds').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.

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

Mendaftarkan atau mengunduh 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='pytorch-birds', model_path='outputs/model.pt')

Tip

Petunjuk 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 dengan menggunakan objek yang Dijalankan. Dalam skrip pelatihan pytorch_train.py, objek penyimpanan PyTorch menyimpan model ke folder lokal (lokal ke target komputasi). Anda dapat menggunakan objek yang dijalankan untuk mengunduh salinan.

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

# Download the model from run history
run.download_file(name='outputs/model.pt', output_file_path='./model/model.pt'), 

Pelatihan yang didistribusikan

Azure Machine Learning juga mendukung pekerjaan PyTorch yang didistribusikan multinode sehingga Anda dapat menskalakan beban kerja pelatihan. Anda dapat dengan mudah menjalankan pekerjaan PyTorch terdistribusi dan Azure Pembelajaran Mesin akan mengelola orkestrasi untuk Anda.

Azure Pembelajaran Mesin mendukung menjalankan pekerjaan PyTorch terdistribusi dengan modul DistributedDataParallel bawaan Horovod dan PyTorch.

Untuk informasi selengkapnya tentang pelatihan terdistribusi, lihat panduan pelatihan GPU Terdistribusi.

Mengekspor ke ONNX

Untuk mengoptimalkan inferensi dengan ONNX Runtime, konversikan model PyTorch terlatih Anda ke format ONNX. Inferensi, atau penilaian model, adalah fase di mana model yang disebarkan digunakan untuk prediksi, paling sering pada data produksi. Misalnya, lihat tutorial Mengekspor model dari PyTorch ke ONNX.

Langkah berikutnya

Dalam artikel ini, Anda telah melatih dan mendaftarkan jaringan neural pembelajaran mendalam menggunakan PyTorch di Azure Machine Learning. Untuk mempelajari cara menyebarkan model, lanjutkan ke artikel penyebaran model.