Çevrimiçi uç nokta kullanarak makine öğrenmesi modelini dağıtma ve puanlandırma

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)Python SDK azure-ai-ml v2 (geçerli)

Bu makalede, modelinizi gerçek zamanlı çıkarımda kullanmak üzere çevrimiçi bir uç noktaya dağıtmayı öğreneceksiniz. İlk olarak hata ayıklamak için yerel makinenizde bir model dağıtacaksınız. Ardından modeli Azure'da dağıtıp test edin. Ayrıca dağıtım günlüklerini görüntülemeyi ve hizmet düzeyi sözleşmesini (SLA) izlemeyi öğreneceksiniz. Bu makalenin sonunda, gerçek zamanlı çıkarım için kullanabileceğiniz ölçeklenebilir bir HTTPS/REST uç noktanız olacak.

Çevrimiçi uç noktalar, gerçek zamanlı çıkarım için kullanılan uç noktalardır. İki tür çevrimiçi uç nokta vardır: yönetilen çevrimiçi uç noktalar ve Kubernetes çevrimiçi uç noktaları. Uç noktalar ve yönetilen çevrimiçi uç noktalar ile Kubernetes çevrimiçi uç noktaları arasındaki farklar hakkında daha fazla bilgi için bkz . Azure Machine Learning uç noktaları nedir?.

Yönetilen çevrimiçi uç noktalar ML modellerinizi anahtar teslimi şeklinde dağıtmanıza yardımcı olur. Yönetilen çevrimiçi uç noktalar Azure'da ölçeklenebilir ve tam olarak yönetilen bir şekilde güçlü CPU ve GPU makineleriyle çalışır. Yönetilen çevrimiçi uç noktalar modellerinizin sunulması, ölçeklendirilmesi, güvenlik altına alınması ve izlenmesiyle ilgilenerek, sizi temel altyapıyı ayarlama ve yönetme yükünden kurtarır.

Bu belgedeki ana örnek, dağıtım için yönetilen çevrimiçi uç noktaları kullanır. Bunun yerine Kubernetes'i kullanmak için, bu belgedeki yönetilen çevrimiçi uç nokta tartışmasıyla satır içi notlara bakın.

Önkoşullar

ŞUNUN IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

Bu makaledeki adımları takip etmeden önce aşağıdaki önkoşullara sahip olduğunuzdan emin olun:

  • Azure Machine Learning’deki işlemlere erişim vermek için Azure rol tabanlı erişim denetimleri (Azure RBAC) kullanılır. Bu makaledeki adımları gerçekleştirmek için kullanıcı hesabınıza Azure Machine Learning çalışma alanı için sahip veya katkıda bulunan rolü ya da izin veren Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*özel bir rol atanmalıdır. Çevrimiçi uç noktaları/dağıtımları oluşturmak/yönetmek için studio kullanıyorsanız, kaynak grubu sahibinden ek bir "Microsoft.Resources/deployments/write" iznine sahip olmanız gerekir. Daha fazla bilgi için bkz . Azure Machine Learning çalışma alanına erişimi yönetme.

  • (İsteğe bağlı) Yerel olarak dağıtmak için Docker Engine'i yerel bilgisayarınıza yüklemeniz gerekir. Sorunlarda hata ayıklamak daha kolay olması için bu seçeneği kesinlikle öneririz .

Dağıtım için sanal makine kotası ayırma

Yönetilen çevrimiçi uç noktalar için Azure Machine Learning, bazı VM SKU'larında yükseltme gerçekleştirmek için işlem kaynaklarınızın %20'sini ayırır. Bir dağıtımda bu VM SKU'ları için belirli sayıda örnek istiyorsanız, hata almamak için ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU kullanılabilir bir kotanız olmalıdır. Örneğin, bir dağıtımda bir Standard_DS3_v2 VM'sinin 10 örneğini (4 çekirdekle birlikte gelir) isterseniz, 48 çekirdek (12 instances * 4 cores) için kotanız olmalıdır. Bu ek kota işletim sistemi yükseltmesi, VM kurtarma vb. gibi sistem tarafından başlatılmış işlemler için ayrılmıştır ve bu tür işlemler çalıştırılmadığı sürece maliyet yansıtılmaz. Kullanım ve istek kotası artışlarınızı görüntülemek için bkz . Azure portalında kullanımınızı ve kotalarınızı görüntüleme. Yönetilen çevrimiçi uç noktaları çalıştırma maliyetlerinizi görüntülemek için bkz . Yönetilen çevrimiçi uç noktanın maliyetini görüntüleme. Ek kota rezervasyonundan muaf tutulan belirli VM SKU'ları vardır. Listenin tamamını görüntülemek için bkz . Yönetilen çevrimiçi uç noktalar SKU listesi.

Azure Machine Learning, tüm kullanıcıların sınırlı bir süre için test gerçekleştirmek için kotaya erişebileceği paylaşılan bir kota havuzu sağlar. Model kataloğundan Lama-2, Phi, Nemotron, Mistral, Dolly ve Deci-DeciLM modellerini yönetilen bir çevrimiçi uç noktaya dağıtmak için stüdyoyu kullandığınızda, Azure Machine Learning bu paylaşılan kotaya kısa bir süre için erişmenizi sağlar.

Çevrimiçi uç nokta dağıtımı için paylaşılan kotayı kullanma hakkında daha fazla bilgi için bkz . Studio kullanarak temel modelleri dağıtma.

Sisteminizi hazırlama

Ortam değişkenlerini belirleme

Azure CLI için varsayılan ayarları henüz ayarlamadıysanız varsayılan ayarlarınızı kaydedin. Aboneliğinizin, çalışma alanınızın ve kaynak grubunuzun değerlerinin birden çok kez geçirilmesini önlemek için şu kodu çalıştırın:

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

Örnek deposunu kopyalama

Bu makaleyi takip etmek için önce örnek deposunu (azureml-examples) kopyalayın. Ardından aşağıdaki kodu çalıştırarak deponun cli/ dizinine gidin:

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli

İpucu

Yalnızca en son işlemeyi depoya kopyalamak için kullanın --depth 1 ; bu işlem tamamlanma süresini kısaltılır.

Bu öğreticideki komutlar dosyalarda deploy-local-endpoint.sh ve deploy-managed-online-endpoint.sh dizinde cli , YAML yapılandırma dosyaları ise alt dizinde endpoints/online/managed/sample/ yer alır.

Not

Kubernetes çevrimiçi uç noktaları için YAML yapılandırma dosyaları alt dizindedir endpoints/online/kubernetes/ .

Uç noktayı tanımlama

Uç nokta tanımlamak için şunları belirtmeniz gerekir:

  • Uç nokta adı: Uç noktanın adı. Azure bölgesinde benzersiz olmalıdır. Adlandırma kuralları hakkında daha fazla bilgi için bkz . uç nokta sınırları.
  • Kimlik doğrulama modu: Uç nokta için kimlik doğrulama yöntemi. Anahtar tabanlı kimlik doğrulaması ile Azure Machine Learning belirteç tabanlı kimlik doğrulaması arasında seçim yapın. Anahtarın süresi dolmaz, ancak belirtecin süresi dolmaz. Kimlik doğrulaması hakkında daha fazla bilgi için bkz . Çevrimiçi uç noktada kimlik doğrulaması yapma.
  • İsteğe bağlı olarak, uç noktanıza bir açıklama ve etiketler ekleyebilirsiniz.

Uç nokta adı ayarlama

Uç nokta adınızı ayarlamak için aşağıdaki komutu çalıştırın (değerini benzersiz bir adla değiştirin YOUR_ENDPOINT_NAME ).

Linux için şu komutu çalıştırın:

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

Uç noktayı yapılandırma

Aşağıdaki kod parçacığı uç noktaları/çevrimiçi/yönetilen/örnek/endpoint.yml dosyasını gösterir:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key

Uç nokta YAML biçimi başvurusu aşağıdaki tabloda açıklanmıştır. Bu özniteliklerin nasıl belirtileceğini öğrenmek için çevrimiçi uç nokta YAML başvurusuna bakın. Yönetilen uç noktalarla ilgili sınırlar hakkında bilgi için bkz . Çevrimiçi uç noktaların sınırları.

Tuş Açıklama
$schema (İsteğe bağlı) YAML şeması. YAML dosyasındaki tüm kullanılabilir seçenekleri görmek için, şemayı bir tarayıcıdaki önceki kod parçacığında görüntüleyebilirsiniz.
name Uç noktanın adı.
auth_mode Anahtar tabanlı kimlik doğrulaması için kullanın key . Azure Machine Learning belirteç tabanlı kimlik doğrulaması için kullanın aml_token . En son belirteci almak için komutunu kullanın az ml online-endpoint get-credentials .

Dağıtımı tanımlama

Dağıtım, gerçek çıkarım yapan modeli barındırmak için gereken bir kaynak kümesidir. Bir modeli dağıtmak için sahip olmanız gerekenler:

  • Model dosyaları (veya çalışma alanınızda zaten kayıtlı olan bir modelin adı ve sürümü). Örnekte regresyona neden olan bir scikit-learn modelimiz vardır.
  • Puanlama betiği, yani belirli bir giriş isteğinde modeli yürüten kod. Puanlama betiği dağıtılan bir web hizmetine gönderilen verileri alır ve modele geçirir. Betik daha sonra modeli yürütür ve istemciye yanıtını döndürür. Puanlama betiği modelinize özgüdür ve modelin giriş olarak beklediği ve çıkış olarak döndürdüğü verileri anlaması gerekir. Bu örnekte score.py bir dosyamız vardır.
  • Modelinizin çalıştığı bir ortam. Ortam, Conda bağımlılıklarına sahip bir Docker görüntüsü veya Dockerfile olabilir.
  • Örnek türünü ve ölçeklendirme kapasitesini belirtmek için Ayarlar.

