Данный проект посвящён выстраиванию процессов автоматизации (MLOPS) вокруг известной задачи компьютерного зрения CIFAR-10.
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
- Проект решает задачу машинного обучения (CIFAR-10). Для обучения используется скрипт ./mlops/infern.py, а для предсказания - ./mlops/infern.py. Были использованы следующие инструменты разработки:
- Poetry. Зависимости представлены в ./pyproject.toml.
- Pre-commit. Использованы black, isort, flake8 хуки (./.pre-commit-config.yaml).
- DVC. Хранение датасета производится при помощи dvc (./dvc/) на удаленном диске google-drive. Скачивание данных с помощью dvc встроено в python3 код.
- Hydra. Основные гиперпараметры обучения внесены в yaml конфиги в ./configs/
- Добавлено логирование основных метрик и функций потерь. Сервер mlflow поднимается на порту 128.0.1.1:8080.
Дополнительно также было реализовано:
- Для автоматизации сборки и исполнения добавлен ./Makefile.
- Добавлен 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
- Установите утилиту make:
sudo apt update
sudo apt install make
- Установите pyenv и создайте чистое окружение с необходимое версией интерпретатора python3, а также необходимыми зависимостями:
make prepare
Примечание: Вы должны находит в корне репозитория.
Откройте платформу Mlflow в другом терминале при помощи команды:
make open-mlflow
- Запустите процесс обучения и предсказания:
make
-
Создайте чистое виртуальной окружение с интепретатором python3 3.11.0 версии.
-
Перейдите в корень проекта
cd mlops/
- Запустите процесс обучения:
python3 trainer.py
- Получите предсказание, выполнив:
python3 infern.py
- Предсказания в формате .csv будет сохранены в ./mlops/results/ .