Tutorial Azure ML Managed Endpoints: Deployment Model Produksi

# Tutorial Lengkap Azure ML Managed Endpoints: Deployment Model Production Azure ML Managed Endpoints menyediakan solusi fully managed untuk deploy model machine learning secara scalable. Endpoints m...

By Ruby Abdullah · · tutorial
AzureAzure MLEndpointsModel DeploymentMLOpsProduction

Tutorial Lengkap Azure ML Managed Endpoints: Deployment Model Production

Azure ML Managed Endpoints menyediakan solusi fully managed untuk deploy model machine learning secara scalable. Endpoints menangani infrastruktur, scaling, security, dan monitoring secara otomatis.

Mengapa Managed Endpoints?

Manfaat Utama:
  • Fully managed: Tidak perlu mengelola infrastruktur
  • Auto-scaling: Scale berdasarkan traffic
  • Blue-green deployments: Rollout yang aman
  • Built-in monitoring: Metrics dan logging
  • Security: Authentication dan network isolation

Tipe Endpoint:
  • Online endpoints: Real-time inference
  • Batch endpoints: Batch processing skala besar

Prerequisites

pip install azure-ai-ml azure-identity

Azure CLI

az login

az extension add -n ml

Online Endpoints

1. Buat Online Endpoint

from azure.ai.ml import MLClient

from azure.ai.ml.entities import ManagedOnlineEndpoint

from azure.identity import DefaultAzureCredential

mlclient = MLClient(

credential=DefaultAzureCredential(),

subscriptionid="your-subscription-id",

resourcegroupname="my-resource-group",

workspacename="my-ml-workspace"

)

Buat endpoint

endpoint = ManagedOnlineEndpoint(

name="my-online-endpoint",

description="Online endpoint untuk real-time inference",

authmode="key", # atau "amltoken"

tags={"environment": "production"}

)

mlclient.onlineendpoints.begincreateorupdate(endpoint).result()

print(f"Endpoint dibuat: {endpoint.name}")

2. Buat Deployment

from azure.ai.ml.entities import (

ManagedOnlineDeployment,

Model,

Environment,

CodeConfiguration

)

Buat deployment

bluedeployment = ManagedOnlineDeployment(

name="blue",

endpointname="my-online-endpoint",

model=Model(path="./model"),

codeconfiguration=CodeConfiguration(

code="./scoring",

scoringscript="score.py"

),

environment=Environment(

condafile="./environment.yml",

image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest"

),

instancetype="StandardDS3v2",

instancecount=1

)

mlclient.onlinedeployments.begincreateorupdate(bluedeployment).result()

print("Deployment dibuat")

3. Scoring Script

# scoring/score.py

import json

import joblib

import numpy as np

import os

import logging

def init():

"""Inisialisasi model saat startup."""

global model

modelpath = os.path.join(os.getenv("AZUREMLMODELDIR"), "model.joblib")

model = joblib.load(modelpath)

logging.info("Model berhasil dimuat")

def run(rawdata):

"""Jalankan inference pada data masuk."""

try:

data = json.loads(rawdata)

features = np.array(data["features"])

# Jalankan prediksi

predictions = model.predict(features)

probabilities = model.predictproba(features)

return {

"predictions": predictions.tolist(),

"probabilities": probabilities.tolist()

}

except Exception as e:

logging.error(f"Error: {str(e)}")

return {"error": str(e)}

4. Set Traffic

# Arahkan semua traffic ke deployment blue

endpoint.traffic = {"blue": 100}

mlclient.onlineendpoints.begincreateorupdate(endpoint).result()

Dapatkan detail endpoint

endpoint = mlclient.onlineendpoints.get("my-online-endpoint")

print(f"Scoring URI: {endpoint.scoringuri}")

print(f"Traffic: {endpoint.traffic}")

5. Test Endpoint

import json

Test data

testdata = {

"features": [[5.1, 3.5, 1.4, 0.2], [6.2, 3.4, 5.4, 2.3]]

}

Panggil endpoint

response = mlclient.onlineendpoints.invoke(

endpointname="my-online-endpoint",

requestfile=json.dumps(testdata)

)

print(f"Response: {response}")

6. Invoke dengan REST API

import requests

Dapatkan detail endpoint

endpoint = mlclient.onlineendpoints.get("my-online-endpoint")

scoringuri = endpoint.scoringuri

Dapatkan key

keys = mlclient.onlineendpoints.getkeys("my-online-endpoint")

apikey = keys.primarykey

Buat request

headers = {

"Content-Type": "application/json",

"Authorization": f"Bearer {apikey}"

}

data = {"features": [[5.1, 3.5, 1.4, 0.2]]}

response = requests.post(scoringuri, headers=headers, json=data)

print(response.json())

Blue-Green Deployments

1. Buat Green Deployment

# Buat deployment baru dengan model terupdate

greendeployment = ManagedOnlineDeployment(

name="green",

endpointname="my-online-endpoint",

model=Model(path="./modelv2"),

codeconfiguration=CodeConfiguration(

code="./scoring",

scoringscript="score.py"

),

environment=Environment(

condafile="./environment.yml",

image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest"

),

instancetype="StandardDS3v2",

instancecount=1

)

mlclient.onlinedeployments.begincreateorupdate(greendeployment).result()

2. Traffic Shift Bertahap

# Mulai dengan 10% traffic ke green

endpoint.traffic = {"blue": 90, "green": 10}

mlclient.onlineendpoints.begincreateorupdate(endpoint).result()

Monitor metrics, lalu tingkatkan

endpoint.traffic = {"blue": 50, "green": 50}

mlclient.onlineendpoints.begincreateorupdate(endpoint).result()

Full rollout ke green

endpoint.traffic = {"blue": 0, "green": 100}

mlclient.onlineendpoints.begincreateorupdate(endpoint).result()

3. Rollback

# Rollback ke blue jika ada masalah

endpoint.traffic = {"blue": 100, "green": 0}

mlclient.onlineendpoints.begincreateorupdate(endpoint).result()

Hapus deployment yang gagal

mlclient.onlinedeployments.begindelete(

endpointname="my-online-endpoint",

deploymentname="green"

).result()

Auto-Scaling

1. Konfigurasi Auto-Scaling

from azure.ai.ml.entities import (

ManagedOnlineDeployment,

OnlineRequestSettings,

ProbeSettings

)

Deployment dengan konfigurasi scaling

scaleddeployment = ManagedOnlineDeployment(

name="scaled",

endpointname="my-online-endpoint",

model=Model(path="./model"),

codeconfiguration=CodeConfiguration(

code="./scoring",

scoringscript="score.py"

),

environment=Environment(

condafile="./environment.yml",

image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest"

),

instancetype="StandardDS3v2",

instancecount=2,

requestsettings=OnlineRequestSettings(

requesttimeoutms=90000,

maxconcurrentrequestsperinstance=10

),

livenessprobe=ProbeSettings(

initialdelay=10,

period=10,

failurethreshold=30

),

readinessprobe=ProbeSettings(

initialdelay=10,

period=10,

failurethreshold=30

)

)

mlclient.onlinedeployments.begincreateorupdate(scaleddeployment).result()

2. Azure Monitor Auto-Scale

from azure.mgmt.monitor import MonitorManagementClient

from azure.mgmt.monitor.models import (

AutoscaleSettingResource,

AutoscaleProfile,

ScaleRule,

MetricTrigger,

ScaleAction,

ScaleCapacity

)

Konfigurasi auto-scale via Azure Monitor

monitorclient = MonitorManagementClient(

credential=DefaultAzureCredential(),

subscriptionid="your-subscription-id"

)

autoscalesetting = AutoscaleSettingResource(

location="eastus",

profiles=[

AutoscaleProfile(

name="auto-scale-profile",

capacity=ScaleCapacity(

minimum="1",

maximum="10",

default="2"

),

rules=[

ScaleRule(

metrictrigger=MetricTrigger(

metricname="RequestsPerInstance",

metricresourceuri="/subscriptions/.../endpoints/my-endpoint",

timegrain="PT1M",

statistic="Average",

timewindow="PT5M",

timeaggregation="Average",

operator="GreaterThan",

threshold=100

),

scaleaction=ScaleAction(

direction="Increase",

type="ChangeCount",

value="1",

cooldown="PT5M"

)

),

ScaleRule(

metrictrigger=MetricTrigger(

metricname="RequestsPerInstance",

operator="LessThan",

threshold=20

),

scaleaction=ScaleAction(

direction="Decrease",

type="ChangeCount",

value="1",

cooldown="PT10M"

)

)

]

)

],

targetresourceuri="/subscriptions/.../deployments/scaled"

)

Batch Endpoints

1. Buat Batch Endpoint

from azure.ai.ml.entities import BatchEndpoint

batchendpoint = BatchEndpoint(

name="my-batch-endpoint",

description="Batch endpoint untuk inference skala besar"

)

mlclient.batchendpoints.begincreateorupdate(batchendpoint).result()

print("Batch endpoint dibuat")

2. Buat Batch Deployment

from azure.ai.ml.entities import (

BatchDeployment,

BatchRetrySettings,

CodeConfiguration

)

batchdeployment = BatchDeployment(

name="batch-scorer",

endpointname="my-batch-endpoint",

model=Model(path="./model"),

codeconfiguration=CodeConfiguration(

code="./batch-scoring",

scoringscript="batchscore.py"

),

environment=Environment(

condafile="./environment.yml",

image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest"

),

compute="cpu-cluster",

instancecount=2,

maxconcurrencyperinstance=2,

minibatchsize=10,

outputaction="appendrow",

outputfilename="predictions.csv",

retrysettings=BatchRetrySettings(

maxretries=3,

timeout=300

),

logginglevel="info"

)

mlclient.batchdeployments.begincreateorupdate(batchdeployment).result()

3. Batch Scoring Script

# batch-scoring/batchscore.py

import os

import pandas as pd

import joblib

import logging

def init():

"""Inisialisasi model."""

global model

modelpath = os.path.join(os.getenv("AZUREMLMODELDIR"), "model.joblib")

model = joblib.load(modelpath)

logging.info("Model dimuat")

def run(minibatch):

"""Proses mini-batch file."""

results = []

for filepath in minibatch:

# Baca data

df = pd.readcsv(filepath)

# Prediksi

predictions = model.predict(df.values)

# Tambahkan prediksi ke results

for i, pred in enumerate(predictions):

results.append({

"file": os.path.basename(filepath),

"index": i,

"prediction": pred

})

return pd.DataFrame(results)

4. Invoke Batch Endpoint

from azure.ai.ml import Input

from azure.ai.ml.constants import AssetTypes

Mulai batch job

job = mlclient.batchendpoints.invoke(

endpointname="my-batch-endpoint",

inputs=Input(

path="azureml://datastores/workspaceblobstore/paths/batch-data/",

type=AssetTypes.URIFOLDER

)

)

print(f"Batch job dimulai: {job.name}")

Monitor job

mlclient.jobs.stream(job.name)

Dapatkan lokasi output

job = mlclient.jobs.get(job.name)

print(f"Output: {job.outputs}")

Monitoring

1. Dapatkan Logs

# Dapatkan deployment logs

logs = mlclient.onlinedeployments.getlogs(

endpointname="my-online-endpoint",

deploymentname="blue",

lines=100

)

print(logs)

2. Metrics

from azure.monitor.query import MetricsQueryClient

from datetime import datetime, timedelta

metricsclient = MetricsQueryClient(credential=DefaultAzureCredential())

Query metrics

response = metricsclient.queryresource(

resourceuri="/subscriptions/.../endpoints/my-online-endpoint",

metricnames=["RequestsPerMinute", "RequestLatency", "RequestsSucceeded"],

timespan=timedelta(hours=1)

)

for metric in response.metrics:

print(f"{metric.name}: {metric.timeseries[0].data[-1].average}")

3. Application Insights

# Aktifkan Application Insights di deployment

deployment = ManagedOnlineDeployment(

name="monitored",

endpointname="my-online-endpoint",

model=Model(path="./model"),

# ... konfigurasi lain

appinsightsenabled=True

)

Security

1. Network Isolation

# Buat endpoint dengan private endpoint

privateendpoint = ManagedOnlineEndpoint(

name="private-endpoint",

description="Private endpoint",

authmode="key",

publicnetworkaccess="disabled" # Disable public access

)

mlclient.onlineendpoints.begincreateorupdate(privateendpoint).result()

2. Managed Identity

from azure.ai.ml.entities import ManagedIdentityConfiguration

Buat endpoint dengan managed identity

identityendpoint = ManagedOnlineEndpoint(

name="identity-endpoint",

authmode="amltoken",

identity=ManagedIdentityConfiguration(

type="SystemAssigned"

)

)

mlclient.onlineendpoints.begincreateorupdate(identityendpoint).result()

Best Practices

1. Health Checks

# Konfigurasi probes dengan benar

deployment = ManagedOnlineDeployment(

name="healthy",

# ...

livenessprobe=ProbeSettings(

initialdelay=30, # Tunggu model loading

period=10,

timeout=2,

failurethreshold=3

),

readinessprobe=ProbeSettings(

initialdelay=30,

period=10,

timeout=2,

successthreshold=1,

failurethreshold=3

)

)

2. Resource Cleanup

# Hapus deployment

mlclient.onlinedeployments.begindelete(

endpointname="my-online-endpoint",

deploymentname="blue"

).result()

Hapus endpoint

mlclient.onlineendpoints.begindelete("my-online-endpoint").result()

Kesimpulan

Azure ML Managed Endpoints menyediakan:

  • Simplicity: Infrastruktur fully managed
  • Scalability: Kemampuan auto-scaling
  • Reliability: Blue-green deployments
  • Security: Network isolation dan identity
  • Observability: Built-in monitoring
  • Key takeaways:

    • Gunakan online endpoints untuk real-time inference
    • Gunakan batch endpoints untuk processing skala besar
    • Implementasikan blue-green deployments untuk rollout aman
    • Konfigurasi auto-scaling untuk variasi traffic
    • Monitor performa dan kesehatan secara kontinu

    Artikel Terkait

    Tutorial Azure ML Pipelines: Automasi Pipeline ML

    Tutorial Lengkap Azure ML Pipelines: CI/CD untuk Machine Learning Azure ML Pipelines memungkinkan Anda membangun workflo...

    Tutorial Lengkap Azure Machine Learning: End-to-End ML Platform

    Tutorial Lengkap Azure Machine Learning: ML End-to-End di Azure Azure Machine Learning adalah platform berbasis cloud un...

    Tutorial MLOps End-to-End Project: Dari Data ke Produksi

    Tutorial 20: Proyek MLOps End-to-End Daftar Isi Pendahuluan Prasyarat Gambaran Proyek Versioning Data dengan DVC

    Tutorial Azure DevOps untuk MLOps: CI/CD untuk Machine Learning

    Tutorial Lengkap Azure DevOps untuk MLOps: CI/CD untuk Machine Learning Azure DevOps menyediakan kemampuan CI/CD kompreh...