Написано Эммануэлем Турли в сотрудничестве с Джеймсом Луо, Гочжэном Ла, Брайаном Калвертом, Джаем Чопра, Лей Сюй и Маркусом Мар-Лю.

В современных компаниях данные - это основа, на которой принимаются многие продукты и решения. Компания Cruise, занимающаяся прежде всего машинным обучением, в этом отношении не является исключением.

Cruise имеет петабайты разнородных данных: временные ряды показаний датчиков, данные, помеченные людьми, изображения, видео, аудиоклипы, реляционные данные из операционных хранилищ, облака точек 3D LiDAR, растровые и векторизованные карты, прогнозы машинного обучения, внешние наборы данных и многое другое. Все эти типы данных должны быть легкодоступными и высокодоступными для любого инженера для разработки конвейеров данных для анализа, машинного обучения и т. Д.

Невозможно ожидать, что каждый инженер Cruise будет знать, как извлекать данные, получать учетные данные и доступ, выполнять параллельную обработку и ссылаться на эти массивы данных. Чтобы решить эту проблему, мы разработали Terra, расширение Apache Beam SDK, которое:

  • Уменьшает трение при доступе к круизным данным
  • Абстракции Круизная инфраструктура и разрешения
  • Стандартизирует хранение и разработку в Cruise

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

Каждую неделю в Cruise более 70 уникальных пользователей отправляют более 2000 вакансий с помощью Terra. На данный момент Terra улучшила время выполнения конвейеров разработки функций на два порядка и повысила производительность разработки за счет сокращения времени выполнения работ и поощрения модульности и повторного использования кода в разных командах.

С Terra новые сотрудники могут написать конвейер, который генерирует миллионы строк сложных данных функций за считанные часы.

Как была создана Терра

Terra был разработан и построен на Python поверх Apache Beam, гибкого DSL для определения конвейеров обработки данных. Beam упрощает определение сложных DAG (направленных ациклических графов) этапов обработки данных, включая ветвление, объединение, отображение (N → N), сокращение (N → n, n ‹N), разветвление (n → N, n ‹N), а также чтение и запись наборов данных в / из файлов или популярных баз данных и хранилищ. Он поддерживает как пакетный (все сразу), так и потоковый (по мере поступления) режимы выполнения, включая сложные возможности работы с окнами.

Apache Beam - это де-факто способ определения конвейеров, которые будут выполняться в Google Dataflow. Он также поддерживает другие серверные части, такие как Apache Spark и Apache Flink, посредством вкладов с открытым исходным кодом.

Чтобы оптимизировать сквозные рабочие процессы пользователей, Terra обеспечивает простоту программирования для пользователей:

  1. Управление разрешениями
  2. Упаковка окружающей среды и отправка работы
  3. Интеграция с хранилищами данных Cruise
  4. Преобразования Boilerplate
  5. Происхождение вакансий и наборов данных
  6. Интерактивная обработка данных

Управление разрешениями

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

Упаковка окружающей среды и отправка работы

Управление зависимостями - одна из самых сложных проблем при масштабной обработке данных на высокопараллельных кластерах. Разнообразные локальные зависимости пользователей (общедоступные пакеты, частные пакеты Cruise Python, собственные библиотеки C ++ и т. Д.) Необходимо разрешить, упаковать, отправить работникам и установить с высокой точностью, чтобы воспроизвести ожидаемую вычислительную среду. Некоторые конвейеры даже предполагают воссоздание на удаленных сотрудниках среды выполнения, найденной на нашем автономном транспортном средстве, для повторного выполнения определенных версий стека автомобилей.

Terra аккуратно абстрагирует управление зависимостями, чтобы дать пользователям возможность создавать эти сложные конвейеры без глубокого опыта развертывания среды.

Интеграция с хранилищами данных Cruise

Многочисленные источники данных (необработанные данные об автомобилях, маркированные данные, картографические данные, оперативные данные) доступны в различных магазинах с различными схемами доступа (хранятся на складе, за API, в онлайн-базе данных, в облачных файловых системах) и масштабируемыми возможностями.

Чтобы обеспечить легкий доступ, Terra предоставляет стандартные соединители для каждого из этих различных хранилищ, которые интуитивно понятны для пользователей, вместо системной семантики этих хранилищ данных.

Шаблонные преобразования для общих операций

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

Эти операции включают в себя базовые задачи ввода-вывода (чтение / запись в / из локальных или удаленных файлов и хранилищ), логику разделения набора данных, манипулирование данными (манипулирование полями, преобразование типов, чтение сложных сериализаций), дополнительные общие операции сопоставления / сокращения (группировка по key, join и т. д.), инструменты отладки, обработка отказоустойчивости и т. д.

Например, операции разветвления часто требуют перетасовки данных между исполнителями, чтобы максимизировать распараллеливание. Когда разработчики используют эти операции, Terra автоматически оптимизирует распараллеливание.

Вот как может выглядеть типичный трубопровод Terra:

import apache_beam as beam
from terra.beam import Pipeline, TolerantParDo, FetchImage
from terra.beam.io import ReadFromBigQuery, WriteToFeatureStore, FetchCarData
with Pipeline(...) as pipeline:
    pcoll = (        
        pipeline
        | "Query Data Lake" >> ReadFromBigQuery(query=SQL_QUERY)
        | "Filter invalid data" >> beam.Filter(my_filter_fn)
        | "Fetch labeled image" >> FetchImage(
            url_field="image_url", field="image")
        | "Retrieve sensor data" >> FetchCarData()
        | "Extract features" >> TolerantParDo(
            FeatureExtractionDoFn(), tolerance=0.01)
        | "Store features" >> WriteToFeatureStore()
    )

Происхождение и отслеживаемость данных

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

После отправки задания Terra проверит DAG и извлечет соответствующую информацию (имена преобразований, параметры, строки SQL-запроса, конфигурации вычислений, спецификации выходных артефактов и т. Д.) И сохранит ее в хранилище данных, управляемом веб-интерфейсом.

Интерактивная обработка данных

Для работы по разработке конвейера внутри Jupyter Notebooks пользователям необходимо быстро перебирать изменения и иметь возможность повторно выполнять части конвейера для обновления визуализаций.

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

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

Создание набора обучающих данных для ключевой модели машинного обучения на основе видения сократилось с 2 дней до 20 минут с использованием Terra. Точно так же конвейер для статистической модели критических дорожных событий извлек 68 ГБ объектов из 390 000 участков дороги менее чем за час с использованием Terra.

Присоединяйтесь к нам

Заинтересованы в использовании машинного обучения новыми и увлекательными способами? Присоединяйтесь к нам и работайте над нашими уникальными инженерными задачами.