ML web hizmet uç noktalarından verileri izleme ve toplama

ŞUNUN IÇIN GEÇERLIDIR: Python SDK azureml v1

Bu makalede, Azure Kubernetes Service (AKS) veya Azure Container Instances (ACI) içinde web hizmeti uç noktalarına dağıtılan modellerden veri toplamayı öğreneceksiniz. Bir uç noktadan aşağıdaki verileri toplamak için Azure Uygulaması lication Insights'ı kullanın:

  • Çıktı verileri
  • Yanıtlar
  • İstek oranları, yanıt süreleri ve hata oranları
  • Bağımlılık oranları, yanıt süreleri ve hata oranları
  • Özel durumlar

Enable-app-insights-in-production-service.ipynb not defteri bu makaledeki kavramları gösterir.

Not defterlerini çalıştırmayı öğrenmek için bkz. Hizmeti keşfetmek için Jupyter not defterlerini kullanma.

Önemli

Bu makaledeki bilgiler, çalışma alanınızla oluşturulan Azure Uygulaması lication Insights örneğine dayanır. Bu Application Insights örneğini sildiyseniz, çalışma alanını silip yeniden oluşturmak dışında yeniden oluşturmanın bir yolu yoktur.

İpucu

Bunun yerine çevrimiçi uç noktaları kullanıyorsanız, bunun yerine Çevrimiçi uç noktaları izleme makalesindeki bilgileri kullanın.

Önkoşullar

  • Azure aboneliği - Azure Machine Learning'in ücretsiz veya ücretli sürümünü deneyin.

  • Azure Machine Learning çalışma alanı, betiklerinizi içeren yerel bir dizin ve Python için Azure Machine Learning SDK'sı yüklüdür. Daha fazla bilgi edinmek için bkz . Geliştirme ortamını yapılandırma.

  • Eğitilmiş bir makine öğrenmesi modeli. Daha fazla bilgi edinmek için Görüntü sınıflandırma modelini eğitma öğreticisine bakın.

Python SDK'sı ile günlüğe kaydetmeyi yapılandırma

Bu bölümde, Python SDK'sını kullanarak Application Insight günlüğünü etkinleştirmeyi öğreneceksiniz.

Dağıtılan hizmeti güncelleştirme

Mevcut bir web hizmetini güncelleştirmek için aşağıdaki adımları kullanın:

  1. Çalışma alanınızdaki hizmeti tanımlayın. değeri ws , çalışma alanınızın adıdır

    from azureml.core.webservice import Webservice
    aks_service= Webservice(ws, "my-service-name")
    
  2. Hizmetinizi güncelleştirme ve Azure Uygulaması lication Insights'ı etkinleştirme

    aks_service.update(enable_app_insights=True)
    

Hizmetinizde özel izlemeleri günlüğe kaydetme

Önemli

Azure Uygulaması lication Insights yalnızca 64 kb'a kadar olan yükleri günlüğe kaydeder. Bu sınıra ulaşılırsa, yetersiz bellek gibi hatalar görebilirsiniz veya hiçbir bilgi günlüğe kaydedilemeyebilir. Günlüğe kaydetmek istediğiniz veriler 64 kb daha büyükse, üretimdeki modeller için Veri Toplama bölümünde yer alan bilgileri kullanarak blob depolama alanında depolamanız gerekir.

AKS dağıtımında model izleme gibi daha karmaşık durumlar için OpenCensus gibi bir üçüncü taraf kitaplığı kullanmanızı öneririz.

Özel izlemeleri günlüğe kaydetmek için, Nasıl dağıtılır ve nerede belgesinde AKS veya ACI için standart dağıtım işlemini izleyin. Ardından aşağıdaki adımları kullanın:

  1. Çıkarım sırasında Application Insights'a veri göndermek için yazdırma deyimleri ekleyerek puanlama dosyasını güncelleştirin. İstek verileri ve yanıt gibi daha karmaşık bilgiler için bir JSON yapısı kullanın.

    Aşağıdaki örnek score.py dosya modelin ne zaman başlatıldığını, çıkarım sırasında giriş ve çıkışı ve hataların oluştuğu zamanı günlüğe kaydeder.

    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. Hizmet yapılandırmasını güncelleştirin ve Application Insights'ı etkinleştirdiğinizden emin olun.

    config = Webservice.deploy_configuration(enable_app_insights=True)
    
  3. Bir görüntü oluşturun ve AKS veya ACI üzerinde dağıtın. Daha fazla bilgi için bkz . Nasıl dağıtılır ve nereye dağıtılır.

