Bagikan melalui


Memulai, memantau, dan melacak riwayat eksekusi

BERLAKU UNTUK: Python SDK azureml v1

BERLAKU UNTUK: Ekstensi ml Azure CLI v1

Azure Machine Learning SDK untuk Python v1 dan Machine Learning CLI menyediakan berbagai metode untuk memantau, mengelola, dan melacak eksekusi untuk pelatihan dan eksperimen. Riwayat eksekusi ML Anda adalah bagian penting dari proses pengembangan ML yang dapat dijelaskan dan diulang.

Tip

Untuk informasi tentang cara menggunakan studio, lihat Melacak, memantau, dan menganalisis eksekusi dengan studio.

Jika Anda menggunakan Azure Machine Learning SDK v2, lihat artikel berikut ini:

Artikel ini memperlihatkan cara melakukan tugas berikut:

  • Memantau performa eksekusi.
  • Tag dan menemukan eksekusi.
  • Jalankan pencarian atas riwayat eksekusi Anda.
  • Membatalkan atau menggagalkan eksekusi.
  • Membuat eksekusi anakan.
  • Memantau status eksekusi melalui pemberitahuan email.

Tip

Jika Anda mencari informasi tentang pemantauan Azure Machine Learning service dan layanan Azure terkait, lihat Cara memantau Azure Machine Learning. Jika Anda mencari informasi tentang model pemantauan yang diterapkan sebagai layanan web, lihat Mengumpulkan data model dan Memantau dengan Application Insights.

Prasyarat

Anda akan memerlukan item berikut:

Memantau performa eksekusi

  • Memulai proses eksekusi dan pencatatannya

    BERLAKU UNTUK: Python SDK azureml v1

    1. Siapkan eksperimen Anda dengan mengimpor kelas Ruang Kerja, Eksperimen, Eksekusi, dan ScriptRunConfig dari paket azureml.core.

      import azureml.core
      from azureml.core import Workspace, Experiment, Run
      from azureml.core import ScriptRunConfig
      
      ws = Workspace.from_config()
      exp = Experiment(workspace=ws, name="explore-runs")
      
    2. Memulai proses eksekusi dan pencatatannya dengan metode start_logging() ini.

      notebook_run = exp.start_logging()
      notebook_run.log(name="message", value="Hello from run!")
      
  • Memantau status eksekusi

    BERLAKU UNTUK: Python SDK azureml v1

    • Dapatkan status eksekusi dengan metode get_status().

      print(notebook_run.get_status())
      
    • Untuk mendapatkan ID eksekusi, waktu eksekusi, dan detail lainnya tentang eksekusi, gunakan metode get_details().

      print(notebook_run.get_details())
      
    • Ketika proses Anda berhasil selesai, gunakan metode complete() untuk menandainya sebagai selesai.

      notebook_run.complete()
      print(notebook_run.get_status())
      
    • Jika Anda menggunakan pola desain Python with...as, eksekusi akan secara otomatis menandai dirinya sebagai selesai ketika eksekusi berada di luar lingkup. Anda tidak perlu menandai eksekusi secara manual sebagai selesai.

      with exp.start_logging() as notebook_run:
          notebook_run.log(name="message", value="Hello from run!")
          print(notebook_run.get_status())
      
      print(notebook_run.get_status())
      

Menandai dan menemukan eksekusi

