Model registri: hozir qaysi model ishlayapti?
model_final_v2_YANGI_oxirgi.pkl
Yangi ishga kirdingiz. Sizga modelni yaxshilash topshirildi.
Papkani ochasiz:
model.pkl model_v2.pkl model_final.pkl model_final_v2.pkl model_final_v2_YANGI.pkl model_final_v2_YANGI_oxirgi.pkl model_ishlaydi_TEGMA.pkl
Yetti fayl. Bitta savol: hozir ishlab chiqarishda qaysi biri turibdi?
Hamkasbingizdan so'raysiz. U o'ylanadi. "Menimcha model_ishlaydi_TEGMA bo'lsa kerak... yoki
oxirgi mi? Uni Aziz qo'ygan edi, u ishdan ketgan."
Endi ikkinchi savol: bu model qaysi ma'lumotda o'qitilgan? Uchinchi: uning F1 qancha edi? To'rtinchi: kimdir uni tekshirganmi?
Hech biriga javob yo'q. Va eng yomoni — bu holat normal hisoblanadi.
Kutubxona va kitob javoni
Muammo fayllarda emas, tartibda.
Kutubxonani tasavvur qiling. Har kitobning raqami bor, katalogda kim olgani yozilgan, javonda "o'qish zali uchun" va "uyga berish mumkin" degan belgilar bor.
Endi o'sha kutubxonani katalogsiz tasavvur qiling: kitoblar bor, lekin qaysi biri qayerda va kim olganini hech kim bilmaydi. Kitoblar yo'qolmaydi — faqat topilmaydi.
Model registri — o'sha katalog. U modelni saqlamaydi (modellar allaqachon saqlangan), u kim, qachon, nima uchun degan savollarga javob beradi va har modelga holat beradi: sinovdami, ishlab chiqarishdami, arxivdami.
Savol oddiy, javob odatda yo'q
22-bobda o'nlab tajriba yozdik. Endi bittasini tanlab, ishlab chiqarishga chiqarish kerak. Va shu yerda savollar boshlanadi:
import pandas as pd show(pd.DataFrame([ {"savol": "Hozir serverda qaysi model?", "fayl nomi bilan": "model_final_v2.joblib — qaysi tajriba?"}, {"savol": "Kim va qachon chiqargan?", "fayl nomi bilan": "Fayl vaqti — lekin kim noma'lum"}, {"savol": "Oldingisiga qaytsak bo'ladimi?", "fayl nomi bilan": "Eski fayl saqlanganmi? Balki yo'q"}, {"savol": "Bu model qaysi ma'lumotda o'qitilgan?", "fayl nomi bilan": "Hech qayerda yozilmagan"}, {"savol": "Sinovdan o'tganmi?", "fayl nomi bilan": "Og'zaki kelishuv"}, ]))
| savol | fayl nomi bilan |
|---|---|
| Hozir serverda qaysi model? | model_final_v2.joblib — qaysi tajriba? |
| Kim va qachon chiqargan? | Fayl vaqti — lekin kim noma'lum |
| Oldingisiga qaytsak bo'ladimi? | Eski fayl saqlanganmi? Balki yo'q |
| Bu model qaysi ma'lumotda o'qitilgan? | Hech qayerda yozilmagan |
| Sinovdan o'tganmi? | Og'zaki kelishuv |
Model registri shu savollarga javob beradi. U model fayllarini emas, model versiyalarini va ularning holatini boshqaradi.
Registr qanday ishlaydi
diagramma( { "Tajriba\n(22-bob)": (0, 1.8, 2.3, 1.0, "qayta"), "REGISTR\nnomli model": (3.1, 1.8, 2.5, 1.0, "saqlash"), "v1": (6.4, 0, 1.5, 0.8, "oddiy"), "v2 (Staging)": (6.4, 1.3, 2.4, 0.8, "kuzatuv"), "v3 (Production)": (6.4, 2.6, 2.7, 0.8, "xizmat"), "v4 (Archived)": (6.4, 3.9, 2.5, 0.8, "oddiy"), }, [ ("Tajriba\n(22-bob)", "REGISTR\nnomli model", "ro'yxatga olish"), ("REGISTR\nnomli model", "v2 (Staging)"), ("REGISTR\nnomli model", "v3 (Production)"), ], nom="registr.png", kenglik=12, izoh="Bitta nom, ko'p versiya. Har versiyaning holati bor: Staging, Production, Archived.", )

Bitta nom, ko'p versiya. Har versiyaning holati bor: Staging, Production, Archived.
Asosiy g'oya: xizmat kodi fayl yo'lini emas, models:/broker-aniqlash@production kabi
mantiqiy manzilni so'raydi. Qaysi versiya "production" ekanini registr biladi.
Modelni ro'yxatga olamiz
shu faylni yaratingsrc/quvur/registr.py
"""MLflow Model Registry bilan ishlash. MLflow 3.x da bosqichlar (stages) o'rniga ALIAS lar ishlatiladi: @champion, @production, @staging — istalgan nom. Alias bitta versiyaga ishora qiladi va uni bir buyruq bilan ko'chirish mumkin. """ from typing import Any import mlflow from mlflow.tracking import MlflowClient def royxatga_ol(yugurish_id: str, model_nomi: str, artefakt: str = "model") -> int: """Tajriba artefaktini registrga qo'shadi. Yangi versiya raqamini qaytaradi.""" natija = mlflow.register_model(f"runs:/{yugurish_id}/{artefakt}", model_nomi) return int(natija.version) def alias_qoy(model_nomi: str, alias: str, versiya: int) -> None: """Aliasni versiyaga bog'laydi. Eski bog'lanish avtomatik uziladi.""" MlflowClient().set_registered_model_alias(model_nomi, alias, str(versiya)) def alias_versiyasi(model_nomi: str, alias: str) -> int | None: try: return int(MlflowClient().get_model_version_by_alias(model_nomi, alias).version) except Exception: return None def versiyalar(model_nomi: str) -> list[dict[str, Any]]: """Barcha versiyalar: raqam, aliaslar, metrikalar.""" k = MlflowClient() chiqish = [] for v in k.search_model_versions(f"name='{model_nomi}'"): y = k.get_run(v.run_id) if v.run_id else None chiqish.append({ "versiya": int(v.version), "aliaslar": list(v.aliases or []), "f1": round(y.data.metrics.get("f1", 0), 4) if y else None, "yugurish": (v.run_id or "")[:8], }) return sorted(chiqish, key=lambda x: x["versiya"]) def yukla(model_nomi: str, alias: str = "production"): """Xizmat kodi FAQAT shuni chaqiradi — fayl yo'li bilan ishlamaydi.""" return mlflow.sklearn.load_model(f"models:/{model_nomi}@{alias}")
Avval tajribalar borligiga ishonch hosil qilamiz. Bu bobni alohida o'qiyotgan bo'lsangiz ham ishlashi uchun, tajriba bo'lmasa — yaratamiz:
python3 -c " import sys; sys.path.insert(0, 'src') import mlflow from quvur.kuzatuv import omborni_sozla omborni_sozla() bor = 0 try: bor = len(mlflow.search_runs(experiment_names=['broker-aniqlash'])) except Exception: pass print('mavjud tajribalar:', bor) if bor < 2: print('22-bobdagi tajribalarni qayta yaratamiz...') kod = open('oqit_mlflow.py').read().split('if __name__')[0] ns = {'__name__': 'setup'} exec(kod, ns) ns['omborni_sozla']() for par, nom in [({'n_estimators': 30, 'min_samples_leaf': 1}, 'kichik-30'), ({'n_estimators': 150, 'min_samples_leaf': 20}, 'sodda-barg20')]: m = ns['bitta_yugurish'](par, nom) print(f\" {nom:14} F1={m['f1']:.4f}\") "
mavjud tajribalar: 0 22-bobdagi tajribalarni qayta yaratamiz... kichik-30 F1=0.8585 sodda-barg20 F1=0.8630 /home/abulqosim/.local/lib/python3.10/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (2.6.3) or chardet (6.0.0.post1)/charset_normalizer (3.4.4) doesn't match a supported version! warnings.warn( 2026/09/29 18:57:51 INFO mlflow.agent.hint: Load the `instrumenting-with-mlflow-tracing` skill at /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/assistant/skills/instrumenting-with-mlflow-tracing/SKILL.md before writing any tracing code; it ships with this MLflow install. Set MLFLOW_DISABLE_AGENT_HINT=1 to silence this. 2026/09/29 18:57:52 INFO mlflow.store.db.utils: Creating initial MLflow database tables... 2026/09/29 18:57:52 INFO mlflow.store.db.utils: Updating database tables 2026/09/29 18:58:18 WARNING mlflow.tracking.fluent: Cannot retrieve experiment by name broker-aniqlash 2026/09/29 18:58:20 INFO mlflow.tracking.fluent: Experiment with name 'broker-aniqlash' does not exist. Creating a new experiment. /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/types/utils.py:440: UserWarning: Hint: Inferred schema contains integer column(s). Integer columns in Python cannot represent missing values. If your input data contains missing values at inference time, it will be encoded as floats and will cause a schema enforcement error. The best way to avoid this problem is to infer the model schema based on a realistic data sample (training dataset) that includes missing values. Alternatively, you can declare integer columns as doubles (float64) whenever these columns may have missing values. See `Handling Integers With Missing Values <https://www.mlflow.org/docs/latest/models.html#handling-integers-with-missing-values>`_ for more details. warnings.warn( /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/types/utils.py:440: UserWarning: Hint: Inferred schema contains integer column(s). Integer columns in Python cannot represent missing values. If your input data contains missing values at inference time, it will be encoded as floats and will cause a schema enforcement error. The best way to avoid this problem is to infer the model schema based on a realistic data sample (training dataset) that includes missing values. Alternatively, you can declare integer columns as doubles (float64) whenever these columns may have missing values. See `Handling Integers With Missing Values <https://www.mlflow.org/docs/latest/models.html#handling-integers-with-missing-values>`_ for more details. warnings.warn( 2026/09/29 18:58:29 WARNING mlflow.utils.requirements_utils: Found torch version (2.9.1+cu128) contains a local version label (+cu128). MLflow logged a pip requirement for this package as 'torch==2.9.1' without the local version label to make it installable from PyPI. To specify pip requirements containing local version labels, please use `conda_env` or `pip_requirements`. /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/types/utils.py:440: UserWarning: Hint: Inferred schema contains integer column(s). Integer columns in Python cannot represent missing values. If your input data contains missing values at inference time, it will be encoded as floats and will cause a schema enforcement error. The best way to avoid this problem is to infer the model schema based on a realistic data sample (training dataset) that includes missing values. Alternatively, you can declare integer columns as doubles (float64) whenever these columns may have missing values. See `Handling Integers With Missing Values <https://www.mlflow.org/docs/latest/models.html#handling-integers-with-missing-values>`_ for more details. warnings.warn( /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/types/utils.py:440: UserWarning: Hint: Inferred schema contains integer column(s). Integer columns in Python cannot represent missing values. If your input data contains missing values at inference time, it will be encoded as floats and will cause a schema enforcement error. The best way to avoid this problem is to infer the model schema based on a realistic data sample (training dataset) that includes missing values. Alternatively, you can declare integer columns as doubles (float64) whenever these columns may have missing values. See `Handling Integers With Missing Values <https://www.mlflow.org/docs/latest/models.html#handling-integers-with-missing-values>`_ for more details. warnings.warn( 2026/09/29 18:58:38 WARNING mlflow.utils.requirements_utils: Found torch version (2.9.1+cu128) contains a local version label (+cu128). MLflow logged a pip requirement for this package as 'torch==2.9.1' without the local version label to make it installable from PyPI. To specify pip requirements containing local version labels, please use `conda_env` or `pip_requirements`.
Endi ikkita tajribani registrga qo'shamiz:
python3 -c " import sys; sys.path.insert(0, 'src') import mlflow from quvur.kuzatuv import omborni_sozla from quvur.registr import royxatga_ol, versiyalar omborni_sozla() MODEL = 'broker-aniqlash' y = mlflow.search_runs(experiment_names=['broker-aniqlash'], filter_string=\"attributes.status = 'FINISHED'\", order_by=['metrics.f1 ASC']) # ataylab: avval yomonroq, keyin yaxshiroq — versiya tarixi ko'rinsin for _, q in y.head(2).iterrows(): v = royxatga_ol(q['run_id'], MODEL) print(f\" v{v} <- {q['tags.mlflow.runName']:14} F1={q['metrics.f1']:.4f}\") "
v1 <- kichik-30 F1=0.8585 v2 <- sodda-barg20 F1=0.8630 /home/abulqosim/.local/lib/python3.10/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (2.6.3) or chardet (6.0.0.post1)/charset_normalizer (3.4.4) doesn't match a supported version! warnings.warn( 2026/09/29 18:58:40 INFO mlflow.agent.hint: Load the `instrumenting-with-mlflow-tracing` skill at /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/assistant/skills/instrumenting-with-mlflow-tracing/SKILL.md before writing any tracing code; it ships with this MLflow install. Set MLFLOW_DISABLE_AGENT_HINT=1 to silence this. Successfully registered model 'broker-aniqlash'. 2026/09/29 18:58:41 WARNING mlflow.tracking._model_registry.fluent: Run with id 3f1ff930661541a7aa5e3c4cd8bd8a05 has no artifacts at artifact path 'model', registering model based on models:/m-d6f5cb42270c4ac1985197f95b5dd1be instead Created version '1' of model 'broker-aniqlash'. Registered model 'broker-aniqlash' already exists. Creating a new version of this model... 2026/09/29 18:58:41 WARNING mlflow.tracking._model_registry.fluent: Run with id 6930f36afa614251a7c2cd7d54b1d37d has no artifacts at artifact path 'model', registering model based on models:/m-032d58bbb6104785a23d2e9ad6b91d08 instead Created version '2' of model 'broker-aniqlash'.
python3 -c " import sys; sys.path.insert(0, 'src') from quvur.kuzatuv import omborni_sozla from quvur.registr import versiyalar omborni_sozla() for v in versiyalar('broker-aniqlash'): a = ', '.join(v['aliaslar']) if v['aliaslar'] else 'yoq' print(f\" v{v['versiya']} F1={v['f1']} aliaslar={a}\") "
v1 F1=0.8585 aliaslar=yoq v2 F1=0.863 aliaslar=yoq /home/abulqosim/.local/lib/python3.10/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (2.6.3) or chardet (6.0.0.post1)/charset_normalizer (3.4.4) doesn't match a supported version! warnings.warn( 2026/09/29 18:58:43 INFO mlflow.agent.hint: Load the `instrumenting-with-mlflow-tracing` skill at /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/assistant/skills/instrumenting-with-mlflow-tracing/SKILL.md before writing any tracing code; it ships with this MLflow install. Set MLFLOW_DISABLE_AGENT_HINT=1 to silence this.
Hozircha ikki versiya bor, lekin hech biri "production" emas. Xizmat qaysi birini olishini bilmaydi — va bu to'g'ri: hali hech kim tanlov qilmagan.
Alias: qaysi versiya ishlaydi
Registrda endi bir nechta versiya bor: v1, v2, v3. Savol tug'iladi — qaysi biri hozir ishlab chiqarishda?
Birinchi xayolga keladigan javob: "eng oxirgisi". Lekin bu xato, va xato qimmat.
Yangi versiya o'qitilgani uni yaxshi qiladi degani emas. U hali sinalmagan bo'lishi mumkin, yoki sinovdan o'tmagan bo'lishi mumkin. "Eng oxirgi" qoidasi har o'qitishdan keyin ishlab chiqarishga tekshirilmagan modelni chiqaradi.
Kerak bo'lgan narsa — versiya raqamidan alohida belgi. Uni alias deb ataymiz.
Teatrdagi rollarni tasavvur qiling. "Hamlet" rolini bugun Aziz o'ynaydi, ertaga Bobur. Tomoshabin afishaga qaraydi va "Hamlet" ni ko'radi — aktyor ismini emas.
Rejissor aktyorni almashtirsa, afisha o'zgarmaydi. Rol o'sha, ijrochi boshqa.
Registrda ham shunday:
production— hozir mijozlarga xizmat qilayotgan versiyastaging— sinovdan o'tayotgan versiyachampion/challenger— taqqoslanayotgan ikkita
Alias ko'chib yuradi: bugun v1 da, ertaga v3 da. Versiyalarning o'zi esa hech qachon o'zgarmaydi.
python3 -c " import sys; sys.path.insert(0, 'src') from quvur.kuzatuv import omborni_sozla from quvur.registr import alias_qoy, alias_versiyasi, versiyalar omborni_sozla() MODEL = 'broker-aniqlash' alias_qoy(MODEL, 'production', 1) print('production ->', alias_versiyasi(MODEL, 'production')) alias_qoy(MODEL, 'staging', 2) print('staging ->', alias_versiyasi(MODEL, 'staging')) print() for v in versiyalar(MODEL): print(f\" v{v['versiya']} F1={v['f1']} {v['aliaslar']}\") "
production -> 1 staging -> 2 v1 F1=0.8585 [] v2 F1=0.863 [] /home/abulqosim/.local/lib/python3.10/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (2.6.3) or chardet (6.0.0.post1)/charset_normalizer (3.4.4) doesn't match a supported version! warnings.warn( 2026/09/29 18:58:45 INFO mlflow.agent.hint: Load the `instrumenting-with-mlflow-tracing` skill at /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/assistant/skills/instrumenting-with-mlflow-tracing/SKILL.md before writing any tracing code; it ships with this MLflow install. Set MLFLOW_DISABLE_AGENT_HINT=1 to silence this.
Xizmat kodi fayl yo'lini bilmaydi
Bu registrning asosiy foydasi. Xizmat shunday yoziladi:
python3 -c " import sys; sys.path.insert(0, 'src') import pandas as pd from quvur.kuzatuv import omborni_sozla from quvur.registr import yukla omborni_sozla() XUS = ['xonalar','maydon','qavat','jami_qavat','narx_mln','tavsif_uzunligi', 'rasmlar_soni','telefon_takrorlanishi','kunlik_elonlar','egasi_tasdiqlangan'] d = pd.read_csv('../datasets/ijara.csv').head(5) m = yukla('broker-aniqlash', 'production') # fayl yo'li YO'Q p = m.predict_proba(d[XUS])[:, 1] print('production modeli yuklandi:', type(m).__name__) print('bashoratlar:', [round(float(x), 3) for x in p]) "
production modeli yuklandi: RandomForestClassifier bashoratlar: [0.2, 0.167, 0.9, 0.033, 1.0] /home/abulqosim/.local/lib/python3.10/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (2.6.3) or chardet (6.0.0.post1)/charset_normalizer (3.4.4) doesn't match a supported version! warnings.warn( 2026/09/29 18:58:47 INFO mlflow.agent.hint: Load the `instrumenting-with-mlflow-tracing` skill at /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/assistant/skills/instrumenting-with-mlflow-tracing/SKILL.md before writing any tracing code; it ships with this MLflow install. Set MLFLOW_DISABLE_AGENT_HINT=1 to silence this.
Kodga diqqat bilan qarang: unda hech qanday .joblib, hech qanday papka yo'li yo'q.
Faqat ikkita so'z: model nomi va alias.
Nega bu shunchalik muhim? Chunki bu kim nima qilishini ajratadi.
Ilgari model almashtirish uchun dasturchi kerak edi: kodda yo'lni o'zgartirish, sinash, tarqatish. Endi esa alias ko'chiriladi — va bu bir buyruq, kodga tegmasdan.
Amaliy natijalar:
- Model almashtirish uchun deploy kerak emas (30-bobda bu qayta tiklash uchun asos bo'ladi).
- Yomon model chiqsa, aliasni orqaga ko'chirasiz — soniyalar ichida.
- Ishlab chiqarishda qaysi model turgani bir joyda yozilgan, kimningdir esida emas.
Teatr afishasini eslang: tomoshabin aktyor almashganini sezmaydi ham.
Yangi versiyani chiqarish (promote)
Endi staging dagi model sinovdan o'tdi deylik. Uni production ga ko'chiramiz — bitta buyruq:
python3 -c " import sys; sys.path.insert(0, 'src') from quvur.kuzatuv import omborni_sozla from quvur.registr import alias_qoy, alias_versiyasi omborni_sozla() MODEL = 'broker-aniqlash' eski = alias_versiyasi(MODEL, 'production') yangi = alias_versiyasi(MODEL, 'staging') print(f'oldin : production = v{eski}') alias_qoy(MODEL, 'production', yangi) print(f'keyin : production = v{alias_versiyasi(MODEL, \"production\")}') print() print('eski versiya o\'chmadi — u hali ham registrda turibdi.') "
oldin : production = v1 keyin : production = v2 eski versiya o'chmadi — u hali ham registrda turibdi. /home/abulqosim/.local/lib/python3.10/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (2.6.3) or chardet (6.0.0.post1)/charset_normalizer (3.4.4) doesn't match a supported version! warnings.warn( 2026/09/29 18:58:52 INFO mlflow.agent.hint: Load the `instrumenting-with-mlflow-tracing` skill at /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/assistant/skills/instrumenting-with-mlflow-tracing/SKILL.md before writing any tracing code; it ships with this MLflow install. Set MLFLOW_DISABLE_AGENT_HINT=1 to silence this.
Orqaga qaytarish (rollback)
Yangi model yomon ishlayotgani ma'lum bo'ldi. Qaytarish ham bitta buyruq:
python3 -c " import sys; sys.path.insert(0, 'src') from quvur.kuzatuv import omborni_sozla from quvur.registr import alias_qoy, alias_versiyasi, versiyalar omborni_sozla() MODEL = 'broker-aniqlash' print('muammo aniqlandi, production =', f'v{alias_versiyasi(MODEL, \"production\")}') alias_qoy(MODEL, 'production', 1) print('rollback qilindi, production =', f'v{alias_versiyasi(MODEL, \"production\")}') print() for v in versiyalar(MODEL): print(f\" v{v['versiya']} F1={v['f1']} {v['aliaslar']}\") "
muammo aniqlandi, production = v2 rollback qilindi, production = v1 v1 F1=0.8585 [] v2 F1=0.863 [] /home/abulqosim/.local/lib/python3.10/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (2.6.3) or chardet (6.0.0.post1)/charset_normalizer (3.4.4) doesn't match a supported version! warnings.warn( 2026/09/29 18:58:55 INFO mlflow.agent.hint: Load the `instrumenting-with-mlflow-tracing` skill at /home/abulqosim/.local/lib/python3.10/site-packages/mlflow/assistant/skills/instrumenting-with-mlflow-tracing/SKILL.md before writing any tracing code; it ships with this MLflow install. Set MLFLOW_DISABLE_AGENT_HINT=1 to silence this.
Mana nima uchun registr kerak: rollback soniyalarda bo'ladi va model qayta o'qitilmaydi. Fayl bilan ishlaganda eski modelni topish, nusxalash va serverni qayta yuklash kerak edi.
Rollback — bu tuzatish emas
Rollback muammoni to'xtatadi, lekin sababini yo'qotmaydi. Qaytargandan keyin:
- Nima uchun yangi model yomon ishlaganini aniqlang (35-bob: drift)
- Sinov to'plamiga o'sha holatni qo'shing
- Shundan keyingina qayta urinib ko'ring
Aks holda o'sha muammo keyingi chiqarishda qaytadi.
Nima registrga tushadi, nima tushmaydi
import pandas as pd show(pd.DataFrame([ {"narsa": "Model vaznlari", "registrda": "HA", "izoh": "Asosiy artefakt"}, {"narsa": "Qaysi tajribadan", "registrda": "HA", "izoh": "run_id saqlanadi"}, {"narsa": "Metrikalar", "registrda": "HA", "izoh": "Tajriba orqali bog'langan"}, {"narsa": "Xususiyat tayyorlash kodi", "registrda": "QISMAN", "izoh": "3-bob: birga qadoqlansin"}, {"narsa": "O'qitish ma'lumoti", "registrda": "YO'Q", "izoh": "5-bob: hash tegi bilan bog'lanadi"}, {"narsa": "Kim tasdiqladi", "registrda": "HA", "izoh": "Teg yoki tavsif orqali"}, ]))
| narsa | registrda | izoh |
|---|---|---|
| Model vaznlari | HA | Asosiy artefakt |
| Qaysi tajribadan | HA | run_id saqlanadi |
| Metrikalar | HA | Tajriba orqali bog'langan |
| Xususiyat tayyorlash kodi | QISMAN | 3-bob: birga qadoqlansin |
| O'qitish ma'lumoti | YO'Q | 5-bob: hash tegi bilan bog'lanadi |
| Kim tasdiqladi | HA | Teg yoki tavsif orqali |
To'rtinchi qator muhim: model xususiyat tayyorlash kodisiz ma'nosiz. 3-bobdagi
o'qitish/xizmat nomuvofiqligini eslang. Shuning uchun modelni saqlashda tayyorlash kodini ham
birga qadoqlash kerak — buni 26-bobda pipeline bilan qilamiz.
Registr va bosqichlar
import pandas as pd show(pd.DataFrame([ {"alias": "@champion", "ma'nosi": "Hozirgi eng yaxshi, lekin hali chiqarilmagan"}, {"alias": "@staging", "ma'nosi": "Sinov muhitida ishlayapti"}, {"alias": "@production", "ma'nosi": "Mijozlarga xizmat qilayapti"}, {"alias": "@shadow", "ma'nosi": "Parallel ishlayapti, javobi ishlatilmaydi (33-bob)"}, {"alias": "@oxirgi_yaxshi", "ma'nosi": "Rollback uchun ma'lum yaxshi nuqta"}, ]))
| alias | ma'nosi |
|---|---|
| @champion | Hozirgi eng yaxshi, lekin hali chiqarilmagan |
| @staging | Sinov muhitida ishlayapti |
| @production | Mijozlarga xizmat qilayapti |
| @shadow | Parallel ishlayapti, javobi ishlatilmaydi (33-bob) |
| @oxirgi_yaxshi | Rollback uchun ma'lum yaxshi nuqta |
MLflow 2.x da qat'iy Staging/Production bosqichlari bor edi; 3.x da ular alias bilan
almashtirildi. Sabab: har jamoaning o'z jarayoni bor va qat'iy ro'yxat hammaga to'g'ri kelmaydi.
Xulosa
| Tushuncha | Asosiy fikr |
|---|---|
| Muammo | "Qaysi model ishlayapti?" — fayl nomi javob bermaydi |
| Registr | Nomli model + versiyalar + aliaslar |
| Alias | @production bitta versiyaga ishora qiladi, ko'chirish oson |
| Xizmat kodi | models:/nom@production — fayl yo'li yo'q, kod o'zgarmaydi |
| Promote | Bitta buyruq; eski versiya o'chmaydi |
| Rollback | Soniyalarda, qayta o'qitishsiz |
| Rollback chegarasi | Muammoni to'xtatadi, sababini yo'qotmaydi |
| Yetishmaydigan qism | Tayyorlash kodi va ma'lumot — alohida bog'lanishi kerak |
Talaba ishi
royxatga_olga tavsif (description) qo'shing: kim, qachon va nega chiqargan.alias_qoyga himoya qo'shing: F1 hozirgiproductiondan past bo'lsa, rad etsin. Bu 31-bobdagi sifat darvozasining registrdagi ko'rinishi.- Registrdan
@productionva@stagingmodellarini bir xil ma'lumotda taqqoslang. Qaysi biri yaxshiroq va farq statistik jihatdan muhimmi? - Model versiyasiga
malumot_sha256tegini qo'shing (5-bob). Endi "bu model qaysi ma'lumotda o'qitilgan?" degan savolga registrdan javob bera olasizmi?
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.