Memecahkan masalah titik akhir batch

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)

Pelajari cara memecahkan masalah dan menyelesaikan kesalahan umum yang mungkin Anda temui saat menggunakan titik akhir batch untuk penilaian batch. Dalam artikel ini, Anda belajar tentang:

Memahami log pekerjaan penilaian batch

Dapatkan log

Setelah Anda menggunakan titik akhir batch dengan Azure CLI atau REST, tugas penilaian batch akan berjalan secara asinkron. Ada dua opsi untuk mendapatkan log untuk tugas penilaian batch.

Opsi 1: Streaming log ke konsol lokal

Anda dapat menjalankan perintah berikut untuk mengalirkan log yang dihasilkan sistem ke konsol Anda. Hanya log dalam folder yang azureml-logs dialirkan.

az ml job stream --name <job_name>

Opsi 2: Melihat log di studio

Untuk mendapatkan tautan ke jalankan di studio, jalankan:

az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
  1. Buka pekerjaan di studio menggunakan nilai yang dikembalikan oleh perintah di atas.
  2. Pilih batchscoring
  3. Pilih tab Output + log
  4. Pilih satu atau beberapa log yang ingin Anda tinjau

Memahami struktur log

Ada dua folder log tingkat atas, azureml-logs dan logs.

Berkas ~/azureml-logs/70_driver_log.txt berisi informasi dari pengontrol yang meluncurkan skrip penilaian.

Karena sifat pekerjaan penilaian yang didistribusikan, ada log dari beberapa sumber yang berbeda. Namun, dua file gabungan dibuat yang memberikan informasi tingkat tinggi:

  • ~/logs/job_progress_overview.txt: File ini memberikan informasi tingkat tinggi tentang jumlah batch mini (juga dikenal sebagai tugas) yang dibuat sejauh ini dan jumlah batch mini yang diproses sejauh ini. Saat mini-batch berakhir, log mencatat hasil pekerjaan. Jika pekerjaan gagal, pekerjaan akan menampilkan pesan kesalahan dan tempat memulai pemecahan masalah.

  • ~/logs/sys/master_role.txt: File ini menyediakan tampilan node utama (juga dikenal sebagai orkestrator) pekerjaan yang berjalan. Log ini memberikan informasi tentang pembuatan tugas, pemantauan kemajuan, hasil pekerjaan.

Untuk pemahaman singkat tentang kesalahan dalam skrip Anda, ada:

  • ~/logs/user/error.txt: File ini akan mencoba meringkas kesalahan dalam skrip Anda.

Untuk informasi selengkapnya tentang kesalahan dalam skrip Anda, ada:

  • ~/logs/user/error/: File ini berisi jejak tumpukan penuh pengecualian yang disingkirkan saat memuat dan menjalankan skrip entri.

Ketika Anda membutuhkan pemahaman penuh tentang bagaimana setiap node mengeksekusi skrip skor, lihat log proses individual untuk setiap node. Log proses dapat ditemukan di foldersys/node, dikelompokkan menurut node pekerja:

  • ~/logs/sys/node/<ip_address>/<process_name>.txt: File ini memberikan info terperinci tentang setiap batch mini saat diambil atau diselesaikan oleh pekerja. Untuk setiap batch mini, file ini mencakup:

    • Alamat IP dan PID proses pekerja.
    • Jumlah total item, jumlah item yang berhasil diproses, dan jumlah item yang gagal.
    • Waktu mulai, durasi, waktu proses, dan waktu metode eksekusi.

Anda juga bisa melihat hasil pemeriksaan berkala dari penggunaan sumber daya untuk setiap node. Berkas log dan berkas penyiapan ada di dalam folder ini:

  • ~/logs/perf: Atur --resource_monitor_interval untuk mengubah interval pemeriksaan dalam detik. Interval default adalah 600, yaitu sekitar 10 menit. Untuk menghentikan pemantauan, atur nilai ke 0. Setiap folder <ip_address> meliputi:

    • os/: Informasi tentang semua proses yang berjalan dalam node. Satu pemeriksaan menjalankan perintah sistem operasi dan menyimpan hasilnya ke dalam file. Di Linux, perintahnya adalah ps.
      • %Y%m%d%H: Nama sub folder adalah waktu ke jam.
        • processes_%M: File diakhiri dengan menit waktu pemeriksaan.
    • node_disk_usage.csv: Penggunaan disk terperinci node.
    • node_resource_usage.csv: Gambaran umum penggunaan sumber daya node.
    • processes_resource_usage.csv: Gambaran umum penggunaan sumber dari setiap proses.

Cara masuk mencetak skrip

Anda dapat menggunakan pencatatan Python di skrip penilaian Anda. Log disimpan di logs/user/stdout/<node_id>/processNNN.stdout.txt.

import argparse
import logging

# Get logging_level
arg_parser = argparse.ArgumentParser(description="Argument parser.")
arg_parser.add_argument("--logging_level", type=str, help="logging level")
args, unknown_args = arg_parser.parse_known_args()
print(args.logging_level)

# Initialize Python logger
logger = logging.getLogger(__name__)
logger.setLevel(args.logging_level.upper())
logger.info("Info log statement")
logger.debug("Debug log statement")

Masalah umum

Bagian berikut berisi masalah umum dan solusi yang mungkin Anda lihat selama pengembangan dan konsumsi titik akhir batch.

Tidak ada modul bernama 'azureml'

Pesan dicatat: No module named 'azureml'.

Alasan: Penyebaran Azure Pembelajaran Mesin Batch mengharuskan paket azureml-core diinstal.

Solusi: Tambahkan azureml-core ke file dependensi conda Anda.

Output sudah ada

Alasan: Penyebaran Azure Pembelajaran Mesin Batch tidak dapat menimpa file yang predictions.csv dihasilkan oleh output.

Solusi: Jika Anda menunjukkan lokasi output untuk prediksi, pastikan jalur mengarah ke file yang tidak ada.

Fungsi run() dalam skrip entri memiliki waktu habis untuk [jumlah] kali

Pesan dicatat: No progress update in [number] seconds. No progress update in this check. Wait [number] seconds since last update.

Alasan: Penyebaran Batch dapat dikonfigurasi dengan timeout nilai yang menunjukkan jumlah waktu penyebaran harus menunggu satu batch diproses. Jika eksekusi batch membutuhkan lebih dari nilai tersebut, tugas dibatalkan. Tugas yang dibatalkan dapat dicoba ulang hingga maksimum waktu yang juga dapat dikonfigurasi. timeout Jika terjadi pada setiap percobaan ulang, maka pekerjaan penyebaran gagal. Properti ini dapat dikonfigurasi untuk setiap penyebaran.

Solusi: Tingkatkan timemout nilai penyebaran dengan memperbarui penyebaran. Properti ini dikonfigurasi dalam parameter retry_settings. Secara default, timeout=30 dan retries=3 dikonfigurasi. Saat memutuskan nilai timeout, pertimbangkan jumlah file yang sedang diproses pada setiap batch dan ukuran masing-masing file tersebut. Anda juga dapat menguranginya untuk memperhitungkan lebih banyak batch mini dengan ukuran yang lebih kecil dan karenanya lebih cepat untuk dijalankan.

ScriptExecution.StreamAccess.Authentication

Pesan dicatat: ScriptExecutionException disebabkan oleh StreamAccessException. StreamAccessException disebabkan oleh AuthenticationException.

Alasan: Kluster komputasi tempat penyebaran berjalan tidak dapat memasang penyimpanan tempat aset data berada. Identitas terkelola komputasi tidak memiliki izin untuk melakukan pemasangan.

Solusi: Pastikan identitas yang terkait dengan kluster komputasi tempat penyebaran Anda berjalan memiliki setidaknya akses Storage Blob Data Reader ke akun penyimpanan. Hanya pemilik akun penyimpanan yang dapat mengubah tingkat akses Anda melalui portal Microsoft Azure.

Inisialisasi himpunan data gagal

Pesan dicatat: Inisialisasi himpunan data gagal: UserErrorException: Pesan: Tidak dapat memasang Himpunan Data(id='xxxxxx-xxxx-xxxx-xxxx-xxx', name='None', version=None). Sumber himpunan data tidak dapat diakses atau tidak berisi data apa pun.

Alasan: Kluster komputasi tempat penyebaran berjalan tidak dapat memasang penyimpanan tempat aset data berada. Identitas terkelola komputasi tidak memiliki izin untuk melakukan pemasangan.

Solusi: Pastikan identitas yang terkait dengan kluster komputasi tempat penyebaran Anda berjalan memiliki setidaknya akses Storage Blob Data Reader ke akun penyimpanan. Hanya pemilik akun penyimpanan yang dapat mengubah tingkat akses Anda melalui portal Microsoft Azure.

Parameter dataset_param referensi simpul [kode] himpunan data yang tidak memiliki nilai tertentu atau nilai default

Pesan dicatat: Parameter dataset_param referensi simpul [kode] himpunan data yang tidak memiliki nilai tertentu atau nilai default.

Alasan: Aset data input yang disediakan untuk titik akhir batch tidak didukung.

Solusi: Pastikan Anda menyediakan input data yang didukung untuk titik akhir batch.

Program pengguna gagal dengan Pengecualian: Eksekusi gagal, silakan periksa log untuk detailnya