Di Azure Machine Learning, Anda bisa menggunakan properti dan tag untuk membantu menata dan mengkueri eksekusi Anda jika terdapat informasi penting.

  • Menambahkan properti dan tag

    BERLAKU UNTUK: Python SDK azureml v1

    Untuk menambahkan metadata yang dapat dicari ke eksekusi Anda, gunakan metode add_properties(). Misalnya, kode berikut menambahkan properti "author" ke eksekusi:

    local_run.add_properties({"author":"azureml-user"})
    print(local_run.get_properties())
    

    Properti tidak dapat diubah, sehingga properti membuat catatan permanen untuk tujuan audit. Contoh kode berikut menghasilkan kesalahan, karena kami sudah menambahkan "azureml-user" sebagai nilai properti "author" dalam kode sebelumnya:

    try:
        local_run.add_properties({"author":"different-user"})
    except Exception as e:
        print(e)
    

    Tidak seperti properti, tag dapat diubah. Untuk menambahkan informasi yang dapat dicari dan bermakna bagi konsumen eksperimen Anda, gunakan metode tag().

    local_run.tag("quality", "great run")
    print(local_run.get_tags())
    
    local_run.tag("quality", "fantastic run")
    print(local_run.get_tags())
    

    Anda juga dapat menambahkan tag string sederhana. Ketika tag ini muncul di kamus tag sebagai kunci, tag tersebut memiliki nilai None.

    local_run.tag("worth another look")
    print(local_run.get_tags())
    
  • Properti dan tag kueri

    Anda bisa mengkueri eksekusi dalam eksperimen untuk menghasilkan daftar eksekusi yang cocok dengan properti dan tag tertentu.

    BERLAKU UNTUK: Python SDK azureml v1

    list(exp.get_runs(properties={"author":"azureml-user"},tags={"quality":"fantastic run"}))
    list(exp.get_runs(properties={"author":"azureml-user"},tags="worth another look"))
    

Membatalkan atau menggagalkan eksekusi

Jika Anda melihat kesalahan atau jika eksekusi terlalu lama untuk diselesaikan, Anda dapat membatalkan eksekusi.

BERLAKU UNTUK: Python SDK azureml v1

Untuk membatalkan eksekusi menggunakan SDK, gunakan metode cancel():

src = ScriptRunConfig(source_directory='.', script='hello_with_delay.py')
local_run = exp.submit(src)
print(local_run.get_status())

local_run.cancel()
print(local_run.get_status())

Jika eksekusi Anda selesai, tetapi berisi kesalahan (misalnya, menggunakan skrip pelatihan yang salah), Anda dapat menggunakan metode fail() untuk memberi tanda gagal.

local_run = exp.submit(src)
local_run.fail()
print(local_run.get_status())

Buat eksekusi anakan

BERLAKU UNTUK: Python SDK azureml v1

Buat eksekusi anakan untuk mengelompokkan eksekusi terkait, seperti untuk iterasi hyperparameter-tuning yang berbeda.

Catatan

Eksekusi anakan hanya dapat dibuat menggunakan SDK.

Contoh kode ini menggunakan skrip hello_with_children.py untuk membuat kumpulan lima eksekusi anakan dari dalam proses yang dikirimkan dengan menggunakan metode child_run():

!more hello_with_children.py
src = ScriptRunConfig(source_directory='.', script='hello_with_children.py')

local_run = exp.submit(src)
local_run.wait_for_completion(show_output=True)
print(local_run.get_status())

with exp.start_logging() as parent_run:
    for c,count in enumerate(range(5)):
        with parent_run.child_run() as child:
            child.log(name="Hello from child run", value=c)

Catatan

Saat mereka bergerak keluar dari lingkup, eksekusi anakan secara otomatis diberi tanda selesai.

Untuk membuat banyak eksekusi anakan secara efisien, gunakan metode create_children(). Karena setiap kreasi menghasilkan panggilan jaringan, membuat batch eksekusi lebih efisien daripada membuatnya satu per satu.

Kirim eksekusi anakan

Eksekusi anakan juga dapat dikirimkan dari eksekusi induk. Ini memungkinkan Anda membuat hierarki eksekusi induk dan anakan. Anda tidak dapat membuat eksekusi anakan tanpa induk: bahkan jika eksekusi induk tidak melakukan apa-apa selain meluncurkan eksekusi anakan, tetap masih perlu membuat hierarki. Status semua eksekusi adalah independen: induk dapat berada dalam status berhasil "Completed" meskipun satu atau beberapa eksekusi anakan dibatalkan atau gagal.

Anda mungkin ingin eksekusi anakan menggunakan konfigurasi yang berbeda dari eksekusi induk. Misalnya, Anda dapat menggunakan konfigurasi berbasis CPU yang kurang kuat untuk induknya, sementara menggunakan konfigurasi berbasis GPU untuk anakan. Keinginan umum lainnya adalah untuk meneruskan setiap anakan argumen dan data yang berbeda. Untuk menyesuaikan eksekusi anakan, buat objek ScriptRunConfig untuk eksekusi anakan.

Penting

