Mengonfigurasi dan mengirimkan proses pelatihan
BERLAKU UNTUK:
Python SDK azureml v1
Dalam artikel ini, Anda mempelajari cara mengonfigurasi dan mengirimkan eksekusi Azure Machine Learning untuk melatih model Anda. Cuplikan kode menjelaskan bagian-bagian kunci konfigurasi dan pengiriman skrip pelatihan. Lalu, gunakan salah satu contoh buku catatan untuk menemukan contoh kerja ujung ke ujung lengkap.
Saat pelatihan, umum untuk memulai di komputer lokal Anda, dan kemudian menskalakan ke kluster berbasis cloud. Dengan Azure Machine Learning, Anda dapat menjalankan skrip pada berbagai target komputasi tanpa harus mengubah skrip pelatihan Anda.
Yang perlu Anda lakukan adalah menentukan lingkungan untuk setiap target komputasi dalam konfigurasi eksekusi skrip. Kemudian, saat Anda ingin menjalankan eksperimen pelatihan pada target komputasi yang berbeda, tentukan konfigurasi eksekusi untuk komputasi tersebut.
Prasyarat
- Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai. Coba versi gratis atau berbayar Azure Machine Learning sekarang
- SDK Azure Machine Learning untuk Python (>= 1.13.0)
- Ruang kerja Azure Machine Learning,
ws - Target komputasi,
my_compute_target. Membuat target komputasi
Apa itu konfigurasi eksekusi skrip?
ScriptRunConfig digunakan untuk mengonfigurasi informasi yang diperlukan untuk mengirimkan eksekusi pelatihan sebagai bagian dari eksperimen.
Anda mengirimkan eksperimen pelatihan dengan objek ScriptRunConfig. Objek ini mencakup:
- source_directory: Direktori sumber yang berisi skrip pelatihan Anda
- scrip: Skrip pelatihan yang akan dijalankan
- compute_target: Target komputasi tempat menjalankan
- environment: Lingkungan yang digunakan saat menjalankan skrip
- dan beberapa opsi tambahan yang dapat dikonfigurasi (lihat dokumentasi referensi untuk informasi selengkapnya)
Latih model Anda
Pola kode untuk mengirimkan eksekusi pelatihan sama untuk semua jenis target komputasi:
- Membuat eksperimen untuk dijalankan
- Membuat lingkungan tempat skrip akan berjalan
- Membuat ScriptRunConfig, yang menentukan target komputasi dan lingkungan
- Mengirimkan eksekusi
- Menunggu eksekusi selesai
Atau Anda dapat:
- Mengiirim eksekusi HyperDrive untuk penyetelan hyperparameter.
- Mengirimkan eksperimen melalui ekstensi VS Code.
Membuat eksperimen
Membuat objek eksperimen di ruang kerja Anda. Eksperimen merupakan kontainer ringan yang membantu mengatur pengiriman yang dijalankan dan melacak kode.
from azureml.core import Experiment
experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)
Memilih jenis komputasi
Memilih target komputasi tempat skrip pelatihan Anda akan berjalan. Jika tidak ada target komputasi yang ditentukan dalam ScriptRunConfig, atau jika compute_target='local', Azure ML akan menjalankan skrip Anda secara lokal.
Contoh kode dalam artikel ini mengasumsikan bahwa Anda telah membuat target komputasi my_compute_target dari bagian "Prasyarat".
Catatan
Azure Databricks tidak didukung sebagai target komputasi untuk pelatihan model. Anda dapat menggunakan Azure Databricks untuk tugas penyiapan dan penyebaran data.
Catatan
Untuk membuat dan melampirkan target komputasi untuk pelatihan di kluster Kubernetes yang didukung Azure Arc, lihat Mengonfigurasi Pembelajaran Mesin yang didukung Azure Arc
Membuat lingkungan
Lingkungan Azure Machine Learning adalah enkapsulasi lingkungan tempat pelatihan pembelajaran mesin Anda terjadi. Lingkungan menentukan paket Python, gambar Docker, variabel lingkungan, dan pengaturan perangkat lunak di sekitar pelatihan Anda dan mencetak skrip. Lingkungan juga menentukan runtime (Python, Spark, atau Docker).
Anda dapat menentukan lingkungan Anda sendiri, atau menggunakan lingkungan yang dikurasi Azure ML. Lingkungan yang dikurasi adalah lingkungan yang ditentukan sebelumnya yang tersedia di ruang kerja Anda secara default. Lingkungan ini didukung oleh gambar Docker yang di-cache yang mengurangi biaya persiapan eksekusi. Lihat Lingkungan Yang Dikurasi Azure Machine Learning untuk daftar lengkap lingkungan yang dikurasi yang tersedia.
Untuk target komputasi jarak jauh, Anda dapat menggunakan salah satu lingkungan yang dikurasi populer ini untuk memulai dengan:
from azureml.core import Workspace, Environment
ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")
Untuk mengetahui informasi selengkapnya dan detail tentang lingkungan, lihat Membuat & menggunakan lingkungan perangkat lunak di Azure Machine Learning.
Target komputasi lokal
Jika target komputasi Anda adalah komputer lokal, Anda bertanggung jawab untuk memastikan bahwa semua paket yang diperlukan tersedia di lingkungan Python tempat skrip berjalan. Gunakan python.user_managed_dependencies untuk menggunakan lingkungan Python Anda saat ini (atau Python di jalur yang Anda tentukan).
from azureml.core import Environment
myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True
# You can choose a specific Python environment by pointing to a Python path
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'
Membuat konfigurasi eksekusi skrip
Sekarang setelah Anda memiliki target komputasi (my_compute_target, lihat Prasyarat dan lingkungan (myenv, lihat Membuat lingkungan), buat konfigurasi menjalankan skrip yang menjalankan skrip pelatihan Anda ( train.py) yang terletak di direktori project_folder Anda:
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory=project_folder,
script='train.py',
compute_target=my_compute_target,
environment=myenv)
# Set compute target
# Skip this if you are running on your local computer
script_run_config.run_config.target = my_compute_target
Jika Anda tidak menentukan lingkungan, lingkungan default akan dibuat untuk Anda.
Jika Anda memiliki argumen baris perintah yang ingin Anda berikan ke skrip pelatihan, Anda dapat menentukannya melalui parameter arguments konstruktor ScriptRunConfig, misalnya arguments=['--arg1', arg1_val, '--arg2', arg2_val].
Jika Anda ingin mengganti waktu maksimum default yang diizinkan untuk eksekusi, Anda dapat melakukannya melalui parameter max_run_duration_seconds . Sistem akan coba membatalkan eksekusi secara otomatis jika membutuhkan waktu lebih lama dari nilai ini.
Tentukan konfigurasi pekerjaan terdistribusi
Jika Anda ingin menjalankan pekerjaan pelatihan terdistribusi, berikan konfigurasi khusus pekerjaan terdistribusi ke parameter distributed_job_config . Jenis konfigurasi yang didukung mencakup MpiConfiguration, TensorflowConfiguration, dan PyTorchConfiguration.
Untuk mengetahui informasi selengkapnya dan contoh tentang menjalankan pekerjaan Horovod, TensorFlow, dan PyTorch terdistribusi, lihat:
Mengirim eksperimen
run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)
Penting
Saat Anda mengirimkan eksekusi pelatihan, rekam jepret direktori yang berisi skrip pelatihan Anda dibuat dan dikirim ke target komputasi. Ini juga disimpan sebagai bagian dari eksperimen di ruang kerja Anda. Jika Anda mengubah file dan mengirimkan eksekusi lagi, hanya file yang diubah yang akan diunggah.
Untuk mencegah file yang tidak perlu disertakan dalam cuplikan, buat file abaikan (.gitignore atau .amlignore) di direktori. Tambahkan file dan direktori untuk dikecualikan ke file ini. Untuk informasi selengkapnya tentang sintaks yang digunakan di dalam file ini, lihat sintaks dan pola untuk .gitignore. File .amlignore menggunakan sintaks yang sama. Jika kedua file ada, file .amlignore digunakan dan file .gitignore tidak digunakan.
Untuk mengetahui informasi selengkapnya tentang rekam jepret, lihat Rekam Jepret.
Penting
Folder Khusus Dua folder, output, dan log, menerima perlakuan khusus oleh Azure Machine Learning. Selama pelatihan, saat Anda menulis file ke folder bernama output dan log yang relatif terhadap direktori akar (./outputs dan ./logs, masing-masing), file akan otomatis mengunggah ke riwayat eksekusi Anda sehingga Anda memiliki akses ke folder tersebut setelah eksekusi selesai.
Untuk membuat artefak selama pelatihan (seperti file model, titik pemeriksaan, file data, atau gambar yang diplot) tulis ini ke folder ./outputs.
Demikian pula, Anda dapat menulis log apa pun dari eksekusi pelatihan ke folder ./logs. Untuk menggunakan integrasi TensorBoard Azure Machine Learning, pastikan Anda menulis log TensorBoard ke folder ini. Saat eksekusi Anda sedang berlangsung, Anda akan dapat meluncurkan TensorBoard dan melakukan streaming log ini. Nantinya, Anda juga dapat memulihkan log dari salah satu eksekusi sebelumnya.
Misalnya, untuk mengunduh file yang ditulis ke folder output ke mesin lokal Anda setelah eksekusi pelatihan jarak jauh Anda: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')
Pelacakan dan integrasi Git
Ketika Anda memulai eksekusi pelatihan di mana direktori sumber adalah repositori Git lokal, informasi tentang repositori tersebut disimpan dalam riwayat eksekusi. Untuk mengetahui informasi selengkapnya, lihat Integrasi Git untuk Azure Machine Learning.
Contoh buku catatan
Lihat buku catatan ini untuk contoh mengonfigurasi eksekusi untuk berbagai skenario pelatihan:
- Melatih di berbagai target komputasi
- Melatih dengan kerangka kerja ML
- tutorials/img-classification-part1-training.ipynb
Pelajari cara menjalankan notebook dengan mengikuti artikel Menggunakan notebook Jupyter untuk menjelajahi layanan ini.
Pemecahan Masalah
AttributeError: Objek 'RoundTripLoader' tidak memiliki atribut 'comment_handling' : Kesalahan ini berasal dari versi baru (v0.17.5) dari
ruamel-yaml, ketergantunganazureml-core, yang memperkenalkan perubahan melanggar keazureml-core. Untuk memperbaiki kesalahan ini, hapus pemasanganruamel-yamldengan menjalankanpip uninstall ruamel-yamldan memasang versiruamel-yamlyang berbeda; versi yang didukung adalah v0.15.35 hingga v0.17.4 (inklusif). Anda dapat melakukannya dengan menjalankanpip install "ruamel-yaml>=0.15.35,<0.17.5".Eksekusi gagal dengan
jwt.exceptions.DecodeError: Pesan kesalahan persis:jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().Pertimbangkan untuk meningkatkan ke versi terbaru azureml-core:
pip install -U azureml-core.Jika Anda mengalami masalah ini untuk eksekusi lokal, periksa versi PyJWT yang terinstal di lingkungan Anda tempat Anda memulai eksekusi. Versi PyJWT yang didukung adalah < 2.0.0. Hapus instalan PyJWT dari lingkungan jika versinya >= 2.0.0. Anda dapat memeriksa versi PyJWT, hapus instalan dan instal versi yang tepat sebagai berikut:
- Mulai shell perintah, aktifkan lingkungan conda tempat azureml-core diinstal.
- Masukkan
pip freezedan cariPyJWT, jika ditemukan, versi yang tercantum harus < 2.0.0 - Jika versi yang tercantum bukan versi yang didukung,
pip uninstall PyJWTdi shell perintah dan masukkan y untuk konfirmasi. - Menginstal menggunakan
pip install 'PyJWT<2.0.0'
Jika Anda mengirimkan lingkungan yang dibuat pengguna dengan eksekusi, pertimbangkan untuk menggunakan versi terbaru azureml-core di lingkungan tersebut. Versi >= 1.18.0 dari azureml-core sudah menyematkan PyJWT < 2.0.0. Jika Anda perlu menggunakan versi azureml-core < 1.18.0 di lingkungan yang Anda kirimkan, pastikan untuk menentukan PyJWT < 2.0.0 di dependensi pip Anda.
ModulErrors (Tidak ada modul bernama): Jika Anda mengalami ModuleErrors saat mengirimkan eksperimen di Azure ML, skrip pelatihan mengharapkan paket diinstal tetapi tidak ditambahkan. Setelah Anda memberikan nama paket, Azure ML menginstal paket di lingkungan yang digunakan untuk eksekusi pelatihan Anda.
Jika Anda menggunakan Estimator untuk mengirimkan eksperimen, Anda dapat menentukan nama paket melalui parameter
pip_packagesatauconda_packagesdalam estimator berdasarkan sumber mana yang ingin Anda instal paketnya. Anda juga dapat menentukan file yml dengan semua dependensi menggunakanconda_dependencies_fileatau mencantumkan semua persyaratan pip Anda dalam file txt menggunakan parameterpip_requirements_file. Jika Anda memiliki objek Lingkungan AZURE ML Anda sendiri yang ingin Anda ganti gambar defaultnya yang digunakan oleh estimator, Anda dapat menentukan lingkungan tersebut melalui parameterenvironmentkonstruktor estimator.Azure ML mempertahankan gambar docker dan kontennya dapat dilihat di Kontainer AzureML. Dependensi khusus kerangka kerja tercantum dalam dokumentasi kerangka kerja masing-masing:
Catatan
Jika Anda berpikir paket tertentu cukup umum untuk ditambahkan di gambar dan lingkungan terkelola Azure ML, silakan ajukan masalah GitHub di Kontainer AzureML.
NameError (Nama tidak ditentukan), AttributeError (Objek tidak memiliki atribut) : Pengecualian ini harus berasal dari skrip pelatihan Anda. Anda dapat menampilkan file log dari portal Azure untuk mendapatkan informasi selengkapnya tentang nama tertentu yang tidak ditentukan atau kesalahan atribut. Dari SDK, Anda dapat menggunakan
run.get_details()untuk menampilkan pesan kesalahan. Ini juga akan mencantumkan semua file log yang dibuat untuk eksekusi Anda. Harap pastikan untuk melihat skrip pelatihan Anda dan memperbaiki kesalahan sebelum mengirim ulang eksekusi Anda.Jalankan atau hapus eksperimen: Eksperimen dapat diarsipkan dengan menggunakan metode Experiment.archive, atau dari tampilan tab Eksperimen di klien studio Azure Machine Learning melalui tombol "Arsipkan eksperimen". Tindakan ini menyembunyikan eksperimen dari kueri dan tampilan daftar, tetapi tidak menghapusnya.
Penghapusan permanen eksperimen atau menjalankan individu saat ini tidak didukung. Untuk mengetahui informasi selengkapnya tentang menghapus aset Ruang kerja, lihat Mengekspor atau menghapus data ruang kerja Machine Learning service Anda.
Dokumen Metrik terlalu besar: Azure Machine Learning memiliki batasan internal pada ukuran objek metrik yang dapat dicatat sekaligus dari eksekusi pelatihan. Jika Anda menemukan kesalahan "Dokumen Metrik terlalu besar" saat melakukan pencatatan log metrik bernilai daftar, coba pisahkan daftar menjadi gugus yang lebih kecil, misalnya:
run.log_list("my metric name", my_metric[:N]) run.log_list("my metric name", my_metric[N:])Secara internal, Azure ML menggabungkan blok dengan nama metrik yang sama ke dalam daftar yang berdekatan.
Target komputasi membutuhkan waktu lama untuk memulai: Gambar Docker untuk target komputasi dimuat dari Azure Container Registry (ACR). Secara default, Azure Machine Learning membuat ACR yang menggunakan tingkat layanan dasar. Mengubah ACR untuk ruang kerja Anda ke tingkat standar atau premium dapat mengurangi waktu yang diperlukan untuk membuat dan memuat gambar. Untuk mengetahui informasi selengkapnya, lihat Tingkat layanan Azure Container Registry.
Langkah berikutnya
- Tutorial: Melatih dan menyebarkan model menggunakan target komputasi terkelola untuk melatih model.
- Lihat cara melatih model dengan kerangka kerja ML tertentu, seperti Scikit-learn, TensorFlow, dan PyTorch.
- Pelajari cara menyetel hyperparameter secara efisien untuk membuat model yang lebih baik.
- Setelah Anda memiliki model terlatih, pelajari cara dan tempat menyebarkan model.
- Lihat referensi SDK kelas ScriptRunConfig.
- Menggunakan Azure Machine Learning dengan Azure Virtual Networks