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

Почему так происходит? Во многом, это вопрос ресурсов. Получается ситуация с дырявой лодкой: в одном месте заткнули течь, а в другом она открылась. Так и здесь. С одной стороны, ИИ и машинное обучение призваны автоматизировать процессы в компании или производстве, оптимизировать траты за счет перекладывания каких-то технических функций с человека на алгоритм. Или, например, экономить время и средства на разработку. С другой - получается, что внедрение этих инструментов вначале требует определенных инвестиций. Так, получается что разработчики и специалисты по данным должны обладать конкретными знаниями о том, как обрабатывать операции машинного обучения, а также техническими знаниями для управления производством на серверной и клиентской частях. Это – одна из причин, по которой программы машинного обучения в бизнесе часто имеют очень небольшой успех: требуется слишком много усилий, чтобы запустить их в производство.

Получается, что для того, чтобы воспользоваться всеми плюсами и “плюшками” от машинного обучения для бизнеса, разработчикам и компаниям нужно в первую очередь попробовать снизить нагрузку при его внедрении.  А значит, ускорить прототипирование и создание сложных Machine Learning (ML)-систем, при этом с меньшим объемом работ, и буквально в несколько строк кода.

Решения на рынке

Рынок уже предлагает что-то для решения этой проблемы. Вначале можно рассмотреть некоторые существующие системы для интеграции машинного обучения в прод, а также быстрого написания ML-пайплайнов: 

1) Jupyter – де-факто основная экспериментальная среда большинства data-scientistов. Безусловно ускоряет написание экспериментального кода, однако писать все модули и переносить далее в прод нужно руками часто нескольких разных разработчиков.

2) Azure ML / Amazon SageMaker / Google Cloud – Облачные платформы действительно позволяют собрать целую систему из готовых модулей и относительно быстро запустить в работу. Из минусов: большая стоимость, привязка к определенному клауду, а также малая кастомизация под специфические нужды бизнеса. Для крупного бизнеса это самый логичный вариант – строить ML-инфраструктуру в облаке.

3) DataRobot / Baseten – Предлагают интересный, но небольшой набор готовых модулей. Однако в Baseten вся интеграция подразумевается в kubernetes кластер. Это не всегда удобно и необходимо для Proof-of-Concept. Piper – также предоставляет open-source фреймворк, в котором можно будет собрать по-настоящему кастомизированный пайплайн из множества модулей. В основном такие компании либо не предоставляют open-source фреймворк, либо дают очень урезанный набор модулей для экспериментов, что ограничивает свободу, функциональность и применимость данных платформ. Это частично похоже на hub моделей и датасетов в huggingface.

4) Apache Airflow / Luigi – Это весьма популярные инструменты сборки ML-пайплайнов. Airflow можно подключить к kubernetes кластеру или собирать задачи через простой PythonOperator. Минус, что на этом их функционал в целом ограничен, то есть ML-модулей из коробки они не предоставляют, то есть все наработки все равно придется оборачивать в шедулер и это не всегда тривиальная задача.

5) Mlflow / DVC и пр. – Также на рынке много отличных проектов для трекинга экспериментов, сервинга и хранения моделей машинного обучения. Но они все больше утилитарные и не помогают напрямую в задаче ускорения построения MVP-проекта машинного обучения. Мы планируем добавить интеграции в Piper с самыми популярными фреймворками для нужд DS и ML-специалистов.

Так что же мы предлагаем в качестве решения проблемы?

Посмотрев на все инструменты на рынке, а также исходя из нашего опыта работы над множеством разных ML-проектов, мы поняли, что на на рынке нет подходящего нам решения. Поэтому мы решили разработать in-house решение, скрестить ужа с ежом и создать собственный фреймфорк, который бы решил наши и не только наши задачи быстрого прототипирования ML-проектов. Основными требованиями были: скорость разработки полноценной ML-системы, гибкость модулей, возможность кастомизаций, а также достаточный уровень качества самих модулей.


В результате у нас получился Piper – python фреймворк, позволяющий собрать полноценную ML-систему из набора готовых или кастомных модулей и развернуть систему в нужной среде. 

Мы хотели, чтобы Piper умел делать:

  • Легко собирал новое MVP или PoC  из готовых модулей.

  • Добавлял собственные модули для уникальных задач компании.

  • Разворачивал систему в нужную инфраструктуру.

Основной идеей нашего Piper стала модульность:

В ядре фреймворка столпом будет класс модуля или Executor. Из таких блоков разработчик сможет собирать ML-пайплайн. Ниже пример того, как это будет выглядеть в фреймворке Piper: 

class MyCustomExecutor(piper.Executor):
def call(self, my_image_path: str):
cv2.imread…

return result

Ниже пример как это может использовано в связке с другими модулями:

image = piper.pdf.PdfToImage(format=”opencv”)(pdf_path)
image_path = piper.image.ImageToTmpFile(format=”jpg”)(image)
custom_executor_result = MyExecutor()(image_path)
print(custom_executor_result)


После сборки и теста пайплайна на модулях идет этап деплоя и запуска системы в нужной инфраструктуре. Но, это конечно не все – мы планируем добавить поддержку следующих вариантов деплоя пайплайна:

  • Python virtualenv для локальной сборки.

  • Docker / Docker-compose в виде микросервисов.

  • Kubernetes.

  • Как DAG в Airflow.

  • Основные клауды.

Для удобства, мы сделали так, что настроить конкретный Environment можно либо в конфигурации проекта, либо с помощью контекстного менеджера, примерно вот так:

with piper.envs.Docker():
image_path = “hello.png”
executor = MyExecutor()
result = executor(image_path)
print(result)

Сборку и запуск проекта можно производить из кода или с помощью cli, одной простой командой

piper deploy –env=docker/

После того, как мы протестировали Piper на своих проектах в различных отраслях: от распознавания объектов до классификации документов – мы поняли, что зачастую трудности возникают на первых этапах проекта, – долгий ресерч и однообразная настройка инфраструктуры под нужды заказчика. Пообщавшись с нашими разработчиками, заказчиками и дата-саентистами, стало ясно, что такой фреймворк как Piper действительно имеет потенциал ускорения и упрощения  разработки, после чего начали воплощать его в жизнь для подтверждения гипотезы и уже на первых этапах увидели его полезность. В наших планах добавить в открытый доступ большое число протестированных модулей для широкого спектра задач индустрии. От распознавания лиц до классификаторов документов по текстам и рекомендательных систем. Также будут добавлены удобные интеграции с основными библиотеками для ML и Data-Science: numpy, pandas, scikit-learn, pytorch. Это необходимо, чтобы любой разработчик мог легко добавить нужную бизнес-логику с использованием популярных фреймворков.

Применение Piper на примере проекта

А теперь давайте вернемся к нашим изначальным тезисам о том, что подобные инструменты, оптимизирующие машинное обучение для нужд бизнеса, пока этому бизнесу не очень-то доступны, но очень нужны. Для наглядности рассмотрим бизнес кейс, как бы он решался традиционно, а как – с применением Piper.

Представим следующие условия:

  • У банка есть биографии клиентов, которые выплатили кредит и тех, которые не выплатили.

  • Цель – построить модель прогнозирования возврата кредита, что позволит оптимизировать направление кредитования и увеличить прибыль банка.

  • Данные: pdf файлы с биографиями, csv файл с отметками 1 – вернул, 0 – не вернул.

  • Задача: на основе данных из биографий, транзакций и меток возврата построить классификатор возврата кредита.

Рассмотрим два возможных пути решения:

  1. Силами собственной команды собрать in-house решение с нуля.

  2. Использовать Piper и собрать решение из готовых модулей.

При решение с Piper сборка производится на 90% за счет уже подготовленных модулей из библиотеки фреймворка, это помогает сократить затраты на поиск актуального решения и написания кода с нуля. Однако добавляется шаг сборки всей цепочки в пайплайн, чтения документации модулей. Но этот этап по нашему опыту получается значительно быстрее, так как в большинстве случаев DS-специалистам не нужно читать много статей по теме или искать рабочее решение в open-source. Нужно лишь найти подходящие модули в Piper, добавить нужную конфигурацию и собрать все в единый пайплайн. Возможно для уникальных кейсов придется дописать кастомную логику или на начальном этапе и в редких случаях дописать свои модули, но мы для этого делаем максимально удобный флоу кастомизации. То есть даже для уникальных задач прототипирование с Piper будет быстрее обычного in-house решения.

