Memantau dan mengumpulkan data dari titik akhir layanan web ML
BERLAKU UNTUK: Python SDK azureml v1
Pada artikel ini, kamu mempelajari cara mengumpulkan data dari model yang disebarkan ke titik akhir layanan web di Azure Kubernetes Service (AKS) atau Azure Container Instances (ACI). Gunakan Azure Application Insights untuk mengumpulkan data berikut dari titik akhir:
- Data output
- Respons
- Tingkat permintaan, waktu respons, dan tingkat kegagalan
- Tingkat dependensi, waktu respons, dan tingkat kegagalan
- Pengecualian
Buku catatan enable-app-insights-in-production-service.ipynb menunjukkan konsep dalam artikel ini.
Pelajari cara menjalankan notebook dengan mengikuti artikel Menggunakan notebook Jupyter untuk menjelajahi layanan ini.
Penting
Informasi dalam artikel ini bergantung pada instans Application Insights yang dibuat dengan ruang kerja Anda. Jika Anda menghapus instans Application Insights ini, tidak ada cara untuk membuatnya kembali selain menghapus dan membuat ulang ruang kerja.
Tip
Jika Anda menggunakan titik akhir online sebagai gantinya, gunakan informasi di artikel Memantau titik akhir online sebagai gantinya.
Prasyarat
Langganan Azure - coba versi gratis atau berbayar Azure Machine Learning.
Ruang kerja Azure Machine Learning, direktori lokal yang berisi skrip Anda, dan Azure Machine Learning SDK untuk Python dipasang. Untuk mempelajari lebih lanjut, lihat Cara mengonfigurasi lingkungan pengembangan.
Model pembelajaran mesin terlatih. Untuk mempelajari lebih lanjut, lihat tutorial melatih model klasifikasi gambar.
Mengonfigurasi pengelogan dengan Python SDK
Di bagian ini, Anda mempelajari cara mengaktifkan pengelogan Application Insight dengan menggunakan Python SDK.
Memperbarui layanan yang disebarkan
Gunakan langkah-langkah berikut untuk memperbarui layanan web yang sudah ada:
Identifikasi layanan di ruang kerja Anda. Nilai untuk
ws
adalah nama ruang kerja Andafrom azureml.core.webservice import Webservice aks_service= Webservice(ws, "my-service-name")
Perbarui layanan Anda dan aktifkan Azure Application Insights
aks_service.update(enable_app_insights=True)
Mencatat jejak kustom di layanan Anda
Penting
Azure Application Insights hanya mencatat payload hingga 64kb. Jika batas ini tercapai, Anda mungkin melihat kesalahan seperti kehabisan memori, atau tidak ada informasi yang mungkin dicatat. Jika data yang ingin Anda catat lebih besar 64kb, Anda harus menyimpannya ke penyimpanan blob menggunakan informasi di Kumpulkan Data untuk model dalam produksi.
Untuk situasi yang lebih kompleks, seperti pelacakan model dalam penyebaran AKS, sebaiknya gunakan pustaka pihak ketiga seperti OpenCensus.
Untuk mencatat jejak kustom, ikuti proses penyebaran standar untuk AKS atau ACI di dokumen Cara dan tempat menyebarkan. Kemudian, gunakan langkah berikut:
Perbarui file penilaian dengan menambahkan pernyataan cetak untuk mengirim data ke Application Insights selama inferensi. Untuk informasi yang lebih kompleks, seperti data permintaan dan respons, gunakan struktur JSON.
Contoh log file
score.py
berikut ketika model diinisialisasi, input dan output selama inferensi, serta waktu terjadinya kesalahan.import pickle import json import numpy from sklearn.externals import joblib from sklearn.linear_model import Ridge from azureml.core.model import Model import time def init(): global model #Print statement for appinsights custom traces: print ("model initialized" + time.strftime("%H:%M:%S")) # note here "sklearn_regression_model.pkl" is the name of the model registered under the workspace # this call should return the path to the model.pkl file on the local disk. model_path = Model.get_model_path(model_name = 'sklearn_regression_model.pkl') # deserialize the model file back into a sklearn model model = joblib.load(model_path) # note you can pass in multiple rows for scoring def run(raw_data): try: data = json.loads(raw_data)['data'] data = numpy.array(data) result = model.predict(data) # Log the input and output data to appinsights: info = { "input": raw_data, "output": result.tolist() } print(json.dumps(info)) # you can return any datatype as long as it is JSON-serializable return result.tolist() except Exception as e: error = str(e) print (error + time.strftime("%H:%M:%S")) return error
Perbarui konfigurasi layanan, dan pastikan untuk mengaktifkan Application Insights.
config = Webservice.deploy_configuration(enable_app_insights=True)
Buat gambar dan sebarkan di AKS atau ACI. Untuk informasi selengkapnya, lihat Cara dan tempat menyebarkan.
Menonaktifkan pelacakan di Python
Untuk menonaktifkan Azure Application Insights, gunakan kode berikut:
## replace <service_name> with the name of the web service
<service_name>.update(enable_app_insights=False)
Mengonfigurasi pengelogan dengan studio Azure Machine Learning
Anda juga dapat mengaktifkan Azure Application Insights dari studio Azure Machine Learning. Saat Anda siap untuk menyebarkan model sebagai layanan web, gunakan langkah-langkah berikut untuk mengaktifkan Application Insights:
Masuk ke studio di https://ml.azure.com.
Buka Model dan pilih model yang ingin Anda sebarkan.
Pilih +Sebarkan.
Isi formulir Sebarkan model.
Perluas menu Tingkat lanjut.
Pilih Aktifkan diagnostik dan pengumpulan data Application Insights.
Menampilkan metrik dan log
Log kueri untuk model yang disebarkan
Log titik akhir online adalah data pelanggan. Anda dapat menggunakan fungsi get_logs()
untuk mengambil log dari layanan web yang disebarkan sebelumnya. Log dapat berisi informasi terperinci tentang kesalahan apa pun yang terjadi selama penyebaran.
from azureml.core import Workspace
from azureml.core.webservice import Webservice
ws = Workspace.from_config()
# load existing web service
service = Webservice(name="service-name", workspace=ws)
logs = service.get_logs()
Jika Anda memiliki beberapa Penyewa, Anda mungkin perlu menambahkan kode autentikasi berikut sebelum ws = Workspace.from_config()
from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="the tenant_id in which your workspace resides")
Menampilkan log di studio
Azure Application Insights menyimpan log layanan Anda di grup sumber daya yang sama dengan ruang kerja Azure Machine Learning. Gunakan langkah-langkah berikut untuk menampilkan data Anda menggunakan studio:
Buka ruang kerja Azure Machine Learning Anda di studio.
Pilih Titik akhir.
Pilih layanan yang disebarkan.
Pilih link url Application Insights.
Di Application Insights, dari tab Ringkasan atau bagian Pemantauan, pilih Log.
Untuk melihat informasi yang dicatat file score.py, lihat tabel jejak. Kueri berikut mencari log di mana nilai input dicatat:
traces | where customDimensions contains "input" | limit 10
Untuk informasi selengkapnya tentang cara menggunakan Azure Application Insights, lihat Apa itu Application Insights?.
Metadata layanan web dan data respons
Penting
Azure Application Insights hanya mencatat payload hingga 64kb. Jika batas ini tercapai maka Anda mungkin melihat kesalahan seperti kehabisan memori, atau tidak ada informasi yang dapat dicatat.
Untuk mencatat informasi permintaan layanan web, tambahkan pernyataan print
ke file score.py Anda. Setiap pernyataan print
menghasilkan satu entri dalam tabel jejak Application Insights di bawah pesan STDOUT
. Application Insights menyimpan output pernyataan print
di dalam customDimensions
dan di tabel jejak Contents
. Mencetak string JSON menghasilkan struktur data hierarkis dalam output jejak di bawah Contents
.
Mengekspor data untuk retensi dan pemrosesan
Penting
Azure Application Insights hanya mendukung ekspor ke penyimpanan blob. Untuk informasi selengkapnya tentang batas implementasi ini, lihat Mengekspor telemetri dari App Insights.
Gunakan ekspor berkelanjutan Application Insights untuk mengekspor data ke akun penyimpanan blob tempat Anda dapat menentukan pengaturan retensi. Application Insights mengekspor data dalam format JSON.
Langkah berikutnya
Dalam artikel ini, Anda mempelajari cara mengaktifkan pengelogan dan menampilkan log untuk titik akhir layanan web. Cobalah artikel ini untuk langkah berikutnya:
MLOps: Mengelola, menyebarkan, dan memantau model dengan Azure Machine Learning untuk mempelajari selengkapnya tentang memanfaatkan data yang dikumpulkan dari model dalam produksi. Data tersebut dapat membantu dalam terus meningkatkan proses pembelajaran mesin Anda.