Pesan dicatat: Program pengguna gagal dengan Pengecualian: Eksekusi gagal, silakan periksa log untuk detailnya. Anda dapat memeriksa log/readme.txt untuk tata letak log.

Alasan: Ada kesalahan saat menjalankan init() atau run() fungsi skrip penilaian.

Solusi: Buka Output + Log dan buka file di logs > user > error > 10.0.0.X > process000.txt. Anda melihat pesan kesalahan yang dihasilkan oleh init() metode atau run() .

ValueError: Tidak ada objek untuk digabungkan

Pesan dicatat: ValueError: Tidak ada objek untuk digabungkan.

Alasan: Semua file dalam batch mini yang dihasilkan adalah jenis file yang rusak atau tidak didukung. Ingatlah bahwa model MLflow mendukung subset jenis file seperti yang didokumentasikan di Pertimbangan saat menyebarkan ke inferensi batch.

Solusi: Buka file logs/usr/stdout/<process-number>/process000.stdout.txt dan cari entri seperti ERROR:azureml:Error processing input file. Jika jenis file tidak didukung, tinjau daftar file yang didukung. Anda mungkin perlu mengubah jenis file data input, atau menyesuaikan penyebaran dengan menyediakan skrip penilaian seperti yang ditunjukkan pada Menggunakan model MLflow dengan skrip penilaian.

Tidak ada item batch mini yang berhasil yang dikembalikan dari run()

Pesan dicatat: Tidak ada item batch mini yang berhasil yang dikembalikan dari run(). Silakan periksa 'respons: run()' di https://aka.ms/batch-inference-documentation.

Alasan: Titik akhir batch gagal menyediakan data dalam format yang diharapkan ke run() metode . Hal ini dapat disebabkan oleh file yang rusak yang dibaca atau tidak kompatibel dengan data input dengan tanda tangan model (MLflow).

Solusi: Untuk memahami apa yang mungkin terjadi, buka Output + Log dan buka file di logs > user > stdout > 10.0.0.X > process000.stdout.txt. Cari entri kesalahan seperti Error processing input file. Anda harus menemukan detail tentang mengapa file input tidak dapat dibaca dengan benar.

Audiens di JWT tidak diizinkan

Konteks: Saat memanggil titik akhir batch menggunakan REST API-nya.

Alasan: Token akses yang digunakan untuk memanggil REST API untuk titik akhir/penyebaran menunjukkan token yang dikeluarkan untuk audiens/layanan yang berbeda. Token Microsoft Entra dikeluarkan untuk tindakan tertentu.

Solusi: Saat membuat token autentikasi yang akan digunakan dengan REST API Titik Akhir Batch, pastikan resource parameter diatur ke https://ml.azure.com. Perhatikan bahwa sumber daya ini berbeda dari sumber daya yang perlu Anda tunjukkan untuk mengelola titik akhir menggunakan REST API. Semua sumber daya Azure (termasuk titik akhir batch) menggunakan sumber daya https://management.azure.com untuk mengelolanya. Pastikan Anda menggunakan URI sumber daya yang tepat pada setiap kasus. Perhatikan bahwa jika Anda ingin menggunakan API manajemen dan API pemanggilan pekerjaan secara bersamaan, Anda memerlukan dua token. Untuk detailnya lihat: Autentikasi pada titik akhir batch (REST).

Tidak ada penyebaran yang valid untuk dirutekan. Harap periksa apakah titik akhir memiliki setidaknya satu penyebaran dengan nilai bobot positif atau gunakan header khusus penyebaran untuk merutekan.

Alasan: Penyebaran Batch Default tidak diatur dengan benar.

Solusi: pastikan penyebaran batch default diatur dengan benar. Anda mungkin perlu memperbarui penyebaran batch default. Untuk detailnya lihat: Memperbarui penyebaran batch default

Batasan dan skenario yang tidak didukung

Saat merancang solusi pembelajaran mesin yang mengandalkan titik akhir batch, beberapa konfigurasi dan skenario mungkin tidak didukung.

Konfigurasi ruang kerja berikut ini tidak didukung:

  • Ruang kerja yang dikonfigurasi dengan Azure Container Registries dengan fitur Karantina diaktifkan.
  • Ruang kerja dengan kunci yang dikelola pelanggan (CMK).

Konfigurasi komputasi berikut tidak didukung:

  • Kluster Azure ARC Kubernetes.
  • Permintaan sumber daya granular (memori, vCPU, GPU) untuk kluster Azure Kubernetes. Hanya jumlah instans yang dapat diminta.

Jenisinput berikut ini tidak didukung:

  • Himpunan data tabular (V1).
  • Himpunan data Folder dan File (V1).
  • MLtable (V2).

Langkah berikutnya