Вторым важным фактором ускорения разработки является возможность развернуть систему минимальными усилиями с помощью нескольких команд Piper. Можно указать необходимый вид инфраструктуры и запустить деплой системы. Это дает ускорение процессов в команде разработчиков. Так как в обычных in-house процессах data-scientist передает код (зачастую не самый понятный) разработчикам и девопсам для развертывания или встраивает в прод самостоятельно с помощью некой не самой удобной для этого системы вроде Airflow. То есть тратится много времени на взаимодействие разработчиков, лидов, менеджеров и на обертывания кода модели в прод сервисы. На этом этапе зачастую могут возникнуть ошибки вида: “потеряли” какую-то фичу, разработчик не понял принцип работы модели и неправильно настроил ее в сервисе или оптимизировал предпроцессинг по-своему, что тоже повлияло на точность результатов в проде. Поэтому в таком подходе время еще уходит и на тестирование модели в проде, а также исправление ошибок интеграции. С Piper шансы таких ошибок минимальны, так как фреймворк предоставляет протестированную автоматическую обертку в микросервисы или другую инфраструктуру. 

Ниже приведена наша примерная оценка сроков небольшого MVP для описанной банковской задачи:

Этапы

in-house

Piper

Изучение задачи и данных аналитиком, подготовка среды

10 дней

5 дней

Написание подготовки данных и обучение модели в Jupyter

21 день

-

Сбор пайплайна из модулей Piper и обучение моделей в Piper

-

5 дней

Перенос кода в прод

14 дней

3 дня

Устранение багов и оптимизации

10 дней

2 дня

Тестирование результатов решения

3 дня

3 дня

Итого

~2 месяца

18 дней

Подводя итог

  • Piper позволил достигнуть 300% увеличения продуктивности в 3 раза дешевле! 

  • Piper помогает в создании пайплайнов и не зависит от сторонних сервисов. Вы добавляете выбранный модуль в пайплайн, запускаете и легко строите всю инфраструктуру через venv, docker или клауд.

  • Piper ускоряет процесс разработки от эксперимента до продакшена, а также уменьшает количество рутинных задач. 

Понятно, что это лишь наши предварительные выводы. Работы предстоит еще много - к концу 2022 года мы планируем завершить написание ядра системы, покрыть основные окружения для деплоя и написать 10 базовых модулей  в области обработки документов, текстов и изображений. Сейчас Piper еще активно тестируется, поэтому если вам этот инструмент показался интересным или уже есть запрос на добавление определенных модулей, то смело добавляйтесь в наш чат https://t.me/pipertool, пишите в комменты и мы с удовольствием пообщаемся и пришлем фреймворк на тестирование, когда будет готова первая версия. Спасибо!

Комментарии (7)


  1. Kwent
    15.08.2022 15:14
    +3

    Написание подготовки данных и обучение модели в Jupyter - 21 день

    Пишите 42, так прирост будет еще больше) если там именно написание, не анализ данных, не ресерч, а вот именно написание кода загрузчиков и обучения и это не ваш первый проект, то 1-2 дня в максимум. Некоторые соревнования идут меньше 21 дня, где и ресерч, и новые данные, а еще за это время крутые модели надо выкатить.
    А если серьезно задача автоматизации подобных штук стоит сейчас остро, но пока не увидел киллер фич Piper


    1. skleg Автор
      15.08.2022 15:17

      Цифры действительно на нашем опыте и, конечно, очень примерные, так как все сильно зависит от задач, опыта разработчиков, но на наших коммерческих проектах выходило так. Киллер фича - берете код из своего юпитера и деплоите сразу как микросервис на FastAPI в одну команду cli, как по мне килер килер фича даже


      1. Kwent
        15.08.2022 15:40

        а как со всякими зависимостями разруливается? Или есть какой-то ограниченный набор что можно брать?


        1. skleg Автор
          15.08.2022 17:20

          Будет некий широкий набор модулей в опенсорсе, а дальше вы можете свои писать или улучшать существующие под себя


    1. skleg Автор
      15.08.2022 15:20
      +1

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


  1. PhoenixMSTU
    15.08.2022 19:42
    +3

    На словах орошая штука. Но кажется что продать это как закрытое решение не получится. Лей в гитхаб под MIT лицензией и продавай саппорт/кастомизацию.


    1. skleg Автор
      15.08.2022 19:47

      Читаете наши планы :)