Эволюция платформ машинного обучения в крупных технологических компаниях диктуется необходимостью масштабирования процессов и глубокой интеграции AI в ключевые продукты. В рамках специализированного веб-каста хост подкаста Сэм Шарп и руководитель направления AI-инфраструктуры в Meta Адитья Калро обсудили, как изменилась платформа FB Learner Flow за последние четыре года. Пройдя путь от монолитного инструмента для обучения моделей до комплексной экосистемы, инфраструктура компании превратилась в модульный комплекс, охватывающий весь жизненный цикл MLOps — от разметки данных до оптимизации под специализированное железо.
🕒 Откуда все начиналось: Эра FB Learner Flow 0:00
В 2018 году Сэм Шарп впервые связался с Адитьей Калро. На тот момент Адитья работал старшим менеджером по инженерии программного обеспечения в Meta, отвечая за AI-инфраструктуру. Сэм изучал опыт передовых ИТ-гигантов для своей книги «The Definitive Guide to Machine Learning Platforms». В то время платформа FB Learner Flow существовала уже пару лет, ею управляла небольшая команда инженеров. Она обеспечивала базовые сценарии: персонализацию новостной ленты Facebook и фильтрацию нежелательного контента.
Философия FB Learner Flow строилась на базовых принципах переиспользуемости и компонуемости. Платформа представляла собой движок для исполнения рабочих процессов (workflows), задаваемых через API. Процессы состояли из операторов, которыми могли выступать как кастомные бинарные файлы, так и другие вложенные процессы. Это позволяло, например, создавать обобщенный поиск гиперпараметров поверх любого тренировочного процесса.
Второй важной вехой было удобство инструментов управления экспериментами, что, по мнению Адитьи, являлось самой сложной частью работы. Команда сфокусировалась на консистентности экспериментов, чтобы исключить влияние случайных системных факторов на результаты. Были созданы UI и CLI для поиска, сравнения и тегирования тестов. Метрики (такие как AUC-кривые) стали объектами первого класса, что позволило даже инженерам интерфейсов, не искушенным в ML, запускать процессы и использовать результаты.
Важнейшим нововведением стало кэширование результатов работы каждого оператора. По словам Адитьи, если один воркфлоу использовал шаги, уже выполненные другим, система брала данные из кэша. Это заложило основу для последующей автоматизации и эффективного поиска фичей.
⚙️ Эволюция экосистемы: От обучения к полному циклу MLOps 10:13
За четыре года платформа претерпела масштабные изменения. Изначально инженеры были сфокусированы преимущественно на обучении моделей, однако вскоре возникла необходимость в развитии распределенного обучения из-за взрывного роста парка GPU в Facebook. Как утверждает Адитья, если раньше компания полагалась в основном на сторонние графические процессоры, то сегодня Meta разрабатывает специализированное железо собственной архитектуры под задачи искусственного интеллекта.
Важнейшим вектором развития стала работа с данными и признаками (features). Ранее инженерия фичей полностью лежала на продуктовых командах, у платформы не было для этого инструментов. В ответ на этот вызов команда инфраструктуры разработала два раздельных решения:
- Магазин признаков (Feature Store): Адитья подчеркивает, что это не просто хранилище данных, а аналог «App Store» — маркетплейс, который связывает пользователей фичей с различными источниками хранения данных. Разработка этого проекта началась еще в 2019 году.
- Инструменты разработки признаков (Feature Engineering Development): Слой, включающий компиляторы, способные трансформировать высокоуровневые описания фичей в готовые конвейеры обработки данных (data pipelines).
Кроме того, в экосистему были интегрированы платформа разметки данных AI Data, платформа быстрых данных для распределенного обучения, а также сервисы инференса. Новая платформа инференса позволила динамически подтягивать фичи из Feature Store, избавляя от необходимости передавать абсолютно все признаки внутри присылаемого примера. Для связывания всех этих разрозненных компонентов инженеры создали сквозной высокоуровневый слой абстракции для MLOps.
🏷️ Автоматизация разметки данных и контроль качества 20:00
Эффективная разметка огромных массивов данных стала критически важной задачей для Meta. Платформа поддерживает два направления разметки: полностью автоматическое и ручное. Автоматическая разметка применяется в основном в сценариях персонализации. По словам Адитьи, это работает через фиксацию пользовательских взаимодействий: система сопоставляет факт показа истории пользователю с последующим событием (например, кликом или его отсутствием) внутри заданного временного окна.
Для ручной разметки, где задействован распределенный по всему миру штат асессоров, была выстроена сложная система контроля качества:
- Оценка уверенности (Confidence Score): При разметке объекта человеком система запрашивает оценку его уверенности. Эти данные используются для обучения внутренней ML-модели разметки.
- Выборочная проверка (Spot Checker): Специальный алгоритм случайным образом выбирает задачи, выполненные конкретным разметчиком, и сравнивает их с вердиктами других людей. Это позволяет оценивать профессионализм сотрудников и обучать ML-модель.
- Гибридный подход: По утверждению Адитьи, если уверенность ML-модели в правильности тега находится в районе 50%, к процессу привлекается человек. Если же показатель находится на краях распределения Гаусса (очень высокая или очень низкая уверенность), ручная разметка исключается ради экономии ресурсов.
Сами интерфейсы разметки сделаны плагиноемкими. Например, команда честности и безопасности (Integrity team), которая является ключевым потребителем этих инструментов для модерации хейтспича, создала свои модули. Для задач компьютерного зрения были разработаны плагины, позволяющие асессорам рисовать ограничивающие рамки (bounding boxes) прямо поверх изображений.
📊 Стандартизация форматов и борьба с монолитами 17:33
Одной из главных ошибок при проектировании первой версии FB Learner Flow Адитья называет ее монолитную архитектуру. Впоследствии систему пришлось разделить на независимые компоненты, изолировав даже пользовательский интерфейс (UI). Калро убежден, что система обязана быть модульной, а интерфейсы взаимодействия (API) и протоколы передачи данных между компонентами должны быть строго специфицированы.
Вторым серьезным вызовом стала стандартизация форматов данных внутри компании. Адитья упоминает, что его коллеги из других IT-гигантов внедряли стандарты с самого начала, что значительно облегчало им жизнь. В Meta этот процесс шел сложнее из-за масштабов организации. Для задач персонализации за основу был взят формат DWRF — табличный формат, который инженеры Meta слегка модифицировали под свои нужды. Основная сложность заключалась в адаптации формата под разреженные данные (sparse data), которых в избытке в рекламе и новостной ленте.
Процесс согласования стандартов требовал огромных усилий. Для координации использовались дизайн-документы, масштабные встречи и внутренняя корпоративная сеть Workplace (аналог Facebook для сотрудников). Полностью единого формата «правящего всеми» в компании нет и сейчас. Однако инженерам удалось сократить хаос до 4–5 популярных фреймворков, которые жестко задают форматы данных для своих сценариев и покрывают основную массу задач компании.
🛡️ Безопасность, DevSecOps и отслеживание связей (Lineage) 13:18
Развитие платформы привело команду к осознанию важного тезиса: разработку систем машинного обучения необходимо приравнивать к классической разработке программного обеспечения. Процессы сборки, релиза и переобучения моделей требуют жесткого контроля. В Meta внедрили методологию DevSecOps, активно сотрудничая со внутренней командой безопасности. Это помогло устранить уязвимости в инфраструктуре, настроить изоляцию данных и разграничить доступ: например, гарантировать, что данные, предназначенные строго для одной модели, не будут доступны другим.
Однако самым сложным элементом, который изначально не закладывался в архитектуру, оказалось отслеживание происхождения данных и моделей — lineage. Необходимость в нем возникла, когда интерпретация данных в компании начала меняться. По словам Адитьи, если в продакшене обнаруживалась ошибка в фиче, инженерам требовалось мгновенно отследить всю цепочку зависимостей, найти каждую модель, использовавшую эту фичу, и отправить ее на переобучение.
Для решения этой проблемы Meta задействовала свою проверенную инфраструктуру:
- Графовая база данных: Инженеры адаптировали внутреннюю систему «HINT», которая изначально создавалась для построения социального графа пользователей Facebook.
- Сущности графа: В этот технический граф lineage заносятся воркфлоу, экземпляры моделей, используемые фичи и исходные источники данных.
- Результат: Калро отмечает, что благодаря этому разработчик может подключиться к любой точке графа и легко пройти по цепочке связей как вперед, так и назад. Это решение из коробки дало платформе огромную масштабируемость и надежность.
🔬 Исследования против Продакшна: Разница в философиях 32:00
Платформа машинного обучения Meta вынуждена одновременно поддерживать два принципиально разных лагеря: исследовательское подразделение (Facebook AI Research) и продуктовые команды (например, реклама или лента новостей). Адитья объясняет, что ключевое различие между ними кроется в скорости итераций и требованиях к стабильности.
Исследователи работают значительно быстрее, их процессы носят хаотичный и поисковый характер. Специально для них поверх FB Learner Flow был развернут интерфейс, имитирующий привычную для ученых среду Slurm. При этом требования к аптайму у исследователей существенно ниже. По словам гостя, если в процессе распределенного обучения исследовательской модели падает одна из машин, ученые могут безболезненно перезапустить процесс с контрольной точки (чекпоинта).
В продакшн-системах логика совершенно иная:
- Длительность процессов: Распределенное обучение продуктовых моделей может непрерывно идти в течение нескольких дней.
- Эффект масштаба: Сбой хотя бы одной ноды в огромном кластере из-за кумулятивного эффекта может обрушить весь процесс обучения. Из-за этого стабильность инфраструктуры здесь ставится во главу угла.
🚀 Развертывание, версионирование и аппаратная оптимизация 34:11
Для предотвращения выкатки некачественных моделей в продакшн на платформе реализована строгая система валидации и версионирования. Платформа инференса поддерживает одновременную работу нескольких версий одной модели, а запросы направляются с помощью динамического ключевого слова latest. Перед полным релизом применяется режим теневого трафика (shadow mode), когда новая модель параллельно обрабатывает реальные запросы, но ее ответы не отдаются пользователю, а лишь сравниваются с результатами текущей модели. Полный перевод трафика на новую модель происходит плавно и контролируется фреймворком Quick Experimentation (QE), который глубоко укоренен в культуре Meta.
Исторически инфраструктура Meta развивалась без использования контейнеров. Платформа до сих пор во многом полагается на хост-ОС, однако сейчас компания активно мигрирует на собственное внутреннее решение для контейнеризации, которое духовно очень близко к Kubernetes. Адитья советует любым компаниям, создающим ML-платформы с нуля, сразу начинать с контейнеров, поскольку это значительно упрощает дистрибуцию софта, безопасность и масштабирование.
В вопросах выбора между собственной разработкой и open-source Адитья рекомендует всегда отдавать приоритет открытому ПО, если оно позволяет решить задачу. Именно так в экосистему Meta вошел PyTorch: компания интегрировала его в виде отдельного оператора, помогая проекту расти. В данный момент Meta даже пытается заменить свои внутренние высокооптимизированные реализации случайных лесов (random forests) и деревьев решений на открытые альтернативы, поскольку перформанс open-source решений наконец догнал внутренние разработки.
Финальным этапом жизненного цикла модели является ее аппаратная оптимизация. Совместно со специализированной командой AI Software Hardware Co-design инженеры создают компиляторы под конкретные устройства — смартфоны, гарнитуры Oculus или внутренние GPU. Оптимизация встроена прямо в рабочие процессы: команда Oculus может добавить в свой воркфлоу кастомный оператор оптимизации. Это позволяет проводить не только поиск гиперпараметров, но и автоматический поиск оптимальной архитектуры нейросети (architecture sweep) под конкретный чип.