Bu makalede, hizmet kesintisine neden olmadan MLflow modellerini aşamalı olarak nasıl güncelleştirebileceğinizi ve Çevrimiçi Uç Noktalara dağıtabileceğinizi öğreneceksiniz. Web hizmetinin yeni bir sürümünü üretime tanıtmak için güvenli dağıtım stratejisi olarak da bilinen mavi-yeşil dağıtımı kullanırsınız. Bu strateji, web hizmetinin yeni sürümünü tamamen kullanıma sunmadan önce kullanıcıların veya isteklerin küçük bir alt kümesine dağıtmanıza olanak sağlar.
Bu örnek hakkında
Çevrimiçi Uç Noktalar, Uç Nokta ve Dağıtım kavramına sahiptir. Uç nokta, müşterilerin modeli kullanmak için kullandığı API'yi temsil ederken, dağıtım bu API'nin belirli bir uygulamasını gösterir. Bu ayrım, kullanıcıların API'yi uygulamadan ayırmasına ve tüketiciyi etkilemeden temel alınan uygulamayı değiştirmesine olanak tanır. Bu örnek, hizmet kesintisine neden olmadan uç noktalarda dağıtılan modeli güncelleştirmek için bu tür kavramları kullanacaktır.
Dağıtacağımız model, UCI Kalp Hastalığı Veri Kümesini temel alır. Veritabanı 76 öznitelik içeriyor, ancak bunların 14'ünün alt kümesini kullanıyoruz. Model, bir hastada kalp hastalığının varlığını tahmin etmeye çalışır. 0 'dan (iletişim durumu yok) 1'e (iletişim durumu) değerlenen tamsayıdır. Sınıflandırıcı kullanılarak XGBBoost eğitilmiştir ve gerekli tüm ön işleme işlem scikit-learn hattı olarak paketlenmiştir ve bu da modeli ham verilerden tahminlere giden uçtan uca bir işlem hattı haline getirmiştir.
Bu makaledeki bilgiler, azureml-examples deposunda yer alan kod örneklerini temel alır. Dosyaları kopyalamak/yapıştırmak zorunda kalmadan komutları yerel olarak çalıştırmak için depoyu kopyalayın ve dizinleri olarak sdk/using-mlflow/deploydeğiştirin.
Bu makaledeki adımları takip etmeden önce aşağıdaki önkoşullara sahip olduğunuzdan emin olun:
Azure aboneliği. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning'in ücretsiz veya ücretli sürümünü deneyin.
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 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/* izni veren özel bir rol atanmalıdır. Daha fazla bilgi için bkz . Azure Machine Learning çalışma alanına erişimi yönetme.
Azure Machine Learning işlemde çalışmıyorsanız, MLflow izleme URI'sini veya MLflow'un kayıt defteri URI'sini üzerinde çalıştığınız çalışma alanına işaret eden şekilde yapılandırın. Azure Machine Learning için MLflow yapılandırmayı öğrenin.
Çalışma alanınıza bağlanma
İlk olarak üzerinde çalışacağımız Azure Machine Learning çalışma alanına bağlanalım.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Çalışma alanı Azure Machine Learning'in en üst düzey kaynağıdır. Azure Machine Learning'i kullanırken oluşturduğunuz tüm yapıtlarla çalışmak için merkezi bir konum sağlar. Bu bölümde, dağıtım görevlerini gerçekleştirdiğiniz çalışma alanına bağlanacağız.
Gerekli kitaplıkları içeri aktarın:
from azure.ai.ml import MLClient, Input
from azure.ai.ml.entities import ManagedOnlineEndpoint, ManagedOnlineDeployment, Model
from azure.ai.ml.constants import AssetTypes
from azure.identity import DefaultAzureCredential
Çalışma alanı ayrıntılarını yapılandırın ve çalışma alanına bir tanıtıcı alın:
Modelinizin Azure Machine Learning kayıt defterine kayıtlı olduğundan emin olun. Azure Machine Learning'de kayıtlı olmayan modellerin dağıtımı desteklenmez. MLflow SDK'sını kullanarak yeni bir model kaydedebilirsiniz:
Çevrimiçi uç noktalar, çevrimiçi (gerçek zamanlı) çıkarım için kullanılan uç noktalardır. Çevrimiçi uç noktalar istemcilerden veri almaya hazır dağıtımlar içerir ve gerçek zamanlı olarak yanıtlar gönderebilir.
Aynı modelin birden çok sürümünü aynı uç nokta altına dağıtarak bu işlevden yararlanacağız. Ancak yeni dağıtım, yalvarma sırasında trafiğin %0'ını alır. Yeni modelin doğru çalışacağından emin olduktan sonra trafiği aşamalı olarak bir dağıtımdan diğerine taşıyacağız.
Uç noktalar, aynı bölgede benzersiz olması gereken bir ad gerektirir. Var olmayan bir tane oluşturduğunuzdan emin olalım:
import random
import string
# Creating a unique endpoint name by including a random suffix
allowed_chars = string.ascii_lowercase + string.digits
endpoint_suffix = "".join(random.choice(allowed_chars) for x in range(5))
endpoint_name = "heart-classifier-" + endpoint_suffix
print(f"Endpoint name: {endpoint_name}")
import random
import string
# Creating a unique endpoint name by including a random suffix
allowed_chars = string.ascii_lowercase + string.digits
endpoint_suffix = "".join(random.choice(allowed_chars) for x in range(5))
endpoint_name = "heart-classifier-" + endpoint_suffix
print(f"Endpoint name: {endpoint_name}")
endpoint = ManagedOnlineEndpoint(
name=endpoint_name,
description="An endpoint to serve predictions of the UCI heart disease problem",
auth_mode="key",
)
Bir yapılandırma dosyası kullanarak bu uç noktanın özelliklerini yapılandırabiliriz. Aşağıdaki örnekte uç noktanın kimlik doğrulama modunu "anahtar" olacak şekilde yapılandırıyoruz:
Bu işlev MLflow SDK'sında kullanılamaz. Azure Machine Learning stüdyosu gidin, uç noktaya gidin ve oradan gizli anahtarı alın.
Mavi dağıtım oluşturma
Şu ana kadar uç nokta boş. Üzerinde dağıtım yok. Şimdi daha önce üzerinde çalıştığımız modeli dağıtarak ilk modeli oluşturalım. "Mavi dağıtımımızı" temsil eden bu dağıtımı "varsayılan" olarak adlandıracağız.
Aşağıdaki kod eğitim veri kümesinden 5 gözlem örneği alır, sütunu kaldırır target (modelin tahmin edeceği gibi) ve dosyada sample.json model dağıtımıyla kullanılabilecek bir istek oluşturur.
samples = (
pd.read_csv("data/heart.csv")
.sample(n=5)
.drop(columns=["target"])
.reset_index(drop=True)
)
with open("sample.json", "w") as f:
f.write(
json.dumps(
{"input_data": json.loads(samples.to_json(orient="split", index=False))}
)
)
Aşağıdaki kod eğitim veri kümesinden 5 gözlem örneği alır, sütunu kaldırır target (modelin tahmin edeceği gibi) ve bir istek oluşturur.
Geliştirme ekibi tarafından oluşturulan modelin yeni bir sürümü olduğunu ve üretime hazır olduğunu düşünelim. İlk olarak bu modeli uçurmayı deneyebiliriz ve emin olduktan sonra trafiği bu modele yönlendirmek için uç noktayı güncelleştirebiliriz.
içinde belirtilen donanım onayını deployment-config-filekullanıyoruz. Ancak, aynı yapılandırmaya sahip olmak için herhangi bir gereksinim yoktur. Gereksinimlere bağlı olarak farklı modeller için farklı donanım yapılandırabilirsiniz.
Yapılandırmayı bir dosyaya yazın:
deployment_config_path = "deployment_config.json"
with open(deployment_config_path, "w") as outfile:
outfile.write(json.dumps(deploy_config))