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

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:

  1. Membuat eksperimen untuk dijalankan
  2. Membuat lingkungan tempat skrip akan berjalan
  3. Membuat ScriptRunConfig, yang menentukan target komputasi dan lingkungan
  4. Mengirimkan eksekusi
  5. Menunggu eksekusi selesai

Atau Anda dapat:

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:

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, ketergantungan azureml-core, yang memperkenalkan perubahan melanggar ke azureml-core. Untuk memperbaiki kesalahan ini, hapus pemasangan ruamel-yaml dengan menjalankan pip uninstall ruamel-yaml dan memasang versi ruamel-yaml yang berbeda; versi yang didukung adalah v0.15.35 hingga v0.17.4 (inklusif). Anda dapat melakukannya dengan menjalankan pip 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:

    1. Mulai shell perintah, aktifkan lingkungan conda tempat azureml-core diinstal.
    2. Masukkan pip freeze dan cari PyJWT, jika ditemukan, versi yang tercantum harus < 2.0.0
    3. Jika versi yang tercantum bukan versi yang didukung, pip uninstall PyJWT di shell perintah dan masukkan y untuk konfirmasi.
    4. 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_packages atau conda_packages dalam estimator berdasarkan sumber mana yang ingin Anda instal paketnya. Anda juga dapat menentukan file yml dengan semua dependensi menggunakan conda_dependencies_file atau mencantumkan semua persyaratan pip Anda dalam file txt menggunakan parameter pip_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 parameter environment konstruktor 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