Conversation with Merlin [email protected] · Sat Dec 02 2023

@startuml

entity "alembic_version" {

  • version_num : varchar(32)
    }

entity "experiment_tags" {

  • key : varchar(250) value : varchar(5000)
  • experiment_id : int }

entity "experiments" {

  • experiment_id : int name : varchar(256) artifact_location : varchar(256) lifecycle_stage : varchar(32) creation_time : bigint
    last_update_time : bigint }

entity "latest_metrics" {

  • key : varchar(250)
  • value : double timestamp : bigint
  • step : bigint
  • is_nan : tinyint(1)
  • run_uuid : varchar(32) }

entity "metrics" {

  • key : varchar(250)
  • value : double
  • timestamp : bigint
  • run_uuid : varchar(32)
  • step : bigint
  • is_nan : tinyint(1)
    }

entity "model_version_tags" {

  • key : varchar(250)
    value : varchar(5000)
  • name : varchar(256)
  • version : int }

entity "model_versions" {

  • name : varchar(256)
  • version : int creation_time : bigint last_updated_time : bigint description : varchar(5000) user_id : varchar(256) current_stage : varchar(20) source : varchar(500) run_id : varchar(32) status : varchar(20) status_message : varchar(500) run_link : varchar(500) }

entity "params" {

  • key : varchar(250)
  • value :varchar(500)
  • run_uuid : varchar(32) }

entity "registered_model_tags" {

  • key : varchar(250) value : varchar(5000)
  • name : varchar(256)
    }

entity "registered_models" {

  • name : varchar(256) creation_time : bigint last_updated_time : bigint description : varchar(5000) }

entity "runs" {

  • run_uuid : varchar(32) name : varchar(250) source_type : varchar(20) source_name : varchar(500) entry_point_name : varchar(50) user_id : varchar(256) status : varchar(9) start_time : bigint
    end_time : bigint source_version : varchar(50) lifecycle_stage : varchar(20) artifact_uri : varchar(200) experiment_id : int deleted_time : bigint }

entity "tags" {

  • key : varchar(250) value : varchar(5000)
  • run_uuid : varchar(32) }

