🧿 RuntimeNodes: как ML-разработчики в Яндексе начали писать рантайм сами
Привет, это Ильнур Хузиев, руководитель службы генеративного ответа Алисы AI. Я работаю в команде, которая переносит ML-эксперименты для генеративных ответов Алисы AI в Поиске из офлайна в продакшен.
Офлайн‑прототипы у нас обычно строятся поверх MapReduce‑хранилища. В Яндексе для этого используется YTsaurus. Пайплайны, как правило, описываются средствами Nirvana, а большая часть бизнес‑логики — на YQL и Python. Это удобно для экспериментов: не нужно разворачивать сервис и укладываться в задержку ответа.
По сути, система представляет собой набор операций, которые преобразуют одну таблицу в другую. В рантайме ту же логику нужно применить к одному запросу, то есть фактически обработать одну строку. Поэтому можно сказать, что задача сводится к «переписыванию».
🚘 Тут всплывает сразу несколько проблем. Проект последовательно переходит от одной команды к другой и вечно «горит». Неочевидно, действительно ли рантайм-версия ведёт себя так же, как офлайн-прототип. Для оценки рантайма всё ещё нужен офлайн-процесс, просто он должен работать на рантайм-мощностях. Пока одна команда переписывает пайплайн, другая продолжает развивать офлайн-версию, и получается долгоживущий форк.
🤖 Мы решили пойти от обратного и перенести удобство офлайн-разработки в сам рантайм. Так появился RuntimeNodes — DSL с графом вычислений, в котором можно за секунды собрать пайплайн с обращением к хранилищу данных, вызовом LLM и Python-функциями, сразу прогнать его в вебе и затем взять тот же граф в продакшен без полного переписывания.
🔳 В статье на Хабре рассказываю подробнее про путь к RuntimeNodes и его устройство:⚪️ Какие четыре «боли» превращают простое «переписывание» офлайн-пайплайна в рантайм в организационный и технический ад
⚪️ Из чего состоит модель данных RuntimeNodes и почему стриминг в ней реализовали через версионирование данных без отдельного сложного механизма
⚪️ Какую цену мы платим за скорость и простоту: от урезанного Python без сетевых вызовов до отдельной борьбы за баланс нагрузки между общими ML-артефактами
Подписывайтесь:
💬 @Yandex4ML
📹 @YandexML