Стартап Миры Мурати Thinking Machines внезапно анонсировал свой рисерч блог Connectionism, и в нем уже есть первая статья
Статья, кстати, на очень интересную и редкую тему. Но сначала два слова про название Connectionism. Оно выбрано не случайно: в 80-х так называлась отрасль искусственного интеллекта, которая изучала сходство нейронных сетей с биологическим мозгом. Вот такая занятная деталь.
В блоге Thinking Machines обещают постить на довольно разнообразные темы, от промпт-инжинеринга до проектирования ядер. И первая статья как раз посвящена вот такой глубоко технической теме: воспроизводимость (детерминированность) ответов LLM.
Ясно, что ответы LLM – вещь случайная, то есть на один и тот же промпт она может раз из раза отвечать по-разному. Объясняется это тем, что во всех моделях на инференсе на самом деле выбирается не просто самый вероятный токен. Здесь замешана доля случайности, за которую отвечает гиперпараметр "температура".
Если температура ближе к 1, то из распределения вероятностей модель чаще будет выбирать токены с меньшими значениями, и ответы будут разнообразнее и креативнее. Если ближе к 0, то чаще будут выбираться просто самые вероятные токены, и ответы будут стабильнее.
По всей логике, если температура = 0, то ответы на одни и те же запросы не должны отличаться совсем. Но, оказывается, что это не так.
Почему? Принято было считать, что просто из-за параллельных вычислений: порядок сложения чисел на GPU может меняться, давая слегка разные результаты. Но TM разобрались глубже и показали, что это не совсем так, и причина еще менее очевидная:
– Когда модель работает на проде, на сервер одновременно приходят запросы от многих пользователей. В зависимости от нагрузки, фреймворк объединяет их в батчи разного размера: сейчас это может быть 8 последовательностей, через секунду — 32, потом 4. Это нужно, чтобы эффективно загружать GPU.
– Сам по себе матмуль, даже при распараллеливании, дает детерменированные результаты для одинаковых входов. Это называется run-to-run deterministic. Но если меняется размер батча, все тут же ломается. Математически это странно, тк элементы в батче должны обрабатываться независимо, но на практике оптимизации под GPU (другой порядок операций, разбиение на блоки и т.д.) приносят вот такие результаты.
– В итоге из-за постоянных изменений размера батча числа внутри модели чуть-чуть плавают. И даже если температура 0, на каком-то шаге эти крошечные различия могут привести к тому, что модель выберет другой токен, и ответ пойдёт по иному пути.
В статье показали, как такое исправить (по сути, как реализовать batch-invariant ядра). Мы оставим ссылку, там в тексте много выкладок, схем и кода: посмотрите, кому интересно.
Для пользователей такое, конечно, реализовывать никому не нужно, но вот для всяких отладок, элаймент тестов и прочей безопасности – имба.
В общем, Thinking Machines сегодня прямо порадовали. Надеемся, в новом блоге они будут почаще что-нибудь выклдывать.
thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/
Статья, кстати, на очень интересную и редкую тему. Но сначала два слова про название Connectionism. Оно выбрано не случайно: в 80-х так называлась отрасль искусственного интеллекта, которая изучала сходство нейронных сетей с биологическим мозгом. Вот такая занятная деталь.
В блоге Thinking Machines обещают постить на довольно разнообразные темы, от промпт-инжинеринга до проектирования ядер. И первая статья как раз посвящена вот такой глубоко технической теме: воспроизводимость (детерминированность) ответов LLM.
Ясно, что ответы LLM – вещь случайная, то есть на один и тот же промпт она может раз из раза отвечать по-разному. Объясняется это тем, что во всех моделях на инференсе на самом деле выбирается не просто самый вероятный токен. Здесь замешана доля случайности, за которую отвечает гиперпараметр "температура".
Если температура ближе к 1, то из распределения вероятностей модель чаще будет выбирать токены с меньшими значениями, и ответы будут разнообразнее и креативнее. Если ближе к 0, то чаще будут выбираться просто самые вероятные токены, и ответы будут стабильнее.
По всей логике, если температура = 0, то ответы на одни и те же запросы не должны отличаться совсем. Но, оказывается, что это не так.
Почему? Принято было считать, что просто из-за параллельных вычислений: порядок сложения чисел на GPU может меняться, давая слегка разные результаты. Но TM разобрались глубже и показали, что это не совсем так, и причина еще менее очевидная:
– Когда модель работает на проде, на сервер одновременно приходят запросы от многих пользователей. В зависимости от нагрузки, фреймворк объединяет их в батчи разного размера: сейчас это может быть 8 последовательностей, через секунду — 32, потом 4. Это нужно, чтобы эффективно загружать GPU.
– Сам по себе матмуль, даже при распараллеливании, дает детерменированные результаты для одинаковых входов. Это называется run-to-run deterministic. Но если меняется размер батча, все тут же ломается. Математически это странно, тк элементы в батче должны обрабатываться независимо, но на практике оптимизации под GPU (другой порядок операций, разбиение на блоки и т.д.) приносят вот такие результаты.
– В итоге из-за постоянных изменений размера батча числа внутри модели чуть-чуть плавают. И даже если температура 0, на каком-то шаге эти крошечные различия могут привести к тому, что модель выберет другой токен, и ответ пойдёт по иному пути.
В статье показали, как такое исправить (по сути, как реализовать batch-invariant ядра). Мы оставим ссылку, там в тексте много выкладок, схем и кода: посмотрите, кому интересно.
Для пользователей такое, конечно, реализовывать никому не нужно, но вот для всяких отладок, элаймент тестов и прочей безопасности – имба.
В общем, Thinking Machines сегодня прямо порадовали. Надеемся, в новом блоге они будут почаще что-нибудь выклдывать.
thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/