"experiments" ||--o{ "experiment_tags" "runs" ||--o{ "experiment_tags" "runs" }o--|| "latest_metrics" "runs" ||--o{ "metrics" "model_versions" ||--|{ "model_version_tags" "registered_models" ||--|{ "registered_model_tags" "runs" ||--o{ "params" "experiments" ||--|{ "runs" "runs" ||--o{ "tags"

@enduml упрости эту диаграмму, там образом чтобы она подходила не только под mlflow но и под аналогичные инструменты, чтобы в ее концепции были заложены лучшие практикам mlops, код напиши отдельно чтобы его можно было удобно скопировать

Конечно, вот упрощенная диагма для концепции Mps, подходящая не только для MLflow но и для аналогичных инструмент:

@startuml entity "Versioned Entity" { * version_num : varchar(32) } "Tags" { * key : varchar(250) value :(5000) * entity_id : int} entity "Entities" { * entity_id : int name varchar256) location : varchar(256) lifecycle : varchar(32) creation_time : bigint last_update_time : bigint } entity "Latest Metrics" { * : varchar(250) * value : double : bigint * step : bigint * is_nan : tiny(1) * entity_id : varchar(32) } entity "Metrics" { key : varchar(250) * value : double * timestamp : bigint * entity_id :(32) * step : bigint * is_nan : tinyint(1)} entity "Entity Tags" { * key : varchar250) value : varchar(5000) * name : varchar(256) * version int } entity "Versions" { * name : varchar256) * version : creation_time : bigint last_updated_time : bigint description : varchar(5000) user_id : varchar(256) current_stage :(20) source : varchar(500) run_id : varchar(32) status : varchar(20) status_message : varchar(500) run_link : varchar(500) } entity "Parameters" { * key : varchar(250) * value :varchar(500) * entity_id : varchar(32) entity "Entity Tags" { * key : varchar(250) value : varchar(5000) * name : varchar256) } entity "Entities" { * name : varchar(256) creation_time : bigint last_updated_time : bigint description : varchar(5000) } entity "Runs { * run_id : varchar(32) name : varchar(250) source_type : varchar(20) source_name : varchar(500) entry_point_name : varchar(50) user : varchar(256) status : varchar(9) start_time : bigint end_time : bigint source_version : varchar(50) lifecycle_stage : varchar(20) location : varchar(200) entity_id : int deleted_time : bigint} entity "Tags" { * key : varchar(250) value : varchar(5000) * entity_id : varchar() } "Entities" ||--o{ "Entity Tags" "" ||--o{ "Entity Tags" "Runs" }o--|| " Metrics" "Runs" ||--o{ "Metrics" "Versions"--|{ "Entity Tags" "Entities" ||--|{ "Entity Tags" Runs" ||--o{ "Parameters" "Entities" ||--|{ "" "Runs" ||--o{ "Tags" @enduml

Данная диаграммачитывает лучшие практики Mps, такие как версионирование,правление метадми, мониторинг метрик, управление параметрами, отслеживание стадий жизненного цла и тегирование.

теперь опиши подробно всю диаграмму

Диаграмма описывает структуру базы данных, которая управляет различными аспектами сущноей в информационной системе, оптимизированной для управления экспериментами, версиями, параметрами и метриами, что имеет отношение к практикам Mps (Machine Learning Operations).

  1. Versioned Entity: Эта сущность представляет любой объект или компонент, который имеет неск версий. В нашем контексте это может быть машинная модель в различных стадиях её разработки.

  2. Tags: Теги связывают с сущностями и содержат метаданны или дополнительную информацию об этих сущностях. Это может быть использовано для исполнения запросов или для организации и категоризации экспериментов.

  3. Entities: Основной объект, который может представля эксперимент, запуск или модель. У каждой сущности есть идентификатор, имя, местонахождение (которое быть путем к файлу в хранилище), этапизненного цикла и временные отметки, описываие её создание и последнее обновление.

  4. Latest Metrics: Эта сущность отслеживает последние измеренные значения метрик, связанные с запусками экспериментов.

5.Metrics**: Архив всех метрик,обираемых во время эксперимов. Содержит детализированные данные по каждой метрике с временными отметками и информацией, соответствующей каждому запуску.

  1. Entity Tags: Теги, специфичные для версий конкрных сущностей. Это позволяет добавить дополнительные метаданные к определенным версиям такие как аннотации или кастомизированные метки.

  2. Versions: Представляет конкретные версии какой-либо сущности, содержа информацию, касающуюся истории версий, пользователей, задействованных в их изменениях, и статусов версий.

  3. Parameters: Параметры, использованные в экспериментах. Включает в себя ключ и значение каждого параметра, асоциированного с конкретным запуском.

  4. Runs: Запись о каждом запуске эксперимента, включает всю информацию о его выполнении, иочник, уникальный идентифик, даты нач и окончания, жизненный этап иязь с экспериментом.

  5. ** (Runs)**: Аналогично "Entity Tags", но сваны с конкретными запусками эксперимов.

На диаграмме изображены следующие отношения:

  • Один "Entity" может иметь много "Entity Tags".
  • Один "Run" генерировать множество записей "" и "Latest Metrics".
  • Множество "Runs" могут быть связаны одним "Entity" (аксиома "Entities" ||--| "Runs").
  • "Tags" связаны с "Runs", предостляя возможность тегировать каждый запуск.

Все сущ имеют атрибуты, идентификаторы и другие характеристики, которые делают даграмму достаточно абстрактной, чтобы ее можно было использовать не только в MLflow, н и в других, аналогичных ин

нужно описать еще подробнее, и привести примеры

Давайте рамотрим эту дирамму более подробно на конкретных примерах:

Versioned Entity может представлять модель машинного обучения. Например, модель классификации изображений с всиями 1.0, 1.1, 1.2 и т.д. Каждая версия будет иметь уникальный идентификатор версии version_num.

Tags могут хранить дополнительную информацию о сущностях. Например, для эксперимента по обучению модели классификации изображений могут быть добавлены теги:

key: "goal" value: "classify images" experiment_id: 125 key: "data" value: "ImageNet dataset" experiment_id: 125

Entities представляют основные объекты, такие как эксперименты и модели. Например:

experiment_id: 125 name: "Image classification model v1" artifact_location: "s3://bucket/image_model/" lifecycle_stage: "production" creation_time: 1590350400 last_update_time: 1590436800

Latest Metrics будет хранить последние значения метрик для каждого запуска эксперимента:

key: "accuracy" value: 0.76 timestamp: 1590436800 step: 24000 is_: 0 run_uuid: "d89hh32kkd8d7a"

Parameters содержат гиперпараметры, использованные в запуска:

key: "learning_rate" value: 0.001 run_uuid: "d89hh32kkd8d7a" key: "batch_size" value: 64 run_uuid: "d89hh32kkd8d7a"

Runs содержат записи о запусках экспериментов:

run_uuid: "d89hh32kkd8d7a" experiment_id: 125 status: "FINISHED" start_time: 1590434000 end_time: 1590436800

В цом, диаграмма абстрагирует основные сущности и их связи, позволяя строить гибкие системы управления экспериментами, моделями, метриками на основе передовых практик MLOps.

@startuml

entity "Versioned Entity" {

  • version_num : varchar(32)
    }

entity "Tags" {

  • key : varchar(250) value : varchar(5000)
  • entity_id : int }

entity "Entities" {

  • entity_id : int name : varchar(256) location : varchar(256) lifecycle_stage : varchar(32) creation_time : bigint
    last_update_time : bigint }

entity "Latest Metrics" {

  • key : varchar(250)
  • value : double timestamp : bigint
  • step : bigint
  • is_nan : tinyint(1)
  • entity_id : varchar(32) }

entity "Metrics" {

  • key : varchar(250)
  • value : double
  • timestamp : bigint
  • entity_id : varchar(32)
  • step : bigint
  • is_nan : tinyint(1)
    }

entity "Entity Tags" {

  • key : varchar(250)
    value : varchar(5000)
  • name : varchar(256)
  • version : int }

entity "Versions" {

  • name : varchar(256)
  • version : int creation_time : bigint last_updated_time : bigint description : varchar(5000) user_id : varchar(256) current_stage : varchar(20) source : varchar(500) run_id : varchar(32) status : varchar(20) status_message : varchar(500) run_link : varchar(500) }

entity "Parameters" {

  • key : varchar(250)
  • value :varchar(500)
  • entity_id : varchar(32) }

entity "Entity Tags" {

  • key : varchar(250) value : varchar(5000)
  • name : varchar(256)
    }

entity "Entities" {

  • name : varchar(256) creation_time : bigint last_updated_time : bigint description : varchar(5000) }

entity "Runs" {

  • run_id : varchar(32) name : varchar(250) source_type : varchar(20) source_name : varchar(500) entry_point_name : varchar(50) user_id : varchar(256) status : varchar(9) start_time : bigint
    end_time : bigint source_version : varchar(50) lifecycle_stage : varchar(20) location : varchar(200) entity_id : int deleted_time : bigint }

entity "Tags" {

  • key : varchar(250) value : varchar(5000)
  • entity_id : varchar(32) }

"Entities" ||--o{ "Entity Tags" "Runs" ||--o{ "Entity Tags" "Runs" }o--|| "Latest Metrics" "Runs" ||--o{ "Metrics" "Versions" ||--|{ "Entity Tags" "Entities" ||--|{ "Entity Tags" "Runs" ||--o{ "Parameters" "Entities" ||--|{ "Runs" "Runs" ||--o{ "Tags"

@enduml упрости эту диаграмму, там образом чтобы она подходила не только под mlflow но и под аналогичные инструменты, чтобы в ее концепции были заложены лучшие практики mlops, код напиши отдельно чтобы его можно было удобно скопировать.

Вот упрощенный вариант диаграммы, подходящий для концепции MLOps и аналогичных инструментов:

@startuml entity "Artifact" { * artifact_id : varchar(32) * version : int } entity "Tags" { * key : varchar(250) * value : varchar(5000) * artifact_id : varchar(32) } entity "Metrics" { * key : varchar(250) * value : double * artifact_id : varchar(32) * timestamp : bigint } entity "Parameters" { * key : varchar(250) * value : varchar(500) * artifact_id : varchar(32) } entity "Artifacts" { * artifact_id : varchar(32) * name : varchar(256) * location : varchar(256) } entity "Runs" { * run_id : varchar(32) * artifact_id : varchar(32) * start_time : bigint * end_time : bigint } "Artifacts" ||--o{Tags" "Runs" ||--o{ "Tags" "Runs" ||--o{ "Metrics" "Artifact" ||--|{ "Tags" "Runs" ||--o{ "Parameters" "Artifacts" ||--|{ "Runs" @enduml

В данной диаграмме я абстрагировал сущности до артифактов, запусков, метрик и тегов. Это позволяет применить ее для различных MLOps инструментов, не привязываясь к какому-то конкретному решению. Код диаграммы можно легко скопировать и использовать в своих проектах.

теперь подробно объясни диаграмму, все сущности, связи, значения, ключи, все очень подробно и с примерами

Давайте рассмотрим эту упрощенную диаграмму более подробно.

Artifact - это основной объект, который версионируется. Это может быть модель машинного обучения, набор данных, конфигурационный файл, requirements.txt и т.д.

Пример:

artifact_id: "ml_model_v1" version: 1

Tags - это метаданные, связанные с артифактами. Они используются для поиска, организации и отслеживания артифакт.

Пример тегов для ml_model_v1:

key: "type" value: "neural network" artifact_id: "ml_model_v1" key: "framework" value: "TensorFlow 2.0" artifact_id: "ml_model_v1"

Metrics - это набор показателей, которые измеряются и отслеживаются во время обучения или использования моделей.

Примеры метрик:

key: "accuracy" value: 0.92 artifact_id: "ml_model_v1" timestamp: 1571231165 key: "loss" value: 048 artifact_id: "ml_model_v1" timestamp: 1571231165

Parameters - гиперпараметры и конфигурационные настройки для артифактов.

Пример:

key: "learning_rate" value: 0.001 artifact_id: "ml_model_v1" key: "batch_size" value: 64 artifact_id: "ml_model_v1"

Artifacts - реестр всех артифактов с их метаданными.

Runs - записи о запусках процессов с артифактами. Хранят статистику о времени начала и окончания.

Связи:

  • Один артифакт может иметь множество тегов, метрик, параметров
  • Один запуск связан с одним артифактом
  • Запуски могут генерировать метрики и иметь параметры

Та кая модель данных является обобщенной и применима для разных инструментов MLOps.