Wprowadzanie modeli ML
1) Rola i cele
Wdrożenie = niezawodne dostarczanie wniosków produktom i operacjom podczas realizacji RG/AML/Legalne i budżetowe.
Cele: niskie opóźnienia, wysoka dostępność, odtwarzalność, bezpieczeństwo i szybki zwrot.
2) Obsługa architektur
2. 1 Wzory
Online (w czasie rzeczywistym): REST/gRPC, p95 50-150 ms do personalizacji, ≤ 2 -5 s dla wpisów RG/AML.
Blisko-w czasie rzeczywistym: mikro-mecze 1-5 min (OLAP-showcases).
Partia/offline: Złote prezentacje nocne, eksport WORM dla regulatora.
W procesie punktacji: wbudowanie modelu światła do usługi (niskie opóźnienie).
Serverless: funkcje zimnego startu dla rzadkich zadań.
2. 2 Topologie
Usługa jednego modelu → prosta i szybka.
Zespół/wykres (router → preprocess → model → postprocess) → złożone rurociągi.
Sidecar Feature Fetcher → wyciąga funkcje online z buforów (Redis/Scylla).
3) Wzór rejestru i wersji
Rejestr: 'model _ id',' version ',' stage = {Staging, Production, Archiwizowane} ', artefakty (wagi, preprocesor, kalibracja), wymagania (CPU/GPU/memory), karta modelowa (dane, mierniki, zagrożenia, uczciwość).
Artefakty niezmienne: treść-hash; WORM kopie wersji.
Polityka produktowa: wyłącznie poprzez rejestry i deklaracje.
4) Konteneryzacja i pakowanie
Plik dokujący:dockerfile
FROM python:3. 11-slim
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements. txt.
RUN pip install -r requirements. txt --no-cache-dir
COPY artifacts/./artifacts/
COPY src/./src/
CMD ["python", "src/serve. py"]
Serwer (FastAPI + gRPC, idea):
python serve. py from fastapi import FastAPI import joblib, time app = FastAPI()
model = joblib. load("artifacts/model. joblib")
scaler = joblib. load("artifacts/scaler. joblib")
@app. post("/score")
def score(payload: dict):
t0 = time. time()
x = preprocess(payload, scaler)
y = float(model. predict_proba([x])[0,1])
return {"score": y, "latency_ms": int((time. time()-t0)1000), "model_version": "1. 8. 3"}
5) Kubernetes/Helm i Autoskalowanie
Rozmieszczenie (fragment):yaml apiVersion: apps/v1 kind: Deployment metadata: {name: ml-score, labels: {app: ml-score}}
spec:
replicas: 3 selector: {matchLabels: {app: ml-score}}
template:
metadata: {labels: {app: ml-score}}
spec:
containers:
- name: api image: registry/ml-score:1. 8. 3@sha256:...
ports: [{containerPort: 8080}]
resources:
requests: {cpu: "500m", memory: "512Mi"}
limits: {cpu: "2", memory: "2Gi"}
envFrom: [{secretRef: {name: ml-secrets}}]
readinessProbe: {httpGet: {path: /healthz, port: 8080}, periodSeconds: 5}
livenessProbe: {httpGet: {path: /livez, port: 8080}, periodSeconds: 10}
HPA (według RPS/CPU):
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: {name: ml-score-hpa}
spec:
scaleTargetRef: {apiVersion: apps/v1, kind: Deployment, name: ml-score}
minReplicas: 3 maxReplicas: 50 metrics:
- type: Pods pods:
metric: {name: requests_per_second}
target: {type: AverageValue, averageValue: "15"}
- type: Resource resource: {name: cpu, target: {type: Utilization, averageUtilization: 70}}
6) Strategie wdrażania
Cień: nowy model przetwarza kopie żądań, odpowiedzi są ignorowane; porównanie mierników/opóźnień/kosztów.
Kanaryjski: 1-10% ruchu → 25% → 50% → 100% z zielonymi SLO; automatyczny zwrot przy degradacji.
Niebiesko-zielone: stosy równoległe; przełącznik natychmiastowego routingu.
Stopniowa flaga funkcji: Rynek/Najemca/Routing urządzenia.
A/B/n: eksperymenty online z testami sekwencyjnymi.
yaml routes:
- match: {tenant: "EEA"} # feature-flags/rules to: {model: "1. 8. 3", weight: 20}
- match: {tenant: "EEA"}
to: {model: "1. 7. 9", weight: 80}
7) Funkcja online/offline: równoważność
Ujednolicona biblioteka transformacji i sklep funkcyjny (online + offline).
Test równoważności: MAE/MAPE między funkcjami online a odniesieniem offline na próbce referencyjnej.
Funkcja pamięci podręcznej: Redis/Scylla, TTL dla funkcji okna; Czasy i upadki.
8) Obserwowalność, SLO i ostrzeganie
8. 1 punkt odniesienia SLI/SLO
Opóźnienie: p95 ≤ 150 ms (personalizacja), p99 ≤ 300 ms; Wpisy RG/AML ≤ 5 z końcem do końca.
Dostępność: ≥ 99. 9%.
Błąd wnioskowania: ≤ 0. 5% 5xx; zasięg ≥ 99%.
Dryf: charakterystyka PSI/szybkość <próg, ECE (kalibracja) jest stabilna.
МиснЕZ: Uplift Net Revenue, oszustwa zaoszczędzone, time-to-intervene.
8. 2 Metryka (Prometeusz)
yaml
- http_request_duration_seconds{quantile="0. 95"}
- http_requests_total{code=~"5.."}
- model_inference_latency_ms_bucket
- feature_fetch_latency_ms_bucket
- model_score_distribution_bucket
- psi_feature_{name}
- expected_cost_live
Wpisy (fragment):
yaml
- alert: HighP95Latency expr: histogram_quantile(0. 95, sum(rate(model_inference_latency_ms_bucket[5m])) by (le)) > 0. 15 for: 10m
- alert: DriftDetected expr: psi_feature_amount_base > 0. 25 for: 15m
Требсин,, „OpenTelemetry”, „postprocess”, „guardrail”.
9) Bariery ochronne RG/AML i polityka bezpieczeństwa
Pre-/Post-filtr: maski zabronionych działań (częstotliwość wrażeń, chłodzenie, zakaz agresywnych ofert).
Ekran polityki: prędkość powyżej progu RG → miękka interwencja/pauza.
Audyt: rejestrowanie "policy _ id'," skłonność "," maska "," decyzja "," powód ".
PII i miejsce zamieszkania: żetony zamiast identyfikatora, oddzielne klucze szyfrujące i klastrowe na EOG/UK/BR; zakazanie przystępowania do różnych regionów bez uzasadnienia.
Tajemnice: KMS/CMK, Secret Manager; brak PII w logach/torach.
10) Kalibracja, progi i polityka decyzyjna
Kalibracja (Platt/Izotoniczna) jako artefakt.
próg według oczekiwanych kosztów; konfigurowalny w fladze rejestru/funkcji.
Zakrętki bezpieczeństwa: górne/dolne granice działania, ręczna regulacja zgodności.
11) Rolki, degradacja i DR
One-click rollback - Przełącza trasę do poprzedniej 'model _ version'.
Runbook: skrypty „latentnost”, „5xx”, „drift/calibration broke”, „zewnętrzny dostawca funkcji niedostępny”.
Izolacja usterek: wyłącznik, retry/backoff, pamięć podręczna ostatniego ważnego rozwiązania.
DR: kopie zapasowe artefaktów/rejestru, replikacja do „ciepłego” regionu, ćwiczenia.
python try:
features = fetch_features(timeout=30)
except TimeoutError:
features = last_known_good(user_id) # fallback
12) Inżynieria kosztowa i wydajność
Profilowanie ścieżek: funkcje (30-60%), model (20-40%), sieć/IO (10-30%).
Redukcja kosztów: buforowanie gorących funkcji, odtwarzanie kwot, lekkie modele, INT8/FP16 (w stosownych przypadkach), leniwe-postprocess.
HPA na RPS/CPU/latency, ograniczenie wielkości stanu na funkcji strumienia.
Obciążenie zwrotne: koszt/żądanie, koszt/funkcja; budżety dla rynków/zespołów.
13) Bezpieczne zwolnienia i zgodność
Kryteria gotowości produktu: SLO zielony na cieniu, brak dryfu/przecieku, karta modelowa jest pełna, plasterki są normalne.
Regulator: WORM-archiwum uwalniania (wagi, kalibracja, progi, mierniki, dzienniki testowe), niezmienne raporty eksportowe.
DSAR/RTBF: procedury usuwania śladów konkretnego użytkownika z buforów/logów/funkcji.
14) QA przed uruchomieniem
Testy integracyjne: kontrakt API, schematy funkcji, puste/ekstremalne przypadki.
Ładunek: p99, ogony dystrybucyjne, ruch.
Test równoważności online/offline.
Testy chaosu: wyłączenie pamięci podręcznej/podstawy funkcji, terminy świadczenia usług zewnętrznych.
15) Przykłady konfiguracji
Ingress z kanaryjskim routingu (idea):yaml
- match: [headers: {x-exp: "canary"}]
route:
- destination: {host: ml-score-v1-8-3, weight: 20}
- destination: {host: ml-score-v1-7-9, weight: 80}
Wzór zdrowia (punkt końcowy):
python
@app. get("/healthz")
def health():
return {"ok": True, "model_version": "1. 8. 3", "registry_sig_ok": verify_signature()}
16) Procesy i RACI
R (odpowiedzialny): MLOp (służba/orkiestra/obserwowalność), Data Eng (cechy/caches/contracts), Data Science (karty modelowe/kalibracja/progi).
A (Odpowiedzialność): szef danych/CDO.
C (skonsultowano się): Zgodność/DPO (PII/RG/AML/DSAR), Bezpieczeństwo (KMS/Secrets/Audit), SRE (SLO/Incydenty), Finanse (ROI/Budgets).
I (Poinformowany): Produkt/Marketing/Operacje/Wsparcie.
17) Plan działania w zakresie wdrażania
MVP (3-6 tygodni):1. wzór rejestru i artefakty niezmienne; Usługa FastAPI/gRPC + K8s/Helm.
2. Start cieni z monitorowaniem p95/5xx/dryfem, test równoważności funkcji.
3. Kanaryjski 10% → 50% → 100% z auto-script rollback i wpisy.
4. Karta modelowa, kalibracja, oczekiwany próg kosztów i poręcze v1.
Faza 2 (6-12 tygodni):- Funkcja pamięci podręcznej, wyłączniki, runbooks/DR ćwiczenia.
- Autoskalowanie na RPS/opóźnienie, deska rozdzielcza i obciążenie zwrotne.
- Monitoring kawałków sprawiedliwości, archiwum uwolnienia WORM.
- Wykres porcji (kandydaci → re-rank), skłonność do rejestrowania łupków.
- Multi-region, rezydencja (EEA/UK/BR) z pojedynczymi kluczykami.
- Auto-roll/overdrive, raporty o jakości autogenu/kalibracji.
18) Lista kontrolna dostawy
- Karta modelowa jest pełna; dane/cechy/kalibracja/progi są wersjonowane.
- Funkcja umów i test równoważności online/offline są zielone.
- SLO: p95, 5xx, pokrycie - zielony na cieniu i 10% kanaryjski ≥ 24 h.
- Uwzględniono wpisy i deski rozdzielcze (opóźnienia/błędy/dryfowanie/przewidywany koszt).
- Aktywne są poręcze RG/AML oraz audyty rozwiązań; PII/miejsce zamieszkania.
- Testowane zdarzenia w książce startowej i odwróceniu jednego kliknięcia.
- Koszt wpisuje się w budżet; HPA i pamięć podręczna są skonfigurowane.
19) Przeciwdziałanie modelom i ryzyku
Ręczne rollouts bez rejestru i niezmiennych artefaktów.
Niespójne funkcje online/offline → rozbieżności w sprzedaży.
Nie cień/kanarka → ukryte regresje.
Próg nie jest oczekiwany koszt, nie ma kalibracji.
Synchroniczne wyszukiwanie zewnętrzne bez czasu/pamięci podręcznej.
Brak DR/rollback, brak archiwum wydawania WORM.
20) Sedno sprawy
Produkcja ML nie jest „wyzwaniem modelowym”, ale platformą inżynieryjną: rejestr i wersje, bezpieczne rollouts (cień/kanaryjski/niebiesko-zielony), dyscyplina funkcji i kalibracji, obserwowalność i SLO, szyny ochronne dla RG/AML i jasny plan rollback. Podążając za tym playbookiem, otrzymasz szybki, niezawodny i zgodny wniosek, który konsekwentnie zapewnia wartość biznesową po kontrolowanych kosztach.