Перечень условных обозначений 3
Введение 4
1 Анализ и проектирование 6
1.1 Обзор существующей системы 6
1.2 Выявленные проблемы 8
1.3 Нефункциональные требования 9
2 Основные инструменты 10
2.1 Data Version Control (DVC) 10
2.2 Cookiecutter 13
2.3 GitLab CI/CD 14
3 Организация воспроизводимости результатов машинного обучения 15
3.1 Недостатки исходного процесса разработки моделей 15
3.2 Версионирование данных при помощи DVC 18
3.3 Шаблон репозитория для моделей машинного обучения 19
3.4 Процесс разработки и внедрение CI/CD 25
4 Рефакторинг и перепроектирование 30
4.1 Сложность проектирования систем в сфере машинного обучения 33
4.2 Варианты использования 34
4.3 Основные сущности предметной области 35
4.4 Рефакторинг на уровне классов 36
4.5 Роли компонентов в системе 40
4.6 Выделенные компоненты 43
Заключение 47
Список использованных источников и литературы 48
Отступление. Данная работа написана на основе решения задач в рамках прохождения производственной практики в компании. С целью соблюдения подписанных соглашений о неразглашении некоторые подробности реализации намеренно сокрыты.
В последние годы искусственный интеллект (англ. Artificial intelligence, AI) и, в частности, машинное обучение (англ. Machine learning, ML) демонстрируют многообещающие результаты в сфере автоматизации бизнес-процессов и повседневной жизни [1]. Быстрое развитие алгоритмов и инструментов машинного обучения, развитие облачных инфраструктур и удешевление вычислительных мощностей способствовали бурному развитию информационных систем, основанных на машинном обучении. Различные компании, большие или маленькие, стремятся внедрить машинное обучение в используемое ПО, чтобы улучшить предоставляемые продукты и услуги.
В основе данной работы лежит одна из таких систем, разработанная компанией ООО «Энбисис» (далее — компания). Система OcuScreen позволяет с высокой точностью выявлять у пациентов наличие диабетической ретинопатии, глаукомы и возрастной дегенерации макулы по фотографиям глазного дна. Первый рабочий прототип прошел необходимые проверки и постепенно вводится в эксплуатацию в клиниках России и за рубежом. Автор данной работы разработал по меньшей мере два модуля в этой системе, отвечающих за выявление возрастной дегенерации макулы, а также оценку пригодности снимков для анализа.
В ходе эксплуатации от врачей были получены первые запросы на модернизацию системы. Однако в процессе разработки и ввода в эксплуатацию этих и других изменений команда автора начала сталкиваться с проблемами и некоторыми ограничениями существующей архитектуры и самого процесса разработки. В большинстве своем это проблемы, связанные с поддержкой и расширением, непрерывной интеграцией, воспроизводимостью результатов исследований и т. п.
Система находится в разработке более двух с половиной лет. Однако с момента начала разработки у системы не было ни единой итерации рефакторинга, вследствие чего накопился значительный технический долг. До недавних пор проект считался прототипом, что объясняет такое положение дел. Однако система уже перешла в более серьезную стадию жизненного цикла, активно используется и подвержена вполне регулярным изменениям, что и приводит нас к необходимости в глобальном перепроектировании системы и процессов разработки.
Несмотря на то, что ежегодно во многих компаниях разрабатываются и публикуются различные инструменты для упрощения разработки и доставки подобных систем, универсальные и общепринятые подходы и методологии разработки все еще находятся на этапе начального формирования [2].
Как точно подмечено в работе авторов из компании ThoughtWorks [3], основная сложность разработки систем на базе технологий машинного обучения заключается в присутствии, помимо самого программного кода, двух других не менее важных компонент: данных и моделей. Этот факт накладывает дополнительные расходы на поддержку и изменение систем, ведь каждая из этих компонент может изменяться независимо от других. При этом все изменения должны поддаваться контролю и версионированию, как и прежде.
Эта дополнительная нагрузка требует особого внимания от разработчиков. Ввиду вышеизложенных причин, часть предложенных в данной работе изменений затрагивает не только код и другие артефакты, но и сам процесс разработки системы на уровне вышеупомянутых трех компонент. Все эти аспекты также являются критически важными для сертификации системы в качестве медицинского ПО.
Таким образом, целью данной работы является реинжиниринг архитектуры и процесса разработки системы OcuScreen в первую очередь для упрощения ее поддержки и развития, а также для соответствия системы строгим стандартам разработки медицинского ПО.
Для достижения поставленной цели можно выделить следующие задачи:
1. Выявить проблемы существующей системы и процесса разработки
2. Проанализировать требования к системе
3. Спроектировать решения выявленных проблем
4. Продемонстрировать преимущества предложенных решений относительно исходной системы и процессов разработки
Таким образом, цель работы достигнута, а задачи выполнены.
В результате реинжениринга процесс разработки моделей стал воспроизводимым, самодокументируемым, возрос контроль качества кода. Обмен наработками между разработчиками стал происходить проще и быстрее. Благодаря разносторонней унификации в работе предложены некоторые механизмы непрерывной интеграции для моделей машинного обучения.
В результате работы составлен набор артефактов первичного проектирования, определены основные сущности, выделены роли, в рамках которых система скорее всего будет расширяться в дальнейшем. На основе сформированных артефактов были выделены новые функциональные компоненты, а также выдвинуты некоторые предположения о причинах высокого зацепления модулей в исходной системе. Все это было учтено при перепроектировании.
На основе разработанных артефактов проектирования была предложена новая структура классов. Описаны особенности и преимущества решения в сравнении с исходной системой.
На текущий момент все предложенные изменения системы приняты руководством компании и постепенно вводятся в эксплуатацию: существующие модели переносятся в собственные репозитории, ведется реализация и тестирование предложенных компонентов системы.