Skip to content

Веб-приложение для тренировки моделей KMeans с аналитикой и отслеживанием экспериментов

Notifications You must be signed in to change notification settings

MOVS24-graph-team/app_fastapi_steamlit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Чекпоинт №4: Сервис, Команда №63

Trainer Server CI/CD

Документация проекта: Здесь

docs/report.md


Содержание

  1. Описание проекта
  2. Серверная часть. FastAPI
  3. Клиентская часть. Streamlit
  4. CI с юнит-тестами и автоматической проверкой на качество кода
  5. Сборка проекта
  6. Демонстрация работы FastAPI приложения
  7. Демонстрация работы Streamlit приложения

Описание проекта

Цель проекта - создать полноценное веб-приложение для обучение моделей KMeans для кластеризации новостных постов с аналитикой и отслеживанием экспериментов


Основная идея конечного продукта (Дополнительно)

Подробнее об идеи и проекте в целом: Здесь

В кратце Идея заключается в сборе новостей, их анализе методами NLP и использованием графовых нейронных сетей (GNN) для обработки, построения и прогнозирования связей между новостями.


Команда

ФИО telegram github
Филоненко Никита Дмитриевич @nikitafilonenko Nikita Filonenko
Жданович Иван Егорович @otpok Eflarus
Малыш Алексей Александрович @laexey AlexeyMalish
Степанов Данила Михайлович @biQvOid biQvOid

Серверная часть. FastAPI

Основные функции включают управление датасетами, обучение моделей, предсказания и анализ данных

возможности API:

  1. Работа с данными:

    • Загрузка, обновление, удаление датасетов.
    • Генерация отчетов EDA (Exploratory Data Analysis).
    • Генерация HTML-дашбордов для анализа данных.
  2. Модели машинного обучения:

    • Обучение моделей.
    • Дообучение существующих моделей.
    • Управление загрузкой и выгрузкой моделей из памяти.
    • Выполнение предсказаний (как для текстовых данных, так и для файлов).
    • Получение информации о статусе моделей и их конфигурациях.

1. Структура проекта

В данном проекте используется модульная структура для работы с обучением моделей машинного обучения. Подход направлен на поддержку гибкости, расширяемости и простоты добавления новых моделей и методов обучения.

  • Конфигурация модели:

    • Класс ModelConfig предоставляет подробную информацию об идентификаторе модели, используемом датасете, типе модели и гиперпараметрах. Это позволяет унифицировать процесс настройки различных моделей.
    • Пример конфигурации включает тип модели (kmeans) и соответствующие гиперпараметры, такие как n_clusters, random_state, max_iter.
  • Обучение:

    • Процесс обучения начинается с загрузки данных на основе идентификатора датасета (dataset_id), предоставленного в конфигурации.
    • Алгоритм обучения модели определяется типом модели (ml_model_type), который указывается в конфигурации.
    • Результаты обучения, такие как метрики (например, silhouette, davies_bouldin) и кривые обучения (например, инерция), сохраняются для последующего анализа.
  • Сохранение и загрузка:

    • После обучения модели она сохраняется в заранее определённой структуре (например, как объект в формате .pkl).
    • Сохранённые модели могут быть загружены в память при необходимости для дальнейшего использования, дообучения или предсказания.
  • Отчёты и визуализация:

    • Предоставляется информация о качестве обучения, метриках и дополнительных характеристиках. Пример: метрики silhouette, davies_bouldin, calinski_harabasz для оценки кластеризации.

