Bagikan melalui


Cara menyebarkan model R terdaftar ke titik akhir online (real time)

BERLAKU UNTUK: Ekstensi ml Azure CLI v2 (saat ini)

Dalam artikel ini, Anda akan mempelajari cara menyebarkan model R ke titik akhir terkelola (API Web) sehingga aplikasi Anda dapat menilai data baru terhadap model mendekati real-time.

Prasyarat

Buat folder dengan struktur ini

Buat struktur folder ini untuk proyek Anda:

📂 r-deploy-azureml
 ├─📂 docker-context
 │  ├─ Dockerfile
 │  └─ start_plumber.R
 ├─📂 src
 │  └─ plumber.R
 ├─ deployment.yml
 ├─ endpoint.yml

Konten masing-masing file ini ditampilkan dan dijelaskan dalam artikel ini.

Dockerfile

Ini adalah file yang menentukan lingkungan kontainer. Anda juga akan menentukan penginstalan paket R tambahan apa pun di sini.

Contoh Dockerfile akan terlihat seperti ini:

# 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"]

Ubah file untuk menambahkan paket yang Anda butuhkan untuk skrip penilaian Anda.

tukang ledeng. R

Penting

Bagian ini menunjukkan cara menyusun tukang leding. Skrip R . Untuk informasi terperinci tentang plumber paket, lihat plumber dokumentasi .

Tukang ledak file . R adalah skrip R tempat Anda akan menentukan fungsi untuk penilaian. Skrip ini juga melakukan tugas yang diperlukan untuk membuat titik akhir Anda berfungsi. Skrip:

  • Mendapatkan jalur tempat model dipasang dari AZUREML_MODEL_DIR variabel lingkungan dalam kontainer.
  • Memuat objek model yang dibuat dengan crate fungsi dari carrier paket, yang disimpan sebagai crate.bin saat dibungkus.
  • Membatalkan penyaringan objek model
  • Menentukan fungsi penilaian

Tip

Pastikan bahwa apa pun yang dihasilkan fungsi penilaian Anda dapat dikonversi kembali ke JSON. Beberapa objek R tidak mudah dikonversi.

# 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

File start_plumber. R adalah skrip R yang dijalankan ketika kontainer dimulai, dan memanggil tukang ledeng Anda . Skrip R . Gunakan skrip berikut apa adanya.

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)

Membangun kontainer

Langkah-langkah ini mengasumsikan Anda memiliki Azure Container Registry yang terkait dengan ruang kerja Anda, yang dibuat saat Anda membuat lingkungan kustom pertama Anda. Untuk melihat apakah Anda memiliki lingkungan kustom:

  1. Masuk ke Studio Azure Machine Learning.
  2. Pilih ruang kerja Anda jika perlu.
  3. Di navigasi kiri, pilih Lingkungan.
  4. Di bagian atas, pilih Lingkungan kustom.
  5. Jika Anda melihat lingkungan kustom, tidak ada lagi yang diperlukan.
  6. Jika Anda tidak melihat lingkungan kustom apa pun, buat lingkungan R, atau lingkungan kustom lainnya. (Anda tidak akan menggunakan lingkungan ini untuk penyebaran, tetapi Anda akan menggunakan registri kontainer yang juga dibuat untuk Anda.)

Setelah Anda memverifikasi bahwa Anda memiliki setidaknya satu lingkungan kustom, mulai terminal dan siapkan CLI:

  1. Buka jendela terminal dan masuk ke Azure. Jika Anda menggunakan instans komputasi Azure Pembelajaran Mesin, gunakan:

    az login --identity
    

    Jika Anda tidak menggunakan instans komputasi, hilangkan --identity dan ikuti perintah untuk membuka jendela browser untuk mengautentikasi.

  2. Pastikan Anda memiliki versi terbaru CLI dan ml ekstensi:

    az upgrade
    
  3. Jika Anda memiliki beberapa langganan Azure, atur langganan aktif ke langganan yang Anda gunakan untuk ruang kerja Anda. (Anda dapat melewati langkah ini jika Anda hanya memiliki akses ke satu langganan.) Ganti <YOUR_SUBSCRIPTION_NAME_OR_ID> dengan nama langganan atau ID langganan Anda. Hapus juga tanda kurung <>.

    az account set -s "<YOUR_SUBSCRIPTION_NAME_OR_ID>"
    
  4. Atur ruang kerja default. Jika Anda menggunakan instans komputasi, Anda dapat mempertahankan perintah berikut apa adanya. Jika Anda berada di komputer lain, ganti grup sumber daya dan nama ruang kerja Anda sebagai gantinya. (Anda dapat menemukan nilai-nilai ini di Studio Azure Pembelajaran Mesin.)

    az configure --defaults group=$CI_RESOURCE_GROUP workspace=$CI_WORKSPACE
    

Setelah Anda menyiapkan CLI, gunakan langkah-langkah berikut untuk membangun kontainer.

  1. Pastikan Anda berada di direktori proyek Anda.

    cd r-deploy-azureml
    
  2. Untuk membangun gambar di cloud, jalankan perintah bash berikut di terminal Anda. Ganti <IMAGE-NAME> dengan nama yang ingin Anda berikan gambarnya.

    Jika ruang kerja Anda berada di jaringan virtual, lihat Mengaktifkan Azure Container Registry (ACR) untuk langkah tambahan untuk ditambahkan --image-build-compute ke az acr build perintah di baris terakhir kode ini.

    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
    

Penting

Ini akan memakan waktu beberapa menit agar gambar dibuat. Tunggu hingga proses build selesai sebelum melanjutkan ke bagian berikutnya. Jangan tutup terminal ini, Anda akan menggunakannya di samping untuk membuat penyebaran.

Perintah az acr akan secara otomatis mengunggah folder docker-context Anda - yang berisi artefak untuk membangun gambar - ke cloud tempat gambar akan dibangun dan dihosting di Azure Container Registry.

Menyebarkan model

Di bagian artikel ini, Anda akan menentukan dan membuat titik akhir dan penyebaran untuk menyebarkan model dan gambar yang dibangun dalam langkah-langkah sebelumnya ke titik akhir online terkelola.

Titik akhir adalah titik akhir HTTPS yang klien - seperti aplikasi - dapat memanggil untuk menerima output penilaian model terlatih. Menyediakan:

  • Autentikasi menggunakan autentikasi berbasis "kunci & token"
  • Penghentian SSL
  • URI penilaian stabil (endpoint-name.region.inference.ml.Azure.com)

Penyebaran adalah sekumpulan sumber daya yang diperlukan untuk menghosting model yang melakukan penilaian aktual. Satu titik akhir dapat berisi beberapa penyebaran. Kemampuan penyeimbangan beban Azure Pembelajaran Mesin titik akhir terkelola memungkinkan Anda memberikan persentase lalu lintas apa pun untuk setiap penyebaran. Alokasi lalu lintas dapat digunakan untuk melakukan peluncuran aman penyebaran biru/hijau dengan menyeimbangkan permintaan di antara berbagai instans.

Membuat titik akhir online terkelola

  1. Di direktori proyek Anda, tambahkan file endpoint.yml dengan kode berikut. Ganti <ENDPOINT-NAME> dengan nama yang ingin Anda berikan titik akhir terkelola Anda.

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: <ENDPOINT-NAME>
    auth_mode: aml_token
    
  2. Menggunakan terminal yang sama tempat Anda membangun gambar, jalankan perintah CLI berikut untuk membuat titik akhir:

    az ml online-endpoint create -f endpoint.yml
    
  3. Biarkan terminal terbuka untuk terus menggunakannya di bagian berikutnya.

Membuat penyebaran

  1. Untuk membuat penyebaran Anda, tambahkan kode berikut ke file deployment.yml .

    • Ganti <ENDPOINT-NAME> dengan nama titik akhir yang Anda tentukan dalam file endpoint.yml

    • Ganti <DEPLOYMENT-NAME> dengan nama yang ingin Anda berikan penyebarannya

    • Ganti <MODEL-URI> dengan URI model terdaftar dalam bentuk azureml:modelname@latest

    • Ganti <IMAGE-TAG> dengan nilai dari:

      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
    
  2. Selanjutnya, di terminal Anda jalankan perintah CLI berikut untuk membuat penyebaran (perhatikan bahwa Anda mengatur 100% lalu lintas ke model ini):

    az ml online-deployment create -f deployment.yml --all-traffic --skip-script-validation
    

Catatan

Mungkin perlu waktu beberapa menit agar layanan disebarkan. Tunggu hingga penyebaran selesai sebelum melanjutkan ke bagian berikutnya.

Uji

Setelah penyebaran berhasil dibuat, Anda dapat menguji titik akhir menggunakan studio atau CLI:

Navigasikan ke studio Azure Pembelajaran Mesin dan pilih dari menu sebelah kiri Titik Akhir. Selanjutnya, pilih r-endpoint-iris yang Anda buat sebelumnya.

Masukkan json berikut ke dalam kotak teks Input data untuk beristirahat titik akhir real time:

{
    "forecast_horizon" : [2]
}

Pilih Uji. Anda akan menemukan output berikut:

Cuplikan layar memperlihatkan hasil dari pengujian model.

Membersihkan sumber daya

Setelah berhasil mencetak skor dengan titik akhir, Anda dapat menghapusnya sehingga Anda tidak dikenakan biaya berkelanjutan:

az ml online-endpoint delete --name r-endpoint-forecast

Langkah berikutnya

Untuk informasi selengkapnya tentang menggunakan R dengan Azure Pembelajaran Mesin, lihat Gambaran Umum kemampuan R di Azure Pembelajaran Mesin