Skip to content

ovctech/mlops

Repository files navigation

Вступление

Данный проект посвящён выстраиванию процессов автоматизации (MLOPS) вокруг известной задачи компьютерного зрения CIFAR-10.

plot

CIFAR-10 - это задача классификации изображений, в которой требуется определить, к какому классу из десяти относится каждое изображение. Набор данных состоит из 60 000 цветных изображений размером 32x32 пикселей, разделённых на 10 классов: самолёты, автомобили, птицы, кошки, олени, собаки, лягушки, лошади, корабли и грузовики. Задача CIFAR-10 является стандартной задачей в области компьютерного зрения и часто используется в качестве бенчмарка для тестирования алгоритмов обучения с учителем.

Структура проекта:

Ниже приведена структура проекта c пояснениями.

tree - a
. # Repo root
├── mlops # Project root
│   ├── config.py
│   ├── infer.py // infern
│   ├── model.py // neural network
│   ├── trainer.py // training
│   ├── prepare_dataset.py
│   │
│   ├── models # Saving models after training
│   │    └── .gitignore
│   │
│   ├── outputs # Training logs, etc.
│   │    └── .gitignore
│   │
│   ├── lightning_logs # Training logs
│   │    └── .gitignore
│   │
│   └── results # Where to save results
│        └── .gitignore
│
├── configs # Configs for training
│   ├── config_gpu_2.yaml
│   ├── config_gpu_1.yaml
│   └── config.yaml
│
├── data # Dataset
│   ├── cifar-10-batches-py.dvc
│   └── .gitignore
│
├── .github # CI
│   └── workflows
│       └── pre-commit.yaml
│
├── .dvc # dvc
│   └── ...
│
├── templates
│    └── Cifar-10.png
│
├── Makefile
│
├── .pre-commit-config.yaml
│
├── poetry.lock
├── pyproject.toml
│
├── .dvcignore
├── .gitignore
│
└── README.md

Соответствие проекта техническому заданию

  1. Проект решает задачу машинного обучения (CIFAR-10). Для обучения используется скрипт ./mlops/infern.py, а для предсказания - ./mlops/infern.py. Были использованы следующие инструменты разработки:
  2. Poetry. Зависимости представлены в ./pyproject.toml.
  3. Pre-commit. Использованы black, isort, flake8 хуки (./.pre-commit-config.yaml).
  4. DVC. Хранение датасета производится при помощи dvc (./dvc/) на удаленном диске google-drive. Скачивание данных с помощью dvc встроено в python3 код.
  5. Hydra. Основные гиперпараметры обучения внесены в yaml конфиги в ./configs/
  6. Добавлено логирование основных метрик и функций потерь. Сервер mlflow поднимается на порту 128.0.1.1:8080.

Дополнительно также было реализовано:

  1. Для автоматизации сборки и исполнения добавлен ./Makefile.
  2. Добавлен github workflows (CI) [./.github].

Установка и запуск

Предварительные требования:

Выполнить следующую команду:

cat /etc/os-release

Результат должен быть следующим:

...
ID_LIKE="ubuntu debian"
или
ID_LIKE="ubuntu"
или
ID_LIKE="debian"
...

В случае другого дистрибутива или ОС работоспособность не гарантирована!

Выполнить следующую команду:

python3 -V

Результат должен быть следующим:

Python 3.11.0

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

Скачайте репозиторий и перейдите в корень проекта:

git clone git@github.com:ovctech/mlops.git -b main && cd mlops

Рекомендуется:

  1. Установите утилиту make:
sudo apt update
sudo apt install make
  1. Установите pyenv и создайте чистое окружение с необходимое версией интерпретатора python3, а также необходимыми зависимостями:
make prepare

Примечание: Вы должны находит в корне репозитория.

Откройте платформу Mlflow в другом терминале при помощи команды:

make open-mlflow
  1. Запустите процесс обучения и предсказания:
make

Ручной режим:

  1. Создайте чистое виртуальной окружение с интепретатором python3 3.11.0 версии.

  2. Перейдите в корень проекта

cd mlops/
  1. Запустите процесс обучения:
python3 trainer.py
  1. Получите предсказание, выполнив:
python3 infern.py
  1. Предсказания в формате .csv будет сохранены в ./mlops/results/ .

About

CIFAR-10 && MLOPS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published