Aşağıdaki tabloda bir dağıtımın temel öznitelikleri açıklanmaktadır:

Öznitelik Tanım
Ad Dağıtımın adı.
Uç nokta adı Altında dağıtımın oluşturulacağı uç noktanın adı.
Model Dağıtım için kullanılacak model. Bu değer, çalışma alanında var olan bir sürüme sahip modelin başvurusu veya satır içi model belirtimi olabilir.
Kod yolu Modeli puanlama için tüm Python kaynak kodunu içeren yerel geliştirme ortamında dizinin yolu. İç içe dizinleri ve paketleri kullanabilirsiniz.
Puanlama betiği Kaynak kod dizinindeki puanlama dosyasının göreli yolu. Bu Python kodunun bir init() işlevi ve bir run() işlevi olmalıdır. İşlev, init() model oluşturulduktan veya güncelleştirildikten sonra çağrılır (örneğin, modeli bellekte önbelleğe almak için kullanabilirsiniz). İşlev run() , gerçek puanlama ve tahmin gerçekleştirmek için uç noktanın her çağrısında çağrılır.
Ortam Modeli ve kodu barındıracak ortam. Bu değer, çalışma alanında var olan bir sürüme sahip ortama başvuru veya satır içi ortam belirtimi olabilir.
Örnek türü Dağıtım için kullanılacak VM boyutu. Desteklenen boyutların listesi için bkz . Yönetilen çevrimiçi uç noktalar SKU listesi.
Örnek sayısı Dağıtım için kullanılacak örnek sayısı. Değeri beklediğiniz iş yüküne dayandırın. Yüksek kullanılabilirlik için değerini en az 3olarak ayarlamanızı öneririz. Yükseltmeleri gerçekleştirmek için fazladan %20 ayırıyoruz. Daha fazla bilgi için bkz . Dağıtımlar için sanal makine kota ayırma.

Uyarı

  • Model ve kapsayıcı görüntüsüne (Ortam'da tanımlandığı gibi) herhangi bir zamanda, dağıtımın arkasındaki örnekler güvenlik düzeltme ekleri ve/veya diğer kurtarma işlemlerinden geçtiğinde dağıtım tarafından yeniden başvurulabilir. Azure Container Registry'de dağıtım için kayıtlı bir model veya kapsayıcı görüntüsü kullandıysanız ve modeli veya kapsayıcı görüntüsünü kaldırdıysanız, yeniden boyutlandırma gerçekleştiğinde bu varlıklara dayanan dağıtımlar başarısız olabilir. Modeli veya kapsayıcı görüntüsünü kaldırdıysanız, bağımlı dağıtımların yeniden oluşturulduğundan veya alternatif model veya kapsayıcı görüntüsüyle güncelleştirildiğinden emin olun.
  • Ortamın başvurduğu kapsayıcı kayıt defteri yalnızca uç nokta kimliğinin Microsoft Entra kimlik doğrulaması ve Azure RBAC aracılığıyla erişim iznine sahip olması durumunda özel olabilir. Aynı nedenle, Azure Container Registry dışındaki özel Docker kayıt defterleri desteklenmez.

Dağıtımı yapılandırma

Aşağıdaki kod parçacığı uç noktaları/çevrimiçi/yönetilen/örnek/blue-deployment.yml dosyasını gösterir ve dağıtımı yapılandırmak için gerekli tüm girişleri içerir:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
  path: ../../model-1/model/
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score.py
environment: 
  conda_file: ../../model-1/environment/conda.yaml
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1

Not

blue-deployment.yml dosyasında aşağıdaki dağıtım özniteliklerini belirttik:

  • model - Bu örnekte, kullanarak model özelliklerini satır pathiçinde belirtiriz. Model dosyaları otomatik olarak karşıya yüklenir ve otomatik olarak oluşturulan bir adla kaydedilir.
  • environment - Bu örnekte, öğesini içeren pathsatır içi tanımlarımız vardır. Görüntü için kullanacağız environment.docker.image . conda_file Bağımlılıklar görüntünün üzerine yüklenir.

Dağıtım sırasında puanlama modeli için Python kaynağı gibi yerel dosyalar geliştirme ortamından karşıya yüklenir.

YAML şeması hakkında daha fazla bilgi için çevrimiçi uç nokta YAML başvurusuna bakın.

Not

İşlem hedefi olarak yönetilen uç noktalar yerine Kubernetes kullanmak için:

  1. Azure Machine Learning stüdyosu kullanarak Kubernetes kümenizi oluşturun ve Azure Machine Learning çalışma alanınıza işlem hedefi olarak ekleyin.
  2. Yönetilen uç nokta YAML yerine Kubernetes'i hedeflemek için uç nokta YAML'sini kullanın. değerini target kayıtlı işlem hedefinizin adıyla değiştirmek için YAML'yi düzenlemeniz gerekir. Kubernetes dağıtımı için geçerli ek özelliklere sahip olan bu deployment.yaml dosyasını kullanabilirsiniz.

Bu makalede kullanılan tüm komutlar (isteğe bağlı SLA izleme ve Azure Log Analytics tümleştirmesi hariç) yönetilen uç noktalarla veya Kubernetes uç noktalarıyla kullanılabilir.

Modelinizi ve ortamınızı ayrı olarak kaydetme

Bu örnekte, satır içi (dosyaların karşıya yüklendiği yer) belirteceğiz path . CLI dosyaları otomatik olarak karşıya yükler ve modeli ve ortamı kaydeder. Üretim için en iyi yöntem olarak, modeli ve ortamı kaydetmeli ve kayıtlı adı ve sürümü YAML'de ayrı olarak belirtmelisiniz. veya environment: azureml:my-env:1formunu model: azureml:my-model:1 kullanın.

Kayıt için ve'nin modelenvironment YAML tanımlarını ayrı YAML dosyalarına ayıklayabilir ve ve az ml environment createkomutlarını az ml model create kullanabilirsiniz. Bu komutlar hakkında daha fazla bilgi edinmek için ve az ml environment create -hkomutunu çalıştırınaz ml model create -h.

Modelinizi varlık olarak kaydetme hakkında daha fazla bilgi için bkz . CLI kullanarak modelinizi Machine Learning'de varlık olarak kaydetme. Ortam oluşturma hakkında daha fazla bilgi için bkz . CLI ve SDK (v2) ile Azure Machine Learning ortamlarını yönetme.

Farklı CPU ve GPU örneği türleri ve görüntüleri kullanma

blue-deployment.yml dosyasındaki önceki tanım, genel amaçlı bir tür Standard_DS3_v2 örneği ve GPU olmayan bir Docker görüntüsü mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest kullanır. GPU işlemi için bir GPU işlem türü SKU'su ve bir GPU Docker görüntüsü seçin.

Desteklenen genel amaçlı ve GPU örneği türleri için bkz . Yönetilen çevrimiçi uç noktalar tarafından desteklenen VM SKU'ları. Azure Machine Learning CPU ve GPU temel görüntülerinin listesi için bkz . Azure Machine Learning temel görüntüleri.

Not

İşlem hedefi olarak yönetilen uç noktalar yerine Kubernetes'i kullanmak için bkz . Kubernetes işlem hedefine giriş.

Model yolunu şu şekilde tanımlayın: AZUREML_MODEL_DIR

Modelinizi Azure Machine Learning'e dağıtırken, dağıtım yapılandırmanızın bir parçası olarak dağıtmak istediğiniz modelin konumunu belirtmeniz gerekir. Azure Machine Learning'de, modelinizin yolu ortam değişkeniyle AZUREML_MODEL_DIR izlenir. model yolunu ile ilgili AZUREML_MODEL_DIRolarak tanımlayarak makinenizde yerel olarak depolanan bir veya daha fazla modeli dağıtabilir veya Azure Machine Learning çalışma alanınızda kayıtlı bir model dağıtabilirsiniz.

Çizim için, tek bir model dağıttığınız veya yerel olarak depolanan birden çok modeli dağıttığınız ilk iki durum için aşağıdaki yerel klasör yapısına başvuruyoruz:

Birden çok model içeren klasör yapısını gösteren ekran görüntüsü.

Dağıtımda tek bir yerel model kullanma

Yerel makinenizde bulunan tek bir modeli bir dağıtımda kullanmak için, dağıtım YAML'nizde öğesini model belirtinpath. Aşağıda yolu /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pklile dağıtım YAML örneği verilmişti:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: 
  path: /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

Dağıtımınızı oluşturduktan sonra ortam değişkeni AZUREML_MODEL_DIR , Azure'da modelinizin depolandığı depolama konumunu gösterir. Örneğin, /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 modelini sample_m1.pkliçerir.

Puanlama betiğinizin ()score.py içinde, modelinizi (bu örnekte, sample_m1.pkl) işlevine init() yükleyebilirsiniz:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl") 
    model = joblib.load(model_path) 

Dağıtımda birden çok yerel model kullanma

Azure CLI, Python SDK'sı ve diğer istemci araçları, dağıtım tanımında dağıtım başına yalnızca bir model belirtmenize izin verse de, tüm modelleri dosya veya alt dizin olarak içeren bir model klasörünü kaydederek bir dağıtımda birden çok modeli kullanmaya devam edebilirsiniz.

Önceki örnek klasör yapısında, klasörde birden çok model models olduğunu fark edeceksiniz. Dağıtım YAML'nizde klasörün yolunu models aşağıdaki gibi belirtebilirsiniz:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: 
  path: /Downloads/multi-models-sample/models/ 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

Dağıtımınızı oluşturduktan sonra ortam değişkeni AZUREML_MODEL_DIR , Azure'da modellerinizin depolandığı depolama konumuna işaret eder. Örneğin, /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 modelleri ve dosya yapısını içerir.

Bu örnekte, klasörün içeriği AZUREML_MODEL_DIR şöyle görünür:

Birden çok model için depolama konumunun klasör yapısının ekran görüntüsü.

Puanlama betiğinizin ()score.py içinde, modellerinizi işleve init() yükleyebilirsiniz. Aşağıdaki kod modeli yükler sample_m1.pkl :

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "models","model_1","v1", "sample_m1.pkl ") 
    model = joblib.load(model_path) 

Bir dağıtıma birden çok modelin nasıl dağıtılacağına ilişkin bir örnek için bkz . Bir dağıtıma birden çok model dağıtma (CLI örneği) ve Bir dağıtıma birden çok model dağıtma (SDK örneği).

İpucu

Kaydedilecek 1500'den fazla dosyanız varsa, modelleri kaydederken dosyaları veya alt dizinleri .tar.gz olarak sıkıştırmayı göz önünde bulundurun. Modelleri kullanmak için, puanlama betiğinden işlevdeki init() dosyaların veya alt dizinlerin sıkıştırmasını kaldırabilirsiniz. Alternatif olarak, modelleri kaydettiğinizde, dosyaları veya alt dizinleri otomatik olarak açmak için özelliğini Trueolarak ayarlayınazureml.unpack. Her iki durumda da sıkıştırmayı kaldırma işlemi başlatma aşamasında bir kez gerçekleşir.

Azure Machine Learning çalışma alanınızda kayıtlı modelleri bir dağıtımda kullanma

Azure Machine Learning çalışma alanınızda kayıtlı olan bir veya daha fazla modeli dağıtımınızda kullanmak için, dağıtım YAML'nizdeki kayıtlı modellerin adını belirtin. Örneğin, aşağıdaki dağıtım YAML yapılandırması kayıtlı model adı olarak azureml:local-multimodel:3belirtir:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: azureml:local-multimodel:3 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

Bu örnekte, Azure Machine Learning stüdyosu Modeller sekmesinden görüntülenebilen aşağıdaki model yapıtlarını içerdiğini düşününlocal-multimodel:3:

Kayıtlı modelin model yapıtlarını gösteren klasör yapısının ekran görüntüsü.

Dağıtımınızı oluşturduktan sonra ortam değişkeni AZUREML_MODEL_DIR , Azure'da modellerinizin depolandığı depolama konumuna işaret eder. Örneğin, /var/azureml-app/azureml-models/local-multimodel/3 modelleri ve dosya yapısını içerir. AZUREML_MODEL_DIR , model yapıtlarının kökünü içeren klasöre işaret eder. Bu örneğe bağlı olarak, klasörün içeriği AZUREML_MODEL_DIR şöyle görünür:

Birden çok modeli gösteren klasör yapısının ekran görüntüsü.

Puanlama betiğinizin ()score.py içinde, modellerinizi işleve init() yükleyebilirsiniz. Örneğin, modeli yükleyin diabetes.sav :

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav") 
    model = joblib.load(model_path) 

Puanlama betiğini anlama

İpucu

Çevrimiçi uç noktalar için puanlama betiğinin biçimi, CLI'nın önceki sürümünde ve Python SDK'sında kullanılan biçimle aynıdır.

Daha önce belirtildiği gibi, içinde code_configuration.scoring_script belirtilen puanlama betiğinin bir init() işlevi ve bir run() işlevi olmalıdır.

Bu örnekte score.py dosyası kullanılır: score.py

import os
import logging
import json
import numpy
import joblib


def init():
    """
    This function is called when the container is initialized/started, typically after create/update of the deployment.
    You can write the logic here to perform init operations like caching the model in memory
    """
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # Please provide your model's folder name if there is one
    model_path = os.path.join(
        os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
    )
    # deserialize the model file back into a sklearn model
    model = joblib.load(model_path)
    logging.info("Init complete")


def run(raw_data):
    """
    This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
    In the example we extract the data from the json input and call the scikit-learn model's predict()
    method and return the result back
    """
    logging.info("model 1: request received")
    data = json.loads(raw_data)["data"]
    data = numpy.array(data)
    result = model.predict(data)
    logging.info("Request processed")
    return result.tolist()

kapsayıcı init() başlatıldığında veya başlatıldığında işlev çağrılır. Başlatma genellikle dağıtım oluşturulduktan veya güncelleştirildikten kısa bir süre sonra gerçekleşir. init işlevi, modeli bellekte önbelleğe alma gibi genel başlatma işlemleri için mantık yazacak yerdir (bu örnekte yaptığımız gibi).

run() İşlev, uç noktanın her çağrısı için çağrılır ve gerçek puanlama ile tahmini yapar. Bu örnekte bir JSON girişinden veri ayıklayacağız, scikit-learn modelinin predict() yöntemini çağıracak ve ardından sonucu döndüreceğiz.

Yerel uç noktaları kullanarak yerel olarak dağıtma ve hata ayıklama

Azure'a dağıtmadan önce kodunuzu ve yapılandırmanızı doğrulayıp hata ayıklayarak uç noktanızı yerel olarak test edip çalıştırmanızı kesinlikle öneririz . Azure CLI ve Python SDK'sı yerel uç noktaları ve dağıtımları desteklerken Azure Machine Learning stüdyosu ve ARM şablonu desteklemez.

Yerel olarak dağıtmak için Docker Altyapısı'nın yüklü ve çalışır durumda olması gerekir. Docker Altyapısı genellikle bilgisayar başlatıldığında başlar. Aksi takdirde Docker Altyapısı sorunlarını giderebilirsiniz.

İpucu

Puanlama betiğinizde Docker Altyapısı olmadan yerel olarak hata ayıklamak için Azure Machine Learning çıkarım HTTP sunucusu Python paketini kullanabilirsiniz. Çıkarım sunucusuyla hata ayıklama, yerel uç noktalara dağıtmadan önce puanlama betiğinin hatalarını ayıklamanıza yardımcı olur, böylece dağıtım kapsayıcısı yapılandırmalarından etkilenmeden hata ayıklayabilirsiniz.

Not

Yerel uç noktaların sınırlamaları şunlardır:

  • Trafik kurallarını, kimlik doğrulamasını veya yoklama ayarlarını desteklemez.
  • Uç nokta başına yalnızca bir dağıtımı destekler.
  • Yalnızca yerel conda dosyasıyla yerel model dosyalarını ve ortamını destekler. Kayıtlı modelleri test etmek istiyorsanız, önce CLI veya SDK kullanarak bunları indirin, sonra üst klasöre başvurmak için dağıtım tanımında kullanınpath. Kayıtlı ortamları test etmek istiyorsanız, Azure Machine Learning stüdyosu ortamın bağlamını denetleyin ve kullanılacak yerel conda dosyasını hazırlayın. Bu makaledeki örnek, yerel dağıtımı destekleyen yerel conda dosyasıyla yerel modeli ve ortamı kullanmayı gösterir.

Azure'a dağıtmadan önce çevrimiçi uç noktalarda yerel olarak hata ayıklama hakkında daha fazla bilgi için bkz . Visual Studio Code'da çevrimiçi uç noktalarda yerel olarak hata ayıklama.

Modeli yerel olarak dağıtma

İlk olarak bir uç nokta oluşturun. İsteğe bağlı olarak, yerel bir uç nokta için bu adımı atlayabilir ve doğrudan gerekli meta verileri oluşturacak dağıtımı (sonraki adım) oluşturabilirsiniz. Modelleri yerel olarak dağıtmak, geliştirme ve test amacıyla kullanışlıdır.

az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

Şimdi uç noktanın altında adlı blue bir dağıtım oluşturun.

az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml

bayrağı CLI'yi --local Docker ortamında uç noktayı dağıtmaya yönlendirir.

İpucu

Uç noktalarınızı yerel olarak test etmek ve hatalarını ayıklamak için Visual Studio Code kullanın. Daha fazla bilgi için bkz . Visual Studio Code'da çevrimiçi uç noktalarda yerel olarak hata ayıklama.

Yerel dağıtımın başarılı olduğunu doğrulama

Modelin hatasız dağıtılıp dağıtılmadığını görmek için durumu denetleyin:

az ml online-endpoint show -n $ENDPOINT_NAME --local

Çıktı aşağıdaki JSON'a benzer şekilde görünmelidir. provisioning_state şeklindedirSucceeded.

{
  "auth_mode": "key",
  "location": "local",
  "name": "docs-endpoint",
  "properties": {},
  "provisioning_state": "Succeeded",
  "scoring_uri": "http://localhost:49158/score",
  "tags": {},
  "traffic": {}
}

Aşağıdaki tabloda için provisioning_stateolası değerler yer alır:

Durum Açıklama
Oluşturma Kaynak oluşturuluyor.
Güncelleştirme Kaynak güncelleştiriliyor.
Silme Kaynak siliniyor.
Başarılı Oluşturma/güncelleştirme işlemi başarılı oldu.
Başarısız oldu Oluşturma/güncelleştirme/silme işlemi başarısız oldu.

Modelinizi kullanarak verileri puan eklemek için yerel uç noktayı çağırma

Convenience komutunu invoke kullanarak ve bir JSON dosyasında depolanan sorgu parametrelerini geçirerek modeli puanlamak için uç noktayı çağırın:

az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

REST istemcisi (curl gibi) kullanmak istiyorsanız puanlama URI'sine sahip olmanız gerekir. Puanlama URI'sini almak için komutunu çalıştırın az ml online-endpoint show --local -n $ENDPOINT_NAME. Döndürülen verilerde özniteliğini scoring_uri bulun. Örnek curl tabanlı komutlar bu belgenin ilerleyen bölümlerinde kullanılabilir.

Çağırma işleminden çıktı için günlükleri gözden geçirin

Örnek score.py dosyasında, run() yöntemi bazı çıkışları konsola günlüğe kaydeder.

Komutunu kullanarak get-logs bu çıkışı görüntüleyebilirsiniz:

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

Çevrimiçi uç noktanızı Azure'a dağıtma

Ardından çevrimiçi uç noktanızı Azure'a dağıtın.

Azure’a dağıtın

Uç noktayı bulutta oluşturmak için aşağıdaki kodu çalıştırın:

az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

Uç noktanın altında adlı blue dağıtımı oluşturmak için aşağıdaki kodu çalıştırın:

az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic

Bu dağıtım, temel alınan ortamın veya görüntünün ilk kez derlenip derlenmediğine bağlı olarak 15 dakika kadar sürebilir. Aynı ortamı kullanan sonraki dağıtımlar işlemeyi daha hızlı tamamlar.

İpucu

  • CLI konsolunuzu engellememek isterseniz komutuna bayrağını --no-wait ekleyebilirsiniz. Ancak bu, dağıtım durumunun etkileşimli görünümünü durdurur.

Önemli

Yukarıdaki az ml online-deployment create bayrak, --all-traffic uç nokta trafiğinin %100'unu yeni oluşturulan mavi dağıtıma ayırır. Bu, geliştirme ve test amacıyla yararlı olsa da, üretim için yeni dağıtıma yönelik trafiği açık bir komutla açmak isteyebilirsiniz. Örneğin, az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".

İpucu

Uç noktanın durumunu denetleme

komutu uç show nokta ve dağıtım bilgilerini provisioning_state içerir:

az ml online-endpoint show -n $ENDPOINT_NAME

Komutunu kullanarak list çalışma alanında bulunan tüm uç noktaları tablo biçiminde listeleyebilirsiniz:

az ml online-endpoint list --output table

Çevrimiçi dağıtımın durumunu denetleme

Modelin hatasız dağıtılıp dağıtılmadığını görmek için günlükleri denetleyin.

Kapsayıcıdan günlük çıktısını görmek için aşağıdaki CLI komutunu kullanın:

az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME

Varsayılan olarak, günlükler çıkarım sunucusu kapsayıcısından çekilir. Depolama başlatıcı kapsayıcısından günlükleri görmek için bayrağını --container storage-initializer ekleyin. Dağıtım günlükleri hakkında daha fazla bilgi için bkz . Kapsayıcı günlüklerini alma.

Modelinizi kullanarak verileri puan eklemek için uç noktayı çağırma

Uç noktayı çağırmak invoke ve bazı verileri puanlarken istediğiniz komutu veya REST istemcisini kullanabilirsiniz:

az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

Aşağıdaki örnekte, uç noktada kimlik doğrulaması yapmak için kullanılan anahtarın nasıl alınacakları gösterilmektedir:

İpucu

Kimlik doğrulama anahtarını ve izin veren Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/actionMicrosoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/actionözel bir role atayarak hangi Microsoft Entra güvenlik sorumlularının kimlik doğrulama anahtarını alabileceğini denetleyebilirsiniz. Daha fazla bilgi için bkz . Azure Machine Learning çalışma alanına erişimi yönetme.

ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)

Ardından, verileri puanlamak için curl kullanın.

SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)

curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json

Kimlik doğrulama kimlik bilgilerini almak için ve get-credentials komutlarını kullandığımıza show dikkat edin. Ayrıca öznitelikleri yalnızca ihtiyacımız olan özelliklere göre filtrelemek için bayrağını --query kullandığımıza da dikkat edin. hakkında --querydaha fazla bilgi edinmek için bkz . Azure CLI komut çıktısını sorgulama.

Çağırma günlüklerini görmek için yeniden çalıştırın get-logs .

Belirteç kullanarak kimlik doğrulaması yapma hakkında bilgi için bkz . Çevrimiçi uç noktalarda kimlik doğrulaması yapma.

(İsteğe bağlı) Dağıtımı güncelleştirme

Kodu, modeli veya ortamı güncelleştirmek istiyorsanız YAML dosyasını güncelleştirin ve komutunu çalıştırın az ml online-endpoint update .

Not

Örnek sayısını (dağıtımınızı ölçeklendirmek için) diğer model ayarlarıyla (kod, model veya ortam gibi) tek update bir komutta güncelleştirirseniz, önce ölçeklendirme işlemi gerçekleştirilir, ardından diğer güncelleştirmeler uygulanır. Bu işlemleri üretim ortamında ayrı ayrı gerçekleştirmek iyi bir uygulamadır.

Nasıl update çalıştığını anlamak için:

  1. Dosyayı çevrimiçi/model-1/onlinescoring/score.py açın.

  2. İşlevin son satırını init() değiştirin: sonra logging.info("Init complete")ekleyin logging.info("Updated successfully").

  3. Dosyayı kaydedin.

  4. Şu komutu çalıştırın:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
    

    Not

    YAML kullanılarak güncelleştirilmesi bildirim temellidir. Yani YAML'deki değişiklikler temel alınan Azure Resource Manager kaynaklarına (uç noktalar ve dağıtımlar) yansıtılır. Bildirim temelli bir yaklaşım GitOps'yi kolaylaştırır: Uç noktalarda ve dağıtımlarda yapılan tüm değişiklikler (hatta instance_count) YAML üzerinden gider.

    İpucu

    • YAML'nizdeki öznitelikleri geçersiz kılmak veya YAML dosyasında geçirmeden belirli öznitelikleri ayarlamak için CLI update komutuyla parametresi gibi --set genel güncelleştirme parametrelerini kullanabilirsiniz. Tek öznitelikler için kullanmak --set özellikle geliştirme ve test senaryolarında değerlidir. Örneğin, ilk dağıtımın instance_count değerini büyütmek için bayrağını --set instance_count=2 kullanabilirsiniz. Ancak YAML güncelleştirilemediğinden bu teknik GitOps'yi kolaylaştırmaz.
    • YAML dosyasının belirtilmesi ZORUNLU DEĞİlDİ. Örneğin, belirli bir dağıtım için farklı eşzamanlılık ayarını test etmek istiyorsanız, gibi az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4bir şey deneyebilirsiniz. Bu, tüm mevcut yapılandırmayı tutar ancak yalnızca belirtilen parametreleri güncelleştirir.
  5. Uç nokta oluşturulduğunda veya güncelleştirildiğinde çalıştırılan işlevi değiştirdiğinizden init() , ileti Updated successfully günlüklerde yer alır. Çalıştırarak günlükleri alın:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

Komutu update yerel dağıtımlarla da çalışır. Bayrağıyla --local aynı az ml online-deployment update komutu kullanın.

Not

Dağıtıma yönelik önceki güncelleştirme, yer içi sıralı güncelleştirme örneğidir.

  • Yönetilen çevrimiçi uç nokta için dağıtım, bir kerede %20 düğümle yeni yapılandırmaya güncelleştirilir. Yani, dağıtımda 10 düğüm varsa, aynı anda 2 düğüm güncelleştirilir.
  • Kubernetes çevrimiçi uç noktası için sistem, yeni yapılandırmayla yinelemeli olarak yeni bir dağıtım örneği oluşturur ve eskisini siler.
  • Üretim kullanımı için, bir web hizmetini güncelleştirmek için daha güvenli bir alternatif sunan mavi-yeşil dağıtımı göz önünde bulundurmalısınız.

(İsteğe bağlı) Otomatik ölçeklendirmeyi yapılandırma

Otomatik ölçeklendirme uygulamanızdaki yükü işlemek için tam olarak doğru miktarda kaynak çalıştırır. Yönetilen çevrimiçi uç noktalar, Azure İzleyici otomatik ölçeklendirme özelliğiyle tümleştirme aracılığıyla otomatik ölçeklendirmeyi destekler. Otomatik ölçeklendirmeyi yapılandırmak için bkz . Çevrimiçi uç noktaları otomatik ölçeklendirme.

(İsteğe bağlı) Azure İzleyici kullanarak SLA'yı izleme

Ölçümleri görüntülemek ve SLA'nıza göre uyarılar ayarlamak için Çevrimiçi uç noktaları izleme başlığı altında açıklanan adımları tamamlayın.

(İsteğe bağlı) Log Analytics ile tümleştirme

get-logs CLI komutu veya get_logs SDK yöntemi, otomatik olarak seçilen bir örnekten yalnızca son birkaç yüz günlük satırını sağlar. Ancak Log Analytics, günlükleri dur türlü depolamak ve analiz etmek için bir yol sağlar. Günlüğü kullanma hakkında daha fazla bilgi için bkz . Çevrimiçi uç noktaları izleme.

Uç noktayı ve dağıtımı silme

Dağıtımı kullanmayacaksanız, aşağıdaki kodu çalıştırarak silmelisiniz (uç noktayı ve temel alınan tüm dağıtımları siler):

az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait