Pemecahan masalah penyebaran model lokal

Mencoba penyebaran model lokal sebagai langkah awal dalam pemecahan masalah penyebaran ke Azure Container Instances (ACI) atau Azure Kubernetes Service (AKS). Menggunakan layanan web lokal memudahkan untuk menemukan dan memperbaiki kesalahan umum penyebaran layanan web Azure Machine Learning Docker.

Prasyarat

  • Langganan Azure. Coba versi gratis atau berbayar Azure Machine Learning.
  • Opsi A (Disarankan) - Debug secara lokal di Azure Pembelajaran Mesin Compute Instance
  • Opsi B - Debug secara lokal pada komputasi Anda
  • Opsi C - Aktifkan debugging lokal dengan server HTTP inferensi Azure Machine Learning.
    • Server HTTP inferensi Azure Pembelajaran Mesin adalah paket Python yang memungkinkan Anda dengan mudah memvalidasi skrip entri Anda (score.py) di lingkungan pengembangan lokal. Jika ada masalah dengan skrip penilaian, server akan menampilkan kesalahan. Selain itu, mengembalikan lokasi di mana kesalahan telah terjadi.
    • Server juga dapat digunakan saat membuat gerbang validasi dalam integrasi berkelanjutan dan alur penyebaran. Misalnya, mulai server dengan skrip kandidat dan jalankan rangkaian uji terhadap titik akhir lokal.

Server HTTP inferensi Azure Machine Learning

Server inferensi lokal memungkinkan Anda men-debug skrip entri (score.py) dengan cepat. Jika skrip skor yang mendasarinya memiliki bug, server akan gagal menginisialisasi atau melayani model. Sebaliknya, ini akan menghilangkan pengecualian & lokasi tempat masalah terjadi. Pelajari Server HTTP inferensi Azure Machine Learning lebih lanjut

  1. Pasang paket azureml-inference-server-http dari umpan pypi:

    python -m pip install azureml-inference-server-http
    
  2. Mulai server dan atur score.py sebagai skrip entri:

    azmlinfsrv --entry_script score.py
    
  3. Kirim permintaan penilaian ke server menggunakan curl:

    curl -p 127.0.0.1:5001/score
    

Catatan

Pelajari pertanyaan umum tentang server HTTP Inferensi pembelajaran mesin Azure.

Mendebug secara lokal

Anda dapat menemukan buku catatan penyebaran lokal sampel di repositori MachineLearningNotebooks untuk menjelajahi contoh yang dapat dijalankan.

Peringatan

Penyebaran layanan web lokal tidak didukung untuk skenario produksi.

Untuk menyebarkan secara lokal, ubah kode Anda untuk menggunakan LocalWebservice.deploy_configuration() untuk membuat konfigurasi penyebaran. Kemudian gunakan Model.deploy() untuk menyebarkan layanan. Contoh berikut menyebarkan model (terkandung dalam variabel model) sebagai layanan web lokal:

BERLAKU UNTUK:SDK Python azureml v1

from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import LocalWebservice


# Create inference configuration based on the environment definition and the entry script
myenv = Environment.from_conda_specification(name="env", file_path="myenv.yml")
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
# Create a local deployment, using port 8890 for the web service endpoint
deployment_config = LocalWebservice.deploy_configuration(port=8890)
# Deploy the service
service = Model.deploy(
    ws, "mymodel", [model], inference_config, deployment_config)
# Wait for the deployment to complete
service.wait_for_deployment(True)
# Display the port that the web service is available on
print(service.port)

Jika Anda menentukan YAML spesifikasi conda Anda sendiri, cantumkan versi azureml-defaults version >= 1.0.45 sebagai dependensi pip. Paket ini diperlukan untuk menghosting model sebagai layanan web.

Pada titik ini, Anda dapat bekerja dengan layanan seperti biasa. Kode berikut menunjukkan pengiriman data ke layanan:

import json

test_sample = json.dumps({'data': [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
]})

test_sample = bytes(test_sample, encoding='utf8')

prediction = service.run(input_data=test_sample)
print(prediction)

Untuk informasi selengkapnya tentang menyesuaikan lingkungan Python Anda, lihat Membuat dan mengelola lingkungan untuk pelatihan dan penyebaran.

Memperbarui layanan

Selama pengujian lokal, Anda mungkin perlu memperbarui file score.py untuk menambahkan pengelogan atau mencoba menyelesaikan masalah apa pun yang Anda temukan. Untuk mengisi ulang perubahan pada file score.py, gunakan reload(). Misalnya, kode berikut mengisi ulang skrip untuk layanan, lalu mengirim data ke sana. Data dinilai menggunakan file score.py yang diperbarui:

Penting

Metode reload hanya tersedia untuk penyebaran lokal. Untuk informasi tentang memperbarui penyebaran ke target komputasi lain, lihat cara memperbarui layanan web Anda.

service.reload()
print(service.run(input_data=test_sample))

Catatan

Skrip diisi ulang dari lokasi yang ditentukan oleh objek InferenceConfig yang digunakan oleh layanan.

Untuk mengubah model, dependensi Conda, atau konfigurasi penyebaran, gunakan update(). Contoh berikut memperbarui model yang digunakan oleh layanan:

service.update([different_model], inference_config, deployment_config)

Menghapus layanan

Untuk menghapus layanan, gunakan delete().

Memeriksa log Docker

Anda dapat mencetak pesan log komputer Docker terperinci dari objek layanan. Anda dapat menampilkan log untuk penyebaran Lokal, ACI, dan AKS. Contoh berikut menunjukkan cara mencetak log.

# if you already have the service object handy
print(service.get_logs())

# if you only know the name of the service (note there might be multiple services with the same name but different version number)
print(ws.webservices['mysvc'].get_logs())

Jika Anda melihat garis Booting worker with pid: <pid> yang terjadi beberapa kali dalam log, artinya, memori tidak cukup untuk memulai pekerja. Anda dapat mengatasi kesalahan dengan meningkatkan nilai memory_gb di deployment_config

Langkah berikutnya

Pelajari selengkapnya tentang penyebaran: