Share via


Makine öğrenmesi modellerini Azure'a dağıtma

ŞUNUN IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1Python SDK azureml v1

Makine öğrenmesi veya derin öğrenme modelinizi Azure bulutunda web hizmeti olarak dağıtmayı öğrenin.

Dekont

Azure Machine Learning Uç Noktaları (v2), geliştirilmiş, 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. Azure Machine Learning uç noktaları nelerdir?.

Model dağıtmak için iş akışı

Modeli nerede dağıtırsanız dağıtın benzer bir iş akışı kullanılır:

  1. Modeli kaydedin.
  2. Bir giriş betiği hazırlayın.
  3. Çıkarım yapılandırması hazırlama.
  4. Her şeyin çalıştığından emin olmak için modeli yerel olarak dağıtın.
  5. İşlem hedefi seçin.
  6. Modeli buluta dağıtın.
  7. 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 ile modelleri yönetme, dağıtma ve izleme.

Önkoşullar

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

Önemli

Bu makaledeki Azure CLI komutlarından bazıları Azure Machine Learning için uzantısını veya v1'i kullanır azure-cli-ml. v1 uzantısı desteği 30 Eylül 2025'te sona erecektir. Bu tarihe kadar v1 uzantısını yükleyebilecek ve kullanabileceksiniz.

30 Eylül 2025'e kadar , veya v2 uzantısına geçmenizi mlöneririz. v2 uzantısı hakkında daha fazla bilgi için bkz . Azure ML CLI uzantısı ve Python SDK v2.

Çalışma alanınıza bağlanma

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

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 kaydedin

Dağıtılan makine öğrenmesi hizmeti için tipik bir durum, aşağıdaki bileşenlere ihtiyacınız olmasıdır:

  • Dağıtılmasını istediğiniz modeli temsil eden kaynaklar (örneğin: pytorch model dosyası).
  • Belirli bir girişte modeli yürüten hizmette çalıştıracağınız kod.

Azure Machine Learnings, aynı kodu koruyup modeli nadiren güncelleştirmeniz için dağıtım işlemini iki ayrı bileşene bölmenizi sağlar. Bir modeli karşıya yüklediğiniz mekanizmayı, kodunuzdan ayrı halde "model kaydetme" olarak tanımlarız.

Siz modeli kaydettiğinizde biz de bu modeli buluta yükleriz (çalışma alanınızın varsayılan depolama hesabında) ve ardından web hizmetinizin çalıştırıldığı işleme bağlarız.

Aşağıdaki örneklerde bir modelin nasıl kaydedilecekleri gösterilmektedir.

Önemli

Yalnızca kendi oluşturduğunuz veya güvenilir bir kaynaktan aldığınız modelleri kullanmalısınız. Seri hale getirilmiş modelleri kod olarak değerlendirmelisiniz çünkü bir dizi popüler biçimde güvenlik açıkları bulunmuştur. Ayrıca modeller taraflı veya yanlış çıkış sağlamak üzere kasten kötü amaçlı olarak eğitilmiş olabilir.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

Aşağıdaki komutlar bir modeli indirip Azure Machine Learning çalışma alanınıza kaydeder:

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>

Kaydetmek istediğiniz bir klasörün veya dosyanın yoluna ayarlayın -p .

hakkında az ml model registerdaha fazla bilgi için başvuru belgelerine bakın.

Azure Machine Learning eğitim işinden model kaydetme

Daha önce bir Azure Machine Learning eğitim işi aracılığıyla oluşturulmuş bir modeli kaydetmeniz gerekiyorsa, modelin denemesini, çalıştırmasını ve yolunu belirtebilirsiniz:

az ml model register -n bidaf_onnx --asset-path outputs/model.onnx --experiment-name myexperiment --run-id myrunid --tag area=qna

--asset-path parametresi, modelin bulut konumunu ifade eder. Bu örnekte, tek bir dosyanın yolu kullanılır. Model kaydına birden çok dosya eklemek için, dosyaları içeren klasörün yoluna ayarlayın --asset-path .