2. Особенности реализации

  1. Потокобезопасность:

    • Для предотвращения коллизий при работе с файловой системой и данных используется multiprocessing.Lock.
    • Это гарантирует, что операции записи, удаления и обновления выполняются атомарно.
  2. Обработка данных:

    • Данные сохраняются и извлекаются из директории, указанной в конфигурации (data_path).
    • Для работы с CSV-файлами используется библиотека pandas, что обеспечивает гибкость в обработке данных.
  3. Гибкость конфигураций:

    • Использование Pydantic для определения моделей данных позволяет валидировать входные параметры, генерировать JSON-схемы и предоставлять примеры запросов/ответов.
    • Примеры конфигураций (json_schema_extra) предоставляют понятные инструкции для интеграции.
  4. Унификация данных и моделей:

    • Единые стандарты для конфигураций (модели, метрики, предсказания) упрощают взаимодействие между компонентами.
    • Поддержка расширяемости через модели, такие как FineTuneModelConfig и PredictionConfig.
  5. Анализ данных и дашборды:

    • Встроенная поддержка EDA (Exploratory Data Analysis) и создание дашбордов с использованием библиотеки ydata_profiling.
    • Генерация HTML-отчётов для визуализации ключевых характеристик данных.
  6. Управление состоянием приложения:

    • Классы StatusResponse и ModelStatusResponse позволяют легко отслеживать состояние сервиса и загруженных моделей.
  7. Обработка ошибок:

    • Исключения (FileNotFoundError, валидация через Pydantic) обрабатываются для обеспечения надёжности работы.

Преимущества реализации:

  • Масштабируемость за счёт модульного подхода.
  • Простота интеграции через API и поддержку стандартов JSON.
  • Поддержка многозадачности благодаря потокобезопасным операциям.

3. Эндпоинты

Работа с данными:

  • POST /api/v1/datasets/load
    Загрузка нового датасета из CSV-файла.

  • PUT /api/v1/datasets/update/{dataset_id}
    Обновление существующего датасета.

  • GET /api/v1/datasets/eda/{dataset_id}
    Генерация аналитического отчета по данным.

  • GET /api/v1/datasets/eda_dashboard/{dataset_id}
    Генерация HTML-дашборда анализа данных.

  • GET /api/v1/datasets/list_datasets
    Получение списка всех доступных датасетов.

  • DELETE /api/v1/datasets/remove/{dataset_id}
    Удаление конкретного датасета.

  • DELETE /api/v1/datasets/remove_all
    Удаление всех датасетов.

Работа с моделями:

  • POST /api/v1/models/fit
    Обучение новой модели.

  • POST /api/v1/models/fine_tuning
    Дообучение существующей модели.

  • POST /api/v1/models/load
    Загрузка модели в память.

  • POST /api/v1/models/unload
    Выгрузка модели из памяти.

  • POST /api/v1/models/predict
    Выполнение предсказания для текста.

  • POST /api/v1/models/predict_items
    Выполнение предсказания для данных из CSV-файла.

  • GET /api/v1/models/model_info/{model_id}
    Получение информации о конкретной модели.

  • GET /api/v1/models/models_info
    Получение информации обо всех моделях.

  • GET /api/v1/models/get_status
    Получение статусов загруженных моделей.

  • DELETE /api/v1/models/remove/{model_id}
    Удаление конкретной модели.

  • DELETE /api/v1/models/remove_all
    Удаление всех моделей.

image

Бэкенд развернут на сервере, его можно протестировать по адресам


Клиентская часть. Streamlit

Проект представляет собой приложение на Streamlit для обучения моделей кластеризации текста и проведения инференса.

1. Структура проекта

  • Пользовательский интерфейс реализован с помощью Streamlit.
  • Включает вкладки для загрузки датасетов, проведения EDA (разведочного анализа данных), обучения моделей, настройки гиперпараметров и инференса.
  • Использует logging_config.py для логирования действий пользователя и работы приложения.
  • utils.py содержит вспомогательные функции для взаимодействия с backend'ом (FastAPI).
  • Общается с backend'ом через API запросы, определенные в config.py (BASE_URL).

