Spiral: сервис высокопроизводительной инфраструктуры машинного обучения, разработанный Facebook.

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

Для миллиардов людей, использующих Facebook, наши сервисы могут выглядеть как единое унифицированное мобильное приложение или веб-сайт. Внутри компании представление иное.balancing internet trafficкtranscoding imagesкproviding reliable storage. The efficiency of Facebook as a whole is the sum of the efficiencies of its individual services, and each service is typically optimized in its own way, with approaches that may be difficult to generalize or adapt in the face of fast-paced changes. To more effectively optimize our many services, with the flexibility to adapt to a constantly changing interconnected web of internal services, we have developed Spiral. Spiral is a system for self-tuning high-performance infrastructure services at Facebook scale, using techniques that leverage real-time machine learning. By replacing hand-tuned heuristics with Spiral, we can optimize updated services in minutes rather than in weeks.

A new approach to meet Challenges of scale

В Facebook изменения происходят очень быстро: кодовая база Facebook загружается в производство каждые несколько часов — например,new versions of the front end— как часть нашего непрерывного процесса развертывания. В этом динамичном мире пытаться вручную настроить службы для поддержания максимальной эффективности нецелесообразно. настроить эвристики вручную.Мы должны коренным образом изменить свое отношение к сопровождению программного обеспечения.

To efficiently address this challenge, the system needed to become self-tuning rather than rely on manually hard-coded heuristics and parameters. This shift prompted Facebook engineers to approach work in a new way: Instead of looking at charts and logs produced by the system to verify correct and efficient operation, engineers now express what it means for a system to operate correctly and efficiently in code. Today, rather than specify how to compute correct responses to requests, our engineers encode the means of providing feedback to a self-tuning system.

Традиционная политика кэширования может выглядеть как дерево с ветвями, которые учитывают размер объекта, тип и другие метаданные, чтобы решить, следует ли кэшировать его. история доступа к элементу: если к этому элементу никогда не обращались, возможно, кэшировать его было плохой идеей.На языке машинного обучения система, которая использует метаданные (функции) и связанную обратную связь (метки) для различения элементов, быть «классификатором». Этот классификатор будет использоваться для принятия решений об элементах, поступающих в кеш, и система будет постоянно переобучаться. Это непрерывное переобучение позволяет системе оставаться в курсе даже при изменении окружающей среды.

Концептуально этот подход аналогиченdeclarative programming. SQL is a popular example of this approach: Instead of specifying how to compute the result of a complex query, an engineer just needs to specify what needs to be computed and then the engine figures out the optimal query and executes it.

The challenge of using declarative programming for systems is making sure objectives are specified correctly and completely. As with the self-tuning image cache policy above, if the feedback for what should and should not be cached is inaccurate or incomplete, the system will quickly learn to provide incorrect caching decisions, which will degrade performance. (This paper by several Google engineersидет подробно об этой проблеме и других, связанных с использованием машинного обучения с обратной связью.) По нашему опыту, точное определение желаемого результата для самонастройки — одна из самых сложных частей адаптации Spiral.Однако мы также обнаружили, что инженеры, как правило, приходили к четким и правильным определениям после нескольких итераций.

Spiral: Easy integration and real-time predictions

Чтобы системные инженеры в Facebook могли идти в ногу с постоянно растущими темпами изменений, инженеры в нашейFacebook Bostonoffice built Spiral, a small, embedded C++ library with very few dependencies. Spiral uses machine learning to create data-driven and reactive heuristics for resource-constrained real-time services. The system allows for much faster development and hands-free maintenance of those services, compared with the hand-coded alternative.

Интеграция со Spiral заключается в добавлении в код всего двух сайтов вызова: одного для прогнозирования и одного для обратной связи. Сайт прогнозирования — это результат интеллектуальной эвристики, используемой для принятия решений, таких как «Должен ли этот элемент быть допущен в кэш?» Вызов предсказания реализован как быстрое локальное вычисление и предназначен для выполнения при каждом решении.

Сайт обратной связи предназначен для предоставления периодических отзывов, таких как «Срок действия этого элемента истек из кеша, но он никогда не попадал в него, поэтому нам, вероятно, не следует кэшировать такие элементы, как этот».

The library can operate in a fully embedded mode, or it can send feedback and statistics to the Spiral back-end service, which can visualize useful information for debugging, log data to long-term storage for later analysis, and perform the heavy lifting with training and selecting models that are too resource-intensive to train (but not too intensive to run) in the embedded mode.

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

In Spiral, learning starts as soon as feedback comes in. Prediction quality improves progressively as more feedback is generated. In most services, feedback is available within seconds to minutes, so the development cycle is very short. Domain experts can add a new feature and see within minutes whether it is helping to improve the quality of predictions.

Unlike hard-coded heuristics, Spiral-based heuristics can adapt to changing conditions. In the case of a cache admission policy, for example, if certain types of items are requested less frequently, the feedback will retrain the classifier to reduce the likelihood of admitting such items without any need for human intervention.

Case study: Automating reactive caching heuristics

Первый производственный вариант использования Spiral идеально соответствовал известной цитате Фила Карлтона: «В информатике есть только две сложные вещи: аннулирование кеша и присвоение имен вещам». факт немедленно решить проблему инвалидации кеша с помощью Spiral.)

В Facebook мы внедрили реактивный кеш, который позволяет «пользователям» Spiral (другим нашим внутренним системам) подписываться на результаты запроса. С точки зрения пользователя, эта система предоставляет результат запроса и подписку на этот результат. внешнее событие влияет на запрос, он автоматически отправляет обновленный результат клиенту.Это освобождает клиента от бремени опроса и снижает нагрузку на интерфейсную веб-службу, которая вычисляет результаты запроса.

When a user submits a query, the reactive cache first sends the query to the web front-end, and then creates a subscription, and caches and returns the result. Along with the original result, the cache receives a list of objects and associations that were touched while computing the result. It then begins monitoring a stream of database updates to any objects or associations the query accessed. Whenever it sees an update that may affect one of the active subscriptions, the reactive cache reexecutes the query and compares the result with its cache. If the result did in fact change, it sends the new result to the client and updates its own cache.

Одна проблема, с которой сталкивается эта система, заключается в том, что существует огромный объем обновлений базы данных, но лишь малая часть из них влияет на вывод запроса.Если запрос интересует «Кому из моих друзей понравился этот пост?», нет необходимости получать непрерывный обновления, например, когда пост последний раз просматривался.

Проблема аналогична фильтрации спама: должно ли данное сообщение классифицироваться системой как спам (не влияет на результат запроса) или ветчина (влияет на результат запроса)? Первым решением было создание статических черных списков вручную. Это было возможно, потому что команда инженеров реактивного кэша признала, что более 99 процентов нагрузки приходится на очень небольшой набор запросов.Для запросов с небольшим объемом они просто предполагали, что все обновления были ошибочными, и повторно выполняли запрос для каждого обновления объекта, на который ссылаются. по запросу. Для небольшого набора запросов большого объема они создали черные списки, тщательно наблюдая за выполнением запроса, чтобы определить, какие поля в каждом объекте действительно повлияли на результат запроса. Этот процесс обычно занимал несколько недели времени инженера для каждого черного списка. Чтобы еще больше усложнить ситуацию, набор запросов большого объема постоянно менялся, поэтому черные списки быстро устаревают. Всякий раз, когда служба, использующая кеш, меняла запрос, который она выполняла, системе пришлось бы изменить политику фильтрации спама, что потребовало еще большей инженерной работы.

A Better Solution: Spiral spam filtering

After reexecuting a query, it is easy to determine whether the observed updates were spam or ham by simply comparing the new query result with the old query result. This mechanism was used to provide feedback to Spiral, allowing it to create a classifier for updates.

Чтобы обеспечить беспристрастную выборку, реактивный кеш поддерживает и предоставляет обратную связь только от небольшого подмножества подписок. Кэш не фильтрует обновления этих подписок; запрос выполняется повторно всякий раз, когда соответствующий объект или ассоциация Он сравнивает новый вывод запроса с кешированной версией, а затем использует его для предоставления обратной связи Spiral — например, сообщая ему, что обновление «последний просмотр в» не влияет на «количество лайков».

Spiral collects this feedback from all reactive cache servers and uses it to train a classifier for every distinct query type. These classifiers are periodically pushed to the cache servers. Creating filters for new queries or updating filters to respond to changing behavior in the web tier no longer requires any manual intervention from the engineering team. As feedback for new queries arrives, Spiral automatically creates a new classifier for those filters.

Faster deployment and more opportunities for Spiral

С механизмом аннулирования кеша на основе Spiral время, необходимое для поддержки нового запроса в реактивном кеше, сократилось с недель до минут.До Spiral инженерам реактивного кеша приходилось проверять побочные эффекты каждого нового запроса, проводя эксперименты. и сбор данных вручную.Однако со Spiral большинство вариантов использования (сопоставление с запросом) изучается локальной моделью автоматически в течение нескольких минут, поэтому локальный вывод доступен немедленно.Сервер может обучать модель, используя данные с нескольких серверов в течение 10–20 минут для большинства случаев использования. После публикации на всех отдельных серверах эта более качественная модель доступна для более точного вывода. Когда запрос изменяется, серверы могут адаптироваться к изменить и повторно изучить новые модели существенности, как только они получат обновленные запросы.

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