Как PyTorch помог Lyft увеличить скорость работы

автор рубрика
Как PyTorch помог Lyft увеличить скорость работы

Lyft — сервис онлайн-заказов такси, прямой конкурент Uber — недавно начал использовать Python-фреймворк PyTorch для развития своих беспилотных автомобилей. Читайте у нас: как переход на PyTorch позволило Lyft Level 5 обучать, тестировать и внедрять Machine Learning модели проще, быстрее и надежнее.

С чего все начиналось

За разработку и внедрение моделей машинного обучения (Machine Learning) в беспилотные автомобили отвечает специальное подразделение Lyft — Level 5. Попутно решаются такие проблемы как: картография, восприятие местности, прогнозирование и планирование. Обучение и проверка моделей осуществляется на миллионах изображений и наборах точек с устройств LiDAR/RADAR, которые устанавливаются на крышах или перед бамперами; также обучают на траекториях машин и потоках видео. Затем эту модель разворачивают в беспилотный автомобиль и тестриуют. Результатом тестирования становятся ограничивающие прямоугольники (bounding boxes), состояния светофоров и траектории транспортных средств с точностью до миллисекунд.
В начале своего пути Level 5 разработал свой собственный фреймворк машинного обучения. Но с усложнением моделей он завел в тупик, не позволяя увеличивать скорость обучения. Сложные модели обучались сутки, а не часы, как этого бы хотелось. Кроме того, требуется время для проверки модели, а также внедрения в беспилотный автомобиль. Поэтому было принято решение перейти на сторону PyTorch.

Причины перехода на PyTorch

В 2017 команда Lyft Level 5 уже реализовывала модели компьютерного зрения. Через несколько месяцев был создан свой фреймворк, который помог встроить модели машинного обучения в беспилотные автомобили. Но через некоторое время Level 5 пришлось подумать над сменой технологий из-за следующих причин:

  • Обучать модели нужно за часы. Обучение первых моделей занимало около суток. Для бизнеса это слишком много, поскольку время необходимо также на развитие новых идей, её реализации, проверки и развёртывания в production. И даже если размер данных растёт, то желательно, чтобы затрачиваемое время исчислялось хотя бы в часах.
  • Развертывание модели сразу и на месте. Процесс перехода обученной модели в готовую для работы в среде выполнения C++ был сложным и длительным. К тому же, неудобными были способы добавления новых слоев Deep Learning к модели.
  • Стандартизированные эксперименты и исследования. В Lyft была пропасть между экспериментированием и исследованием — они требовали разных сред и технологий разработки. Поэтому нужно что-то одно.
  • Использование оборудования на максимум. Ранее обучение моделей Machine Learning не использовала все возможности GPU. Особенно это наблюдалось с увеличением количества данных.

После рассмотрения этих пунктов Lyft Level 5 приняли решение включить PyTorch в основу построения моделей машинного обучения. За 6 месяцев удалось получить прототип, перенести предыдущие модели в новую инфраструктуру, а также нанять на работу 40 ML-инженеров.

Дополнительные возможности с Jadoo

Также была создана среда под названием Jadoo, которая делает разработку на PyTorch удобней. Она позволят ML-инженерам и исследователям писать код быстро, вместо того, чтобы пытаться сделать ML «проще» для неспециалистов и абстрагироваться от возможностей PyTorch. У Jadoo есть ряд особенностей:

  • Распределенные вычисления, где одному узлу соответствует один GPU.
  • Результат в приоритете. В Jadoo все модели готовы для интеграции в автомобили. Причём, модель может быть развернута через TorchScript как для С++, так и для Python.
  • Качество написания важно. Написанный код в Jadoo проходит через unit-тесты, проверку типов, стили кодирования, профилирование, логирование и остальные особенности, которые позволяют иметь на выходе качественный код.

Распределенное обучение

Первый шаг к достижению распределенного облачного обучения – убедиться, что локальная среда разработки хорошо контролируется и контейнеризуется. Docker-контейнер и Jadoo-код используется для локальной разработки, обучения в распределенном облаке, а также для непрерывной интеграции (Continuous Integration, CI). Распределенное обучение возлагается на плечи PyTorch. Поэтому обучение происходит с помощью DistributedDataParallel.

def __init__(self) -> None:
    super().
    self.model = self._load_model(pretrained_backbone=True).cuda()
    self.model = DistributedDataParallel(self.model, 
                                         device_ids=[torch.cuda.current_device()],
                                         output_device=torch.cuda.current_device())

Интеграция с C++ с помощью LibTorch and TorchScript

Были небольшие опасения в использовании PyTorch, поскольку в беспилотных автомобилях используется C++, а PyTorch — это Python-фреймворк. Но опасения были развеяны LibTorch, который позволяет разворачивать обученные модели через TorchScript и C++ API очень просто. C++ API особенно удобен, поскольку обладает схожим с PyTorch синтаксисом, поэтому не занимает много времени на изучение:

# Python
output = torch.where(score_over_threshold, label, unknown_labels)
 
// C++ 
const auto output = torch::where(score_over_threshold, label, unknown_labels);

Jadoo также проверят код на возможность его перевода в TorchScript. В Level 5 посчитали подобную практику полезной. Она убирает все препятствия для развёртывания Machine Learning модели.

Результаты внедрения PyTorch

Среднее время обучения снизилось с суток до 1-2 часов. PyTorch и Jadoo cделали разработку моделей, их тестирование и развертывание в самих беспилотных автомобилей проще, надёжнее и быстрее.

Мы (Lyft Level 5) считаем, что добились огромных успехов в создание ML моделей, приняв PyTorch и создав Jadoo. Всего за несколько месяцев работы мы смогли переместить около десятка моделей из нашей старой инфраструктуры в PyTorch и развернуть их с помощью LibTorch [1].

В дальнейшем Lyft Level 5 будет работать над профилированием, оптимизацией моделей, а также над интроспекцией и визуализацией данных.

 

 

О разработке моделей Machine Learning на PyTorch на реальных примерах Data Science, вы узнаете на специализированном курсе «PYNN: Введение в Нейронные сети на Python» в лицензированном учебном центре обучения и повышения квалификации IT-специалистов в Москве.

Источники
  1. https://medium.com/pytorch/how-lyft-uses-pytorch-to-power-machine-learning-for-their-self-driving-cars-80642bc2d0ae
Комментировать

Ваш адрес email не будет опубликован. Обязательные поля помечены *