Untuk mengirim eksekusi anakan dari induk yang dijalankan pada komputasi jarak jauh, Anda harus masuk ke ruang kerja di kode eksekusi induk terlebih dahulu. Secara default, objek konteks eksekusi dalam eksekusi jangka jauh tidak memiliki kredensial untuk mengirimkan eksekusi anakan. Gunakan kredensial perwakilan layanan atau identitas terkelola untuk masuk. Untuk informasi selengkapnya tentang mengautentikasi, lihat menyiapkan autentikasi.

Kode di bawah ini:

  • Mengambil sumber daya komputasi yang dinamai "gpu-cluster" dari ruang kerja ws
  • Mengulangi pada nilai argumen yang berbeda untuk diteruskan ke objek anakan ScriptRunConfig
  • Membuat dan mengirimkan eksekusi anakan, menggunakan sumber daya komputasi kustom dan argumen
  • Blokir hingga semua eksekusi anakan telah selesai
# parent.py
# This script controls the launching of child scripts
from azureml.core import Run, ScriptRunConfig

compute_target = ws.compute_targets["gpu-cluster"]

run = Run.get_context()

child_args = ['Apple', 'Banana', 'Orange']
for arg in child_args: 
    run.log('Status', f'Launching {arg}')
    child_config = ScriptRunConfig(source_directory=".", script='child.py', arguments=['--fruit', arg], compute_target=compute_target)
    # Starts the run asynchronously
    run.submit_child(child_config)

# Experiment will "complete" successfully at this point. 
# Instead of returning immediately, block until child runs complete

for child in run.get_children():
    child.wait_for_completion()

Untuk membuat banyak eksekusi anakan dengan konfigurasi, argumen, dan input yang identik secara efisien, gunakan metode create_children(). Karena setiap kreasi menghasilkan panggilan jaringan, membuat batch eksekusi lebih efisien daripada membuatnya satu per satu.

Dalam eksekusi anakan, Anda dapat melihat ID eksekusi induk:

## In child run script
child_run = Run.get_context()
child_run.parent.id

Kueri eksekusi anakan

Untuk mengkueri eksekusi anakan dari induk tertentu, gunakan metode get_children(). Argumen recursive = True ini memungkinkan Anda untuk meminta pohon bertingkat dari anak dan cucu.

print(parent_run.get_children())

Log ke eksekusi induk atau root

Anda dapat menggunakan bidang Run.parent untuk mengakses eksekusi yang meluncurkan eksekusi anakan saat ini. Kasus penggunaan umum untuk penggunaan Run.parent adalah menggabungkan hasil log di satu tempat. Eksekusi anakan mengeksekusi secara asinkron dan tidak ada jaminan urutan atau sinkronisasi di luar kemampuan induk untuk menunggu eksekusi anakan selesai.

# in child (or even grandchild) run

def root_run(self : Run) -> Run :
    if self.parent is None : 
        return self
    return root_run(self.parent)

current_child_run = Run.get_context()
root_run(current_child_run).log("MyMetric", f"Data from child run {current_child_run.id}")

Memantau status eksekusi melalui pemberitahuan email

  1. Di portal Microsoft Azure, di bilah navigasi kiri, pilih tab Monitor.

  2. Pada Pengaturan diagnostik, pilih + Tambahkan pengaturan diagnostik.

    Cuplikan layar pengaturan diagnostik untuk pemberitahuan email.

  3. Di Pengaturan Diagnostik,

    1. di bawah Detail kategori, pilih AmlRunStatusChangedEvent.
    2. Di Detail tujuan, pilih Kirim ke ruang kerja Log Analytics dan tentukan Langganan serta Ruang kerja Log Analytics.

    Catatan

    Ruang Kerja Azure Log Analytics adalah jenis Sumber Daya Azure yang berbeda dari Ruang Kerja Azure Machine Learning service. Jika tidak ada opsi dalam daftar itu, Anda dapat membuat Ruang Kerja Log Analytics.

    Cuplikan layar untuk mengonfigurasi pemberitahuan email.

  4. Di tab Log, tambahkan Aturan pemberitahuan baru.

    Cuplikan layar untuk aturan peringatan baru.

  5. Lihat cara membuat dan mengelola peringata log menggunakan Azure Monitor.

Contoh buku catatan

Notebook berikut ini menunjukkan konsep dalam artikel ini:

Langkah berikutnya