Disclaimer: Это учебный проект, созданный в рамках курса по ML-ops, цель которого - освоить базовые инструменты для разработки и деплоя ML-моделей. Модель, используемая в проекте, является "игрушечной" и не предназначена для использования в реальных условиях.
HW3 report: HW3_report.md
Учебный проект по курсу ML-ops. В рамках проекта реализован python-пакет для проверки шин автомобиля на износ по фотографии. Пакет содержит в себе модель для классификации изображений, а также CLI-интерфейс для работы с ней:
- обучения модели (train)
- предсказания класса изображения (infer)
- экспорта модели в ONNX-формат (export)
- запуска оценки выбранного изображения на сервере MLflow (run_server)
Для использования пакета необходимо установить его из репозитория:
git clone https://github.com/VitalyyBezuglyj/tire-check-tool.git
cd tire-check-tool
# Вероятно, вы захотите сделать это в виртуальном окружении
# Например, используя conda:
# conda create -n tire-check-tool python=3.8
pip install -e .Note: Команда train - предполагают, что MLflow запущен и доступен по адресу localhost:5000. Подробнее см
раздел MLflow. Или можно зайти в конфиг и в списке логгеров оставить только csv ~
Note: Команда run_server - предполагают, что вы запустили тритон сервер. Подробнее см раздел
Triton server (Модель маленькая влезает в cpu :ok-hand:)
После установки пакета в командной строке доступны следующие команды:
-
python commands.py train- обучение модели- Скачает датасет, если он еще не скачан (~
$2.5$ Гб)
- Скачает датасет, если он еще не скачан (~
-
python commands.py infer- оценка точности модели на всем датасете- по-умолчанию используются веса модели, полученные при обучении
- если указать аргумент
--use_pretrainedзагрузит предобученные веса и использует их
-
python commands.py export- экспорт модели в ONNX-формат-
точно также - по-умолчанию - веса от вашего обучения, с флагом
--use_pretrained- предобученные веса (скачиваются автоматически) -
Если добавить флаг
--export.triton- модель будет экспортирована не в директорию "export", а сразу в model_repositrory для инференса через тритон сервер
-
-
python commands.py run_server --image <path/to/image>- запуск классификации выбранного изображения на сервере triton-
--image- путь к изображению, по-умолчанию -img/demo_tire_image.jpg - сначала необходимо выполнить экспорт модели в ONNX-формат с нужным флагом, см. команду
export - также необходимо запустить triton inference server (см раздел Triton server.)
-
-
python commands.py test_triton- запуск тестов для тритон сервера- всё то же самое, что и в команде
run_server, но вместо запуска инференса запускаются тесты на первых N изображениях из валидационной выборки
- всё то же самое, что и в команде
Конфигурация модели и обучения задается в файле config.yaml.
Любая команда поддерживает следующие аргументы:
-
--config_name- имя файла конфигурации в директории configs, по-умолчанию -default -
--config_path- путь к директории с конфигурационными файлами, по-умолчанию -configs -
Любой аргумент из конфигурационного файла, например
--epochs 10или--batch_size 32, если аргумент вложенный, то используется точка в качестве разделителя, например--tire_check_model.learning_rate 0.001 -
-- --help- справка по команде, дополнительный аргумент--необходим для разделения аргументов команды и аргументов CLI
-
Если у вас откуда-то есть запущенный сервер MLflow, то вам необходимо указать его адрес в файле config.yaml в параметре
loggers.mlflow.tracking_uriили указать при запуске в виде аргумента командной строки--loggers.mlflow.tracking_uri <ваш адрес>. По-умолчанию используетсяhttp://localhost:5000. -
Если у вас нет запущенного сервера MLflow, то его можно запустить локально:
# Install MLflow
pip install mlflow
# Run MLflow
mlflow server --host localhost --port 5000 --artifacts-destination outputs/mlflow_artifactsСоответственно, artifacts-destination - это директория, в которой будут храниться различные логи и пр, и её можно выбрать произвольно.
Для инференса модели используется triton inference server docs. Для запуска:
# Открыть доп окно терминала
# Активировать в нём конду, или другую виртуальную среду
cd triton
docker-compose up
#(ждём пока стянется образ, сорри)- GPU не понадобится моделька супер лёгкая
Для обучения модели использовался датасет
Tire-Check, содержащий 2 класса
изображений шин автомобиля: good (defective (
Примеры изображений:
Для обучения данные были разделены на тренировочную и валидационную выборки в соотношении 80/20. Для тестирования модели (infer) использовалась вся выборка.
Данные для обучения будут скачаны автоматически при запуске обучения/валидации и размещены в директории data
Задача игрушечная, а в программу курса входило использование torch lightning, поэтому модель была написана с нуля и единственная её цель - показать работу пайплайна и более-менее сходящиеся метрики. Что она и делает.
Архитектура модели:
TireCheckModel(
(conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1))
(pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1))
(pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv3): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1))
(pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv4): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1))
(pool): MaxPool2d(kernel_size=3, stride=3, padding=0, dilation=1, ceil_mode=False)
(fc1): Linear(in_features=2304, out_features=512, bias=True)
(fc2): Linear(in_features=512, out_features=2, bias=True)
)Лучший результат на валидации: {'epoch': 25, 'MulticlassF1Score': 0.8097}
Эти веса могут быть использованы для экспорта/инференса модели при указании аргумента --use_pretrained в
командной строке или конфиге.

