Kayıtlı R modelini çevrimiçi (gerçek zamanlı) uç noktaya dağıtma
ŞUNUN IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)
Bu makalede, uygulamanızın modele göre neredeyse gerçek zamanlı olarak yeni veriler puanlayabilmesi için bir R modelini yönetilen uç noktaya (Web API' sine) dağıtmayı öğreneceksiniz.
Önkoşullar
- Azure Machine Learning çalışma alanı.
- Azure CLI ve ml uzantısı yüklü. Veya CLI'nın önceden yüklenmiş olduğu çalışma alanınızda bir işlem örneği kullanabilirsiniz.
- Çalışma alanınızla ilişkili en az bir özel ortam. R ortamı veya başka bir özel ortamınız yoksa oluşturun.
- R
plumber
paketini anlama - ile
crate
eğitip paketlediğiniz ve çalışma alanınıza kaydettiğiniz bir model
Bu yapıya sahip bir klasör oluşturun
Projeniz için şu klasör yapısını oluşturun:
📂 r-deploy-azureml
├─📂 docker-context
│ ├─ Dockerfile
│ └─ start_plumber.R
├─📂 src
│ └─ plumber.R
├─ deployment.yml
├─ endpoint.yml
Bu dosyaların her birinin içeriği bu makalede gösterilmiştir ve açıklanmıştır.
Dockerfile
Bu, kapsayıcı ortamını tanımlayan dosyadır. Ayrıca burada ek R paketlerinin yüklenmesini de tanımlayacaksınız.
Örnek bir Dockerfile şöyle görünür:
# REQUIRED: Begin with the latest R container with plumber
FROM rstudio/plumber:latest
# REQUIRED: Install carrier package to be able to use the crated model (whether from a training job
# or uploaded)
RUN R -e "install.packages('carrier', dependencies = TRUE, repos = 'https://cloud.r-project.org/')"
# OPTIONAL: Install any additional R packages you may need for your model crate to run
RUN R -e "install.packages('<PACKAGE-NAME>', dependencies = TRUE, repos = 'https://cloud.r-project.org/')"
RUN R -e "install.packages('<PACKAGE-NAME>', dependencies = TRUE, repos = 'https://cloud.r-project.org/')"
# REQUIRED
ENTRYPOINT []
COPY ./start_plumber.R /tmp/start_plumber.R
CMD ["Rscript", "/tmp/start_plumber.R"]
Puanlama betiğiniz için ihtiyacınız olan paketleri eklemek için dosyayı değiştirin.
Tesisatçı. R
Önemli
Bu bölümde tesisatçının nasıl yapılandırılası gösterilmektedir . R betiği. Paket hakkında ayrıntılı bilgi için plumber
belgelere bakınplumber
.
Dosya tesisatçısı. R , puanlama işlevini tanımlayabileceğiniz R betiğidir. Bu betik, uç noktanızın çalışması için gereken görevleri de gerçekleştirir. Betik şunları yapar:
- Modelin kapsayıcıdaki ortam değişkeninden
AZUREML_MODEL_DIR
bağlandığı yolu alır. - paketlendiğinde crate.bin olarak kaydedilen paketten
carrier
işleviylecrate
oluşturulan bir model nesnesini yükler. - Model nesnesinin seri durumdan çıkarılma
- Puanlama işlevini tanımlar
Bahşiş
Puanlama işlevinizin ürettiği her şeyin JSON'a geri dönüştürülediğinden emin olun. Bazı R nesneleri kolayca dönüştürülmez.
# plumber.R
# This script will be deployed to a managed endpoint to do the model scoring
# REQUIRED
# When you deploy a model as an online endpoint, Azure Machine Learning mounts your model
# to your endpoint. Model mounting enables you to deploy new versions of the model without
# having to create a new Docker image.
model_dir <- Sys.getenv("AZUREML_MODEL_DIR")
# REQUIRED
# This reads the serialized model with its respecive predict/score method you
# registered. The loaded load_model object is a raw binary object.
load_model <- readRDS(paste0(model_dir, "/models/crate.bin"))
# REQUIRED
# You have to unserialize the load_model object to make it its function
scoring_function <- unserialize(load_model)
# REQUIRED
# << Readiness route vs. liveness route >>
# An HTTP server defines paths for both liveness and readiness. A liveness route is used to
# check whether the server is running. A readiness route is used to check whether the
# server's ready to do work. In machine learning inference, a server could respond 200 OK
# to a liveness request before loading a model. The server could respond 200 OK to a
# readiness request only after the model has been loaded into memory.
#* Liveness check
#* @get /live
function() {
"alive"
}
#* Readiness check
#* @get /ready
function() {
"ready"
}
# << The scoring function >>
# This is the function that is deployed as a web API that will score the model
# Make sure that whatever you are producing as a score can be converted
# to JSON to be sent back as the API response
# in the example here, forecast_horizon (the number of time units to forecast) is the input to scoring_function.
# the output is a tibble
# we are converting some of the output types so they work in JSON
#* @param forecast_horizon
#* @post /score
function(forecast_horizon) {
scoring_function(as.numeric(forecast_horizon)) |>
tibble::as_tibble() |>
dplyr::transmute(period = as.character(yr_wk),
dist = as.character(logmove),
forecast = .mean) |>
jsonlite::toJSON()
}
start_plumber. R
Dosya start_plumber. R , kapsayıcı başlatıldığında çalıştırılacak R betiğidir ve tesisatçınızı çağırır. R betiği. Aşağıdaki betiği olduğu gibi kullanın.
entry_script_path <- paste0(Sys.getenv('AML_APP_ROOT'),'/', Sys.getenv('AZUREML_ENTRY_SCRIPT'))
pr <- plumber::plumb(entry_script_path)
args <- list(host = '0.0.0.0', port = 8000);
if (packageVersion('plumber') >= '1.0.0') {
pr$setDocs(TRUE)
} else {
args$swagger <- TRUE
}
do.call(pr$run, args)
Kapsayıcı oluşturma
Bu adımlarda, çalışma alanınızla ilişkilendirilmiş ve ilk özel ortamınızı oluştururken oluşturulan bir Azure Container Registry'niz olduğu varsayılır. Özel bir ortamınız olup olmadığını görmek için:
- Azure Machine Learning stüdyosu oturum açın.
- Gerekirse çalışma alanınızı seçin.
- Sol gezinti bölmesinde Ortamlar'ı seçin.
- Üst kısımda Özel ortamlar'ı seçin.
- Özel ortamlar görürseniz, başka bir şey gerekmez.
- Özel ortam görmüyorsanız bir R ortamı veya başka bir özel ortam oluşturun. (Bu ortamı dağıtım için kullanmayacaksınız, ancak sizin için de oluşturulan kapsayıcı kayıt defterini kullanacaksınız.)
En az bir özel ortamınız olduğunu doğruladıktan sonra, kapsayıcı oluşturmak için aşağıdaki adımları kullanın.
Bir terminal penceresi açın ve Azure'da oturum açın. Bunu bir Azure Machine Learning işlem örneğinden yapıyorsanız şunu kullanın:
az login --identity
İşlem örneğinde değilseniz, kimlik doğrulaması için bir tarayıcı penceresi açmak için istemi atlayıp
--identity
izleyin.CLI'nın ve uzantının en son sürümlerine sahip olduğunuzdan
ml
emin olun:az upgrade
Birden çok Azure aboneliğiniz varsa, etkin aboneliği çalışma alanınız için kullandığınız abonelik olarak ayarlayın. (Yalnızca tek bir aboneliğe erişiminiz varsa bu adımı atlayabilirsiniz.) değerini abonelik adınız ile değiştirin
<SUBSCRIPTION-NAME>
. Ayrıca köşeli ayraçları<>
da kaldırın.az account set --subscription "<SUBSCRIPTION-NAME>"
Varsayılan çalışma alanını ayarlayın. Bunu bir işlem örneğinden yapıyorsanız, aşağıdaki komutu olduğu gibi kullanabilirsiniz. Başka bir bilgisayardaysanız, bunun yerine kaynak grubunuzu ve çalışma alanı adınızı değiştirin. (Bu değerleri Azure Machine Learning stüdyosu.)
az configure --defaults group=$CI_RESOURCE_GROUP workspace=$CI_WORKSPACE
Proje dizininizde olduğunuzdan emin olun.
cd r-deploy-azureml
Görüntüyü bulutta oluşturmak için terminalinizde aşağıdaki bash komutlarını yürütebilirsiniz. yerine
<IMAGE-NAME>
resmi vermek istediğiniz adı yazın.Çalışma alanınız bir sanal ağdaysa, bu kodun son satırındaki komuta eklenecek
az acr build
--image-build-compute
ek adımlar için bkz. Azure Container Registry'yi (ACR) etkinleştirme.WORKSPACE=$(az config get --query "defaults[?name == 'workspace'].value" -o tsv) ACR_NAME=$(az ml workspace show -n $WORKSPACE --query container_registry -o tsv | cut -d'/' -f9-) IMAGE_TAG=${ACR_NAME}.azurecr.io/<IMAGE-NAME> az acr build ./docker-context -t $IMAGE_TAG -r $ACR_NAME
Önemli
Görüntünün derlenmiş olması birkaç dakika sürer. Sonraki bölüme geçmeden önce derleme işleminin tamamlanmasını bekleyin. Bu terminali kapatmayın, dağıtımı oluşturmak için yanındaki terminali kullanacaksınız.
Komut, az acr
görüntüyü derlemek için yapıtları içeren docker-context klasörünüzü otomatik olarak görüntünün derlendiği ve bir Azure Container Registry'de barındırılacağı buluta yükler.
Model dağıtma
Makalenin bu bölümünde, önceki adımlarda oluşturulan modeli ve görüntüyü yönetilen bir çevrimiçi uç noktaya dağıtmak için bir uç nokta ve dağıtım tanımlayacak ve oluşturacaksınız.
Uç nokta, istemcilerin (uygulama gibi) eğitilmiş bir modelin puanlama çıkışını almak için çağırabileceği bir HTTPS uç noktasıdır. Şunları sağlar:
- "Anahtar ve belirteç" tabanlı kimlik doğrulaması kullanarak kimlik doğrulaması
- SSL sonlandırma
- Kararlı bir puanlama URI'si (endpoint-name.region.inference.ml.Azure.com)
Dağıtım, gerçek puanlama işlemini yapan modeli barındırmak için gereken bir kaynak kümesidir. Tekbir uç nokta birden çokdağıtım içerebilir. Azure Machine Learning yönetilen uç noktalarının yük dengeleme özellikleri, her dağıtıma trafiğin herhangi bir yüzdesini vermenizi sağlar. Trafik ayırma, farklı örnekler arasındaki istekleri dengeleyerek mavi/yeşil dağıtımları güvenli bir şekilde dağıtmak için kullanılabilir.
Yönetilen çevrimiçi uç nokta oluşturma
Proje dizininize endpoint.yml dosyasını aşağıdaki kodla ekleyin. değerini yönetilen uç noktanıza vermek istediğiniz adla değiştirin
<ENDPOINT-NAME>
.$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: <ENDPOINT-NAME> auth_mode: aml_token
Görüntüyü oluşturduğunuz terminali kullanarak aşağıdaki CLI komutunu yürüterek bir uç nokta oluşturun:
az ml online-endpoint create -f endpoint.yml
Sonraki bölümde kullanmaya devam etmek için terminali açık bırakın.
Dağıtım oluşturma
Dağıtımınızı oluşturmak için deployment.yml dosyasına aşağıdaki kodu ekleyin.
değerini endpoint.yml dosyasında tanımladığınız uç nokta adıyla değiştirin
<ENDPOINT-NAME>
değerini dağıtıma vermek istediğiniz adla değiştirin
<DEPLOYMENT-NAME>
değerini kayıtlı modelin URI'siyle şu biçimde değiştirin
<MODEL-URI>
:azureml:modelname@latest
değerini şu değerle değiştirin
<IMAGE-TAG>
:echo $IMAGE_TAG
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: <DEPLOYMENT-NAME> endpoint_name: <ENDPOINT-NAME> code_configuration: code: ./src scoring_script: plumber.R model: <MODEL-URI> environment: image: <IMAGE-TAG> inference_config: liveness_route: port: 8000 path: /live readiness_route: port: 8000 path: /ready scoring_route: port: 8000 path: /score instance_type: Standard_DS2_v2 instance_count: 1
Ardından terminalinizde aşağıdaki CLI komutunu yürüterek dağıtımı oluşturun (trafiğin %100'unu bu modele ayarladığınıza dikkat edin):
az ml online-deployment create -f deployment.yml --all-traffic --skip-script-validation
Dekont
Hizmetin dağıtılması birkaç dakika sürebilir. Sonraki bölüme geçmeden önce dağıtımın tamamlanmasını bekleyin.
Test etme
Dağıtımınız başarıyla oluşturulduktan sonra, studio veya CLI kullanarak uç noktayı test edebilirsiniz:
Azure Machine Learning stüdyosu gidin ve sol taraftaki Uç Noktalar menüsünden öğesini seçin. Ardından, daha önce oluşturduğunuz r-endpoint-iris öğesini seçin.
Gerçek zamanlı uç nokta metin kutusuna giriş verilerine aşağıdaki json kodunu girin:
{
"forecast_horizon" : [2]
}
Test'i seçin. Aşağıdaki çıkışı görmeniz gerekir:
Kaynakları temizleme
Artık uç noktanızla başarılı bir şekilde puanladığınıza göre, devam eden maliyetler doğurmaması için bu puanı silebilirsiniz:
az ml online-endpoint delete --name r-endpoint-forecast
Sonraki adımlar
Azure Machine Learning ile R kullanma hakkında daha fazla bilgi için bkz . Azure Machine Learning'de R özelliklerine genel bakış