Latih model TensorFlow dalam skala besar dengan Azure Machine Learning SDK (v1)

BERLAKU UNTUK:SDK Python azureml v1

Dalam artikel ini, pelajari cara menjalankan skrip pelatihan TensorFlow Anda dalam skala besar menggunakan Azure Machine Learning.

Contoh ini melatih dan mendaftarkan model TensorFlow untuk mengklasifikasikan digit tulisan tangan menggunakan jaringan saraf dalam (DNN).

Baik Anda mengembangkan model TensorFlow dari ground-up atau membawa model yang ada ke cloud, Anda dapat menggunakan Azure Machine Learning untuk meningkatkan pekerjaan pelatihan sumber terbuka untuk membangun, menerapkan, versi, dan memantau model tingkat produksi.

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.
    • Di sampel folder pembelajaran mendalam di server notebook, temukan notebook yang telah selesai dan diperluas dengan membuka direktori ini: folder how-to-use-azureml > ml-frameworks > tensorflow > train-hyperparameter-tune-deploy-with-tensorflow folder.
  • 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 urllib
import shutil
import azureml

from azureml.core import Experiment
from azureml.core import Workspace, Run
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()

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. Data tetap berada di lokasi yang ada, sehingga tidak ada biaya penyimpanan tambahan yang dikeluarkan. Untuk informasi selengkapnya tentang paket Dataset, lihat artikel Cara membuat himpunan data register.

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)

Gunakan metode register() untuk mendaftarkan kumpulan data ke ruang kerja Anda sehingga mereka dapat dibagikan dengan orang lain, digunakan kembali di berbagai eksperimen, dan disebut dengan nama dalam skrip pelatihan Anda.

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

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

Membuat target komputasi

Buat target komputasi agar pekerjaan TensorFlow Anda berjalan. 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)

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. Azure Pembelajaran Mesin memiliki beberapa lingkungan yang dikumpulkan CPU dan GPU untuk TensorFlow yang sesuai dengan versi TensorFlow yang berbeda. Anda dapat menggunakan versi terbaru lingkungan ini menggunakan direktif @latest . Untuk informasi selengkapnya, lihat Lingkungan Yang Dikumpulkan Azure Pembelajaran Mesin.

Jika Anda ingin menggunakan lingkungan yang dikumpulkan, kode akan mirip dengan contoh berikut:

curated_env_name = 'AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu'
tf_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:


tf_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:


tf_env = Environment.from_conda_specification(name='AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu', file_path='./conda_dependencies.yml')

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


tf_env = tf_env.clone(new_name='my-AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-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:
  - azureml-defaults
  - tensorflow-gpu==2.2.0

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, lihat repositori GitHub Azure/AzureML-Containers untuk informasi selengkapnya.

tf_env = Environment.from_conda_specification(name='AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu', file_path='./conda_dependencies.yml')

# Specify a GPU base image
tf_env.docker.enabled = True
tf_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.

from azureml.core import ScriptRunConfig

args = ['--data-folder', dataset.as_mount(),
        '--batch-size', 64,
        '--first-layer-neurons', 256,
        '--second-layer-neurons', 128,
        '--learning-rate', 0.01]

src = ScriptRunConfig(source_directory=script_folder,
                      script='tf_mnist.py',
                      arguments=args,
                      compute_target=compute_target,
                      environment=tf_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 TensorFlow untuk mengonfigurasi pekerjaan pelatihan TensorFlow Anda, harap dicatat bahwa Estimator telah ditolak pada 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.

Mengirim proses

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

run = Experiment(workspace=ws, name='Tutorial-TF-Mnist').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.

Opsional: dengan menentukan parameter model_framework,model_framework_version, danresource_configuration, penyebaran model tanpa kode menjadi tersedia. Ini memungkinkan Anda untuk secara langsung menyebarkan model Anda sebagai layanan web dari model terdaftar, ResourceConfiguration dan objek menentukan sumber daya komputasi untuk layanan web.

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

model = run.register_model(model_name='tf-mnist', 
                           model_path='outputs/model',
                           model_framework=Model.Framework.TENSORFLOW,
                           model_framework_version='2.0',
                           resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))

Anda juga dapat mengunduh salinan lokal model dengan menggunakan objek yang Dijalankan. Dalam tf_mnist.py skrip pelatihan, objek penghemat TensorFlow 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)
run.download_files(prefix='outputs/model', output_directory='./model', append_prefix=False)

Pelatihan yang didistribusikan

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

Azure Pembelajaran Mesin mendukung menjalankan pekerjaan TensorFlow terdistribusi dengan API pelatihan terdistribusi bawaan Horovod dan TensorFlow.

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

Menggunakan model TensorFlow

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) Model penyebaran tanpa kode

Penting

Fitur ini masih 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 terbatas.

Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Alih-alih rute penyebaran tradisional, Anda juga dapat menggunakan fitur penerapan tanpa kode (pratinjau) untuk TensorFlow. Dengan mendaftarkan model Anda seperti yang ditunjukkan di atas dengan parameter model_framework, model_framework_version, dan resource_configuration, Anda dapat menggunakan fungsi statis deploy() untuk menyebarkan model.

service = Model.deploy(ws, "tensorflow-web-service", [model])

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

Langkah berikutnya

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