Makine öğrenmesi modellerini Azure'a dağıtma
Makine öğrenmesi veya derin öğrenme modelinizi Azure buluta bir web hizmeti olarak dağıtmayı öğrenin.
Not
Azure Machine Learning Uç noktalar (önizleme) gelişmiş, daha basit bir dağıtım deneyimi sağlar. Uç noktalar hem gerçek zamanlı hem de toplu çıkarım senaryolarını destekler. Uç noktalar, işlem türleri arasında model dağıtımlarını çağırmak ve yönetmek için birleşik bir arabirim sağlar. Bkz. Uç Azure Machine Learning (önizleme)?.
Model dağıtmak için iş akışı
Modeli nerede dağıtırsanız dağıtın benzer bir iş akışı kullanılır:
- Modeli kaydedin.
- Giriş betiği hazırlama.
- Çıkarım yapılandırmasını hazırlama.
- Her şeyin çalışır olduğundan emin olmak için modeli yerel olarak dağıtın.
- İşlem hedefi seçin.
- Modeli buluta dağıtma.
- Sonuçta elde edilen web hizmetini test edin.
Makine öğrenmesi dağıtım iş akışında yer alan kavramlar hakkında daha fazla bilgi için bkz.Azure Machine Learning.
Önkoşullar
Önemli
Bu makaledeki Azure CLI komutları için , azure-cli-ml veya v1 uzantısını Azure Machine Learning. Uzantıyı kullanan gelişmiş v2 CLI ml (önizleme) artık kullanılabilir ve önerilir. Uzantılar uyumsuzdur, bu nedenle v2 CLI komutları bu makaledeki adımlar için çalışmaz. Ancak makine öğrenmesi çalışma alanları ve temel alınan tüm kaynaklar herhangi biri ile etkileşime olabilir; başka bir kullanıcı v1 CLI ile çalışma alanı oluşturabilir ve başka bir kullanıcı v2 CLI ile aynı çalışma alanına iş gönderebilirsiniz.
Hangi uzantıları yüklemiş olduğunu bulmak için az extension list kullanın. Uzantılar listesi içeriyorsa, azure-cli-ml bu makaledeki adımlar için doğru uzantıya sahipsinizdir.
Farklı uzantıları yükleme ve kullanma hakkında daha fazla bilgi için aşağıdaki makalelere bakın:
azure-cli-ml- CLI'sini yükleme, ayarlama ve kullanma (v1)ml- CLI'sini yükleme ve ayarlama (v2)
- Azure Machine Learning çalışma alanı. Daha fazla bilgi için bkz. Çalışma alanı Azure Machine Learning oluşturma.
- Model. Bu makaledeki örneklerde önceden eğitilmiş bir model lanmıştır.
- İşlem örneği gibi Docker çalıştıran bir makine.
Çalışma alanınıza bağlanma
Erişiminiz olan çalışma alanlarını görmek için aşağıdaki komutları kullanın:
az login
az account set -s <subscription>
az ml workspace list --resource-group=<resource-group>
Modeli kaydetme
Dağıtılan makine öğrenmesi hizmeti için tipik bir durum, aşağıdaki bileşenlere ihtiyacınız olduğudur:
- Dağıtılmasını istediğiniz modeli temsil eden kaynaklar (örneğin: pytorch model dosyası).
- Hizmette çalıştıracak ve modeli verilen bir girişte yürüten kod.
Azure Machine Learnings, dağıtımı iki ayrı bileşene ayırmanızı sağlar; böylece aynı kodu tutabilirsiniz ancak modeli güncelleştirebilirsiniz. Bir modeli kodunuzdan ayrı olarak karşıya yüklediğiniz mekanizmayı "modeli kaydetme" olarak tanımlarız.
Bir modeli kaydettirdikten sonra modeli buluta yükleriz (çalışma alanınıza varsayılan depolama hesabında) ve ardından web hizmetinizin çalıştır olduğu aynı işleme bağlarız.
Aşağıdaki örneklerde bir modelin nasıl kaydedildiklerinden örnekler verilmiştir.
Önemli
Yalnızca bir güvenilen kaynaktan oluşturduğunuz veya aldığınız modelleri kullanmanız gerekir. Bir dizi popüler biçimde güvenlik açıkları bulunduğundan, serileştirilmiş modelleri kod olarak değerlendirmelisiniz. Ayrıca, modeller taraflı veya hatalı çıktılar sağlamak üzere kötü amaçlı olarak kötü amaçlı olarak eğitilmiş olabilir.
Aşağıdaki komutlar bir modeli indirir ve ardından modeli çalışma alanınıza Azure Machine Learning alır:
wget https://aka.ms/bidaf-9-model -O model.onnx --show-progress
az ml model register -n bidaf_onnx \
-p ./model.onnx \
-g <resource-group> \
-w <workspace-name>
Bir -p klasörün veya kaydetmek istediğiniz bir dosyanın yoluna ayarlayın.
hakkında daha fazla bilgi az ml model register için başvuru belgelerine bakın.
Eğitim çalıştırması için Azure ML modeli kaydetme
Daha önce bir Azure Machine Learning eğitim işiyle oluşturulmuş bir modeli kaydetmeniz gerekirse, denemeyi, çalıştırmayı ve modelin yolunu belirterek:
az ml model register -n bidaf_onnx --asset-path outputs/model.onnx --experiment-name myexperiment --run-id myrunid --tag area=qna
--asset-pathparametresi, modelin bulut konumunu ifade eder. Bu örnekte, tek bir dosyanın yolu kullanılır. Model kaydına birden çok dosya eklemek için, --asset-path dosyaları içeren klasörün yoluna ayarlayın.
hakkında daha fazla bilgi az ml model register için başvuru belgelerine bakın.
Sahte bir giriş betiği tanımlama
Giriş betiği, dağıtılan bir web hizmetine gönderilen verileri alır ve modele geçirir. Ardından modelin yanıtını istemciye döndürür. Betik modelinize özeldir. Giriş betiği, modelin beklediğiniz ve döndüren verileri anlamanız gerekir.
Giriş betiğinde gerçekleştirmeniz gereken iki şey:
- Modelinizi yükleme (adlı bir işlev
init()kullanarak) - Modelinizi giriş verileri üzerinde çalıştırma (adlı bir işlev
run()kullanarak)
İlk dağıtımınız için aldığı verileri yazdıran sahte bir giriş betiği kullanın.
import json
def init():
print("This is init")
def run(data):
test = json.loads(data)
print(f"received data {test}")
return f"test is {test}"
Bu dosyayı adlı dizinin echo_score.py içinde olarak source_dir kaydedin. Bu sahte betik, modeli kullanmamaları için bu betike göndermekte olduğu verileri döndürür. Ancak puanlama betiği çalıştırmayı test etmek için yararlıdır.
Çıkarım yapılandırması tanımlama
Çıkarım yapılandırması, web hizmetinizi başlatma sırasında kullanmak üzere Docker kapsayıcısını ve dosyalarını açıklar. Alt dizinler de dahil olmak üzere kaynak dizininizin içindeki tüm dosyalar sıkıştırılır ve web hizmetinizi dağıtarak buluta karşıya yükler.
Aşağıdaki çıkarım yapılandırması, makine öğrenmesi dağıtımının gelen istekleri işlemek için dizinde dosyasını ve ortamda belirtilen Python paketleriyle Docker görüntüsünü kullanacağız echo_score.py ./source_dir project_environment belirtir.
Proje ortamınızı oluştururken Azure Machine Learning temel Docker görüntüsü olarak herhangi bir çıkarım ortamını kullanabilirsiniz. Gerekli bağımlılıkları en üst düzeye yükecek ve sonuçta elde edilen Docker görüntüsünü çalışma alanınız ile ilişkili depoda depola yapacağız.
Not
Azure machine learning çıkarım kaynak dizini karşıya yüklemesi .gitignore veya .amlignore ile ilgili değil
En düşük çıkarım yapılandırması şu şekilde yaz olabilir:
{
"entryScript": "echo_score.py",
"sourceDirectory": "./source_dir",
"environment": {
"docker": {
"arguments": [],
"baseDockerfile": null,
"baseImage": "mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
"enabled": false,
"sharedVolumes": true,
"shmSize": null
},
"environmentVariables": {
"EXAMPLE_ENV_VAR": "EXAMPLE_VALUE"
},
"name": "my-deploy-env",
"python": {
"baseCondaEnvironment": null,
"condaDependencies": {
"channels": [],
"dependencies": [
"python=3.6.2",
{
"pip": [
"azureml-defaults"
]
}
],
"name": "project_environment"
},
"condaDependenciesFile": null,
"interpreterPath": "python",
"userManagedDependencies": false
},
"version": "1"
}
}
Bu dosyayı adıyla dummyinferenceconfig.json kaydedin.
Çıkarım yapılandırmaları hakkında daha ayrıntılı bilgi için bu makaleye bakın.
Dağıtım yapılandırması tanımlama
Dağıtım yapılandırması, Web hizmeti 'nin çalışması için gereken bellek miktarını ve çekirdekleri belirler. Ayrıca temel alınan Web hizmeti 'nin yapılandırma ayrıntılarını da sağlar. Örneğin, bir dağıtım yapılandırması, hizmetinizin 2 gigabayt bellek, 2 CPU çekirdeği, 1 GPU çekirdeği ihtiyacı olduğunu ve otomatik ölçeklendirmeyi etkinleştirmek istediğinizi belirtmenize olanak tanır.
Bir dağıtım yapılandırması için kullanılabilen seçenekler, seçtiğiniz işlem hedefine bağlı olarak farklılık gösterir. Bir yerel dağıtımda, her türlü, Web sitenizin hangi bağlantı noktası üzerinde sunulacak olduğunu belirtebilirsiniz.
deploymentconfig.jsonBelgedeki girişler LocalWebservice.deploy_configurationparametrelerine eşlenir. Aşağıdaki tabloda, JSON belgesindeki varlıklar ve yöntemin parametreleri arasındaki eşleme açıklanmaktadır:
| JSON varlığı | Yöntem parametresi | Description |
|---|---|---|
computeType |
NA | Bilgi işlem hedefi. Yerel hedefler için değer olmalıdır local . |
port |
port |
Hizmetin HTTP uç noktasının sergilebileceği yerel bağlantı noktası. |
Bu JSON, CLı ile kullanılacak örnek bir dağıtım yapılandırması örneğidir:
{
"computeType": "local",
"port": 32267
}
Bu JSON dosyasını adlı bir dosya olarak kaydedin deploymentconfig.json .
Daha fazla bilgi için bkz. dağıtım şeması.
Machine Learning modelinizi dağıtma
Artık modelinizi dağıtmaya hazırsınız.
bidaf_onnx:1Modelinizin adı ve sürüm numarası ile değiştirin.
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic dummyinferenceconfig.json \
--dc deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
Modelinize çağrı
Yankı modelinizin başarıyla dağıtılıp dağıtılmadığını kontrol edelim. Bir Puanlama isteği ve basit bir istek da yapabilmelisiniz:
curl -v http://localhost:32267
curl -v -X POST -H "content-type:application/json" \
-d '{"query": "What color is the fox", "context": "The quick brown fox jumped over the lazy dog."}' \
http://localhost:32267/score
Giriş betiği tanımlama
Artık modelinize gerçekten yükleme zamanı. İlk olarak, giriş betiğinizi değiştirin:
import json
import numpy as np
import os
import onnxruntime
from nltk import word_tokenize
import nltk
def init():
nltk.download("punkt")
global sess
sess = onnxruntime.InferenceSession(
os.path.join(os.getenv("AZUREML_MODEL_DIR"), "model.onnx")
)
def run(request):
print(request)
text = json.loads(request)
qw, qc = preprocess(text["query"])
cw, cc = preprocess(text["context"])
# Run inference
test = sess.run(
None,
{"query_word": qw, "query_char": qc, "context_word": cw, "context_char": cc},
)
start = np.asscalar(test[0])
end = np.asscalar(test[1])
ans = [w for w in cw[start : end + 1].reshape(-1)]
print(ans)
return ans
def preprocess(word):
tokens = word_tokenize(word)
# split into lower-case word tokens, in numpy array with shape of (seq, 1)
words = np.asarray([w.lower() for w in tokens]).reshape(-1, 1)
# split words into chars, in numpy array with shape of (seq, 1, 1, 16)
chars = [[c for c in t][:16] for t in tokens]
chars = [cs + [""] * (16 - len(cs)) for cs in chars]
chars = np.asarray(chars).reshape(-1, 1, 1, 16)
return words, chars
Bu dosyayı içinde olduğu gibi kaydedin score.py source_dir .
AZUREML_MODEL_DIRKayıtlı modelinizi bulmak için ortam değişkeninin kullanımına dikkat edin. Artık bazı PIP paketleri ekledik.
{
"entryScript": "score.py",
"sourceDirectory": "./source_dir",
"environment": {
"docker": {
"arguments": [],
"baseDockerfile": null,
"baseImage": "mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
"enabled": false,
"sharedVolumes": true,
"shmSize": null
},
"environmentVariables": {
"EXAMPLE_ENV_VAR": "EXAMPLE_VALUE"
},
"name": "my-deploy-env",
"python": {
"baseCondaEnvironment": null,
"condaDependencies": {
"channels": [],
"dependencies": [
"python=3.6.2",
{
"pip": [
"azureml-defaults",
"nltk",
"numpy",
"onnxruntime"
]
}
],
"name": "project_environment"
},
"condaDependenciesFile": null,
"interpreterPath": "python",
"userManagedDependencies": false
},
"version": "2"
}
}
Bu dosyayı farklı kaydet inferenceconfig.json
Yeniden dağıtın ve hizmetinizi çağırın
Hizmetinizi yeniden dağıtın:
bidaf_onnx:1Modelinizin adı ve sürüm numarası ile değiştirin.
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic inferenceconfig.json \
--dc deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
Sonra hizmete bir post isteği gönderemeyeceğinizi doğrulayın:
curl -v -X POST -H "content-type:application/json" \
-d '{"query": "What color is the fox", "context": "The quick brown fox jumped over the lazy dog."}' \
http://localhost:32267/score
İşlem hedefi seçin
Modelinizi barındırmak için kullanabileceğiniz işlem hedefi, dağıtılan uç noktanın maliyetini ve kullanılabilirliğini etkiler. Uygun bir işlem hedefi seçmek için bu tabloyu kullanın.
| İşlem hedefi | Kullanıldığı yerler | GPU desteği | FPGA desteği | Description |
|---|---|---|---|---|
| Yerel web hizmeti | Test etme/hata ayıklama | Sınırlı test ve sorun giderme için kullanın. Donanım hızlandırma, yerel sistemde kitaplıkların kullanımına bağlıdır. | ||
| Azure Kubernetes Service (AKS) | Gerçek zamanlı çıkarım Üretim iş yükleri için önerilir. |
Evet (web hizmeti dağıtımı) | Evet | Yüksek ölçekli üretim dağıtımları için kullanın. Dağıtılan hizmetin hızlı yanıt süresi ve otomatik ölçeklendirmesi sağlar. Küme otomatik ölçeklendirme, Azure Machine Learning SDK'sı aracılığıyla desteklenmez. AKS kümesinde düğümleri değiştirmek için aks kümenizin kullanıcı arabirimini Azure portal. Tasarımcıda desteklenen. |
| Azure Container Instances | Gerçek zamanlı çıkarım Yalnızca geliştirme ve test amacıyla önerilir. |
48 GB'den az RAM gerektiren düşük ölçekli CPU tabanlı iş yükleri için kullanın. Bir kümeyi yönetmenizi gerektirmez. Tasarımcıda desteklenen. |
||
| Azure Machine Learning işlem kümeleri | Toplu çıkarım | Evet (makine öğrenmesi işlem hattı) | Sunucusuz işlemde toplu puanlama çalıştırma. Normal ve düşük öncelikli VM'leri destekler. Gerçek zamanlı çıkarım desteği yoktur. | |
| Azure Arc özellikli Kubernetes | Gerçek zamanlı çıkarım Toplu çıkarım |
Yes | Yok | Şirket içinde yönetilen şirket içi, bulut ve uç Kubernetes kümelerinde çıkarım iş yüklerini Azure Arc |
Not
Yerel ve Azure Machine Learning gibi işlem hedefleri eğitim ve deneme için GPU desteğine sahip olsa da, web hizmeti olarak dağıtıldığında çıkarım için GPU kullanmak yalnızca AKS üzerinde de kullanılabilir.
Bir makine öğrenmesi işlem hattı ile puanlama yalnızca işlem hattında puanlama için GPU Azure Machine Learning kullanılır.
Küme SKU'su seçerken, önce ölçeğini ölçeklendirin ve sonra ölçeğini ölçeklendirin. Modelinizin gerektirdiği RAM'in %150'sinde olan bir makineyle çalışmaya başlayabilir, sonucun profilini oluşturun ve ihtiyacınız olan performansa sahip bir makine bulun. Bunu öğrendikte, eş zamanlı çıkarım ihtiyacınıza uyacak şekilde makine sayısını artır.
Not
- Kapsayıcı örnekleri yalnızca boyutu 1 GB'ın altında olan küçük modeller için uygundur.
- Daha büyük modelleri geliştirme ve test etmek için tek düğümlü AKS kümelerini kullanın.
Buluta Dağıt
Hizmetinizin yerel olarak çalışıp çalışmadığını ve bir uzak işlem hedefi seçtiğinizi doğruladıktan sonra, buluta dağıtım yapmaya hazırlanın.
Dağıtım yapılandırmanızı seçtiğiniz işlem hedefine karşılık gelecek şekilde değiştirin, bu durumda Azure Container Instances:
Bir dağıtım yapılandırması için kullanılabilen seçenekler, seçtiğiniz işlem hedefine bağlı olarak farklılık gösterir.
{
"computeType": "aci",
"containerResourceRequirements":
{
"cpu": 0.5,
"memoryInGB": 1.0
},
"authEnabled": true,
"sslEnabled": false,
"appInsightsEnabled": false
}
Bu dosyayı olarak kaydedin re-deploymentconfig.json .
Daha fazla bilgi için Bu başvuruyabakın.
Hizmetinizi yeniden dağıtın:
bidaf_onnx:1Modelinizin adı ve sürüm numarası ile değiştirin.
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic inferenceconfig.json \
--dc re-deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
Hizmet günlüklerini görüntülemek için aşağıdaki komutu kullanın:
az ml service get-logs -n myservice \
-g <resource-group> \
-w <workspace-name>
Uzak Web hizmeti 'nizi çağırma
Uzaktan dağıtırken, anahtar kimlik doğrulaması etkinleştirmiş olabilirsiniz. Aşağıdaki örnekte, bir çıkarım isteği oluşturmak için Python ile hizmet anahtarınızı nasıl alacağınız gösterilmektedir.
[! Not defteri-Python [] (~/azureml-examples-Main/Python-SDK/Tutorials/Deploy-Local/1.deploy-Local.ipynb? Name = Call-Remote-Web-Service-Code)]
[! Not defteri-Python [] (~/azureml-examples-Main/Python-SDK/Tutorials/Deploy-Local/1.deploy-Local.ipynb? Name = Call-Remote-WebService-PRINT-logs)]
Diğer dillerdeki diğer örnek istemciler için Web hizmetlerini kullanmak üzere istemci uygulamalardaki makaleye bakın.
Hizmet durumunu anlama
Model dağıtımı sırasında hizmet durumu değişikliğini tam olarak dağıttığında görebilirsiniz.
Aşağıdaki tabloda farklı hizmet durumları açıklanmaktadır:
| Web hizmeti durumu | Açıklama | Son durum? |
|---|---|---|
| Kta | Hizmet, dağıtım sürecinde. | Hayır |
| Uygun Değil | Hizmet dağıtıldı, ancak şu anda ulaşılamaz durumda. | Hayır |
| Unschedulable | Kaynak eksikliği nedeniyle hizmet şu anda dağıtılamıyor. | Hayır |
| Başarısız | Hizmet bir hata veya kilitlenme nedeniyle dağıtılamadı. | Yes |
| Sağlam | Hizmet sağlıklı ve uç nokta kullanılabilir. | Yes |
İpucu
Dağıtım sırasında, işlem hedefleri için Docker görüntüleri Azure Container Registry (ACR) ile oluşturulur ve yüklenir. varsayılan olarak, Azure Machine Learning temel hizmet katmanını kullanan bir acr oluşturur. Çalışma alanınızın ACR 'sini standart veya Premium katmana değiştirmek, görüntü oluşturma ve işlem hedeflerinize dağıtmak için geçen süreyi azaltabilir. Daha fazla bilgi için bkz. Azure Container Registry hizmet katmanları.
Not
Azure Kubernetes Service 'e (AKS) bir model dağıtıyorsanız, bu küme için Azure izleyicisini etkinleştirmenizi öneririz. Bu, genel küme durumunu ve kaynak kullanımını anlamanıza yardımcı olur. Aşağıdaki kaynakların yararlı olduğunu da görebilirsiniz:
Bir modeli sağlıksız veya aşırı yüklenmiş bir kümeye dağıtmaya çalışıyorsanız, sorun yaşanması beklenmektedir. AKS kümesi sorunlarını gidermek için yardıma ihtiyacınız varsa lütfen AKS desteğiyle iletişime geçin.
Kaynakları silme
[! Not defteri-Python [] (~/azureml-examples-Main/Python-SDK/Tutorials/Deploy-Local/2.deploy-Local-cli.ipynb? ad = Delete-Resource-Code)]
az ml service delete -n myservice
az ml service delete -n myaciservice
az ml model delete --model-id=<MODEL_ID>
Dağıtılan bir Web hizmetini silmek için kullanın az ml service delete <name of webservice> .
Çalışma alanınızdan kayıtlı bir modeli silmek için şunu kullanın az ml model delete <model id>
Bir Web hizmetini silme ve bir modeli silmehakkında daha fazla bilgi edinin.
Sonraki adımlar
- Başarısız bir dağıtımın sorunlarını giderme
- Web hizmetini güncelleştirme
- otomatikleştirilmiş ML için bir tıklama dağıtımı Azure Machine Learning studio 'da çalışır
- TLS kullanarak Azure Machine Learning aracılığıyla web hizmetinin güvenliğini sağlama
- Application Insights Azure Machine Learning modellerinizi izleyin
- Model dağıtımları için olay uyarıları ve Tetikleyicileri oluşturma