Distribuera, flytta upp och återställa en modell med GitHub Actions
När modellen är registrerad och produktionshöjningen skyddas av en GitHub miljö är du redo att hantera förutsägelser utan att utsätta varje användare för en oprövad version.
Skapa en slutpunkt och en distribution
En hanterad onlineslutpunkt ger en stabil HTTPS-adress som ett klientprogram, till exempel Prosewares schemaläggningssystem, anropar för att få en förutsägelse. Själva ändpunkten kör inte modellen. En eller flera distributioner, som var och en kopplar ihop en specifik registrerad modellversion med en beräkningskonfiguration och för MLflow-modeller, en automatiskt genererad miljö och bedömningsskript, utför den faktiska servningen. Att hålla slutpunkts-URL:en stabil när du ersätter distributioner under den innebär att schemaläggningssystemet aldrig behöver ändras, även om no-show-modellen tränas om och distribueras om.
Tips
Läs mer om hur du distribuerar maskininlärningsmodeller till onlineslutpunkter.
Driftsätt en ny version på ett säkert sätt
En slutpunkt kan vara värd för mer än en distribution i taget och du styr vilken procentandel av inkommande trafik varje distribution tar emot. Med den här konfigurationen kan du distribuera en ny modellversion på samma sätt som du distribuerar eventuella ändringar av produktionsprogramvaran: distribuera den nya versionen tillsammans med den aktuella vid 0% trafik, bekräfta att den fungerar som förväntat och sedan gradvis flytta trafik mot den, en metod som ofta kallas en blågrön distribution. Om den nya versionen presterar sämre flyttar du tillbaka trafiken till den tidigare driftsättningen i stället för att ta endpointen ur drift.
Tips
Läs mer om säker distribution för onlineslutpunkter.
Testa innan du flyttar trafik
Innan en ny distribution tar emot direkttrafik skickar du begäranden direkt till distributionen och jämför dess svar med vad du förväntar dig. Först efter att den nya driftsättningen har klarat dessa kontroller ökar du dess trafikfördelning. Eftersom en distribution kan ta några minuter att nå ett klart tillstånd måste ett automatiserat test vänta tills distributionen har slutfört etableringen innan den skickar begäranden.
Automatisera pipelinen med GitHub Actions
Att manuellt upprepa registrering, driftsättning och testning för varje modell som tränas om är inte skalbart, så Prosewares team automatiserar pipelinen med GitHub Actions och Azure Machine Learning CLI (v2). Det aktuella rekommenderade sättet att autentisera ett arbetsflöde till Azure är OIDC-federerade autentiseringsuppgifter (OpenID Connect), vilket gör att GitHub Actions kan begära en kortlivad åtkomsttoken i stället för att lagra en klienthemlighet som en lagringsplatshemlighet. Du konfigurerar en federerad autentiseringsuppgift i ett Microsoft Entra program som är begränsat till lagringsplatsen och grenen och refererar sedan till den i arbetsflödet med åtgärdenazure/login:
permissions:
id-token: write
contents: read
env:
RESOURCE_GROUP: ${{ vars.AZURE_RESOURCE_GROUP }}
WORKSPACE_NAME: ${{ vars.AZURE_WORKSPACE_NAME }}
ENDPOINT_NAME: ${{ vars.AZURE_ENDPOINT_NAME }}
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Sign in to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Register and deploy the model
run: |
az extension add -n ml -y
az ml model create \
--file model.yml \
--resource-group $RESOURCE_GROUP \
--workspace-name $WORKSPACE_NAME
az ml online-deployment create \
--name green \
--endpoint-name $ENDPOINT_NAME \
--file green-deployment.yml \
--resource-group $RESOURCE_GROUP \
--workspace-name $WORKSPACE_NAME
- name: Test the new deployment
run: |
az ml online-endpoint invoke \
--name $ENDPOINT_NAME \
--deployment-name green \
--request-file sample-request.json \
--resource-group $RESOURCE_GROUP \
--workspace-name $WORKSPACE_NAME
- name: Send limited traffic to the new deployment
run: |
az ml online-endpoint update \
--name $ENDPOINT_NAME \
--traffic "blue=90 green=10" \
--resource-group $RESOURCE_GROUP \
--workspace-name $WORKSPACE_NAME
Arbetsflödets permissions block ger jobbet det id-token som krävs för att begära en token från Azure. Steget utbyter denna token för en autentiserad azure/login Azure CLI session. När ett direkttest har slutförts skickar arbetsflödet 10% trafik till den nya green distributionen. Höj upp den ytterligare först efter att dess produktionsbeteende uppfyller dina godkännandekriterier.
Återställ till föregående modell
Behåll den tidigare blue distributionen tillgänglig tills den nya modellen har slutfört sin observationsperiod. Om fel eller oacceptabla förutsägelser visas efter befordran dirigerar du all trafik tillbaka till blue:
az ml online-endpoint update \
--name $ENDPOINT_NAME \
--traffic "blue=100 green=0" \
--resource-group $RESOURCE_GROUP \
--workspace-name $WORKSPACE_NAME
Om du ändrar trafik bevaras slutpunkts-URL:en och ger snabbare återställning än att ta bort och återskapa slutpunkten. När trafiken har återgått till den tidigare modellen, undersök green driftsättningen utan att exponera användare för den. Ta bort den tidigare distributionen först efter att den nya modellen uppfyller godkännandekriterierna för den nödvändiga observationsperioden.
Tips
Läs mer om hur du ansluter GitHub Actions till Azure med OpenID Connect.