Ключови моменти
Версионирай данни+код+конфиг+артефакти и използвай model registry с етапи и бърз rollback, за да имаш контрол над продукцията.
За да версионираш AI модели надеждно, трябва да версионираш не само файла с модела, а целия „пакет“: данни, код, конфигурации, зависимости и среда за изпълнение, плюс ясни правила за промоция към staging/production и бърз rollback.
Модел без версия на данните и кода не е версия, а снимка без контекст.
Това how-to е за екипи, които искат да спрат хаоса от „model_final_v7_reallyfinal.pt“ и да могат да отговорят на два въпроса по всяко време:
При класически софтуер версията е код. При ML/AI версията е комбинация:
Практичен принцип: версията трябва да е достатъчна, за да възпроизведеш модела и да знаеш какво точно е променено.
Избери конвенция, която е удобна за хора и машини.
Минимална схема:
model_name: кратко име (например invoice-classifier).model_version: семантична версия (например 1.2.0).data_version: версия/хеш на данните (например data-2026-02-01 или DVC hash).run_id: идентификатор на експеримент (MLflow/W&B).Примерен таг:
invoice-classifier@1.2.0+data.2026-02-01.Правила:
Версионирането е договор между ML и продукта: не пускай модел, който променя JSON схемата без MAJOR версия.
Данните са най-честата причина моделът „да се държи различно“.
Какво да версионираш:
Инструменти и подходи:
Минимална практика, която работи:
data_manifest.json с IDs и филтри.labeling_policy.md с версия и промени.Кодът е лесен: Git.
По-трудно е да не „изгубиш“ конфигурациите.
Решение:
Полезни практики:
train.py --config configs/v1.yaml.За да не се губят резултати, използвай система за експерименти:
Какво да логваш минимално:
Целта е след 3 месеца да не гадаеш защо run_4812 е бил „най-добър“.
Само логове не стигат. Нужен е регистър, който показва кое е „официалната“ версия.
Примерни етапи:
Development: кандидати.Staging: версия, минала тестове и готова за канарейка.Production: версия в продукция.Archived: стари версии.В MLflow Model Registry или W&B Artifacts можеш да:
Правило за промоция:
Ако моделът е в услуга (API), версионирай и API контракта.
За LLM приложения допълни:
Много екипи пропускат това и после не могат да кажат дали деградацията идва от модела, промпта или данните.
За production не разчитай на локална машина.
Минимална стъпка:
Ако имаш GPU, важни са и:
Версионирането има смисъл само ако можеш да върнеш версия бързо.
Практични стратегии:
Rollback правилото:
Бързият rollback е най-важният „feature“ на всяка MLOps система.
data_version.\n2. Експериментът логва параметри, метрики, артефакти и git hash.\n3. Ако минава минималните прагове, моделът се регистрира като нова версия в registry.\n4. QA/ML преглежда model card и failure cases.\n5. Моделът се промотира в Staging и се пуска shadow или canary.\n6. Наблюдават се метрики в реален трафик (качество, латентност, разход).\n7. Ако всичко е наред, моделът става Production; ако не, връщаш предишната версия и записваш причината.\n\nАко нямаш процес за промоция, registry се превръща в склад, а не в контролна кула.\n\n## Как да версионираш LLM системи: prompt, RAG и fine-tune\n\nПри LLM приложенията „моделът“ често е комбинация от външен API и твоя конфигурация. Версионирай отделно:\n\n- provider_model: кой модел и коя версия на доставчика е използвана.\n- prompt_version: системни инструкции и шаблони като файлове в Git.\n- retriever_version: правила за retrieval и филтри.\n- index_version: конкретният индекс/корпус, по който се прави RAG.\n- eval_suite_version: тестовите задачи и рубрики.\n\nТака можеш да кажеш дали промяна в качеството идва от смяна на доставчик, от нов индекс, или от промяна в промпта.\n\n## Чеклист: какво трябва да има всяка версия\n\nПреди да маркираш версия като Staging или Production, провери дали имаш следното (и го пазиш към registry записа или като артефакти):\n\n- model_version и run_id\n- data_version или манифест на данните + test split\n- git commit hash на кода\n- training config файл\n- метрики по фиксиран тест (и ако можеш, по сегменти)\n- версия на вход/изход схемата (JSON Schema)\n- списък зависимости (lockfile/requirements)\n- бележки „какво се промени“ + известни слабости\n- линк към мониторинг табло и аларми\n\nМинимална структура в репото, която помага на дисциплината:\n\n- configs/ за training и serving\n- eval/ за тестови набори и скриптове\n- pipelines/ за ETL и обучение\n- prompts/ и retrieval/ ако имаш LLM/RAG\n\n## Мини пример за „lineage“ (проследимост)\n\nПредстави си, че получиш сигнал за проблем от клиент. Искаш да можеш да проследиш веригата за 2 минути:\n\n- Production модел: \n- Registry тагове: , , \n- Артефакти: , , \n\nТова ти позволява да възпроизведеш и да сравниш с предишната версия, вместо да „гадаеш“ какво е било пуснато. Освен това улеснява одит, разследване на инциденти и доказване на съответствие, при нужда от клиентска сертификация.\n\n## Източници и документация (актуални практики)Git за код, DVC или манифест за данни, и един регистър (MLflow/W&B), където записваш модела, конфигурацията и метриките.
Да. Поне като snapshot (период, филтър, списък IDs). Иначе не можеш да възпроизведеш обучението.
Като код: отделни файлове с версия/тегове, плюс логване на prompt_version към всяка продукционна заявка.
Пусни canary и сравни „цена на успешен резултат“. Често по-скъп модел намалява ескалации и общата цена пада.
Дръж последната стабилна Production версия в registry, имай feature flag за превключване, и мониторинг с прагове за автоматично връщане.
invoice-classifier@1.2.0data_version=data-2026-02-01git=9f3c...run_id=mlflow:4812config.yamlrequirements.lockfailure_cases.csv