MLflow modellerinin Çevrimiçi Uç Noktalara aşamalı dağıtımı
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/deploy
değiştirin.
Jupyter Notebooks'ta takip edin
Aşağıdaki not defterlerinde bu örneği izleyebilirsiniz. Kopyalanan depoda not defterini açın: mlflow_sdk_online_endpoints_progresive.ipynb.
Önkoşullar
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.
Ayrıca şunları yapmanız gerekir:
- Azure CLI'yi ve ml uzantısını Azure CLI'ya yükleyin. Daha fazla bilgi için bkz . CLI'yi (v2) yükleme, ayarlama ve kullanma.
Ç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>
Modeli kayıt defterine kaydetme
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:
MODEL_NAME='heart-classifier'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
Çevrimiçi uç nokta oluşturma
Ç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:
ENDPOINT_SUFIX=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-5} | head -n 1) ENDPOINT_NAME="heart-classifier-$ENDPOINT_SUFIX"
Uç noktayı yapılandırma
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: heart-classifier-edp auth_mode: key
Uç noktayı oluşturun:
az ml online-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
Uç nokta için kimlik doğrulama gizli dizisini alma.
ENDPOINT_SECRET_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME | jq -r ".accessToken")
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.
Dağıtımı yapılandırma
blue-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: default endpoint_name: heart-classifier-edp model: azureml:heart-classifier@latest instance_type: Standard_DS2_v2 instance_count: 1
Dağıtımı oluşturma
az ml online-deployment create --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-traffic
Uç noktanızın çıkış bağlantısı yoksa, bayrağını
--with-package
ekleyerek model paketlemeyi (önizleme) kullanın:az ml online-deployment create --with-package --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-traffic
İpucu
Yeni dağıtıma tüm trafiği atayacak olan create komutunda bayrağını
--all-traffic
ayarlarız.Tüm trafiği dağıtıma atama
Şu ana kadar uç noktanın tek bir dağıtımı var, ancak trafiğinden hiçbiri bu dağıtıma atanmadı. Şimdi atayalım.
Oluşturma sırasında kullandığımız
--all-traffic
için azure CLI'da bu adım gerekli değildir.Uç nokta yapılandırmasını güncelleştirin:
Oluşturma sırasında kullandığımız
--all-traffic
için azure CLI'da bu adım gerekli değildir.Dağıtımı test etmek için örnek giriş oluşturma
sample.yml
{ "input_data": { "columns": [ "age", "sex", "cp", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal" ], "data": [ [ 48, 0, 3, 130, 275, 0, 0, 139, 0, 0.2, 1, 0, "normal" ] ] } }
Dağıtımı test etme
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file sample.json
Uç noktanın altında yeşil dağıtım oluşturma
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.
Yeni model sürümü kaydetme
MODEL_NAME='heart-classifier' az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
Şimdi yeni modelin sürüm numarasını alalım:
VERSION=$(az ml model show -n heart-classifier --label latest | jq -r ".version")
Yeni dağıtım yapılandırma
green-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: xgboost-model endpoint_name: heart-classifier-edp model: azureml:heart-classifier@latest instance_type: Standard_DS2_v2 instance_count: 1
Dağıtımı aşağıdaki gibi adlandıracağız:
GREEN_DEPLOYMENT_NAME="xgboost-model-$VERSION"
Yeni dağıtımı oluşturma
az ml online-deployment create -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.yml
Uç noktanızın çıkış bağlantısı yoksa, bayrağını
--with-package
ekleyerek model paketlemeyi (önizleme) kullanın:az ml online-deployment create --with-package -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.yml
Trafiği değiştirmeden dağıtımı test edin
az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name $GREEN_DEPLOYMENT_NAME --request-file sample.json
İpucu
Şimdi çağırmak istediğimiz dağıtımın adını nasıl gösterdiğimize dikkat edin.
Trafiği aşamalı olarak güncelleştirme
Yeni dağıtımdan emin olduğumuzdan, trafiği güncelleştirerek bir kısmını yeni dağıtıma yönlendirebiliriz. Trafik uç nokta düzeyinde yapılandırılır:
Trafiği yapılandırın:
Azure CLI'da bu adım gerekli değil
Uç noktayı güncelleştirme
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=90 $GREEN_DEPLOYMENT_NAME=10"
Trafiğin tamamını yeni dağıtıma geçmeye karar verirseniz tüm trafiği güncelleştirin:
Azure CLI'da bu adım gerekli değil
Uç noktayı güncelleştirme
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=0 $GREEN_DEPLOYMENT_NAME=100"
Eski dağıtım herhangi bir trafik almadığından güvenli bir şekilde silebilirsiniz:
az ml online-deployment delete --endpoint-name $ENDPOINT_NAME --name default
İpucu
Bu noktada, eski "mavi dağıtımın" silindiğini ve yeni "yeşil dağıtımın" "mavi dağıtımın" yerini aldığına dikkat edin.
Kaynakları temizleme
az ml online-endpoint delete --name $ENDPOINT_NAME --yes
Önemli
Bir uç nokta silindiğinde, altındaki tüm dağıtımların da silindiğini fark edin.
Sonraki adımlar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin