← Все вакансии

Разработчик в команду разработки алгоритмов симуляции

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

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

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

Задачи и обязанности

Разработка модели реалистичных задержек компонентов пайплайна

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

Обеспечение детерминизма вычислений при различиях в железе

Разное железо (GPU/CPU на кластере и в автомобиле) может вносить систематические ошибки в вычисления — от различий в квантизации float до несовместимости инструкций. Ваша задача — разработать механизм автоматического выявления критичных отклонений в поведении алгоритмов, вызванных различиями в аппаратной платформе. Вам предстоит спроектировать и внедрить прослойку, позволяющую вносить корректировки в промежуточные вычисления в симуляции, чтобы полностью исключить влияние «железного» фактора на воспроизводимость сценариев и сохранить высокое доверие к результатам симуляции.

Развитие архитектуры симуляции

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

При этом есть понимание, что данную архитектуру можно перестроить так, чтобы вычисления для моделирования автомобиля и окружающего мира выполнялись параллельно и асинхронно, синхронизируясь через единое представление мира. Это позволит снизить время ожидания экспериментов на 40–50%.

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

Больше о бэкенде в Яндексе — в канале Yandex for Backend

Требования

  • Имеете большой опыт разработки на C++. Для нас важно умение писать не только быстрый, но и поддерживаемый код, готовый к развитию силами команды
  • Понимаете, как работают распределённые системы и многопоточность. Умеете проектировать пайплайны с асинхронной обработкой данных, где важно управлять состоянием и избегать гонок данных в высоконагруженных средах
  • Умеете работать с перформансом и профилированием. Вам предстоит много работать с задержками и оптимизацией, поэтому опыт профилирования CPU/GPU, работа с кэшем и низкоуровневая оптимизация будут ключевыми
  • Обладаете сильными навыками математического моделирования. Вам предстоит работать с временными рядами, задержками, системами массового обслуживания. Понимание теории вероятностей и математической статистики будет большим плюсом для анализа расхождений между реальностью и симуляцией
  • Способны к самостоятельной работе и быстрому погружению в сложную предметную область. Вам предстоит самостоятельно продумывать постановку экспериментов, делать прототипы, проводить исследования и принимать архитектурные решения

Дополнительные требования

  • Имеете опыт работы с симуляторами или робототехническими платформами (ROS, Gazebo, CARLA, NVIDIA Isaac Sim и другими)
  • Понимаете особенности работы с GPU (CUDA) и гетерогенными вычислительными системами
  • Имеете опыт в разработке систем реального времени (Real-Time Systems) или embedded-разработке
  • Участвовали в соревнованиях по программированию (ACM ICPC, Codeforces) или хакатонах по робототехнике
Python
Откликнуться →