Python'da izlemeyi devre dışı bırakma

Azure Uygulaması lication Insights'ı devre dışı bırakmak için aşağıdaki kodu kullanın:

## replace <service_name> with the name of the web service
<service_name>.update(enable_app_insights=False)

Azure Machine Learning stüdyosu ile günlüğe kaydetmeyi yapılandırma

ayrıca Azure Machine Learning stüdyosu'dan Azure Uygulaması Lication Insights'i etkinleştirebilirsiniz. Modelinizi web hizmeti olarak dağıtmaya hazır olduğunuzda Application Insights'ı etkinleştirmek için aşağıdaki adımları kullanın:

  1. adresinden stüdyoda https://ml.azure.comoturum açın.

  2. Modeller'e gidin ve dağıtmak istediğiniz modeli seçin.

  3. +Dağıt'ı seçin.

  4. Modeli dağıtma formunu doldurun.

  5. Gelişmiş menüsünü genişletin.

    Form dağıtma

  6. Application Insights tanılamasını ve veri toplamayı etkinleştir'i seçin.

    App Insights'i etkinleştirme

Ölçümleri ve günlükleri görüntüleme

Dağıtılan modeller için sorgu günlükleri

Çevrimiçi uç noktaların günlükleri müşteri verileridir. daha önce dağıtılan get_logs() bir web hizmetinden günlükleri almak için işlevini kullanabilirsiniz. Günlükler, dağıtım sırasında oluşan hatalar hakkında ayrıntılı bilgiler içerebilir.

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()

Birden çok Kiracınız varsa, önce aşağıdaki kimlik doğrulama kodunu eklemeniz gerekebilir ws = Workspace.from_config()

from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="the tenant_id in which your workspace resides")

Günlükleri stüdyoda görüntüleme

Azure Uygulaması lication Insights, hizmet günlüklerinizi Azure Machine Learning çalışma alanıyla aynı kaynak grubunda depolar. Studio kullanarak verilerinizi görüntülemek için aşağıdaki adımları kullanın:

  1. Stüdyoda Azure Machine Learning çalışma alanınıza gidin.

  2. Uç Noktaları seçin.

  3. Dağıtılan hizmeti seçin.

  4. Application Insights URL bağlantısını seçin.

    Application Insights URL'sini bulma

  5. Application Insights'ta, Genel Bakış sekmesinden veya İzleme bölümünde Günlükler'i seçin.

    İzlemeye genel bakış sekmesi

  6. score.py dosyasından günlüğe kaydedilen bilgileri görüntülemek için izlemeler tablosuna bakın. Aşağıdaki sorgu, giriş değerinin günlüğe kaydedildiği günlükleri arar:

    traces
    | where customDimensions contains "input"
    | limit 10
    

    verileri izleme

Azure Uygulaması lication Insights'ı kullanma hakkında daha fazla bilgi için bkz. Application Insights nedir?.

Web hizmeti meta verileri ve yanıt verileri

Önemli

Azure Uygulaması lication Insights yalnızca 64 kb'a kadar olan yükleri günlüğe kaydeder. Bu sınıra ulaşılırsa bellek yetersiz gibi hatalar görebilirsiniz veya hiçbir bilgi günlüğe kaydedilemeyebilir.

Web hizmeti isteği bilgilerini günlüğe kaydetmek için score.py dosyanıza deyimler ekleyin print . Her print deyim, iletisinin STDOUTaltındaki Application Insights izleme tablosunda bir girdiyle sonuçlar. Application Insights, deyim çıkışlarını izleme tablosunda ve içinde Contents depolar.print customDimensions JSON dizelerini yazdırma, altındaki Contentsizleme çıkışında hiyerarşik bir veri yapısı oluşturur.

Bekletme ve işleme için verileri dışarı aktarma

Önemli

Azure Uygulaması lication Insights yalnızca blob depolamaya dışarı aktarmayı destekler. Bu uygulamanın sınırları hakkında daha fazla bilgi için bkz . App Insights'tan telemetriyi dışarı aktarma.

Verileri saklama ayarlarını tanımlayabileceğiniz bir blob depolama hesabına aktarmak için Application Insights'ın sürekli dışarı aktarmasını kullanın. Application Insights, verileri JSON biçiminde dışarı aktarır.

Sürekli dışarı aktarma

Sonraki adımlar

Bu makalede, web hizmeti uç noktaları için günlüğe kaydetmeyi ve günlükleri görüntülemeyi öğrendiniz. Sonraki adımlar için şu makaleleri deneyin: