Ҷойгиркунии моделҳои ML
1) Нақш ва ҳадафҳо
Ҷойгиркунӣ = Таҳвили боэътимод ба маҳсулот ва амалиёт ҳангоми қонеъ кардани RG/AML/ҳуқуқӣ ва буҷа.
Ҳадафҳо: таъхири кам, дастрасии баланд, репродуктивӣ, бехатарӣ ва суръати тез.
2) Хизматрасонии меъморӣ
2. 1 Намунаҳо
Онлайн (дар вақти воқеӣ): REST/gRPC, p95 50-150 ms барои фардикунонӣ; ≤ 2 -5 s барои огоҳиҳои RG/AML.
Вақти воқеӣ: микро-бозии 1-5 дақиқа (OLAP-намоишҳо).
Партия/офлайн: Намоишҳои шаби тиллоӣ, содироти WORM барои танзимгар.
Баҳодиҳии ҷараён: ворид кардани модели нур ба хидмат (таъхири кам).
Serverless: хусусиятҳои оғози хунук барои вазифаҳои нодир.
2. 2 Топология
Хадамоти ягонаи моделӣ → оддӣ ва зуд.
Ансамбль/График (роутер → preprocess → model → postprocess) → қубурҳои мураккаб.
Sidecar Feature Fetcher → хусусиятҳои онлайнро аз кэшҳо мегирад (Редис/Скилла).
3) Сабти моделҳо ва версияҳо
Феҳрист: 'model _ id', 'version', 'stage = {Марҳила, Истеҳсол, бойгонӣ}', артефактҳо (вазн, протсессор, калибрченкунӣ), талабот (CPU/GPU/хотира), корти намунавӣ (маълумот, ченакҳо, хатарҳо, адолат).
Артефактҳои тағйирнопазир: мундариҷа-ҳаш; Нусхаҳои WORM.
Сиёсати баромад: тавассути бақайдгирӣ ва декларативӣ танҳо зоҳир мешавад.
4) Контейнеризатсия ва бастабандӣ
Dockerfile: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"]
Сервер (Fast
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) Кубернетес/Ҳелм ва Автоскалинг
Ҷойгиркунӣ (порча):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 (аз ҷониби 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) Стратегияҳои паҳнкунӣ
Соя: модели нав нусхаҳои дархостҳоро коркард мекунад, ҷавобҳо нодида гирифта мешаванд; муқоисаи ченакҳо/ниҳонӣ/арзиш.
Канария: 1-10% трафик → 25% → 50% → 100% бо SLO-ҳои сабз; бозгашти худкор ба таназзул.
Кабуд-Сабз: стекҳои параллелӣ; гузариши фаврии масир.
Парчами тадриҷии хусусият: Масири бозор/иҷорагир/дастгоҳ.
A/B/n: таҷрибаҳои онлайн бо санҷиши пайдарпай.
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) Хусусияти онлайн/офлайн: эквивалент
Китобхонаи ягонаи трансформатсия ва мағозаи хусусият (онлайн + офлайн).
Санҷиши эквивалентӣ: MAE/MAPE байни хусусиятҳои онлайн ва истинодҳои офлайнӣ дар намунаҳои истинод.
Хусусияти кэш: Redis/Scylla, TTL барои хусусиятҳои тиреза; танаффус ва камбудиҳо.
8) Мушоҳида, SLO ва ҳушдордиҳӣ
8. 1 Нишондиҳандаҳои SLI/SLO
Таъхир: p95 ≤ 150 ms (фардикунонӣ), p99 ≤ 300 ms; Огоҳии RG/AML ≤ 5 бо хотима.
Мавҷудият: ≥ 99. 9%.
Хулосаи хато: ≤ 0. 5% 5xx; фарогирӣ ≥ 99%.
Дрифт: Хусусияти PSI <ҳадди ниҳоӣ, ECE (калибрченкунӣ) устувор аст.
Бизнес: боло бурдани даромади холис, қаллобӣ сарфа, мудохилаи вақт.
8. 2 Метрика (Прометей)
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
Огоҳиҳо (порча):
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
Трейсинг: Open. Telemetry - span 'suy' feature _ fetch ',' хол ',' postprocess ',' Guardrail '.
9) Гвардияи RG/AML ва сиёсати амният
Филтри пешакӣ/пас аз филтр: ниқобҳои амалҳои манъшуда (басомади таассурот, сардшавӣ, манъи пешниҳодҳои хашмгин).
Муҳофизати сиёсат: суръат аз ҳадди RG → дахолати мулоим/таваққуф.
Аудит: сабти 'policy _ id', 'майл', 'ниқоб', 'қарор', 'сабаб'.
PII ва истиқомат: нишонаҳо ба ҷои ID, калидҳои алоҳида ва кластерҳо дар EEA/UK/BR; манъи пайвастшавӣ ба минтақа бидуни асос.
Асрҳо: KMS/CMK, Менеҷери Махфӣ; PII дар гузоришҳо/роҳҳо нест.
10) Калибрченкунӣ, ҳудудҳо ва сиёсати қарор
Калибрченкунӣ (Платт/Изотоникӣ) ҳамчун артефакт.
Ҳадди ниҳоӣ бо арзиши пешбинишуда; танзимшаванда дар парчами сабти ном/хусусият.
Сарпӯшҳои бехатарӣ: маҳдудиятҳои амали болоӣ/поёнӣ, дастӣ барои мувофиқат бекор карда мешаванд.
11) Рӯйдодҳо, таназзул ва DR
Бозгашти як клик - Хатсайрро ба 'model _ version' -и қаблӣ иваз мекунад.
Runbook: скриптҳои "latentnost *", "5xx) хатогиҳо", "дрифт/калибрченкунӣ шикастанд", "провайдери хусусияти беруна дастнорас".
Ҷудокунии хатогӣ: вайронкунандаи ноҳиявӣ, такрорӣ/ақибмонӣ, кэши ҳалли охирини эътибор.
DR: нусхаҳои артефактҳо/феҳристҳо, нусхабардорӣ ба минтақаи "гарм", машқҳо.
python try:
features = fetch_features(timeout=30)
except TimeoutError:
features = last_known_good(user_id) # fallback
12) Муҳандисӣ ва иҷрои хароҷот
Профили роҳ: хусусиятҳо (30-60%), модел (20-40%), шабака/IO (10-30%).
Кам кардани хароҷот: кэши хусусиятҳои гарм, квотаи такрорӣ, моделҳои сабук, INT8/FP16 (агар лозим бошад), танбалӣ-постпросесс.
HPA оид ба RPS/CPU/ниҳонӣ, маҳдудияти андозаи давлатӣ дар хусусияти ҷараён.
Пардохт: арзиш/дархост, арзиш/хусусият; буҷа барои бозорҳо/дастаҳо.
13) Варақаҳои бехатар ва мувофиқат
Меъёрҳои омодагии маҳсулот: SLO сабз дар соя, ғусса/ихроҷ нест, корти намунавӣ пур аст, иловаро одилона муқаррарӣ аст.
Танзимкунанда: WORM-бойгонии озодкунӣ (вазнҳо, калибрченкунӣ, ҳудудҳо, ченакҳо, гузоришҳои санҷишӣ), гузоришҳои тағйирнопазири содирот.
DSAR/RTBF: тартиби аз байн бурдани нишонаҳои корбари мушаххас аз кэш/гузоришҳо/хусусиятҳо.
14) QA пеш аз ролик
Санҷишҳои ҳамгироӣ: шартномаи API, диаграммаҳои хос, ҳолатҳои холӣ/шадид.
Сарборӣ: p99, думҳои тақсимот, ҳаракати нақлиёт.
Санҷиши эквиваленти онлайн/офлайн.
Санҷишҳои бесарусомонӣ: хомӯш кардани хусусияти кэш/пойгоҳ, таъхири хидматҳои беруна.
15) Намунаҳои конфигуратсия
Ingress бо масири канарӣ (идея):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}
Саломатии намунавӣ (нуқтаи ниҳоӣ):
python
@app. get("/healthz")
def health():
return {"ok": True, "model_version": "1. 8. 3", "registry_sig_ok": verify_signature()}
16) Равандҳо ва RACI
R (Масъул): MLOps (хидматрасонӣ/оркестр/мушоҳида), Data Eng (хусусиятҳо/кэшҳо/шартномаҳо), Илми маълумот (кортҳои намунавӣ/калибрченкунӣ/ҳудудҳо).
A (Ҳисоботдиҳанда): Роҳбари маълумот/CDO.
C (Машварат): Мувофиқат/DPO (PII/RG/AML/DSAR), Амният (KMS/Асрҳо/Аудит), SRE (SLO/Ҳодисаҳо), Молия (ROI/Буҷаҳо).
I (Маълумот): Маҳсулот/Маркетинг/Амалиёт/Дастгирӣ.
17) Харитаи роҳсозӣ
MVP (3-6 ҳафта):1. Феҳристи намунавӣ ва артефактҳои тағйирнопазир; Хидмати Fast-API/GRPC + K8s/Helm.
2. Оғози соя бо мониторинги p95/5xx/drift, санҷиши эквиваленти хусусият.
3. Canary 10% → 50% → 100% бо баргардонидани худкори скрипт ва огоҳиҳо.
4. Корти намунавӣ, калибрченкунӣ, ҳадди интизорраванда ва Guardrails v1.
Марҳилаи 2 (6-12 ҳафта):- Хусусияти кэш, схемаҳо, дафтарчаҳо/машқҳои DR.
- Autoscaling оид ба RPS/ниҳонӣ, панели хароҷот ва пардохт.
- Мониторинги буридаи одилона, бойгонии WORM.
- Графикаи хидматрасонӣ (номзадҳо → аз нав дараҷа), майли шифер.
- Бисёр минтақаҳо, истиқомат (EEA/UK/BR) бо калидҳои инфиродӣ.
- Ҳисоботи худкор/overdrive, сифати автоген/калибрченкунӣ.
18) Рӯйхати назорати таҳвил
- Корти намунавӣ пур аст; маълумот/хусусиятҳо/калибрченкунӣ/ҳудудҳо санҷида мешаванд.
- Хусусияти шартномаҳо ва санҷиши эквиваленти онлайн/офлайнӣ сабз мебошанд.
- SLO: p95, 5xx, фарогирӣ - сабз дар соя ва 10% канарӣ ≥ 24 соат.
- Огоҳиҳо ва панели панелҳо (таъхир/хатогиҳо/дрифт/арзиши пешбинишуда) дохил карда мешаванд.
- Гвардиячиёни RG/AML ва аудити ҳалли онҳо фаъоланд; PII/истиқомат мулоқот карданд.
- Ҳодисаҳои як клик ва дафтарчаи санҷишӣ санҷида шуданд.
- Хароҷот ба буҷа мувофиқат мекунад; HPA ва кэш танзим карда мешаванд.
19) Анти-намунаҳо ва хатарҳо
Тарҳҳои дастӣ бидуни сабти ном ва артефактҳои тағйирнопазир.
Хусусиятҳои номувофиқи онлайн/офлайнӣ → номувофиқатӣ дар фурӯш.
Не соя/канарӣ → регрессияи пинҳон.
Ҳадди ниҳоӣ интизор нест, калибрченкунӣ вуҷуд надорад.
Ҷустуҷӯи берунаи синхронӣ бидуни танаффус/кэш.
Не DR/rollback, ягон бойгонии баромади WORM нест.
20) Сатри поён
Истеҳсоли ML на "мушкилоти моделӣ", балки платформаи муҳандисӣ мебошад: феҳрист ва версияҳо, тарҳҳои бехатар (соя/канарӣ/кабуд-сабз), интизоми хусусият ва калибрченкунӣ, мушоҳида ва SLO, посбонҳо барои RG/AML ва нақшаи равшани бозгашт. Бо пайравӣ аз ин китоби бозӣ, шумо як хулосаи зуд, боэътимод ва мувофиқро мегиред, ки пайваста арзиши тиҷоратро бо арзиши назоратшаванда таъмин мекунад.