2. Особенности реализации

  • Многостраничное реактивное приложение: Клиент разделен на несколько страниц (pages директория) для лучшей организации: загрузка датасетов, EDA, обучение, инференс. Это улучшает навигацию и пользовательский опыт. Переход между страницами происходит без перезагрузки вкладки.
  • Взаимодействие с backend'ом (FastAPI): Клиент общается с backend'ом через API запросы, используя библиотеку requests и LoggedSession для логирования всех запросов и ответов. BASE_URL в config.py определяет адрес backend'a, также его можно задать через переменные окружения
  • Обработка и отображение данных: Клиент использует Streamlit для отображения данных, графиков (с помощью plotly) и других визуализаций, получаемых от backend'a, например, кривых обучения.
  • Логирование: logging_config.py настраивает логирование, записывая информацию о запросах, ответах и других событиях в файл logs/app.log с ротацией логов. Это помогает в отладке и мониторинге работы приложения.
  • Утилиты: utils.py содержит вспомогательные функции для взаимодействия с backend'ом: загрузка/выгрузка/удаление моделей, получение списка датасетов и информации о моделях, отображение статуса моделей. Это инкапсулирует логику взаимодействия с API и упрощает код основной части приложения.
  • Пример данных: Предоставляется пример файла с данными (news_sample.csv), который, используется для демонстрации функциональности или для начального тестирования приложения.

3. Демонстрация работы

CI с юнит-тестами и автоматической проверкой на качество кода

В данном репозитории настроен CI процесс (автоматический механизм проверки качества кода и запуска юнит-тестов), что способствует поддержанию высокого уровня стабильности и стандартизации проекта.

Основные аспекты:

  • Линтеры для проверки качества кода:

    • Используются Flake8 и Pylint для статического анализа кода.
    • Проверяются потенциальные ошибки, форматирование, соответствие стандартам PEP8.
    • Настроены допустимые параметры, такие как максимальная длина строки и минимальный рейтинг кода.
  • Юнит-тестирование:

    • Юнит-тесты выполняются с использованием фреймворка pytest.
    • Тесты запускаются в рамках установленного тайм-аута, чтобы гарантировать завершение проверки в разумные сроки.
    • Проект покрыт тестами, что позволяет выявлять ошибки на ранних этапах разработки.
  • Мультиплатформенная проверка:

    • CI/CD выполнен для двух популярных операционных систем: Ubuntu и Windows.
    • Убедившись, что код работает стабильно в разных средах, повышается его переносимость и устойчивость.
  • Управление зависимостями:

    • Использование Poetry для управления зависимостями упрощает настройку окружения и гарантирует, что все зависимости установлены корректно.
    • Локальные виртуальные окружения создаются и кэшируются для ускорения сборки.
  • Анализ Dockerfile:

    • Применение линтера Hadolint к файлам Docker гарантирует, что контейнеры собираются с соблюдением лучших практик.

Сборка проекта

  • Сборка проекта и его деплой осуществляется при помощи Docker
  • Алгоритм сборки образа бекенда и фронтенда описан в файлах Dockerfile
  • Деплой и связка самих сервисов осуществляется по конфигурации из docker-compose.yml
  • Чтобы собрать проект самостоятельно, достаточно выполнить команду из корня проекта
docker compose up -d

Демонстрация работы FastAPI приложения

1. Управление моделями машинного обучения

  • обучение модели /fit

Пример запроса:

image

Результат выполнения:

image

  • fine tuning модели /fine_tuning

Пример запроса:

image

Результат выполнения:

image

  • загрузка модели /load

Пример запроса:

image

Результат выполнения:

image

  • предсказание модели /predict

Пример запроса:

image

Результат выполнения:

image

  • предсказание модели для нескольких объектов /predict_items

Пример запроса:

image

Результат выполнения:

image

image

  • вывод информации о модели по id /model_info/{model_id}

Пример запроса:

image

Результат выполнения:

{
  "id": "kmeans_BoW_1",
  "type": "kmeans",
  "metrics": {
    "silhouette": -0.1940026642864812,
    "davies_bouldin": 2.114552593586959,
    "calinski_harabasz": 18.69414302282505
  },
  "training_curves": {
    "inertia": [
      357189.8310640746,
      356979.31565604336,
      356754.0672893798,
      356537.0162913634,
      356320.9691806494,
      356069.62696588004,
      355794.083666806,
      355447.66496736807,
      355109.70212574577,
      354777.35552658944,
      354377.05035275436,
      353952.4647551086,
      353506.16712571203,
      353017.0402453156,
      352530.17506688717,
      352048.284182104,
      351561.1804935722,
      351041.9285548266,
      350529.1208158211,
      350019.28289021004,
      349523.8855833017,
      349034.94950361294,
      348547.9622522913,
      348062.3406087103,
      347598.2699409341,
      347154.4193074891,
      346729.5642678646,
      346322.5758485365,
      345932.41102261393,
      345558.10442750965,
      345198.76110873424,
      344853.55012422975,
      344521.698877727,
      344201.0725743793,
      343887.5771285611,
      343583.41896326153,
      343291.22296874766,
      343010.3328467996,
      342740.1373586305,
      342480.06660545646,
      342229.0017141595,
      341984.42476121226,
      341747.29910995334,
      341519.1501401755,
      341299.49838560045,
      341087.8963428938,
      340883.92593085335,
      340687.19618430035,
      340497.3411578985,
      340314.0180180408,
      340136.90530360676,
      339965.7013384972,
      339800.12278088246,
      339634.6414736319,
      339468.90693510906,
      339308.2386924257,
      339152.41344714357,
      339001.2202447031,
      338854.4596607322,
      338711.94304956263,
      338573.49184951314,
      338438.9369400723,
      338308.11804654554,
      338180.88318825734,
      338057.08816658036,
      337936.5960896083,
      337819.27693047404,
      337705.0071165675,
      337593.6691472558,
      337485.15123782854,
      337379.3469876031,
      337276.15507040254,
      337175.4789455917,
      337077.22658822493,
      336981.31023678405,
      336887.64615726855,
      336796.15442238067,
      336706.75870477513,
      336619.38608326827,
      336533.966861184,
      336450.4343958931,
      336368.7249388051,
      336288.7774850716,
      336210.53363233083,
      336133.93744789826,
      336058.93534378905,
      335985.4759590782,
      335913.510049111,
      335842.9903810969,
      335773.8716356667,
      335706.1103140314,
      335639.2251398898,
      335571.95737245446,
      335505.9318621242,
      335441.11272929254,
      335377.46542792465,
      335314.9566860794,
      335253.55444949714,
      335193.22782808787,
      335133.94704517233,
      335075.68338924943,
      335075.68338924943
    ]
  },
  "dataset_id": "news"
}

image

  • вывод информации о всех обученных моделях /models_info

Пример запроса:

image

Результат выполнения:

image

  • список активных для инференса моделей /get_status

Пример запроса:

image

Результат выполнения:

  • выгрузка модели /unload

Пример запроса:

image

Результат выполнения:

image

  • удаление модели по id /remove/{model_id}

Пример запроса:

image

Результат выполнения:

image

  • удаление всех обученных моделей /remove_all

Пример запроса:

image

Результат выполнения:

image

2. Управление наборами данных

  • загрузка датасета /load

Пример запроса:

image

Результат выполнения:

image

  • список всех загруженных датасетов /list_datasets

image

image

  • выполнение анализа данных (EDA) /eda

Пример запроса:

image

Результат выполнения:

image

  • построение дашборда с использованием ydata_profiling /eda_dashboard

Пример запроса:

image

Результат выполнения:

image

  • удаление датасета по id /remove/{dataset_id}

Пример запроса:

image

Результат выполнения:

image

  • удаление всех датасетов /remove_all

Пример запроса:

image

Результат выполнения:

image

Демонстрация работы Streamlit приложения

c.mp4

About

Веб-приложение для тренировки моделей KMeans с аналитикой и отслеживанием экспериментов

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •