Memantau dan mengumpulkan data dari titik akhir layanan web ML

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.

Prasyarat

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:

  1. Identifikasi layanan di ruang kerja Anda. Nilai untuk ws adalah nama ruang kerja Anda

    from azureml.core.webservice import Webservice
    aks_service= Webservice(ws, "my-service-name")
    
  2. 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:

  1. 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
    
  2. Perbarui konfigurasi layanan, dan pastikan untuk mengaktifkan Application Insights.

    config = Webservice.deploy_configuration(enable_app_insights=True)
    
  3. 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:

  1. Masuk ke studio di https://ml.azure.com.

  2. Buka Model dan pilih model yang ingin Anda sebarkan.

  3. Pilih +Sebarkan.

  4. Isi formulir Sebarkan model.

  5. Perluas menu Tingkat lanjut.

    Formulir penyebaran

  6. Pilih Aktifkan diagnostik dan pengumpulan data Application Insights.

    Mengaktifkan Application Insights

Menampilkan metrik dan log

Log kueri untuk model yang disebarkan

Log titik akhir real time 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:

  1. Buka ruang kerja Azure Machine Learning Anda di studio.

  2. Pilih Titik akhir.

  3. Pilih layanan yang disebarkan.

  4. Pilih link url Application Insights.

    Cari url Application Insights

  5. Di Application Insights, dari tab Ringkasan atau bagian Pemantauan, pilih Log.

    Tab Ringkasan pemantauan

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

    melacak data

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.

Ekspor berkelanjutan

Langkah berikutnya

Dalam artikel ini, Anda mempelajari cara mengaktifkan pengelogan dan menampilkan log untuk titik akhir layanan web. Cobalah artikel ini untuk langkah berikutnya: