Ç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 CLI ve
ml
Azure CLI uzantısı. Daha fazla bilgi için bkz . CLI'yi (v2) yükleme, ayarlama ve kullanma.Önemli
Bu makaledeki CLI örneklerinde Bash (veya uyumlu) kabuğu kullandığınız varsayılır. Örneğin, bir Linux sisteminden veya Linux için Windows Alt Sistemi.
Azure Machine Learning çalışma alanı. Yoksa CLI'yı (v2) yükleme, ayarlama ve kullanma bölümünde yer alan adımları kullanarak bir tane oluşturun.
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 3 olarak 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ırpath
içinde belirtiriz. Model dosyaları otomatik olarak karşıya yüklenir ve otomatik olarak oluşturulan bir adla kaydedilir.environment
- Bu örnekte, öğesini içerenpath
satır içi tanımlarımız vardır. Görüntü için kullanacağızenvironment.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:
- 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.
- 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:1
formunu model: azureml:my-model:1
kullanın.
Kayıt için ve'nin model
environment
YAML tanımlarını ayrı YAML dosyalarına ayıklayabilir ve ve az ml environment create
komutlarını az ml model create
kullanabilirsiniz. Bu komutlar hakkında daha fazla bilgi edinmek için ve az ml environment create -h
komutunu ç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_DIR
olarak 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:
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.pkl
ile 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.pkl
iç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:
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 True
olarak 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:3
belirtir:
$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
:
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:
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ın
path
. 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_state
olası 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
- Hata ayıklamak için Çevrimiçi uç nokta dağıtımı sorunlarını giderme'yi kullanın.
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/action
Microsoft.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 --query
daha 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:
Dosyayı çevrimiçi/model-1/onlinescoring/score.py açın.
İşlevin son satırını
init()
değiştirin: sonralogging.info("Init complete")
ekleyinlogging.info("Updated successfully")
.Dosyayı kaydedin.
Ş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ıninstance_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=4
bir şey deneyebilirsiniz. Bu, tüm mevcut yapılandırmayı tutar ancak yalnızca belirtilen parametreleri güncelleştirir.
- YAML'nizdeki öznitelikleri geçersiz kılmak veya YAML dosyasında geçirmeden belirli öznitelikleri ayarlamak için CLI
Uç nokta oluşturulduğunda veya güncelleştirildiğinde çalıştırılan işlevi değiştirdiğinizden
init()
, iletiUpdated 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
İlgili içerik
- Çevrimiçi uç noktalar için Kasa dağıtımı
- REST ile modelleri dağıtma
- Yönetilen çevrimiçi uç noktaları otomatik ölçeklendirme
- Yönetilen çevrimiçi uç noktaları izleme
- Yönetilen kimlikle çevrimiçi uç noktadan Azure kaynaklarına erişme
- Çevrimiçi uç nokta dağıtımının sorunlarını giderme
- Yönetilen çevrimiçi uç noktalarla ağ yalıtımını etkinleştirme
- Azure Machine Learning yönetilen çevrimiçi uç noktasının maliyetlerini görüntüleme
- Azure Machine Learning ile kaynaklar için kotaları yönetme ve artırma
- Toplu puanlama için toplu iş uç noktalarını kullanma