Добавить в корзинуПозвонить
Найти в Дзене
Машинное обучение

Pipeline в машиннном обученнии

Основная цель создания пайплайна - это контроль. Хорошо организованный пайплайн делает реализацию более гибкой. И вот на работе возникла необходимость рефакторить пайплайны и я решил внести некоторые улучшения в них. Решил поделиться с вами несколькими мини постами. Первое, что я сделал это перешёл на новую структуру проекта: cookiecutter Эта структура достаточно логичная, стандартизированная и гибкая. Всё что вам нужно, установить его и стартануть проект: pip install cookiecutter cookiecutter -c v1 https://github.com/drivendata/cookiecutter-data-science Структура каталогов вашего нового проекта можно увидеть в скриншоте. Для своих проектов я немного переделал структуру, например: мне в проектах Computer Vision не нужна папки src/features, reports и references. Вы тоже можете перекроить структуру под ваши задачи. Более подробно можно почитать тут: - Git репозиторий - Cookiecutter Data Science конфигурациях для проектов машинного обучения - Hydra. В чем собственно проблема и почему я ст

Основная цель создания пайплайна - это контроль. Хорошо организованный пайплайн делает реализацию более гибкой.

И вот на работе возникла необходимость рефакторить пайплайны и я решил внести некоторые улучшения в них. Решил поделиться с вами несколькими мини постами.

Первое, что я сделал это перешёл на новую структуру проекта: cookiecutter

Эта структура достаточно логичная, стандартизированная и гибкая. Всё что вам нужно, установить его и стартануть проект:

pip install cookiecutter cookiecutter -c v1

https://github.com/drivendata/cookiecutter-data-science

Структура каталогов вашего нового проекта можно увидеть в скриншоте.

Для своих проектов я немного переделал структуру, например: мне в проектах Computer Vision не нужна папки src/features, reports и references.

Вы тоже можете перекроить структуру под ваши задачи.

Более подробно можно почитать тут:

- Git репозиторий

- Cookiecutter Data Science

конфигурациях для проектов машинного обучения - Hydra.

В чем собственно проблема и почему я стал использовать Hydra? При запуске Python скриптов добавляют много аргументов, хотя иногда их можно и сгруппировать. Вот пример такого скрипта:

parser.add_argument('data', metavar='DIR', help='path to dataset')

parser.add_argument('-a', '--arch', metavar='ARCH', default='resnet18', choices=model_names, help='model architecture: ' + ' | '.join(model_names) + ' (default: resnet18)')

parser.add_argument('-j', '--workers', default=4, type=int, metavar='N', help='number of data loading workers (default: 4)')

parser.add_argument('--epochs', default=90, type=int, metavar='N', help='number of total epochs to run')

....

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

Например:

- Во время экспериментов вам может понадобиться запустить приложение с различными параметрами конфигурации. Сначала вы можете просто изменять файл конфигурации перед каждым запуском, но вскоре вы поймете, что трудно отслеживать изменения, связанные с каждым запуском.

- Файлы конфигурации становятся монолитными. Но если вы, например, хотите, чтобы ваш код использовал разные параметры конфигурации, скажем, один для набора данных ImageNet и один для набора данных CIFAR-10, у вас есть два варианта: поддерживать два файла конфигурации или поместить оба параметра в один файл конфигурации и каким-то образом используйте только то, что вам нужно во время выполнения.

Ну, а решение всех вышеперечисленных неудобств - Hydra.

Hydra — позволяет создавать композицию конфигураций. Композиция может работает как с файлом конфигурации, так и в командной строке. При этом всё в составленной конфигурации также может быть переопределено через командную строку.

Пример использования:

Файл conf/config.yaml

defaults:

- dataset: cifar10

Файл conf/dataset/imagenet.yaml

dataset:

name: imagenet

path: /datasets/imagenet

Файл app.py

import hydra

from omegaconf import DictConfig @hydra.main(config_path="conf/config.yaml")

def my_app(cfg: DictConfig) -> None:

...

if __name__ == "__main__":

my_app()

При запуске будет использоваться параметр dataset по умолчанию. Но вы так же передать параметр и консоле: python app.py dataset.path = /datasets/cifar10

Еще одна крутая фишка: multirun — это возможность Hydra запускать вашу функцию несколько раз, каждый раз создавая новый объект конфигурации. Это очень удобно для проверки параметров без написания дополнительных функций. Например, мы можем просмотреть все 4 комбинации (2 набора данных X 2 оптимизатора):

python app.py —multirun dataset= imagenet, cifar10 optimizer=adam, nesterov

В этой мини заметке я постарался описать проблемы с конфигами, с которым сталкиваешься при написании пайплайнов и часть функций, которые предлагает Hydra.

Чтобы узнать больше о Hydra предлагаю почитать и посмотреть:

- Сайт Hydra

- Hydra — A fresh look at configuration for machine learning projects

- Как эффективно проводить эксперименты, Роман Суворов

- Артур Кузин: DL Pipelines tips & tricks

#machinelearning #artificialintelligence #ai #datascience #python #programming #technology #deeplearning #coding #bigdata