Mengonfigurasi dan mengirimkan tugas pelatihan

BERLAKU UNTUK:SDK Python 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

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:

  1. Membuat eksperimen untuk dijalankan
  2. Membuat lingkungan tempat skrip berjalan
  3. Membuat ScriptRunConfig, yang menentukan target komputasi dan lingkungan
  4. Mengirimkan pekerjaan
  5. Tunggu hingga pekerjaan selesai

Atau Anda dapat:

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:SDK Python 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:SDK Python 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:SDK Python 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:SDK Python 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:SDK Python 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:

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 instalan ruamel-yaml dengan menjalankan pip uninstall ruamel-yaml dan menginstal versi ruamel-yamlyang berbeda ; versi yang didukung adalah v0.15.35 ke v0.17.4 (inklusif). Anda dapat melakukannya dengan menjalankan pip 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.

    Jika. 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:

    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 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.

    Jika. Anda menggunakan Estimator untuk mengirimkan eksperimen, Anda dapat menentukan nama paket melalui pip_packages atau conda_packages parameter di 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 Azure Pembelajaran Mesin Environment Anda sendiri yang ingin Anda ambil alih gambar default yang digunakan oleh estimator, Anda dapat menentukan lingkungan tersebut environment 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