Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2🔥2
Привет, меня зовут Сергей Гутынин, я руководитель службы системной разработки в Автономном транспорте и роботах. У всякого бизнеса есть требование: масштабироваться. Производство роботов-доставщиков не стало исключением. Мы хотели сделать их умнее, дешевле и автономнее, а саму сборку поставить на поток.
Но когда мы подошли к этой задаче, оказалось, что маленькими изменениями не отделаться — робота пришлось основательно пересобрать.
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15🔥8🦄6
Привет, меня зовут Витя Хаймоненко, я разработчик в команде голосовой активации Алисы. Сегодня я расскажу, как мы прошли путь от инференса на чистом C корутинами до современных движков и квантизованных моделей — и какой инженерный опыт из этого вынесли.
На колонке одновременно крутится несколько нейросетей:
Все они работают в реальном времени и должны укладываться в жёсткие лимиты по latency, CPU и RAM. Докинуть ресурсы на устройство нельзя, поэтому единственный путь — оптимизация инференса.
В 2014 году не было ни готовых инференс-фреймворков, ни повсеместной поддержки C++ на чипах. Мы писали на чистом C, а пайплайн описывали корутинами. Композиция получалась гибкой, но за это мы расплачивались накладными расходами на переключение контекстов и динамическими аллокациями памяти на каждом шаге.
Уже тогда появились оптимизации, которые живут до сих пор. Во-первых, батчинг: вместо обработки одного фрейма звука за раз мы ждём, пока накопится батч из нескольких фреймов, и обрабатываем их разом. Это позволяет эффективно использовать SIMD-инструкции процессора и даёт серьёзный выигрыш по скорости, жертвуя лишь примерно полусотней миллисекунд latency.
Во-вторых, стриминг: мы не пересчитываем целиком всё «окно» заново, а только обновляем его с приходом новых фреймов. Для матричных умножений использовали одну из реализаций BLAS, которая отлично утилизирует кеш процессора.
С появлением нормальной поддержки C++ на чипах мы стали переписывать рантайм. На смену корутинам пришла наша внутренняя библиотека YNMT, изначально сделанная для моделей перевода. Она представляет модель как статический вычислительный граф, из-за чего отпала необходимость в корутинах. А потом, когда YNMT стала уступать по скорости опенсорсному TFLite, мы переехали на него. Он поддерживает встроенные оптимизации под разные архитектуры чипов.
Первый подход был простым и безопасным: мы сжимали веса модели с FP32 до INT8, но перед вычислением разжимали их обратно. Затем научились квантовать и активации. Теперь мы на лету сжимаем вход до INT8, перемножаем матрицы в INT16 и деквантизуем выход. Выигрываем и по памяти, и по скорости за счёт более быстрых целочисленных SIMD-инструкций.
Раньше каждая модель тащила за собой свои буфера и предобработку звука, что вело к дублированию вычислений. Теперь общая часть вынесена в отдельную сущность, и все модели пользуются ею совместно.
Не стоит бояться использовать опенсорс-решения и адаптировать их под своё железо. Мы взяли стандартную реализацию свёртки в TFLite, переработали её под конкретный чип и получили огромный прирост производительности. К тому же у опенсорсных подходов есть неплохой плюс: зачастую они поддерживаются широким сообществом.
Сейчас мы в процессе миграции на TFLite, готовимся использовать встроенную квантизацию вместо ручной и продолжаем пилить кастомные операции. Всё это позволяет делать колонки умнее и при этом сохранять доступность для пользователей.
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5🔥4
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1👍1
В карточках рассказываем, кто и на какие темы будет выступать на конференции 5 сентября. А чтобы получить доступ к эфиру, задать вопросы экспертам в прямом эфире и первыми посмотреть запись после события, зарегистрируйтесь на сайте.
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤2👍2
Вокруг AI в разработке всё ещё ходит довольно много мифов. Кто-то боится, что нейросети вот-вот заменят программистов, а другие уже представляют, как навайбкодят стартап за пару вечеров. Реальный опыт оказывается куда сложнее.
На связи Паша Сухов, ведущий разработчик в Яндекс Доставке. Сегодня я поделюсь своим опытом: как я пытался использовать кодовых ассистентов, агентов и MCP, что понял в процессе и где AI может помочь вам.
Однажды я писал код для скрипта. Написал шесть строк, добавил в контекст нужные файлы и сказал: «Вынеси параметры, сделай --help, напиши доку». Мои шесть строк превратились в полтораста — с проверкой аргументов, созданием папок, логами каждого шага, справкой, примерами запуска и прочими вещами, которые я терпеть не могу делать сам.
Кроме того, здорово помогало автодополнение: не по принципу «допиши вот эту строчку», а «смотри, вот ещё полфункции». Агент со временем понимает, что и как вы пишете, и начинает предлагать более точные варианты: оптимизирует структуру, проводит рефакторинг, находит и вставляет нужную лямбду.
Стоило мне взяться за что-то объёмное и нестандартное — например, собрать демку с геокартами или написать что-то на игровом движке Bevy, — начинался цирк. Агент путал версии API и после каждой правки бодро уверял, что теперь-то всё точно исправил, хотя на деле ломал ещё сильнее.
Похожая история была и при работе с готовым кодом. Просишь перенести функцию из одного файла в другой — получаешь раздутый код с недописанными кусками. Иногда агент и вовсе попадал в цикл: поочерёдно откатывал и вносил одну и ту же неработающую правку.
Со временем они действительно стали писать код качественнее, особенно на локальных, быстрых и относительно изолированных задачах. Но вместе с тем они стали хитрее прятать баги. Цель моделей — написать не код, который работает, а код, который выглядит правдоподобно.
Но всё же думать «А правильно ли это?» в среднем и продуктивнее, и приятнее, чем бесконечно думать «А как это вообще написать?», чтобы к моменту готового текста на проверку не осталось сил.
По работе мне регулярно приходится копаться в чужих проектах. Я постоянно сталкиваюсь с проблемой: с какого файла вообще начинать читать? Тут и пригождается нейросеть: я даю ей задачу такой, какая она есть. Главное тут — не её результат, а размышления: она найдёт нужную часть системы, я пойму, куда смотреть, и код станет читать проще.
Нейросети не сняли с человека ответственность, не отменили необходимость думать и не научились стабильно писать серьёзные системы без присмотра. Зато они забрали то, что разработчики любят меньше всего: рутину, бойлерплейт, механические правки, поиск по чужому коду, черновую документацию, однотипные задачи и страх чистого листа.
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤7👾4🔥2
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥3👾1