Yerel model dağıtımıyla ilgili sorunları giderme

Azure Container Instances 'a (ACI) veya Azure Kubernetes Service'e (AKS) dağıtım sorunlarını gidermenin ilk adımı olarak yerel model dağıtımlarını deneyin. Yerel bir web hizmeti kullanmak, yaygın Azure Machine Learning Docker web hizmeti dağıtım hatalarını saptamayı ve düzeltmeyi kolaylaştırır.

Önkoşullar

  • Bir Azure aboneliği. Azure Machine Learning'in ücretsiz veya ücretli sürümünü deneyin.
  • Seçenek A (Önerilen) - Azure Machine Learning İşlem Örneğinde yerel olarak hata ayıklama
  • B Seçeneği - İşleminizde yerel olarak hata ayıklama
    • Azure Machine Learning SDK'sı.
    • Azure CLI.
    • Azure Machine Learning için CLI uzantısı.
    • Yerel sisteminizde çalışan bir Docker yüklemesi yapın.
    • Docker yüklemenizi doğrulamak için terminalden veya komut isteminden komutunu docker run hello-world kullanın. Docker'ı yükleme veya Docker hatalarını giderme hakkında bilgi için Docker Belgeleri'ne bakın.
  • C Seçeneği - Azure Machine Learning çıkarımı HTTP sunucusu ile yerel hata ayıklamayı etkinleştirin.
    • Azure Machine Learning çıkarımı HTTP sunucusu, yerel geliştirme ortamında giriş betiğinizi (score.py) kolayca doğrulamanızı sağlayan bir Python paketidir. Puanlama betiğinde bir sorun varsa, sunucu bir hata döndürür. Ayrıca hatanın oluştuğu konumu da döndürür.
    • Sunucu, sürekli tümleştirme ve dağıtım işlem hattında doğrulama geçitleri oluştururken de kullanılabilir. Örneğin, sunucuyu aday betiğiyle başlatın ve test paketini yerel uç noktada çalıştırın.

Azure Machine Learning çıkarımı HTTP sunucusu

Yerel çıkarım sunucusu, giriş betiğinizde (score.py ) hızlı bir şekilde hata ayıklamanıza olanak tanır. Temel alınan puan betiğinde hata olması durumunda sunucu modeli başlatamaz veya sunmaz. Bunun yerine, bir özel durum ve sorunların oluştuğu konum oluşturur. Azure Machine Learning çıkarım HTTP Sunucusu hakkında daha fazla bilgi edinin

  1. azureml-inference-server-http Paketi pypi akışından yükleyin:

    python -m pip install azureml-inference-server-http
    
  2. Sunucuyu başlatın ve giriş betiği olarak ayarlayın score.py :

    azmlinfsrv --entry_script score.py
    
  3. kullanarak curlsunucuya puanlama isteği gönderin:

    curl -p 127.0.0.1:5001/score
    

Yerel olarak hata ayıklama

Çalıştırılabilir bir örneği keşfetmek için MachineLearningNotebooks deposunda örnek bir yerel dağıtım not defteri bulabilirsiniz.

Uyarı

Yerel web hizmeti dağıtımları üretim senaryoları için desteklenmez.

Yerel olarak dağıtmak için kodunuzu bir dağıtım yapılandırması oluşturmak üzere kullanacak LocalWebservice.deploy_configuration() şekilde değiştirin. Ardından hizmeti dağıtmak için kullanın Model.deploy() . Aşağıdaki örnek, bir modeli (model değişkeninde yer alan) yerel bir web hizmeti olarak dağıtır:

ŞUNUN IÇIN GEÇERLIDIR: Python SDK 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)

Kendi conda belirtimi YAML'nizi tanımlıyorsanız azureml-defaults sürüm >= 1.0.45'i pip bağımlılığı olarak listeleyin. Bu paket, modeli web hizmeti olarak barındırmak için gereklidir.

Bu noktada, hizmetle normal şekilde çalışabilirsiniz. Aşağıdaki kod hizmete veri göndermeyi gösterir:

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)

Python ortamınızı özelleştirme hakkında daha fazla bilgi için bkz . Eğitim ve dağıtım için ortam oluşturma ve yönetme.

Hizmeti güncelleştirme

Yerel test sırasında, günlüğe kaydetme eklemek için dosyayı güncelleştirmeniz score.py veya keşfettiğiniz sorunları çözmeyi denemeniz gerekebilir. Dosyadaki score.py değişiklikleri yeniden yüklemek için kullanın reload(). Örneğin, aşağıdaki kod hizmetin betiğini yeniden yükler ve sonra buna veri gönderir. Veriler güncelleştirilmiş score.py dosya kullanılarak puanlanır:

Önemli

reload yöntemi yalnızca yerel dağıtımlar için kullanılabilir. Dağıtımı başka bir işlem hedefine güncelleştirme hakkında bilgi için bkz . Web hizmetinizi güncelleştirme.

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

Not

Betik, hizmet tarafından kullanılan nesne tarafından belirtilen konumdan InferenceConfig yeniden yüklenir.

Modeli, Conda bağımlılıklarını veya dağıtım yapılandırmasını değiştirmek için update() kullanın. Aşağıdaki örnek, hizmet tarafından kullanılan modeli güncelleştirir:

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

Hizmeti silme

Hizmeti silmek için delete() kullanın.

Docker günlüğünü inceleme

Hizmet nesnesinden ayrıntılı Docker altyapısı günlük iletilerini yazdırabilirsiniz. ACI, AKS ve Yerel dağıtımların günlüğünü görüntüleyebilirsiniz. Aşağıdaki örnekte günlüklerin nasıl yazdırılacağını gösterilmektedir.

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

Satırın Booting worker with pid: <pid> günlüklerde birden çok kez oluştuğunu görürseniz bu, çalışanı başlatmak için yeterli bellek olmadığı anlamına gelir. değerini artırarak memory_gb hatayı giderebilirsiniz: deployment_config

Sonraki adımlar

Dağıtım hakkında daha fazla bilgi edinin: