v1 ile Azure Kubernetes Service kümesine model dağıtma

Önemli

Bu makalede, modeli dağıtmak için Python için Azure Machine Learning CLI (v1) ve Azure Machine Learning SDK'sının (v1) nasıl kullanılacağı açıklanmaktadır. v2 için önerilen yaklaşım için bkz . Çevrimiçi uç nokta kullanarak makine öğrenmesi modelini dağıtma ve puanlandırma.

Azure Kubernetes Service'te (AKS) bir modeli web hizmeti olarak dağıtmak için Azure Machine Learning'i kullanmayı öğrenin. AKS, yüksek ölçekli üretim dağıtımları için idealdir. Aşağıdaki özelliklerden birine veya daha fazlasına ihtiyacınız varsa AKS kullanın:

  • Hızlı yanıt süresi
  • Dağıtılan hizmetin otomatik ölçeklendirmesi
  • Günlüğe kaydetme
  • Model veri toplama
  • Kimlik Doğrulaması
  • TLS sonlandırma
  • GPU ve alan programlanabilir kapı dizileri (FPGA) gibi donanım hızlandırma seçenekleri

AKS'ye dağıtım yaparken, çalışma alanınıza bağlı bir AKS kümesine dağıtım gerçekleştirirsiniz. AKS kümesini çalışma alanınıza bağlama hakkında bilgi için bkz . Azure Kubernetes Service kümesi oluşturma ve ekleme.

Önemli

Web hizmetine dağıtmadan önce yerel olarak hata ayıklamanızı öneririz. Daha fazla bilgi için bkz . Yerel model dağıtımıyla ilgili sorunları giderme.

Not

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?.

Önkoşullar

  • Azure Machine Learning çalışma alanı. Daha fazla bilgi için bkz . Azure Machine Learning çalışma alanı oluşturma.

  • Çalışma alanınıza kaydedilmiş bir makine öğrenmesi modeli. Kayıtlı bir modeliniz yoksa bkz . Makine öğrenmesi modellerini Azure'a dağıtma.

  • Machine Learning hizmeti, Azure Machine Learning Python SDK'sı veya Azure Machine Learning Visual Studio Code uzantısı için Azure CLI 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.

  • Bu makaledeki Python kod parçacıklarında aşağıdaki değişkenlerin ayarlandığı varsayılır:

    • ws - Çalışma alanınıza ayarlayın.
    • model - Kayıtlı modelinize ayarlayın.
    • inference_config - Modelin çıkarım yapılandırmasına ayarlayın.

    Bu değişkenleri ayarlama hakkında daha fazla bilgi için bkz . Modellerin nasıl ve nereye dağıtılacağı.

  • Bu makaledeki CLI kod parçacıkları, zaten bir inferenceconfig.json belgesi oluşturduğunuzu varsayar. Bu belgeyi oluşturma hakkında daha fazla bilgi için bkz . Makine öğrenmesi modellerini Azure'a dağıtma.

  • Çalışma alanınıza bağlı bir AKS kümesi. Daha fazla bilgi için bkz . Azure Kubernetes Service kümesi oluşturma ve ekleme.

    • Modelleri GPU düğümlerine veya FPGA düğümlerine (veya belirli bir ürüne) dağıtmak istiyorsanız, belirli bir ürünle bir küme oluşturmanız gerekir. Mevcut bir kümede ikincil düğüm havuzu oluşturma ve modelleri ikincil düğüm havuzuna dağıtma desteği yoktur.

Dağıtım işlemlerini anlama

Dağıtım sözcüğü hem Kubernetes'te hem de Azure Machine Learning'de kullanılır. Dağıtımın bu iki bağlamda farklı anlamları vardır. Kubernetes'te dağıtım, bildirim temelli bir YAML dosyasıyla belirtilen somut bir varlıktır. Kubernetes dağıtımı, ve gibi Pods diğer Kubernetes varlıklarıyla tanımlanmış bir yaşam döngüsüne ve ReplicaSetssomut ilişkilere sahiptir. Kubernetes hakkında bilgi edinmek için bkz . Kubernetes nedir?.

Azure Machine Learning'de dağıtım, proje kaynaklarınızı kullanılabilir hale getirmek ve temizlemek için daha genel anlamda kullanılır. Azure Machine Learning'in dağıtımın bir parçası olarak kabul eden adımlar şunlardır:

  1. .amlignore veya .gitignore içinde belirtilenleri yoksayarak proje klasörünüzdeki dosyaları zipping etme
  2. İşlem kümenizin ölçeğini artırma (Kubernetes ile ilgilidir)
  3. Dockerfile'ı işlem düğümüne derleme veya indirme (Kubernetes ile ilgilidir)
    1. Sistem şu değerlerin karması hesaplar:
    2. Sistem, Azure Container Registry (ACR) çalışma alanının aramasında anahtar olarak bu karmayı kullanır
    3. Bulunamazsa, genel ACR'de bir eşleşme arar
    4. Bulunamazsa sistem önbelleğe alınmış ve ACR çalışma alanına gönderilen yeni bir görüntü oluşturur
  4. Sıkıştırılmış proje dosyanızı işlem düğümündeki geçici depolama alanına indirme
  5. Proje dosyasının sıkıştırmasını açma
  6. Yürütülen işlem düğümü python <entry script> <arguments>
  7. Günlükleri, model dosyalarını ve ./outputs öğesine yazılan diğer dosyaları çalışma alanıyla ilişkilendirilmiş depolama hesabına kaydetme
  8. Geçici depolamayı kaldırma da dahil olmak üzere işlem ölçeğini azaltma (Kubernetes ile ilgilidir)

Azure Machine Learning yönlendiricisi

Gelen çıkarım isteklerini dağıtılan hizmetlere yönlendiren ön uç bileşeni (azureml-fe) gerektiğinde otomatik olarak ölçeklendirilir. azureml-fe ölçeklendirmesi AKS kümesinin amacına ve boyutuna (düğüm sayısı) bağlıdır. Aks kümesi oluşturduğunuzda veya eklediğinizde küme amacı ve düğümleri yapılandırılır. Küme başına birden çok pod üzerinde çalışan bir azureml-fe hizmeti vardır.

Önemli

  • olarak dev-testyapılandırılmış bir küme kullanılırken kendi kendine ölçeklendirici devre dışı bırakılır. FastProd/DenseProd kümeleri için bile, Kendi Kendine Ölçekleyici yalnızca telemetrinin gerekli olduğunu gösterdiğinde etkinleştirilir.
  • Azure Machine Learning, sistem kapsayıcıları dahil olmak üzere hiçbir kapsayıcıdan günlükleri otomatik olarak karşıya yüklemez veya depolamaz. Kapsamlı hata ayıklama için AKS kümeniz için Container Insights'ı etkinleştirmeniz önerilir. Bu, gerektiğinde kapsayıcı günlüklerini kaydetmenize, yönetmenize ve AML ekibiyle paylaşmanıza olanak tanır. Bu olmadan AML, azureml-fe ile ilgili sorunlar için destek garantisi sağlayamaz.
  • İstek yükü üst sınırı 100 MB'tır.

Azureml-fe, daha fazla çekirdek kullanmak için hem ölçeği artırıp (dikey olarak) hem de daha fazla pod kullanmak için dışarı (yatay olarak) ölçeklendirir. Ölçeği artırma kararı alırken, gelen çıkarım isteklerini yönlendirmek için gereken süre kullanılır. Bu süre eşiği aşarsa bir ölçek artırma gerçekleşir. Gelen istekleri yönlendirme süresi eşiği aşmaya devam ederse bir ölçeği genişletme gerçekleşir.

Ölçeği daraltırken ve daraltırken CPU kullanımı kullanılır. CPU kullanım eşiği karşılanırsa, önce ön ucun ölçeği azaltılır. CPU kullanımı ölçeği daraltma eşiğine düşerse bir ölçeklendirme işlemi gerçekleşir. Ölçeği artırma ve genişletme yalnızca kullanılabilir yeterli küme kaynağı varsa gerçekleşir.

Ölçeği artırdığınızda veya ölçeği azalttığınızda, cpu/bellek değişikliklerini uygulamak için azureml-fe podları yeniden başlatılır. Yeniden başlatmalar çıkarım isteklerini etkilemez.

AKS çıkarım kümesi için bağlantı gereksinimlerini anlama

Azure Machine Learning bir AKS kümesi oluşturduğunda veya eklediğinde, AKS kümesi aşağıdaki iki ağ modelinden biriyle dağıtılır:

  • Kubenet ağı: Aks kümesi dağıtılırken ağ kaynakları genellikle oluşturulur ve yapılandırılır.
  • Azure Container Networking Interface (CNI) ağı: AKS kümesi mevcut bir sanal ağ kaynağına ve yapılandırmalarına bağlıdır.

Kubenet ağı için ağ, Azure Machine Learning hizmeti için düzgün bir şekilde oluşturulur ve yapılandırılır. CNI ağı için bağlantı gereksinimlerini anlamanız ve AKS çıkarımında DNS çözümlemesi ve giden bağlantı olduğundan emin olmanız gerekir. Örneğin, ağ trafiğini engellemek için bir güvenlik duvarı kullanıyor olabilirsiniz.

Aşağıdaki diyagramda AKS çıkarım için bağlantı gereksinimleri gösterilmektedir. Siyah oklar gerçek iletişimi, mavi oklar ise etki alanı adlarını temsil eder. Bu konaklar için güvenlik duvarınıza veya özel DNS sunucunuza giriş eklemeniz gerekebilir.

AKS çıkarım için bağlantı gereksinimlerini gösteren diyagram.

Genel AKS bağlantı gereksinimleri için bkz. AKS'de Azure Güvenlik Duvarı ile ağ trafiğini sınırlama.

Güvenlik duvarının arkasındaki Azure Machine Learning hizmetlerine erişmek için bkz . Gelen ve giden ağ trafiğini yapılandırma.

Genel DNS çözümleme gereksinimleri

Mevcut bir sanal ağ içindeki DNS çözümlemesi sizin denetiminizdedir. Örneğin, bir güvenlik duvarı veya özel DNS sunucusu. Aşağıdaki konaklara ulaşılabilir olmalıdır:

Konak adı Kullanan
<cluster>.hcp.<region>.azmk8s.io AKS API sunucusu
mcr.microsoft.com Microsoft Container Registry (MCR)
<ACR name>.azurecr.io Azure Container Registry'niz (ACR)
<account>.table.core.windows.net Azure Depolama Hesabı (tablo depolama)
<account>.blob.core.windows.net Azure Depolama Hesabı (blob depolama)
api.azureml.ms Microsoft Entra doğrulaması
ingest-vienna<region>.kusto.windows.net Telemetriyi karşıya yüklemek için Kusto uç noktası
<leaf-domain-label + auto-generated suffix>.<region>.cloudapp.azure.com Azure Machine Learning ile otomatik olarak oluşturduysanız uç nokta etki alanı adı. Özel etki alanı adı kullandıysanız bu girdi gerekli değildir.

Bağlantı gereksinimleri kronolojik sırada

AKS oluşturma veya ekleme işleminde Azure Machine Learning yönlendiricisi (azureml-fe) AKS kümesine dağıtılır. Azure Machine Learning yönlendiricisini dağıtmak için AKS düğümü şunları yapabilmelidir:

  • AKS API sunucusu için DNS'yi çözümleme
  • Azure Machine Learning yönlendiricisi için docker görüntülerini indirmek için MCR için DNS'yi çözümleme
  • Giden bağlantının gerekli olduğu MCR'den görüntüleri indirme

azureml-fe dağıtıldıktan hemen sonra başlatmayı dener ve bu işlem şunları gerektirir:

  • AKS API sunucusu için DNS'yi çözümleme
  • Kendisinin diğer örneklerini bulmak için AKS API sunucusunu sorgulayın (çok podlu bir hizmettir)
  • Kendi diğer örneklerine bağlanma

azureml-fe başlatıldıktan sonra düzgün çalışması için aşağıdaki bağlantı gerekir:

  • Dinamik yapılandırmayı indirmek için Azure Depolama'ya bağlanma
  • Microsoft Entra kimlik doğrulama sunucusu api.azureml.ms için DNS'yi çözün ve dağıtılan hizmet Microsoft Entra kimlik doğrulamasını kullandığında bu sunucuyla iletişim kurun.
  • Dağıtılan modelleri bulmak için AKS API sunucusunu sorgulama
  • Dağıtılan model POD'leriyle iletişim kurma

Model dağıtım zamanında başarılı bir model dağıtımı için AKS düğümü şunları yapabilmelidir:

  • Müşterinin ACR'sinde DNS'i çözümleme
  • Müşterinin ACR'sinden görüntü indirme
  • Modelin depolandığı Azure BLOB'ları için DNS'i çözümleme
  • Azure BLOB'larından modelleri indirme

Model dağıtıldıktan ve hizmet başlatıldıktan sonra azureml-fe AKS API'sini kullanarak modeli otomatik olarak bulur ve isteği buna yönlendirmeye hazırdır. Model POD'leriyle iletişim kurabilmelidir.

Not

Dağıtılan model herhangi bir bağlantı gerektiriyorsa (örneğin, dış veritabanını veya diğer REST hizmetini sorgulama veya BLOB indirme), bu hizmetler için hem DNS çözümlemesi hem de giden iletişim etkinleştirilmelidir.

AKS’ye dağıtma

AKS'ye model dağıtmak için, gereken işlem kaynaklarını açıklayan bir dağıtım yapılandırması oluşturun. Örneğin, çekirdek ve bellek sayısı. Modeli ve web hizmetini barındırmak için gereken ortamı açıklayan bir çıkarım yapılandırmasına da ihtiyacınız vardır. Çıkarım yapılandırmasını oluşturma hakkında daha fazla bilgi için bkz . Modellerin nasıl ve nereye dağıtılacağı.

Not

Dağıtılacak model sayısı dağıtım başına 1.000 modelle sınırlıdır (kapsayıcı başına).

ŞUNUN IÇIN GEÇERLIDIR: Python SDK azureml v1

from azureml.core.webservice import AksWebservice, Webservice
from azureml.core.model import Model
from azureml.core.compute import AksCompute

aks_target = AksCompute(ws,"myaks")
# If deploying to a cluster configured for dev/test, ensure that it was created with enough
# cores and memory to handle this deployment configuration. Note that memory is also used by
# things such as dependencies and AML components.
deployment_config = AksWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1)
service = Model.deploy(ws, "myservice", [model], inference_config, deployment_config, aks_target)
service.wait_for_deployment(show_output = True)
print(service.state)
print(service.get_logs())

Bu örnekte kullanılan sınıflar, yöntemler ve parametreler hakkında daha fazla bilgi için aşağıdaki başvuru belgelerine bakın:

Otomatik ölçeklendirme

ŞUNUN IÇIN GEÇERLIDIR: Python SDK azureml v1

Azure Machine Learning model dağıtımları için otomatik ölçeklendirmeyi işleyen bileşen, akıllı istek yönlendiricisi olan azureml-fe'dir. Tüm çıkarım istekleri üzerinden geçtiğinden, dağıtılan modelleri otomatik olarak ölçeklendirmek için gerekli verilere sahiptir.

Önemli

  • Model dağıtımları için Kubernetes Yatay Pod Otomatik Ölçeklendiricisi'ne (HPA) izin verme. Bunun yapılması, iki otomatik ölçeklendirme bileşeninin birbiriyle rekabet edebilmesine neden olur. Azureml-fe, Azure Machine Learning tarafından dağıtılan modelleri otomatik ölçeklendirmek için tasarlanmıştır; burada HPA'nın CPU kullanımı veya özel ölçüm yapılandırması gibi genel bir ölçümden model kullanımını tahmin etmek veya yaklaşık olarak tahmin etmek zorunda olması gerekir.

  • Azureml-fe, AKS kümesindeki düğüm sayısını ölçeklendirmez, çünkü bu beklenmeyen maliyet artışlarına neden olabilir. Bunun yerine, fiziksel küme sınırları içindeki model için çoğaltma sayısını ölçeklendirir. Kümenin içindeki düğümlerin sayısını ölçeklendirmeniz gerekiyorsa, kümeyi el ile ölçeklendirebilir veya AKS küme otomatik ölçeklendiricisini yapılandırabilirsiniz.

Otomatik ölçeklendirme, AKS web hizmeti için , autoscale_min_replicasve autoscale_max_replicas ayarıyla autoscale_target_utilizationdenetlenebilir. Aşağıdaki örnekte otomatik ölçeklendirmenin nasıl etkinleştirileceği gösterilmektedir:

aks_config = AksWebservice.deploy_configuration(autoscale_enabled=True, 
                                                autoscale_target_utilization=30,
                                                autoscale_min_replicas=1,
                                                autoscale_max_replicas=4)

Ölçeği artırma veya azaltma kararları, geçerli kapsayıcı çoğaltmalarının kullanımına bağlıdır. Meşgul olan çoğaltmaların (bir isteği işleme) toplam geçerli çoğaltma sayısına bölünmesi geçerli kullanımdır. Bu sayı değerini aşarsa autoscale_target_utilization, daha fazla çoğaltma oluşturulur. Daha düşükse çoğaltmalar azaltılır. Varsayılan olarak hedef kullanım %70'tir.

Çoğaltma ekleme kararları istekli ve hızlıdır (yaklaşık 1 saniye). Çoğaltmaları kaldırma kararları muhafazakardır (yaklaşık 1 dakika).

Aşağıdaki kodu kullanarak gerekli çoğaltmaları hesaplayabilirsiniz:

from math import ceil
# target requests per second
targetRps = 20
# time to process the request (in seconds)
reqTime = 10
# Maximum requests per container
maxReqPerContainer = 1
# target_utilization. 70% in this example
targetUtilization = .7

concurrentRequests = targetRps * reqTime / targetUtilization

# Number of container replicas
replicas = ceil(concurrentRequests / maxReqPerContainer)

, ve ayarlarını yapma autoscale_target_utilizationhakkında daha fazla bilgi için bkz. AksWebservice modülü autoscale_min_replicasbaşvurusu. autoscale_max_replicas

Web hizmeti kimlik doğrulaması

Azure Kubernetes Service'e dağıtım yaparken anahtar tabanlı kimlik doğrulaması varsayılan olarak etkinleştirilir. Belirteç tabanlı kimlik doğrulamasını da etkinleştirebilirsiniz. Belirteç tabanlı kimlik doğrulaması, istemcilerin dağıtılan hizmete istekte bulunmak için kullanılan bir kimlik doğrulama belirteci istemek için bir Microsoft Entra hesabı kullanmasını gerektirir.

Kimlik doğrulamasını auth_enabled=False devre dışı bırakmak için dağıtım yapılandırmasını oluştururken parametresini ayarlayın. Aşağıdaki örnek SDK kullanarak kimlik doğrulamasını devre dışı bırakır:

deployment_config = AksWebservice.deploy_configuration(cpu_cores=1, memory_gb=1, auth_enabled=False)

İstemci uygulamasından kimlik doğrulaması hakkında bilgi için bkz . Web hizmeti olarak dağıtılan Azure Machine Learning modelini kullanma.

Anahtar ile kimlik doğrulaması

Anahtar kimlik doğrulaması etkinleştirildiyse, birincil ve ikincil kimlik doğrulama anahtarını almak için yöntemini kullanabilirsiniz get_keys :

primary, secondary = service.get_keys()
print(primary)

Önemli

Bir anahtarı yeniden oluşturmanız gerekiyorsa kullanın service.regen_key.

Belirteç ile kimlik doğrulaması

Belirteç kimlik doğrulamasını token_auth_enabled=True etkinleştirmek için, bir dağıtım oluştururken veya güncelleştirirken parametresini ayarlayın. Aşağıdaki örnek SDK kullanarak belirteç kimlik doğrulamasını etkinleştirir:

deployment_config = AksWebservice.deploy_configuration(cpu_cores=1, memory_gb=1, token_auth_enabled=True)

Belirteç kimlik doğrulaması etkinleştirildiyse, JWT belirtecini get_token ve bu belirtecin süre sonu süresini almak için yöntemini kullanabilirsiniz:

token, refresh_by = service.get_token()
print(token)

Önemli

Belirteç saatinden sonra yeni bir belirteç refresh_by istemeniz gerekir.

Microsoft, Azure Machine Learning çalışma alanınızı AKS kümenizle aynı bölgede oluşturmanızı kesinlikle önerir. Belirteçle kimlik doğrulaması yapmak için web hizmeti, Azure Machine Learning çalışma alanınızın oluşturulduğu bölgeye bir çağrı yapar. Çalışma alanınızın bölgesi kullanılamıyorsa, kümeniz çalışma alanınızdan farklı bir bölgede olsa bile web hizmetiniz için belirteç getiremezsiniz. Bu, çalışma alanınızın bölgesi yeniden kullanılabilir duruma gelene kadar belirteç tabanlı kimlik doğrulamasının kullanılamamasıyla sonuçlanır. Ayrıca, kümenizin bölgesi ile çalışma alanınızın bölgesi arasındaki mesafe ne kadar büyük olursa, belirteci getirmek o kadar uzun sürer.

Belirteci almak için Azure Machine Learning SDK'sını veya az ml service get-access-token komutunu kullanmanız gerekir.

Güvenlik açığı taraması

Bulut için Microsoft Defender, hibrit bulut iş yükleri arasında birleşik güvenlik yönetimi ve gelişmiş tehdit koruması sağlar. Bulut için Microsoft Defender kaynaklarınızı taramasına ve önerilerini izlemesine izin vermelisiniz. Daha fazla bilgi için bkz . Kapsayıcılar için Microsoft Defender'da kapsayıcı güvenliği.