Mengonfigurasi dan mengirimkan tugas pelatihan
BERLAKU UNTUK: Python SDK azureml v1
Dalam artikel ini, Anda mempelajari cara mengonfigurasi dan mengirimkan pekerjaan 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 tugas skrip. Kemudian, saat Anda ingin menjalankan eksperimen pelatihan pada target komputasi yang berbeda, tentukan konfigurasi tugas 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
- Azure Pembelajaran Mesin SDK untuk Python (v1) (>= 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 tugas 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)
Melatih model
Pola kode untuk mengirimkan tugas pelatihan sama untuk semua jenis target komputasi:
- Membuat eksperimen untuk dijalankan
- Membuat lingkungan tempat skrip berjalan
- Membuat ScriptRunConfig, yang menentukan target komputasi dan lingkungan
- Mengirimkan pekerjaan
- Tunggu hingga pekerjaan 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 tugas yang dijalankan dan melacak kode.
BERLAKU UNTUK: Python SDK azureml v1
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 Pembelajaran Mesin 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.
- 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 dikumpulkan azure Pembelajaran Mesin. 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 pekerjaan. 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:
BERLAKU UNTUK: Python SDK azureml v1
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 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).
BERLAKU UNTUK: Python SDK azureml v1
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 tugas skrip
Sekarang setelah Anda memiliki target komputasi (, lihat Prasyarat, dan lingkungan (myenv
, lihat Membuat lingkungan), membuat konfigurasi pekerjaan skrip yang menjalankan skrip pelatihan Anda (train.py
) yang terletak di direktori Andaproject_folder
:my_compute_target
BERLAKU UNTUK: Python SDK azureml v1
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory=project_folder,
script='train.py',
compute_target=my_compute_target,
environment=myenv)
Jika Anda tidak menentukan lingkungan, lingkungan default akan dibuat untuk Anda.
Jika Anda memiliki argumen baris perintah yang ingin Diteruskan ke skrip pelatihan, Anda dapat menentukannya melalui arguments
parameter konstruktor ScriptRunConfig, misalnya, arguments=['--arg1', arg1_val, '--arg2', arg2_val]
.
Jika Anda ingin mengganti waktu maksimum default yang diizinkan untuk tugas tersebut, Anda dapat melakukannya melalui parameter max_run_duration_seconds
. Sistem mencoba untuk membatalkan pekerjaan 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 informasi dan contoh selengkapnya tentang menjalankan pekerjaan Horovod, TensorFlow, dan PyTorch terdistribusi, lihat:
Mengirim eksperimen
BERLAKU UNTUK: Python SDK azureml v1
run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)
Penting
Saat Anda mengirimkan pekerjaan pelatihan, rekam jepret direktori yang berisi skrip pelatihan Anda akan dibuat dan dikirim ke target komputasi. Ini juga disimpan sebagai bagian dari eksperimen di ruang kerja Anda. Jika Anda mengubah file dan mengirimkan tugas 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 tugas Anda sehingga Anda memiliki akses ke folder tersebut setelah tugas 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 tugas pelatihan ke folder ./logs
. Untuk menggunakan integrasi TensorBoard Azure Machine Learning, pastikan Anda menulis log TensorBoard ke folder ini. Saat tugas Anda sedang berlangsung, Anda akan dapat meluncurkan TensorBoard dan melakukan streaming log ini. Nantinya, Anda juga dapat memulihkan log dari salah satu tugas sebelumnya.
Misalnya, untuk mengunduh file yang ditulis ke folder output ke mesin lokal Anda setelah tugas 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 tugas pelatihan di mana direktori sumber adalah repositori Git lokal, informasi tentang repositori tersebut disimpan dalam riwayat tugas. Untuk informasi lebih lanjut, lihat Integrasi Git untuk Azure Machine Learning.
Contoh buku catatan
Lihat buku catatan ini untuk contoh mengonfigurasi tugas 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 instalanruamel-yaml
dengan menjalankanpip uninstall ruamel-yaml
dan menginstal versiruamel-yaml
yang berbeda ; versi yang didukung adalah v0.15.35 ke v0.17.4 (inklusif). Anda dapat melakukannya dengan menjalankanpip install "ruamel-yaml>=0.15.35,<0.17.5"
.Tugas 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
.Kalau. Anda mengalami masalah ini untuk pekerjaan lokal, periksa versi PyJWT yang diinstal di lingkungan Anda di mana . Anda memulai pekerjaan. Versi PyJWT yang didukung adalah < 2.0.0. Hapus instalan PyJWT dari lingkungan jika versinya >= 2.0.0. Anda dapat memeriksa versi PyJWT, menghapus instalan, dan menginstal versi yang tepat sebagai berikut:
- Mulai shell perintah, aktifkan lingkungan conda tempat azureml-core diinstal.
- Masukkan
pip freeze
dan cariPyJWT
, jika ditemukan, versi yang tercantum harus < 2.0.0 - Jika versi yang tercantum bukan versi yang didukung,
pip uninstall PyJWT
di shell perintah dan masukkan y untuk konfirmasi. - Menginstal menggunakan
pip install 'PyJWT<2.0.0'
Kalau. Anda mengirimkan lingkungan yang dibuat pengguna dengan pekerjaan Anda, 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.
ModuleErrors (Tidak ada modul bernama): Jika . Anda mengalami ModuleErrors saat mengirimkan eksperimen di Azure Pembelajaran Mesin, skrip pelatihan mengharapkan paket diinstal tetapi tidak ditambahkan. Setelah Anda memberikan nama paket, Azure Pembelajaran Mesin menginstal paket di lingkungan yang digunakan untuk pekerjaan pelatihan Anda.
Kalau. Anda menggunakan Estimator untuk mengirimkan eksperimen, Anda dapat menentukan nama paket melalui
pip_packages
atauconda_packages
parameter di estimator berdasarkan sumber mana yang ingin Anda instal paketnya. Anda juga dapat menentukan file yml dengan semua dependensi menggunakanconda_dependencies_file
atau mencantumkan semua persyaratan pip Anda dalam file txt menggunakan parameterpip_requirements_file
. Jika Anda memiliki objek Azure Pembelajaran Mesin Environment Anda sendiri yang ingin Anda ambil alih gambar default yang digunakan oleh estimator, Anda dapat menentukan lingkungan tersebutenvironment
melalui parameter konstruktor estimator.Gambar docker yang dikelola Azure Pembelajaran Mesin dan kontennya dapat dilihat di Azure Pembelajaran Mesin Containers. Dependensi khusus kerangka kerja tercantum dalam dokumentasi kerangka kerja masing-masing:
Catatan
Jika menurut Anda paket tertentu cukup umum untuk ditambahkan di Azure Pembelajaran Mesin gambar dan lingkungan yang dikelola, silakan ajukan masalah GitHub di Azure Pembelajaran Mesin Containers.
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 tugas Anda. Harap pastikan untuk melihat skrip pelatihan Anda dan memperbaiki kesalahan sebelum mengirim ulang tugas Anda.Penghapusan eksperimen dan tugas: 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 tugas 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 tugas 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 Pembelajaran Mesin menggabungkan blok dengan nama metrik yang sama ke dalam daftar yang berdamai.
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 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