hakkında az ml model registerdaha fazla bilgi için başvuru belgelerine bakın.

Dekont

Ayrıca çalışma alanı kullanıcı arabirimi portalı aracılığıyla yerel bir dosyadan model kaydedebilirsiniz.

Şu anda kullanıcı arabiriminde yerel model dosyasını karşıya yüklemek için iki seçenek vardır:

  • Bir v2 modelini kaydedecek yerel dosyalardan.
  • Bir v1 modelini kaydedecek yerel dosyalardan (çerçeveye göre) .

SDKv1/CLIv1 kullanılarak yalnızca Kimden yerel dosyaları (çerçeveye göre) girişi (v1 modelleri olarak bilinir) aracılığıyla kaydedilen modellerin web hizmeti olarak dağıtılabildiğini unutmayın.

Sahte 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 istemciye verdiği yanıtı döndürür. Betik modelinize özeldir. Giriş betiği, modelin beklediği ve döndürdüğü verileri anlamalıdır.

Giriş betiğinizde gerçekleştirmeniz gereken iki şey şunlardır:

  1. Modelinizi yükleme (adlı init()bir işlev kullanarak)
  2. Modelinizi giriş verilerinde çalıştırma (adlı run()bir işlev 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ı source_dirdizinin içinde olarak echo_score.py kaydedin. Bu sahte betik, modeli kullanmaması için gönderdiğiniz verileri döndürür. Ancak puanlama betiğinin çalıştığını test etme açısından yararlıdır.

Çıkarım yapılandırması tanımlama

Çıkarım yapılandırması, web hizmetinizi başlatırken kullanılacak Docker kapsayıcısını ve dosyalarını açıklar. Alt dizinler de dahil olmak üzere kaynak dizininizdeki tüm dosyalar, web hizmetinizi dağıttığınızda sıkıştırılmış olarak buluta yüklenir.

Aşağıdaki çıkarım yapılandırması, makine öğrenmesi dağıtımının gelen istekleri işlemek için dizindeki ./source_dir dosyayı echo_score.py kullanacağını ve Docker görüntüsünü ortamda project_environment belirtilen Python paketleriyle kullanacağını belirtir.

Proje ortamınızı oluştururken temel Docker görüntüsü olarak tüm Azure Machine Learning çıkarımı seçilmiş ortamlarını kullanabilirsiniz. Gerekli bağımlılıkları en üste yükleyecek ve sonuçta elde edilen Docker görüntüsünü çalışma alanınızla ilişkili depoda depolayacağız.

Dekont

Azure machine learning çıkarım kaynak dizini karşıya yüklemesi .gitignore veya .amlignore'a saygı göstermez

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

En düşük çıkarım yapılandırması şöyle yazılabilir:

{
    "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.jsonkaydedin.

Çıkarım yapılandırmaları hakkında daha kapsamlı bir tartışma için bu makaleye bakın.

Dağıtım yapılandırması tanımlama

Dağıtım yapılandırması, web hizmetinizin çalışması için ihtiyaç duyduğu bellek ve çekirdek miktarını belirtir. Ayrıca, temel web hizmeti yapılandırma ayrıntılarını sağlar. Örneğin, dağıtım yapılandırması hizmetinizin 2 gigabayt belleğe, 2 CPU çekirdeğine, 1 GPU çekirdeğine ihtiyacı olduğunu ve otomatik ölçeklendirmeyi etkinleştirmek istediğinizi belirtmenize olanak tanır.

Dağıtım yapılandırması için kullanılabilen seçenekler, seçtiğiniz işlem hedeflerine bağlı olarak farklılık gösterir. Yerel dağıtımda, belirtebileceğiniz tek şey web hizmetinizin hangi bağlantı noktasında hizmet verilecek olduğudur.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

Belgedeki deploymentconfig.json girdiler LocalWebservice.deploy_configuration parametreleriyle eşler. Aşağıdaki tabloda, JSON belgesindeki varlıklar ile yöntemi için parametreler arasındaki eşleme açıklanmaktadır:

JSON varlığı Yöntem parametresi Açıklama
computeType NA İşlem hedefi. Yerel hedefler için değeri olmalıdır local.
port port Hizmetin HTTP uç noktasını kullanıma sunan yerel bağlantı noktası.

Bu JSON, CLI ile kullanım için örnek bir dağıtım yapılandırmasıdır:

{
    "computeType": "local",
    "port": 32267
}

Bu JSON dosyasını adlı deploymentconfig.jsonbir dosya olarak kaydedin.

Daha fazla bilgi için bkz . dağıtım şeması.

Makine öğrenmesi modelinizi dağıtma

Artık modelinizi dağıtmaya hazırsınız.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

değerini modelinizin adı ve sürüm numarasıyla değiştirin bidaf_onnx:1 .

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ı

Şimdi yankı modelinizin başarıyla dağıtıldığını kontrol edelim. Hem basit bir canlılık isteği hem de puanlama isteği yapabilmeniz gerekir:

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

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

Şimdi modelinizi yükleme zamanı geldi. İ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 source_dirolarak score.py kaydedin.

Kayıtlı modelinizi bulmak için ortam değişkeninin AZUREML_MODEL_DIR kullanıldığına dikkat edin. Artık bazı pip paketleri eklediğinize göre.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

{
    "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 arayın

Hizmetinizi yeniden dağıtın:

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

değerini modelinizin adı ve sürüm numarasıyla değiştirin bidaf_onnx:1 .

az ml model deploy -n myservice \
    -m bidaf_onnx:1 \
    --overwrite \
    --ic inferenceconfig.json \
    --dc deploymentconfig.json \
    -g <resource-group> \
    -w <workspace-name>

Ardından hizmete bir gönderi isteği gönderebildiğinize emin olun:

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

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çme

Modelinizi barındırmak için kullandığınız işlem hedefi, dağıtılan uç noktanızı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 Açıklama
Yerel web hizmeti Test/hata ayıklama   Sınırlı test ve sorun giderme için kullanın. Donanım hızlandırma, yerel sistemdeki kitaplıkların kullanımına bağlıdır.
Azure Machine Learning Kubernetes Gerçek zamanlı çıkarım Evet Bulutta çıkarım iş yüklerini çalıştırın.
Azure Container Instances Gerçek zamanlı çıkarım

Yalnızca geliştirme/test amacıyla önerilir.
  48 GB'tan az RAM gerektiren düşük ölçekli CPU tabanlı iş yükleri için kullanın. Kümeyi yönetmenizi gerektirmez.

Yalnızca boyutu 1 GB'tan küçük modeller için uygundur.

Tasarımcıda desteklenir.

Dekont

Küme SKU'su seçerken önce ölçeği genişletin ve sonra ölçeği genişletin. Modelinizin gerektirdiği RAM'in %150'sine sahip bir makineyle başlayın, sonucun profilini yapın ve ihtiyacınız olan performansa sahip bir makine bulun. Bunu öğrendikkten sonra, eşzamanlı çıkarım gereksiniminize uyacak şekilde makine sayısını artırın.

Dekont

Azure Machine Learning Uç Noktaları (v2), geliştirilmiş, 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. Azure Machine Learning uç noktaları nelerdir?.

Buluta dağıtma

Hizmetinizin yerel olarak çalıştığını onayladıktan ve uzak işlem hedefi seçtikten sonra buluta dağıtmaya hazır olursunuz.

Dağıtım yapılandırmanızı seçtiğiniz işlem hedefine karşılık gelen şekilde değiştirin, bu örnekte Azure Container Instances:

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

Dağıtım yapılandırması için kullanılabilen seçenekler, seçtiğiniz işlem hedeflerine 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 re-deploymentconfig.jsonkaydedin.

Daha fazla bilgi için bu başvuruya bakın.

Hizmetinizi yeniden dağıtın:

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

değerini modelinizin adı ve sürüm numarasıyla değiştirin bidaf_onnx:1 .

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 hizmetinizi çağırma

Uzaktan dağıttığınızda anahtar kimlik doğrulaması etkinleştirilmiş olabilir. Aşağıdaki örnekte, çıkarım isteğinde bulunmak için Python ile hizmet anahtarınızın nasıl alıneceği gösterilmektedir.

import requests
import json
from azureml.core import Webservice

service = Webservice(workspace=ws, name="myservice")
scoring_uri = service.scoring_uri

# If the service is authenticated, set the key or token
key, _ = service.get_keys()

# Set the appropriate headers
headers = {"Content-Type": "application/json"}
headers["Authorization"] = f"Bearer {key}"

# Make the request and display the response and logs
data = {
    "query": "What color is the fox",
    "context": "The quick brown fox jumped over the lazy dog.",
}
data = json.dumps(data)
resp = requests.post(scoring_uri, data=data, headers=headers)
print(resp.text)
print(service.get_logs())

Diğer dillerde daha fazla örnek istemci için web hizmetlerini kullanmak için istemci uygulamaları makalesine bakın.

Stüdyoda e-postaları yapılandırma

İşiniz, çevrimiçi uç noktanız veya toplu iş uç noktanız tamamlandığında veya bir sorun olduğunda (başarısız, iptal edildi) e-posta almaya başlamak için aşağıdaki adımları kullanın:

  1. Azure ML Studio'da dişli simgesini seçerek ayarlara gidin.
  2. E-posta bildirimleri sekmesini seçin.
  3. Belirli bir olay için e-posta bildirimlerini etkinleştirmek veya devre dışı bırakmak için geçiş yapar.

Screenshot of Azure ML studio's settings on the email notifications tab.

Hizmet durumunu anlama

Model dağıtımı sırasında, tam olarak dağıtılırken hizmet durumu değişikliğini görebilirsiniz.

Aşağıdaki tabloda farklı hizmet durumları açıklanmaktadır:

Web hizmeti durumu Açıklama Son durum mu?
Geçiş Hizmet dağıtım sürecindedir. No
Uygun Değil Hizmet dağıtıldı ancak şu anda ulaşılamıyor. No
Zamanlanamayan Kaynak yetersizliği nedeniyle hizmet şu anda dağıtılamıyor. No
Başarısız oldu Hizmet bir hata veya kilitlenme nedeniyle dağıtılamadı. Evet
Sağlam Hizmet iyi durumda ve uç nokta kullanılabilir. Evet

Bahşiş

Dağıtım sırasında işlem hedefleri için Docker görüntüleri oluşturulur ve Azure Container Registry'den (ACR) yüklenir. Azure Machine Learning varsayılan olarak temel hizmet katmanını kullanan bir ACR oluşturur. Çalışma alanınızın ACR'sini standart veya premium katman olarak değiştirmek, görüntü oluşturma ve işlem hedeflerinize dağıtma süresini kısaltabilir. Daha fazla bilgi için bkz. Azure Container Registry hizmet katmanları.

Dekont

Azure Kubernetes Service'e (AKS) model dağıtıyorsanız, bu küme için Azure İzleyici'yi etkinleştirmenizi öneririz. Bu genel olarak kümenin durumunu ve kaynak kullanımını anlamanıza yardımcı olur. Ayrıca aşağıdaki kaynakları da yararlı bulabilirsiniz:

İyi durumda olmayan veya aşırı yüklenmiş olan bir kümeye model dağıtmaya çalışıyorsanız sorunlarla karşılaşmanız beklenir. AKS kümesi sorunlarını giderme konusunda yardıma ihtiyacınız varsa aks desteğine başvurun.

Kaynakları silme

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

# Get the current model id
import os

stream = os.popen(
    'az ml model list --model-name=bidaf_onnx --latest --query "[0].id" -o tsv'
)
MODEL_ID = stream.read()[0:-1]
MODEL_ID
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>.

Kayıtlı modeli çalışma alanınızdan silmek için az ml model delete <model id>

Web hizmetini silme ve modeli silme hakkında daha fazla bilgi edinin.

Sonraki adımlar