Введение в системы машинного обучения
Русский перевод первого тома учебника «Machine Learning Systems» (Harvard University) целиком: шестнадцать глав, четыре вводных части, приложения, глоссарий и список литературы вместе с рисунками, диаграммами и комментариями в коде. Перевод прошел сквозную вычитку: текст, формулы, рисунки, диаграммы, комментарии в коде и ссылки.
- Введение: зачем инженерии нужны принципы, отличные от традиционных, и как менялось узкое место в развитии ИИ.
- Системы машинного обучения: облачные, периферийные, мобильные и микроконтроллерные системы, а также стена памяти.
- Рабочий процесс машинного обучения: жизненный цикл ML от постановки задачи до мониторинга, распространение ограничений и пример скрининга диабетической ретинопатии.
- Инженерия данных: данные как исходный код, гравитация данных и налог на подачу, каскады качества, разметка, хранение и хранилища признаков, а также пример распознавания ключевых слов.
- Вычисления в нейронных сетях: от логики к арифметике, перцептрон и функции активации, обратное распространение ошибки, память при обучении и выводе, а также история распознавания рукописных цифр.
- Архитектуры нейронных сетей: MLP, CNN, RNN, трансформеры и DLRM как физические контракты с аппаратурой: паттерны данных, индуктивные смещения, арифметическая интенсивность, маячные модели и схема выбора архитектуры.
- Фреймворки машинного обучения: фреймворк как компилятор для кремниевого контракта, три проблемы (исполнение, дифференцирование, абстракция аппаратуры), стратегии исполнения и слияние ядер, автоматическое дифференцирование и контрольные точки, модули и тензоры, развертывание от облака до микроконтроллеров.
- Обучение моделей: железный закон производительности обучения, конвейер обучения и выявление узких мест, смешанная точность, FlashAttention, накопление градиентов и масштабирование на несколько ускорителей и машин.
- Отбор данных: отношение информации к вычислениям, статическое прореживание и дедупликация, динамический отбор с учебным планом и активным обучением, полуконтролируемое и самоконтролируемое обучение, синтетические данные и доменный разрыв, модели стоимости и распределенный отбор.
- Сжатие моделей: прореживание, дистилляция, квантование и квантование с учетом обучения, поиск нейронной архитектуры, структурные аппроксимации, слияние операторов, адаптивные вычисления, разреженность и выбор техники под физические ограничения.
- Аппаратное ускорение: специализация аппаратуры, примитивы вычислений ИИ, тензорные ядра и систолические массивы, тайлинг и числовая точность.
- Бенчмаркинг: рамка бенчмаркинга, системные бенчмарки и уровни детализации, компоненты бенчмарка, измерение энергопотребления и MLPerf.
- Обслуживание моделей: парадигмы обслуживания, бюджет задержки, архитектура системы обслуживания, теория очередей и хвостовая задержка.
- MLOps: технический долг, конвейеры CI/CD и хранилища признаков, мониторинг дрейфа и стоимость наблюдаемости, развертывание и откаты, A/B-тестирование, Edge AI, дежурство и управление, пример ClinAIOps.
- Ответственная инженерия: ответственность как инженерное ограничение, оценка справедливости по подгруппам и компромиссы с точностью, объяснимость и регуляторные требования, стоимость владения и углеродный след, управление данными, родословная и аудит.
- Заключение: синтез тринадцати количественных принципов, маячные модели, каскад ограничений, будущие направления и горизонт от узла к парку.
- Принципы основ, Принципы построения, Принципы оптимизации, Принципы развертывания: введения к четырем частям книги с формулировками принципов.
- Приложения: Таксономия D·A·M, Основы данных, Основы алгоритмов, Основы машины, Системные допущения; Глоссарий и Список литературы (записи, которые цитируются в томе, на языке оригинала).
- Предисловие и служебные разделы: Посвящение, Предисловие, Заметка автора, О книге, Благодарности, Примечание об использовании ИИ, Обозначения.
Сведения об авторстве и лицензии — на странице Уведомление об авторстве. Что изменено при переносе и как переведены рисунки — на странице Происхождение материалов.
Посвящение
Памяти моего отца, который научил меня учиться. С благодарностью моей матери, которая научила меня отдавать.
Предисловие
Pardee Professor of Computer Science Emeritus (почетный профессор информатики)
Калифорнийский университет в Беркли
выдающийся инженер Google
лауреат премии Тьюринга ACM
Беркли, Калифорния
Вся моя карьера была посвящена пониманию и совершенствованию самых основ, на которых работают вычисления: от систем команд, определяющих процессоры, до систем хранения, в которых лежат наши данные. Я видел своими глазами, что значительные достижения редко связаны с одной блестящей идеей, взятой в отрыве. Гораздо чаще они возникают из целостного объединения многих идей в надежную, эффективную и устойчивую систему.
Сегодня мы стоим у очередного переломного момента. Машинное обучение (ML) перестало быть научным любопытством и стало силой, которая перестраивает отрасли, стимулирует инновации и меняет нашу повседневную жизнь. Интеллектуальная мощь алгоритмов, рост точности и почти волшебные возможности, которые они открывают, по праву захватили воображение мира.
Меня тревожит, что большая часть этого прогресса достигнута сообществом, которое — не по своей вине — никогда не учили мыслить о том, что оно строит, в системных категориях. Инженеры умеют вызвать model.fit(), но не могут объяснить, почему обучение медленное. Исследователи подбирают гиперпараметры, не понимая ограничений пропускной способности памяти, которые делают одни выборы непрактичными. Практики развертывают модели в эксплуатацию, не имея рамки для рассуждений о задержке, пропускной способности и режимах отказа.
Блестящий алгоритм без хорошо спроектированной системы, которая его поддерживает, похож на мощный двигатель без шасси и тормозов. Далеко он не уедет, а уж надежно — тем более.
Этот разрыв — не дефицит талантов. Это дефицит учебных программ. У области просто не было учебников, которых она заслуживает. Эта книга, Введение в системы машинного обучения, появляется точно в нужный момент, чтобы осветить этот критически важный и часто упускаемый из виду аспект революции ML.
Почему важно системное мышление
Моя карьера опиралась на силу системного мышления: выявлять узкие места, понимать взаимодействие компонентов и проектировать с расчетом на производительность, надежность, экономическую эффективность и простоту использования во всем стеке. К этому выводу нельзя прийти, опираясь только на первые принципы: нужно было думать о системе.
Системы ML требуют ровно той же дисциплины. Нейронная сеть — не математическая абстракция, парящая вне физических ограничений. Это вычисление, которое должно исполняться на кремнии с конечной пропускной способностью памяти, конечными энергетическими бюджетами и конечной способностью к коммуникациям. Арифметическая интенсивность, модель Roofline и эффекты иерархии памяти — не продвинутые темы, которые проходят после основ. Они и есть основы.
Почему системы ML заслуживают серьезного учебника
Назначение учебника — не только каталогизировать текущий передний край. Его задача — дать концептуальный каркас, который позволит студентам понять этот передний край и продвинуть его самим. Архитектуры нейронных сетей, описанные на этих страницах, будут развиваться, а описанные ускорители — вытеснены. Но некоторые основы не изменятся: иерархии памяти никуда не денутся, арифметическая интенсивность останется ключевой мерой. Принципы конвейеризации, компромиссов между задержкой и пропускной способностью, квантования и точности отражают физические и математические реальности, которые не устаревают. Тот, кто действительно их понимает, сможет рассуждать о любой новой системе, которую отрасль выпустит через год или через десять лет.
Меня поражает и масштаб того, что пытается сделать эта книга. Недостаточно объяснить, как работает обучение; нужно также разобрать инженерию данных, оптимизацию моделей, аппаратное ускорение, развертывание, бенчмаркинг, ответственный ИИ и устойчивость. Это не разрозненные темы, сложенные вместе для полноты. Это взаимосвязанные стороны одной инженерной дисциплины. Решение на уровне данных влияет на поведение модели, которое влияет на задержку вывода, которая влияет на стоимость развертывания, а та — на сообщества, способные или не способные получить доступ к результирующей системе. Книга правильно рассматривает эту интеграцию как предмет первого ранга.
Особенно радует количественная методология, которая проходит через каждую главу. Утверждения подкреплены измерениями, компромиссы выражены числами. Студентов учат оценивать, измерять и проверять, а не полагаться на интуицию. Разница между инженером и дилетантом — именно в этой способности к строгим рассуждениям, опирающимся на измерения.
Почему открытый доступ важен для следующего поколения
Я приветствую решение сделать этот бесценный ресурс свободно доступным.
Когда я в соавторстве с Джоном Хеннесси писал Computer Architecture: A Quantitative Approach, мы обсуждали, как сделать материал максимально доступным. Мы добивались от издателя снижения цены и даже выпустили недорогое издание для международных студентов, предназначенное для продаж за пределами Северной Америки. Эти заботы стали еще острее, когда ML превратился в инфраструктуру — в такую же важную для современного мира вещь, как электрическая сеть или интернет.
Решение опубликовать эту книгу как свободно доступный образовательный ресурс — не компромисс. Это заявление о ценностях. Системы ML внедряются во всех секторах экономики на всех континентах. Инженеры, которые их строят и поддерживают, придут отовсюду. Если фундаментальное образование, необходимое для такой работы, доступно только студентам обеспеченных вузов, мы усилим разрыв в экспертизе, который отражает общественные вопросы о том, кто выигрывает от ИИ и кто несет его издержки.
Еще более впечатляет то, что проект вышел далеко за рамки открытого доступа к статичному тексту. Сопутствующая экосистема — интерактивные лаборатории, фреймворк TinyTorch для сборки с нуля, наборы для аппаратного развертывания, материалы для преподавателей и глобальная сеть университетов, которые принимают курс, — отражает знакомую педагогическую максиму: слышу — забываю, вижу — запоминаю, делаю — понимаю.
Модель открытого исходного кода также делает сам учебный план лучше. Ошибки исправляются, примеры оттачиваются, новые главы появляются в ответ на то, что действительно нужно области. Как мы убедились с Computer Architecture: A Quantitative Approach, сообщество авторов, сложившееся вокруг книги, может обеспечить такой уровень контроля качества, какой не сможет дать ни одна команда авторов в одиночку, как бы опытна она ни была.
Последнее слово
В области архитектуры компьютеров есть традиция, которой я горжусь: мы создаем вещи, честно их измеряем, делимся тем, что узнаем, и пересматриваем свои взгляды, когда того требуют измерения. Мы не прячемся за сложностью своих систем, чтобы уклониться от ответственности за то, работают ли они на самом деле. Мы не путаем новизну с прогрессом. Мы строго спорим о том, что важно и почему.
Хочется надеяться, что инженерия систем ML последует этой традиции. Ей нужны навыки мышления, которые приходят от серьезного отношения к системам: думать о взаимодействиях, измерять на правильном уровне абстракции, честно говорить о компромиссах и нести ответственность перед реальной производительностью, а не перед фольклором бенчмарков. Эта книга воплощает такие навыки.
Введение в системы машинного обучения — больше, чем учебник. Это призыв к системному мышлению в эпоху ИИ, руководство по созданию устойчивых ML-приложений и свидетельство силы открытого образования.
Мы переживаем исключительный момент. За мою карьеру каждое десятилетие приносило крупный прорыв: микропроцессор в 1970-х, персональный компьютер в 1980-х, интернет в 1990-х, смартфон в 2000-х и ИИ в 2010-х. Первые четыре изменили бизнес и общество, однако ИИ, похоже, окажет самое большое влияние из всех.
Системы, которые создаются сегодня, определят, как внедряется интеллект, кто из него извлекает пользу и чего он стоит — в деньгах, в энергии и в углеродном следе. Нам нужны инженеры, которые их строят, и они должны владеть системными навыками на максимальном уровне.
Эта книга — важный шаг к тому, чтобы любой мог их освоить.
Заметка автора
Мир торопится строить системы ИИ, но пока не занимается их инженерией.
Эта фраза и объясняет, зачем существует эта книга. Модель, которая побеждает на бенчмарке, еще не является системой, и расстояние между ними — не деталь реализации. Это инженерия: работа по тому, чтобы нечто выдерживало ограничения, с которыми нельзя договориться. Демонстрация ни перед кем не отвечает. Система отвечает перед бюджетами задержки, пределами памяти, энергетическими рамками и ценой ошибки на глазах у реальных пользователей.
Что делает эту область самостоятельной дисциплиной, так это необычная связанность. Процессор подчиняется физике машины: тактам, строкам кэша и теплу, которое он может отвести. Статистическая модель подчиняется математике обучения: смещению, дисперсии и тому, как обобщение меняется вместе с данными и емкостью модели. ML-система должна отвечать перед обоими сразу, в одном и том же решении, и они не всегда согласованы. Изменение, которое радует аппаратуру, может лишить модель точности или пропускной способности, необходимых для сходимости; изменение, которое помогает модели, может потребовать от кремния больше памяти или полосы, чем тот способен дать. Удерживайте это напряжение в поле зрения, и область перестанет выглядеть набором инструментов: она превратится в структуру, о которой можно рассуждать.
Эта книга передает вам такую структуру. Не модный в этом году фреймворк и не самый быстрый ускоритель этого квартала, а способ мышления, который их переживет. Фреймворки меняются, аппаратура обновляется каждые несколько лет, бенчмарки сбрасываются; силы под ними остаются теми же. Если книга сработает, вы закончите ее, способные взглянуть на любую ML-систему — от датчика, потребляющего микроватты, до серверной фермы, потребляющей мегаватты, — и увидеть, как один и тот же небольшой набор сил определяет, что возможно.
Учебники, которые повлияли на меня в студенческие годы, не давали мне одних фактов. Они давали способ видеть, а факты выстраивались вокруг него. Именно это я и попытался сделать здесь.
— Vijay Janapa Reddi
Кембридж, Массачусетс
2026
О книге
Для кого эта книга
Эта книга для всех, кто хочет понять, как на самом деле работают системы машинного обучения: от математики, которая определяет нейронную сеть, до аппаратуры, которая ее исполняет, и инженерных решений, благодаря которым она работает эффективно.
Большинство читателей не станут архитекторами ML-аппаратуры или инженерами компиляторов. Но каждый практик, который строит, обучает, оптимизирует или развертывает модель, принимает решения, которые зависят от понимания системы под кодом. Книга дает эту системную основу студентам, впервые сталкивающимся с системами ML, практикующим инженерам, которые укрепляют свои знания, и исследователям, которым нужно рассуждать о производительности и развертывании.
Зачем нужен учебник по системам
В 1968 году конференция НАТО в Гармиш-Партенкирхене (Германия) помогла утвердить программную инженерию как самостоятельную дисциплину на фоне опасений, что программные системы стали слишком сложными для кустарного программирования (Naur and Randell, 1969). Надежное программное обеспечение требовало собственных принципов, методов и строгости. Спустя десятилетия Хеннесси и Паттерсон сделали количественный анализ центральным в обучении архитектуре компьютеров, систематизировав то, как инженеры измеряют, предсказывают и оптимизируют производительность процессоров (Hennessy and Patterson, 2017). Оба примера показывают, как общие методы делают сложную инженерную работу систематической и пригодной для обучения.
У машинного обучения есть свой момент Гармиша.
Последнее десятилетие исследования ML доминировало мышление, ориентированное на модель, сосредоточенное на поиске новых алгоритмов и архитектур. Этот фокус важен, но модель — не система. Нейронная сеть, которая хорошо работает в исследовательском блокноте, бесполезна, если не может уложиться в ограничения задержки, если ее конвейер данных не справляется с нужным объемом или если ее энергетическая стоимость превышает экономическую ценность. Разрыв между работающей моделью и производственной системой — не просто пробел в реализации; это пробел в фундаментальных инженерных принципах.
Эта книга рассматривает инженерию систем ML не как набор инструментов, таких как Kubernetes, PyTorch и CUDA, а как дисциплину, опирающуюся на количественные границы, модели и принципы проектирования. Как инженеры-строители опираются на фундаментальную физику и принципы конструкций, инженеры ИИ должны явно формулировать управляющие принципы, лежащие в основе модели каждой системы:
- Железный закон систем ML: декомпозиция на перемещение, вычисления и накладные расходы, где перекрытие учитывается по критическому пути.
- Гравитация данных: давление размещения, которое создают большие объемы данных и ограниченные сети.
- Учет энергии: стоимость отдельных событий и их число определяют, что доминирует, перемещение или вычисления.
- Закон Амдала: последовательная доля конвейера ограничивает общее системное ускорение.
Информатика изучает то, что вычислимо. Исследования ML изучают то, что обучаемо. Инженерия ИИ изучает то, что можно построить, учитывая физику реальной аппаратуры и реальных данных.
Я написал эту книгу, чтобы помочь заложить такой фундамент и сделать для систем ИИ то, что Хеннесси и Паттерсон сделали для архитектуры компьютеров: заменить интуицию измерением, а искусство — инженерией. Цель — учить системному рассуждению до реализации, рассматривая данные, алгоритмы и аппаратуру не как отдельные изолированные части, а как единую связанную задачу оптимизации.
Представьте коробку с кубиками LEGO. Одни и те же соединяемые детали строят космический корабль, замок или целый город. Наборы меняются, кубики — нет. С системами ML то же самое. Сверточная сеть для классификации изображений, трансформер для генерации текста и агент обучения с подкреплением для робототехники — очень разные приложения, но под ними лежат одни и те же строительные блоки: вычислительные графы, иерархии памяти, конвейеры данных, циклы оптимизации и компромиссы между задержкой, пропускной способностью и энергией. Владение этими блоками делает незнакомые системы понятными.
Поэтому книга учит устойчивым принципам, а не нынешним инструментам. Доминирующие фреймворки за десятилетие сменились с Theano на TensorFlow и затем на PyTorch. Аппаратура эволюционировала от переиспользованных графических процессоров к специально созданным тензорным ускорителям, и новые архитектуры появляются каждый год. Любой учебник, который учит нынешним инструментам, устареет до следующего издания. Строительные блоки остаются.
Что охватывает книга
Книга сосредоточена на одном вычислительном узле: одном хосте с одним-восемью ускорителями, обычно с отдельной памятью устройств, соединенной межсоединением. Она также вводит многоускорительное обучение и эксплуатационные операции там, где они проясняют проектирование на уровне узла; рассмотрение масштаба парка выходит за ее рамки.
Содержание организовано в четыре части, каждая из которых играет свою роль в системном рассуждении:
- Часть I: Основы систем ML развивает словарь, ментальные модели и сквозной рабочий процесс, которые направляют любой ML-проект, от характеристик, отличающих системы ML от традиционного программного обеспечения, до конвейеров инженерии данных, которые их питают.
- Часть II: Разработка и обучение связывает математические основы с работающими системами через вычисления глубокого обучения, нейронные архитектуры, фреймворки и процедуры обучения.
- Часть III: Оптимизация и ускорение рассматривает эффективность данных, сжатие моделей, аппаратное ускорение и методологию бенчмаркинга, необходимую для строгого измерения прогресса.
- Часть IV: Развертывание и эксплуатация охватывает инфраструктуру обслуживания, эксплуатационные практики и ответственную инженерию для систем, которые должны быть справедливыми, прозрачными и заслуживающими доверия в продакшене.
Эти четыре части прокладывают путь через стек систем ML — слоистую абстракцию, построенную по образцу классического стека компьютерных систем. Каждый слой предоставляет абстракцию слою над собой и использует слой под собой: от аппаратуры внизу через фреймворки, модели, обучение и обслуживание к эксплуатации и приложениям наверху. Данные проходят через все слои как сквозная связь, подобно шине данных в архитектуре компьютера.
В печатной версии книги на поле каждой главы стоит небольшой рисунок, который показывает, какие слои затрагивает глава, и служит повторяющейся картой стека; в этом электронном издании он не воспроизводится.
Данные рядом со стеком — не просто украшение. Их равномерная заливка отражает, насколько данные важны для задач каждой главы: это отдельное измерение, независимое от интенсивности слоев. Соединительные линии между каждым слоем и полосой данных показывают, какие слои взаимодействуют с данными в контексте главы. Три главы показывают, как меняется взгляд.
В главе «Аппаратное ускорение» интенсивность слоев сосредоточена в нижней части стека, а полоса данных бледная: глава о кремнии, а не о данных. В главе «Обучение моделей» средние слои светятся, а полоса данных умеренно освещена: обучение потребляет данные, но в основе своей это оптимизация. В главе «Ответственная инженерия» доминируют верхние слои, а полоса данных имеет умеренный оттенок, потому что смещение в обучающих данных проявляется в смещении приложений, хотя между ними лежат несколько слоев. Один и тот же стек рассказывает три разные истории, а данные остаются самостоятельным измерением.
Рядом с текстом стоят также небольшие визуальные подсказки в тех местах, где связь легче всего понять глазами. Это не пронумерованные рисунки, на которые нужно ссылаться; это вспомогательные средства чтения. Лестница показывает разрыв масштабов, эскиз тренда — направление, миниатюра Roofline указывает режим узкого места, а полоса доминирования показывает, какой член управляет суммой. Если миниатюра использует логарифмическую шкалу, это сказано прямо на изображении.
Каждая часть опирается на предыдущую. Тех, кто впервые знакомится с областью, рекомендуется читать последовательно, а следующие индивидуальные маршруты помогают под конкретные профессиональные цели:
Рекомендуемые маршруты чтения
Читатели с разным опытом и целями могут выбрать индивидуальные маршруты:
- Полный маршрут (все главы по порядку): для студентов и читателей, новых в системах ML. Начните с части I, затем переходите к частям II, III и IV. Этот маршрут развивает каждое понятие с первых принципов.
- Маршрут инженера ML (системная глубина для практиков): для инженеров, которые уже обучают и развертывают модели, но хотят понять системы под ними. Бегло просмотрите часть I ради словаря, затем сосредоточьтесь на главах «Фреймворки машинного обучения», «Обучение моделей», «Аппаратное ускорение», «Бенчмаркинг» и «Обслуживание моделей».
- Маршрут оптимизации (ориентированный на эффективность): для инженеров, которые работают над эффективностью моделей, периферийным развертыванием или системами с ограниченными ресурсами. После части I переходите сразу к главам «Отбор данных», «Сжатие моделей», «Аппаратное ускорение» и «Бенчмаркинг».
Условные обозначения
В этой книге используется небольшой набор типографских соглашений, которые показывают, что делает каждый фрагмент текста.
Жирным выделяются первые определения
Термин жирным в основном тексте — его формальное первое введение в томе. Каждый термин получает такое выделение ровно один раз. Последующие упоминания идут без выделения: к этому моменту термин уже входит в рабочий словарь, который глава переносит дальше.
Каждая система машинного обучения несет двойную задачу: она должна одновременно управлять статистической неопределенностью и физическими ограничениями.
Жирный шрифт — обязательство запомнить термин, потому что он будет повторяться. Соответствующая запись указателя в конце книги ведет к определяющему упоминанию (в подразделе «определение»), так что к нему можно вернуться. Ключевые технические термины также собраны в глоссарии.
Жирный шрифт выполняет и вторую, структурную роль: как функциональная метка в начале пункта внутри выделенного блока или маркированного итога, например Рекомендация, Компромисс или Результат. В этом контексте жирный шрифт — опорная конструкция, а не первое определение.
Курсив выполняет конкретные риторические задачи
Курсив не используется для общего выделения. Каждый курсивный фрагмент книги выполняет одну из немногих конкретных задач:
- Прямое противопоставление: обучение и вывод, логическое и физическое.
- Невозможность, сформулированная как физический, математический или логический закон: «системы с задержкой менее 10 мс не могут использовать удаленную облачную инфраструктуру — этого не позволяет физика».
- Слово как слово: «термин градиент обозначает вектор частных производных».
- Названия произведений: Computer Architecture: A Quantitative Approach.
- Тезис-вывод: одно курсивное предложение, которое передает управляющее понимание раздела, например Данные — это исходный код.
Курсивное слово выполняет одну из этих задач. Слово без курсива не несет скрытого выделения.
У выделенных блоков есть визуальная идентичность, соответствующая их задаче
Выделенные блоки — не украшение. Каждый тип сигнализирует о конкретном виде содержания, поэтому визуальная идентичность сообщает, что внутри, еще до того, как читатель начнет его разбирать.
| Блок | Содержание |
|---|---|
| Определение | Формальное определение ключевого термина с его значением, отличием от ближайшего соседнего понятия и типичной ошибкой |
| Пример | Исторический случай или конкретный сценарий: контекст, понимание и системный урок |
| Системная перспектива | Аналитическое наблюдение или математическая тонкость, обогащающие окружающую аргументацию |
| Расчет на салфетке | Разобранный пошагово расчет, где значения вычисляются по константам книги; промежуточные таблицы и уравнения и есть математика |
| Проверка | Контрольные вопросы для проверки понимания предыдущего раздела |
| История из практики | Задокументированный инженерный инцидент с описанным режимом отказа: контекст, отказ, последствия и урок |
| Маячная модель | Повторяющиеся нагрузки, описанные профилем (параметры, FLOP, доминирующее ограничение), которые используются как опорные кейсы в нескольких главах |
| Принцип | Канонический принцип или инвариант книги, на который ссылаются последующие главы |
| Теорема | Формальный результат или граница, подкрепленные уравнениями, с указанием условий и применением в последующем количественном анализе |
| Итоги | Четыре-семь важнейших результатов главы в сжатом виде |
| Цели обучения | Навыки и понятия, которые читатель должен уметь объяснить или применить после главы |
| Что дальше | Мост от только что законченной главы к начинающейся, с указанием открытого вопроса, который решает следующая глава |
Когда блок содержит таблицу, рисунок или уравнение, этот артефакт — часть педагогической единицы блока, а не украшение. Профиль маячной модели и есть ее характеристика; промежуточные таблицы блока «Расчет на салфетке» и есть разобранная математика. Если читать эти артефакты отдельно, теряется дуга изложения. Самостоятельные справочные таблицы, напротив, стоят между абзацами как пронумерованные артефакты, к которым читатель возвращается по перекрестным ссылкам. Обе формы допустимы; визуальный признак (блок или отдельная таблица) показывает читателю, с чем он имеет дело.
Какой бы маршрут ни выбрал читатель, текст предназначен для связи с поддерживающими материалами за пределами самих глав.
Учебная платформа
Эта книга — одна из частей более широкой образовательной экосистемы. Полный текст, интерактивные блокноты, лекционные слайды, упражнения, практические лабораторные работы и дополнительные материалы для каждой главы свободно доступны на mlsysbook.ai.
Открытый учебник
Эта книга имеет открытый исходный код. Полный текст, рисунки и система сборки доступны на mlsysbook.ai/git, и я приглашаю каждого читателя участвовать в работе. Эта открытость продуманная. Если инженерия ИИ должна стать общей дисциплиной, а не набором изолированных практик, ее базовые тексты должны быть доступны каждому. Область систем ML формируют практики из промышленности, академической среды и сообщества открытого исходного кода по всему миру. Учебник по этой области должен отражать такое разнообразие и быть доступным всем, независимо от географии и институциональной принадлежности.
Вклад читателей — исправление ошибки, предложение более ясного объяснения, добавление рабочего примера или предложение нового материала — существенно улучшил каждую главу. Задачи и запросы на слияние служат механизмом такой совместной работы. Книга становится лучше, потому что ее читатели участвуют в ее создании.
Предварительные требования
Читателю понадобятся две вещи:
- Программирование: уверенное владение Python, включая функции, классы и базовую обработку данных с NumPy.
- Математика: знакомство с линейной алгеброй, базовым математическим анализом и теорией вероятностей на уровне бакалавриата.
Две дополнительные области полезны, но не обязательны:
- Компьютерные системы: знакомство с иерархиями памяти и основами архитектуры компьютеров углубляет главы об оптимизации и аппаратуре.
- Основы машинного обучения: предварительное знакомство с понятиями обучения с учителем дает полезный контекст, но часть II выстраивает необходимые основы с первых принципов.
За пределами книги
Эта книга развивает фундамент для одного узла, одновременно вводя распределенное исполнение, эксплуатацию в продакшене и управление там, где они влияют на сквозную систему. Сложные многоузловые топологии, коллективные алгоритмы в масштабе парка и устойчивость кластеров выходят за рамки текста в распределенные системы большого масштаба. Освоение этой книги готовит читателя к навигации по более широкому инженерному ландшафту.
Использование книги в курсе
Эта книга выросла из курса CS249r в Гарвардском университете и программы профессионального сертификата TinyML на edX. Курс TinyML учил системам ML на самом ограниченном конце спектра: микроконтроллеры, работающие на милливаттах с килобайтами памяти. Эта работа показала, что физические ограничения, управляющие встраиваемыми устройствами (пропускная способность памяти, плотность вычислений и энергия на операцию), — те же ограничения, которые управляют графическими процессорами центров обработки данных. Физика масштабируется; меняются только числа. Это понимание сформировало книгу: владение основами систем на самом малом масштабе готовит инженеров к любому масштабу.
В учебных курсах книга рассчитана на семестровую последовательность, охватывающую весь стек систем ML. Преподаватели также могут выбрать отдельные части для коротких модулей:
- Части I–II образуют вводный полусеместровый курс об основах систем ML и о том, как такие системы строятся и обучаются.
- Части III–IV образуют прикладной полусеместровый курс об их оптимизации, развертывании и эксплуатации.
Для обзорных курсов и программ для руководителей одни только введения к четырем частям дают сжатый обзор количественных принципов, управляющих системами ML.
Лекционные слайды, задания и материалы для преподавателей доступны на mlsysbook.ai.
Благодарности
Истоки
Эта книга обязана своим появлением одному разговору. Во время академического отпуска в Google Пит Уорден пригласил меня заняться, как тогда казалось, невыполнимой задачей для TinyML: запустить небольшую модель распознавания речи на микроконтроллере. Эта работа над TensorFlow Lite for Microcontrollers выявила нечто фундаментальное. Ограничения, которые управляют устройством с памятью от 16 КБ до 256 КБ, — те же, что управляют ускорителем в центре обработки данных, даже когда масштаб совершенно иной. Пропускная способность, задержка, энергия и память подчиняются одной и той же физике в обоих случаях. Это понимание стало зерном, из которого выросла книга.
Работа над TinyML привела к онлайн-курсу на HarvardX, который я вел вместе с Лоуренсом Моронеем и который вырос до более чем 100 000 студентов по всему миру. Брайан Плэнчер помог построить учебную программу по TinyML. Маркело Ровай, профессор, впервые познакомившийся с материалом через курс TinyML, позднее разработал практические лабораторные работы и наборы, которые сопровождают эту книгу. Зак Шелби открыл платформу Edge Impulse для студенческого использования. Массимо Банци и команда Arduino вместе с Эриком Паном и Seeed Studio сотрудничали с нами в разработке и предоставлении аппаратных наборов, которые сделали практическое обучение возможным. Марко Дзеннаро принес этот материал в развивающиеся страны через ICTP и высказал мысль, что эти принципы заслуживают полноценного учебника. Преподавание в таком масштабе без учебника сделало эту потребность очевидной.
Эта потребность превратилась в книгу в рамках курса CS249r в Гарвардском университете. В 2023 году семестровый проект курса состоял в том, чтобы написать конспекты лекций: каждая группа студентов брала на себя тему, изучала ее и вместе со мной превращала в главу. Эта работа заложила основу каждой главы книги. Исходная идея состояла в том, что письмо заставляет думать глубже, чем чтение. Затем мы открыли все это на GitHub, и то, что начиналось как черновые конспекты, с каждым семестром переписывалось и совершенствовалось.
Поскольку работа на GitHub продолжается, книга опирается на сообщество, вклад которого развивается вместе с проектом. Новые участники присоединяются по мере того, как читатели сообщают о проблемах, улучшают объяснения и дополняют поддерживающие материалы. Такая благодарность может зафиксировать лишь один момент этой продолжающейся истории. Актуальный список участников и правила внесения вклада доступны по адресу https://mlsysbook.ai/git.
Галерея участников в русском издании не воспроизводится: актуальный список ведется в английском репозитории, и его можно посмотреть по адресу mlsysbook.ai/git.
Коллеги и соратники
За пределами курса и сообщества GitHub мои более ранние совместные проекты сформировали интеллектуальный фундамент книги. Работа в Google повлияла на значительную часть системного мышления, изложенного на этих страницах. Этот период начался с моделирования производительности для первой системы на кристалле (SoC) Pixel, которое опиралось на мой опыт в архитектуре компьютеров. Совместная работа с Марком Хиллом над аналитическим моделированием в духе Roofline для гетерогенных SoC научила меня рассуждать об аппаратуре из первых принципов — тому количественному мышлению, которое проходит через каждую главу. Этот акцент на аналитическом моделировании естественно привел к систематической оценке, а систематическая оценка — к MLPerf. В MLPerf участвовало много людей из MLCommons, но ближе всего я работал с Питером Маттсоном, Дэвидом Кантером, Кэрол-Жан У, Кристин Ченг, Гюнтером Шмюлинг, Коди Колеманом и Клиффом Янгом. Эта совместная работа определила то, как я думаю о строгом измерении ML-систем.
Борис Мурманн и Сон Хан убедили меня на ранних этапах, что проект стоит продолжать. По мере написания я обращался за обратной связью к коллегам из промышленности и академической среды. Практики из Arm, Google, Intel, Meta, Microsoft, Qualcomm, STMicroelectronics и других организаций предлагали взгляд, опирающийся на производственные системы, а академические рецензенты из университетов Европы, Азии и Америк проверяли материал на соответствие собственным исследованиям и преподаванию. Их совокупная обратная связь сделала каждую главу точнее. Эвгений Гузев из Qualcomm и Пит Бернард из Edge AI Foundation поддержали просветительскую работу проекта и помогли построить вокруг него сообщество.
Эта петля обратной связи распространилась на аудитории по всему миру, где преподаватели проверяли материал, когда он еще был сырым. Софи Шао из UC Berkeley, Сяофань (Фред) Цзян из Колумбийского университета, Тушар Кришна и Дивья Махаджан из Технологического института Джорджии и Венькай Гуань из Миннесотского университета в Морисе были среди первых, а преподаватели из IIT Bombay, NUST Pakistan, De La Salle University на Филиппинах и университетов Европы, Латинской Америки и Африки с тех пор использовали книгу в своих курсах. Их готовность преподавать по незавершенному учебнику дала бесценную обратную связь и подтвердила, что потребность в этом материале не ограничена каким-либо одним учреждением или страной.
Студенты и участники
Мои студенты из Лаборатории вычислительных систем для периферии в Гарварде сформировали эту книгу способами, которые я не могу проследить полностью. Некоторые из них выполнили фундаментальную работу, которая помогла утвердить TinyML как область; их исследования и идеи, возникшие за годы совместной работы, вошли в техническое содержание книги. Эта когорта помогла запустить направление, а затем помогла мне написать о нем: Энди Ченг, Арья Чанд, Брайан Плэнчер, Колби Банбери, Элизабет Суитор, Эмма Чен, Икечукву Ученду, Джейсон Джаббур, Джейсон Йик, Джеффри Ма, Джессика Квайе, Марк Мазумдер, Мэтью Стюарт, Максимилиан Лам, Радхика Гошал, Шветанк Пракаш, Шриватсан Кришнан, Юнь-Шунь Сяо и Цзышэнь Ван. Кай Клайнбард, тогда работавший в Harvard Extension School, создал онлайн-наставника по генеративному ИИ SocratiQ. Нэим Хошневис из Harvard Kempner Institute построил необходимую инфраструктуру, включая GitHub Actions и стандарты документирования. Желько Хрчек подготовил диаграммы TikZ и участвовал в верстке PDF, композиции страниц и окончательном визуальном оформлении книги.
Работа также опиралась на поддержку Harvard Data Science Initiative, Harvard Extension School и Национального научного фонда; Edge AI Foundation и ICTP — за образовательную работу и стипендии; а также Arduino, Edge Impulse, Google и Seeed Studio — за аппаратное обеспечение, инструменты и инфраструктуру, которые сделали практические лабораторные возможными.
В MIT Press Сьюзан Хартман поверила в этот проект и провела его от эксперимента с открытым исходным кодом к опубликованной книге. Ее поддержка, редакторское чутье и дружба сделали эту книгу реальностью так, как не смог бы сделать один GitHub. Я в равной мере благодарен MIT Press за согласие сохранить книгу в открытом доступе. Учебник о дисциплине, которую формирует сообщество открытого исходного кода, должен быть доступен всем, кто в ней участвует. То, что MIT Press разделил эту убежденность, сыграло решающую роль.
Наконец, я благодарю мою жену Кари и моих дочерей Нору и Майю. Эта книга писалась в часы, которые принадлежали им: поздние ночи, которые начинались в десять и заканчивались в два-три часа утра, выходные, которые растворялись в правках, годы утр, когда я был рядом, но не совсем. Помимо упрямства, меня поддерживало сообщество открытого исходного кода. Каждая звезда на GitHub была сигналом, что кому-то это небезразлично, что кто-то учится, что работа важна. Цена была реальной, и они платили ее терпением, которого я не всегда заслуживал.
Примечание об использовании ИИ
Каждая глава этой книги была исследована, написана и переписана мной. На протяжении всей работы я также использовал инструменты ИИ. Изложенное ниже — больше, чем раскрытие, которого MIT Press требует от авторов, использующих ИИ. Это заявление о стандарте, которому я подчинял книгу, и о том, что означает авторство, когда инструменты так способны.
Стандарт — прослеживаемость. Производные величины в этих главах подкреплены вычислительными ячейками на Python, исходный код которых поставляется вместе с книгой. Цитаты сверялись с источниками, перекрестные ссылки — со стабильными якорями. Специально созданный движок моделирования инфраструктуры, которым книга пользуется для системных расчетов, доступен по адресу https://mlsysbook.ai/mlsysim. Набор предкоммитных тестов проверяет машинно-проверяемые части этих инвариантов на каждом коммите: согласованность единиц, разрешение встроенных ссылок, целостность перекрестных ссылок, каноничность обозначений и гигиену цитирования. Инструменты ИИ сделали часть этой строгости механически выполнимой, а инфраструктура обеспечения делает эту работу поддающейся аудиту.
Авторство — это мышление. Какие понятия входят в книгу, а какие нет. Как выстроить главы так, чтобы каждая идея появлялась только тогда, когда у читателя уже есть инструменты для ее понимания. Какие рабочие примеры прослеживать от начала до конца и какие числа вычислять, чтобы читатель мог независимо проверить аргумент. На каком уровне подавать каждое объяснение: достаточно строго для инженера-аспиранта и достаточно конкретно для студента, впервые сталкивающегося с системным мышлением. Где студенты застрянут, потому что я преподавал этот материал и видел, как они застревают. Это решения, которые не может принять ни один инструмент, потому что для них нужно знать читателя. Инструменты ИИ я использовал на протяжении всего процесса, чтобы генерировать формулировки, исследовать альтернативы и проверять свои рассуждения на прочность. Решения мои.
На практике ИИ оказался по-настоящему полезен при написании кода: вычислительных ячеек, предкоммитных проверок и рабочих примеров, которые по сути являются программами. Он помог обозреть литературу, которую я затем читал в оригинале, набросать фрагменты, которые я затем существенно переписывал, и проверить рукопись на согласованность по сотням перекрестных ссылок, тысячам записей указателя и десяткам тысяч строк текста. На протяжении всей работы инструменты предлагали, а я утверждал.
Эта практика старше нынешнего момента. В 1683 году Джозеф Моксон издал первое англоязычное руководство по печатному делу, Mechanick Exercises on the Whole Art of Printing, используя станок, который в нем описывал. Три века спустя Дональд Кнут написал The TeXbook в TeX — системе верстки, которую он создал, когда остался недоволен версткой собственных книг. Книга об инфраструктуре систем машинного обучения, написанная без инфраструктуры, которую она описывает, была бы противоречием. Создатель инструмента документирует инструмент с помощью инструмента.
Системы машинного обучения нельзя сертифицировать так, как сертифицируется традиционная логика. Этот разрыв верификации в равной мере относится и к авторству с помощью ИИ. Стандарт, которому я подчинял эту книгу, — тот стандарт, которого я хочу требовать от каждой системы, которую мы выпускаем: инструмент может предлагать, но ратифицировать может только инженер. MIT Press не указывает ИИ-инструменты как авторов, потому что они не могут принять на себя этическую и юридическую ответственность за свою работу. То же верно для любой инженерной системы. Авторство — это принятие этой ответственности, и она принадлежит человеку.
Обозначения
Инженерия ML-систем соединяет машинное обучение (информатику и статистику) и системы (архитектуру компьютеров и аппаратуру). Каждая из этих областей выработала свои обозначения независимо, и многие символы означают разное в разных сообществах и публикациях. Это столкновение создает реальную путаницу, когда дисциплины сливаются. Приведенные ниже соглашения вводят единое обозначение, которое устраняет эту неоднозначность.
Рассмотрим простое утверждение: «Увеличение повышает пропускную способность». Для исследователя ML означает размер батча. Для инженера-аппаратчика означает пропускную способность. Обе трактовки верны в своих областях, но в ML-системах нам нужны оба понятия в одном уравнении — отсюда необходимость единого последовательного соглашения.
Железный закон систем машинного обучения
Для последовательных фаз исполнения декомпозиция производительности по железному закону такова:
Каждая переменная выбрана намеренно, чтобы не совпадать с обычной ML-терминологией.
| Символ | Определение | Единица | Почему именно этот символ? |
|---|---|---|---|
| Время | секунды | Однозначно. Фактическое время выполнения операции. | |
| Объем данных | байты | Избегает совпадения с (размер набора данных). В законах масштабирования означает обучающие токены. Здесь нам нужны байты, прошедшие через память. Индекс устраняет неоднозначность. | |
| Пропускная способность | байт/с | Избегает совпадения с (размер батча). В литературе по системам часто означает пропускную способность, а в ML — размер батча. Обозначение сохраняет соглашение ML. | |
| Операции | FLOP | Общее число операций с плавающей запятой. Аккуратно выглядит в формулах (в отличие от «»). | |
| Пиковая скорость | FLOP/s | Избегает совпадения с (параметры). В презентациях Roofline для производительности часто используют , а в ML — для числа параметров. Обозначение сохраняет соглашение ML. | |
| Эффективность | — | Загрузка аппаратуры . Избегает совпадения со скоростью обучения . | |
| Задержка | секунды | Избегает совпадения с (функция потерь). Фиксированное время накладных расходов (запуск ядра, RTT сети). Индекс отличает его от функции потерь. |
Почему эти выборы важны
Без аккуратных обозначений предложения становятся двусмысленными:
«Уменьшение улучшает производительность».
У предложения два возможных прочтения:
- Уменьшение размера набора данных (меньше обучающих примеров) может ускорить обучение, но может снизить точность.
- Уменьшение перемещаемого объема данных (например, за счет сжатия или квантования) может ускорить вывод, а влияние на точность зависит от метода и калибровки.
С нашими обозначениями можно записать точно:
«Уменьшение за счет квантования FP32 в INT8 сокращает трафик памяти параметров вчетверо, а (обучающие данные) остается неизменным».
Наше обозначение устраняет эту неоднозначность: « ограничивает пропускную способность» допускает только одно прочтение.
Варианты с индексами
Прямой корень называет величину, а индекс указывает, какой ее экземпляр имеется в виду. Соглашение разводит близкие измерения по разным обозначениям, не сводя их к одному символу:
- , , : пропускная способность в трех точках пути данных
- , , , : члены железного закона, каждый из которых отделен от общего ML-символа
- , , : один энергетический бюджет, разделенный на части, которые можно обменивать
Поэтому индекс несет часть утверждения. Пропускные способности диска и ускорителя различаются на порядки, поэтому значение воспроизводимо только тогда, когда индекс говорит, где было выполнено измерение.
Уравнение деградации
Уравнение деградации — подогнанная локальная модель. Одно лишь расхождение не определяет направление изменения точности, поэтому оценивается по размеченным исходам. Некоторые символы ниже, например , встречаются в тексте глав, а не в уравнении.
| Символ | Определение | Единица/тип | Примечания |
|---|---|---|---|
| Точность в момент | скаляр | Точность модели после того, как она проработала в эксплуатации время . | |
| Начальная точность | скаляр | Точность модели в момент развертывания. | |
| Подогнанная чувствительность | скаляр | Локальный коэффициент, оцененный по исходам на заявленном диапазоне; не универсальная константа. (Не длина волны.) | |
| Текущее распределение | распределение | Распределение данных в момент . (Не параметры — для числа параметров используйте .) | |
| Обучающее распределение | распределение | Распределение данных в момент обучения. | |
| Статистическое расхождение | скаляр | Измеряет, насколько ушло от . Обычные варианты: расхождение Кульбака–Лейблера, полная вариация, расстояние Вассерштейна. (Каллиграфический, чтобы не совпадать с = размер набора данных.) | |
| Порог реакции | скаляр | Эксплуатационный порог для расследования; он не запускает переобучение автоматически. |
Следствие для энергии
При эффективных стоимостях на байт и на операцию энергия нагрузки приближенно равна:
| Символ | Определение | Единица | Примечания |
|---|---|---|---|
| Полная энергия | джоули | Полная энергия, потребленная ML-нагрузкой и разложенная на члены перемещения данных и вычислений. | |
| Энергия на перемещенный байт | джоули/байт | Эффективная стоимость перемещения; полная энергия зависит также от перемещенных байтов и выполненных операций. | |
| Энергия на операцию | джоули/FLOP | Энергетическая стоимость одной арифметической операции. |
Обозначения глубокого обучения
Книга следует стандартным соглашениям глубокого обучения (Goodfellow et al., 2016) с явным различением системных переменных.
| Символ | Определение | Размерность/тип |
|---|---|---|
| Размер батча | Целое. Число образцов, обрабатываемых параллельно. (Никогда не пропускная способность.) | |
| Параметры | Целое. Общее число скалярных параметров модели, включая веса и смещения. (Никогда не пиковые FLOP/s.) | |
| Размер набора данных | Целое. Число обучающих образцов или токенов. (Никогда не объем данных в байтах — используйте .) | |
| Длина последовательности | Целое. Число токенов или временных шагов. | |
| Размерность скрытого состояния | Целое. Размер вектора скрытого состояния. | |
| Размерность головы внимания | Целое. Размерность скрытого состояния одной головы в слоях внимания. | |
| Число слоев | Целое. Общее число слоев в сети. | |
| Число голов внимания | Целое. Число голов внимания в слое многоголового внимания. | |
| Число голов ключ–значение | Целое. Число голов ключ–значение в групповом (grouped-query) или многозапросном (multi-query) внимании. | |
| Индекс слоя | Целое. Индекс слоя. Используйте вместо голого при индексации слоев, потому что совпадает с потерями и задержкой. | |
| Функция потерь | Скаляр. Целевая функция, которую минимизируют при обучении. | |
| Скорость обучения | Скаляр. Размер шага оптимизатора. (Никогда без индекса для эффективности аппаратуры — используйте .) | |
| Параметры модели | Набор параметров, часто трактуемый как вектор. Множество всех обучаемых параметров. | |
| Распределение | Вероятностная масса или плотность случайной величины. Для общих распределений используйте строчное , чтобы не совпадать с (число параметров). | |
| Условное распределение | Условная вероятность или плотность. Эту форму используйте для общих зависимостей меток; и оставьте для обучающего и текущего распределений в уравнении деградации. | |
| Вероятность события | Вероятность события . Используйте для утверждений о событиях, например ; для распределений используйте и . |
Латинские матрицы и векторы набираются полужирным (, ); скаляры, размерности, индексы и отдельные элементы матриц остаются курсивом (, , , ). Общий символ параметров — единственное обычное исключение, и он остается курсивом. Локальная матричная алгебра следует тому же правилу полужирного: операнды-матрицы полужирные (, , ), как в общем матричном умножении (GEMM) . Полужирная форма отмечает матричный операнд и отличается от курсивного скалярного размера батча , который в скалярных контекстах остается размером батча.
Обозначения производительности, обслуживания и памяти
Повторно используемые величины производительности и обслуживания следуют тому же правилу избегания коллизий, что и железный закон. Скорости обозначаются через или описательные греческие символы; число запросов — через , а не перегруженным ; загрузка очереди — через с индексом, чтобы голое оставалось доступным для других моделей отношений.
| Символ | Определение | Единица/тип | Примечания |
|---|---|---|---|
| Арифметическая интенсивность | FLOP/байт | FLOP нагрузки на перемещенный байт. Модель Roofline использует как независимую переменную. | |
| Точка перехода Roofline | FLOP/байт | . Предпочитается эта явная форма вместо краткой записи со звездочкой, чтобы смысл оставался ясным в тексте. | |
| Достижимая скорость вычислений | FLOP/s | Граница Roofline: . Использует , а не , потому что величина — скорость. | |
| Утилизация FLOP модели | безразмерная | Полезные FLOP/s модели, деленные на доступные пиковые FLOP/s. Текстовая аббревиатура не перегружает . | |
| Коэффициент сжатия | безразмерный | Размер без сжатия, деленный на размер после сжатия. Сжатая полезная нагрузка имеет несжатого размера; индекс избегает голого . | |
| Одновременность запросов | запросы | Среднее число запросов в обработке в устойчивой системе обслуживания ( по закону Литтла). Избегает совпадения с как числом устройств в распределенных системах. | |
| Интенсивность прихода | запросы/с | Интенсивность прихода запросов. Индекс избегает совпадения с как чувствительностью деградации или интенсивностью отказов. | |
| Время запроса в системе | секунды | Сквозная задержка очереди и обслуживания для закона Литтла. Отличается от , фиксированного члена задержки в железном законе. | |
| Время обслуживания батча | секунды | Время обслуживания батча размера . | |
| Эффективная скорость обслуживания | запросы/с | Скорость обслуживания при батчинге, обычно . | |
| Загрузка обслуживания | безразмерная | Загрузка очереди или сервера. Используется вместо голого , которое в распределенных контекстах зарезервировано за отношением коммуникации к вычислениям. | |
| Полный объем памяти | байты | Сумма явных компонентов памяти; избегает неоднозначности голого . | |
| Память весов | байты | Память, занятая параметрами модели. | |
| Память градиентов | байты | Память, занятая сохраненными градиентами. | |
| Память состояния оптимизатора | байты | Моменты, дисперсии, основные веса и другие буферы оптимизатора. | |
| Память активаций | байты | Сохраненные активации для обратного прохода или промежуточные данные обслуживания. | |
| Размер хранения элемента | байты/элемент | Байты на один хранимый элемент тензора. |
Единицы измерения и точность
- Физические единицы: книга во всем тексте использует метрические единицы СИ — метры, килограммы, секунды, ватты и градусы Цельсия, в соответствии со стандартной инженерной и научной практикой. Если исходные данные были приведены во внесистемных единицах, книга переводит их в СИ и в скобках указывает исходные значения. Между числом и единицей всегда ставится пробел (например, 100 мс, 2 ТБ/с).
- Данные и память: книга использует только десятичные приставки СИ: КБ = байт, МБ = , ГБ = , ТБ = . Двоичные приставки в тексте не встречаются; все емкости, пропускные способности и размеры моделей приводятся в десятичных единицах (например, 80 ГБ, 2 ТБ/с, 102 МБ).
- Вычисления: обозначения различают число операций и скорости. Общий объем работы измеряется в FLOP (например, GFLOP, TFLOP), а пропускная способность — в FLOP/s с десятичными приставками (например, GFLOP/s, TFLOP/s).
- 1 TFLOP = FLOP
- 1 TFLOP/s = FLOP в секунду
- Арифметическая интенсивность обычно выражается в FLOP/байт как единичное отношение (операции с плавающей запятой на перемещенный байт). Это единица отношения, а не символ общего объема работы или пропускной способности.
- Валюта: суммы в долларах обозначаются знаком доллара (
$); если не указано иное, стоимости в долларах — это доллары США (USD). - Точность:
- FP64: двойная точность (8 байт)
- FP32: одинарная точность (4 байта)
- TF32: TensorFloat-32 (режим вычислений тензорных ядер с 19-битным представлением; входы и хранение остаются FP32)
- FP16: половинная точность (2 байта, стандартный диапазон)
- BF16: brain float (2 байта, широкий динамический диапазон)
- FP8: четверть точности (1 байт, формат E4M3 или E5M2)
- FP4: 4-битный формат с плавающей запятой
- INT8: 8-битное целое (1 байт)
- INT4: 4-битное целое; более низкие целочисленные точности следуют тому же шаблону записи
INTnзаглавными буквами (например, INT3, INT2)
Краткая справка: разрешение коллизий
Частые точки коллизий в литературе по системам машинного обучения:
| Символ | Значение в ML | Значение в системах | Соглашение книги |
|---|---|---|---|
| Размер батча | Пропускная способность | Размер батча. Для пропускной способности используйте . | |
| Параметры | Пиковые FLOP/s | Параметры. Для пиковой скорости используйте . | |
| Размер набора данных | Объем данных | Размер набора данных. Для перемещенных байтов используйте . | |
| Потери | Задержка | Потери . Для задержки используйте . | |
| Скорость обучения | Эффективность | Скорость обучения. Для эффективности используйте . |
Как общий принцип, соглашения ML имеют приоритет для одиночных букв, тогда как системные понятия получают индексы или многобуквенные символы. Это отражает основную аудиторию (практиков ML, изучающих системы) и сохраняет совместимость с обширной литературой по ML.
Введение
Назначение
Почему для построения систем машинного обучения нужны инженерные принципы, так сильно отличающиеся от тех, что управляют традиционными вычислительными системами?
Системы машинного обучения подчиняются законам физики. Данные движутся по иерархии памяти, ограниченной пропускной способностью, арифметика выполняется на кремнии, ограниченном мощностью, а предсказания должны поспевать в пределах окна задержки. Эти ограничения — не детали реализации: они определяют решения, начиная от архитектуры модели и заканчивая целевой платформой развертывания. Системы машинного обучения также отличаются от традиционных вычислительных систем тем, что их поведение задается данными, а не только явной логикой или состоянием аппаратуры. Когда обычная программа ведет себя неправильно, инженер часто может проследить исходный код или изучить состояние аппаратуры; когда ведет себя неправильно система машинного обучения, код может выполняться корректно, но выученное поведение дает сбой, потому что данные были неполными, смещенными, устаревшими или перестали быть репрезентативными. Поэтому инженеры машинного обучения одновременно управляют статистической неопределенностью и физическими ограничениями выполнения. Модель, которая помещается в дата-центре, может оказаться бесполезной на телефоне; конвейер обучения, который сходится за неделю на одном ускорителе, на другом займет месяц; точная модель, обученная на данных прошлого года, может незаметно деградировать. Традиционные практики — тестирование, модульность, контроль версий и анализ производительности — по-прежнему необходимы, но их недостаточно. В масштабе системы оптимизация одного слоя может переместить узкое место в другой, поэтому корректность, эффективность и пригодность к развертыванию нельзя проектировать независимо друг от друга. Поэтому первая задача — диагностика: улучшение самого заметного компонента может не изменить сквозного поведения, если связывающим оказывается другое ограничение. Эта книга строит дисциплину, опирающуюся на физические пределы вычислений. Алгоритмические решения влияют на весь стек вплоть до машины, а аппаратные ограничения возвращаются обратно к проектированию модели.
Цели обучения
- Объяснить, почему поведение, заданное данными, и физические ограничения отличают системы машинного обучения от традиционного программного обеспечения
- Применить взгляд «данные — алгоритм — машина», чтобы диагностировать узкие места в перемещении данных, арифметике и пределах машины
- Проанализировать переход ИИ от символических правил к глубокому обучению через призму «горького урока»
- Вычислить члены железного закона производительности, чтобы рассуждать о пропускной способности, задержке и отдаче от вычислений
- Синтезировать перспективы жизненного цикла, развертывания, деградации и пяти опор в инженерные суждения о системах машинного обучения
Системы ИИ сегодня
Искусственный интеллект больше не ограничивается исследовательскими демонстрациями. Задайте вопрос смартфону, и за несколько секунд обученные компоненты преобразуют речь в текст, распознают намерение, находят информацию и формируют ответ. Поисковые системы ранжируют результаты, рекомендательные системы решают, что увидят люди, кредиторы используют модели для оценки риска, а системы помощи водителю обнаруживают опасности. Во всех этих случаях предсказание входит в более крупное решение, которое может повлиять на внимание, деньги, доступ или безопасность. Поэтому то, что выглядит как одно разумное действие, на самом деле является сквозной системой, работающей в реальном мире.
Современное движение в области ИИ стало практичным, когда сошлись три силы: цифровые сервисы порождали больше примеров, чем инженеры могли бы закодировать в виде правил, алгоритмы обучения извлекали из этих примеров предсказательную структуру, а параллельное оборудование делало получившиеся вычисления осуществимыми. Однако самым весомым оказалось концептуальное изменение. Данные перестали быть всего лишь входом для программы; они стали механизмом, который определяет поведение программы. Вместо того чтобы вручную писать логику решений, инженеры строят конвейер оптимизации, через который эмпирические примеры формируют правила, исполняемые системой.
Это сочетание порождает двойное требование. Каждая система машинного обучения должна доказать, что выученное поведение заслуживает доверия, и что машина способна выдавать это поведение в пределах доступного времени, памяти, энергии и стоимости. Точная, но слишком медленная модель непригодна; быстрая модель, обученная на нерепрезентативных данных, ошибается с машинной скоростью. Различие яснее всего видно на границах отказов. Дефект в коде может вызвать громкий сбой, тогда как дефект в данных может оставить каждую инструкцию выполненной корректно, а качество предсказаний незаметно ухудшается. В масштабе оба требования охватывают весь стек. Разговорные сервисы координируют пулы GPU1, одновременно управляя памятью, сетями и теплом. Системы помощи водителю должны объединять потоки данных с датчиков за миллисекунды. Google обрабатывает 8,5 млрд поисковых запросов в день при строгих целевых значениях задержки. Такие системы работают только тогда, когда выученное поведение и физическое выполнение проектируются вместе. Это совместное проектирование начинается с перехода от логики, заданной кодом, к поведению, заданному данными.
Смена парадигмы: ориентация на данные
Этот сдвиг меняет то, как строится программное обеспечение. Вместо того чтобы писать поведение напрямую, инженеры создают процесс, который выучивает поведение из данных. Когда традиционная программа дает сбой, инженер часто может проследить ветвление, изучить кадр стека и исправить путь выполнения. Когда система машинного обучения теряет точность без изменения кода, причиной может стать сдвиг распределения данных, изменившийся процесс разметки или модель, которая больше не отражает поведение в эксплуатации. Андрей Карпаты2 описал этот переход как переход от Software 1.0 к Software 2.0 (Karpathy, 2017). Как показывает «Смена парадигмы от Software 1.0 к Software 2.0», Software 1.0 кодирует операционную логику в инструкциях, тогда как Software 2.0 выучивает эту логику на примерах. Поэтому его сбои могут оставаться незаметными, пока оценка или мониторинг не покажут, что поведение изменилось.
Software 2.0 не отменяет код. Инженеры по-прежнему строят конвейеры данных, циклы обучения, инструменты оценки и инфраструктуру обслуживания. Меняется то, где находится поведение приложения. Часть его хранится в выученных весах, которые сформированы данными, поэтому одна только проверка кода не объяснит, что система будет делать.
| Характеристика | Software 1.0 (традиционное) | Software 2.0 (машинное обучение) |
|---|---|---|
| Исходный код | C++, Python, Java | Обучающие данные + метки |
| Компилятор | GCC, LLVM | Цикл обучения (стохастический градиентный спуск) |
| Логика | Явная (написана вручную) | Неявная (выучена) |
| Режим отказа | Громкий (сбой, исключение) | Тихий (деградация метрик) |
| Отладка | Трассировка пути выполнения | Анализ распределения данных |
Смена парадигмы от Software 1.0 к Software 2.0: В Software 2.0 «программист» не пишет логику, а курирует набор данных, который оптимизационный процесс использует, чтобы написать логику. Поэтому отладка смещается вверх по течению: от кода к данным. Аналогия с «компилятором» приблизительна: в отличие от детерминированного компилятора процесс обучения стохастичен и может выдавать разные «исполняемые файлы» из одного и того же «исходного кода».
Ориентация на данные меняет то, что инженеры должны создавать и поддерживать. В исследовании производственных систем Google обнаружено, что код модели занимает лишь малую часть инженерной поверхности (Sculley et al., 2015). Окружающая система — сбор данных, проверка, извлечение признаков, управление ресурсами, обслуживание и мониторинг — оказалась больше и долговечнее.
Производственная работа с ML — в основном окружающая система, а не только код модели.
Этот дисбаланс порождает скрытый технический долг. Каждый окружающий компонент кодирует допущения о том, как выбирается пример, что означает метка, когда вычисляется признак, какая версия попадает в обслуживание и как обнаруживается деградация. Ни одно из этих допущений не видно в матричном умножении, которое дает предсказание, однако любое из них может изменить результат. Одна лишь модель не исправит устаревший прокси, сломанный конвейер признаков или отсутствующий сигнал обратной связи.
Производственные данные, таким образом, — не пассивный вход. Это измерение мира, собранное через конкретный продукт и преобразованное меняющимся конвейером. Если это измерение перестает отражать целевую величину, модель может оставаться численно здоровой, а система — ошибаться. Google Flu Trends дает показательный пример. У сервиса был огромный и своевременный поток поисковых данных, но смысл этих данных менялся под моделью.
Когда поисковые журналы приняли внимание за болезнь (2014)
Контекст: Google Flu Trends (GFT) оценивал активность гриппа по закономерностям в агрегированных поисковых запросах (Ginsberg et al., 2009; Lazer et al., 2014). Его привлекательность состояла в скорости и масштабе, с которыми поисковые запросы поступали по сравнению с клиническими отчетами. Если люди искали симптомы гриппа, когда заболевали, объем запросов казался своевременным прокси заражения.
Режим отказа: прокси оказался нестабильным. Новостные публикации меняли то, что люди искали, а автодополнение меняло то, как они формулировали запросы. Объем запросов начал измерять общественное внимание и поведение продукта в такой же степени, как и болезнь. В сезон 2012–2013 годов GFT оценивал долю визитов к врачу по поводу гриппоподобных заболеваний примерно вдвое выше, чем сообщали CDC, и завышал оценку в 100 из 108 недель.
Системный урок: решением стал не просто больший набор поисковых данных и не лучше настроенная модель. Исследователи объединили поисковые сигналы с клиническими данными сентинельного наблюдения CDC и со временем перекалибровали связь. Объем данных — не истина: поведенческому прокси нужны цикл обратной связи с доверенным измерением и постоянные свидетельства того, что прокси все еще отражает величину, которую система претендует оценивать.
Google Flu Trends дал сбой без традиционного программного дефекта. Код не менялся, но фактически работающая программа изменилась, потому что распределение входов и связь между прокси и целью сдвинулись. По принципу «данные как код» обучающие данные не просто попадают в фиксированную программу; они помогают определить операционную логику, которую реализует модель. Инженеры по-прежнему пишут процедуру оптимизации, но примеры формируют веса модели3 через стохастический градиентный спуск4 и родственные методы. Поэтому изменение набора данных может так же неизбежно менять поведение системы, как изменение исходного кода.
С точки зрения разработки ML это переход от ИИ, ориентированного на модель, к ИИ, ориентированному на данные (Ng, 2021). В подходе, ориентированном на модель, команда фиксирует данные и сосредоточивается на улучшении кода модели. В подходе, ориентированном на данные, код остается относительно фиксированным, а данные систематически улучшаются, поэтому курирование данных становится полноправной частью программирования поведения модели. Этот сдвиг меняет и то, что может установить тестирование, потому что никакой конечный набор данных не может представить все входы, с которыми столкнется обученная система.
Логику Software 1.0 часто можно разбить на пути выполнения и граничные условия. Обученная система работает в многомерном пространстве входов, которое технически конечно, но на практике не перечислимо. Задача ImageNet 2012 года делает эту проблему конкретной. Решающая победа AlexNet5 помогла запустить эпоху глубокого обучения, однако эталонный тест мог проверить лишь ничтожную долю входов, с которыми может столкнуться модель. Каждый вход — это RGB-изображение с возможными конфигурациями пикселей, и это число содержит 362 508 цифр. Набор валидации ImageNet Large Scale Visual Recognition Challenge (ILSVRC) содержит лишь 50 000 изображений (Krizhevsky et al., 2012; Russakovsky et al., 2015). Пусть Полное пространство входов обозначает число возможных входов, а Покрытие тестовой выборкой — число входов, которое набор тестов реально проверяет. Их разрыв создает разрыв верификации («разрыв верификации»):
Разрыв не делает тестирование бесполезным; он меняет то, что тестирование может установить. Оценка до развертывания дает статистические свидетельства по выборке входов, а мониторинг в эксплуатации проверяет, по-прежнему ли рабочая совокупность и наблюдаемые результаты подтверждают эти свидетельства. Статистическая надежность заменяет ожидание исчерпывающего доказательства.
Покрытие тестами — ничтожная доля пространства входов.
Разрыв верификации отмечает более глубокое изменение в том, что инженеры могут утверждать. Традиционные утверждения часто описывают конкретное выполнение, в котором данный вход и состояние ведут программу по определенному пути. Утверждения о производительности ML описывают поведение на совокупности. Фиксированная модель может выдавать один и тот же результат на один и тот же вход, тогда как ее измеренная точность меняется вместе с совокупностью. Данные дают закономерности, на которых учится система, но их шум, дрейф и пропуски тоже создают неопределенность. Поэтому устойчивость не может означать сопротивление любым изменениям. Она требует делать изменения наблюдаемыми и адаптироваться, когда свидетельства перестают подтверждать допущения системы, — это форма вероятностной инженерии.
Инженерные последствия выходят за пределы тестирования. Отладка системы машинного обучения требует отладки данных, а не только скриптов на Python. Контроль версий должен отслеживать наборы данных, а не только коммиты git. Оценка должна изучать распределения и результаты, а не только пути в коде. Вместе эти практики делают выученное поведение воспроизводимым и прослеживаемым, но они не превращают статистическую выборку в формальную верификацию.
Смена парадигмы
Прежде чем проследить историю ИИ, проверьте, как вы понимаете смену парадигмы в том, как мы создаем программное обеспечение:
- Software 1.0 и 2.0: можете ли вы отличить Software 1.0 (явные инструкции) от Software 2.0 (цели оптимизации)?
- Сдвиг в отладке: можете ли вы указать, какие данные нужно проверить, когда точность падает без изменения кода?
- Разрыв верификации: можете ли вы объяснить, почему конечное тестовое покрытие не может установить статистическую надежность на всем производственном распределении входов?
Задним числом обучение поведению на данных может казаться неизбежным, но это был инженерный поворот, вынужденный жесткими пределами масштабирования. Более ранние парадигмы ИИ пытались программировать интеллект напрямую, с помощью вручную созданных символов и правил. Анализ этих неудач показывает, как связывающее ограничение переходило через четыре различные эпохи: от логики к знаниям, от знаний к признакам и, наконец, к физической инфраструктуре.
Эволюция узких мест ИИ
Каждая крупная эпоха в искусственном интеллекте столкнулась с жестким системным пределом задолго до того, как ее алгоритмические идеи были исчерпаны. Когда Алан Тьюринг6 предложил оценивать машинный интеллект по наблюдаемому результату, а не по внутренней сущности (Turing, 1950), вычислительной технике не хватало объема памяти для хранения знаний о реальном мире и пропускной способности памяти для вычисления сложных моделей. Ранние системы разошлись по фундаментальной линии разлома: персептрон Фрэнка Розенблатта (Rosenblatt, 1958) пытался выучивать веса по сенсорным входам, тогда как ELIZA Джозефа Вайценбаума7 (Weizenbaum, 1966) выполняла вручную заданные подстановки по шаблонам. Обе системы упирались в физические реалии: однослойные персептроны не имели механизмов обучения многослойных сетей и нелинейных представлений, а сценарии на основе правил ломались, когда ввод пользователя отклонялся от заранее заданных шаблонов. Последующие эпохи столкнулись с узким местом приобретения знаний, потому что ручной ввод знаний не масштабировался. Современные системы сталкиваются с другим ограничением — вычислительной пропускной способностью.
Хронология в «Хронологии развития ИИ» показывает, как часто упоминается искусственный интеллект в опубликованных книгах; это прокси внимания, а не прямая мера объема исследований. Она выявляет повторяющуюся закономерность: интенсивный оптимизм, за которым следовали «зимы ИИ»8, когда финансирование обрушивалось, часто после того, как ограничения систем обнажали разрыв между амбициями и реальными возможностями. Возрождения сочетали алгоритмические достижения с новыми данными и инженерной инфраструктурой. Каждое возрождение снимало одно узкое место и обнажало следующее.
Хронология развития ИИ: Хронологическая кривая-прокси показывает упоминания искусственного интеллекта в опубликованной литературе (Michel et al., 2011); светло-коричневые полосы отмечают два периода «зим ИИ» (1974–1980, 1987–1993). Выноски отмечают статью Тьюринга 1950 года (Turing, 1950), Дартмутскую конференцию (McCarthy et al., 1955), персептрон (Rosenblatt, 1958), ELIZA (Weizenbaum, 1966), Deep Blue (Campbell et al., 2002) и GPT-3 (Brown et al., 2020).
Эпоха до машинного обучения: узкие места логики и знаний
До того как машинное обучение сложилось в самостоятельную дисциплину, инженеры пытались строить интеллектуальные системы в рамках двух последовательных парадигм, и каждая упиралась в фундаментальный барьер масштабирования. Символический ИИ кодировал интеллект в виде логических правил и натыкался на узкое место логики, когда эти правила не могли охватить неоднозначность реального мира. Экспертные системы кодировали интеллект в виде знаний предметной области и натыкались на узкое место знаний, когда получение и поддержка этих знаний обходились дороже, чем стоила сама система. Оба провала показывают один и тот же архитектурный тупик: созданные вручную представления не масштабируются.
Эра символического ИИ и узкое место логики
Первая эпоха инженерии ИИ (1950–1970-е годы) пыталась свести интеллект к манипулированию символами — символическому ИИ; позже этот подход оформился в гипотезу физической системы символов (Newell and Simon, 1976). Исследователи на Дартмутской конференции 1956 года9 (McCarthy et al., 1955) предположили, что отдельные аспекты интеллекта можно точно описать и смоделировать машинами. Уже тогда Артур Сэмюэл из IBM показал другой путь: в 1959 году программа для игры в шашки улучшалась в ходе игры с самой собой. Его работа ввела термин «машинное обучение» (Samuel, 1959), хотя доминирующей парадигмой оставался символический подход. Система STUDENT Дэниела Боброва10 — типичный пример этого подхода (Bobrow, 1964).
Эти системы могли давать впечатляющие демонстрации, однако в эксплуатации они были хрупкими. Их успех зависел от вручную закодированных правил, которые сопоставляли каждую допустимую форму ввода с символическим представлением. STUDENT мог решить задачу по алгебре, если переводил английский текст в уравнения, но небольшое изменение формулировки могло помешать такому переводу. Трудности выходили за пределы языка. Работа Ганса Моравека11 над автономной навигацией в Стэнфорде показала, что задачи, которые людям кажутся тривиальными (видеть, ходить, хватать), инженерно решать гораздо труднее, чем задачи, которые даются людям с трудом, например шахматы или алгебру.
STUDENT (1964)
STUDENT отделял интерпретацию языка от алгебры:
язык "Два числа в сумме дают 30; одно из них вдвое больше другого." разбор x + y = 30, x = 2y решение x = 20, y = 10Когда представление было верным, решение становилось рутиной. Узким местом был перевод: каждая непривычная формулировка требовала еще одного написанного вручную правила, поэтому языковой охват рос лишь так же быстро, как база правил.
Эра экспертных систем и узкое место знаний
В эпоху экспертных систем инженеры сузили задачу. Вместо универсальных систем рассуждений они кодировали глубокие знания конкретной предметной области. MYCIN, созданный для диагностики инфекций крови, позволял выражать медицинские знания в виде продукционных правил (Shortliffe et al., 1975).
MYCIN (1976)
MYCIN делал свои рассуждения явными. Факты о пациенте запускали читаемые продукционные правила:
факты окраска=грамположительная, форма=кокк, расположение=скопления правило ЕСЛИ факты совпадают ТО организм=стафилококк (уверенность=0.7) цикл сопоставить факты -> сработало правило -> обновить уверенность -> повторитьМеханизм логического вывода повторял этот цикл по сотням правил и передавал коэффициенты уверенности к диагнозу. Врач мог проверить каждый шаг, но охват по-прежнему рос по одному правилу за раз: каждое исключение нужно было выявить, закодировать и согласовать с существующей базой правил.
MYCIN хорошо показал себя в отдельных тестах, но его успех обнажил узкое место приобретения знаний.12 Вопрос уже не в том, может ли правило выразить экспертизу. Вопрос в том, как неявное суждение попадает в систему и остается согласованным по мере роста базы правил.
Более быстрые машины могли вычислять больше правил, но не могли быстрее извлекать человеческое суждение. Масштабируемому ИИ требовался способ выводить полезные границы решений из примеров, а не заставлять инженеров заранее перечислять эти границы.
Этот переход не отменил человеческого проектирования; он изменил то, что проектируют инженеры. Вместо кодирования каждого решения они выбирали примеры, представления, цели и измерения, на основе которых решение можно выучить. Поэтому следующая эпоха заменила узкое место приобретения знаний новым вопросом: какие свидетельства должен видеть обучающийся?
Эра статистического обучения и узкое место инженерии признаков
1990-е годы ознаменовались переходом к статистическому обучению и вероятностным системам. Вместо жестко заданной логики системы оценивали вероятности по данным (). Этот переход подпитывался доступностью цифровых данных и «необъяснимой эффективностью»13 больших наборов данных.
Фильтрация спама иллюстрирует этот переход. Вместо поддержки списков запрещенных слов статистические фильтры выучивали вероятность того, что слово указывает на спам, по миллионам примеров.
Ранние системы обнаружения спама
Статистические фильтры перевели решение из вручную написанного правила в вероятность, оцененную по размеченным письмам:
правила: если встречается "free" или "winner" -> спам обучение: размеченное письмо -> правдоподобия слов -> P(спам | письмо)Сопровождение никуда не делось. Оно переместилось от редактирования списков ключевых слов к курированию репрезентативных примеров и проверке того, что выученные вероятности по-прежнему отражают современную почту.
Обучение границы решения по данным устранило одно узкое место, но обнажило другое. Статистические алгоритмы, например машины опорных векторов (SVM), могли надежно обучаться только после того, как люди превращали сырые входы в структурированные признаки. В компьютерном зрении, например, инженеры годами разрабатывали вручную математические преобразования, такие как SIFT (Scale-Invariant Feature Transform) и HOG (Histogram of Oriented Gradients), чтобы выделять границы, углы и сводки текстуры, прежде чем подавать их классификатору. Обучающийся алгоритм корректировал границу, а инженеры решали, какие свидетельства он может видеть. Перенос на новую задачу часто означал перестройку всего стека предобработки, превращая кажущееся ограничение алгоритма в узкое место инженерии признаков. Традиционный конвейер делает эти ручные усилия видимыми, потому что несколько вручную созданных этапов предшествовали любому обучению.
Этот гибридный подход сочетал признаки, созданные инженерами, со статистическим обучением. Алгоритм Виолы — Джонса14 (Viola and Jones, 2001) — типичный пример этой эпохи: он обеспечивал обнаружение лиц в фас в реальном времени с помощью простых прямоугольных признаков и каскадных классификаторов. Он показал, что хорошо спроектированные признаки могут обеспечить практические приложения с низкой задержкой, но лишь в узких областях, где эксперты могли вручную создать подходящие представления.
Традиционный конвейер компьютерного зрения
Обычная система зрения отделяла представление от классификации:
изображение -> изменение размера -> признаки HOG/SIFT -> SVM -> меткаОбучалась только последняя граница решения. Переход от лиц к пешеходам или к другой области означал переработку извлекателя признаков и часто всего конвейера предобработки.
Эра глубокого обучения и узкое место инфраструктуры
Глубокое обучение изменило то, какая часть системы обучается. Вместо признаков, спроектированных людьми, нейронные сети выучивали представления непосредственно из сырых входов, таких как пиксели и аудиосигналы. Процесс обучения теперь мог формировать и представление, и границу решения, что позволило «сквозное» обучение.
Прорыв не был только алгоритмическим. Сверточные нейронные сети (CNN) существовали и раньше (LeCun et al., 1998; LeCun et al., 2015), но AlexNet соединил архитектуру и обучение с совместным проектированием системы: модель, процедура обучения и отображение на аппаратуру выбирались вместе (Krizhevsky et al., 2012). Его параллельные матричные операции соответствовали возможностям GPU. При 60 миллионах параметров, распределенных между двумя GPU GTX 580, AlexNet показал ошибку top-5 в 15,3 процента, что на 41,6 процента лучше следующего лучшего результата того года. Этапы обработки на «схеме архитектуры AlexNet» показывают, как модель выучивает все более богатые представления изображения, прежде чем выдать один из 1000 выходных классов.
Архитектура AlexNet: сеть, которая запустила революцию глубокого обучения на ImageNet 2012 (Krizhevsky et al., 2012). Два параллельных потока GPU обрабатывают входные изображения через сверточные слои (зеленые блоки), которые выделяют пространственные признаки при уменьшающемся разрешении, и сходятся через три полносвязных слоя в 1000 выходных классов. При 60 миллионах параметров, обученных на двух GPU GTX 580, AlexNet показал ошибку top-5 в 15,3 процента, что на 41,6 процента лучше результата второго места.
Аппаратура по-прежнему определяла, что можно выучить. Имея всего 3 ГБ видеопамяти (Video Random-Access Memory, VRAM) на каждую GTX 580 AlexNet разделял сверточные и полносвязные слои между двумя потоками GPU. Эта ранняя модельно-параллельная схема предвосхитила современное обучение на нескольких GPU. Глубокое обучение уменьшило потребность в признаках, созданных вручную, но перенесло связывающее ограничение на инфраструктуру, необходимую для хранения данных, перемещения параметров и координации вычислений.
Глубокое обучение фактически обменяло узкое место инженерии признаков на новое узкое место вычислений. Модели вроде GPT-3 (175 млрд параметров) показывают масштаб этой новой задачи. Brown et al. (2020) сообщают об обучении примерно на 300 млрд токенах из отфильтрованного веб-текста, книг и Википедии. По плотной аппроксимации обучения из книги (: 2 FLOP на параметр в прямом проходе и 4 — в обратном; выведена в разделе «Обучение моделей»), такой масштаб произведения параметров и токенов соответствует примерно 314 зетта-FLOP вычислений (). Сам набор токенов занимает примерно 420 ГБ. Поскольку исходная статья не указывает точный кластер, пересчет этого бюджета вычислений в машинное время дает примерно 350–400 GPU-лет на современных облачных GPU (например, NVIDIA V100). Это иллюстративная системная оценка, а не зафиксированный результат измерений. Основная инженерная задача сместилась от описания кошачьего уха к координации распределенного обучения большого масштаба без сбоев.
Каждый крупный переход в истории ИИ восходит к смещающемуся физическому ограничению, а не только к изобретению алгоритма. В «Эволюции парадигм ИИ» сравниваются четыре крупные эпохи по их сильным сторонам, определяющим системным узким местам и требованиям к данным.
| Аспект | Символический ИИ | Экспертные системы | Статистическое обучение | Глубокое обучение |
|---|---|---|---|---|
| Главная сила | Логические рассуждения | Экспертиза предметной области | Универсальность | Распознавание закономерностей |
| Узкое место | Хрупкость (правила ломаются) | Ввод знаний (экспертов мало) | Инженерия признаков (ручная предобработка) | Масштаб вычислений и данных (стоимость инфраструктуры) |
| Работа с данными | Нужно минимум данных | Опора на знания предметной области | Нужен умеренный объем данных | Обработка массивов данных |
Эволюция парадигм ИИ: каждая эпоха определяется системным узким местом, которое ее ограничивало. Глубокое обучение (крайний правый столбец) преодолело узкое место инженерии признаков, но ввело новые инфраструктурные задачи, что потребовало современной инженерии систем машинного обучения.
Горький урок
Экспертные системы вкладывали инженерные усилия в кодирование знаний предметной области; системы глубокого обучения вкладывают те же усилия в освоение все большего объема данных и вычислений. Горький урок описывает историческую закономерность: общие методы, которые используют растущий объем вычислений, стабильно превосходят подходы, кодирующие человеческий опыт. Ричард Саттон15 сформулировал эту мысль в эссе «Горький урок» 2019 года (Sutton, 2019). Саттон писал: «Самый важный урок, который можно извлечь из 70 лет исследований ИИ, состоит в том, что общие методы, опирающиеся на вычисления, в конечном счете оказываются наиболее эффективными, и с большим отрывом».
«Эволюция производительности ИИ по парадигмам» сопоставляет представительные эталонные достижения с аппаратной базой. Его последний столбец прослеживает переход от вычисления правил на одном потоке CPU к кластерам из тысяч ускорителей; в качестве иллюстративной опорной точки обучения передовых моделей используется 2,5 млн эталонных GPU-дней (Patel and Wong, 2023).
| Эпоха | Подход | Представительная задача | Производительность | Вычислительные ресурсы |
|---|---|---|---|---|
| Экспертные системы (1980-е) | Правила, написанные вручную | Шахматы (рейтинг Эло) | Зависит от системы | Минимальные (вычисление правил) |
| Статистическое ML (1990–2000-е) | Инженерия признаков + обучение | Распознавание рукописных цифр | около 98–99 % на эталонных тестах эпохи MNIST (LeCun et al., 1998) | Конвейеры признаков эпохи CPU; ресурсы зависели от реализации |
| Глубокое обучение (2012) | Сквозные нейронные сети | Точность top-5 на ImageNet | 84,7 % (AlexNet) | 6 дней на 2 GPU |
| Современное глубокое обучение (2020+) | Крупномасштабные трансформеры | Точность top-1 на ImageNet | 88,55 % (ViT-H/14) (Dosovitskiy et al., 2021) | Предобучение на крупных кластерах Tensor Processing Unit (TPU) |
| Современное глубокое обучение (2023) | Фундаментальные модели | Бенчмарк MMLU | 86,4 % (GPT-4) (OpenAI et al., 2023) | Оценка: около 2,5 млн эталонных GPU-дней (порядка 25 000 эталонных GPU, работавших 90 дней) (Patel and Wong, 2023) |
Эволюция производительности ИИ по парадигмам: представительные системы иллюстрируют рост вычислительного масштаба по эпохам. Детали обучения GPT-4 — оценочные ориентиры, а не официально раскрытые данные.
Точность top-5 на ImageNet и Massive Multitask Language Understanding (MMLU) (см. главу «Бенчмаркинг») измеряют разные способности, но движутся по одной системной траектории. Масштаб оборудования вырос от выполнения на одном CPU-узле до кластеров мощностью в мегаватты, что подтверждает наблюдение Саттона: методы, созданные для использования сырых вычислений, стабильно опережают представления, настроенные вручную.
Более ранние вехи в автоматизированных играх демонстрировали ту же траекторию, управляемую аппаратурой. В шахматах Deep Blue от IBM в 1997 году победил чемпиона мира Гарри Каспарова16, объединив специализированное шахматное железо, масштабный перебор и знания о шахматах. Его функция оценки кодировала человеческие шахматные эвристики, но именно масштаб перебора, обеспеченный специализированным кремнием, был ключом к тому, чтобы превратить эти знания в игру чемпионского уровня. В го AlphaGo от DeepMind17 (Silver et al., 2016) достиг сверхчеловеческих результатов: он сочетал обучение с учителем на партиях экспертов с обучением с подкреплением через игру с самим собой и поиск по дереву, направляемый нейронной сетью, вместо опоры на вручную заданную стратегию игры в го.
Урок «горький», потому что нашей интуиции свойственно ошибаться. Естественно считать, что путь к искусственному интеллекту — это кодирование человеческой экспертизы. Однако снова и снова системы, которые используют вычисления для обучения на данных, при достаточном масштабе превосходят системы, опирающиеся на человеческие знания. Закономерность сохранялась в эпохи символического ИИ, статистического обучения и глубокого обучения.
Современные языковые модели, такие как GPT-4, и системы генерации изображений, такие как DALL-E, наглядно иллюстрируют этот принцип. Их возможности возникают не из лингвистических или художественных теорий, закодированных людьми, а из обучения универсальных нейронных сетей на огромных объемах данных с использованием значительных вычислительных ресурсов. Оценки для моделей масштаба GPT-3 дают примерно 1,3 ГВт·ч энергии18 (Patterson et al., 2021), а обслуживание таких моделей миллионов пользователей превращает вывод в непрерывную задачу по питанию, охлаждению и планированию мощностей дата-центра.
Применение горького урока на практике требует инженерной дисциплины, которая далеко выходит за пределы проектирования алгоритмов. Когда возможности модели растут вместе с сырыми вычислениями, связывающими становятся пропускная способность памяти,19 задержка межсоединений, отвод тепла и пропускная способность конвейера данных (см. главу «Аппаратное ускорение»).
Масштабирование вычислений превращает модель машинного обучения в артефакт физических систем: такой, которым управляют бюджеты мощности, иерархии памяти и накладные расходы на коммуникацию. Проектирование таких систем требует рассматривать перемещение данных, выполнение арифметики и эксплуатационную надежность как единую задачу. Эта более широкая ответственность и есть инженерия ИИ, которая формально разбирается в «Инженерии ИИ как дисциплине». Чтобы обосновать эту дисциплину, нужно определить ее основной объект через эксплуатационные реалии конкретного производственного сервиса.
Определение систем машинного обучения
Вернемся к фильтру спама, введенному в истории статистического обучения. В производственном масштабе тот же, казалось бы, простой классификатор работает с глобальным потоком почты, измеряемым сотнями миллиардов отправленных и полученных сообщений в день (Statista Research Department, 2024). Крупные провайдеры должны за миллисекунды решить, какие сообщения заслуживают внимания, а какие следует отправить в карантин.
Эта обманчиво простая задача показывает, чем системы машинного обучения отличаются от традиционного программного обеспечения. Вызов начинается с данных. Фильтр обучается на миллионах размеченных примеров и должен постоянно адаптироваться по мере того, как спамеры меняют тактику, вместо того чтобы программисты вручную кодировали каждый шаблон спама. Затем задача становится алгоритмической: модель должна обобщать эти примеры на сообщения, которых она никогда не видела, и балансировать точность и полноту, чтобы законные письма не скрывались. Наконец, то же решение становится инфраструктурной задачей. Провайдеры должны ежедневно обрабатывать миллиарды писем, хранить и обновлять модели по мере эволюции спама и обслуживать предсказания с задержкой менее 100 мс в горизонтально масштабируемых дата-центрах. Классификатор, таким образом, — лишь один компонент развивающейся системы из данных, программного обеспечения и аппаратуры.
Когда появляется новый шаблон фишинга, слой данных должен собрать репрезентативные письма, алгоритм — отделить атаки от законной почты, а машина — распространить обновленные параметры до доставки. Любой слой может отказать, пока остальные продолжают работать, поэтому правильная единица анализа — вся цепочка от измерения через обучение до выполнения.
Системы машинного обучения
Системы машинного обучения — это программные системы, основное поведение которых определяется параметрами, выученными из данных, а не явно запрограммированными правилами. Поэтому производительность одновременно зависит от качества данных, выбора алгоритма и мощности аппаратуры.
- Значение: требования сквозные. Фильтр спама полезен только тогда, когда его обучающие данные отражают текущие атаки, его модель отделяет вредоносную почту от законной, а путь обслуживания классифицирует каждое сообщение в пределах бюджета доставки. Отказ любого слоя меняет результат, который видит пользователь.
- Отличие: в отличие от традиционного программного обеспечения точность системы машинного обучения может меняться, когда меняется мир, даже если ее код и веса остаются прежними. Распределение производственных входов может сместиться относительно того, чему выучилась модель, и незаметно изменить качество без ошибки или исключения.
- Типичная ошибка: модель — это не вся система. Конвейеры данных, преобразования признаков, инфраструктура обслуживания, мониторинг и циклы обратной связи окружают выученные параметры и часто составляют основную инженерную нагрузку (Sculley et al., 2015).
Определение выделяет три диагностических оси: данные, которые описывают задачу, алгоритм, который превращает эти примеры в поведение, и машину, которая выполняет это поведение в рамках эксплуатационного бюджета. Таксономия D·A·M придает этим осям многократно используемую форму.
Один и тот же видимый пользователю симптом может возникать из любой из трех осей. Пропущенное фишинговое письмо может означать, что репрезентативных примеров не хватало, что выученная граница решения была недостаточной или что путь обслуживания не уложился в бюджет задержки. Если считать каждый промах проблемой модели, легко улучшить не тот компонент. Полезная системная таксономия должна разделять эти причины, не делая вид, что они независимы.
Каждое объяснение требует разных свидетельств. Гипотеза о данных отправляет инженера к покрытию, меткам и сдвигу распределения. Гипотеза об алгоритме — к срезам ошибок, емкости модели и цели обучения. Гипотеза о машине — к задержке, пропускной способности, памяти и загрузке. Эти расследования не взаимозаменяемы. Более быстрое железо не добудет примеры, которые никогда не собирались, а больший набор данных не исправит путь обслуживания, который не укладывается в срок из-за заполненной памяти.
Релевантное ограничение — то, ослабление которого улучшает сквозной результат. Идея связывающего ограничения не дает командам оптимизировать самый заметный компонент вместо того, который определяет итог. Поэтому назначение D·A·M операционное: оно указывает следующую гипотезу для проверки и класс воздействий, способных изменить поведение системы. Диагноз предварителен. Как только вмешательство снимает одно ограничение, систему нужно измерить заново, потому что теперь может связывать другая ось. D·A·M — это цикл, а не разовая метка.
Таксономия D·A·M
Таксономия D·A·M — это диагностическая рамка, которая классифицирует любое узкое место производительности системы машинного обучения по трем осям. Данные (Data) определяют, какие примеры и байты система должна обработать; алгоритм (Algorithm) определяет структуру модели и объем работы, необходимый для обучения или предсказания; машина (Machine) определяет доступную мощность аппаратуры для выполнения этой работы. Цель — определить, какая ось является связывающим ограничением.
- Значение: диагностическая сила конкретна даже до того, как в рассказ входит подробная арифметика железа. Если фильтр спама пропускает новую фишинговую кампанию, потому что обучающий набор никогда не содержал такой тактики, связывающая ось — данные. Если обучающие примеры адекватны, но модель не может выразить закономерность, связывающая ось — алгоритм. Если и то и другое адекватно, но сервис не может классифицировать сообщения достаточно быстро во время всплеска трафика, связывающая ось — машина. Количественная диагностика начинается с вопроса, какая ось ограничивает систему.
- Отличие: в отличие от традиционного анализа производительности программ, который рассматривает код и данные как отдельные задачи, таксономия D·A·M учитывает, что выбор алгоритма напрямую определяет и размер обучающего набора данных (трансформеру нужно на порядки больше данных, чем линейной модели, чтобы обобщать), и машину, необходимую для его запуска.
- Типичная ошибка: распространено заблуждение, будто три оси независимы. Переход от простого классификатора к большей модели может потребовать больше памяти, другой инфраструктуры обслуживания и более широкого распределения данных. Оси движутся вместе.
«Треугольник осей D·A·M» показывает эти три оси как взаимозависимый диагностический треугольник, где изменение требований вдоль любого ребра напрямую меняет ограничения двух остальных.
Треугольник осей D·A·M: данные (Data), алгоритм (Algorithm) и машина (Machine) — три взаимозависимые части системы машинного обучения. Двусторонние связи подчеркивают, что изменение одной части может менять требования к двум другим.
Треугольник задает операционный протокол для анализа первопричин. Он превращает сквозной симптом — деградацию точности, нарушения хвостовой задержки или перерасход бюджета — в три систематических пути измерения: проверку входных свидетельств (Data), характеристику математической нагрузки (Algorithm) и профилирование физического выполнения на аппаратуре (Machine). Диагноз заслуживает доверия только тогда, когда ослабление выявленного ограничения улучшает поведение системы целиком.
Двусторонние связи на «Треугольнике осей D·A·M» подчеркивают, что вмешательство в одну вершину часто переносит связывающее ограничение в другую. Переход на более быстрые ускорители (Machine) может оставить исполнительные блоки простаивающими, если ввод-вывод хранилища не успевает подавать входные батчи (Data). Увеличение объема набора данных (Data) может обнажить архитектуру модели, которой не хватает выразительной емкости, чтобы усвоить новые закономерности (Algorithm). Масштабирование емкости модели, чтобы закрыть этот разрыв (Algorithm), может превысить объем памяти ускорителя и вызвать неэффективные обращения к памяти, выгрузку данных (spilling) или ошибки нехватки памяти (Machine). Инженерия системы машинного обучения требует определить текущее связывающее ограничение и предвидеть, куда переместится узкое место после его ослабления.
Хотя треугольник разделяет три оси, чтобы упростить первичную диагностику, реальные системы работают на их границах. Форматы данных определяют трафик памяти, архитектуры моделей задают загрузку функциональных блоков аппаратуры, а бюджеты развертывания перекраивают и представление данных, и проектирование алгоритма. «Ландшафт пересечений D·A·M» показывает эти попарные границы и их общий центр.
Ландшафт пересечений D·A·M: данные, алгоритм и машина начинаются как три разные диагностические линзы, но практические системы машинного обучения живут на их границах. Попарные пересечения отвечают на вопросы, из чего система может учиться, как перемещается информация и как вычисления выполняются эффективно. Их центр — инженерия систем машинного обучения, где все три ограничения должны балансироваться вместе.
Диаграмма Венна упорядочивает эти связи от внешних границ к центру: Data и Algorithm определяют, из чего система может учиться; Data и Machine — как перемещается информация; Algorithm и Machine — как вычисления выполняются эффективно. В центре все три вопроса должны получить ответ одновременно. Это пересечение и определяет инженерию систем машинного обучения.
Эти пересечения отражают физические компромиссы, которые определяют реализацию. Отбор данных и динамика обучения разрешают границу Data–Algorithm, устанавливая, какой объем эмпирического сигнала нужен для сходимости. Инженерия данных и аппаратное ускорение управляют интерфейсом Data–Machine, где ширина шин, линии PCIe и пропускная способность хранилища определяют, как быстро тензоры доходят до исполнительных блоков. Фреймворки, компиляция и планирование ядер разрешают границу Algorithm–Machine, отображая плотную линейную алгебру на исполнительные блоки и минимизируя простои памяти.
Ни одно проектное решение не остается изолированным. Прореживание модели (Algorithm) меняет ее объем памяти и закрепление в кеше (Machine), а потоковая передача сжатых признаков меняет пропускную способность конвейера данных и задержку передачи с хоста на устройство (Data). В производственном ML локальные оптимизации, которые игнорируют эти пересечения, лишь переносят узкое место через границы.
Анализ D·A·M дает диагностическую рамку, но инженерия реальных систем также требует вертикальной иерархии, которая связывает физические пределы кремния с миссией приложения целиком.
Четырехуровневая иерархия от кремния до миссии
Каждая система машинного обучения, рассмотренная в этом тексте, построена из четырех иерархических уровней. Это гарантирует, что решение, принятое на уровне кремния, можно проследить до его влияния на конечную миссию.
- Аппаратура (кремний). Физическая основа (двигатель) задает пиковую вычислительную пропускную способность , пропускную способность памяти и объем памяти. Конкретные аппаратные двойники воплощают эти величины, когда сценарии развертывания требуют числовых ограничений.
- Системы (платформы). Интегрированная единица развертывания (автомобиль) задает рабочую область через свой бюджет мощности, тепловые пределы и межсоединения на уровне узла. Примеры включают узел обучающего кластера или сенсорный узел мощностью менее ватта.
- Нагрузки (модели). Алгоритмический спрос (маршрут) складывается из числа операций , объема перемещаемых данных и их раскладки. Конкретные нагрузки, например GPT-4 и Wake Vision (набор данных для визуальных «слов пробуждения», рассчитанный на микроконтроллеры), воплощают эти требования для отдельных миссий.
- Миссии (сценарии). Контекст применения (пункт назначения) находится на вершине стека, где система развертывается для решения конкретной задачи. Миссия задает требования вроде времени работы от батареи, задержки в критичных по безопасности ситуациях или потолков стоимости в облаке, которые определяют конфигурацию каждого нижележащего уровня.
Эта иерархия гарантирует, что оптимизация системы никогда не выполняется в архитектурном вакууме. Микрооптимизация матричного ядра имеет смысл, только если она расширяет рабочую область платформы или укладывается в срок критичной миссии. Анализ жизненного цикла в «Инженерии на протяжении жизненного цикла ML» сопоставляет каждую повторяющуюся миссию с ее нагрузкой и связывающим ограничением, связывая пропускную способность кремния с эксплуатационными целями.
Ландшафт систем машинного обучения: четыре парадигмы развертывания
Ландшафт систем машинного обучения охватывает диапазон примерно в раз по вычислительной мощности и в раз по объему памяти. «Четыре парадигмы развертывания» сопоставляет ограничения памяти, вычислений и энергии для четырех парадигм развертывания, которые задают ограничения для всех последующих глав.
Парадигма Представительная система Память Вычисления Энергия Облако Ускорительный узел дата-центра Большая память устройства плюс хранилище () Самый производительный уровень () Питание, управляемое дата-центром Периферия Робототехнический или промышленный шлюз Локальная память в рамках ограничений развертывания () Бюджет локального ускорителя или CPU () Питание от сети, автомобиля или объекта Мобильные Смартфон или SoC класса носимых устройств Общая память приложений () Нейронные, графические и CPU-блоки класса телефона () Батарея и тепловой лимит TinyML Узел на микроконтроллере Память килобайтного масштаба () Всегда включенные вычисления сенсора () Батарея милливаттного класса Четыре парадигмы развертывания: представительные ограничения памяти, вычислений и энергии для облачных, периферийных, мобильных систем и TinyML. Они показывают разброс в несколько порядков величины, из-за которого простое переиспользование модели между уровнями невозможно. Точные аппаратные примеры и расчеты пиковых скоростей приведены в главах о железе.
Если читать столбцы памяти и вычислений от облака к TinyML, видно, что крайние точки различаются в раз по памяти и в раз по вычислениям. Именно поэтому инженеры не могут просто уменьшить облачную модель, чтобы она заработала на периферии: каждый уровень требует принципиального перепроектирования осей D·A·M.
Разброс в несколько порядков величины между этими четырьмя парадигмами напрямую переходит в финансовые и эксплуатационные издержки. Архитектура, которая спокойно помещается в памяти ускорителя дата-центра, не может работать без изменений на устройстве класса микроконтроллера. Чтобы преодолеть этот физический разрыв, нужно сбалансировать качество данных, алгоритмическую сложность и возможности аппаратуры с общим экономическим ограничением: полезной работой на доллар.
Полезная работа на доллар
Исследователи часто оптимизируют точность, тогда как инженеры систем должны оптимизировать полезную работу на доллар. Пусть обозначает общее число операций, выполненных при всех предъявлениях примеров, а эффективность затрат — полезные операции, выполненные за доллар. «Масштабирование стоимости» задает согласованную по размерностям модель стоимости первого порядка:
Каждая ось D·A·M по-разному улучшает это отношение. Лучшие данные могут уменьшить число предъявлений примеров, необходимых для достижения целевого качества. Более эффективные алгоритмы уменьшают число операций на пример, а более экономичное железо увеличивает полезные операции на доллар.
Системная инженерия балансирует этот компромисс. Прирост эффективности затрат на 10 процентов позволяет выполнить примерно на 10 процентов больше полезных операций при том же бюджете, но то, направить ли их на больше данных, дополнительные эпохи обучения или более емкую модель, зависит от эластичности кривой обучения для нагрузки. Если ошибка масштабируется как от размера набора данных , эмпирический выигрыш от расширения набора данных на 10 процентов определяется величиной , а не произвольным фиксированным процентом. Инженер систем должен оценить эту эластичность для целевой нагрузки, чтобы понять, где распределение ресурсов дает наибольшую предельную отдачу.
Эти взаимодействия определяют не только операционные расходы, но и то, как система выходит из строя. Повреждение конвейера данных, неучтенный сдвиг распределения или насыщение пропускной способности аппаратуры могут по отдельности незаметно ухудшить поведение модели в эксплуатации, не вызвав сбоя операционной системы или исключения во время выполнения.
Системы ML и традиционное программное обеспечение
В рамках таксономии D·A·M системы машинного обучения объединяют данные, которые задают поведение, алгоритмы, извлекающие статистические закономерности, и машины, которые выполняют обучение и вывод.20 Чтобы понять, чем инженерия таких систем отличается от традиционного программного обеспечения, стоит начать с того, как они выходят из строя в эксплуатации.
Дефекты обычного программного обеспечения, как правило, дают явные режимы отказа: приложения падают, необработанные исключения распространяются, процессы завершаются с ненулевым кодом выхода, а конечные точки проверки состояния возвращают ошибки HTTP. Хотя традиционное программное обеспечение тоже может давать тихие численные ошибки или логические баги, машинное обучение добавляет тихую деградацию как доминирующий эксплуатационный режим отказа. Среда выполнения выполняет инструкции без ошибок, выделение памяти проходит успешно, серверы вывода возвращают предсказания заметно быстрее, чем предусмотрено соглашениями об уровне сервиса (SLA), однако статистическая обоснованность результата неуклонно ухудшается.
Например, в системе помощи водителю обычное управляющее программное обеспечение сообщает о неисправностях аппаратуры или связи через коды диагностических неисправностей и аппаратные сторожевые таймеры. Конвейер восприятия на основе ML вводит режим отказа, невидимый для этих таймеров. Точность обнаружения пешеходов может снизиться с 95 до 85 процентов за несколько месяцев: сезонные сдвиги приносят зимнее солнце под низким углом, сильные осадки или объемную одежду, которой в обучающем распределении было мало. Встроенный ускоритель продолжает запускать ядра компьютерного зрения с полной частотой кадров и не выдает ни одной аппаратной ошибки, однако автомобиль работает с повышенным риском для безопасности, который ускользает от стандартной телеметрии операционной системы.
Масштаб такой деградации серьезен в критичных для безопасности системах. Модель восприятия, работающая на 10 Гц, обрабатывает 36 000 кадров в час. Доля ложноотрицательных срабатываний в 0,1 процента относится только к кадрам с реальными пешеходами, а абсолютное число пропусков зависит от частоты встреч с пешеходами, временной фильтрации, эвристик слияния данных датчиков и ограничений области эксплуатационного назначения (ODD). Деградация на 10 процентных пунктов, с 95 до 85 процентов, напрямую умножает частоту попадания в опасные ситуации для последующей управляющей логики в тех граничных случаях, где обнаружение и так было ненадежным.
Этот режим отказа задействует все три оси D·A·M одновременно. По оси данных входные распределения дрейфуют, когда условия окружающей среды, поведение пользователей или калибровка физических датчиков уходят от обучающей базы (Gama et al., 2014; Quiñonero-Candela et al., 2009). По оси алгоритма модель применяет фиксированные веса параметров к входам, которые нарушают исходные предположения о распределении, порождая искаженные вероятности без численных исключений вроде NaN или бесконечностей. По оси машины ускорители запускают ядра и с максимальной пропускной способностью передают тензоры через иерархии памяти, растиражируя искаженные выходы на миллионы выводов без единого аппаратного прерывания.
Поскольку этот режим отказа не порождает исключений операционной системы и аппаратных сбоев, его обнаружение требует количественных сигналов, которые измеряют расхождение распределений. Как время выполнения аппаратуры раскладывается на физические компоненты задержки, так и деградацию модели можно приблизить как функцию сдвига распределения. Пусть обозначает базовую точность при развертывании, — статистическую дивергенцию между текущим производственным распределением и обучающим распределением , а — локально подобранную чувствительность к этой мере сдвига. Эта зависимость, формализованная в «уравнении деградации» и показанная на рисунке ниже, и есть уравнение деградации:
Точность может незаметно снижаться по мере дрейфа распределений.
Эта линеаризация первого порядка отражает локальные тенденции, когда размеченная истина подтверждает эмпирическую зависимость. Дрейф данных возникает, когда отличается от , и качество вывода падает, хотя бинарные файлы модели и среда выполнения остаются байт в байт одинаковыми. Приближение перестает работать при сильном коллапсе распределения, а метрика дивергенции намеренно остается общей — обычно ее вычисляют через дивергенцию Кульбака — Лейблера (KL), расстояние полной вариации или расстояние Вассерштейна. Поскольку одна лишь статистическая дивергенция не определяет ни знак, ни тяжесть падения точности без обратной связи по меткам, диагностическая рамка выделяет три конкретных инженерных рычага:
- Повысить исходную точность . Больший объем обучающих данных, уточненные целевые функции и архитектуры большей емкости поднимают базовую производительность, сдвигая пересечение вверх, не меняя чувствительность к дрейфу.
- Снизить чувствительность к распределению . Аугментация данных, адаптация к домену и регуляризованные представления выравнивают кривую деградации, сохраняя производительность на более широком распределении входов.
- Отслеживать дрейф и результаты (). Слежение за статистической дивергенцией в потоках входных признаков дает ранний сигнал тревоги, а отложенные размеченные метки проверяют, привел ли наблюдаемый дрейф к функциональной деградации.
На практике знать, когда пересматривать модель, так же важно, как знать, как ее обучать. Автоматизированная система обслуживания может выдавать тревогу, когда дивергенция распределения пересекает эксплуатационный порог , и запускать конвейеры переобучения, когда размеченные метки подтверждают деградацию производительности. Без автоматизированного мониторинга дрейфа система вывода слепа к меняющимся входам. Глава «MLOps» развивает инфраструктуру мониторинга и стратегии оповещения, которые реализуют этот принцип.
Тихая деградация возникает не только из внешних сдвигов среды. Часто она порождается внутренними архитектурными дефектами, известными как перекос обучения и обслуживания (training-serving skew). В производственных системах ML признаки обычно реализуются в двух разных программных стеках: офлайновом пакетном конвейере (например, на Spark или SQL), который строит обучающие наборы из исторических хранилищ данных, и онлайновом микросервисе (написанном на C++, Go или Rust), который вычисляет признаки при выводе в реальном времени с ограничениями задержки в миллисекунды. Если онлайновая логика извлечения признаков расходится с офлайновой даже незначительно — например, считает скользящие средние вместо окон с фиксированным шагом, применяет разные нормировки часовых поясов или заполняет пропуски противоречивыми значениями по умолчанию, — модель получает представления признаков, которые нарушают ее предположения обучения. Бинарный файл модели выполняется без ошибок, буферы памяти остаются корректными, задержка обслуживания остается в норме, но точность предсказаний при развертывании рушится. Перекос обучения и обслуживания по сути является дефектом синхронизации распределенной системы, который проявляется как алгоритмический сбой.
Эти режимы отказа меняют весь инженерный жизненный цикл. Традиционный мониторинг программного обеспечения отслеживает состояние хостов: загрузку CPU, занятость памяти, сетевой ввод-вывод и коды статуса HTTP. Эксплуатация машинного обучения должна отслеживать эти инфраструктурные метрики наряду с качеством данных, распределениями признаков и точностью предсказаний. Поскольку система ML может тихо отказать, когда инфраструктурные метрики выглядят нормальными, проектирование системы должно включать непрерывную оценку от приема данных до обслуживания выводов.
Тихая деградация относится к первой половине требования к системам ML: выученное поведение должно оставаться статистически надежным в нестационарном мире. Вторая половина требования относится к физическому выполнению: машина должна оценивать и обновлять это поведение в строгих бюджетах задержки, памяти, энергии и денег. Поскольку масштаб вычислений по-прежнему определяет возможности ML, системная инженерия требует количественных рассуждений о пропускной способности памяти, арифметической пропускной способности и накладных расходах на коммуникацию, которые физически управляют этим масштабом.
Железный закон систем машинного обучения
Физическая цена вычислительного масштаба становится конкретной в двух знакомых сбоях. Задание обучения простаивает, когда хранилище не может подавать данные ускорителю; путь вывода не укладывается в срок, когда состояние модели движется по памяти или сети слишком медленно. Симптомы различаются, но оба сбоя расходуют один и тот же конечный бюджет времени: на перемещение данных, вычисления и постоянные накладные расходы. Железный закон систем машинного обучения делает эту общую структуру явной, раскладывая полное время выполнения (секунды) на эти три физические стоимости («железный закон»):
Это уравнение — математический стержень всей книги. Оно раскладывает полное время, необходимое для любой задачи ML, будь то обучение модели в течение недель или вывод за миллисекунды, на три члена, которые напрямую соответствуют физическим ограничениям двойного требования, введенного в «Системах ИИ сегодня»:
- Член данных представляет физическую цену перемещения битов. — объем перемещенных данных (байты), а — пропускная способность памяти или сети (байт/с). Загружаются ли терабайты из облачного хранилища или извлекаются веса из памяти с высокой пропускной способностью, производительность часто ограничивает физика ввода-вывода. Часть I развивает эту основу.
- Член вычислений представляет цену арифметики. — число операций с плавающей запятой (FLOP), — теоретическая пиковая пропускная способность аппаратуры (FLOP/s), а — безразмерная реализованная загрузка аппаратуры . Части II и III развивают этот член.
- Член задержки представляет неустранимую «пошлину» на оркестрацию системы, сетевое взаимодействие и сериализацию (секунды). Эта фиксированная задержка доминирует при развертывании в реальном времени. Часть IV развивает этот член.
Аналогия с железным законом
Название «железный закон» следует за железным законом производительности процессора Паттерсона и Хеннесси (Hennessy and Patterson, 2017). Закон P&H — это мультипликативная декомпозиция (тождество, раскладывающее время CPU на множители), тогда как это уравнение — аддитивная модель первого порядка, которая приближает производительность при упрощающих допущениях.
Аддитивная форма предполагает последовательное выполнение. Когда перемещение и вычисления перекрываются, сумму заменяет нижняя граница по критическому пути из «конвейерного варианта»:
Эта формулировка через максимум — системный аналог перекрытия асинхронных передач данных прямым доступом к памяти (DMA) с работой арифметико-логического устройства (ALU): время более медленной стадии конвейера скрывает задержку более быстрой. Равенство требует идеального перекрытия и предполагает, что остается вне перекрывающихся фаз.
Даже в аддитивной форме железный закон полезен: как и закон Амдала (Amdahl, 1967), его ценность в том, чтобы определить, какое физическое ограничение доминирует, прежде чем начинать оптимизацию. Уточненное рассмотрение, включая конвейеризацию и методы перекрытия, которые превращают аддитивную модель в формулировку через максимум, используемую на практике, приведено в приложении о таксономии D·A·M.
Раскладка времени выполнения имеет смысл, только если инженер может определить, какой член доминирует на критическом пути. Модель Roofline отвечает на вопрос о границе «перемещение против вычислений» с помощью точки перегиба: ниже перегиба доминирует перемещение данных, выше — пропускная способность арифметики (формальный вывод приведен в приложении о машинных основах, в разделе о модели Roofline). Каждый метод оптимизации, разобранный в этой книге, воздействует на одну из этих переменных: перемещает меньше данных (), выполняет меньше операций (), эффективнее использует аппаратуру () или скрывает задержку оркестрации (). Оценка обучения уровня GPT-3 делает это воздействие конкретным: показывает, как изменение эффективности распространяется через железный закон.
Обучение GPT-3
Задача: сколько времени займет обучение модели уровня GPT-3 на эталонном кластере из 1024 ускорителей?
Дано:
- Операции :
- Пиковая производительность : 312 TFLOP/s
- Эффективность : ≈ 45 процентов (типично для крупномасштабного распределенного обучения)
- Масштаб : 1024 ускорителя
Расчет:
Поскольку предобучение крупных языковых моделей имеет высокую арифметическую интенсивность и асинхронно конвейеризует загрузку данных за матричным умножением, член вычислений доминирует на критическом пути. Выделив этот член для параллельных ускорителей, получаем:
Результат: 25 дней.
Системный вывод: если повысить загрузку аппаратуры с 45 процентов до 60 процентов за счет лучшего планирования и более эффективного исполнения, время обучения сократится до 19 дней, сэкономив 6 дней дорогостоящего вычислительного времени.
Уравнение согласовано по размерностям, потому что каждый член сводится к секундам. Складывать FLOP с байтами так же нельзя, как метры с килограммами: железный закон складывает время с временем и временем. Формальный разбор в приложении о машинных основах (анализ размерностей) проверяет эту согласованность и показывает, как учет единиц измерения предотвращает типичные ошибки моделирования.
Железный закон описывает время выполнения, но время — не единственное физическое ограничение. Для устройств с батарейным питанием на периферии и для кластеров ускорителей масштаба склада одинаково верно, что рассеивание энергии и тепловые пределы часто связывают систему раньше, чем достигаются пределы пропускной способности. Перемещение битов по иерархии памяти взимает энергетическую пошлину, которая по своей логике параллельна задержке члена данных.
Перемещение байта обходится примерно в 145 раз дороже, чем операция FP16: это и есть энергетическая пошлина на перемещение данных.
Пусть — полный объем перемещенных данных (байты), — энергия на перемещение байта, — полное число операций, а — энергия на операцию. «Энергетическая стоимость» формализует эту связь, следуя наблюдению Горовица о том, что перемещение данных может доминировать в энергии арифметики (Horowitz, 2014):
Для одного обращения перемещение данных может стоить гораздо дороже арифметики, поэтому . При энергетических константах, принятых в этом тексте, перемещение одного байта из внешней динамической памяти с произвольным доступом (DRAM) требует примерно в 145,5 раза больше энергии, чем умножение FP16, и в 800 раз больше, чем умножение INT8 (8-битное целое) (Horowitz, 2014). Доминирует ли перемещение во всей нагрузке, зависит также от числа и ширины передач относительно числа операций. Физическая причина разрыва на одно обращение в том, что перемещение данных требует заряжать и разряжать провода на больших расстояниях, тогда как арифметика выполняется локально в схемах вычислительного блока. Поэтому сокращение лишнего перемещения данных может улучшать и скорость, и энергоэффективность.
Железный закон
Железный закон — аналитический стержень этой книги. Прежде чем двигаться дальше, проверьте, что вы умеете оперировать его членами:
- Член данных : назовите физический ресурс, ограничивающий этот член, и укажите один режим нагрузки, в котором он доминирует.
- Член вычислений : назовите величину аппаратуры и коэффициент загрузки, ограничивающие этот член.
- Член задержки : назовите, какие издержки остаются, когда перемещение данных и арифметика уже оптимизированы.
- Пиковая пропускная способность: если вы удвоите , какой член улучшится и почему остальные члены не изменятся?
Те же физические члены, которые определяют время и энергию, определяют и стоимость: каждый перемещенный байт, каждая выполненная операция и каждая миллисекунда задержки расходуют бюджет инфраструктуры. Следующая проверка поэтому экономическая: оправдывает ли дополнительное вычисление достаточное улучшение модели, чтобы окупить расходы.
Отдача от вычислений (RoC) как экономическая линза
Следуя количественной традиции Хеннесси и Паттерсона, отдача от вычислений (RoC) измеряет прирост точности на каждый дополнительный доллар инвестиций в инфраструктуру. При измерении точности по фиксированной шкале RoC имеет единицы «пункты точности на доллар».
Это отношение показывает экономическую границу. Прирост точности на 1 процентный пункт может не пройти проверку RoC, если для него требуется в 10 раз больше (полного числа операций). Каждая оптимизация в следующих главах нацелена либо на числитель (извлечь больше сигнала из тех же данных), либо на знаменатель (снизить стоимость выполнения вычислений). Если RoC отрицателен или ничтожен, система переусложнена, независимо от ее технической изощренности. Эта экономическая линза превращает «точность» из исследовательской цели в инженерный бюджет.
Пока вычислительный масштаб расширяет возможности модели, он одновременно умножает расходы на оборудование. Горький урок учит, что масштаб работает, а железный закон определяет, как за него платить. Это напряжение между масштабированием и физическими пределами формирует инженерные принципы, которые следуют дальше.
Маячные модели: железный закон на практике
Железный закон организует базовые инженерные императивы этого курса. Член данных требует надежных конвейеров приема, проверки и признаков (глава «Инженерия данных»). Член вычислений требует максимизировать арифметическую интенсивность и загрузку аппаратуры в специализированных архитектурах ускорителей (часть III). Член задержки требует жесткого контроля задержки сериализации, накладных расходов на коммуникацию и джиттера обслуживания (главы «Обслуживание моделей» и «MLOps»). Вместе эти члены превращают абстрактные системные требования в практические физические ограничения.
Абстрактные уравнения становятся осязаемыми на конкретных нагрузках. Пять повторяющихся маячных моделей служат диагностическими зондами для железного закона на протяжении всей книги. Эти канонические нагрузки повторяются в главах, проверяя, как физические ограничения действуют на разные архитектурные паттерны.
Каждая маячная модель выделяет отдельный случай нагрузки для железного закона. ResNet-50 проверяет пропускную способность вычислений, когда алгоритм многократно переиспользует выученные параметры, а GPT-2/Llama — пределы пропускной способности памяти при авторегрессивной генерации. Для языковых моделей авторегрессивное декодирование генерирует по одному токену за раз; KV-кеш (Key-Value) хранит состояние внимания от предыдущих токенов (механизм внимания подробно вводится в главе «Архитектуры нейронных сетей»), а предзаполнение — это первый проход, который обрабатывает запрос до начала генерации. Режим работы определяет доминирующее узкое место: декодирование с малым батчем передает веса и состояние KV-кеша достаточно быстро, чтобы обнажить пропускную способность памяти, тогда как предзаполнение и обслуживание с большим батчем смещают узкое место к пропускной способности арифметики или коммуникации.
Железный закон делает эти различия математически точными. ResNet-50 применяет одни и те же весовые фильтры во многих пространственных позициях и, при батчинге, ко многим входным примерам; это переиспользование арифметики делает доминирующим членом, поскольку процессор должен поддерживать высокую арифметическую пропускную способность, а объем данных остается компактным в кеше. GPT-2, напротив, загружает миллиарды уникальных весовых параметров для каждого сгенерированного токена, используя каждый вес только один раз, прежде чем загрузить следующий; его член доминирует, потому что ограничением становится пропускная способность памяти, а не арифметика. Применение одного и того же уравнения к двум нагрузкам дает противоположные стратегии оптимизации: удвоение ускоряет батчевый ResNet-50, как только переиспользование увеличивает число операций на перемещенный байт, но почти не меняет декодирование GPT-2; удвоение пропускной способности памяти ускоряет декодирование, ограниченное памятью, но не меняет сверточные вычисления, насыщающие арифметику. Остальные маячные модели выделяют другие физические границы железного закона: DLRM испытывает нагрузку на объем памяти, потому что таблицы эмбеддингов размером в несколько гигабайт, сопоставляющие миллионы идентификаторов пользователей и товаров, не помещаются в память одного ускорителя и требуют распределенного масштабирования; MobileNetV2 и распознавание ключевых слов проверяют уравнения задержки () и энергии на устройствах с батарейным питанием и микроконтроллерах, где вывод должен укладываться в миллисекундные сроки при милливаттном бюджете мощности. «Маячные модели как эталонные нагрузки» объясняет, почему каждая маячная модель служит диагностическим инструментом для конкретного узкого места.
| Маячная модель | Системное узкое место | Что показывает | Ключевые инженерные вопросы |
|---|---|---|---|
| ResNet-50 | Пропускная способность вычислений при переиспользовании | Загрузка GPU, батчинг | Аппаратура выполняет вычисления или ждет данные? |
| GPT-2/Llama | Пропускная способность памяти | Перемещение весов и состояния последовательности | Как быстро состояние модели может попасть к вычислениям? |
| Deep Learning Recommendation Model (DLRM) | Объем памяти | Таблицы эмбеддингов, масштабирование вширь | Как модели масштаба терабайтов помещаются в памяти? |
| MobileNetV2 | Задержка и энергия | Эффективный дизайн операторов | Может ли система уложиться в ограничения реального времени на батарее? |
| Распознавание ключевых слов | Энергетический бюджет | Крошечные бюджеты памяти и энергии | Может ли система работать постоянно при милливаттах? |
Маячные модели как эталонные нагрузки: каждая нагрузка выделяет отдельное узкое место, что позволяет систематически исследовать, как системные ограничения влияют на разные архитектурные паттерны. Количественные характеристики и детали архитектур приведены в главе «Архитектуры нейронных сетей».
Декодирование GPT-2 ограничено пропускной способностью, потому что доминирует член данных.
Отслеживая эти нагрузки от приема данных до развертывания на периферии, каждая глава показывает, как архитектурный выбор распространяет физические и экономические ограничения на всю систему. Каждая маячная модель проявляет свои ограничения по осям D·A·M, обеспечивая проверку инженерных принципов в разных режимах систем. Разделение ролей между повторяющимися примерами книги продуманно: четыре парадигмы развертывания задают оболочку, в которой должна работать система; пять маячных моделей предоставляют нагрузки, которые ее испытывают; а четыре инженерные миссии и три производственных кейса (Waymo, FarmBeats и AlphaFold в разделе «Производственные системы выявляют общие проблемы») сочетают оболочку с нагрузкой в реальных ограничениях.
Тот же диагностический взгляд применим ретроспективно к прорыву, который открыл эпоху глубокого обучения. Система AlexNet сочетала сверточную архитектуру, чьи параллельные матричные операции соответствовали возможностям GPU, с 1,3 млн размеченными изображениями из обучающей части задачи ImageNet 2012 года21 (Deng et al., 2009). Поэтому снижение ошибки отражало согласованность работы по осям D·A·M, а не одну только алгоритмическую новизну.
Совместное проектирование по осям D·A·M означает, что оптимизация одного компонента часто переносит нагрузку на другой. Успех совместного проектирования AlexNet обошелся по средствам 2012 года (два потребительских GPU на неделю), но современные фундаментальные модели требуют вычислений для обучения примерно на 7 порядков величины больше. Если железный закон определяет, насколько быстро работает система, то инженерная рамка по-прежнему нужна, чтобы рассуждать о том, насколько эффективно она использует эти ресурсы.
Три измерения эффективности ML
Вопрос об эффективности выявляет напряжение, впервые введенное горьким уроком в разделе «Горький урок». Масштаб движет прогресс ИИ, но все большие наборы данных и бюджеты вычислений сужают участие до самых ресурсно богатых организаций. Даже эти организации в конце концов упираются в физические пределы: мощность дата-центров, пропускную способность памяти и убывающую отдачу от добавления новых параметров.
Распространенные публичные оценки обучения моделей уровня GPT-4 дают бюджет вычислений около 2,5 млн GPU-дней, что означает миллионы долларов расходов на вычисления и заметное воздействие на окружающую среду. Многие исследовательские институты и компании не могут позволить себе конкурировать за счет грубого масштабирования. Эти ограничения по стоимости и доступу делают эффективное использование имеющихся вычислений дополнительным путем к прогрессу.
Эффективность — это диагностика узкого места, а не отдельный прием. Ландшафт D·A·M («Ландшафт пересечений D·A·M») теперь становится картой действий. Отбор данных улучшает то, из чего система может учиться; алгоритмическая эффективность уменьшает работу, необходимую для обучения или предсказания; вычислительная эффективность согласует эту работу с машиной. Оставшееся пересечение — как перемещается информация — проходит через все три, потому что каждое улучшение должно выдержать путь через память и коммуникацию.
Алгоритмическая эффективность — самый ранний рубеж — снижает вычислительные требования за счет лучшего проектирования моделей и процедур обучения. Ее цель — получать больше полезного поведения на операцию, так что возможности растут, не масштабируя каждый ресурс синхронно. Когда алгоритмы потребовали еще больше вычислений, второй критичной осью стала вычислительная эффективность. Она максимизирует загрузку аппаратуры, согласуя логику алгоритма с физикой машины и превращая теоретическую мощность процессора в полезную работу. Совсем недавно третьей осью стал отбор данных: он извлекает больше обучающего сигнала из ограниченного числа примеров и тем самым уменьшает общий член числа операций железного закона. Хронология в «Исторические тенденции эффективности» ставит эти три измерения рядом до того, как последовательность глав представит их в порядке построения. Вместе эти три измерения дают инженерные инструменты для преодоления стен данных, алгоритма и машины, которые одним только масштабированием не решить.
Исторические тенденции эффективности: три цветовые последовательности соотносят алгоритмическую эпоху, вычислительную эпоху и эпоху отбора данных. Даты под каждым блоком обозначают его интервал: 1980–2010, 2010–2022 и 2023 — настоящее время.
Эти три измерения развивались в разных исторических эпохах, но системная инженерия подходит к ним в обратном порядке. На практике первым идет отбор данных: отсев избыточных обучающих примеров уменьшает общее число шагов обучения еще до того, как модель обучается. Затем следует сжатие модели, которое уменьшает объем параметров и число арифметических операций. Аппаратное ускорение идет последним: оно эффективно отображает оставшиеся операции на физическую иерархию памяти и вычислительные блоки ускорителя. Оптимизация выше по конвейеру раньше оптимизации ниже по конвейеру гарантирует, что дорогостоящие аппаратные ресурсы выполняют только необходимые вычисления.
Траектория архитектур моделей во времени показывает, как развиваются эти измерения. «Траектория алгоритмической эффективности» делает видимым влияние алгоритмической эффективности модель за моделью: одинаковые целевые показатели точности требуют все меньше вычислений по мере совершенствования архитектур.
Траектория алгоритмической эффективности: коэффициент эффективности обучения относительно AlexNet (базовый уровень 2012 года) для классификации ImageNet. Большинство последующих архитектур достигают сопоставимой точности меньшими вычислительными ресурсами, хотя отдельные точки различаются. Траектория от AlexNet (1) через VGG (Visual Geometry Group), ResNet, MobileNet и ShuffleNet до EfficientNet (44) демонстрирует снижение требуемых вычислений в 44,5 раза за семь лет, независимо от улучшений аппаратуры (Hernandez and Brown, 2020). Точки начала 2020-х годов и пунктирная аппроксимация через все отмеченные точки — дополнение авторов, а не доказательство продолжения тренда Эрнандеса — Брауна.
Величину улучшений эффективности можно измерить. Между 2012 и 2019 годами вычислительные ресурсы, необходимые для обучения нейронной сети до уровня AlexNet на классификации ImageNet, снизились примерно в 44,5 раза (Hernandez and Brown, 2020). Это улучшение, которое вдвое сокращалось примерно каждые 15 месяцев, опережало прирост аппаратной эффективности, предсказанный законом Мура,22 и показывает, что алгоритмические инновации движут эффективность так же сильно, как и аппаратные достижения.
Одновременно суммарные вычисления для обучения в опубликованных передовых запусках следовали гораздо более крутому ритму, чем закон Мура: подобранное время удвоения составляет примерно 3,4 месяца (Amodei and Hernandez, 2018). Эта суммарная тенденция публикаций — не то же самое, что отношение конечных точек между двумя ключевыми моделями, но она объясняет, почему оптимизация эффективности не является необязательной. Без нее в разработке ИИ могли бы участвовать лишь самые ресурсно богатые организации.
Эти измерения опираются на эмпирическую методику, которая отслеживала вычисления для обучения сотен опубликованных моделей (см. главу «Бенчмаркинг»). Расхождение между спросом, удваивающимся каждые 3,4 месяца, и плотностью транзисторов, удваивающейся примерно каждые два года, и определяет системный разрыв. Одна лишь динамика кремния не может угнаться за этим спросом; чтобы не отставать, нужны накапливающиеся улучшения эффективности в алгоритмах, программных средах выполнения и аппаратных архитектурах (см. главу «Аппаратное ускорение»).
Выигрыши архитектура за архитектурой рассказывают лишь половину истории. Алгоритмические улучшения не могли компенсировать растущие суммарные вычисления для обучения. «Эпоха масштаба» сравнивает иллюстративные конечные точки эпохи AlexNet и уровня GPT-4, отличные от суммарного тренда с 3,4-месячным удвоением, и показывает, почему оптимизация эффективности необходима на каждом уровне стека.
Эпоха масштаба: иллюстративные оценки вычислений для обучения (FLOP) в зависимости от года в логарифмической шкале. Если раннее глубокое обучение (синий) показывало быстрый рост, то эпоха трансформеров (красный) заметно ускорила этот тренд. От AlexNet (2012) до иллюстративных опорных точек обучения уровня GPT-4 (2023) требования к вычислениям выросли примерно на 7 порядков величины (в 16,7 млн раз), что намного быстрее закона Мура. Это сравнение конечных точек отличается от исследований суммарного тренда вычислений для обучения (Amodei and Hernandez, 2018; Sevilla et al., 2022) и используется здесь, чтобы мотивировать специализированную инфраструктуру, описанную в этой книге.
Вместе эти два рисунка выявляют кажущееся противоречие, которое определяет экономику современной разработки ИИ. «Траектория алгоритмической эффективности» показывает рост эффективности в 44,5 раза, тогда как «Эпоха масштаба» показывает рост спроса на вычисления примерно на 7 порядков величины. Однако графики фиксируют разные величины. Первый спрашивает, сколько вычислений нужно, чтобы достичь примерно фиксированной цели по возможностям, тогда как второй позволяет цели расти и фиксирует получившийся бюджет обучения. Эффективность снижает стоимость данной возможности; масштаб определяет, на что тратятся вычисления, ставшие более доступными. Кажущееся противоречие поэтому — экономическая обратная связь, а не разногласие между измерениями.
Парадокс эффективности
Эта динамика — аналог в системах ML парадокса Джевонса. В экономике ресурсов рост эффективности использования ресурса часто увеличивает, а не уменьшает общее потребление. В ИИ выигрыш в эффективности финансирует более крупные модели и более широкие наборы данных, а не более скромные бюджеты вычислений. Если EfficientNet требует в 44,5 раза меньше вычислений, чем AlexNet, чтобы достичь той же точности, организации могут вложить сэкономленное в более крупные модели и более широкие данные. Именно так GPT-3 потребовал на порядки больше вычислений, чем AlexNet, несмотря на выигрыши эффективности на FLOP. Петля обратной связи, в которой эффективность позволяет масштабировать, а масштаб требует эффективности, определяет современный ландшафт инженерии ИИ.
Эта экономическая петля обратной связи показывает, почему эффективность нельзя рассматривать как набор изолированных оптимизаций. Отбор данных (глава «Отбор данных»), сжатие моделей (глава «Сжатие моделей») и аппаратное ускорение (глава «Аппаратное ускорение») должны балансироваться с конкретными ограничениями развертывания. Чтобы одновременно управлять статистической эффективностью и требованиями физического выполнения, нужна единая системная дисциплина.
Инженерия ИИ как дисциплина
Облачный сервис может оптимизировать пропускную способность, тогда как периферийное устройство должно укладываться в строгий энергетический бюджет. Поэтому одна и та же модель может быть эффективной в одних условиях и непригодной в других. Одна лишь точность модели не описывает работающую систему. Выученное поведение должно оставаться заслуживающим доверия по мере изменения данных, а машина должна обеспечивать это поведение в пределах своего эксплуатационного бюджета.
Уравнение деградации, железный закон и рамка эффективности дают количественные инструменты для этого двойного требования. Вместе они охватывают статистическое поведение, вычисления и ограничения развертывания. Их применение пересекает границы дисциплин. Информатика занимается алгоритмами, электротехника — аппаратурой, но ни одна из них в отдельности не охватывает комплексную задачу создания систем, которые остаются надежными, эффективными и масштабируемыми в эксплуатации. Эта задача и определяет инженерию ИИ.
Инженерия ИИ
Инженерия ИИ — это дисциплина проектирования, развертывания и сопровождения систем машинного обучения, которые приводят статистически оцененное поведение к детерминированным целевым показателям надежности, соблюдая эксплуатационные ограничения по всем трем осям D·A·M: качеству данных (Data), корректности алгоритма (Algorithm) и эффективности машины (Machine).
- Значение: исследования ML обычно оптимизируют только ось алгоритма ( и сходимость). Инженерия ИИ совместно оптимизирует все три оси, ограничивая требованиями управления данными, — требованиями задержки в производстве, а совокупное энергопотребление — бюджетами энергии и стоимости. Производственная система, которая в исследованиях достигает 95 процентов точности, но нарушает требование задержки 100 мс в эксплуатации, — провальная система, каким бы ни был ее результат на алгоритмической метрике.
- Отличие: в отличие от исследований машинного обучения, которые нацелены на одну цель (потерю на валидации) на статическом наборе данных, инженерия ИИ работает с многоцелевой поверхностью ограничений (задержка, пропускная способность, точность, стоимость, справедливость и устойчивость) на распределении, которое непрерывно смещается после развертывания.
- Типичная ошибка: распространено заблуждение, будто инженерия ИИ — это просто «программная инженерия для ML». Спецификация системы здесь вероятностная. Выход системы ML статистически корректен или некорректен относительно смещающегося распределения, а не верен или неверен относительно фиксированного детерминированного контракта. Поэтому непрерывный мониторинг — структурное требование, а не эксплуатационный выбор.
Формула «стохастические системы с детерминированной надежностью» связывает инженерию ИИ с более ранним дисциплинарным сближением. Вычислительная техника возникла в конце 1960-х и начале 1970-х годов23, когда вычислительные системы стали слишком сложными, чтобы электротехника или информатика решали их задачи по отдельности, и объединила обе дисциплины вокруг комплексной задачи создания надежных компьютеров из ненадежных физических компонентов. Инженерия ИИ сталкивается с такой же задачей на границе данных, алгоритмов и инфраструктуры. В этой таксономии «инженерия ИИ» обозначает более широкую интеллектуальную дисциплину, а «инженерия систем машинного обучения» — практическую работу по проектированию, развертыванию и сопровождению таких систем в производственных ограничениях.
Инженерия на протяжении жизненного цикла ML
Алгоритмический прорыв требует эффективного приема и предобработки данных, распределенных вычислений на сотнях или тысячах ускорителей, надежной инфраструктуры обслуживания для соблюдения жестких окон задержки и непрерывной телеметрии на основе реальной производительности. Эти обязательства образуют повторяющийся жизненный цикл, а не последовательность, которая заканчивается развертыванием. Объект инженерии теперь — не только код: это код, данные, поведение модели, контекст развертывания и свидетельства мониторинга, развивающиеся вместе. Обратная связь из эксплуатации может вернуть развернутую систему к сбору данных и обучению, превращая привычную линейную траекторию в цикл.
Структурное различие сначала проявляется в инструментах. Десятилетия устоявшейся практики поддерживают поведение, заданное кодом, через систему контроля версий, которая ведет точную историю, конвейеры непрерывной интеграции, автоматизирующие тестирование, и инструменты статического анализа, измеряющие качество. Поведение, выученное из данных, ускользает от этих инструментов, потому что меняющийся артефакт уже не является диффом, написанным разработчиком. Глава «Рабочий процесс машинного обучения» развивает специализированные процессы, которых требуют эти задачи.
Более глубокое различие — важность непрерывной обратной связи. Петли на «Жизненном цикле системы ML» показывают почему. Когда мониторинг фиксирует деградацию производительности, системе нужен не только патч кода. Она может вернуться через сбор данных, подготовку, обучение и оценку перед повторным развертыванием, и итерация становится частью эксплуатационной архитектуры, а не только процесса разработки.
Жизненный цикл системы ML: блок-схема из шести блоков, описывающая сбор данных, подготовку, обучение модели, оценку, развертывание и мониторинг. Две петли обратной связи отличают этот цикл от линейной разработки программ: оценка возвращается к подготовке, если результаты недостаточны, а мониторинг запускает новый сбор данных, когда производительность падает.
Поскольку модель машинного обучения формирует поведение непосредственно из обучающих данных, а не из явной исходной логики, реальные сдвиги распределений меняют результаты выполнения, не изменив ни одной строки кода. Это расхождение ломает привычные процессы разработки программ: Git и текстовый контроль версий не справляются с родословными наборов данных размером в несколько терабайт, а модульные тесты не могут подтвердить стохастические выходы при смещающихся распределениях. Решение этих эксплуатационных задач требует специализированной инфраструктуры. Глава «Инженерия данных» развивает версионирование наборов данных и отслеживание происхождения, а глава «MLOps» задает мониторинг во время выполнения для сдвига распределений. Однако требования каждого этапа жизненного цикла не одинаковы: связывающие физические ограничения зависят от эксплуатационной миссии, которой должна служить система.
От парадигм к миссиям
Верхний уровень иерархии превращает абстрактные системы в конкретные инженерные миссии. Каждая миссия наследует одну из четырех парадигм развертывания, введенных в разделе «Четырехуровневая иерархия от кремния до миссии», и сочетает ее с нагрузкой конкретного сценария. Четыре миссии из «Четырех инженерных миссий» — это сценарии применения, которые повторяются на протяжении всей книги и связанных с ней лабораторных работ. Они служат сквозными проверками инженерных решений. Двукратное увеличение пропускной способности памяти — академический результат, пока не доказано, что оно продлевает время работы от батареи умного дверного звонка или обеспечивает задержку, необходимую для критичного к безопасности автономного восприятия.
Каждая миссия непрерывно проходит этот жизненный цикл, где шаг обучения означает один прямой и обратный проход и обновление весов на микробатче данных. Качественные данные улучшают модель, модель улучшает продукт и телеметрию, которую он порождает; слабое место на любом этапе распространяется вниз по всему стеку. В «Четырех инженерных миссиях» описаны эти четыре повторяющиеся миссии и связывающее физическое ограничение, которое определяет их выполнение.
| Миссия | Парадигма развертывания | Нагрузка сценария | Критическое ограничение |
|---|---|---|---|
| Передовое обучение | Облачный кластер | GPT-4 | Цель: 500 мс/шаг |
| Автономное восприятие | Периферийная робототехника | YOLOv8-nano | SLA (соглашение об уровне обслуживания): задержка 10 мс |
| Мобильный ассистент | Смартфон | Мобильно-оптимизированная малая LLM (Large Language Model) | ОЗУ: / тепловой лимит: |
| Умный дверной звонок | TinyML (MCU [микроконтроллер]) | Wake Vision | Питание: 100 мВт |
Четыре инженерные миссии: каждой парадигме развертывания сопоставлена повторяющаяся нагрузка сценария и ее связывающее ограничение.
Контекст развертывания задает жизненный цикл
Контекст развертывания определяет, какие давления жизненного цикла доминируют. Одни и те же этапы применимы ко всем системам ML, но дата-центр мощностью в мегаватты и встроенное устройство мощностью в милливатты создают разные узкие места для сбора данных, обновления моделей, мониторинга и обслуживания.
На одном конце спектра облачные системы ML обучают большие модели и обслуживают миллионы пользователей, обменивая обильные вычислительные ресурсы на ограничения мощности, операционную сложность и высокую стоимость. Глава «Системы машинного обучения» разбирает их архитектурные паттерны, а глава «Аппаратное ускорение» развивает аппаратную основу, которая делает такой масштаб экономически оправданным.
На другом конце системы TinyML работают на микроконтроллерах24 и встроенных устройствах. Их память в килобайтах и бюджеты мощности в милливаттах делают осуществимость важнее качества модели: устройство умного дома должно распознавать команду, расходуя меньше энергии, чем светодиодная лампочка, а датчику, возможно, придется годами обнаруживать аномалии от одной батарейки. Рамка эффективности из раздела «Три измерения эффективности ML» задает управляющие принципы, а глава «Сжатие моделей» развивает методы, которые делают такое развертывание возможным.
Между этими полюсами размещение становится задачей распределения ограничений. Периферийные системы ML переносят вычисления ближе к источникам данных, чтобы снизить задержку25 и требования к полосе пропускания. Мобильные системы ML делят память, тепловой запас и батарею с каждым другим приложением, обменивая сырую скорость на локальность и приватность. Гибридные системы распределяют работу между уровнями, балансируя задержку, приватность, пропускную способность и контроль обновлений.
Каждая позиция на этом спектре развертывания создает свои узкие места, которые определяют, какие измерения эффективности важнее всего, как показано в «Приоритетах эффективности по контексту развертывания»:
| Среда | Основное ограничение | Фокус эффективности |
|---|---|---|
| Облачное обучение | Стоимость, пропускная способность | Распределенная эффективность, загрузка аппаратуры |
| Облачный вывод | Задержка, стоимость на запрос | Батчинг, оптимизация обслуживания моделей |
| Периферийные устройства | Память, мощность | Меньшие модели и меньше перемещений данных |
| Мобильные устройства | Батарея, тепловыделение | Энергоэффективный вывод |
| TinyML | Память килобайтного масштаба, мощность в милливаттах | Экстремальное сжатие, специализированные архитектуры |
Приоритеты эффективности по контексту развертывания: каждая среда развертывания создает свои узкие места и требует подобранных стратегий оптимизации. Облачные системы оптимизируют пропускную способность и стоимость; периферийные — память и энергию; системы TinyML требуют экстремальной эффективности по всем измерениям.
Спектр развертывания означает больше, чем различные аппаратные конфигурации. Каждая среда развертывания перестраивает каждый этап жизненного цикла ML, от первичного сбора данных до непрерывной работы и развития, создавая взаимодействие ограничений, с которым традиционное программное обеспечение редко сталкивается.
Посмотрим, как одно решение о развертывании каскадно проходит через всю систему. Чувствительные к задержке приложения, такие как автономные автомобили или обнаружение мошенничества в реальном времени, требуют периферийных или встроенных архитектур, несмотря на ограниченные ресурсы, тогда как большие языковые модели естественно тяготеют к централизованной облачной инфраструктуре. Однако этот первичный архитектурный выбор определяет гораздо больше, чем то, где происходят вычисления. Облачные системы должны оптимизировать стоимость в масштабе, балансируя дорогие кластеры GPU, хранилище и пропускную способность сети, а это, в свою очередь, определяет, как часто модели переобучаются, какие исторические данные сохраняются и как распределяется нагрузка вывода. Периферийные и мобильные системы сталкиваются с фиксированными лимитами ресурсов, которые ограничивают сложность модели и частоту обновлений, вынуждая к агрессивному сжатию модели26 и тщательному планированию. Самые строгие ограничения возникают во встроенных средах и средах TinyML, где важен каждый байт памяти и каждый милливатт мощности.
Операционная сложность растет по мере того, как системы становятся более распределенными. Централизованные облачные архитектуры выигрывают от зрелых инструментов развертывания и управляемых сервисов, тогда как периферийным и гибридным системам приходится координировать сбор данных с датчиков с разной связностью, отслеживать модели, развернутые на тысячах устройств, проводить поэтапные выкатки с возможностью отката и агрегировать сигналы мониторинга с географически распределенных узлов (глава «MLOps»). Соображения о данных создают конкурирующие давления. Требования к приватности или регуляторы суверенитета данных могут толкать вычисления к периферии, тогда как потребность в больших обучающих данных тянет к централизованной облачной агрегации. Обновления моделей также ведут себя по-разному на всем спектре. Облачные архитектуры позволяют быстро итерировать благодаря централизованному управлению трафиком, тогда как периферийные развертывания требуют удаленных обновлений с аккуратным управлением пропускной способностью и возможностью отката.
На практике выбор развертывания редко бывает простой альтернативой «или — или». Производственные архитектуры ML часто охватывают несколько уровней, чтобы согласовать конфликтующие физические и статистические требования. Система может разделить вычисления между периферийными устройствами, чтобы уложиться в окна ответа менее миллисекунды и требования к приватности данных, а выборочную телеметрию направлять в централизованные облачные кластеры для непрерывного обучения и переоценки моделей. Выбор встроенной или периферийной цели ограничивает гораздо больше, чем объем параметров. Он определяет сбор данных на входе, обучение с учетом квантования, оценку с аппаратурой в контуре, протоколы развертывания по воздуху (OTA) и агрегацию удаленной телеметрии. Физические пределы выполнения на одном уровне неизбежно перестраивают каждую фазу инженерного жизненного цикла.
Производственные системы выявляют общие проблемы
Пример развертывания становится инженерным инструментом, когда раскрывает связывающее ограничение, стоящее за проектом. Три производственные системы — Waymo, FarmBeats и AlphaFold — охватывают крайние точки спектра развертывания и показывают, как одинаковые компромиссы по осям D·A·M заставляют прибегать к совершенно разным инженерным решениям:
- Автономное вождение27 упирается в критичную для безопасности задержку и актуальность данных. Открытый набор данных Waymo содержит данные камер и LiDAR, собранные в разных условиях вождения (Sun et al., 2020), и иллюстрирует мультимодальные входы и географическое покрытие, которые должен обрабатывать стек восприятия. В более широком случае используется типичный высокоответственный гибридный паттерн: вывод на борту автомобиля для низкой задержки и облачная инфраструктура для обучения и оценки.
- FarmBeats28 (Vasisht et al., 2017) упирается в связность и актуальность данных. Платформа точного земледелия Microsoft подключает полевые датчики к локальному шлюзовому ПК для обработки на периферии. Сеть в свободных телевизионных диапазонах (TV white space) переносит данные по всей ферме, тогда как более слабое интернет-соединение «ферма — облако» ограничивает синхронизацию.
- AlphaFold (Jumper et al., 2021) упирается в вычислительно емкое обучение и курированные научные данные. Система предсказания структуры белков от DeepMind решила полувековую задачу вычислительного предсказания структуры белков с точностью, близкой к экспериментальной. AlphaFold представляет вычислительно емкий облачный паттерн развертывания. Первичное обучение использовало 128 ядер TPUv3 примерно в течение недели, затем около четырех дней дообучения; в основе лежали экспериментально определенные структуры из Protein Data Bank.
Эти системы дополняют маячные модели, показывая, как одни и те же базовые проблемы (качество данных, сложность модели и масштаб инфраструктуры) проявляются при совершенно разных ограничениях. Вместо того чтобы изучать каждую систему изолированно, их разбирают через призму таксономии D·A·M. Тот же феномен дрейфа данных, который затрагивает модели восприятия Waymo при меняющейся погоде, влияет и на обнаружение болезней культур FarmBeats в течение сезонов роста, хотя инженерные решения различаются в зависимости от ограничений машины.
Взаимозависимости по осям D·A·M создают конкретные инженерные узкие места в данных, алгоритмах и инфраструктуре. Изучение крайних случаев развертывания показывает эти ограничения в самых жестких формах.
Данные реального мира по природе зашумлены и асинхронны. Автономные автомобили обрабатывают большие мультимодальные потоки датчиков LiDAR29 и камер (Sun et al., 2020), что требует аппаратно синхронизированного захвата и фильтрации от деградации датчиков из-за дождя, тумана или бликов на объективе. Масштаб усугубляет эти проблемы качества на каналах с ограниченной пропускной способностью: FarmBeats должна фильтровать и агрегировать телеметрию агродатчиков на локальном периферийном шлюзе, прежде чем синхронизировать данные через прерывистое соединение «ферма — облако», тогда как AlphaFold во время обучения требует высокопроизводительного доступа к курированным экспериментально определенным структурам из Protein Data Bank.
Дрейф данных создает постоянное эксплуатационное бремя поверх проблем качества и масштаба. Статистические свойства входных данных меняются со временем, и модели настолько надежны, насколько их выравнивание с текущим распределением (Gama et al., 2014; Quiñonero-Candela et al., 2009; Koh et al., 2021). Открытый набор данных Waymo сообщает о заметных разрывах между доменами в Сан-Франциско, Финиксе и Маунтин-Вью (Sun et al., 2020)30; обнаружение таких региональных сдвигов требует непрерывного мониторинга статистики входов до того, как они превратятся в сбои системы.
На границе алгоритма и инфраструктуры вычислительная интенсивность задает верхнюю границу возможностей. Фундаментальные модели масштаба GPT-3 («Эпоха глубокого обучения и узкое место инфраструктуры») требуют зетта-FLOP вычислений, а даже меньшие научные модели, такие как AlphaFold, требовали недель специализированного обучения на ускорителях. Системные инженеры должны оптимизировать «FLOP/s на ватт», чтобы сделать такие модели экономически и экологически жизнеспособными. Однако одного сырого масштаба недостаточно. Разрыв обобщения остается центральным алгоритмическим риском: модель может показывать 99 процентов точности на бенчмарках, но лишь 75 процентов в реальном мире. Для критичных к безопасности систем автономного вождения Waymo сокращение этого разрыва — требование, от которого зависят жизни, и оно требует методов устойчивости, которые охватывают длинный хвост граничных случаев.
В производственном развертывании разрыв между обучением и обслуживанием описывает различие между гибкой средой, где рождаются модели, и жесткой средой, в которой они работают. Компромиссы между задержкой и пропускной способностью задают архитектуру. Системы восприятия в духе Waymo требуют решений с низкой задержкой по безопасности на периферии, тогда как AlphaFold работает в облаке, а время его вывода зависит от длины белка и конфигурации. Многоуровневая координация добавляет сложности: голосовые ассистенты выполняют легкое распознавание ключевых слов на микроконтроллерах (TinyML), чтобы гарантировать мгновенное пробуждение в жестких бюджетах милливатт, но передают сложные запросы на естественном языке облачным кластерам GPU.
Наконец, по мере масштабирования систем их влияние на общество становится инженерной задачей первого класса, которая пересекает все три оси D·A·M. Справедливость и смещения нужно контролировать заранее, поскольку модели могут непреднамеренно усваивать общественные предубеждения, присутствующие в обучающих данных. Ответственная инженерия требует систематического аудита качества по демографическим подгруппам, чтобы обеспечить равные результаты. Требования к прозрачности и приватности дополнительно ограничивают проект. Многие глубокие сети работают как «черные ящики», однако в таких областях, как здравоохранение или финансы, заинтересованным сторонам нужна интерпретируемость. Системы также должны быть устойчивы к атакам вывода31, которые пытаются извлечь чувствительные обучающие данные из предсказаний модели.
Поскольку сбой в производстве каскадно проходит через данные, алгоритмы и физические машины, ни одна отдельная специальность не может в одиночку локализовать или устранить эти узкие места. Управление этими взаимозависимостями требует явной эксплуатационной рамки.
Рамка пяти опор
Производственным системам ML нужна эксплуатационная рамка, которая распределяет ответственность между конвейерами данных, математическими формулировками, аппаратным выполнением и управлением, не разрывая их физических связей (Paleyes et al., 2022). Традиционная инженерия программ изолирует компоненты за модульными интерфейсами; в системах машинного обучения абстракции протекают, потому что ошибки распространяются через статистические распределения и физические состояния аппаратуры. Система может выйти из строя не только из-за программных дефектов, но и из-за незаметного дрейфа распределений, исчерпания пропускной способности памяти или теплового ограничения частоты (thermal throttling).
Как показано на «Рамке пяти опор», эти обязанности организованы в пять взаимосвязанных дисциплин, опирающихся на общий технический фундамент. Каждая опора очерчивает эксплуатационную границу, а фундамент под ними обеспечивает физические и экономические пределы — пропускную способность вычислений, объем памяти, пропускную способность межсоединений и бюджеты мощности, — которые управляют выполнением.
Рамка пяти опор: архитектурный фундамент инженерии систем ML, организованный в пять основных дисциплин: инженерия данных, системы обучения (обучение моделей), инфраструктура развертывания (развертывание моделей), эксплуатация и мониторинг (эксплуатация и сопровождение), а также этика и управление. Опоры поддерживаются базовыми практиками эффективности, оценки и надежности.
Разбор конкретного сбоя показывает, как эти границы распределяют эксплуатационную ответственность. Предположим, что детектор слова пробуждения на устройстве после обновления модели перестал срабатывать для пользователей в комнатах с сильной реверберацией. Диагностика начинается с конвейера входных данных: отфильтровал ли прием реверберационные акустические профили, были ли метки повреждены при предобработке и может ли родословная конвейера проследить точные обучающие разбиения, использованные для обновления? Опора инженерии данных (глава «Инженерия данных») управляет системами приема, проверки, версионирования и родословной, которые определяют, что алгоритм может математически извлечь.
Если набор данных содержит репрезентативные акустические образцы, сбой может проистекать из дефектов сходимости или масштабирования выполнения. Опора систем обучения (глава «Обучение моделей») управляет границей между проектированием алгоритма и физическими вычислениями: координирует распределенные кластеры ускорителей, оптимизирует коммуникацию по топологиям межсоединений, организует восстановление из контрольных точек при аппаратных сбоях и балансирует численную точность и стоимость вычислений.
Сошедшаяся контрольная точка — это математический артефакт, а не эксплуатационная система. Опора инфраструктуры развертывания перекидывает мост через разрыв между обучением и обслуживанием. Пока обучение оптимизирует суммарную пропускную способность по батчевым блокам матричного умножения, вывод ограничен жесткими целями уровня обслуживания по хвостовой задержке (SLO), объемом памяти на кристалле и фиксированными тепловыми рамками. Эта дисциплина отвечает за квантование во время выполнения, слияние ядер, выполнение, ограниченное пропускной способностью памяти, и кроссплатформенную компиляцию для целевых устройств — от периферийных микроконтроллеров до ускорителей вывода в дата-центрах.
После развертывания основной режим отказа становится временным. Опора эксплуатации и мониторинга отвечает за состояние системы после запуска, когда производственные распределения данных дрейфуют, акустическая среда меняется, а точность вывода незаметно падает, тогда как стандартные инфраструктурные метрики — загрузка CPU, запас памяти и пропускная способность сети — остаются в норме. Эта дисциплина объединяет телеметрию, канареечные выкатки, автоматические механизмы отката и конвейеры непрерывной оценки, чтобы обнаружить незаметную деградацию модели до того, как она повлияет на пользователей.
Наконец, профиль сбоев может показывать систематическое смещение по демографическим группам, например повышенные ошибки для определенных акцентов или диапазонов высоты голоса, а непрерывная запись звука создает строгие обязательства по приватности и регулированию. Опора этики и управления (глава «Ответственная инженерия») переводит нормативные требования в проверяемые инженерные ограничители: она устанавливает происхождение данных, агрегацию с сохранением приватности, аудит справедливости, пределы безопасности и регуляторную подотчетность на протяжении всего жизненного цикла системы.
Альтернативные таксономии часто строго организуют эти задачи по программному компоненту или линейной фазе жизненного цикла. Структура из пяти опор вместо этого отражает эксплуатационные границы производственных инженерных команд и сохраняет их физические связи. Конвейеры данных на входе задают пределы сходимости; выбор распределенного обучения определяет объем памяти и задержку на этапе обслуживания; среды выполнения развертывания определяют, какие операции телеметрии возможны; а политики управления накладывают необсуждаемые ограничения на все четыре опоры. Выделение этики и управления в самостоятельную инженерную опору не дает безопасности, приватности и справедливости превратиться в необязательные проверки «постфактум» под давлением сроков.
Вместе опоры переводят концептуальные оси таксономии D·A·M («Четырехуровневая иерархия от кремния до миссии») и хронологические этапы жизненного цикла («Инженерия на протяжении жизненного цикла ML») в эксплуатационную ответственность инженеров. Инженерия данных опирается на ось Data; системы обучения и инфраструктура развертывания ведут компромиссы между сложностью алгоритма (Algorithm) и аппаратными ограничениями машины (Machine); эксплуатация и мониторинг отслеживают временную стабильность всех трех осей; а этика и управление задают эксплуатационные границы, в которых должна работать система. Эта таксономия отражает фундаментальный переход машинного обучения от изолированных алгоритмических экспериментов к дисциплинированной системной инженерии, где главная цель — поддерживать предсказуемое, эффективное и надежное выполнение на физической аппаратуре.
Эта последовательность определяет архитектуру книги. Понимание систем ML требует сначала анализа физических инвариантов аппаратуры и конвейеров данных, затем — масштабирования распределенных алгоритмов обучения на кластерах ускорителей и, наконец, оптимизации компиляции и обслуживания во время выполнения при жестких рамках задержки и энергии.
Организация книги
Пять опор определяют, что координируют инженеры систем ML; четыре части этой книги задают педагогическую последовательность, по которой ими овладевают. Организующий принцип — контекст прежде теории: физические пределы аппаратуры и узкие места приема данных определяют выбор алгоритмов, а не наоборот. Читатель сначала усваивает эксплуатационные границы и словарь (часть I), затем строит модели (часть II), оптимизирует вычислительную эффективность (часть III) и развертывает системы в соответствии с производственными соглашениями об уровне обслуживания (часть IV). В «Организации книги» эта четырехчастная последовательность описана подробнее.
| Часть | Тема | Ключевые главы |
|---|---|---|
| I: Основы | Контекст: ландшафт систем ML | Эта глава, «Системы машинного обучения», «Рабочий процесс машинного обучения», «Инженерия данных» |
| II: Построение | Теория: основы моделей | «Вычисления в нейронных сетях», «Архитектуры нейронных сетей», «Фреймворки машинного обучения», «Обучение моделей» |
| III: Оптимизация | Эффективность: настройка производительности | «Отбор данных», «Сжатие моделей», «Аппаратное ускорение», «Бенчмаркинг» |
| IV: Развертывание | Производство: реальные системы | «Обслуживание моделей», «MLOps», «Ответственная инженерия», «Заключение» |
Организация книги: четыре части следуют педагогической последовательности от контекста (Основы) через теорию (Построение) к практике (Оптимизация, Развертывание). Каждая часть опирается на словарь и рамки предыдущих, поэтому методы оптимизации части III предполагают знакомство с архитектурами моделей части II, а практики развертывания части IV — владение частями II и III.
Часть I закладывает физический и архитектурный словарь раньше, чем появляется аппарат моделей. Эта вступительная глава рассматривает инженерию систем ИИ как дисциплину, управляемую физическими ограничениями, и вводит таксономию D·A·M, измерения эффективности и модель пяти опор. Глава «Системы машинного обучения» описывает спектр развертывания от облачных дата-центров до микроконтроллеров TinyML мощностью в милливатты и показывает, как тепловой расчетный предел, глубина иерархии памяти и бюджеты задержки определяют каждый уровень. Глава «Рабочий процесс машинного обучения» прослеживает сквозной жизненный цикл от постановки задачи до производственного обслуживания и указывает, где накапливаются петли обратной связи и технический долг. Глава «Инженерия данных» анализирует узкие места ввода-вывода хранилищ, конвейеры извлечения, преобразования и загрузки (ETL) и хранилища признаков, показывая, что пропускная способность приема данных задает эксплуатационный потолок для выполнения моделей дальше по конвейеру.
Часть II переводит эти ограничения среды в навыки построения моделей. Глава «Вычисления в нейронных сетях» выводит базовые вычислительные ядра — матричные умножения, свертки и механизмы внимания — и анализирует их вычислительные графы. Глава «Архитектуры нейронных сетей» объединяет эти примитивы в полные топологии сетей. Обе главы опираются на пять маячных моделей из раздела «Маячные модели: железный закон на практике» (ResNet-50, GPT-2/Llama, MobileNetV2, DLRM и распознавание ключевых слов), чтобы привязать вычислительные требования к стандартизированным нагрузкам. Глава «Фреймворки машинного обучения» разбирает вычислительные графы, автоматическое дифференцирование и среды выполнения в PyTorch и TensorFlow. Глава «Обучение моделей» описывает распределенное выполнение, синхронизацию градиентов, управление памятью оптимизатора и сохранение контрольных точек при ограничениях памяти ускорителя.
Часть III меняет условия железного закона, чтобы максимизировать эффективность без потери точности. Глава «Отбор данных» снижает число FLOP при обучении, отфильтровывая избыточные примеры, отбирая подмножества с высокой информативностью и ускоряя достижение сходимости. Глава «Сжатие моделей» снимает нагрузку на пропускную способность памяти и уменьшает объем параметров с помощью квантования после обучения, прореживания весов и дистилляции знаний, так что модели помещаются в жесткие бюджеты SRAM и HBM ускорителя. Глава «Аппаратное ускорение» разбирает микроархитектурные механизмы GPU и специализированных интегральных схем (ASIC) и показывает, как систолические массивы, тензорные ядра и иерархии памяти с высокой пропускной способностью обеспечивают высокую арифметическую интенсивность. Глава «Бенчмаркинг» задает строгие протоколы для измерения устойчивой пропускной способности вычислений, хвостовой задержки и энергоэффективности, отделяя настоящие аппаратные узкие места от артефактов измерений.
Часть IV развертывает эти оптимизированные артефакты в производственных средах, где доминируют динамика выполнения, незаметный дрейф данных и эксплуатационные ограничения. Глава «Обслуживание моделей» проектирует движки вывода, которые управляют динамическим батчингом запросов, выделением памяти KV-кеша и планированием ядер в строгих соглашениях об уровне обслуживания по задержке. Глава «MLOps» строит непрерывные конвейеры телеметрии, чтобы следить за состоянием предсказаний, обнаруживать дрейф распределений и проводить канареечные выкатки до того, как незаметная деградация модели повлияет на пользователей. Глава «Ответственная инженерия» встраивает проверку безопасности, аудит смещений и ограничения дифференциальной приватности прямо в жизненный цикл системы. Глава «Заключение» подводит итог полной методологии и готовит читателя к переходу от мастерства на одном узле к оркестрации распределенного парка машин.
Эта книга охватывает режим одного узла: один хост с одним-восемью ускорителями, каждый из которых обычно использует локальную память устройства и обменивается данными по межсоединению внутри узла, такому как PCIe или NVLink. Связывающее ограничение зависит от нагрузки и может быть объемом памяти устройства, пропускной способностью памяти, пропускной способностью вычислений или коммуникацией по межсоединению. В масштабе парка, где тысячи узлов координируются через сетевые структуры, узкое место смещается к бисекционной пропускной способности — совокупной емкости по разрезу сетевого кластера. Указания о путях чтения, учебных результатах, предварительных требованиях и о том, как извлечь максимум из учебника, содержатся в предисловии.
Аналитические рамки из разделов «Три измерения эффективности ML» и «Рамка пяти опор» работают, только если инженеры также отказываются от допущений, перенесенных из соседних областей. Каждая зрелая дисциплина накапливает интуицию, которая работает в ее границах, но подводит за их пределами. Инженерия систем машинного обучения особенно уязвима к таким заимствованным допущениям, потому что стоит на стыке программной инженерии, статистики и проектирования аппаратуры. Традиционное программное обеспечение предполагает детерминированное выполнение; классическая статистика предполагает стационарные распределения данных при нулевой стоимости вычислений; проектирование аппаратуры предполагает фиксированные потоки инструкций. Смешение этих взглядов без столкновения с их противоречиями прямо ведет к хрупким системам и напрасным вычислениям.
Заблуждения и ловушки
Допущения, верные для традиционного программного обеспечения, академических исследований или чистой математики, перестают работать, когда их применяют к системам, поведение которых возникает из данных. Эти заблуждения и ловушки описывают ошибки, которые тратят инженерные усилия, задерживают развертывание и приводят к незаметным сбоям в эксплуатации.
Заблуждение и ловушка
Заблуждение: лучшие алгоритмы автоматически дают лучшие системы.
Инженеры часто полагают, что алгоритмическая изощренность определяет производительность системы, но это игнорирует железный закон («Железный закон систем машинного обучения»). Vision Transformers показывают, что архитектура и масштабное предобучение дают сильные результаты распознавания изображений (Dosovitskiy et al., 2021), но полезность в производстве по-прежнему зависит от бюджетов вычислений, перемещения памяти и задержки. В производстве модель, которая на 1 процент точнее, но нарушает требования задержки, фактически бесполезна. Поэтому выбор производственной модели — это задача условной оптимизации: максимизировать качество решения при ограничениях на задержку, память, энергию, стоимость и надежность. Скрытый технический долг, окружающий производственные модели, показывает, что код модели — лишь видимый центр гораздо большей системы. Хорошо спроектированная система с более простой моделью может превзойти более изощренную архитектуру без надежной инфраструктуры.
Заблуждение и ловушка
Ловушка: рассматривать системы ML как традиционное программное обеспечение, которое случайно включает модель.
Инженеры применяют к системам ML традиционные практики тестирования и развертывания, но эти системы отказывают качественно иначе («ML по сравнению с традиционным программным обеспечением»). Традиционные ошибки часто дают немедленные исключения или сбои; системы ML могут незаметно деградировать неделями или месяцами, прежде чем это заметит кто-то. A/B-тесты в обычном программном обеспечении могут быстро показать ясный сигнал, тогда как сравнение моделей ML может потребовать более длительных окон наблюдения, чтобы обнаружить небольшие различия точности в подгруппах. Модульные тесты проверяют детерминированные пути выполнения; системам ML нужна инфраструктура мониторинга, чтобы ловить ненадежные предсказания, дрейф данных и сбои калибровки. Команды, которые развертывают ML только с конвейерами непрерывной интеграции и непрерывной доставки (CI/CD), рискуют получить незаметные сбои: наборы тестов и проверки состояния показывают «все в порядке», пока качество предсказаний для пользователей падает.
Заблуждение и ловушка
Заблуждение: высокая точность на эталонных наборах данных говорит о готовности к производству.
Точность на бенчмарке отражает статичные, курированные тестовые распределения, а не эксплуатационную реальность («Контекст развертывания задает жизненный цикл»). Модель анализа тональности, которая хорошо работает на курированных тестовых данных, может резко ухудшиться в производстве, когда пользователи используют сленг, эмодзи и контекст, которых нет в бенчмарках. Кроме того, физические условия развертывания создают жесткие компромиссы, которых нет в таблицах лидеров бенчмарков. Мобильные ускорители ограничивают численную точность и объем памяти, исключая многомодельные стратегии, которые поднимали результаты на бенчмарках, а сетевые обращения туда и обратно добавляют заметную задержку. Производственным системам нужен анализ режимов отказа по демографическим подгруппам, непрерывный мониторинг для обнаружения дрейфа и протоколы валидации, которые соответствуют реальным условиям эксплуатации, а не идеализированным тестовым наборам.
Заблуждение и ловушка
Ловушка: оптимизация отдельных компонентов без учета взаимодействий в системе.
Инженеры оптимизируют задержку вывода изолированно, но закон Амдала определяет сквозную производительность. Команда сокращает вывод модели с 45 мс до 15 мс и ожидает пропорционального улучшения. Однако предобработка занимает 60 мс, а постобработка добавляет 25 мс, поэтому общая задержка снижается лишь с 130 мс до 100 мс. Это улучшение на 23 процента, а не ожидаемые 67 процентов. Ландшафт D·A·M («Ландшафт пересечений D·A·M») показывает, что оси Data, Algorithm и Machine образуют взаимозависимую систему, где оптимизация одного компонента переносит узкие места, а не устраняет их. Выигрыш на уровне компонента не определяет сквозного улучшения: результат зависит от того, какую долю всего пути занимает оптимизируемый компонент.
Оптимизация только вывода почти не меняет сквозную задержку.
Заблуждение и ловушка
Заблуждение: системы ML можно развернуть один раз и оставить работать бесконечно.
Развернутые системы ML не сохраняют статичную производительность во времени: сдвиги распределения в среде ухудшают замороженную модель, даже если исполняемый код остается нетронутым. В этом иллюстративном сценарии рекомендательная система, развернутая с точностью 85 процентов, падает до 80,2 процента за 6 месяцев по мере изменения покупательских паттернов, теряя 4,8 процентного пункта без каких-либо изменений кода. Поэтому жизненный цикл ML («Инженерия на протяжении жизненного цикла ML») рассматривает мониторинг результатов и переобучение на основе доказательств как эксплуатационные требования. Системы обнаружения мошенничества и обработки естественного языка сталкиваются с тем же риском: поведение пользователей меняется, появляются враждебные паттерны, словарь дрейфует, тогда как бинарный файл сервиса остается прежним. Без непрерывного мониторинга системы выглядят здоровыми, в то время как качество предсказаний незаметно разрушается. Организации, которые воспринимают развертывание как однократную передачу, обнаруживают сбои только после жалоб клиентов или ухудшения бизнес-метрик, которые вынуждают к экстренному аудиту.
Заблуждение и ловушка
Ловушка: считать, что одной экспертизы в ML достаточно для инженерии систем ML.
Организации нанимают исследователей ML, ожидая готовых к производству систем, но рамка пяти опор («Рамка пяти опор») требует интегрированной экспертизы в алгоритмах, программном обеспечении, системах и эксплуатации. Команды с сильными навыками ML, но ограниченным опытом систем, могут не выполнить целевые показатели пропускной способности, потому что дизайн API, структура хранения и инфраструктура обслуживания определяют реальную производительность. И наоборот, программная инфраструктура, построенная без понимания ML, может внести ошибки предобработки или признаков, которые ухудшат поведение модели без явных сбоев системы. Примеры развертывания показывают, что производственный ML требует согласованного внимания к данным, моделям, инфраструктуре и организационным процессам, а не только к алгоритмическому качеству (Paleyes et al., 2022). Эффективные команды объединяют исследователей ML, инженеров программного обеспечения и специалистов по эксплуатации, а не ждут, что одна роль освоит все навыки. Производственные сбои обычно возникают на стыках между выученными весами, физической аппаратурой выполнения и эксплуатационными процессами.
Итоги
Системы машинного обучения должны выполнять два требования одновременно: выученное поведение должно оставаться заслуживающим доверия, а машина должна обеспечивать это поведение в физических и экономических пределах. Переход к Software 2.0 объясняет, почему поведение, выученное из данных, может незаметно отказать при изменении распределений. История парадигм ИИ и горький урок объясняют, почему прогресс снова и снова приходил от систем, которые умели использовать больше вычислений, а не от вручную закодированной экспертизы. Таксономия D·A·M локализует связывающее ограничение, а уравнение деградации, железный закон и рамки энергии и эффективности превращают эти ограничения в количественные диагнозы.
Жизненный цикл, спектр развертывания и производственные примеры показывают, почему непрерывная итерация и проектирование с учетом контекста обязательны. Пять маячных моделей (ResNet-50, GPT-2/Llama, MobileNetV2, DLRM и распознавание ключевых слов, подробно описанные в главе «Архитектуры нейронных сетей») повторяются на протяжении всей книги, чтобы привязать эти принципы к реальным нагрузкам.
Вернемся к взаимодействию со смартфоном, с которого начиналась глава. То, что казалось одним разумным действием, опиралось на репрезентативные данные, выученную модель, машину в пределах ее эксплуатационного бюджета и обратную связь, которая могла выявить меняющееся поведение. Эта цепочка отвечает на вопрос, поставленный в начале. Поскольку поведение ML не только написано в коде, но и выучено, оно может деградировать без явного сбоя и должно проектироваться совместно по данным, алгоритмам, программному обеспечению и аппаратуре. Инженерия ИИ удерживает стохастическое поведение в рамках детерминированных целевых показателей надежности.
Ключевые выводы: ограничения определяют архитектуру
- Узкие места D·A·M мигрируют, а не исчезают. Ограничения по данным, алгоритму и машине взаимодействуют, поэтому улучшение одной оси часто обнажает другую. Системная привычка — спросить, какая ось теперь связывает, и выбрать вмешательство, которое снимает это ограничение, не создавая более крупного сбоя ниже по потоку.
- Выученное поведение может незаметно деградировать. Традиционное программное обеспечение обычно ломается при изменении кода или его окружения; системы ML могут деградировать, когда код и инфраструктура остаются неизменными, потому что мир смещается относительно обучающего распределения. Метрики дрейфа превращают этот сдвиг в поводы для расследования, а не в неожиданную потерю точности.
- Железный закон делает задержку диагностичной. Перемещение данных, вычисления и накладные расходы расходуют один и тот же бюджет времени. Сокращение вывода с 45 мс до 15 мс дает лишь улучшение на 23 процента, когда доминируют предобработка (60 мс) и постобработка (25 мс), поэтому оптимизируйте член, который связывает сквозное поведение.
- Масштаб побеждает внутри физических пределов. Горький урок объясняет, почему общие методы с большим объемом вычислений вытеснили вручную созданные системы, но масштаб помогает только тогда, когда данные, архитектура и машина могут его поддержать. Выигрыши эффективности в 44,5 раза сосуществовали с ростом вычислений примерно на 7 порядков величины.
- Инженерия ИИ — это непрерывное совместное проектирование. Контекст развертывания, мониторинг жизненного цикла и пять инженерных опор — не дополнения на потом; именно так стохастическое выученное поведение доводится до детерминированных целевых показателей надежности от облачного обучения до эксплуатации TinyML.
Все, что введено в этой главе, подтверждает одну мысль: система машинного обучения управляется физикой, а не намерением. Ее поведение отражает то, что допускают данные, арифметика и аппаратура. Горький урок, железный закон, уравнение деградации и таксономия D·A·M образуют единый словарь для рассуждений о поведении, которое выучено, а не полностью задано, и которое может деградировать, если за ним не следить. Признание этих ограничений реальной спецификацией и превращает набор методов в дисциплину.
От замысла к архитектуре
Выбор места, где должна работать модель ML, определяется физическими законами. Скорость света делает удаленные облачные серверы бесполезными для экстренного торможения. Термодинамика не позволяет моделям класса дата-центров работать на мобильном устройстве. Физика памяти создает пределы пропускной способности, которые не может преодолеть более быстрый чип. Четыре парадигмы развертывания — это место, где эти законы сходятся. Глава «Системы машинного обучения» выводит эксплуатационную оболочку каждой парадигмы из физики и разрабатывает рамку принятия решений для выбора между ними, когда требования конфликтуют.
-
GPU (графический процессор): изначально созданный для отрисовки графики видеоигр — задачи, которая требует тысяч простых параллельных вычислений для пикселей. Такое соответствие аппаратуры и алгоритма оказалось решающим для нейронных сетей, где та же массивно-параллельная арифметика напрямую отображается на умножение матриц. Поэтому GPU стали основным физическим фактором масштабирования современного обучения. ↩
-
Андрей Карпаты: один из основателей OpenAI и бывший директор по ИИ в Tesla, который применил глубокое обучение к парку автономных автомобилей. Его тезис «Software 2.0» (2017) сформулировал мысль о том, что веса нейронной сети стали новым «исходным кодом». Из этого следует новая инженерная реальность: вместо отладки явной логики инженеры должны курировать данные, которые определяют поведение программы, и вести их версии, поскольку модель с миллионами параметров нельзя напрямую исправить или рассуждать о ней. ↩
-
Веса модели: выученные числовые параметры нейронной сети. Модель масштаба GPT-3 (Generative Pre-trained Transformer 3) хранит 175 млрд таких значений, занимая 350 ГБ при точности FP16 — 16-битном формате с плавающей запятой, в котором на значение приходится два байта (Brown et al., 2020). Число параметров определяет объем весов и сильно влияет на трафик памяти при обслуживании и на стоимость (см. главу «Вычисления в нейронных сетях»). ↩
-
Стохастический градиентный спуск (SGD): алгоритм выучивает параметры модели, обрабатывая небольшие случайно выбранные группы примеров («батчи»), а не весь набор данных целиком. Это обменивает статистический шум на скорость вычислений. Размер батча также влияет на машину: слишком маленький батч может не загрузить параллельные процессоры ускорителя, и значительная часть его потенциальных вычислений пропадает впустую. ↩
-
AlexNet: Алекс Крижевский, Илья Суцкевер и Джеффри Хинтон обучили эту сверточную нейронную сеть на двух GPU. На ILSVRC 2012 ее ошибка top-5 составила 15,3 процента, то есть правильного класса не оказалось среди пяти наиболее вероятных предсказаний; это заметно лучше, чем 26,2 процента у системы, занявшей второе место (Krizhevsky et al., 2012). «Эпоха глубокого обучения и узкое место инфраструктуры» возвращается к ее архитектуре и совместному проектированию системы. ↩
-
Алан Тьюринг: его «Игра в имитацию» (1950) переформулировала интеллект как задачу измерения результата: оценивайте систему по тому, что она делает, а не по тому, чем она является. Этот инженерный подход сохраняется в каждой метрике систем машинного обучения, которую мы используем сегодня: точность, задержка, пропускная способность и FLOP/s на ватт — все это измерения результата. Именно поэтому железный закон («Железный закон систем машинного обучения») раскладывает производительность на наблюдаемые измеримые члены, а не на внутренние архитектурные свойства. ↩
-
ELIZA: программа 1966 года для естественного языка, которая использовала правила сопоставления шаблонов, а не выученные параметры. Ее сценарии могли сохранять и извлекать отдельные входы, но эта ограниченная рукописная память не давала выученного состояния беседы. Каждая новая вариация ввода требовала еще одного правила, и сопровождение росло быстрее возможностей. Так проявилось узкое место знаний, которое позже ограничивало экспертные системы. ↩
-
«Зимы ИИ» как системные отказы: первая «зима ИИ» (1974–1980) развернулась на фоне сокращения финансирования; отчет Лайтхилла 1973 года критиковал разрыв между обещаниями ИИ и результатами (Lighthill, 1973). Вторая «зима» (1987–1993) связана с обвалом рынка и финансирования вокруг экспертных систем и специализированных машин Lisp, которые проиграли по экономике универсальным рабочим станциям (Hendler, 2008). С системной точки зрения этой книги оба эпизода показывают, что амбиции алгоритмов опережали имеющуюся инфраструктуру, рыночную поддержку и инженерную зрелость, а не просто нехватку хитроумных алгоритмов. ↩
-
Дартмутская конференция (1956): семинар, организованный вокруг термина «искусственный интеллект», который уже использовался в заявке на него в 1955 году (McCarthy et al., 1955). Участники рассматривали интеллект через язык, абстракцию, решение задач и самосовершенствование, почти не обращая внимания на физические ограничения памяти и вычислений, которые позже стали центральными. Именно это не зависящее от вычислений допущение, что лучший алгоритм всегда может преодолеть аппаратное ограничение, и призвана исправить эта книга: каждая следующая глава доказывает, что системные ограничения — полноценные проектные переменные, а не запоздалая мысль. ↩
-
STUDENT: программа Дэниела Боброва 1964 года из MIT разбирала ограниченные текстовые задачи на английском языке, символически представляла связи между их величинами и передавала полученные уравнения решателю алгебры. Это ранний пример разделения понимания языка и формальных рассуждений: если представление было верным, решение становилось простым, а охват зависел от рукописных преобразований (Bobrow, 1964). ↩
-
Парадокс Моравека: робототехник из Carnegie Mellon Ганс Моравек заметил, что высокоуровневые рассуждения (шахматы) требуют мало вычислений, тогда как низкоуровневое восприятие (ходьба) требует массового параллелизма (Moravec, 1988). Этот парадокс объясняет центральный факт инженерии систем машинного обучения: задачи, которые кажутся людям «легкими» (зрение, речь, управление движением), требуют наибольшего числа FLOP/s, пропускной способности памяти и специализированного оборудования, что и стимулировало революцию ускорителей, определяющую современную инфраструктуру ML. ↩
-
Узкое место приобретения знаний: работа Фейгенбаума по инженерии знаний строила прикладной ИИ вокруг практической трудности извлечения, представления и поддержки экспертных знаний (Feigenbaum, 1984). В системных терминах это узкое место было проблемой пропускной способности: выявление знаний и сопровождение правил ограничивались последовательной пропускной способностью человека-эксперта. В отличие от вычислительных узких мест, которые поддаются более быстрому железу, это было первым в ИИ ограничением вида «не масштабируется» и прямым мотивом для последовавшей парадигмы, основанной на данных. ↩
-
Необъяснимая эффективность данных: наблюдение, что простая статистическая модель, обученная на огромных объемах данных, может превзойти более сложную модель, обученную на меньших данных (Halevy et al., 2009). Халеви и коллеги иллюстрировали этот эффект большими веб-корпусами, а не универсальным множителем частоты ошибок; выигрыш зависит от задачи, модели, качества данных и исходной точки. Результат поддержал переход от хрупких рукописных систем к вероятностным моделям и сделал сбор, хранение и предобработку данных, а также распределенное обучение центральными инженерными задачами. ↩
-
Алгоритм Виолы — Джонса: скорость в реальном времени обеспечивал каскад классификаторов, который использовал простые прямоугольные признаки, созданные вручную, чтобы сразу отбрасывать области, не являющиеся лицами. Метод был разработан и оценен для обнаружения лиц в фас и иллюстрирует компромисс эпохи: экспертно спроектированные признаки могли быть быстрыми и эффективными, но представление было привязано к задаче. Первые два слоя сами по себе могли отбросить более 80 процентов отрицательных подокон, используя всего двенадцать из более чем 6000 признаков (Viola and Jones, 2001). ↩
-
Ричард Саттон: пионер обучения с подкреплением, эссе которого 2019 года зафиксировало закономерность, прослеженную в «Эволюции узких мест ИИ»: от символического ИИ через экспертные системы к глубокому обучению, где общие методы, использующие вычисления, стабильно превосходили вручную спроектированную экспертизу. Урок «горький», потому что доменно-специфичная логика оказывается обесценивающимся активом, а устойчивое преимущество принадлежит системной инженерии, способной освоить рост сырых вычислений примерно в миллиард раз с 1970-х годов. ↩
-
Deep Blue: шахматная система IBM (Campbell et al., 2002) победила чемпиона мира Гарри Каспарова в 1997 году благодаря сочетанию системных решений: перебор примерно 200 миллионов позиций в секунду на 480 специализированных шахматных процессорах плюс шахматно-специфичная оценка и знания. Deep Blue стал ранней публичной демонстрацией того, что специально созданный кремний может усиливать перебор и закодированные знания предметной области; он предвосхитил стратегию ускорителей под конкретные задачи, которая определяет современное ML-железо. ↩
-
AlphaGo: AlphaGo сначала учился на партиях людей-экспертов, затем улучшался с помощью обучения с подкреплением на играх с самим собой, заменив вручную заданную стратегию го конвейером «данные и вычисления», который может исследовать пространство задачи в огромном вычислительном масштабе. После трех дней обучения игре с самим собой AlphaGo Zero превзошел исходный AlphaGo, выиграв со счетом 100:0 (Silver et al., 2017). ↩
-
Энергия обучения GPT-3 (Generative Pre-trained Transformer 3): Patterson et al. (2021) оценили, что один запуск обучения GPT-3 потребил около 1 287 МВт·ч и выбросил 552 тонны CO₂-эквивалента, что примерно соответствует годовому потреблению электричества 120 средних американских домохозяйств при базовом уровне 10,7 МВт·ч/домохозяйство-год. Перемещение данных по иерархии памяти составляет значительную долю этого энергетического следа, поскольку перенос операндов между уровнями памяти требует на порядки больше энергии, чем локальные арифметические операции (Horowitz, 2014). ↩
-
Пропускная способность памяти: скорость передачи данных между внешней памятью (например, памятью с высокой пропускной способностью, HBM) и регистрами процессора или SRAM на кристалле. Пока обучение с большим батчем амортизирует передачи параметров на тысячи токенов, достигая высокой арифметической интенсивности, авторегрессивный вывод должен заново загружать миллиарды весов из внешней памяти для каждого сгенерированного токена. Поскольку передачи из внешней памяти требуют на порядки больше энергии и задержки, чем вычисления на кристалле, пропускная способность памяти, а не пиковая арифметическая производительность, часто определяет задержку выполнения и потребление энергии дата-центром. ↩
-
Вывод (inference): от лат. inferre («вносить» или «заключать»). В инженерии ML вывод — это фаза развертывания, в которой обученная модель применяет выученные закономерности к новым входам. Системное различие важно: обучение оптимизируют по пропускной способности (максимизировать примеры в секунду), а вывод — по задержке (минимизировать миллисекунды на предсказание). Эти противоположные цели требуют принципиально разных конфигураций аппаратуры и программных стеков (см. главу «Обслуживание моделей»). ↩
-
ImageNet: статья 2009 года сообщала о 3,2 млн изображений в 5 247 синсетах; позднее полный набор данных вырос примерно до 14,2 млн изображений в 21 841 синсете. Обучающая часть задачи 2012 года, которую использовал AlexNet, содержала примерно 1,3 млн размеченных изображений (Deng et al., 2009; Russakovsky et al., 2015) (см. главу «Инженерия данных»). ↩
-
Закон Мура: наблюдение Гордона Мура 1965 года описывало быстрый рост числа компонентов, которые экономически выгодно разместить на кристалле (Moore, 1998). Позднее отраслевые обзоры часто выражали этот ритм как примерно удвоение каждые два года. ↩
-
Вычислительная техника (computer engineering): оформилась как академическая дисциплина, когда в 1971 году Case Western Reserve открыл первую аккредитованную программу, признав, что ни электротехника, ни информатика в отдельности не могут решить задачу создания надежных компьютеров из ненадежных компонентов. Инженерия систем машинного обучения повторяет это сближение: решающее ограничение — не алгоритм и не аппаратура по отдельности, а их интеграция при бюджетах задержки, энергии и качества данных, которые не охватывает учебная программа ни одной из дисциплин. ↩
-
Микроконтроллеры: однокристальные компьютеры с килобайтами памяти и бюджетом мощности в милливаттах. Для TinyML память и энергия определяют осуществимость раньше, чем качество модели. ↩
-
Задержка: от лат. latere («скрываться»): задержка незаметна, пока не вызывает сбой. При 30 м/с каждая миллисекунда добавляет 3 см пути до начала торможения, что и делает ограничением периферии. ↩
-
Сжатие моделей: семейство методов, включая квантование, прореживание и дистилляцию, которые уменьшают объем хранения или вычислений модели. Эффект на размер и точность зависит от модели, метода, нагрузки и целевой аппаратуры. ↩
-
Гибридный рабочий процесс автономного вождения: этот типичный процесс создает задачу синхронизации, которой нет в чисто облачных или чисто периферийных системах. Модель на борту должна проходить контроль и регрессионное тестирование до развертывания, тогда как облачная инфраструктура может обучать и оценивать улучшенные версии на новых данных вождения. Возникает разрыв управления версиями между развернутой и заново обученной моделью, и любое удаленное обновление модели для автомобилей, критичных к безопасности, требует строгой валидации. ↩
-
FarmBeats: система использует линки в свободных телевизионных диапазонах как высокоскоростной внутрифермерский канал от датчиков к шлюзовому ПК, где локальная обработка снижает зависимость от более слабого интернет-соединения с облаком. Возникающее ограничение — своевременная синхронизация данных по каналу «ферма — облако», а не доставка модели определенного размера (Vasisht et al., 2017). ↩
-
LiDAR (light detection and ranging): этот датчик — главная причина, по которой автомобиль называют «блуждающим дата-центром»: импульсные лазеры создают плотное трехмерное облако точек окружения. Необработанный поток одного блока может превышать 100 мегабайт в секунду, создавая одновременно проблему объема в терабайтах и проблему качества, поскольку сигнал легко искажается помехами от дождя или тумана. ↩
-
Дрейф данных: расхождение между распределением обучающих данных () и производственным распределением (). Дрейф может менять производительность без изменения кода, но само расхождение не определяет, падает ли точность; чтобы установить деградацию, нужен мониторинг результатов (см. главу «MLOps»). ↩
-
Атака вывода (inference attack): угроза безопасности, при которой злоумышленник запрашивает модель, чтобы вывести чувствительные сведения об обучающей выборке. Такие атаки используют склонность сверхпараметризованных моделей запоминать уникальные закономерности обучающих данных, что создает прямой компромисс между емкостью модели и риском для приватности и мотивирует защитные методы, такие как дифференциальная приватность и возмущение выходов. ↩
Принципы основ
Системы машинного обучения подчиняются эвристике, которая выглядит простой: сложность часто переходит из одного места в другое, а не исчезает, хотя хорошее проектирование способно убрать случайную сложность. Сложность перетекает между тремя областями таксономии D·A·M: данными как информацией, алгоритмом как логикой и машиной как физикой. Упрощение одной области может перегрузить другие. Конвейер признаков, созданный вручную, уменьшает алгоритмическую сложность, но требует больше усилий инженерии данных. Более крупная модель поглощает беспорядочные данные, но перекладывает сложность на аппаратуру, которая должна ее обучать и обслуживать. Эта эвристика сохранения сложности лежит в основе всей книги. Количественные границы, модели и принципы, введенные в книге, описывают ограничения, которые возникают там, где сейчас находится сложность.
Архитектуры, фреймворки и оптимизации успешны только тогда, когда учитывают ограничения, которые накладывают аппаратура, математика и теория информации. Как инженер-строитель не может игнорировать гравитацию, так и инженер ML не может игнорировать физические законы, управляющие данными, вычислениями и пропускной способностью системы. Часть I закладывает эти основы: не набор лучших практик, которые меняются вместе с фреймворками, и не мнения, которые расходятся между командами, а устойчивые физические ограничения и количественные модели инженерии ML. Первое ограничение начинается с самих данных, где привычная граница между программой и входом начинает исчезать.
Принцип «данные как код»
Инвариант: данные функционируют как исходный код ML-системы. Изменение обучающего набора может изменить выученное поведение системы. Здесь выученное поведение означает обученное отображение входов в выходы; обозначает процесс обучения, а отмечает качественную зависимость, а не предсказательное равенство. Архитектура модели, инициализация, конфигурация оптимизатора и стохастичность обучения входят в процедуру обучения.
Следствие: инженерия данных требует той же строгости, что и программная инженерия. Наборы данных следует версионировать (как в Git), покрывать модульными тестами (проверки качества данных) и отлаживать. Удаление строки обучающих данных может изменить пересобранную модель так же, как удаление строки кода может изменить скомпилированный артефакт.
Если данные функционируют как исходный код, то они не просто логический артефакт: у них есть и физические свойства, которые ограничивают архитектуру системы, когда данные и вычисления находятся в разных местах.
Принцип гравитации данных
Инвариант: по мере роста объема данных () перенос набора данных может стоить больше, чем отправка гораздо меньшего запроса или кода по тому же ограниченному каналу (McCrory, 2010).
Здесь стоимость означает одну метрику переноса за раз — например, затраченное время передачи или число переданных байтов — при одинаковых условиях канала; она не объединяет задержку и пропускную способность в одну величину.
Следствие: большие наборы данных могут стать гравитационным центром архитектуры. Системы могут переносить вычисления к данным, отправляя запросы или код на уровень хранения, а не переносить данные к вычислениям, многократно скачивая большие наборы.
Вместе эти два принципа показывают, что данные могут быть одновременно логической программой и физическим якорем ML-системы. Часть I развивает эти следствия как цепочку зависимостей. Ограничения развертывания определяют, где система может исполняться; жизненный цикл переносит эти ограничения через постановку задачи, данные, моделирование, валидацию и эксплуатацию; а инженерия данных делает их обязательными в версионируемых и протестированных артефактах конвейера. Игнорирование любого звена возвращает сложность в виде издержек интеграции: точная модель, которую нельзя запустить, рабочий процесс, который не может воспроизвести свои входы, или конвейер, выходы которого больше не соответствуют условиям развертывания.
Системы машинного обучения
Назначение
Почему развертывание одной и той же модели на телефоне и в дата-центре требует принципиально разной инженерии?
Определяющая идея инженерии систем машинного обучения состоит в том, что ограничения определяют архитектуру. Скорость света задает абсолютный нижний предел того, как быстро далекие серверы могут ответить. Термодинамика ограничивает объем вычислений в заданном объеме до того, как тепло становится неуправляемым. Физика памяти делает перемещение данных часто более дорогим, чем их обработка. Это не ограничения инженерии, которые ждут лучших технологий; это постоянные физические границы, которые делят мир на принципиально различные режимы эксплуатации. Дата-центр может обучать модели с миллиардами параметров, но не может гарантировать низкую задержку ответов пользователям, находящимся в тысячах километров. Смартфон может отвечать мгновенно, но его бюджет памяти составляет лишь долю от дата-центра. Микроконтроллер может работать от батарейки-таблетки годами, но вычислительных ресурсов у него хватает лишь на простой детектор ключевых слов. Одна и та же модель, один и тот же алгоритм, примененный к тем же данным, требует принципиально разной инженерии в каждом режиме не потому, что меняется физика, а потому что доминируют разные ограничения. Команды, которые относятся к развертыванию как к второстепенной детали — обучают в одной среде и откладывают целевые ограничения до запуска, — слишком поздно выясняют, что целевая среда аннулирует месяцы архитектурных решений. Поэтому инженерная задача состоит не в том, чтобы найти универсально лучшее развертывание, а в том, чтобы определить ограничение, которое связывает в предполагаемом режиме эксплуатации. В терминах D·A·M понимание этих режимов превращает развертывание из эксплуатационной детали в задачу совместного проектирования первого порядка, в которой локальность данных, структура алгоритма и ограничения машины совместно определяют, что возможно.
Цели обучения
- Объяснить, как физические ограничения создают парадигмы развертывания от облака до TinyML
- Применить железный закон и принцип узкого места для классификации нагрузок, ограниченных вычислениями, памятью и вводом-выводом
- Сопоставить архетипы нагрузок с парадигмами развертывания на примерах маячных моделей
- Сравнить облако, периферию, мобильные устройства и TinyML по эксплуатационным ограничениям и количественным компромиссам
- Применить рамку решения для выбора парадигмы с учетом ограничений по приватности, задержке, вычислениям и стоимости
- Проанализировать гибридные схемы, сочетающие парадигмы для выполнения системных ограничений
- Оценить решения о развертывании, распространенные заблуждения и универсальные принципы, переносимые между масштабами
Рамка парадигм развертывания
Рассмотрим два крайних случая: детектор слова пробуждения на смарт-часах и рекомендательный движок в дата-центре. Детектор слова пробуждения представляет нагрузку TinyML, работающую при бюджетах мощности в милливаттах и лимитах памяти в килобайтах; рекомендательный движок — нагрузку облачного ML, которой нужны терабайты таблиц эмбеддингов и инфраструктура мегаваттного масштаба. Эти системы решают разные задачи при противоположных физических ограничениях, а их поддерживающая инфраструктура резко различается по масштабу и устройству. Поэтому развертывание перестает быть второстепенной эксплуатационной деталью и становится решением первого порядка: оно дополняет таксономию D·A·M, показанную на «Ландшафте пересечений D·A·M», и выводит инфраструктуру на первый план наряду с данными и алгоритмами.
Физические ограничения определяют, где может работать модель ML, и формируют возможное так, как не способен переопределить ни один алгоритмический выбор. Важно, что инженерная задача выходит далеко за пределы весов параметров: в производственных системах обученная модель составляет лишь малую часть всей эксплуатационной кодовой базы (Sculley et al., 2015). Окружающая инфраструктура — конвейеры приема данных, извлечение признаков, среды выполнения обслуживания, телеметрия и менеджеры аппаратных ресурсов — должна напрямую соответствовать физической оболочке платформы-хоста.
Мощность у парадигм простирается от мегаватт (облако) до милливатт (TinyML).
Три физических вектора — задержка, рассеяние мощности и пропускная способность памяти — делят развертывание ML на четыре различные парадигмы, каждая из которых сформирована аппаратными компромиссами, а не произвольными категориями продуктов. Централизация вычислений в облачном ML дает эластичные вычисления и большую емкость памяти, но каждый вывод несет сетевую задержку по глобальным каналам. Перенос нагрузок в периферийное ML устраняет этот сетевой цикл и сохраняет чувствительные данные на месте (Shi et al., 2016), однако ограничивает доступные вычисления энергетикой и бюджетами охлаждения локальной стойки. На устройствах с батарейным питанием мобильное ML обеспечивает отзывчивое взаимодействие прямо в смартфонах и планшетах, но должен работать в пассивной тепловой оболочке, где устойчивые вычисления запускают троттлинг. На крайнем маломощном полюсе TinyML работает на микроконтроллерах (Janapa Reddi et al., 2022), где бюджеты мощности в милливаттах и память килобайтного масштаба требуют компактных моделей и целочисленной арифметики. Охватывая девять порядков величины по мощности — от мегаватт в дата-центрах до милливатт во встроенных датчиках («Спектр распределенного интеллекта»), — эти парадигмы отражают инженерные компромиссы между централизованной емкостью и локальным выполнением.
Спектр распределенного интеллекта: уровни развертывания образуют непрерывный ряд, определяемый физическими ограничениями и охватывающий девять порядков величины по мощности. Переход от централизованной облачной инфраструктуры к TinyML на устройстве обменивает сырую вычислительную емкость и эластичное масштабирование на детерминированную задержку, локальность данных и независимость от сети.
Если «Спектр распределенного интеллекта» иллюстрирует качественную топологию распределенного интеллекта, то «Спектр развертывания (концептуальный)» количественно описывает эксплуатационные оболочки по месту обработки, задержке «туда и обратно», потреблению мощности и объему памяти. Этот разброс мощности в девять порядков величины отражает три неизбежные физические границы: скорость света (задающую нижние пределы задержки), пределы термодиссипации (ограничивающие вычисления на ватт) и энергию передачи сигналов в памяти (стену памяти).
| Парадигма | Где | Задержка (мс) | Мощность | Память | Лучше всего для |
|---|---|---|---|---|---|
| Облачное ML | Дата-центры | 100–500 | МВт | ТБ | Обучение, сложный вывод |
| Периферийное ML | Локальные серверы | 10–100 | 100 Вт | ГБ | Вывод в реальном времени, приватность |
| Мобильное ML | Смартфоны | 5–50 | 3–5 Вт | ГБ | Персональный ИИ, офлайн |
| TinyML | Микроконтроллеры | 1–10 | мВт | КБ | Постоянное восприятие |
Спектр развертывания (концептуальный): четыре парадигмы охватывают девять порядков величины по мощности (от МВт до мВт) и по памяти (от ТБ до КБ). Этот концептуальный обзор задает каждую парадигму через ее режим эксплуатации; конкретный аппаратный спектр позже привязывает эти категории к конкретным платформам и количественным порогам решения. Аппаратные характеристики и физические константы, лежащие в основе этих величин, перечислены в приложении о системных допущениях.
Архитектурная опора: стек одного узла
Чтобы ориентироваться в этих режимах эксплуатации, инженерные решения опираются на четырехуровневую модель стека одного узла, которая уточняет машинную сторону таксономии D·A·M для одного хоста, тогда как данные и алгоритм входят через требования нагрузки. На верхнем уровне стека приложение задает миссию через целевую пропускную способность обучения или задержку вывода. Главы «Обучение моделей» и «Обслуживание моделей» развивают механизмы, которые определяют, сможет ли система ее выполнить. ML-фреймворк переводит код модели в исполнимые операции (глава «Фреймворки машинного обучения»). Операционная система оркестрирует ресурсы и перемещает данные между памятью хоста и памятью ускорителя. Само железо, определяемое емкостью памяти с высокой пропускной способностью (HBM), пропускной способностью памяти, межсоединениями внутри узла, такими как NVLink, и пропускной способностью вычислений, задает физические пределы, а стена памяти остается повторяющимся ограничением (глава «Аппаратное ускорение»).
Этот стек задает кремниевый контракт главы: фиксированную сделку по производительности, которую конкретный кусок кремния предлагает модели и которая определяется пропускной способностью памяти, пиковой скоростью вычислений и постоянными накладными расходами. Каждая глава первой половины книги анализирует один или несколько из этих уровней, поскольку понимание того, как они взаимодействуют внутри одной машины, — технологическая предпосылка для освоения больших распределенных масштабов.
Эти физические ограничения взаимодействуют с железным законом систем машинного обучения («Железный закон систем машинного обучения»), который раскладывает сквозную задержку на перемещение данных, вычисления и накладные расходы. Разные среды развертывания подчеркивают разные ограничения: обучение в облаке может быть ограничено вычислениями, мобильные системы сталкиваются со стенами мощности, а устройства TinyML часто упираются в предел емкости памяти. Сочетая физические ограничения с железным законом, мы получаем количественный словарь для рассуждений о том, какая парадигма подходит данной нагрузке и почему. Чтобы конкретно опереться на этот анализ, пять маячных моделей (ResNet-50, GPT-2, DLRM для рекомендаций с большими эмбеддингами, MobileNetV2 и детектор ключевых слов для обнаружения слова пробуждения) охватывают спектр развертывания и выделяют разные системные узкие места. Эти эталонные нагрузки повторяются на протяжении всей книги, обеспечивая единую основу для сравнения методов оптимизации между главами, нагрузками и уровнями развертывания.
Физические ограничения: почему существуют парадигмы
Система безопасности с бюджетом реакции 10 мс не может ждать межконтинентального цикла «туда и обратно», а модель с миллиардом параметров не втиснуть в микроконтроллер одним лишь лучшим кодом. Это не ошибки реализации; это следствия физических законов скорости света, термодинамики мощности и передачи сигналов в памяти. То, где работает система, перестраивает кремниевый контракт между моделью и аппаратурой. Три ограничения задают инженерные компромиссы впереди: световой барьер, стену мощности и стену памяти.1
Световой барьер
Световой барьер задает абсолютный нижний предел задержки2. Пусть обозначает длину пути в одну сторону, а — скорость распространения в оптическом волокне. «Физика задержки» задает минимальное время «туда и обратно»:
Для оптического волокна км/с — примерно две трети от значения в вакууме, поскольку свет распространяется в стекле медленнее, чем в вакууме.
От Калифорнии до Вирджинии (примерно 3 600 км по прямой) требуется ~36 мс «туда и обратно» до начала любых вычислений. Реальные сервисы добавляют маршрутизацию, протокольные накладные расходы, очереди и задержку обработки. Приложения, которым нужен отклик менее 10 мс, не могут использовать удаленную облачную инфраструктуру — этого не позволяет физика. Это ограничение порождает потребность в периферийном ML и TinyML: когда бюджеты задержки жесткие, вычисления должны переместиться ближе к источнику данных.
Стена мощности
Стена мощности возникла потому, что термодинамика ограничивает объем вычислений в заданном объеме. Динамическая мощность КМОП-схем подчиняется «масштабированию мощности», где — эффективная емкость, — напряжение, а — тактовая частота. При сохранении эффективной емкости постоянной на локальном рабочем диапазоне, где напряжение растет пропорционально частоте , динамическая мощность растет как . Эта кубическая зависимость возникает, когда тактовые частоты поднимают за номинальные пределы, что требует более высоких напряжений питания для поддержания скорости переключения транзисторов. Когда масштабирование напряжения полностью останавливается на номинальных пределах, динамическая мощность масштабируется линейно с частотой, но ограничения теплоотвода все равно не дают непрерывно наращивать тактовую частоту.
При этом иллюстративном допущении удвоение тактовой частоты требует примерно в 8 раз больше динамической мощности. Прекращение масштабирования Деннарда3 положило конец «бесплатному» ускорению за счет частоты и вынудил индустрию к параллелизму (многоядерность) и специализации (GPU, Tensor Processing Unit (TPU)). Мобильные устройства упираются в жесткие тепловые пределы при 3–5 Вт; их превышение вызывает «троттлинг» — устройство снижает производительность, чтобы не перегреться. На практике это означает, что мобильная модель, работающая на 60 FPS в течение одной минуты, может снизиться до 15 FPS, когда устройство нагреется. Этот физический предел порождает мобильное ML: устройства с батарейным питанием не могут просто запускать модели облачного масштаба локально.
Стена памяти
Стена памяти (Wulf and McKee, 1995) отражает расширяющийся разрыв пропускной способности4. Простой набросок на уровне книги, использующий характерные годовые коэффициенты роста, показывает, почему разрыв нарастает:
В «стене памяти» числитель и знаменатель — безразмерные годовые коэффициенты роста. Отношение выше 1 означает, что возможности вычислений уходят от пропускной способности памяти, поэтому каждое поколение аппаратуры делает перемещение данных все большей долей проблемы производительности, если только нагрузка не увеличивает локальность или арифметическую интенсивность.
Характерные тенденции, стоящие за этим отношением: процессоры удваивали вычислительную мощность примерно каждые 18 месяцев, тогда как пропускная способность памяти улучшалась лишь примерно на 20 процентов в год. Этот расширяющийся разрыв делает перемещение данных частым узким местом и источником энергетических затрат в нагрузках ML. Физически, хотя арифметическая операция в арифметико-логическом устройстве (ALU) на кристалле перемещает заряды на считанные микрометры локального провода (расходуя десятки-сотни фемтоджоулей), выборка операнда из внешней DRAM требует заряжать емкостные дорожки печатных плат (PCB) и контактные площадки ввода-вывода длиной в сантиметры, расходуя сотни пикоджоулей, — на два-три порядка больше энергии на одно обращение. Это ограничение касается всех парадигм, но особенно остро для TinyML, где устройствам доступны лишь килобайты памяти. «Понимание стены памяти в ИИ» (глава «Аппаратное ускорение») развивает архитектурные ответы на стену памяти, включая HBM и иерархии SRAM на кристалле.
Физические ограничения и развертывание
Решения о развертывании определяются физикой, а не предпочтениями. Проверьте себя:
- Световой барьер: можете ли вы объяснить, почему скорость света делает облачное ML непригодным для задач безопасности с порогом ?
- Стена мощности: можете ли вы объяснить, почему термодинамика (отвод тепла) не позволяет запускать модели дата-центра на мобильных устройствах?
- Стена памяти: можете ли вы объяснить, почему перемещение данных часто дороже вычислений (по времени и энергии)?
Эти физические законы объясняют, почему существуют четыре парадигмы. Физика создает границы; требования регулирования приватности, экономические стимулы и суверенитет данных усиливают и заостряют их, но не создают их. Никакое регулирование не может ускорить свет, и никакая экономическая модель не отменит термодинамику.
Возможности вычислений опережают пропускную способность памяти; расширяющийся разрыв и есть стена памяти.
Эти физические ограничения не действуют изолированно. На практике ML-система ограничена тем физическим пределом, который первым связывает ее основной ресурс. Количественная оценка этих пределов требует аналитических инструментов: железного закона для раскладки времени выполнения на составляющие, принципа узкого места для выявления лимитирующей стадии и архетипов нагрузок для классификации потребностей модели в ресурсах.
Анализ нагрузок
Для рекомендательного движка или детектора слова пробуждения вопрос нагрузки состоит в том, какой член свяжет первым на целевом железе. Центральный аналитический инструмент для ответа на этот вопрос о кремниевом контракте — железный закон систем машинного обучения, введенный в «Железном законе систем машинного обучения». Здесь — полное время, — перемещенные байты, — пропускная способность, — полное число операций, — пиковая скорость вычислений, — эффективность аппаратуры, а — постоянные накладные расходы; «железный закон» суммирует эти издержки для последовательного пути выполнения:
«Железный закон» раскладывает полную задержку на три члена: перемещение данных , вычисления и постоянные накладные расходы . Для одного вывода эти издержки просто складываются — каждая платится последовательно. Однако в производственных системах задачи обрабатываются непрерывным потоком, и анализ смещается от задержки одной задачи к выявлению того, какой член ограничивает систему. Ответ полностью зависит от среды развертывания: модель, которая при обучении ограничена вычислениями, при выводе может стать ограниченной памятью; система, эффективно работающая в облаке, может упереться в пределы мощности на мобильных устройствах. В конвейерном производственном обслуживании аппаратная конкурентность меняет эту линейную сумму: более быстрые стадии скрываются за той подсистемой, которая насытится первой.
Принцип узкого места
Железный закон описывает стоимость каждого члена. Принцип узкого места определяет, какой член важен. В конвейерной ML-нагрузке выявление узкого места имеет значение, потому что оптимизация быстрых операций не дает никакой выгоды, пока самая медленная стадия остается прежней. Современные ускорители используют конвейерное выполнение, чтобы совмещать перемещение данных с вычислениями: пока ускоритель вычисляет батч , система памяти предварительно загружает батч . Когда перемещение данных, вычисления и ввод-вывод полностью перекрываются в установившемся режиме, пусть обозначает время удаленной передачи, а — получающееся время на задачу, включая постоянные накладные расходы. Более быстрые стадии скрываются за самой медленной перекрывающейся стадией, поэтому сумма железного закона становится максимумом, как формализует «уравнение узкого места»:
- (память): время перемещения данных между памятью и процессором.
- (вычисления): время выполнения вычислений.
- : время сетевого обмена (при переносе вычислений).
- (накладные расходы): постоянная задержка (запуск ядра, накладные расходы среды выполнения).
Когда система ограничена памятью , более быстрые процессоры не дают ускорения, так же как расширение шоссе не помогает движению, ограниченному узким мостом. Инженеры должны определить доминирующий член до оптимизации. Когда кандидатом является сетевая передача, перенос вычислений добавляет энергию к анализу, основанному на времени. Поэтому решение «локально или перенести» должно взвешивать джоули так же, как миллисекунды.
Энергия передачи данных
Задача: должен ли датчик с батарейным питанием обрабатывать данные локально (вывод на NPU устройства) или отправлять их в облако, когда энергия передачи сталкивается с энергетической стеной батареи?
Дано:
- Данные : 1 МБ (иллюстративный объем полезной нагрузки).
- Энергия передачи : 100 мДж/МБ (Wi-Fi/LTE).
- Энергия вычислений : 0,1 мДж/вывод (иллюстративная опорная точка MobileNetV2 на нейропроцессоре).
Расчет:
- Облачный подход: = 1 МБ 100 мДж/МБ = 100 мДж.
- Локальный подход: вывод = 0,1 мДж.
Системный вывод: передача сырых данных обходится в 1 000 раз дороже, чем их локальная обработка. Даже если бы облако работало с бесконечной скоростью , заданный бюджет батареи все равно предпочитает локальный вывод передаче сырых данных. Ограничение машины (батарея) определяет выбор развертывания.
Переменные железного закона не масштабируются симметрично по границам развертывания: переход от батчинга с высокой пропускной способностью к обслуживанию отдельных примеров на периферии радикально меняет, какой член определяет производительность.
Железный закон как диагностика развертывания
Железный закон, введенный в «Железном законе систем машинного обучения», служит диагностикой развертывания на протяжении всей главы: он выражает полное время , необходимое для нагрузки, как сумму перемещения данных, арифметики и задержки: Эта декомпозиция диагностическая: она количественно показывает, как объем данных , вычислительная мощность и постоянная задержка совместно задают бюджет времени нагрузки. В отличие от закона Амдала, который фокусируется на параллельном ускорении, железный закон связывает работу модели с перемещением данных и постоянной задержкой на границе развертывания. Частое заблуждение состоит в том, что эти члены независимы; на деле это оси компромиссов. Увеличение размера батча может улучшить коэффициент загрузки и повторное использование данных, смещая ядро, ограниченное памятью, к поведению, ограниченному вычислениями, но одновременно увеличивая рабочий набор и время обслуживания батча.
Ось машины задает оболочку развертывания.
Железный закон количественно описывает стоимость каждого ингредиента; принцип узкого места определяет скорость конвейера. Как эмпирическое правило, аддитивную форму из «железного закона» используют при анализе задержки одной задачи, а форму через максимум из «уравнения узкого места» — при анализе пропускной способности непрерывного потока задач.
Архетипы нагрузок
Принцип узкого места сводит оптимизацию к выявлению доминирующего ограничения для данной нагрузки. Ответ зависит от таксономии D·A·M на «Ландшафте пересечений D·A·M», которая раскладывает любую систему ML на Data, Algorithm и Machine. Разные среды развертывания создают разные узкие места вдоль этих осей, поэтому одно и то же семейство моделей может требовать разной инженерии при переходе от облачного сервера с терабайтами памяти к микроконтроллеру с килобайтами. Железный закон превращает эту диагностику в четыре архетипа нагрузок.5 Это не категории моделей; это повторяющиеся физические узкие места, которые определяют, какие инженерные шаги могут помочь.
Первое разделение отделяет системы, ограниченные арифметикой, от систем, ограниченных перемещением данных. «Вычислительный зверь» выполняет много расчетов на каждый загруженный байт, поэтому прогресс достигается за счет более высокой арифметической пропускной способности, лучшей загрузки и большего параллелизма; эталонный случай — обучение больших нейронных сетей. «Пожиратель полосы пропускания» (bandwidth hog), напротив, ждет перемещения плотных весов или активаций, поэтому более широкие шины памяти и лучшее повторное использование данных важнее дополнительных пиковых FLOP/s; авторегрессивная генерация текста иллюстрирует этот режим.
Второе разделение охватывает нагрузки, где связывающее ограничение вообще не плотная арифметика. Нагрузки «разреженного разброса» (sparse scatter) определяются нерегулярными поисками в таблицах и плохой локальностью кеша, поэтому емкость памяти, задержка доступа и коммуникация определяют производительность рекомендательных систем с огромными таблицами эмбеддингов. Нагрузки «жесткого ограничения» (tiny constraint) работают в противоположной оболочке: энергия на вывод и объем памяти, а не сырая скорость, определяют, вообще ли может работать постоянное восприятие.
Пять эталонных нагрузок
Пять маячных моделей, сведенных в «Пять маячных моделей», повторяются в этой книге как конкретные нагрузки, которые охватывают спектр развертывания и выделяют разные системные узкие места. Полное описание архитектур и биографии моделей приведены в главе «Архитектуры нейронных сетей».
Маячная модель Архетип Парадигма развертывания ResNet-50 Вычислительный зверь Обучение в облаке, вывод на периферии GPT-2/Llama Пожиратель полосы пропускания Вывод в облаке DLRM Разреженный разброс Только облако (распределенно) MobileNetV2 Вычислительный зверь (эффективный) Мобильные, периферийные Распознавание ключевых слов (KWS) Жесткое ограничение TinyML, постоянная работа Пять маячных моделей: повторяющиеся нагрузки, которые используются на протяжении книги, чтобы опереть железный закон на конкретную практику. Каждая маячная модель сочетает архетип (вычислительный зверь, пожиратель полосы пропускания, разреженный разброс, жесткое ограничение) с парадигмой развертывания, в которой она преимущественно работает, и выделяет отдельное системное узкое место.
Эти архетипы напрямую соотносятся с парадигмами развертывания. Вычислительные звери и нагрузки разреженного разброса требуют совокупной емкости памяти и вычислительной пропускной способности дата-центров, пожиратели полосы пропускания занимают облако и периферию в зависимости от бюджетов задержки, а нагрузки жесткого ограничения относятся к микроконтроллерам. Чтобы количественно оценивать эти компромиссы, пять маячных моделей служат конкретными эталонными нагрузками на протяжении всей книги, и каждая выделяет отдельный член железного закона.
Первая маячная модель, ResNet-50, классифицирует изображения по 1000 категориям; обработка каждого изображения требует примерно 8,2 GFLOP и использует 25,6 млн параметров (102,4 МБ при FP32) (He et al., 2016). Ее применяют в медицинской диагностике по изображениям, конвейерах восприятия автономных автомобилей и как основу систем модерации контента; ее регулярная, плотная по вычислениям структура делает ее каноническим эталоном производительности аппаратных ускорителей.
Языковые модели GPT-2/Llama иллюстрируют авторегрессивную генерацию текста (Radford et al., 2019; Touvron et al., 2023). Эти модели порождают текст по одному токену за раз. При декодировании с малым батчем на каждый токен может потребоваться перемещать через память почти все параметры модели (для GPT-2 — 1,5 млрд параметров, для Llama — от 7 до 70 млрд параметров). Такой последовательный шаблон доступа создает авторегрессивное узкое место, которое определяет стоимость обслуживания (Pope et al., 2023).
Рекомендательная маячная модель DLRM представляет нагрузку рекомендаций с тяжелыми эмбеддингами, лежащую в основе крупномасштабных систем вида «вам также может понравиться» (Naumov et al., 2019). Она сопоставляет пользователей и товары векторам эмбеддингов, которые хранятся в таблицах, способных превышать 100 ГБ эмбеддингов; поэтому связывающим ограничением становится емкость памяти, а не вычисления.
Мобильная маячная модель MobileNetV2 создана для эффективных мобильных задач компьютерного зрения, таких как классификация, детекция и сегментация (Sandler et al., 2018). Она решает ту же задачу классификации изображений, что и ResNet, но использует раздельные по глубине свертки (depthwise separable convolutions), которые разделяют пространственную фильтрацию и смешивание каналов, сокращая вычисления в 13,7 раза и позволяя выполнять вывод в реальном времени на смартфонах при 3–5 Вт.
TinyML-маячная модель распознавание ключевых слов (KWS) представляет архетип постоянного восприятия. Системы KWS обнаруживают короткие триггерные фразы компактными моделями, созданными для микроконтроллеров с ограниченными ресурсами (Zhang et al., 2017); в сценарии умного дверного звонка тот же шаблон становится локальным триггером «Динь-дон» или «Привет». Эта нагрузка имеет примерно 200 тыс. параметров и умещается примерно в 800 КБ, что относит ее к режиму TinyML с килобайтной памятью и бюджетом в милливаттах.
Осуществимость развертывания оценивается иерархически: сначала проверяется физическое соответствие памяти, и только потом — задержка выполнения. На «карте ограничений умного дверного звонка» горизонтальные полосы показывают спрос на ресурс в процентах от предложения относительно вертикального порога насыщения 100 процентов для микроконтроллера ESP32-S3; сравниваются емкость памяти на уровне 1 и задержка на уровне 2 в соответствии с соглашением об уровне обслуживания (SLA).
Карта ограничений умного дверного звонка: каждая полоса — это спрос, деленный на предложение, поэтому пунктирная линия отмечает точку, где уровень ровно насыщен. Модель занимает небольшую часть бюджета памяти ESP32-S3 в 4 МБ (уровень 1: ПРОЙДЕНО), но ее базовая задержка 101 мс вдвое превышает намеренно ужесточенную цель взаимодействия 50 мс (уровень 2: НЕ ПРОЙДЕНО), хотя она укладывается в канонический бюджет сценария 200 мс.
Разброс требований к вычислениям и объему памяти объясняет, почему ни одна парадигма развертывания не подходит всем нагрузкам. Распознаватель ключевых слов может работать примерно при 20 MFLOP и 800 КБ, тогда как ResNet-50 требует около 8,2 GFLOP и примерно 102,4 МБ на изображение. Эталонный пример DLRM уже достигает 100 ГБ, а производственные рекомендательные системы в духе DLRM могут превышать 100 ТБ. Языковые модели добавляют режим, в котором доминирует пропускная способность: миллиарды параметров многократно потоково передаются из памяти при авторегрессивном выводе. Эти пять маячных моделей служат конкретными опорами на протяжении всей книги, и каждая выделяет отдельное системное узкое место, к которому возвращаются в каждой главе.
Железный закон и архетипы нагрузок приобретают практический смысл, когда их сопоставляют с реальным кремнием. Достигает ли ускоритель высокой загрузки или простаивает в ожидании памяти, зависит от баланса системы: отношения пиковой вычислительной пропускной способности к пропускной способности памяти и емкости ввода-вывода на разных аппаратных платформах.
Баланс системы и аппаратура
Физические ограничения переводят компромиссы «задержка против пропускной способности» в инженерные решения через конкретные числа. В «Числах задержек для проектирования систем ML» приведены задержки по порядку величины, которые должны учитываться при каждом решении о развертывании: они охватывают восемь порядков величины — от наносекундных вычислительных операций до сотен миллисекунд на межрегиональные сетевые вызовы. Подробные аппаратные задержки и ограничения пропускной способности рассмотрены в главе «Аппаратное ускорение». Операция с задержкой не может попасть на критический путь системы, бюджет задержки которой составляет мс.6
| Операция | Задержка | Следствие для развертывания |
|---|---|---|
| Вычисления | ||
| Умножение матриц на GPU (на операцию) | ~1 нс | Задержка одной операции мала |
| Вывод на NPU (MobileNetV2) | 5–20 мс | Мобильное устройство может обрабатывать зрение в реальном времени |
| Генерация токена LLM | 20–100 мс | Воспринимается как «скорость печати» |
| Память | ||
| Попадание в кеш L1 | ~1 нс | Держите горячие данные в регистрах |
| Чтение некешированной памяти GPU | ~200–500 нс | Скрывайте задержку; объединяйте обращения |
| Чтение DRAM (мобильное) | 50–100 нс | Повторные чтения могут ограничивать нагрузку |
| Сеть | ||
| Один дата-центр | 0,5 мс | Микросервисы осуществимы |
| Один регион | 1–5 мс | Серверы периферии жизнеспособны |
| Между регионами | 50–150 мс | Плохо подходит для жестких бюджетов задержки |
| Операции ML | ||
| Обнаружение слова пробуждения (TinyML) | ~1–10 мс | Постоянная работа осуществима при |
| Обнаружение лиц (мобильное) | 10–30 мс | Реальное время при 30 FPS |
| Первый токен GPT-4 | 200–500 мс | Пользователь замечает задержку |
| Шаг обучения ResNet-50 | 200–400 мс | Оптимизировано под пропускную способность |
Числа задержек для проектирования систем ML: порядки величины задержек в вычислениях, памяти, сети и операциях ML, которые определяют осуществимость развертывания. Охватывая восемь порядков величины, от наносекундных вычислительных операций до сотен миллисекунд на межрегиональные сетевые вызовы, эти физические ограничения формируют архитектурные решения. Полный краткий справочник, включая энергетические отношения и правила масштабирования, см. в приложении о числах, которые стоит знать.
Четыре парадигмы развертывания становятся точнее, когда опираются на конкретное железо. Если «Спектр развертывания (концептуальный)» определил парадигмы концептуально, то «Аппаратный спектр (конкретные платформы)» привязывает их к конкретным устройствам, емкостям памяти и энергетическим оболочкам.7 Девять порядков величины по мощности вместе с метриками эффективности использования энергии дата-центра (PUE)8 и разбросом стоимости от миллионов долларов до $10 определяют, какая парадигма экономически подходит данной нагрузке.
Эти различия аппаратуры определяют, какой член железного закона связывает первым в разных режимах развертывания («Принцип узкого места»).
Баланс системы по парадигмам
Конвейерная форма железного закона систем машинного обучения из «Железного закона систем машинного обучения» добавляет к каноническим членам вычислений и памяти , пропускную способность ввода-вывода хранилища или сети. «Расширенный железный закон» формализует получающуюся нижнюю границу полного времени выполнения :
Здесь — полное число операций, — пиковая скорость вычислений, — эффективность использования аппаратуры, — объем данных, — пропускная способность памяти, — пропускная способность ввода-вывода (хранилища или сети), а — постоянные накладные расходы. Нижняя граница показывает, какой ресурс (вычисления, память или ввод-вывод) ограничивает производительность; равенство требует идеального перекрытия без дополнительных простоев. Доминирующий член зависит от нагрузки и режима развертывания. Более быстрые ускорители помогают обучению в облаке, ограниченному вычислениями; декодирование больших языковых моделей (LLM) и периферийные нагрузки, ограниченные памятью, выигрывают сильнее от сокращения перемещаемых байтов или роста пропускной способности. «Доминирующее узкое место по парадигмам» разбирает все четыре парадигмы, разделяя облако на обучение и вывод LLM, а приложение о диагностике узких мест по таксономии D·A·M сопоставляет каждый доминирующий член с оптимизациями, которые работают, и с теми, что тратят усилия впустую, превращая эту диагностику в план действий.
Парадигма Доминирующее ограничение Почему Фокус оптимизации Обучение в облаке (вычисления) Память и сеть в избытке; предел пропускной способности задают FLOP/s Максимизировать загрузку ускорителя, размер батча Вывод LLM в облаке (пропускная способность памяти) Последовательная генерация многократно перемещает состояние модели Увеличить повторное использование; сократить перемещаемые байты Вывод на периферии (пропускная способность памяти) Ограниченная локальная пропускная способность; модели часто ограничены памятью Меньшие модели; меньше переносов в памяти Мобильные устройства Энергия (неявно) Батарея = ; тепловой троттлинг Пониженная точность; циклическое включение TinyML Модель должна помещаться на кристалле (емкость) Память килобайтного масштаба; модель должна помещаться на кристалле Крошечные модели и арифметика с фиксированной точкой Доминирующее узкое место по парадигмам: какой член железного закона ограничивает производительность в каждой парадигме развертывания, физическая причина его доминирования и получающийся фокус оптимизации. Доминирующий член полностью меняет стратегию оптимизации: обучение в облаке максимизирует загрузку вычислений, тогда как вывод LLM должен бороться с пропускной способностью памяти.
Вывод при batch=1 находится на стороне Roofline, ограниченной памятью.
Анализ Roofline классифицирует узкие места, сравнивая арифметическую интенсивность нагрузки — отношение выполненных операций с плавающей запятой к байту перемещенной памяти () — с точкой баланса машины () (Williams et al., 2009). Здесь изложение неформальное; формальный вывод модели, определение арифметической интенсивности и точки перегиба, которая разделяет режимы, ограниченные памятью и вычислениями, приведены в приложении о машинных основах (раздел о модели Roofline). В этой рамке одна и та же модель ResNet-50 может переходить от поведения при обучении, ограниченного вычислениями, при больших размерах батча к выводу одного изображения (batch=1), более чувствительному к памяти. Выбор парадигмы развертывания должен учитывать этот сдвиг.
Этот эксплуатационный сдвиг отражает структуру таксономии D·A·M («Ландшафт пересечений D·A·M»): каждая система ML балансирует Data, Algorithm и Machine. В «D·A·M × фаза» показано, как каждый компонент ведет себя по-разному в зависимости от того, обучается ли система (выучивает закономерности) или обслуживает (применяет их).
| Компонент | Обучение (изменяемое) | Вывод (неизменяемое) |
|---|---|---|
| Данные | Огромная пропускная способность: большие батчи, перемешивание, аугментация | Низкая задержка: отдельные примеры, актуальность, скорость |
| Алгоритм | Фаза обучения: обновление параметров модели по примерам | Фаза предсказания: применение фиксированных весов к новым входам |
| Машина | Оптимизация пропускной способности: кластеры с высокой пропускной способностью, большая память | Оптимизация задержки: периферийные устройства, ускорители вывода |
D·A·M × фаза: одна и та же модель предъявляет принципиально разные требования к Data, Algorithm и Machine в зависимости от того, обучается система или обслуживает. Когда узкие места неожиданно смещаются, проверьте, какая фаза сейчас оптимизируется.
Количественное сравнение применяет этот анализ к выводу ResNet-50 на высокопроизводительном ускорителе дата-центра и мобильном NPU. Эти значения стоит воспринимать как привязки к конкретной аппаратуре на момент написания: арифметика касается скорости вычислений, пропускной способности памяти и размера батча, тогда как архитектуру ускорителей, стоящую за цифрами, объясняет глава «Аппаратное ускорение».
ResNet-50 в облаке и на мобильном устройстве
Задача: ограничен ли вывод ResNet-50 вычислениями или памятью на (а) высокопроизводительном ускорителе дата-центра и (б) флагманском мобильном NPU?
Дано (из маячных моделей):
- ResNet-50: 8,2 GFLOP на вывод, 25,6 млн параметров (102,4 МБ в FP32, 51,2 МБ в FP16)
Анализ:
(а) Облачный ускоритель дата-центра (batch=1, FP16)
- Пиковые вычисления: 312 TFLOP/s (FP16)
- Пропускная способность памяти: 2,04 ТБ/с
- Время вычислений:
- Время памяти (веса плюс активации):
- Результат: узкое место — память (в 1,1 раза медленнее вычислений)
- Анализ: вычисления на перемещенный байт . Это отношение показывает, сколько арифметики выполняет нагрузка на каждый загруженный байт. Если отношение превышает соотношение вычислений и пропускной способности аппаратуры , нагрузка ограничена вычислениями; если ниже — памятью. При выводе одного изображения малый размер батча дает ограниченное повторное использование, что объясняет, почему даже высокопроизводительные ускорители могут быть ограничены памятью при batch = 1.
(б) Мобильное устройство: флагманский NPU (batch=1, INT8)
- Пиковые вычисления: ~35 TOPS (INT8) — типично для современных мобильных NPU
- Пропускная способность памяти: ~51,2 ГБ/с (LPDDR5)
- Размер модели: 25,6 МБ (квантована до INT8)
- Время вычислений:
- Время памяти (веса плюс активации):
- Результат: узкое место — память (в 2,3 раза медленнее вычислений)
Системный вывод: обе платформы ограничены памятью при выводе одного изображения. Более быстрая пропускная способность памяти A100 (2,04 ТБ/с против 51,2 ГБ/с: в 39,8 раза) переходит примерно в 19,9 раза более быстрый вывод; одни лишь пиковые вычисления не являются определяющим сравнением. Поэтому методы сокращения байтов и более низкой точности могут обойти простую покупку большего пикового FLOP/s для развертывания.
ResNet-50 становится ограниченным вычислениями, когда батчинг и повторное использование данных поднимают вычисления на перемещенный байт выше точки баланса аппаратуры, , где . Конкретно при батчевом выводе статические веса модели передаются по шине памяти только один раз и затем повторно используются для всех примеров батча. Это распределяет передачу весов на входов, повышая арифметическую интенсивность, пока время вычислений не превысит время передачи из памяти. Точка перехода зависит от архитектуры и реализации, потому что трафик активаций, перемещение входов и выходов, повторное использование кеша и детали выполнения среды меняют эффективный объем перемещаемых байтов на вывод.
Сжатие моделей становится необходимым по мере ужесточения бюджета аппаратуры. Переход от облака к периферии и затем к TinyML сжимает доступные ресурсы по всем измерениям. «Аппаратный спектр (конкретные платформы)» количественно описывает эту динамику конкретными примерами: память падает с 128 ТБ (облако) до 512 КБ (TinyML), то есть примерно в 250 миллионов раз, а энергия — от мегаватт до милливатт. Этот разрыв ресурсов острее всего на микроконтроллерах — основной аппаратной платформе TinyML, где емкости памяти и хранилища не вмещают обычные модели ML.
| Категория | Пример устройства | Процессор | Память | Хранилище | Мощность | Диапазон цен |
|---|---|---|---|---|---|---|
| Облачное ML | Google TPU v4 Pod | 4 096 чипов TPU v4, 1,1 EFLOP/s BF16 | 128 ТБ HBM2 | Облачный масштаб (ПБ) | ~3 МВт | Облачная услуга (аренда) |
| Периферийное ML | NVIDIA DGX Spark | GB10 Grace Blackwell, 1 PFLOP/s разреженный FP4 | 128 ГБ LPDDR5x | 4 ТБ NVMe | ~200 Вт | ~$3 000–$5 000 |
| Мобильное ML | Флагманский смартфон | Мобильный SoC (CPU + GPU + NPU) | 8–16 ГБ | 128 ГБ–1 ТБ | 3–5 Вт | $999+ |
| TinyML | ESP32-S3 | Двухъядерный, 240 МГц | 512 КБ SRAM | 4 МБ Flash | 0,05 Вт–1,2 Вт (активная мощность платы) | $10 |
Аппаратный спектр (конкретные платформы): представительные устройства, которые реализуют каждую парадигму развертывания из «Спектра развертывания (концептуальный)». Если концептуальная таблица задает режимы эксплуатации, то эта таблица дает конкретные процессоры, емкости памяти, энергетические оболочки и ценовые ориентиры, которые практики используют, чтобы сопоставить нагрузки с аппаратурой. DGX Spark находится на верхнем конце периферийного спектра; большинство периферийных развертываний используют гораздо меньшие устройства (например, Jetson Orin Nano). Мы включаем его, чтобы показать верхнюю границу необлачного развертывания. Само семейство NVIDIA Jetson охватывает широкий ряд моделей: от Jetson Orin Nano (7–15 Вт) через Jetson Orin NX (10–25 Вт) до Jetson AGX Orin (15–60 Вт); в этой книге цифры мощности Jetson следует сверять с конкретной моделью, названной в контексте.
Аппаратный спектр превращает диагностику узкого места в тест на соответствие. Платформы из «Аппаратного спектра (конкретные платформы)» — результат десятилетий эволюции аппаратуры: от сопроцессоров с плавающей запятой в 1980-х через графические процессоры 2000-х к современным доменно-специфичным ускорителям ИИ. Глава «Аппаратное ускорение» прослеживает эту историческую траекторию и архитектурные принципы, которые ее определили. Здесь важнее всего следствие: качественно разное железо встречается на разных точках инфраструктуры, поэтому каждую нагрузку нужно сопоставлять с тем уровнем, оболочка вычислений, памяти, энергии и стоимости которого ее может удовлетворить.
Каждая парадигма занимает отдельную область спектра развертывания, управляется физическими ограничениями (световой барьер, стена мощности, стена памяти) и количественно описывается аналитическими инструментами (железный закон, принцип узкого места), введенными в «Анализе нагрузок». Количественные пороги из «Порогов решения о развертывании» помогают практикам определить, укладывается ли нагрузка в оболочку вычислений, пропускной способности, мощности и задержки целевой платформы.
| Парадигма | Вычисления | Пропускная способность памяти | Мощность | Задержка (мс) |
|---|---|---|---|---|
| Облачное ML | > 1000 TFLOP/s | > 1000 ГБ/с | Класс МВт (PUE 1,1–1,3) | 100–500 |
| Периферийное ML | ~1 PFLOP/s | > 270 ГБ/с | Класс 100 Вт | 10–100 |
| Мобильное ML | 15–45 TOPS | 51,2–77 ГБ/с | 3–5 Вт | 5–50 |
| TinyML | < 1 TOPS | — | < 1 мВт постоянная средняя целевая мощность | 1–10 |
Пороги решения о развертывании: практичные оболочки, которые практики используют, чтобы определить осуществимость развертывания для каждой парадигмы из «Аппаратного спектра (конкретные платформы)». Эти значения отвечают на вопрос «может ли моя нагрузка работать здесь?», задавая уровень вычислений, пропускную способность памяти и энергетическую оболочку, которые обеспечивает каждая парадигма. Каждая цифра мощности обозначает типичный класс парадигмы, а не жесткий потолок; в частности, периферийная оболочка простирается от маломощных встроенных модулей до устройств уровня рабочих станций.
«Пороги решения о развертывании» завершает тест на соответствие: каждая парадигма представляет эксплуатационную оболочку, определенную своим связывающим ресурсом. Переход от складских дата-центров к микроконтроллерам проходит физический градиент, в котором сырая пропускная способность вычислений обменивается на энергетическую эффективность и эффективность по памяти.
Облачное ML: вычислительная мощность
Подумайте, чего стоило обучить GPT-3:9 3 634,3 PFLOP-дней вычислений, 10 000 GPU V100, работавших примерно 15 дней и потреблявших мегаватты мощности (Patterson et al., 2021). Ни один смартфон, периферийный сервер или одна машина не смогли бы завершить такой запуск обучения по практичному графику. Требовался кластер масштаба дата-центра с достаточной совокупной вычислительной мощностью, памятью и хранилищем. Это определяющее предложение облачного ML: когда задержку можно терпеть, он предлагает вычислительный масштаб, с которым не сравнится ни одна другая парадигма.
Централизация этих ресурсов по коммунальной модели (utility)10 позволяет провайдерам собирать специализированные топологии ускорителей под разные требования к железу. Эта инфраструктура — естественный дом для трех из четырех архетипов нагрузок: нагрузок «вычислительный зверь», как обучение ResNet, которому нужны устойчивые TFLOP/s на тысячах ускорителей; нагрузок «пожиратель полосы пропускания», как вывод больших языковых моделей, которым выгодна пропускная способность HBM в ТБ/с; и нагрузок «разреженный разброс», как рекомендательные системы, которым нужны терабайты таблиц эмбеддингов и высокоскоростные межсоединения для шаблонов коммуникации «все со всеми».
Облачные развертывания масштабируются от экземпляров с одним ускорителем и серверов с несколькими GPU до распределенных кластеров, охватывающих складские дата-центры. Системная инженерия такого масштаба начинается с одного узла: прежде чем координировать вычисления между сетевыми хостами, инженер должен понять насыщение шины памяти, пропускную способность PCIe и NVLink и загрузку ускорителей внутри одной машины.
Этот компромисс между емкостью и расстоянием определяет облачную парадигму.
Облачное ML
Облачное машинное обучение — парадигма развертывания, которая обменивает задержку на эластичные вычисления, размещая нагрузки ML в централизованных дата-центрах и отделяя вычислительную мощность от физического расположения источников данных и пользователей.
- Значение: развертывание в облаке доминирует над членом : один облачный регион может предоставить по запросу тысячи ускорителей, обеспечивая совокупную пропускную способность, с которой не сравнится типичная установка на собственной площадке по стоимости. Компромисс — член : минимальная задержка «туда и обратно» 10–100 мс (задаваемая скоростью света на континентальных расстояниях) делает облако непригодным для любой нагрузки, которой нужен отклик менее 10 мс.
- Отличие: в отличие от периферийного ML, который ставит детерминированность задержки и локальность данных на первое место при фиксированном , облачное ML ставит эластичный на первое место ценой переменного .
- Типичная ошибка: распространено заблуждение, будто облачное ML означает «неограниченные вычисления». На деле штраф за расстояние и узкое место приема данных — физические ограничения, которые не может устранить никакая программная оптимизация, и они задают жесткий нижний предел времени отклика для любой нагрузки, данные которой возникают вне дата-центра.
Централизация задает облачную сделку: объединение эластичных вычислений в кластерах складского масштаба снимает локальные ограничения емкости, но вводит физическое расстояние и сетевую задержку. На «Карте ограничений облачного ML» дерево ограничений слева направо показывает этот компромисс: связывающее ограничение масштаба соединено с системным ответом, границами отказов и подходящими нагрузками.
Карта ограничений облачного ML: централизованная инфраструктура решает задачу масштаба для вычислительных зверей, пожирателей полосы пропускания и нагрузок разреженного разброса, но вводит ограничения расстояния, зависимости, приватности и стоимости, которые определяют, когда облачное ML перестает быть подходящей целью развертывания.
Нагрузки, которым хорошо в этом режиме, — такие как асинхронное обнаружение мошенничества, пакетные обновления рекомендаций и предобучение больших языковых моделей, — выдерживают эту сделку, потому что масштаб важнее мгновенного отклика. Но когда приложению нужно управление в реальном времени, сетевая задержка перестает быть инженерным неудобством и становится жестким физическим барьером. Быстрый расчет штрафа за расстояние делает это конкретным.
Штраф за расстояние
Задача: рассмотрим систему мониторинга безопасности для робота-манипулятора. Логика безопасности требует сквозного времени отклика 10 мс, чтобы предотвратить травму, поэтому штраф за расстояние, налагаемый световым барьером, имеет значение. Модель работает в высокопроизводительном облачном дата-центре на расстоянии 1 500 км. Можно ли уложиться в бюджет безопасности?
Физика:
- Свет в волокне: ~200 000 км/с.
- Распространение «туда и обратно»: (1 500 км 2)/200 000 км/с = 15 мс.
- Результат: одно лишь распространение «туда и обратно» требует 15 мс, что превышает сквозной бюджет 10 мс (запас −5 мс) еще до того, как модель выполнит хоть один вывод.
Системный вывод: физика делает облачное ML невозможным для этого приложения. Модель должна переехать на периферию.
Облачная инфраструктура и масштаб
Облачное ML концентрирует вычислительные ресурсы в централизованных объектах физических размеров, недоступных локальным устройствам. Конструкции суперкомпьютеров TPU объединяют тысячи специализированных чипов ускорителей в системы масштаба дата-центра, которые дают пропускную способность в пониженной точности от PFLOP/s до EFLOP/s (Jouppi et al., 2023). «Аппаратный спектр (конкретные платформы)» количественно показывает, что облачные системы дают на порядки больше вычислений и пропускной способности памяти, чем мобильные устройства, при соответственно более высокой мощности и эксплуатационных затратах. Эти объекты делают возможными нагрузки, непрактичные на устройствах с ограниченными ресурсами, но их удаленное расположение создает прямые компромиссы: сетевая задержка «туда и обратно» исключает жесткие сроки реального времени, а эксплуатационные расходы напрямую растут с использованием.
Физическая реальность этой пропускной способности видна на полу объекта, см. «Масштаб облачного дата-центра»: тысячи чипов ускорителей11 организованы в ряды стоек с жидкостным охлаждением; каждая стойка потребляет киловатты мощности, чтобы поддерживать совокупные вычисления, к которым не приблизится ни одна отдельная машина.
Масштаб облачного дата-центра: специализированные объекты ускорителей объединяют тысячи чипов TPU в стойках с жидкостным охлаждением, чтобы дать матричную пропускную способность экзафлопсного масштаба. Эта централизованная инфраструктура делает реалистичными обучение крупных моделей и обслуживание с высокой пропускной способностью, но влечет потребление мощности мегаваттного масштаба и штраф за расстояние до сети со скоростью света. Источник изображения: Pichai, 2023.
Облачное ML хорошо справляется с обработкой огромных объемов данных благодаря параллельным архитектурам, позволяя обучаться на наборах, которым нужны сотни терабайт хранилища и PFLOP-вычисления — ресурсы, которые остаются непрактичными на ограниченных устройствах. Методы обучения из главы «Обучение моделей» и архитектуры ускорителей из главы «Аппаратное ускорение» показывают, как распределенные системы координируют и поддерживают эту пропускную способность.
Централизация также меняет способы обслуживания и управления моделями. Облачные API делают обученные модели доступными по всему миру на мобильных, веб-платформах и платформах IoT. Общая инфраструктура позволяет инженерным командам работать вместе с единым контролем версий, а модели оплаты по мере использования12 переводят первоначальные капитальные затраты (CapEx) в зависящие от использования операционные расходы (OpEx), которые растут вместе со спросом.
Распространено заблуждение, что огромные вычислительные ресурсы облачного ML делают его универсально лучшим. Большая вычислительная емкость и хранилище не превращаются автоматически в оптимальное решение для каждой нагрузки. Инвариант гравитации данных из приложения о базовых данных объясняет почему: по мере роста объема данных стоимость перемещения данных к вычислениям в конце концов начинает доминировать. Компромиссы, показанные на «Карте ограничений облачного ML», становятся конкретными там, где сильны периферийные и встроенные развертывания: контуры управления с задержкой менее 10 мс в робототехнике, локальное хранение медицинских записей с чувствительными данными, предсказуемые амортизированные затраты без повторяющихся облачных платежей или автономная работа в средах без связи. Оптимальную парадигму развертывания диктует связывающее физическое ограничение, а не неограниченная пропускная способность.
Компромиссы и ограничения облачного ML
Преимущества облачного ML несут присущие компромиссы, которые формируют решения о развертывании. Наиболее значима задержка: удаленная сетевая задержка делает облачную обработку непригодной, когда сквозной путь превышает бюджет отклика приложения. Непредсказуемый джиттер сети дополнительно усложняет предсказуемость производительности и отладку в географически распределенной инфраструктуре.
Приватность и безопасность создают дополнительные границы для облачного развертывания. Передача чувствительных данных в удаленные дата-центры расширяет поверхность раскрытия и усложняет соблюдение нормативных требований. Организации, которые работают с данными, подпадающими под такие регламенты, как Общий регламент защиты данных (GDPR)13 или HIPAA (Health Insurance Portability and Accountability Act)14, должны выбирать, документировать и поддерживать меры защиты, соответствующие данным, системе и применимым правовым обязанностям. Подходы, сохраняющие приватность, могут сокращать объем чувствительных данных, покидающих исходную среду, но они дополняют, а не заменяют инфраструктурные средства контроля.
Управление затратами вносит эксплуатационную сложность, которая требует анализа TCO15, а не наивных сравнений цен за единицу. Разобранное сравнение TCO облака и периферии показывает разрыв между ценником и реальной стоимостью системы.
В разобранном сравнении «Годовой TCO облачного вывода» перечисляет ежегодные затраты на GPU, сеть, балансировщик нагрузки и наблюдаемость для иллюстративной облачной реализации по публичным прайс-листам, а «Годовой TCO периферийного вывода» — соответствующие затраты на аппаратуру, питание, охлаждение, сеть и труд DevOps для периферийного сервера на собственной площадке.
| Статья затрат | Расчет | Годовая стоимость |
|---|---|---|
| Вывод на GPU (A10G) | 4 экземпляра 8760 ч/год $0,75/ч | ~$26 280 |
| Исходящий трафик сети | 100 ГБ/день 365 дней/год $0,09/ГБ | ~$3 285 |
| Балансировщик нагрузки | $0,025/ч + оплата LCU | ~$3 723 |
| CloudWatch/журналирование | Мониторинг, оповещения | ~$2 000 |
| Итого облако | ~$35 288 в год |
Годовой TCO облачного вывода: ежегодные затраты на GPU, сеть, балансировщик нагрузки и наблюдаемость для облачной реализации фиксированной емкости для нагрузки зрения масштаба ResNet-50.
| Статья затрат | Расчет | Годовая стоимость |
|---|---|---|
| Аппаратное обеспечение (CapEx) | $15 000 ÷ срок службы 3 года | ~$5 000 |
| Питание (24/7) | 300 Вт 8760 ч/год $0,12/кВт·ч | ~$315,4 |
| Охлаждение | ~30% от питания | ~$94,6 |
| Сеть (оптоволокно) | Выделенная линия для удаленного управления | ~$1 200 |
| Труд DevOps | 0,1 ставки (FTE) $150 000 зарплаты | ~$15 000 |
| Итого периферия | ~$21 610 в год |
Годовой TCO периферийного вывода: поставленные по статьям затраты на аппаратуру, питание, охлаждение, сеть и труд DevOps для реализации периферийного сервера на собственной площадке; труд оказывается доминирующим компонентом этого сценария.
Облако и периферия: TCO
Задача: система зрения обслуживает 1 млн ежедневных выводов масштаба ResNet-50 (задержка 10 мс, ответ 100 КБ). Если учесть все затраты (часы GPU, исходящий трафик сети, питание, охлаждение и труд; они перечислены в «Годовом TCO облачного вывода» и «Годовом TCO периферийного вывода»), что дешевле за 3 года — облако или развертывание на периферии на собственной площадке?
Расчет: сценарий предусматривает фиксированный пул из 4 облачных GPU-экземпляров и один фиксированный сервер на собственной площадке. Большинство затрат постоянны, тогда как исходящий трафик облака зависит от нагрузки. Поэтому отношение двух годовых сумм не является корректной точкой безубыточной загрузки. Корректное сравнение при заявленной рабочей точке — годовой разрыв затрат из «уравнения безубыточности периферии»:
При заявленной рабочей точке 1 млн выводов в день разрыв составляет ~$35 288 в год − ~$21 610 в год = ~$13 678 в год. Умножение этого трафика на отношение годовых сумм ошибочно принимало бы выделенную мощность за расход на каждый вывод.
Результат: при этой рабочей точке периферия стоит примерно на 38,8 процента меньше. Поскольку фиксированная облачная конфигурация уже стоит больше полной суммы периферии до учета исходящего трафика, зависящего от нагрузки, эти допущения не дают положительной точки пересечения по трафику. Корректная точка безубыточности требует облачных ресурсов, масштабируемых по спросу, явной лестницы мощности или обоснованной цены за запрос.
Системный вывод: в TCO периферии доминирует труд (~$15 000 ÷ ~$21 610 в год ≈ 69,4 процента), а не аппаратура. Организациям без имеющихся мощностей DevOps следует учитывать полную стоимость сопровождения инфраструктуры на собственной площадке.
Помимо прямых финансовых затрат, облачные развертывания несут особые эксплуатационные ограничения. Непредсказуемые всплески нагрузки усложняют бюджетирование и требуют автоматизированного мониторинга и систем управления затратами. Зависимость от сети создает опасность для доступности: любой разрыв связи между клиентами и дата-центром немедленно ухудшает работу сервиса или останавливает его. Проприетарные облачные API усугубляют это привязкой к поставщику, создавая трение переносимости программного обеспечения при переносе нагрузок между провайдерами. Даже с этими эксплуатационными ограничениями централизованная инфраструктура остается уникально подходящей для потребительских приложений, которым нужна эластичная мощность в глобальном масштабе.
Крупномасштабное обучение и вывод
Вычислительные преимущества облачного ML наиболее заметно проявляются в потребительских приложениях, которым нужен огромный масштаб. Виртуальные ассистенты вроде Siri и Alexa иллюстрируют гибридные архитектуры, характерные для современных систем ML: детекция слова пробуждения может работать на специализированном железе мощностью от доли до нескольких милливатт прямо на устройстве, обеспечивая постоянное прослушивание без постоянной активации основного процессора; первичное распознавание речи может выполняться на устройстве ради приватности и отзывчивости; а сложное понимание и генерация естественного языка могут использовать облачную инфраструктуру для доступа к более крупным моделям и более широким знаниям.
Экономика определяет эту архитектуру не меньше, чем задержка. Попытка обрабатывать голосовые взаимодействия миллиардов устройств целиком в облаке упирается одновременно в экономический и инфраструктурный потолок. Количественная оценка «стены голосового ассистента» показывает оба предела сразу.
Стена голосового ассистента
Задача: в этом иллюстративном сценарии емкости 1 млрд устройств голосовых ассистентов (смартфоны, умные колонки, наушники), каждое из которых отправляет по 20 запросов в день как трафик слова пробуждения. Во что обошлось бы масштабирование инфраструктуры, если бы все запросы обслуживались облачным ML, и сколько эквивалентов выделенных дата-центров потребовала бы пиковая нагрузка?
Экономическая стена: во-первых, стоимость обслуживания трафика слова пробуждения из облака.
- Стоимость в облаке: ~$0,50 на устройство в год → 1 млрд устройств = $500 000 000 в год. При этих допущениях экономически неприемлемо для бесплатной функции.
- Альтернатива TinyML: локальная детекция слова пробуждения при 0,1–1 мВт, менее $0,01 на устройство в год. Осуществимо в смоделированном масштабе.
Инфраструктурная стена: во-вторых, число дата-центров, которое потребовала бы пиковая нагрузка.
Пять параметров определяют требуемую емкость кластера:
- Объем запросов: 1 млрд устройств 20 запросов/день = 20 млрд запросов/день.
- Потребность в GPU: каждому запросу нужно ~200 мс времени GPU. Итого: 1 111 111 GPU-часов в день.
- Емкость сценария: эквивалент дата-центра с 10 000 GPU дает 240 000 GPU-часов в день.
- Средняя потребность: ~4,6 выделенных дата-центра только для голосового вывода.
- Пиковая реальность: запросы сосредоточены в часы бодрствования (пик примерно в 4,5 раза выше среднего), что требует ~20,8 дата-центра в пике.
Верхняя граница пропускной способности: в-третьих, рассмотрим отдельный контрфактический случай — передачу самого аудио. Если бы каждое устройство непрерывно передавало аудио (16 кГц, 16 бит), каждое передавало бы ~32 КБ/с. По 1 млрд устройств совокупный поток составил бы 32 ТБ/с — это иллюстративная верхняя граница, а не модель запросов.
Системный вывод: обслуживание голосовых взаимодействий полностью из облака создает неустойчивое узкое место конкурентности в глобальном масштабе: даже до учета операционных расходов пиковые объемы запросов требуют выделенной мощности дата-центра, которая превышает выполнимое распределение парка. Локальная детекция слова пробуждения заменяет это централизованное узкое место распределенным выводом милливаттного масштаба.
Конвейер голосового ассистента иллюстрирует базовый системный принцип: ограничения определяют иерархическую архитектуру. Разбиение конвейера на фильтр слова пробуждения на устройстве и облачную языковую модель снимает одновременно энергетический лимит клиента и стену конкурентности дата-центра. Гибридный подход сокращает сквозную задержку по сравнению с чисто облачной обработкой, сохраняя доступ к вычислительной емкости, нужной для сложного понимания языка.
Крупномасштабные рекомендательные движки демонстрируют облачную сделку в форме, ограниченной емкостью памяти. Системы на основе архитектур вроде DLRM16 используют разреженные таблицы эмбеддингов, чтобы сопоставить миллионы пользователей и товаров плотным векторам. Поскольку эти таблицы обычно превышают терабайты совокупного размера, ни один ускоритель не может хранить параметры модели. Вместо этого таблицы шардируются между распределенной памятью хостов и пулами ускорителей, что требует высокоскоростных межсоединений для коммуникации «все со всеми» при прямом и обратном проходах. Централизованные дата-центры предоставляют объединенную емкость памяти и кластерные сети с низкой задержкой, необходимые для размещения таких разреженных моделей при непрерывном приеме потоковых взаимодействий пользователей.
Эти приложения имеют общую черту: они обменивают задержку на масштаб, принимая задержку удаленного пути в обмен на вычислительные ресурсы, которые нельзя обеспечить локально. Системы обнаружения мошенничества, анализирующие миллионы транзакций, рекомендательные движки, обрабатывающие терабайты таблиц эмбеддингов, и языковые модели, генерирующие текст токен за токеном, — все они опираются на эту сделку. Однако, как показала стена голосового ассистента, существуют приложения, где никакой объем облачных вычислений не компенсирует физику расстояния. Когда бюджеты задержки опускаются ниже того, что допускает удаленный путь, или когда объемы данных превышают то, что способны переносить сети, вычисления должны переместиться ближе к источнику данных.
Периферийное ML: задержка и приватность
Когда удаленный путь превышает бюджет задержки нагрузки, облачный вывод становится физически невозможным. Штраф за расстояние налагает сетевую задержку еще до начала вычислений: ограничения скорости света и транзитные узлы в глобальных сетях добавляют десятки и сотни миллисекунд задержки распространения. Для тормозного пути автономного автомобиля или промышленного контура безопасности17 сетевой цикл «туда и обратно» в 100 мс съедает весь бюджет отклика еще до того, как вычислится хоть один слой. Перенос вычислений рядом с источником данных устраняет этот член удаленной передачи.
Периферийное ML обменивает эластичную облачную мощность на детерминированную задержку менее 100 мс и локальное хранение данных. В терминах архетипов периферийное развертывание сдвигает связывающее ограничение: нагрузка «пожиратель полосы пропускания», ограниченная памятью в облаке, при переносе через глобальные каналы может оказаться ограниченной задержкой удаленного пути. Локальное железо с достаточной памятью устраняет штраф сетевого транзита и возвращает узкое место к локальной пропускной способности памяти и вычислениям. По железному закону из «расширенного железного закона» локальное выполнение убирает из пути запроса член переноса , оставляя время выполнения ограниченным локальными вычислениями и передачей из памяти.
Помимо жестких сроков управления в реальном времени, суверенитет данных и регуляторные ограничения приватности часто запрещают передавать потоки сырых датчиков через внешние сети. Периферийные устройства — от локальных шлюзов и промышленных ПК до серверов на собственной площадке — занимают промежуточный уровень спектра развертывания, балансируя умеренные вычислительные ресурсы с жесткими физическими и тепловыми границами.
Периферийное ML
Периферийное машинное обучение — парадигма развертывания, оптимизированная под детерминированность задержки и локальность данных за счет размещения вычислений физически рядом с источниками данных.
- Значение: она обходит штраф за расстояние облака, обменивая эластичный масштаб на фиксированную локальную вычислительную емкость .
- Отличие: в отличие от облачного ML, который ставит на первое место пропускную способность, периферийное ML ставит детерминированность и приватность. В отличие от TinyML, периферийное ML может по-прежнему использовать ускорители уровня рабочих станций, например GPU общего назначения (GPGPU).
- Типичная ошибка: распространено заблуждение, будто периферийное ML — это определенный класс аппаратуры. На деле это парадигма размещения: она охватывает шлюзы IoT и серверы на собственной площадке, объединенные физической близостью к источнику данных.
Перенос вычислений на локальные серверы убирает дальнюю передачу из пути запроса ценой управления распределенной инфраструктурой. На «Карте ограничений периферийного ML» дерево ограничений показывает, как физическая близость к датчикам определяет локальную фильтрацию и выделенное аппаратное ускорение, одновременно обнажая фиксированные границы емкости.
Сырые данные периферии могут быть шире сетевого канала.
Карта ограничений периферийного ML: перенос вычислений ближе к данным убирает сетевой член задержки и снижает нагрузку на полосу пропускания, но вместо централизованного масштаба он дает фиксированную локальную емкость, распределенную поверхность безопасности и эксплуатационную сложность на множестве площадок.
Физическая необходимость диктует периферийную обработку, когда скорость поступления данных с датчиков превышает пропускную способность канала связи. Когда входящий поток датчиков опережает доступную пропускную способность сети, восходящий канал становится непреодолимым узким местом, что вынуждает переносить вычисления на локальное устройство независимо от прочих соображений.
Узкое место пропускной способности
Задача: рассмотрим систему контроля качества на производственной линии с 100 камерами, работающими при 30 FPS и разрешении 1080p. Становится ли потоковая передача видео узким местом пропускной способности и снижает ли периферийное ML ее настолько, что обработка возможна локально?
Физика:
- Сырая скорость данных с одной камеры: 1920 1080 3 байта 30 FPS ≈ 186,6 МБ/с.
- Общая скорость данных: 100 камер 186,6 МБ/с = 18,7 ГБ/с.
- Нагрузка на облачную передачу: загрузка сырых потоков камер — прежде всего задача пропускной способности, приема, хранения и обработки; плата за исходящий трафик облака взимается за данные, которые передаются из облака. Если бы сырой поток впоследствии выгружался по тарифу $0,09/ГБ за исходящую передачу, одна лишь плата за передачу достигла бы $4,4 млн/мес.
- Реальность сети: даже выделенная линия 10 Гбит/с (1,25 ГБ/с) не может выдержать нагрузку: она требует в 14,9 раза больше пропускной способности, чем есть.
Системный вывод: физика делает потоковую передачу в облако невозможной для этого приложения. Периферийная обработка здесь не опциональна, а обязательна. Если периферийный сервер передает только метаданные дефектов (1 КБ на обнаружение, примерно 20 событий/с по всей линии), пропускная способность падает примерно в 933 120 раз.
Насыщение канала несжатыми потоками датчиков демонстрирует барьер пропускной способности централизованного приема. Для периферийных устройств с батарейным питанием (беспроводные камеры, дроны, носимые устройства) энергетическая стоимость беспроводной связи накладывает еще более жесткий физический потолок: при параметрах полезной нагрузки и радио из прикидочного расчета «Энергия передачи данных» радиопередача потребляет в 1000 раз больше энергии, чем локальный вывод. Передача сырой телеметрии по сотовым или Wi-Fi каналам быстро истощает бортовые энергетические резервы. На рисунке «Иллюстративные опорные точки энергии на вывод» энергетический спектр по уровням развертывания охватывает восемь порядков величины, показывая, почему периферийным и встроенным системам нужны специализированные маломощные архитектуры, а не непрерывная беспроводная передача потока.
Иллюстративные опорные точки энергии на вывод: разрыв в энергии в восемь порядков величины отделяет ключевое распознавание TinyML с ограниченной батареей (~10 мкДж) от запросов к фундаментальным моделям в облаке (~1 кДж) в логарифмической шкале. Этот физический разрыв объясняет, почему постоянное периферийное восприятие требует специализированных маломощных архитектур, а не непрерывной беспроводной передачи в облако. (Отмеченные значения — педагогические опорные точки сценария, а не результаты моделей полной системы.)
Преимущества периферийного ML и сложности развертывания
Периферийные системы охватывают носимые устройства, промышленные контроллеры и шлюзы на собственной площадке, которые обрабатывают данные локально18, не завися от центральных серверов. Хотя восьмипорядковый энергетический разброс между парадигмами отражает разные требования нагрузок и границы учета, физический управляющий принцип остается прежним: рассеяние мощности строго ограничено емкостью батареи или пассивным теплоотводом.
Этот тепловой предел напрямую задает потолок памяти и пропускной способности. Поскольку периферийные ускорители работают в строгих бюджетах мощности 5–50 Вт, они не могут поддерживать широкие мощные физические интерфейсы, которые нужны памяти с высокой пропускной способностью (HBM). Вместо этого периферийные архитектуры опираются на LPDDR или общую системную DRAM: емкость памяти ограничивает масштаб параметров модели, а пропускная способность памяти ограничивает эксплуатационную производительность. Чтобы уместить современные нейронные сети в эти физические рамки, нужны методы сжатия модели из главы «Сжатие моделей» — квантование, прореживание и архитектурная дистилляция, — которые уменьшают объем весов и трафик активаций до бюджетов аппаратуры.
Инвариант локальности данных
Решение между локальной периферийной обработкой и удаленной облачной обработкой определяется компромиссом между пропускной способностью и задержкой. Удаленное выполнение неосуществимо, когда его полный путь нарушает срок обслуживания; в остальных случаях более быстрый осуществимый путь следует из сравнения полного локального и удаленного времени.
Инвариант локальности данных
Инвариант локальности данных сначала проверяет полный удаленный путь на соответствие сроку обслуживания. Пусть — полное время удаленного пути, — срок, — пропускная способность для переноса вычислений, — сетевая задержка, а и — скорость и эффективность удаленных вычислений:
Соответствующее — полное время локального пути. Если оба пути осуществимы, сравните и ; любой путь может быть отвергнут сроком. Здесь учитывает полное время сетевого цикла «туда и обратно» (распространение, маршрутизацию и протокольные рукопожатия), тогда как время передачи обратной полезной нагрузки обычно опускают, потому что результаты вывода (например, метка класса или рамка) на порядки меньше сырого входа .
- Значение: инвариант задает точку перехода, за которой добавление удаленных вычислений почти не помогает, потому что передача доминирует в . Локальный путь предпочтителен, только когда проверены его собственное полное время выполнения и ресурсные пределы.
- Отличие: в отличие от железного закона, который раскладывает один путь выполнения, инвариант локальности сравнивает два полных пути друг с другом и с явным сроком обслуживания.
- Типичная ошибка: распространено заблуждение, будто 5G/6G «решает» вопрос локальности. Хотя эти технологии улучшают , они не устраняют задержку распространения и протоколов, поэтому удаленный путь все равно может не уложиться в жесткий срок обслуживания.
Эксплуатационные компромиссы напрямую следуют из формулировки локальности. Локальное выполнение устраняет время сетевого транзита (), обеспечивая детерминированность задержки для замкнутого контура управления всякий раз, когда локальное выполнение удовлетворяет . Потребление пропускной способности восходящего канала падает от битрейта сырых датчиков до легкой событийной телеметрии, что снижает сетевые перегрузки и повторяющиеся транзитные платежи. Локальная обработка также сокращает поверхность атак на данные, сохраняя сырые потоки датчиков внутри границ собственной площадки, хотя данные в покое все равно требуют локального контроля доступа. Кроме того, периферийные узлы обеспечивают устойчивость к разделению сети: локальный вывод продолжает работать во время сбоев глобальной сети, пока остаются работоспособными локальное питание и линии датчиков.
И наоборот, периферийное развертывание обменивает сетевой транзит на строгие физические и эксплуатационные границы. Типичное периферийное железо работает в пределах 1–8 ГБ памяти и теплового бюджета 5–50 Вт, что намного ниже возможностей облачных серверов.19 Эти ресурсные пределы делают объем модели, буферы активаций, состояние среды выполнения и тепловые циклы работы связывающими ограничениями. С эксплуатационной точки зрения управление распределенной инфраструктурой вносит нелинейную сложность: координация обновлений ПО и версий моделей на тысячах разнородных, физически доступных устройств требует специализированных конвейеров развертывания,20 где стоимость отката и незаметные сбои создают эксплуатационные проблемы, которых нет в централизованных дата-центрах.
На практике точку перехода по локальности хорошо иллюстрирует проверка одного кадра высокоскоростного датчика против жесткого срока кадра.
Точка перехода по локальности
Задача: должна ли система избегания препятствий дрона (4K, 60 FPS) переносить вычисления в облако или здесь возникает точка перехода по локальности?
Дано:
- Данные : кадр 4K ≈ 24,9 МБ.
- Пропускная способность : домашний широкополосный доступ 100 Мбит/с (восходящий).
- Ответ удаленной сети и вычислений: 110 мс (цикл «туда и обратно» + удаленные вычисления).
Расчет:
- Время передачи: 24,9 МБ 8 бит/100 Мбит/с = 1 990,7 мс.
- Полный удаленный путь: передача + 110 мс удаленного ответа = 2 100,7 мс, против интервала кадра 16,7 мс.
Системный вывод: удаленный путь не укладывается в интервал кадра еще до учета запаса цикла управления, а более быстрые удаленные вычисления не могут устранить время передачи. Перенос в облако при этих допущениях поэтому неосуществим; локальный путь все равно нужно измерить, чтобы подтвердить, что он укладывается в срок.
Реалистичное развертывание в розничной торговле показывает, как эти ограничения превращаются в требования к пропускной способности, аппаратуре и стоимости парка. Рассмотрим сеть умных магазинов, которая развертывает детекцию людей в 500 магазинах, по 20 камер на магазин, работающих при 15 FPS. В «Требованиях к размеру периферийного вывода» частота вывода на магазин пересчитывается через число операций YOLOv8-nano на кадр, и получается пропускная способность, которую каждый магазин должен поддерживать.
| Метрика | Расчет | Результат |
|---|---|---|
| Выводы на магазин | 20 камер/магазин 15 FPS | 300 выводов/с |
| Вычислительная нагрузка модели | YOLOv8-nano: 8,7 GFLOP/вывод | 2610 GFLOP/s |
| Требуемая пропускная способность | 2610 GFLOP/s 2 (запас) | ~5,22 TOPS эквивалент |
Требования к размеру периферийного вывода: целевая пропускная способность на магазин для сценария детекции людей в розничной торговле.
«Варианты периферийных ускорителей» сравнивает пропускную способность, мощность, стоимость единицы и стоимость парка для трех кандидатов периферийных ускорителей, включая встроенные GPU-ускорители.
| Периферийное устройство | INT8 TOPS | Мощность | Стоимость единицы | Стоимость парка |
|---|---|---|---|---|
| NVIDIA Jetson Orin NX | 100 TOPS | 10–25 Вт | $600 | $300 000 |
| Intel NUC + Movidius | 1 TOPS | 15 Вт | $400 | $200 000 |
| Google Coral Dev (3 платы/магазин) | пиковая 12 TOPS с учетом снижения 6 TOPS | 6 Вт | $450 | $225 000 |
Варианты периферийных ускорителей: пропускная способность, мощность и стоимость трех кандидатов периферийных ускорителей в масштабе парка.
Размер периферийного вывода
Задача: исходя из целевой пропускной способности из «Требований к размеру периферийного вывода» и кандидатов из «Вариантов периферийных ускорителей», какой периферийный ускоритель (TPU размера USB, встроенный GPU класса рабочей станции или универсальный мини-ПК) обеспечивает нужную пропускную способность при наименьшей трехлетней стоимости парка?
Расчет: размер определяем по тому, что устойчиво выдает одна плата, а не по пиковым значениям из паспорта. Плата Coral Dev Board заявлена с пиковой производительностью 4 TOPS, но после снижения на 50 процентов дает около 2 TOPS, поэтому количество плат на магазин равно 5,22 TOPS требуемых ÷ 2 TOPS на плату = 2,6 платы, что округляется вверх до 3 плат на магазин.
За 3 года на 500 магазинов сравнение TCO этой конфигурации такое: аппаратура $225 000 + питание (0,006 кВт 500 8760 ч/год 3 года $0,12/кВт·ч = $9 460,8) = $234 460,8 всего, против базового варианта с одним выделенным облачным GPU на магазин примерно $9 855 000.
Результат: один Coral сам по себе недостаточен, но сегментированная конфигурация из 3 плат на магазин — самый дешевый периферийный вариант: она дает 6 TOPS и примерно в 1,3 раза меньшие капитальные затраты на аппаратуру в расчете на магазин, чем Jetson. Jetson остается более простым вариантом одного устройства, когда сложность интеграции важнее стоимости аппаратуры.
Системный вывод: размер периферии — задача емкости и стоимости, а не название устройства. Самый дешевый осуществимый проект может состоять из нескольких небольших ускорителей на площадку вместо одной более крупной платы, но эту экономию на аппаратуре нужно сопоставлять с нагрузкой на координацию и сопровождение сегментированного периферийного парка.
Физическая доступность усиливает эти эксплуатационные проблемы. В отличие от серверов, размещенных в дата-центрах с контролем доступа, периферийное железо, установленное в торговых залах или на общественной инфраструктуре, физически доступно злоумышленникам. Такая открытость требует аппаратно обеспечиваемых механизмов защиты: цепочек безопасной загрузки, которые предотвращают несанкционированное изменение прошивки, шифрованного локального хранилища для весов модели и промежуточных активаций, а также корпусов, показывающих вскрытие. Кроме того, капитальные затраты растут линейно с размером развертывания: оснащение 1000 площадок периферийным железом по $500–2000 на площадку требует $500 000–2 000 000 первоначальных капитальных затрат до монтажа, кабелей и эксплуатации парка. Окупается ли эта первоначальная инвестиция более низкой совокупной стоимостью владения по сравнению с повторяющимся облачным выводом, зависит от коэффициентов загрузки, местных тарифов на энергию и накладных расходов на обслуживание площадки.
Системы реального времени: промышленность и IoT
Периферийные приложения различаются по областям, но каждое делает один и тот же аргумент о локальности конкретным: система не может ждать сеть, не может отправить данные, не может раскрыть сырой сигнал или не может остановиться во время сбоя связи. Автономные автомобили — требовательное приложение, потому что решения восприятия и управления, критичные к безопасности, должны укладываться в миллисекундные бюджеты. Бортовые системы обрабатывают потоки нескольких камер и других датчиков через локальное железо; удаленный облачный путь не может выдержать жесткий контур управления, если одна лишь сетевая задержка превышает срок.
Умная розничная торговля показывает практические преимущества периферийного ML для приложений, чувствительных к приватности и требовательных к пропускной способности. Магазин без касс21 может обрабатывать потоки многих камер на локальных периферийных серверах, отслеживая перемещения покупателей и выбор товаров, не передавая сырое видео непрерывно по глобальному каналу. Эта архитектура снижает спрос на пропускную способность и риск передачи, но сама по себе не обеспечивает приватность: хранение, доступ, вторичное использование и средства управления по-прежнему определяют соответствие требованиям и риски системы.
Промышленный интернет вещей22 использует периферийное ML там, где отзывчивость на уровне миллисекунд напрямую влияет на эффективность производства и безопасность работников. Производственные объекты развертывают периферийные системы ML для контроля качества в реальном времени и предиктивного обслуживания.23
Инфраструктура зданий и «умные здания» опираются на периферийное ML, чтобы уравновешивать оптимизацию энергии и непрерывность эксплуатации. Системы управления зданием агрегируют телеметрию тысяч датчиков окружающей среды — отслеживая воздушные потоки, температуру, заполненность и потребление энергии — и исполняют локальные контуры управления вентиляцией, кондиционированием и освещением. Локальная обработка телеметрии сокращает транзит по глобальным сетям на порядок, сохраняя отклик управления менее секунды и устойчивость к разрывам сети. В клинических условиях системы здравоохранения развертывают периферийный вывод для телеметрии пациентов и хирургической навигации, обеспечивая детерминированный отклик и изоляцию данных там, где облачные циклы «туда и обратно» и широкая экспозиция недопустимы.
Многие промышленные и розничные периферийные системы стационарны и подключены к сетевому питанию: например, периферийный сервер завода, потребляющий сотни ватт круглосуточно, остается жизнеспособным. Мобильные устройства, напротив, перемещаются вместе с пользователями, без проводов, на строго ограниченных батарейных резервах. Когда вычисления переходят от стационарной инфраструктуры к мобильному устройству без проводов, энергопотребление вытесняет задержку как главное управляющее ограничение: . Доминирующая цель оптимизации смещается от сырого времени выполнения к энергии на вывод, что принципиально меняет пространство проектирования аппаратуры и алгоритмов.
Мобильное ML: автономный интеллект
Периферийное ML решает проблему расстояния, которая ограничивает облачные развертывания, переводя вычисления ближе к данным. Многие периферийные системы — стационарные шлюзы, заводские серверы и розничная техника, тогда как пользователи носят телефоны и планшеты через меняющуюся среду. Перенос той же локальности на переносное устройство вводит другое ограничение: батарею. В отличие от периферийных серверов с питанием от сети, которые могут непрерывно потреблять сотни ватт, мобильные устройства должны работать часами или днями на фиксированных энергетических бюджетах.
Мобильное ML решает эту задачу, встраивая машинное обучение непосредственно в переносные устройства — смартфоны и планшеты, — обеспечивая отзывчивые персонализированные возможности. Эта парадигма выигрывает там, где локальность данных, автономная работа и мгновенный отклик важнее вычислительного масштаба; она поддерживает такие приложения, как распознавание речи, вычислительная фотография24 и мониторинг здоровья. Локальная обработка снижает риск передачи, но сама по себе не гарантирует приватность. Эти устройства с батарейным питанием должны уравновешивать производительность с энергоэффективностью и управлением теплом, поэтому они подходят для частых коротких задач ИИ.
Мобильная среда вводит критическое ограничение, которого нет в стационарных развертываниях: энергия на вывод становится параметром проектирования первого порядка. По железному закону из «расширенного железного закона» облачные и периферийные системы оптимизируют минимизацию , полной задержки. Мобильные системы сталкиваются с дополнительным ограничением: , а стена мощности, описанная «масштабированием мощности», ограничивает устойчивую мощность значением 3–5 Вт. В терминах архетипов нагрузку «вычислительный зверь», например классификацию изображений, нужно преобразовать в более компактную модель зрения,25 сократив FLOP в 13,7 раза при сохранении достаточной точности для приложения. Это не просто оптимизация: это качественный сдвиг в компромиссе «вычисления на байт», когда пиковая пропускная способность приносится в жертву устойчивой работе в тепловой оболочке 3–5 Вт.
Эта граница батареи и тепла задает определяющую форму мобильной парадигмы.
Мобильное ML
Мобильное машинное обучение — парадигма развертывания, ограниченная расчетной тепловой мощностью (TDP) и энергией батареи.
- Значение: ее ограничивает способность пассивного охлаждения отводить тепло мощностью в несколько ватт, поэтому архитектуры должны ставить устойчивую энергоэффективность выше пиковой пропускной способности .
- Отличие: в отличие от периферийного ML, у которого может быть активное охлаждение, мобильное ML должно работать в пределах личного энергетического бюджета. В отличие от TinyML, оно по-прежнему предоставляет полноценную ОС и вычислительную мощность в несколько ватт.
- Типичная ошибка: распространено заблуждение, будто производительность мобильного ML — фиксированная величина. На деле это ограничение, меняющееся во времени: производительность часто падает, когда устройство достигает теплового предела, и срабатывает троттлинг, снижающий рабочий цикл .
Обработка на устройстве обеспечивает мгновенный отклик и локальность данных, но работает в строгих электрохимических и термодинамических границах. Четырехветвевая таксономия из «Карты ограничений мобильного ML» связывает общий аккумулятор телефона и корпус с пассивным охлаждением с необходимыми слияниями ядер NPU и пределами теплового троттлинга.
Ограничения батареи и ресурсов в мобильном ML напрямую переходят в инженерные требования. Функции ML, работающие постоянно, несут налог на батарею, потому что непрерывный вывод расходует конечный энергетический бюджет телефона еще до того, как запускается остальная система.
Ограничение батареи ограничивает суммарное потребление энергии во времени. Даже если бы мы могли игнорировать время работы от батареи для подключенного к сети планшета или короткой демонстрации, термодинамика накладывает вторую границу. Электрическая мощность в конце концов превращается в тепло, которое устройство должно рассеять. Дата-центр использует активное охлаждение, чтобы отвести это тепло. Тонкое мобильное устройство полагается главным образом на пассивный теплообмен через корпус и поверхности. Так возникает тепловая стена — жесткий потолок устойчивого потребления мощности, который существует независимо от емкости батареи.
Карта ограничений мобильного ML: обработка на устройстве дает отзывчивость, приватность, автономную работу и персонализацию, но общий аккумулятор телефона и пассивная тепловая оболочка делают устойчивую энергоэффективность главным проектным ограничением.
Налог на батарею
Задача: рассмотрим развертывание детектора объектов «в реальном времени» в фоновом режиме на смартфоне. Модель потребляет 2 Вт непрерывной мощности при работе. У телефона стандартная батарея 15 Вт·ч. Может ли эта функция работать весь день? Это и есть налог на батарею, который превращает время работы от аккумулятора в ограничение энергетического бюджета мобильного ML.
Физика:
- Идеальное время работы:
- Реальность: пользователь ждет, что телефон проработает 24 часа. Непрерывная работа одной этой функции в течение дня потребовала бы 320 процентов суточного энергетического бюджета телефона.
Системный вывод: модель нельзя просто «развернуть». Методы из главы «Сжатие моделей» должны снижать и объем работы модели, и рабочий цикл, чтобы функция могла работать весь день.
Устойчивая тепловая производительность заметно ниже пиковых значений.
Это различие важно для инженерных решений: налог на батарею — задача бюджета, принципиально разрешимая снижением частоты запусков модели или увеличением емкости батареи. Тепловая стена — физический потолок. Более емкая батарея не поднимет максимальную устойчивую мощность, которую может рассеять пассивный корпус; изменения рабочего цикла и программного обеспечения могут только снизить выделение тепла. Устойчивая работа выше тепловой оболочки запускает аппаратный троттлинг независимо от оставшейся энергии батареи. Поэтому два ограничения бьют в разные точки железного закона: батарея ограничивает суммарное число операций за заряд (, проинтегрированное по времени), тогда как тепловая стена ограничивает мгновенную скорость (), которую кремний способен поддерживать.
Тепловая стена
Задача: неоптимизированная модель зрения требует пиковых 12 Вт вычислений. Можно ли развернуть ее на мобильном устройстве или она упирается в тепловую стену и мобильный предел мощности?
Сценарий: мобильная система на кристалле (SoC) допускает примерно 3 Вт для пассивного охлаждения. Допустим, неоптимизированная модель все равно выпускается; типичная трассировка троттлинга для такого пассивно охлаждаемого устройства идет в три шага:
- Рост температуры: при 12 Вт температура устройства растет примерно на 1 °C/с.
- Тепловой порог: в течение 60 с аппаратура достигает точки теплового срабатывания (80 °C), что включает троттлинг ОС.
- Троттлированная пропускная способность: модель на 100 FPS внезапно падает до 30 FPS, чтобы уложиться в тепловую оболочку.
Расчет: допустим иллюстративное снижение активной мощности в 4 раза после перепроектирования FP32 → INT8 (см. главу «Сжатие моделей»): 12 Вт ÷ 4 = 3 Вт, что приходится ровно на потолок пассивного охлаждения 3 Вт без запаса. Этот коэффициент — входной параметр сценария, а не универсальная гарантия для всей системы, которую дает одно лишь квантование.
Системный вывод: даже снижение мощности в 4 раза не создает теплового запаса: оно лишь едва достигает устойчивого предела. Физика задает жесткий потолок, который не может превысить никакая оптимизация.
Преимущества мобильного ML и ресурсные ограничения
Мобильные устройства демонстрируют промежуточные ограничения: 8–16 ГБ оперативной памяти (от среднего класса до флагманов), 128 ГБ–1 ТБ хранилища, 15–45 TOPS вычислений ИИ на нейропроцессорах26 при потреблении 3–5 Вт. Архитектуры систем на кристалле27 объединяют вычисления и память, чтобы минимизировать энергетические затраты. Емкость памяти ограничивает объем модели, а пропускная способность 51,2–77 ГБ/с ограничивает скорость перемещения весов и активаций. Ограничения батареи (емкость 15 Вт·ч–22 Вт·ч) делают оптимизацию энергии критичной: добавление 1 Вт непрерывной обработки ML к телефону, который иначе работает 24 часа, сократит время работы примерно до 9,2–11,5 часа в зависимости от емкости батареи. Специализированные мобильные фреймворки для вывода на устройстве обеспечивают аппаратно оптимизированный вывод для времени отклика интерфейса 5–50 мс.
Мобильное ML хорошо справляется с отзывчивыми сценариями при сильной локальности данных. Обработка в реальном времени может достигать задержки менее 10 мс для некоторых задач, обеспечивая время отклика интерфейса 5–50 мс в интерактивных приложениях. Локальная обработка чувствительных входов сокращает передачу данных и центральное хранение, а анклавы на устройстве, такие как Secure Enclave от Apple, дополнительно защищают биометрические данные,28 хотя сила гарантий приватности в конечном счете зависит от всей системы и модели угроз. Функции навигации, перевода и обработки медиа также могут работать без сети, если их модели и данные помещаются в мобильный бюджет. Персонализация завершает картину: модели могут использовать сигналы устройства и контекст пользователя, оставляя сырые данные локальными.
Эти преимущества требуют принять жесткие ресурсные ограничения. По сравнению с облачными развертываниями мобильные приложения часто работают в гораздо более тесных бюджетах памяти, хранилища и задержки, что ограничивает размер модели и поведение батчей. Время работы от батареи заметно для пользователя, а тепловой троттлинг может существенно ограничивать устойчивую производительность: пиковая пропускная способность NPU может заметно превышать то, что устройство способно поддерживать при длительной нагрузке. Сложность разработки множится по платформам, требуя отдельных реализаций и тщательной настройки производительности, а разнородность устройств требует нескольких вариантов модели. Проверка в магазине приложений и поэтапные релизы также могут замедлять итерации по сравнению с сервисом, полностью контролируемым его оператором.
Персональный ассистент и обработка медиа
Во всех мобильных приложениях центральная системная задача в том, что несколько коротких конвейеров должны делить один и тот же бюджет батареи и тепла. Вычислительная фотография демонстрирует задачу запуска нескольких конвейеров ML в тепловой оболочке. Современные флагманы обрабатывают каждый снимок через несколько стадий ML: портретный режим29 использует оценку глубины и сегментацию, ночной режим выравнивает несколько кадров с шумоподавлением на основе ML, а слияние HDR, сверхразрешение и оптимизация сцены идут последовательно. Инженерная задача — не отдельная модель, а конвейер: эти модели должны делить бюджет мощности 3–5 Вт и уложиться в воспринимаемую пользователем задержку затвора, что требует аккуратного планирования по CPU, GPU и NPU, чтобы избежать теплового троттлинга.
Голосовые взаимодействия демонстрируют многоуровневую архитектуру мобильного ML. Детекция слова пробуждения работает непрерывно на выделенном маломощном ядре, тогда как распознавание речи и предсказание клавиатуры используют более мощные нейроуровни. Каждый уровень работает при своей мощности, показывая, как мобильное ML распределяет нагрузки между разнородными блоками обработки внутри одной системы на кристалле.
Мониторинг здоровья и дополненная реальность доводят мобильное ML до пределов устойчивой производительности. Носимые устройства вроде Apple Watch обрабатывают данные ЭКГ и акселерометра на устройстве, чтобы сократить передачу данных, тогда как фреймворки AR требуют бюджета кадра 16,7 мс при 60 FPS для одновременной локализации, отслеживания рук и понимания сцены. Эти приложения задают предел того, что могут устойчиво выдерживать устройства с батарейным питанием и пассивным охлаждением, и определяют границу, за которой одной лишь мобильной оптимизации недостаточно.
Эти успехи могут создать обманчивое ощущение легкости. Типичная ловушка — попытка развернуть на мобильных или периферийных устройствах модели, обученные на настольных компьютерах, без изменения архитектуры. Модели, разработанные на мощных рабочих станциях, часто не работают на устройствах с ограниченными ресурсами. Настольный конвейер ResNet-50 может потребовать гигабайты, если учесть активации, батчи, буферы предобработки и накладные расходы среды выполнения, хотя одни веса FP32 занимают около 102,4 МБ. Такой конвейер, требующий 8,2 GFLOP на вывод, не может работать без изменений на типичной периферийной цели с 512 МБ ОЗУ и процессором 1 GFLOP/s. Помимо простых нарушений ресурсов, модели, оптимизированные под настольные системы, могут использовать операции, которых нет в мобильном железе, предполагать числовые форматы, недоступные во встроенных системах, или требовать пакетной обработки, несовместимой с выводом отдельных примеров. Успешное развертывание требует архитектурно-ориентированного проектирования с самого начала: семейство моделей, арифметические форматы и реализационные решения должны соответствовать целевому устройству.
Мобильное ML показывает, что полезный интеллект может работать в тепловой оболочке 3–5 Вт от батареи. Однако смартфоны по-прежнему стоят сотни долларов, требуют гигабайт памяти и ежедневной зарядки, которая требует внимания пользователя. Эти требования делают их непригодными для обширного класса приложений: мониторинга влажности почвы на ферме в тысячу акров, обнаружения структурных напряжений в тросах мостов или прослушивания редких видов в отдаленном лесу. Такие сценарии требуют не только меньшей мощности, но и качественно иного инженерного режима: устройство стоит доллары, а не сотни, память измеряется килобайтами, а не гигабайтами, и система работает без присмотра месяцами или годами. Методы мобильной оптимизации помогают, но они не могут преодолеть разрыв в доступной памяти в 10 000 раз. Нужен не уменьшенный смартфон, а принципиально другой класс аппаратуры и алгоритмов.
TinyML: повсеместное восприятие
Представьте, что вы оснащаете датчиками каждый поддон на складе, каждый трос подвесного моста, каждый улей на пасеке. Чтобы поставить «глаза и уши» на такое количество физических объектов — десятки тысяч или миллионы, — устройство должно стоить доллары, а не сотни долларов, и измеряться миллиметрами, а не сантиметрами. Смартфоны слишком дороги и слишком велики; нужно повсеместное восприятие при стоимости единицы менее десяти долларов и физических размерах в миллиметрах.
TinyML завершает спектр развертывания, доводя интеллект до физических пределов: маломощное ML с низкой стоимостью на сильно ограниченных встроенных устройствах (Janapa Reddi et al., 2022). Устройства стоимостью менее $10 и потребляющие меньше одного милливатта30 мощности делают повсеместное31 восприятие экономически практичным в массовом масштабе; MLPerf Tiny и MCUNet показывают, как такие ограничения оцениваются и оптимизируются на практике (Banbury et al., 2021; Lin et al., 2020). Это область архетипа «жесткого ограничения», где цель оптимизации смещается от максимизации пропускной способности к минимизации энергии на вывод. При работе с циклическим включением модель распознавания ключевых слов, потребляющая 10 мкДж на вывод, может работать годами от батарейки-таблетки, достигая миллионократного улучшения энергоэффективности за счет обмена емкости модели на долговечность работы. На «Масштабе аппаратуры TinyML» аннотированные отладочные платы показывают этот физический масштаб: интегрированные микроконтроллеры, массивы датчиков и штыревые разъемы, предназначенные для работы компактных моделей в изолированных средах.
Масштаб аппаратуры TinyML: отладочные платы микроконтроллеров объединяют датчики, вычислительные ядра и маломощные радиомодули на одной подложке, работая в строгих рамках SRAM килобайтного масштаба и мощности в милливаттах. Такой компактный форм-фактор смещает цель оптимизации от пиковой пропускной способности к энергии на вывод, позволяя работать многие годы от батареек-таблеток. Источник изображения: рисунок 6 в Janapa Reddi et al., 2022, распространяется по лицензии CC BY 4.0.
Работа на таком физическом масштабе требует микроконтроллеров (MCU)32, которые убирают энергозатратную инфраструктуру обычных вычислений. Мобильные и периферийные процессоры опираются на внешнюю динамическую память (DRAM), высокоскоростные шины памяти и среды выполнения операционных систем, которые потребляют сотни милливатт просто на регенерацию ячеек памяти и переключение линий шины. Микроконтроллеры полностью отказываются от внешних шин памяти, интегрируя ядро процессора, энергонезависимую флеш-память и статическую память (SRAM) на одном кремниевом кристалле (Banbury et al., 2021; Lin et al., 2020; Janapa Reddi et al., 2022). Хотя отказ от внешней сигнализации снижает активную мощность до доли милливатта, а мощность сна — до микроватт, он накладывает безжалостный потолок памяти. SRAM на кристалле физически ограничена площадью кремниевого кристалла: поскольку каждая ячейка SRAM требует шесть транзисторов (), увеличение емкости напрямую поднимает стоимость производства. Поэтому модель TinyML должна выполняться в пределах десятков-сотен килобайт SRAM без виртуальной памяти, подкачки или файла подкачки, которые смягчали бы переполнение. Получающийся энергетический разрыв между TinyML и облачным выводом («Иллюстративные опорные точки энергии на вывод») составляет не менее шести порядков величины33, а для облачных запросов LLM достигает восьми порядков, позволяя непрерывную многолетнюю работу от батареек-таблеток.34
Чтобы уместить весь конвейер вывода, от получения данных с датчика до выходного класса, в объем памяти килобайтного масштаба, нужно формализовать режим работы TinyML.
TinyML
TinyML — область машинного обучения постоянного восприятия, ограниченная памятью килобайтного масштаба и мощностью милливаттного масштаба.
- Значение: она требует, чтобы веса и код помещались во флеш-памяти, а активации и состояние среды выполнения — в SRAM на кристалле, что позволяет непрерывный вывод при бюджетах мощности в милливаттах.
- Отличие: в отличие от мобильного ML, который использует процессоры мощностью в несколько ватт и полноценную ОС, TinyML работает на микроконтроллерах с прошивкой без ОС или на операционной системе реального времени.
- Типичная ошибка: распространено заблуждение, будто TinyML — это просто «маленькие модели». На деле это парадигма, ограниченная энергией: главная метрика — энергия на вывод (микроджоули), а не только число параметров.
Это определение переосмысляет железный закон систем машинного обучения. В терминах «расширенного железного закона» TinyML накладывает физическое предусловие по емкости памяти, которое время выполнения не отражает: объем модели и объем активаций должны оставаться в пределах емкости памяти . Когда полная память измеряется килобайтами, структура модели и выделение памяти в среде выполнения определяют осуществимость еще до начала оптимизации задержки, а каждое лишнее перемещение данных тратит часть энергетического бюджета. Поэтому цель смещается от сырой пропускной способности к энергии на вывод и соответствию памяти.
Как читать числа энергии на вывод
Значения энергии из «Энергии на вывод по парадигмам» сочетают расчетные оценки энергии устройств с отдельными масштабными опорами; это не контролируемые измерения полной системы. Иллюстративная граница ResNet-50 только на A100 составляет менее 1 мс и около ~0,3 Дж, тогда как весь сервер при учете CPU, памяти и накладных расходов может потреблять около ~1 кВт. Значения в последнем столбце показывают, сколько выводов может обеспечить номинальная энергия одной батареи; это не время работы от батареи, и в них не учтены датчики, режим сна и связь.
Этот разрыв энергоэффективности TinyML помогает понять, почему локальные модели с низким энергопотреблением привлекательны для постоянного восприятия. Фактическое время работы все еще зависит от частоты выводов, мощности сна, датчиков, связи и остальной части устройства.
Энергетический разрыв между парадигмами — не вопрос степени, а масштаба: он охватывает восемь порядков величины, очерченных на «Иллюстративных опорных точках энергии на вывод». «Энергия на вывод по парадигмам» опирается на этот диапазон конкретными числами, переводя энергетическую стоимость каждой парадигмы в число выводов, которые может обеспечить одна батарея смартфона.
| Парадигма | Пример нагрузки | Энергия на вывод | Выводов на батарею (3,7 В, 3000 мА·ч) |
|---|---|---|---|
| Облако | Запрос GPT-4 | ~1 кДж | 40 запросов |
| Облако | ResNet-50 (сервер с ускорителем) | 75,5 мДж | 529 505 запросов |
| Периферия | ResNet-50 (Jetson) | 15,9 мДж | 2 511 628 запросов |
| Мобильные | MobileNet (NPU) | 2,60 мДж | 15 393 505 запросов |
| TinyML | Распознавание ключевых слов | 10 мкДж | 3 996 млн запросов |
Энергия на вывод по парадигмам: аналитические оценки энергии устройств и масштабные опорные точки с соответствующим числом выводов от одной батареи смартфона. Это не контролируемые измерения полной системы.
Работа при бюджетах мощности менее милливатта позволяет непрерывно вести восприятие без сетевого питания, но вынуждает хранить полное состояние вывода в SRAM на кристалле. Четырехколоночная таксономия из «Карты ограничений TinyML» показывает, как память килобайтного масштаба и циклические состояния сна позволяют постоянные нагрузки, одновременно ограничивая обновления модели.
Карта ограничений TinyML: мощность в милливаттах и память в килобайтах делают постоянное восприятие экономически возможным, но те же пределы заставляют модель, активации, среду выполнения и путь обновления уместиться в радикально меньшую инженерную оболочку.
Преимущества TinyML и эксплуатационные компромиссы
TinyML работает на крайних значениях аппаратных параметров. По сравнению с облачными системами развертывания TinyML обычно дают примерно в – раз меньше памяти, в зависимости от того, измеряется ли бюджет микроконтроллера мегабайтами или килобайтами, при бюджетах мощности в милливаттах. Эти жесткие ограничения позволяют месяцами или годами работать автономно35, но требуют специализированных алгоритмов, сжатия моделей и тщательного системного совместного проектирования. Устройства варьируются от отладочных комплектов размером с ладонь до чипов миллиметрового масштаба,36 обеспечивая повсеместное восприятие там, где сеть, питание или обслуживание обходятся дорого. Типичные отладочные комплекты включают Arduino Nano 33 BLE Sense (256 КБ ОЗУ, 1 МБ флеш-памяти, 20–40 мВт) и ESP32-CAM (520 КБ ОЗУ, 4 МБ флеш-памяти, 50–250 мВт).
Полностью работая на устройстве, система получает архитектурные возможности, которых не дают сетевые системы. Отказ от беспроводной передачи полностью убирает задержку внешней связи, обеспечивая детерминированное время отклика с низкой задержкой для жестких контуров восприятия и управления. Отказ от радиоканалов также меняет экономику развертывания: когда стоимость единицы узла падает до однозначного числа долларов, плотная инструментация тысяч физических объектов становится финансово оправданной. Работа на бюджетах энергии в микроджоулях дополнительно усиливает экономический эффект, позволяя годами работать автономно от недорогих батареек-таблеток или сбора энергии из окружающей среды. Наконец, локальность обеспечивает изоляцию данных: поскольку сырые потоки датчиков обрабатываются на интерфейсе захвата и никогда не передаются по сети, поверхность раскрытия чувствительных данных заметно сокращается, хотя формальная приватность по-прежнему требует аппаратной защиты памяти и механизмов безопасной загрузки.
Эти возможности требуют существенных компромиссов. Вычислительные ограничения жесткие: микроконтроллеры обычно имеют от до байт ОЗУ, что вынуждает модели и промежуточные активации уместиться в диапазоне от десятков килобайт до нескольких мегабайт в зависимости от нагрузки. Микроконтроллеры придерживаются строгого двухуровневого разделения памяти: статические веса модели и скомпилированный код находятся в энергонезависимой флеш-памяти (часто несколько мегабайт), тогда как изменяемые активации и буфер среды выполнения (тензорная арена) должны помещаться в гораздо меньшую SRAM на кристалле (часто менее 256 КБ). В результате пиковый объем промежуточных активаций — а не хранение статических параметров — часто оказывается связывающим барьером, который не дает модели выполниться. Встроенная разработка также требует совместного проектирования на всех уровнях стека: инженеры вручную управляют пулами памяти, отлаживают прошивку без абстракций ОС и оптимизируют ядра операторов непосредственно под ограниченные наборы инструкций.
Работа в этих физических границах создает особые проблемы жизненного цикла и надежности. Устройство, собирающее энергию из окружающей среды, может удовлетворять своему долгосрочному среднему бюджету мощности, но все равно выйти из строя, когда запасенная энергия исчерпывается до следующего сбора. Поэтому его рабочий цикл должен учитывать и энергию на вывод, и время доступности энергии. Качество модели также может страдать от агрессивного квантования и прореживания: перевод 32-битных весов с плавающей запятой в 8-битные целые (INT8) экономит память, но может ухудшить точность и устойчивость на входах датчиков вне обучающего распределения. Кроме того, гибкость после развертывания резко ограничена: модели компилируются прямо в монолитные образы прошивки, поэтому обновления в полевых условиях зависят от медленных и рискованных процессов перепрошивки. Фрагментация экосистемы37 между производителями микроконтроллеров и фреймворками ML создает дополнительные накладные расходы и трудности переносимости.
Экологический и медицинский мониторинг
Режим работы TinyML становится необходимым, когда бюджеты мощности, стоимость единицы и физическая изоляция исключают все платформы более высокого уровня. Детекция слова пробуждения — самый знакомый потребительский пример: специализированный маломощный компонент слушает непрерывно, обрабатывает звук локально и включает более мощные компоненты, только когда обнаружена фраза пробуждения, снижая среднее потребление мощности.38 Точное земледелие использует то же давление локальности с другой стороны: FarmBeats применяла датчики, камеры, дроны и локальную обработку на шлюзе, чтобы сократить перемещение сырых данных там, где связь на ферме была дорогой (Vasisht et al., 2017). TinyML доводит логику локальности дальше, когда сам узел восприятия должен работать при бюджетах в милливаттах.
Охрана дикой природы использует TinyML для удаленного экологического мониторинга: аудиосенсоры на солнечных батареях обрабатывают непрерывные акустические потоки на устройстве для определения видов. Передача периодических сводок обнаружений вместо сырого непрерывного звука сокращает восходящий поток данных с 4,3 ГБ в день до 400 КБ в день, то есть в 10 750 раз, что экономит энергию в развертываниях вне электросети. Медицинские носимые устройства применяют ту же логику локальной обработки к физиологическому мониторингу. Чувствительность, частота дискретизации, мощность и срок службы батареи — это целевые показатели проверки, специфичные для устройства, а не универсальные свойства аппаратуры TinyML. Локальная обработка минимизирует непрерывную беспроводную передачу и защищает приватность пользователя, тогда как полное время работы остается ограниченным потреблением датчика, мощностью радиомодуля, рабочим циклом и энергией сна.
Эти четыре парадигмы образуют эксплуатационный континуум, ограниченный скоростью света, теплоотводом и передачей сигналов в памяти. При проектировании системы ML инженерия начинается с систематического сопоставления ограничений приложения с этими физическими границами.
Выбор парадигмы
Архитектор, выбирающий, где запускать функцию ML, редко оптимизирует одно измерение. Правило приватности может запрещать облачную обработку, бюджет задержки — удаленный вывод, объем памяти может превышать возможности мобильного устройства, а целевая стоимость — исключать постоянно работающее периферийное железо. Облако, периферия, мобильные устройства и TinyML — это эксплуатационные оболочки для таких конфликтов, поэтому выбор между ними требует единой рамки сравнения и структурированного процесса решения.
Сравнительный анализ компромиссов
Решения о развертывании требуют оценки компромиссов «задержка против пропускной способности» между парадигмами в разных физических и эксплуатационных оболочках. Выбор между облачными, периферийными, мобильными и TinyML-целями требует одновременного балансирования задержки, рассеяния мощности, финансовой стоимости, раскрытия данных и сложности программного обеспечения. В «Сравнении парадигм по четырнадцати измерениям» эти четыре парадигмы сопоставлены по четырнадцати аппаратным и системным измерениям, которые задают базовые оболочки, определяющие осуществимость развертывания.
| Аспект | Облачное ML | Периферийное ML | Мобильное ML | TinyML |
|---|---|---|---|---|
| Место обработки | Централизованные облачные серверы (дата-центры) | Локальные периферийные устройства (шлюзы, серверы) | Смартфоны и планшеты | Сверхмаломощные микроконтроллеры и встроенные системы |
| Задержка | 100–500 мс | 10–100 мс | 5–50 мс | 1–10 мс |
| Вычислительная мощность | Очень высокая (несколько GPU/TPU) | Высокая (периферийные GPU) | Умеренная (мобильные NPU/GPU) | Очень низкая (MCU/маломощные процессоры) |
| Емкость хранилища | Облачного масштаба (петабайты и больше) | Большая (терабайты) | Умеренная (гигабайты) | Очень ограниченная (килобайты–мегабайты) |
| Потребление энергии | Очень высокое (кВт–МВт) | Высокое (сотни ватт) | Умеренное (3–5 Вт) | Очень низкое (мВт) |
| Масштабируемость | Высокая (ограничена мощностями провайдера) | Хорошая (ограничена периферийным железом) | Умеренная (масштабирование по устройствам) | Ограниченная (фиксированное железо) |
| Раскрытие данных | Удаленная обработка расширяет поверхность | Локальная обработка сокращает передачу | Обработка на устройстве сокращает передачу | Сырые данные могут оставаться локально |
| Требуемое подключение | Постоянное высокоскоростное | Прерывистое | Необязательное | Отсутствует |
| Автономная работа | Нет | Хорошая | Отличная | Полная |
| Обработка в реальном времени | Зависит от сети | Хорошая | Очень хорошая | Отличная |
| Стоимость | Высокая (тысячи $/месяц) | Умеренная (сотни–тысячи $) | Покупка устройства ($200–$1000+; часто собственность пользователя) | Очень низкая ($1–$10) |
| Требования к железу | Облачная инфраструктура | Периферийные серверы/шлюзы | Современные смартфоны | MCU/встроенные системы |
| Сложность разработки | Высокая (нужна облачная экспертиза) | Средне-высокая (периферия + сети) | Умеренная (мобильные SDK) | Высокая (встроенная экспертиза) |
| Скорость развертывания | Быстрая | Умеренная | Быстрая | Медленная |
Сравнение парадигм по четырнадцати измерениям: всестороннее сопоставление по четырнадцати измерениям, важным для решений о развертывании. Облачное ML дает самые сильные вычисления, тогда как локальная обработка может сокращать передачу и подверженность централизованного хранения, но сама по себе не гарантирует приватность. Эта таблица служит основным справочником для системных архитекторов, оценивающих варианты развертывания.
Этот контраст отражает фундаментальное напряжение между локальностью данных и вычислительным масштабом. Удаленная обработка расширяет сетевую поверхность атак и требует надежного транспортного шифрования и изоляции арендаторов; локальная обработка ограничивает сырые данные устройством, снижая риск на входе, но не устраняя физических рисков побочных каналов. Архетипы нагрузок из «Анализа нагрузок» напрямую соотносятся с этими границами: каждый архетип тяготеет к парадигмам, которые снимают его основное узкое место.
Чтобы визуализировать эти многомерные компромиссы, «Лепестковые диаграммы сравнения парадигм» оценивает четыре парадигмы по порядковой шкале 0–10 по двум ортогональным эксплуатационным профилям: подграфик (а) сопоставляет сырую пропускную способность с задержкой и тепловой эффективностью, а подграфик (б) оценивает эксплуатационную автономность по независимости от связи, локальности данных, детерминированному отклику в реальном времени и работе без сети.
Лепестковые диаграммы сравнения парадигм: две лепестковые диаграммы сравнивают производительность и эксплуатационные характеристики облачной, периферийной и мобильной парадигм и TinyML по порядковым оценкам 0–10. Левая диаграмма сопоставляет вычислительную мощность, возможность низкой задержки, масштабируемость и энергоэффективность; правая — независимость от связи, локальность данных, работу в реальном времени и работу без сети. В обеих диаграммах больший многоугольник означает более сильные показатели: облачное ML достигает пика по вычислениям и масштабируемости, а TinyML — по энергоэффективности, локальности данных и работе без сети.
Расходящиеся профили на «Лепестковых диаграммах сравнения парадигм» показывают, что ни один уровень развертывания не доминирует по всем эксплуатационным метрикам. Вместо этого каждая парадигма переносит инженерную сложность в свою подсистему. Облачные развертывания требуют экспертизы в распределенном консенсусе, многоарендной сети и динамическом управлении затратами. Периферийные развертывания и TinyML накладывают жесткие физические ограничения на тепловую оболочку и емкость памяти, требуя оптимизации «на голом железе», абстракции гетерогенного оборудования и удаленной оркестрации парка. Мобильные развертывания работают на оборудовании, принадлежащем пользователю; это снижает затраты на инфраструктуру, но вводит фрагментацию драйверов конкретных платформ, агрессивный троттлинг фоновых задач операционной системы и строгие энергетические бюджеты.
Распространенный архитектурный провал — выбирать цель развертывания только по точности модели, а аппаратные ограничения считать второстепенными деталями оптимизации. Неадаптированная модель, которая в офлайн-оценке дает 99 процентов точности, становится нежизнеспособной, если ее объем памяти вызывает подкачку на мобильном железе или если непрерывный вывод запускает тепловой троттлинг за секунды. Физические инварианты — емкость памяти, пределы теплоотвода и задержка сетевого транзита — должны служить ранними критериями отсева еще до начала разработки модели, отсекая недопустимые цели развертывания до того, как будут потрачены ресурсы на обучение.
Рамка решения
Систематический выбор парадигмы опирается на многоуровневую рамку решений, упорядоченную по скорости, с которой ограничение делает архитектуру недопустимой. Иерархия отсева последовательно проверяет четыре барьера: регуляторную приватность, физическую задержку, локальную вычислительную емкость и экономику жизненного цикла. «Отсев решений о развертывании» организует эти уровни решения так, чтобы отсеять недопустимые варианты до того, как инженерные усилия будут вложены в невыполнимую цель.
Отсев решений о развертывании: четыре уровня организуют вопросы приватности, задержки, потребности в вычислениях и стоимости, затем связывают их ветви с вариантами облака, периферии, мобильных устройств и TinyML. Сходящиеся ветви и ветвь низкой стоимости, ведущая и к мобильным, и к TinyML-вариантам, делают эту схему инструментом отсева, а не детерминированным выбором.
Блок-схема работает как грубый фильтр, а не как детерминированный алгоритм с одним путем. Верхние барьеры накладывают жесткие физические и регуляторные ограничения, которые исключают целые ветви независимо от того, насколько желанны их нижние варианты. Если регуляторные правила или суверенитет данных запрещают передачу за пределы устройства, удаленная облачная обработка исключается сразу. Аналогично, если физические сроки меньше времени сетевого цикла «туда и обратно», парадигмы, зависящие от сети, отбрасываются независимо от вычислительной мощности сервера. Когда ветви сходятся на уровне стоимости — где и мобильное ML, и TinyML выступают как недорогие варианты, — рамка сужает пространство проектирования до управляемого набора кандидатов для подробного бенчмаркинга.
Сценарий экстренного торможения автомобиля показывает, как барьер задержки срабатывает раньше, чем вступают в силу вычислительная мощность или стоимость.
Экстренное торможение автомобиля
Сценарий: система машинного зрения автономного автомобиля выполняет детекцию пешеходов в реальном времени для экстренного торможения при жестком сквозном бюджете задержки 100 мс.
Диагностика: сценарий предполагает 50–150 мс сетевой задержки «туда и обратно» для переноса в облако и 10–30 мс на локальную детекцию объектов на автомобильном периферийном ускорителе (300 GFLOP/s). При этих допущениях одна лишь удаленная ветвь заставляет автомобиль проехать 2,8 м до начала торможения.
Системный урок: жесткие ограничения реального времени для безопасности исключают перенос в облако независимо от доступности вычислений. Ограничения задержки задают архитектуру периферийного ML, а облачные соединения сохраняются для офлайн-обучения моделей и агрегации телеметрии.
Прохождение физических и экономических барьеров отсева устанавливает техническую осуществимость, но архитектор должен также учитывать эксплуатационную сопровождаемость. Развертывание модели на тысячах периферийных узлов или миллионах микроконтроллеров создает постоянные накладные расходы жизненного цикла: автоматизированные обновления прошивки, внеполосную телеметрию, распределенный мониторинг дрейфа и восстановление после отказов оборудования. Организация, приспособленная к облачной эксплуатации, может не иметь встроенных инструментальных цепочек и инфраструктуры физического тестирования, необходимых для поддержки периферийных или TinyML-целей в масштабе.
Помимо эксплуатационных требований конкретных уровней железа стоит предшествующий системный вопрос: оправдывает ли функция вообще развертывание машинного обучения. Глубокие нейронные сети налагают заметное бремя сопровождения, которого традиционное программное обеспечение избегает. Прежде чем принимать любую архитектуру ML, инженер должен оценить, может ли детерминированная эвристика решить задачу при малой доле эксплуатационных затрат.
Налог на сложность
Рассмотрим задачу классификации, которую можно решить либо детерминированными эвристическими правилами, либо конвейером глубокого обучения. Эвристика требует пятидесяти строк кода, почти не расходует вычисления, требует примерно одного часа в месяц на обновление правил и не демонстрирует дрейфа распределения. Система ML может потребовать всего пятьдесят строк определения модели, но вносит около 2 000 строк вспомогательной инфраструктуры для приема признаков, журналирования телеметрии, мониторинга дрейфа и управления драйверами GPU, а также 40 часов в месяц на диагностику дрейфа данных и сопровождение конвейеров.
Модель ML, которая повышает точность с 90 до 95 процентов, дает чистый отрицательный результат по инженерным усилиям, если при этом расширяет эксплуатационное сопровождение в 40 раз. Инженерия систем машинного обучения сосредоточена на минимизации этих накладных расходов с помощью устойчивых архитектур; когда постоянные затраты на сопровождение превышают ценность предельных статистических выигрышей, детерминированное программное обеспечение остается правильным системным решением.
Этот компромисс переосмысляет выбор модели как системную оптимизацию, которая охватывает пределы физического выполнения, капитальные затраты и постоянное сопровождение качества предсказаний. Когда этот налог на сложность перевешивает эксплуатационную ценность улучшенных статистических предсказаний, поддержание развертывания ML активно ухудшает общую эффективность системы.
Проектирование системы
Центральный компромисс часто — точность против сложности.
Барьеры решения
- Базовый уровень: измерили ли вы точность простой эвристики (регулярные выражения, логистическая регрессия) до обучения глубокой сети?
- Стоимость инфраструктуры: оправдывает ли прирост точности на 2 процента от трансформера десятикратный рост стоимости вывода и бремя сопровождения по сравнению с меньшей моделью?
Работа с этими компромиссами показывает, что выбор парадигмы — это архитектурная оптимизация, ограниченная физическими инвариантами вычислений, коммуникации и хранения. Рамка решения задает базовую осуществимость, а главы «Бенчмаркинг» и «MLOps» описывают соответствующие практики измерения и эксплуатационного жизненного цикла; однако в реальных приложениях часто возникают взаимно несовместимые ограничения. Интеллектуальной системе может понадобиться обучение петабайтного масштаба вместе с откликом менее миллисекунды и приватностью без связи. Когда ни один уровень сам по себе не может удовлетворить эти конфликтующие физические границы, системная инженерия преодолевает разрыв, распределяя нагрузку между несколькими средами эксплуатации.
Гибридные архитектуры
Рамка решения («Отсев решений о развертывании») сужает набор осуществимых парадигм для приложения, проверяя кандидатные системы на соответствие отдельным физическим ограничениям. Однако производственные нагрузки редко работают при едином ограничении на протяжении всего жизненного цикла. Управление в реальном времени требует контуров отклика менее миллисекунды, непрерывное восприятие — оболочек мощности менее милливатта, а представление большой емкости — кластеров ускорителей с памятью в несколько гигабайт. Ни одна аппаратная платформа не удовлетворяет всем трем требованиям одновременно: размещение всей нагрузки в облаке нарушает сроки задержки и пределы сетевой пропускной способности, а ее ограничение микроконтроллером лишает память и арифметической пропускной способности. Производственные системы разрешают это противоречие с помощью гибридных архитектур, распределяя вычислительный конвейер между несколькими аппаратными уровнями так, чтобы каждая стадия выполнялась там, где ее связывающее ограничение обходится дешевле всего. Разделение труда определяют три схемы интеграции.
Схемы интеграции
Три основные гибридные схемы ML различаются тем, какая физическая граница определяет разбиение: разделение «обучение — обслуживание» (train-serve split), иерархическая обработка или постепенное развертывание. Выбор схемы — решение по железному закону: каждая стадия вычислений должна выполняться там, где ее связывающий член — будь то пропускная способность , локальный нижний предел задержки или емкость памяти — дает наименьший системный штраф.
При разделении «обучение — обслуживание» обучение выполняется в централизованных дата-центрах, а вывод работает локально на периферийных, мобильных или встроенных устройствах. Такое разделение снимает фундаментальную асимметрию между оптимизацией модели и ее выполнением. Обучению нужны обратное распространение, хранение состояния оптимизатора (например, векторы моментов и дисперсий в Adaptive Moment Estimation (Adam), которые требуют в 8–16 раз больше памяти, чем сами параметры) и высокопроизводительный пакетный параллелизм на плотных структурах ускорителей. Вывод же выполняет только прямой проход, обрабатывает малые батчи или отдельные токены и должен удовлетворять жестким локальным ограничениям по задержке и приватности. В основе экономики этого разделения лежит амортизация: высокая фиксированная стоимость обучения распределяется на миллионы запросов прямого прохода, обслуживаемых локально без повторяющихся расходов на сетевую передачу.39
Гибридное ML
Гибридное машинное обучение — стратегия развертывания, которая распределяет конвейер ML между двумя и более уровнями развертывания, назначая каждую стадию в соответствии с ее ограничениями по задержке, вычислениям, данным и эксплуатации.
- Значение: гибридные архитектуры используют аддитивную структуру железного закона: периферийный уровень может сокращать для чувствительных ко времени предобработки и вывода, а облачный уровень может давать , нужный для обучения, переобучения и тяжелого пакетного вывода. Разделение следует инварианту локальности данных: сравните полные локальный и удаленный пути каждой стадии, отбросьте пути, не укладывающиеся в срок обслуживания, и затем выберите из осуществимых альтернатив.
- Отличие: в отличие от развертывания только в облаке (которое принимает штраф за расстояние для всех стадий) или только на периферии (которое принимает ограниченный для всех стадий), гибридное ML динамически назначает каждую стадию конвейера уровню, где минимизирован ее связывающий член железного закона.
- Типичная ошибка: распространено заблуждение, будто гибридное ML — это просто «запуск двух моделей». На деле участвующие уровни должны разделять синхронизированное состояние — определения признаков, версии моделей и логику предобработки, — чтобы их пути давали согласованные результаты. Без такой синхронизации на границах уровней возникает перекос обучения и обслуживания.
При иерархической обработке вычисления каскадируются по уровням, последовательно отфильтровывая и агрегируя данные и согласуя объем коммуникации с доступной пропускной способностью межсоединений. Потоки датчиков на физической периферии часто превышают пропускную способность восходящего канала глобальной сети (WAN); непрерывная передача сырой несжатой телеметрии в дата-центр насыщает сетевые каналы и тратит мощность радиомодуля. Чтобы не допустить насыщения сети, ранние уровни фильтруют данные локально: маломощные детекторы аномалий работают на микроконтроллерах TinyML, периферийные шлюзы агрегируют и сопоставляют временные признаки с нескольких датчиков, а облачные кластеры получают только аномальные события или агрегированные сводки для глобальной аналитики. При обслуживании вывода иерархическая обработка часто принимает форму каскада уверенности. Компактная модель с низкой задержкой на локальном устройстве сначала оценивает вход. Если уверенность предсказания превышает калиброванный порог , устройство сразу возвращает результат, полностью минуя сеть. Только неоднозначные или низкоуверенные входы запускают передачу полезной нагрузки по WAN к большой облачной модели, что минимизирует медианную задержку обслуживания при сохранении пиковой точности модели.
При постепенном развертывании инженерная команда выводит семейство специализированных вариантов модели из единой архитектуры или общего обучающего корпуса, подгоняя каждый вариант под объем памяти, арифметическую интенсивность и тепловые пределы конкретного уровня. Вместо того чтобы навязывать одну модель всем устройствам, разработчики применяют структурированное сжатие — посттренировочное квантование, прореживание и дистилляцию знаний, — чтобы получить артефакты для каждого уровня вдоль кривой Парето «точность — эффективность». Современные голосовые интерфейсы иллюстрируют такую многоуровневую последовательность: непрерывная детекция слова пробуждения работает в рамках бюджета SRAM постоянно включенного микроконтроллера (занимая десятки килобайт для эталонных нейросетей TinyML и потребляя от доли милливатта до милливатт на специализированном маломощном железе); локально обнаруженные триггерные фразы будят нейропроцессорный блок на устройстве, который разбирает акустические признаки; а неограниченное семантическое понимание передается большим моделям масштаба параметров в облачной инфраструктуре.
Когда доступны три схемы интеграции, выбор становится задачей сопоставления ограничений: нужно взять ту схему, профиль компромиссов которой совпадает с доминирующим узким местом системы. В «Руководстве по выбору гибридной схемы» суммированы компромисс, условия, благоприятствующие каждой схеме, и условия, которые ее не рекомендуют.
| Схема | Компромисс | Выбирать, когда | Избегать, когда |
|---|---|---|---|
| Разделение «обучение — обслуживание» | Стоимость обучения против задержки вывода | Обучению нужен масштаб, которого нет у вывода; приватность важна для вывода, но не для обучения | Модели нужно непрерывное обучение на развернутых данных |
| Иерархическая обработка | Локальная автономность против глобальной оптимизации | Объем данных превышает пропускную способность передачи; решения нужны в нескольких временных масштабах | Вся обработка может идти на одном уровне; сеть надежна и быстра |
| Постепенное развертывание | Качество модели против охвата развертывания | Одна и та же модель нужна на нескольких уровнях возможностей; нужна мягкая деградация | Модель нельзя осмысленно сжать; единственная цель развертывания |
Руководство по выбору гибридной схемы: компромисс, благоприятствующие условия и исключающие условия для каждой из трех гибридных схем интеграции. Выбор сопоставляет профиль компромисса схемы с доминирующим узким местом системы.
Производственные развертывания редко реализуют эти схемы по отдельности: сложные системы сочетают их на разных фазах конвейера. Например, автономный автомобиль сочетает постепенное развертывание, чтобы уместить специализированные визуальные базовые сети (backbone) в бортовую вычислительную оболочку; иерархическую обработку, которая разрешает конфликт между немедленным экстренным торможением на локальном железе в миллисекундном масштабе и планированием траектории в масштабе секунд; и разделение «обучение — обслуживание», которое загружает аномальные фрагменты вождения в облачные кластеры для переобучения на уровне парка. Распределенные парадигмы обучения с сохранением приватности, например федеративное обучение, расширяют эту композицию в случаях, когда сырые обучающие данные не могут покидать клиентские устройства из-за регуляторных или приватных ограничений.
Интеграция производственных систем
Производственные гибридные системы координируют несколько уровней через структурированные каналы взаимодействия. Как показано на «Взаимодействиях гибридной системы», многоуровневые архитектуры поддерживают два встречных потока: скомпилированные артефакты моделей развертываются вниз от облачных кластеров обучения к периферийным, мобильным и TinyML-целям выполнения, тогда как сырые потоки датчиков, отфильтрованные признаки и телеметрия вывода поднимаются вверх к централизованным хранилищам данных.
Взаимодействия гибридной системы: данные поднимаются вверх от датчиков через уровни обработки к облачной аналитике, а обученные модели развертываются вниз к точкам вывода на периферии, в мобильных устройствах и TinyML. Пять типов связей (развертывание, данные, результаты, помощь и синхронизация) задают распределенную архитектуру, в которой каждая парадигма вносит уникальные возможности.
Производственные системы демонстрируют эти схемы интеграции, размещая границу каждого уровня у отдельного физического узкого места:
- Детекция дефектов на производстве: сборочные линии с высокой частотой циклов требуют детерминированного визуального контроля менее 10 мс. Передача потоков камер высокого разрешения по WAN в дата-центр нарушает сроки контроля и исчерпывает пропускную способность восходящего канала завода. Система использует разделение «обучение — обслуживание»: централизованная облачная инфраструктура с модулями из нескольких ускорителей обучает модели зрения высокой емкости на исторических базах дефектов, затем компилирует и квантует веса для выполнения на периферийных серверах цеха и во встроенных умных камерах. Эти ускорители на площадке выполняют вывод через локальные интерфейсы камер PCIe или MIPI, гарантируя ограниченную задержку без внешних сетевых зависимостей.
- Мониторинг сельского хозяйства: развернутые на сотнях гектаров удаленные почвенные зонды работают от батареек-таблеток или небольших солнечных сборщиков и обмениваются данными по маломощным радиоканалам LPWAN или LoRa с низкой скоростью передачи и высокой энергией на бит. Непрерывная передача телеметрии влажности и температуры исчерпывает запас батареи за дни. Иерархическая обработка оставляет высокочастотную выборку и базовое обнаружение аномалий микроконтроллерам TinyML, работающим при бюджетах мощности менее милливатта. Когда появляются аномалии, локальные периферийные шлюзы агрегируют измерения по пространственным кластерам зондов и передают по сотовой магистрали только сжатые сводки на уровне поля в облачные серверы, отвечающие за расписание орошения по всей ферме.
- Носимый фитнес-трекинг: умные часы с батарейным питанием работают в жесткой тепловой оболочке, где рассеяние непрерывно работающего процессора должно оставаться ниже . Система применяет постепенное развертывание в архитектуре шлюзов: легкие целочисленные ядра работают на встроенном микроконтроллере, отслеживая движение в реальном времени и обнаруживая пороги частоты сердечных сокращений; промежуточные биометрические данные синхронизируются по Bluetooth Low Energy (BLE) с парным смартфоном, который использует мобильные нейродвижки и гигабайты DRAM для классификации сложных паттернов активности; наконец, смартфон передает периодические сжатые сводки по Wi-Fi или сотовым сетям в облачную инфраструктуру для долгосрочного моделирования здоровья.
Почему гибридные подходы работают
Хотя четыре уровня развертывания различаются на порядки величины по доступной энергии, объему памяти и вычислительной пропускной способности, они опираются на одни и те же системные основания. На «Сближении систем ML» структурная иерархия показывает, как разные цели развертывания зависят от общих принципов управления данными, абстракций выполнения «аппаратура — ПО» и планирования ресурсов.
Сближение систем ML: несмотря на огромные различия ресурсов между облачным, периферийным, мобильным уровнями и TinyML, все развертывания сходятся на трех общих системных основах: конвейеры данных, управление ресурсами и архитектура «аппаратура — ПО». Эти общие опоры, в свою очередь, поддерживают единые требования к оптимизации производительности, эксплуатационному мониторингу и надежной инженерии.
Это архитектурное сближение объясняет, почему инженерные оптимизации переносятся в обе стороны между масштабами железа: они нацелены на одни и те же физические узкие места. На всех уровнях чтение операнда из внешней памяти стоит на порядки больше энергии и задержки, чем арифметическая операция. Поскольку стена памяти управляет и встроенным микроконтроллером, и складским ускорителем, методы, разработанные в условиях крайних периферийных ограничений, напрямую снимают узкие места в дата-центре. Представления с пониженной точностью (например, FP8, INT8 и INT4), изначально созданные, чтобы уместить веса модели в мегабайты мобильной DRAM или килобайты SRAM микроконтроллера, решают ту же экономическую задачу в облачных кластерах: вдвое сокращают трафик DRAM и умножают эффективную пропускную способность тензорных ядер («Сжатие моделей»). Аналогично, слияние операторов и статическая подготовка памяти, разработанные для предотвращения выгрузки за пределы кристалла в мобильных SoC, напрямую уменьшают трафик HBM при облачном авторегрессивном декодировании. В обратную сторону методы разбиения вычислительных графов между распределенными облачными кластерами (глава «Обучение моделей») дают базовый формализм для разбиения стадий конвейера между разнородными мобильными SoC, содержащими отдельные CPU, GPU и нейропроцессорные блоки.
Общая системная основа распространяется на инженерию данных (глава «Инженерия данных»), сжатие моделей (глава «Сжатие моделей») и эксплуатационные жизненные циклы (глава «MLOps»). Эти инженерные принципы применимы, будь целью выполнения многоузловой модуль TPU или сверхмаломощный микроконтроллер ESP32. Поскольку базовые абстракции остаются инвариантными, инвариантны и их уязвимости: дрейф распределения данных, устаревание модели и деградация телеметрии повторяются на каждом уровне, требуя единой дисциплины мониторинга по всей гибридной иерархии.
Гибридные схемы ML
Гибридные архитектуры работают тогда, когда работа распределена между уровнями, а не когда один и тот же конвейер копируется повсюду.
Схемы интеграции
- Разделение «обучение — обслуживание»: можете ли вы объяснить, почему обучение в облаке и обслуживание на периферии или мобильном устройстве часто экономически оптимальны, даже когда модель работает локально?
- Иерархическая обработка: можете ли вы описать, что делает каждый уровень в конвейере «датчик → периферия → облако», и почему перенос части решений вниз сокращает одновременно задержку и пропускную способность?
- Постепенное развертывание: можете ли вы объяснить, как одно семейство моделей становится несколькими развернутыми артефактами (облако, периферия, мобильные устройства, TinyML) благодаря систематическому сжатию?
Проверки здравомыслия проекта
- Выбор границы: для конкретного приложения можете ли вы обосновать, где должна проходить граница уровней (задержка, приватность, пропускная способность, мощность), а не только то, какую модель использовать?
- Синхронизация состояния: можете ли вы указать, какие определения признаков, версии моделей и логика предобработки должны оставаться синхронизированными между уровнями?
Системная энтропия: почему развертывание — не конец
Во всех парадигмах развертывания, обобщенных на «Сближении систем ML», системы ML имеют эксплуатационную уязвимость, которой нет у классического программного обеспечения. В традиционных вычислениях скомпилированный бинарный файл работает по детерминированному контракту: пока ячейки памяти сохраняют заряд, шины процессора передают биты без искажений, а входные буферы удовлетворяют заявленным предусловиям, процедура сортировки или обращения матрицы выполняется одинаково миллионы раз. Машинное обучение нарушает это постоянство. По таксономии D·A·M алгоритм () и машина () после развертывания остаются статичными: веса модели находятся в памяти, а среда выполнения исполняет один и тот же вычислительный граф при каждом прямом проходе. Но распределение эксплуатационных данных () непрерывно меняется по мере изменения поведения пользователей, дрейфа калибровки датчиков и колебаний среды. Поскольку параметры модели представляют собой эмпирическую подгонку под фиксированное обучающее распределение , любое расхождение живого распределения порождает системную энтропию: постоянное ухудшение качества предсказаний, которое происходит даже тогда, когда код, веса модели и среда выполнения остаются побайтно идентичными.
Диагностическое приближение из «уравнения деградации качества систем ML» формализует эту скорость деградации: качество системы снижается по мере роста статистического расстояния между обучающим и живым распределениями, масштабированного чувствительностью модели к сдвигу распределения:
Поскольку движки вывода сообщают об успехе, пока матричные умножения завершаются без числовых исключений и ошибок памяти, статистическая деградация остается невидимой для традиционного мониторинга инфраструктуры. Модель без мониторинга продолжает выдавать предсказания с высокой уверенностью, тогда как ее эксплуатационная полезность неуклонно падает. Поэтому надежность системы требует непрерывной статистической телеметрии, чтобы обнаруживать, когда дрейф распределения требует обновления модели, — эксплуатационная дисциплина, разобранная в главе «MLOps».
Когда модель без мониторинга напрямую связана с автоматическим исполнением, статистическая деградация быстро перерастает в физический или финансовый сбой. Крах Zillow Offers показывает, как накапливающаяся ошибка оценки в разомкнутой системе может уничтожить целое подразделение бизнеса.
Крах Zillow Offers (2021)
Контекст: Zillow, площадка для торговли недвижимостью, запустила «Zillow Offers», чтобы покупать дома напрямую в рамках бизнеса iBuying, который зависел от прогноза цен на жилье и экономики перепродажи (Zillow Group, 2021).
Механизм: Zillow сообщила, что покупала дома по ценам выше своих пересмотренных оценок будущих цен продажи, а ограничения пропускной способности перепродажи задерживали некоторые сделки (Zillow Group, 2021). Неопределенность прогноза превратилась в риск запасов, потому что система связывала оценки цен с обязательствами по покупке.
Последствия: Zillow списала 304 миллиона долларов жилищных запасов, сократила 25 процентов персонала (2000 сотрудников) и окончательно закрыла подразделение Offers.
Реакция: более безопасная конструкция ограничивала бы риск запасов, сохраняла ручные переопределения и ставила автоматические выключатели между неопределенностью прогноза и решениями о покупке.
Системный урок: сдвиг распределения превращает статистическую деградацию в серьезный деловой риск, когда программное обеспечение напрямую связывает предсказания с действиями в балансе. Производственные системы в динамичной среде требуют автоматических выключателей и петель обратной связи, которые ограничивают реальный риск, когда живые распределения ошибок расширяются.
Провал Zillow Offers показывает, что система машинного обучения включает и предсказательную модель, и эксплуатационную петлю обратной связи, которая действует на ее выходы. Рассмотрение развертывания как окончательной передачи, при которой обученная модель замораживается и оставляется работать без присмотра, игнорирует реальность системной энтропии. Статистическая деградация данных () неизбежно подрывает гарантии алгоритма () и машины (). Защита производственного конвейера требует инженерных мер по всей архитектуре — от телеметрии дрейфа входов и шлюзов валидации до автоматических выключателей. Однако управление системной энтропией — лишь одна часть эксплуатационной дисциплины; перемещение по физическим ограничениям развертывания также требует отказа от укоренившихся допущений, перенесенных из классической инженерии программного обеспечения.
Заблуждения и ловушки
Помимо статистической деградации, инженеры нередко попадают в архитектурные заблуждения о развертывании ML. Физические ограничения, управляющие перемещением данных, теплоотводом и балансом аппаратуры, создают контринтуитивное поведение, которое ставит под сомнение стандартную интуицию инженерии программного обеспечения. Приведенные ниже заблуждения и ловушки описывают типичные режимы отказа, в которых системы критически не соответствуют своим физическим эксплуатационным оболочкам.
Заблуждение и ловушка
Заблуждение: одна парадигма развертывания решает все задачи ML.
Физические ограничения создают жесткие границы, которые не может охватить ни одна парадигма. Обсуждение стены памяти в «Балансе системы и аппаратуре» показывает, что пропускная способность памяти, ее емкость и задержка доступа растут гораздо медленнее сырых арифметических вычислений, создавая разные физические узкие места на уровнях развертывания. «Сравнение парадигм по четырнадцати измерениям» перечисляет иллюстративные эксплуатационные оболочки, а не границы задержки, основанные только на физике. Система робототехники реального времени, которой нужен отклик менее 10 мс, не может использовать удаленный облачный путь, сетевой цикл «туда и обратно» которого превышает этот бюджет, а модель языка с миллиардом параметров не может уместиться в 256 КБ SRAM микроконтроллера независимо от сжатия. Устойчивые архитектуры часто сочетают парадигмы, используя облачные ресурсы для распределенного обучения и пиковой емкости, а локальный вывод или предобработку датчиков выполняя на клиентских устройствах.
Связанное заблуждение предполагает, что перенос вычислений ближе к пользователю всегда сокращает задержку, не учитывая задержку выполнения, которую вносят процессоры периферии с тепловыми ограничениями или меньшей пропускной способностью, — компромисс, разобранный в разделе «Бенчмарки вывода».
Заблуждение и ловушка
Ловушка: полагаться на оптимизацию модели, чтобы преодолеть мобильные ограничения по мощности и теплу.
Методы сжатия не могут преодолеть фундаментальные термодинамические пределы. Рассмотрим смартфон с батареей 15 Вт·ч. Легкая нагрузка вывода, потребляющая 1 Вт, работает ч, а интенсивная нагрузка, потребляющая 5 Вт — типичная для неоптимизированных фундаментальных моделей на устройстве, — истощает ту же батарею за ч.
Устойчивая работа на 5 Вт также вызывает сильный тепловой троттлинг, поскольку корпус смартфона рассчитан примерно на 3 Вт для установившегося пассивного рассеяния. Хотя квантование параметров FP32 в INT8 дает иллюстративное четырехкратное снижение объема памяти, динамическая энергия переключения и статическая утечка не уменьшаются пропорционально. Непрерывный конвейер вывода, превышающий пассивную тепловую оболочку, неизбежно вызывает динамическое масштабирование частоты, вынуждая инженеров снижать рабочие циклы, перестраивать архитектуры моделей или переносить вычисления на специализированный кремний ускорителей.
Заблуждение и ловушка
Заблуждение: TinyML — это уменьшенное мобильное ML.
Граница между TinyML и мобильным развертыванием качественная: физические ограничения вынуждают к принципиально разным алгоритмическим и исполнительным моделям. Как установлено в «Преимуществах TinyML и эксплуатационных компромиссах», микроконтроллеры имеют от 256 КБ до 1 МБ SRAM, тогда как мобильные платформы имеют 8–16 ГБ LPDDR DRAM — разница в емкости в 10 000 раз, которая определяет, что помещается в памяти. Там, где мобильные системы выполняют модели с десятками миллионов параметров, архитектуры TinyML ограничены десятками или сотнями тысяч параметров, требуя специализированных операций раздельных по глубине сверток и планирования слоев, направленного на минимизацию пиковой памяти активаций. Бюджеты рабочей мощности демонстрируют еще более резкий разрыв: мобильный вывод потребляет 3–5 Вт, тогда как TinyML рассчитан на 1–10 мВт, чтобы работать внутри оболочек сбора энергии. Команды, которые применяют мобильные методы оптимизации напрямую в средах TinyML, обнаруживают, что посттренировочного квантования из FP32 в INT8 недостаточно, когда совокупная рабочая память должна помещаться в 64 КБ SRAM, что вынуждает к полной алгоритмической переработке.
Заблуждение и ловушка
Ловушка: минимизация вычислительных ресурсов минимизирует общую стоимость.
Оптимизация вычислительных ресурсов на вывод изолированно часто увеличивает операционные расходы и замедляет темп развертывания. Как подчеркивает рамка решения в «Рамке решения», выбор архитектуры требует оценки совокупной стоимости владения (TCO) по всему жизненному циклу системы, а не только счетов за серверы. В этом сценарии облачный сервис вывода, стоящий $2 000/мес. за вычисления, выглядит дорого по сравнению с $500/мес. амортизированного периферийного железа. Однако распределенный периферийный парк вносит повторяющиеся эксплуатационные расходы: сетевая инженерия ($3 000/мес.), полевое сопровождение оборудования ($500/мес.) и инженерия надежности парка ($2 000/мес.). Это доводит общие эксплуатационные затраты периферии до $6 000/мес. — рост в 3 раза относительно облачной базы. Кроме того, если облачный управляемый сервис выходит в производство за два месяца, а собственная периферийная инфраструктура требует шести, четырехмесячная задержка влечет серьезные альтернативные издержки. Грамотная системная инженерия балансирует вычислительную эффективность со скоростью разработки, управляемостью парка и эксплуатационным сопровождением.
Более быстрая стадия модели не ускоряет конвейер камеры линейно.
Заблуждение и ловушка
Заблуждение: оптимизация модели линейно переходит в ускорение системы.
Закон Амдала40 определяет, что сквозное ускорение строго ограничено временем выполнения неускоренных стадий. Формализованное через принцип узкого места («Принцип узкого места») и выведенное в приложении (см. раздел о законе Амдала для сильного масштабирования), достижимое ускорение системы равно , где — доля общего времени выполнения, подлежащая ускорению, а — коэффициент ускорения этой изолированной доли. Рассмотрим нажатие кнопки спуска камеры смартфона. Как показано на рисунке выше, конвейер захвата обрабатывает сырые кадры сенсора через 100 мс обработки сигнала изображения (ISP: автоэкспозиция и баланс белого), 60 мс классификации сцены с помощью ML и 40 мс тонального отображения и слияния HDR — всего 200 мс. Ускорение стадии нейросети в 10 раз (6 мс вместо 60 мс) снижает полную задержку с 200 мс до 146 мс. Несмотря на десятикратное ускорение модели, сквозная задержка улучшается лишь в 1,37 раза. Даже снижение задержки модели до нуля дает максимальное ускорение в 1,43 раза, ограниченное оставшимися 70 процентами неускоренного выполнения конвейера. Оптимизация ML-системы требует профилирования всего графа выполнения; ускорение изолированной стадии дает убывающую отдачу, как только эта стадия перестает быть узким местом критического пути.
Заблуждение и ловушка
Ловушка: предположение, что больше обучающих данных всегда улучшает качество развернутой модели.
Три ограничения задают пределы отдачи от масштабирования данных, как проанализировано для архетипов нагрузок в «Анализе нагрузок». Во-первых, алгоритмическая емкость () насыщается: когда бюджет параметров модели фиксирован, дополнительные обучающие данные не могут преодолеть представительные узкие места, как только архитектура исчерпывает свою выразительную способность. Во-вторых, качество данных () важнее сырого объема: шум меток, ошибки калибровки датчиков и артефактные корреляции загрязняют обновления градиентов, поэтому масштабированные испорченные корпуса усиливают систематическое смещение вместо улучшения обобщения. В-третьих, согласованность распределения определяет полезность в реальном мире: высококачественные данные эксплуатации из той же области стабильно дают лучшую точность обслуживания по сравнению с массивными наборами данных вне области, которые не отражают физической среды производства.
Заблуждение и ловушка
Заблуждение: один бинарный файл модели может эффективно обслуживать любую периферийную аппаратную цель.
Команды часто компилируют один артефакт модели и развертывают его одинаково на разных устройствах, рассматривая развертывание как этап упаковки, а не как задачу совместного проектирования с аппаратурой. На практике компиляция под конкретное железо и понижение ядер фиксируют важные эффективности, которые теряют универсальные бинарные файлы. Например, выполнение квантованных операций INT8 на специализированном нейропроцессорном блоке (NPU) дает заметно большую пропускную способность на ватт, чем выполнение той же модели на универсальном CPU, поскольку тензорные движки INT8 с фиксированной функцией избегают накладных расходов на декодирование инструкций и энергии тракта с плавающей запятой. Кроме того, слияние операторов сохраняет промежуточные тензоры активаций в SRAM на кристалле или регистровых файлах, а не выгружает их в энергозатратную внешнюю DRAM. Аналогично, настройка раскладки памяти, выравнивающая каналы тензоров с векторными регистрами ускорителя, устраняет некоалесцированные обращения к памяти. Как установлено в анализе парадигм развертывания в «Рамке парадигм развертывания», аппаратные архитектуры накладывают расходящиеся ограничения на выполнение: бинарный файл, скомпилированный для CPU Arm Cortex-A78, не использует плотно связанную SRAM-скретчпад и систолические массивы NPU Arm Ethos-U. Переносимый артефакт модели служит лишь промежуточным представлением; производственное развертывание требует компиляции и профилирования под целевую среду выполнения, аппаратный делегат, иерархию памяти и тепловую оболочку.
Итоги
Инженерия систем ML управляется физической реальностью: каждая цель развертывания задает собственный аппаратный контракт. Железный закон систем ML () объединяет эти физические пределы в единую модель выполнения: задержка распространения дает фиксированную задержку (), стена памяти ограничивает перемещение данных (), а тепловые бюджеты мощности ограничивают устойчивые вычисления. На уровнях облака, периферии, мобильных устройств и TinyML категориальная энергетическая оболочка от мегаватт до милливатт охватывает девять порядков величины, тогда как представительные системы занимают внутри нее более узкие диапазоны.
Применяя принцип узкого места к архетипам нагрузок, инженеры определяют, доминирует ли в задержке модели эффективность вычислений, пропускная способность памяти или сетевой транзит, прежде чем выбрать архитектуру одного узла или гибридную. Количественные компромиссы («Сравнение парадигм по четырнадцати измерениям») и систематическая рамка решения («Отсев решений о развертывании»), разработанные в этой главе, задают физические базовые линии, которые управляют всеми последующими решениями в сжатии моделей, проектировании конвейеров данных и высокопроизводительном обслуживании.
Одна модель, разная инженерия
- Физические ограничения определяют осуществимость: скорость света (около 36 мс межконтинентального цикла «туда и обратно»), стена мощности, стена памяти и бюджеты задержки создают жесткие границы, которые инженерия не может преодолеть, а может только обходить.
- Выявляйте узкие места до оптимизации: одна и та же модель ограничена вычислениями в обучении, но ограничена памятью в выводе. Железный закон и принцип узкого места указывают, какое ограничение доминирует; оптимизация не того члена дает нулевое ускорение.
- Архетипы нагрузок определяют осуществимость развертывания: «вычислительный зверь», такой как обучение крупномасштабных моделей зрения, часто требует облачных ресурсов; «жесткое ограничение», такое как распознавание ключевых слов, требует эффективности микроконтроллера. Одна и та же стратегия оптимизации не может обслужить оба; инженеры должны сопоставлять архетип нагрузки с парадигмой развертывания.
- Мощность развертывания охватывает девять порядков: инфраструктура облачного дата-центра работает на уровне мегаватт, тогда как системы TinyML нацелены на милливатты. Этот разрыв открывает совершенно разные классы приложений, а не является ограничением.
- Гибридные архитектуры распространены в производственных системах: голосовые ассистенты охватывают TinyML (слово пробуждения), мобильное ML (речь в текст) и облако (понимание языка). Когда одной парадигмы недостаточно, схемы интеграции (разделение «обучение — обслуживание», иерархическая обработка, постепенное развертывание) формализуют способы сочетания парадигм.
- Системное ускорение подчиняется закону Амдала, а не выигрышам на уровне модели: в разобранном конвейере камеры 10-кратно более быстрая модель дает лишь 1,37-кратное ускорение системы, когда ML занимает 30 процентов конвейера. Профилируйте всю систему перед оптимизацией любого компонента.
- Развертывание начинает петлю обратной связи: живые данные могут расходиться с условиями обучения, пока код и веса остаются неизменными, поэтому мониторинг и ограниченная эксплуатационная экспозиция — часть архитектуры системы.
Парадигмы развертывания — не произвольные предпочтения проектирования; это непрерывные эксплуатационные области, продиктованные физическими законами. Выбор цели развертывания меняет то, какой член железного закона, скорее всего, будет связывать: обучение в дата-центре может упираться в пиковые вычисления (), мобильный вывод может столкнуться с пропускной способностью памяти (), а удаленный вывод в реальном времени может ограничиваться задержкой распространения (). Системная инженерия начинается с измерения этого связывающего ограничения. Оптимизация архитектуры модели или программных сред выполнения без учета нижележащего аппаратного контракта порождает хрупкие системы, которые ломаются под давлением реальной эксплуатации.
От теории к процессу
Хотя физические ограничения и рамка решения, установленные в «Рамке решения», определяют, где ML-система может физически выполняться, одной физической осуществимости недостаточно для успеха эксплуатации со временем. Как показало списание Zillow на $304 млн (Zillow Group, 2021), развертывание моделей в производстве требует сдерживания неопределенности прогноза и управления эксплуатационным риском на протяжении всего программного жизненного цикла. «Рабочий процесс машинного обучения» вводит жизненный цикл разработки ML — систематический инженерный процесс, который ведет систему от постановки задачи через развертывание, мониторинг и сопровождение.
-
Парадигма развертывания: отдельный режим эксплуатации, границы которого задает физика, а не соглашение. Спектр от облака до TinyML охватывает девять порядков величины по мощности, потому что термодинамические и электромагнитные ограничения создают жесткие стены, которые никакая программная оптимизация не может преодолеть, и это вынуждает к качественно разным системным архитектурам на каждом уровне. Неверное определение границы парадигмы тратит инженерные усилия: оптимизировать облачную модель ради прироста пропускной способности на 5 процентов бессмысленно, если бюджет задержки приложения в 10 мс требует развертывания на периферии. ↩
-
Задержка: время между отправкой запроса и получением результата, соответствующее в железном законе. Световой барьер делает этот пол неустранимым: скорость света в волокне задает минимум ~36 мс «туда и обратно» по континентальной части США, поглощая весь бюджет задержки системы безопасности на 10 мс до начала любых вычислений. Каждая миллисекунда, потраченная на расстояние, — это миллисекунда, недоступная для вывода модели, поэтому световой барьер вынуждает выбирать парадигму, а не просто оптимизировать. ↩
-
Масштабирование Деннарда: названо по работе Dennard et al. (1974) из IBM, где описаны соотношения масштабирования MOSFET, при которых уменьшение приборов позволяло снижать напряжение и ток при сохранении примерно постоянной плотности мощности. По мере того как масштабирование напряжения замедлялось и энергия становилась архитектурным ограничением первого порядка, рост производительности сместился к параллелизму и специализации: многоядерным процессорам, GPU и TPU (Hennessy and Patterson, 2019; Esmaeilzadeh et al., 2011). ↩
-
Пропускная способность памяти (стена памяти): термин «стена памяти» ввели Wulf и McKee в 1995 году; они предсказали, что разрыв производительности процессора и памяти в конце концов станет доминировать в производительности системы, и это предсказание оказалось точным для нагрузок ML, в которых перемещение весов или активаций может ограничивать производительность. В железном законе пропускная способность стоит в знаменателе члена данных , поэтому удвоение перемещаемых байтов без соответствующего роста пропускной способности увеличивает время перемещения данных. Итоговое узкое место зависит от арифметической интенсивности, размера батча, повторного использования данных, шаблона доступа и баланса аппаратуры, а не только от размера модели. ↩
-
Архетип нагрузки: классификация нагрузок ML по их доминирующему узкому месту железного закона, а не по семейству модели. Различие важно, потому что стратегия оптимизации принципиально иная: нагрузка, ограниченная вычислениями, выигрывает от более быстрой арифметики , а нагрузка, ограниченная пропускной способностью, — от более широких шин памяти или меньшего числа перемещаемых байтов за счет повторного использования, слияния, сжатия или более низкой точности. Неверное определение архетипа тратит усилия оптимизации на не тот член железного закона, например когда команды добавляют FLOP/s ускорителя в конвейер вывода, ограниченный памятью, и не получают никакого ускорения. ↩
-
Критический путь: самая длинная последовательная цепочка зависимых операций в конвейере. Правило решения в предыдущем предложении строгое: если сетевой вызов между регионами на 200 мс оказывается где-либо на критическом пути, система с общим бюджетом 100 мс гарантированно не уложится, как бы быстро ни работали все остальные стадии. Вывод модели не обязан быть самой долгой стадией; предобработка и постобработка могут доминировать, делая критический путь длиннее, чем предполагает одно лишь выполнение модели. ↩
-
Спектр стоимости аппаратуры ML: инфраструктура ИИ охватывает шесть порядков величины по стоимости — от микроконтроллеров за $10 до кластеров ускорителей за многие миллионы долларов. Такой диапазон в миллион раз означает, что выбор парадигмы развертывания одновременно является решением физики и экономики. Даже внутри выбора отдельных устройств одна и та же целевая точность может достигаться на недорогом микроконтроллере лишь после существенного сокращения модели или на дорогом ускорителе дата-центра с гораздо большим бюджетом ресурсов, и профили задержки, мощности и эксплуатационных затрат при этом принципиально различаются. ↩
-
Эффективность использования энергии дата-центра (PUE, Power usage effectiveness): эта метрика отделяет накладные расходы энергии инфраструктуры, включая охлаждение и распределение питания, от энергии, которая поставляется вычислительному оборудованию. Даже при PUE 1,06 в масштабе дата-центра остается заметная энергия, не идущая на вычисления. TinyML не требует выделенного охлаждения помещения, хотя датчики, связь, потери преобразования и энергия режима сна все еще входят в полный энергетический бюджет системы. Эти затраты уровня устройства находятся за пределами PUE. ↩
-
Масштаб обучения больших языковых моделей (LLM): только централизованные дата-центры могут агрегировать достаточно для запусков обучения на 3 634,3 PFLOP-дней (Patterson et al., 2021). Удаленный вывод добавляет сетевую задержку, поэтому чисто облачное выполнение оказывается невозможным, когда сквозной путь превышает бюджет задержки приложения. ↩
-
Облако как коммунальные вычисления (utility): коммунальная модель позволяет провайдерам предлагать специализированный портфель аппаратуры, который экономически невыгодно поддерживать одной организации. Это дает прямой доступ по требованию к конкретным архитектурам, нужным каждому архетипу нагрузки: плотным модулям ускорителей для вычислительных зверей, узлам с HBM для пожирателей полосы пропускания и системам большой памяти с быстрыми межсоединениями для разреженного разброса. Поэтому команда может арендовать специально созданный суперкомпьютерный модуль стоимостью $10 млн+ на несколько часов, а не владеть им. ↩
-
Tensor processing unit (TPU): специализированная интегральная схема (ASIC), которая дает пропускную способность масштаба PFLOP/s, жестко зашивая архитектуру под матричные умножения, доминирующие в нагрузках ML. Эта крайняя специализация обменивает универсальную гибкость на улучшение производительности на ватт более чем в 10 раз по сравнению с универсальным ускорителем на той же задаче ML. Высокая стоимость развертывания таких ускорителей в масштабе дата-центра поэтому оправдана только для массивных, устойчивых вычислений ML. ↩
-
Оплата по мере использования: облачная экономическая модель, в которой пользователи платят за потребленные часы ускорителей, а не за принадлежащее им оборудование. Эластичное ценообразование превращает фиксированную стоимость простаивающего в переменную стоимость, пропорциональную фактической загрузке, но постоянные нагрузки 24/7 могут стоить в облаке дороже эквивалентного собственного оборудования, амортизированного за три года; эта точка перехода задает анализ совокупной стоимости владения (TCO) в «Годовом TCO облачного вывода». ↩
-
GDPR (General Data Protection Regulation): статья 17 предоставляет право на стирание, когда применимы указанные основания (European Parliament and Council of the European Union, 2016). Для системы ML запрос на стирание требует проследить, где сохраняются данные человека: в исходных хранилищах, производных признаках, журналах, кешах и артефактах моделей. Переобучение может быть одной из мер, но регламент не предписывает переобучать каждую модель, которая встречалась с этими данными. ↩
-
HIPAA: Правило безопасности обязывает регулируемые организации внедрять разумные и соответствующие административные, физические и технические меры защиты электронной защищенной медицинской информации, включая контроль доступа и аудита (U.S. Department of Health and Human Services, 2005). Правило технологически нейтрально и не требует анклавов конфиденциальных вычислений; конкретные средства контроля и их издержки производительности зависят от анализа рисков системы и реализации. ↩
-
Совокупная стоимость владения (TCO, Total cost of ownership): измеряет разрыв между ценником и реальной стоимостью системы, включая все прямые и косвенные затраты (питание, охлаждение, труд) за срок службы системы и сопоставляя первоначальные капитальные затраты (CapEx) с повторяющимися операционными (OpEx). Для GPU на собственной площадке цена покупки — лишь одна из составляющих трехлетней TCO наряду с эксплуатационными расходами. ↩
-
Deep learning recommendation model (DLRM): архитектура Meta 2019 года, которая служит примером архетипа «разреженный разброс». Таблицы эмбеддингов производственных рекомендательных систем могут превышать 100 ТБ, поэтому DLRM ограничен емкостью памяти и пропускной способностью коммуникации , а не сырым . Эта инверсия типичного допущения о вычислительной ограниченности вынуждает к специализированным кластерным конструкциям, где дефицитным ресурсом является память, а не арифметика. ↩
-
Промышленный интернет вещей (IIoT): область, где ограничения задержки задает физическая безопасность, а не восприятие пользователя. Контур безопасности с бюджетом остановки 5 мс не может допустить удаленный цикл в 100 мс, поэтому его детекция и решение об остановке должны оставаться локальными. Этот выбор убирает член дальней сети, но оставляет периферийную систему ограниченной ее локальной вычислительной емкостью . ↩
-
Барьер данных интернета вещей (IoT): McKinsey оценивает, что развертывания IoT могут создать триллионы долларов экономической стоимости к 2030 году, но эти развертывания зависят от непрерывных потоков данных с датчиков, распределенных по домам, фабрикам, фермам, транспорту и инфраструктуре (McKinsey Global Institute, 2021). Во многих из этих сред совокупный от сырых потоков превышает доступный бюджет восходящего канала или бюджет задержки централизованного приема, поэтому локальная периферийная обработка становится архитектурным требованием, а не просто оптимизацией стоимости. ↩
-
Ограничения периферийного сервера: в типичных периферийных оболочках 1–8 ГБ могут вместить примерно 1–8 миллиардов весов INT8 до учета активаций, состояния среды выполнения и других буферов, поэтому одно лишь число параметров не задает универсального потолка «только миллионы». Устойчивые вычисления дополнительно ограничены мощностью, охлаждением и тепловым циклом работы. ↩
-
Координация периферийного парка: управление тысячами распределенных периферийных устройств приводит к режимам отказа, которых нет в централизованном облаке: прерывистая связность вызывает дрейф версий модели, разнородность железа требует оптимизации под каждую цель, а физическая доступность делает откат прошивки дорогим. Эти эксплуатационные паттерны рассматриваются в главе «MLOps». ↩
-
Розничная торговля без касс: магазин может объединять наблюдения камер с событиями полок и состоянием транзакций локально, а затем передавать только выбранные события или агрегаты. Граница приватности должна при этом включать и эти производные записи, потому что сокращение передачи сырого видео не определяет хранение, доступ или вторичное использование. ↩
-
Индустрия 4.0: четвертая промышленная революция встраивает ML в контур обратной связи «датчик — исполнительное устройство» на производственных линиях. Системное следствие: задержка контура управления должна быть меньше физического процесса, которым он управляет: сварочный робот, который обнаруживает дефект на частоте 60 Гц, имеет интервал опроса 16,7 мс, что требует развертывания, полный путь отклика которого укладывается в этот срок. ↩
-
Предиктивное обслуживание: модели анализируют данные датчиков, например вибрацию и температуру, чтобы оценить состояние оборудования и риск отказа. Непрерывный мониторинг делает частоту опроса датчиков, рабочий цикл, мощность и локальное хранилище первоклассными ограничениями. Узлы с батарейным питанием могут требовать средней работы менее 1 Вт, тогда как промышленные шлюзы с сетевым питанием могут использовать гораздо большую оболочку. ↩
-
Вычислительная фотография: использует алгоритмы ML (например, слияние нескольких кадров, нейронное шумоподавление), чтобы преодолеть физические пределы малых сенсоров мобильных камер. Это иллюстрирует компромисс мобильных вычислений: многостадийный конвейер должен выполняться в пределах воспринимаемой пользователем задержки затвора и при общем тепловом бюджете 3–5 Вт. ↩
-
Сокращение модели зрения для мобильных устройств: архитектуры в духе MobileNet сокращают вычисления в распространенных слоях зрения, сохраняя полезную точность для мобильных задач. Архитектурные детали приведены в главе «Архитектуры нейронных сетей»; системный вывод здесь в том, что мобильное развертывание часто требует смены семейства модели, а не просто переноса той же модели на телефон. ↩
-
Нейропроцессорный блок (NPU): специализированный аппаратный блок в мобильной системе на кристалле, схемы которого рассчитаны на тензорные операции низкой точности. Такая специализация может повышать энергоэффективность по сравнению с выполнением на CPU, помогая нагрузкам ИИ уложиться в мобильные энергетические бюджеты. ↩
-
Система на кристалле (SoC): мобильные SoC объединяют ядра CPU, GPU и NPU с кешами и контроллерами памяти, чтобы снизить затраты на перемещение данных. Мобильная DRAM обычно вынесена за пределы кристалла, а осуществимый размер модели зависит от емкости, точности, рабочей памяти, пропускной способности и задержки. ↩
-
Face ID: Apple выполняет сопоставление лиц внутри Secure Enclave и шифрует сохраненные математические представления так, что они доступны только этой подсистеме и не покидают устройство (Apple, 2024a; Apple, 2024b). Apple сообщает о случайной вероятности ложного совпадения ниже 1 из 1 000 000 для одного зарегистрированного образа; для некоторых групп и конфигураций вероятность выше. Пример показывает, как локальный вывод и аппаратная изоляция могут сокращать риск передачи, поддерживая аутентификацию с низкой задержкой. ↩
-
Конвейер портретного режима: это не одна модель, а последовательность моделей реального времени для оценки глубины, сегментации и рендеринга. Основная инженерная задача — управлять совокупной задержкой и мощностью конвейера, а не производительностью какой-то отдельной модели. Весь конвейер должен выполняться в пределах воспринимаемой пользователем задержки затвора и делить тепловой бюджет 3–5 Вт, что вынуждает к компромиссам планирования между CPU, GPU и NPU, чтобы избежать троттлинга. ↩
-
Порог 1 мВт: сбор энергии из окружающей среды может питать устройство неограниченно долго, только если долгосрочная собранная мощность превышает среднюю нагрузку всей системы. Доступная мощность зависит от источника и среды: солнечная ячейка размером с ноготь может давать ~10 мВт на улице, но ~10 мкВт в помещении, термоэлектрические генераторы на теплых трубах — ~100 мкВт, а RF-энергия от близких передатчиков — ~10 мкВт. Этот переход может изменить модель развертывания от «ограниченного батареей срока службы» к «развернул и забыл», но зависит от источника, среды и нагрузки. ↩
-
Повсеместные вычисления (ubiquitous computing): видение Марка Вайзера представляло вычисления, вплетенные в повседневную среду, пока они не уходят из прямого внимания (Weiser, 1991). TinyML — один из современных путей к этому видению: когда стоимость и мощность интеллектуального датчика становятся достаточно низкими для массового развертывания, цель оптимизации смещается от производительности (пропускной способности) к мощности (энергии на вывод), то есть к главному компромиссу архетипа «жесткого ограничения». ↩
-
Микроконтроллер (MCU): однокристальный компьютер, конструкция которого ставит минимальную стоимость и мощность выше производительности, что и создает упомянутое «радикальное ограничение». Многие цели TinyML имеют лишь десятки-сотни килобайт встроенной SRAM и не имеют виртуальной памяти; некоторые высокопроизводительные микроконтроллеры могут подключать внешнюю память. Поэтому полная модель, активации и состояние среды выполнения должны помещаться в память, фактически доступную цели, часто на порядки меньшую, чем у смартфона. ↩
-
Энергетический разрыв TinyML: этот разрыв коренится в философии проектирования аппаратуры: облачные GPU оптимизированы для сырой пропускной способности и потребляют сотни ватт, тогда как микроконтроллеры TinyML спроектированы для состояний сна почти с нулевой мощностью. Для обычного облачного вывода один запрос может потреблять около 10 джоулей, тогда как специализированное устройство TinyML — около 10 микроджоулей, разрыв в 1 000 000 раз. Запросы облачных LLM могут увеличить сравнение еще сильнее, как количественно показано в «Энергии на вывод по парадигмам». ↩
-
Питание от батарейки-таблетки: батарейка CR2032 (225 мАч при 3 В, ~675 мВт·ч) в идеале питает полноценную систему мощностью 10–50 мкВт около 1,5–7,7 года. Эта модель «развернул и забыл» стимулирует развитие прерывистых вычислений, при которых устройство спит между выводами, растягивая энергетический бюджет на годы автономной работы. ↩
-
Ограничения обучения на устройстве: полное обучение на устройстве должно сохранять выходы промежуточных слоев, чтобы последующие обновления весов могли вычислить градиенты, поэтому потребляется память, пропорциональная глубине модели. При выводе активации каждого слоя можно отбросить, как только их использует следующий слой. При объеме ОЗУ 256 КБ–2 МБ потребности памяти обратного распространения превышают доступную SRAM; TinyTL замораживает веса и обновляет только смещения, чтобы сократить память активаций (Cai et al., 2020). Это ограничение памяти в основном оставляет устройствам TinyML роль вывода, а обновления модели доставляются через прошивку, а не обучаются на месте. ↩
-
Диапазон устройств TinyML: этот физический диапазон отражает прямой компромисс между контекстом развертывания и вычислительными возможностями. Системы миллиметрового масштаба ставят приоритет минимальной мощности (~140 мкВт) для одной функции и длительной работы, тогда как платы размером с ладонь обменивают больший размер и более высокую мощность на возможность обрабатывать несколько сложных потоков датчиков. Этот выбор совместного проектирования создает разницу в мощности более чем в 10 000 раз и в площади примерно в 100 раз по всему спектру устройств TinyML. ↩
-
Фрагментация экосистемы TinyML: TinyML охватывает семейства микроконтроллеров вроде Arm Cortex-M, RISC-V и Xtensa, каждое с разными наборами инструкций, компоновкой памяти, ядрами и фирменными инструментальными цепочками; облачные и мобильные стеки тоже различаются, но их среды выполнения обычно скрывают больше этого аппаратного разнообразия. Модель, оптимизированная под один микроконтроллер, может потребовать перенастройки и повторной проверки для другого, умножая инженерные затраты на развертывание на многих устройствах. ↩
-
Постоянно включенная детекция слова пробуждения: небольшая специализированная модель слушает акустическую сигнатуру фразы пробуждения и работает как шлюз питания для процессора приложений, потребляющего больше мощности. Допустимый бюджет детектора зависит от платформы, но даже несколько лишних милливатт, потребляемых непрерывно, могут заметно сократить время работы от батареи. Архитектура удается только тогда, когда постоянно работающий путь потребляет значительно меньше средней мощности, чем компоненты, которые он не дает пробуждать. ↩
-
Асимметрия стоимости «обучение — обслуживание»: обучение обычно требует многих прямых и обратных проходов, тогда как один запрос вывода использует обученный артефакт для одного или нескольких прямых проходов. Обучение не является однократным в буквальном смысле, потому что модели могут переобучаться, а стоимость вывода заметно меняется в зависимости от размера модели, длины последовательности, батчирования и накладных расходов сервиса. Экономическое обоснование разделения — амортизация: повторное использование позволяет распределить фиксированную стоимость каждого цикла обучения на множество обслуженных предсказаний. ↩
-
Закон Амдала: сформулирован Амдалом (Amdahl, 1967) для масштабирования многопроцессорных систем; этот принцип напрямую применим к конвейерам развертывания ML, где модель — лишь одна стадия среди многих. В примере с камерой вывод ML составляет 60 мс из 200 мс; даже ускорение модели в 100 раз дает лишь примерно 1,4–2-кратное улучшение сквозной задержки, потому что остальной конвейер не меняется. Команды, которые бенчмаркают задержку модели изолированно, систематически переоценивают выигрыш развертывания. ↩
Рабочий процесс машинного обучения
Назначение
Почему, прежде чем идти по какому-либо одному пути, необходимо увидеть всю карту?
Таксономия D·A·M называет компоненты любой системы ML, а место развертывания определяет физические ограничения, которым должен удовлетворять каждый компонент. Команды часто рассматривают их как отдельные задачи: одна команда собирает данные, другая проектирует модель, третья закупает оборудование. Но самый глубокий урок таксономии в том, что эти компоненты взаимодействуют. Собранные данные ограничивают, какие алгоритмы возможны. Выбранный алгоритм определяет, какое оборудование способно его выполнить. Целевое оборудование меняет то, какие данные можно обработать. Потяните за любую одну нить, и вся система сдвинется. Эти взаимодействия проявляются между компонентами и во времени. Модель, которая хорошо работает при запуске, может деградировать по мере сдвига распределения данных, и тогда нужно разбираться в причинах и, если есть основания, обновлять модель или данные. Оптимизация каждой части в отрыве от остальных именно так и приводит к тому, что команды создают точные модели, которые невозможно развернуть, и эффективные конвейеры, которые подают на вход не те данные. Инженер данных, который видит, как решения по предобработке ограничивают последующие архитектуры, строит иные конвейеры, чем тот, кто воспринимает подготовку данных как изолированную задачу; разработчик модели, который с первого дня знает бюджет памяти целевого устройства, принимает другие архитектурные решения, чем тот, кто гонится за точностью в вакууме. Прежде чем вникать в детали любого отдельного компонента, нужна полная карта того, как ML-система создается, оценивается и поддерживается как единое целое. Рабочий процесс ML приводит эту карту в движение через итеративное D·A·M-совместное проектирование данных, алгоритма и машины, пока возникающие возможности системы не начнут соответствовать требованиям реального мира.
Цели обучения
- Описать шесть этапов жизненного цикла ML как согласованные решения о данных, алгоритме и машине с обратной связью
- Сравнить рабочие процессы ML с традиционным программным обеспечением по признакам дрейфа, недетерминированности и операционной обратной связи
- Проанализировать, как ограничения постановки задачи распространяются через данные, моделирование, валидацию и развертывание
- Рассчитать стоимость интеграции при позднем обнаружении ограничений по принципу распространения ограничений рабочего процесса
- Оценить компромиссы между точностью, эффективностью, воспроизводимостью и готовностью к развертыванию на разных этапах жизненного цикла
- Спроектировать петли обратной связи, которые связывают сигналы мониторинга с переобучением, сопровождением и пересмотренными требованиями
Жизненный цикл ML
Типичный сбой развертывания иллюстрирует опасность несогласованной инженерии. День 1: «Построить диагностическую модель для сельских клиник». День 90: точность 95 процентов на тестовой выборке. День 120: точность 96 процентов после месяца подбора архитектуры. День 150: модель передана инженерам развертывания. День 151: инженеры развертывания сообщают, что модели требуется 4 ГБ памяти. День 152: кто-то проверяет целевое устройство: планшеты в передвижных клиниках с 512 МБ доступной памяти. День 153: пять месяцев работы выброшены.
Точность модели была отличной. Навыки команды в машинном обучении были отличными. Сбой был сбоем рабочего процесса. Ограничение развертывания, которое должно было формировать каждое решение с первого дня, обнаружили только тогда, когда работа была завершена. Ограничение по памяти планшета должно было распространиться назад, на первое совещание по архитектуре, отсекая модели, которые вообще стоило рассматривать. Вместо этого команда оптимизировала каждый компонент в отрыве от остальных (сбор данных, выбор архитектуры, обучение), и проблема интеграции проявилась только при сборке частей вместе. Задокументированное развертывание системы скрининга диабетической ретинопатии (DR) выявило похожие пробелы в рабочем процессе и инфраструктуре.1
Системы ML объединяют данные, алгоритм и машину в условиях физических ограничений, которые делят развертывание на облачное, периферийное, мобильное и TinyML. Каждое из них накладывает жесткие физические пределы на пропускную способность вычислений, объем памяти и рассеяние тепла. Чтобы соединить эти компоненты в работающую систему, нужно организовать распространение ограничений между данными, алгоритмом и машиной.
Рабочий процесс ML — это инженерная рамка, призванная предотвращать сбои интеграции: она делает ограничения явными на каждом этапе разработки и прослеживает, как они распространяются между данными, алгоритмом и машиной. Здесь проходит переход от исследователя моделей к системному инженеру. Исследователь оптимизирует отдельные элементы: более удачную архитектуру, более чистый набор данных, более быстрый ускоритель. Системный инженер организует эти элементы в производственные системы, которые надежно приносят пользу. Сбой на 153-й день не был вызван изолированным дефектом моделирования, данных или оборудования; он возник из неуправляемого взаимодействия всех трех. Рабочий процесс дает ментальную карту, которая удерживает технические решения связанными с большой системой.
Жизненный цикл машинного обучения — это рамка оркестрации такой работы: структурированный итеративный процесс2, который направляет разработку, оценку и улучшение систем ML (Amershi et al., 2019). Формальное определение подчеркивает непрерывное управление, а не однократный выпуск.
Жизненный цикл машинного обучения
Жизненный цикл машинного обучения — это итеративный инженерный процесс создания, развертывания, мониторинга и обновления систем ML, в котором данные с поздних этапов могут возвращаться на ранние, поскольку качество модели может меняться после развертывания.
- Значение: жизненный цикл — это замкнутая петля, а не линейный конвейер. Расхождение распределений между текущим трафиком и трафиком обучения служит сигналом тревоги, повышающим вероятность потери точности; точная зависимость определяется моделью, метками, функцией потерь и распределением при эксплуатации. Полный прогон переобучения требует вычислений стоимостью , тогда как частичные или инкрементальные обновления могут обойтись дешевле. Скорость дрейфа и задержка валидации поэтому превращают сопровождение жизненного цикла в задачу бюджетирования, а не только инженерную задачу.
- Отличие: в отличие от традиционного ПО, поведение которого меняется при изменении кода, конфигурации, зависимостей или окружения, поведение ML может меняться и тогда, когда меняется сам мир. Точность развернутой модели может снижаться из-за сдвига распределения, даже если код, инфраструктура и конфигурация остаются прежними.
- Типичная ошибка: частое заблуждение состоит в том, что жизненный цикл заканчивается развертыванием. На самом деле развертывание — это начало петли обратной связи: мониторинг в эксплуатации выявляет дрейф, дрейф запускает расследование, а данные о результатах определяют, должна ли переобученная модель вернуться на этап развертывания.
Здесь жизненный цикл описывает сами этапы, а рабочий процесс — инженерную дисциплину их организации: жизненный цикл — это то, что проходят, рабочий процесс — это то, как управляется прохождение. Это различие требует системного мышления: анализа того, как части системы связаны между собой, а не рассмотрения их изолированно. Закономерности, сформулированные в разделе «Системное мышление» и проиллюстрированные подробным разбором случая, объясняют, почему системам ML нужны интегрированные инженерные подходы, а не последовательная оптимизация компонентов.
Понимание того, как эти этапы связаны между собой, необходимо до анализа отдельных слоев: каждая техническая область, от конвейеров хранения (глава «Инженерия данных») до обучения моделей (глава «Обучение моделей»), среды выполнения (глава «Фреймворки машинного обучения») и инфраструктуры обслуживания (глава «Обслуживание моделей»), работает как взаимозависимая система. На «Двухконвейерной разработке ML» горизонтальная компоновка отделяет верхний конвейер данных от нижнего конвейера разработки моделей, а изогнутые обратные векторы показывают, как сведения из эксплуатации и дефекты данных возвращаются на более ранние этапы.
Двухконвейерная разработка ML: инженерия ML разделяется на параллельные конвейеры данных и моделей, работающие в разных временных масштабах. Пока конвейер модели выполняет быстрый внутренний цикл обучения и оценки, внешняя обратная связь от производственного развертывания и валидации данных непрерывно переформирует более ранние этапы сбора, разметки и отбора данных.
Концептуальные этапы жизненного цикла ML задают что и зачем процесса разработки. Операционный уровень составляет как: реализацию этого цикла через автоматизацию, инструменты и инфраструктуру. Глава «MLOps» подробно описывает эти практики. Различие важно: жизненный цикл — это концептуальная рамка, а операционная инфраструктура — механизм, который реализует его в масштабе.
Количественная оценка жизненного цикла ML
Распределение времени практиков показывает, где жизненный цикл на самом деле создает узкие места: инженерные усилия редко концентрируются там, где научная литература отводит больше всего страниц. Концептуальные модели жизненного цикла ML описывают, какие этапы существуют, но системные решения опираются на количественную реальность: сколько часов инженеров уходит на каждый этап, сколько вычислений потребляется и какие остановки конвейера задерживают развертывание.
Опросы практиков выявляют резкую асимметрию между тем, где сосредоточено внимание исследований, и тем, где тратятся инженерные часы: сбор и подготовка данных занимают 79 процентов времени практиков. На «Где специалисты по данным тратят больше всего времени» круговая диаграмма показывает заявленные основные статьи затрат времени: доминирующие сектора сбора и подготовки данных противопоставлены узкой доле, которую занимают проектирование архитектуры модели и настройка алгоритма.
Где специалисты по данным тратят больше всего времени: в опросе CrowdFlower 2016 года 60 процентов респондентов назвали очистку и организацию данных видом деятельности, на который уходит больше всего времени, а 19 процентов выбрали сбор данных. Ответы, связанные с моделью (поиск закономерностей, формирование обучающей выборки и уточнение алгоритма), вместе составляют около 16 процентов. Источник: CrowdFlower, Data Science Report 2016.
Эти доли опроса показывают, почему инженерию данных нельзя рассматривать как второстепенную подготовительную работу. Конвейеры данных — главный источник операционного трения, циклов итераций и системного риска. Освоение инфраструктуры данных (глава «Инженерия данных») дает наибольшую отдачу, прежде чем переходить к архитектурам моделей и оптимизациям обучения, которые потребляют ее результаты.
Помимо распределения времени, скорость итераций определяет ход проекта. Возвратные векторы на «Двухконвейерной разработке ML» — не редкие исключения; это пути, которые команды проходят снова и снова. Когда качество данных падает из-за сдвига распределения или неверных меток, переработка возвращает команду к сбору. Когда архитектура превышает память ускорителя или страдает от численной нестабильности, инженеры должны пересматривать проект модели. Когда слой обслуживания выходит за бюджеты задержки, конвейер развертывания останавливается. Каждая петля съедает календарное время и вычислительный бюджет и увеличивает стоимость разработки всякий раз, когда последующие этапы не ловят нарушения на раннем уровне.
При принятых допущениях модель с более быстрым циклом итераций немного опережает конкурента через 26 недель.
Налог на итерации
Задача: система скрининга DR для сельских клиник должна выбрать между большим ансамблем, обученным на изображениях глазного дна высокого разрешения (время обучения: 1 неделя, точность: 95 процентов), и легкой моделью, пригодной для периферийного развертывания на оборудовании клиники (время обучения: 1 час, точность: 90 процентов). Какая модель при этих допущениях имеет более высокую расчетную точность через шесть месяцев?
Расчет: за шесть месяцев (примерно 26 недель) возможное число экспериментов составляет:
- Большая модель: 26 недель календарного времени при 1 неделе на эксперимент. Каждый эксперимент, по допущению, улучшает точность на постоянную величину примерно 0,15 процентного пункта.
- Малая модель: 26 недель календарного времени при 168 ч в неделю дают 4 368 возможных экспериментов по 1 часу каждый. На такой длине цикла машинное время не является лимитирующим фактором, поэтому в этом сценарии как эффективные эксперименты учитываются только 100 из них: столько команда реально может спроектировать, провести и усвоить за шесть месяцев. Остальная мощность простаивает из-за нехватки гипотез. Даже при меньшем допущенном приросте за итерацию большее число полезных итераций может дать больший совокупный прирост.
Результат: если каждая итерация в среднем улучшает точность на 0,1 процентного пункта, малая модель начинается с 90 процентов и достигает 100 процентов после 100 эффективных итераций, до применения потолка в 99 процентов. С учетом потолка в 99 процентов малая модель достигает 99 процентов. Большая модель начинается с 95 процентов и достигает 98,9 процента после 26 более медленных итераций. На практике быстрая итерация малой модели позволяет находить лучшие архитектуры, аугментации данных, сохраняющие метки, и настраиваемые параметры обучения.
Системный вывод: скорость итераций — это преимущество. Когда достижимое качество кандидатов сопоставимо, а полезные эксперименты имеют близкую ожидаемую ценность, более короткие циклы расширяют часть пространства проектирования, которую команда может проверить. Одна лишь скорость не гарантирует, что малая модель превзойдет большую. В сценарии скрининга DR быстрый цикл итераций легкой модели позволяет команде значительно быстрее экспериментировать с входными преобразованиями, сохраняющими метки, конвейерами предобработки и вариантами архитектуры.
Накапливающаяся задержка задает налог на итерации: время ожидания медленных прогонов обучения или громоздких конвейеров валидации сокращает число кандидатов-моделей, которые команда может проверить. Поздние открытия усиливают этот штраф,3 что формализуется принципом распространения ограничений («Принцип распространения ограничений»). Нарушения, обнаруженные после развертывания, вынуждают делать дорогостоящие откаты на каждом предыдущем этапе. Эта асимметрия требует явных контрактов интерфейсов этапов: проверка выходов на каждой границе этапа перехватывает дефекты до того, как они перерастут в системную переработку. «Спецификация интерфейсов этапов» формализует эти контракты для всех шести этапов.
Накапливающаяся стоимость задержек итераций и поздних открытий раскрывает более общую структурную реальность: рабочие процессы ML — это не медленные версии традиционных жизненных циклов ПО. Они принципиально различаются тем, где концентрируются инженерные усилия, как петли обратной связи со временем меняют систему и как поздние открытия увеличивают переработку.
ML и традиционное программное обеспечение
Традиционные и ML-системы могут одинаково использовать итеративные жизненные циклы и демонстрировать недетерминированное поведение.4 Существенное различие в том, как задается поведение приложения. Программное обеспечение на основе правил кодирует явную логику, тогда как системы ML обучаются статистическим отображениям по данным («Системы ML и традиционное программное обеспечение»). Это добавляет к установившимся практикам инженерии ПО задачи, связанные с данными, оценкой и мониторингом.
Системам машинного обучения поэтому нужны дополнительные средства контроля рабочего процесса. Возьмем обработку финансовых транзакций: детерминированное правило авторизации следует явной логике и может выполняться быстро, как только доступны входные данные. Детектор мошенничества на основе ML добавляет обученное скорингование, извлечение признаков и статистическую логику решений. Этап модели может занимать миллисекунды, но сквозная задержка зависит и от хранилища, сети и окружающих сервисов. Этот переход от явного программирования к обученному поведению перестраивает жизненный цикл разработки и меняет то, как команды обеспечивают надежность и устойчивость.
Эти различия меняют взаимодействие этапов жизненного цикла. Традиционная инженерия ПО использует обратную связь от эксплуатации, чтобы уточнять код и требования, тогда как системы ML вводят петли обратной связи, в которых эксплуатационные данные переформируют распределения обучения, выявленный дрейф запускает расследование, а ошибки времени выполнения обнажают слепые зоны набора данных. «Жизненные циклы разработки: традиционное ПО и ML» сопоставляет разработку традиционного ПО и инженерию ML по шести ключевым измерениям жизненного цикла и показывает, как эволюция данных переопределяет тестирование, развертывание и текущее сопровождение.5
| Аспект | Жизненные циклы традиционного ПО | Жизненные циклы ML |
|---|---|---|
| Постановка задачи | Точные функциональные спецификации определяются заранее. | Цели, ориентированные на производительность, уточняются по мере исследования пространства задачи. |
| Процесс разработки | Итеративная разработка кода, конфигурации и интерфейсов. | Итеративные эксперименты с данными, признаками и моделями. |
| Тестирование и валидация | Многие функциональные тесты имеют точно известный ожидаемый результат; производительность и надежность остаются количественными показателями. | Статистическая валидация и метрики, в которых присутствует неопределенность. |
| Развертывание | Поведение остается неизменным до явного обновления. | Качество может меняться со временем из-за сдвигов распределения данных. |
| Сопровождение | Сопровождение состоит в изменении кода для исправления ошибок и добавления функций. | Непрерывный мониторинг, обновление конвейеров данных, переобучение моделей и адаптация к новым распределениям данных. |
| Петли обратной связи | Обратная связь от эксплуатации обычно меняет код, конфигурацию и требования. | Выводы из развертывания и мониторинга часто уточняют более ранние этапы, такие как подготовка данных и проектирование модели. |
Жизненные циклы разработки: традиционное ПО и ML: шесть измерений, по которым разработка ML расходится с традиционной инженерией ПО. Оба подхода используют обратную связь от эксплуатации, но системы ML добавляют петли, в которых выводы из развертывания переформируют сбор данных, мониторинг запускает обновления моделей, а опыт эксплуатации влияет на проектирование модели.
ML и традиционное программное обеспечение
ML-системы — это не традиционное программное обеспечение с подключенной моделью. Проверьте различия, которые требуют отдельного рабочего процесса:
- Режимы отказа: можете ли вы отличить скрытую деградацию от явных сбоев, понимая, что и в системах ML, и в традиционных системах может возникнуть любой из них?
- Источник логики: можете ли вы объяснить, почему изменение обучающих данных может изменить поведение модели, даже когда код остается неизменным?
- Итерации: можете ли вы объяснить, почему ML требует мониторинга и, когда есть основания, обновлений модели или данных?
Локальность данных в масштабе
Крупные конвейеры данных ML могут создавать нагрузку на механизмы локальности, которые используют современные операционные системы. В отличие от традиционных конвейеров ПО, которые последовательно читают записи, обучение ML намеренно перемешивает примеры между эпохами, чтобы обеспечить независимую и одинаково распределенную (i.i.d.) выборку, которой требует стохастический градиентный спуск. Эта алгоритмическая рандомизация напрямую конфликтует с предположениями оборудования и операционной системы: ядра ОС опираются на пространственную и временную локальность6, то есть на склонность программы, которая читает байт , скоро читать соседние байты и повторно использовать недавно обращавшуюся память.
Когда случайный порядок выборок отображается на разрозненные физические чтения, перемешивание может снижать эффективность буферов файловой системы и предвыборщиков виртуальной памяти. Штраф зависит от того, как логические примеры отображаются на физическое хранилище. Непрерывные чтения из перемешанных шардов могут сохранять полезную локальность, тогда как мелкие чтения из множества шардов обнажают задержки хранилища и сети. Пакетирование с учетом структуры, кеширование и явная предвыборка могут восстановить локальность и уменьшить эти простои. Существенная системная переменная — физический шаблон доступа, который получает иерархия памяти, а не сама рандомизация.
Это различие определяет, где оптимизировать. Если загрузчик уже выполняет большие последовательные чтения, дополнительное кеширование почти не дает пользы. Если он рассылает мелкие чтения по множеству шардов, перепаковка записей или увеличение гранулярности чтения важнее, чем добавление вычислений. Профилирование должно отслеживать полный путь доступа от хранилища до ускорителя, одновременно измеряя размер запросов к хранилищу, глубину очереди, долю попаданий в кеш и время простоя ускорителя, чтобы узкие места ввода-вывода не оставляли вычислительные ресурсы без работы.
Этапы жизненного цикла
Сбой в сельской клинике показывает, почему проектам ML нужна явная шестиэтапная рамка: ограничения развертывания проявились только тогда, когда решения о данных, модели и оценке уже затвердели вокруг неверной цели. Классический и ML-жизненный циклы используют итерации, но системы ML добавляют обратную связь от развертывания к данным, обучению и оценке. Шестиэтапная рамка описывает эту петлю.
Полный жизненный цикл машинного обучения сводится к шести основным этапам, расположенным в два функциональных ряда. На «Упрощенном жизненном цикле с обратной связью» проследите верхний ряд от постановки задачи до оценки модели, а нижний ряд, где развертывание передает сигналы мониторинга обратно к сбору данных на более ранних этапах.
Упрощенный жизненный цикл с обратной связью: шесть основных этапов инженерии ML образуют замкнутую петлю, а не линейную передачу. Основной путь обратной связи от мониторинга к сбору данных поддерживает расследование и адаптацию по мере сдвига распределений в эксплуатации, деградации точности модели и изменения эксплуатационных ограничений.
MobileNetV2 закрепляет эти этапы на физических ограничениях: малый объем делает видимыми ограничения периферийного развертывания с самого начала. Для MobileNetV2 постановка задачи задает жесткие рамки: размер модели около 14 МБ, около 600 млн FLOP и вывод в реальном времени на устройствах класса мобильных. Эти ограничения сразу формируют остальной рабочий процесс. Сбор данных должен учитывать ограничения предобработки на устройстве, а разработка модели должна выбрать архитектуру, операции которой укладываются в бюджет. MobileNetV2 достигает этого благодаря раздельным по глубине сверткам7, которые раскладывают пространственные операции и операции по каналам, а не просто прореживают параметры. Оценка проверяет и точность, и задержку на целевых устройствах, развертывание проверяет, укладывается ли модель в память и энергетические рамки устройства, а мониторинг отслеживает качество на разных популяциях устройств. Решения каждого этапа распространяются на последующие этапы, и рамка рабочего процесса делает эти зависимости явными. Модель скрининга DR, оптимизированная для развертывания в сельских клиниках, сталкивается с аналогичными давлениями: ограниченная память устройства, жесткие бюджеты энергопотребления и необходимость вывода в реальном времени без надежного соединения. Эти общие ограничения делают DR эффективным сквозным учебным примером.
Прослеживание MobileNetV2 через эти переходы показывает, что, хотя схема рабочего процесса предполагает последовательное движение, производственная инженерия по сути циклична: она напрямую связывает ограничения развертывания с проектированием на более ранних этапах.
Цикл рабочего процесса
Проверьте, что каждый этап задает контракты, которые связывают более ранние решения с физическими ограничениями развертывания.
- Постановка задачи: можете ли вы задать целевые значения задержки, памяти и точности, которые ограничивают последующую инженерию?
- Подготовка данных: можете ли вы проследить, как разрешение исходного набора данных и выбор предобработки ограничивают достижимую пропускную способность обслуживания?
- Разработка модели: можете ли вы проверить, что выбор операторов и объем памяти укладываются в бюджет развертывания до масштабирования обучения?
- Обратная связь от развертывания: можете ли вы определить сигналы мониторинга, которые нужны для запуска переобучения на более ранних этапах, когда распределения в эксплуатации сдвигаются?
Помимо процедурной организации, каждый этап жизненного цикла напрямую соответствует конкретным членам уравнения производительности. Это отображение показывает проявление железного закона ML-систем на уровне рабочего процесса («Железный закон систем машинного обучения»): подготовка данных фиксирует объем байтов, разработка модели определяет число операций и эффективность оборудования, а инфраструктура развертывания ограничивает фиксированные накладные расходы времени выполнения.
Доминирующее ограничение заметно различается между архетипами нагрузок, поэтому каждый этап жизненного цикла оптимизирует разные члены железного закона. ResNet-50, DLRM и распознавание ключевых слов (KWS) — удобные опорные точки, потому что каждая из них нагружает свою часть системы: плотное обучение компьютерному зрению старается не давать ускорителям простаивать, разреженные рекомендации большую часть времени перемещают строки эмбеддингов, а распознавание ключевых слов прежде всего ограничено крошечным объемом памяти и бюджетом энергии в режиме постоянной работы.
Производственные системы редко укладываются в один архетип. Классификатор медицинских изображений, например, требует устойчивых вычислений при обучении на больших наборах изображений, но сталкивается с жесткими ограничениями по энергии и памяти при развертывании на портативном оборудовании клиники. Понимание того, как рамка рабочего процесса адаптируется к этим компромиссам, необходимо для обоснованных инженерных решений. «Варианты рабочего процесса для маячных моделей» показывает, как три выбранных этапа рабочего процесса проявляются для этих повторяющихся архетипов нагрузок.
| Этап | Компьютерное зрение: обучение ResNet-50 | Рекомендации: DLRM | TinyML: KWS |
|---|---|---|---|
| Инженерия данных | Подавать пакеты изображений достаточно быстро, чтобы поддерживать высокую загрузку GPU. | Удерживать онлайновые запросы к хранилищу признаков в пределах бюджета задержки обслуживания; таблицы эмбеддингов доминируют в объеме хранения и актуальности. | Подготовить короткие аудиоклипы для устройства с ограниченным объемом SRAM. |
| Обучение | Согласовать предобработку, пакетирование, смешанную точность и выполнение модели, чтобы сократить простой ускорителя. | Оптимизировать разреженные обращения к эмбеддингам, поскольку пропускная способность памяти ограничивает производительность. | Искать наименьшее семейство моделей, которое по-прежнему надежно распознает ключевую фразу. |
| Развертывание | Использовать большие пакеты, когда пропускная способность и стоимость важнее задержки отдельного запроса. | Выполнять строгие интерактивные целевые значения задержки p99 при поддержании актуальности признаков. | Укладываться в жесткий бюджет энергии в режиме постоянной работы. |
Варианты рабочего процесса для маячных моделей: три выбранных этапа жизненного цикла нацелены на разные члены железного закона в зависимости от доминирующего ограничения нагрузки. ResNet-50 подчеркивает полезные вычисления за единицу времени, DLRM — перемещение данных и актуальность эмбеддингов, а KWS — энергию и объем памяти.
Каждый этап этого рабочего процесса ставит свои системные задачи: от подготовки наборов данных объемом в несколько терабайт до поддержания задержки хвоста распределения в эксплуатации. Чтобы обосновать эти задачи, нужен количественный взгляд на то, как этапы управляют выполнением.
Железный закон рабочего процесса
Шесть этапов жизненного цикла меняют разные члены железного закона ML-систем . Вместо жестких соответствий один к одному эти отображения служат диагностическими отправными точками:
- Постановка задачи: задает целевые ограничения по точности, задержке, стоимости, приватности и парадигме развертывания. Эти цели определяют, какие члены уравнения могут расти, а какие с самого начала должны быть ограничены.
- Сбор и подготовка данных: определяют состав набора данных и объем байтов , поступающих в последующие конвейеры. Отбор данных также может менять объем обучения, необходимый для достижения целевого качества.
- Разработка модели и обучение: определяют число операций , шаблоны повторного использования данных, перемещение параметров и достижимую эффективность оборудования .
- Оценка и валидация: проверяют, соответствуют ли качество модели и сквозное выполнение требованиям развертывания на целевой системе.
- Развертывание и интеграция: определяют путь обслуживания, включая перемещение данных во время выполнения, эффективность выполнения и фиксированные накладные расходы .
- Мониторинг и сопровождение: наблюдают за дрейфом распределения, задержкой, пропускной способностью и эксплуатационными затратами после запуска, возвращая нарушения на более ранние этапы для повторной оптимизации.
Рассмотрение жизненного цикла через железный закон привязывает задержку и стоимость к физике оборудования. Производственные рабочие процессы одновременно должны удовлетворять требованиям точности, безопасности, приватности и организационным ограничениям, которые лежат вне этого уравнения.
Пример: скрининг DR
Скрининг диабетической ретинопатии (DR) служит сквозным учебным примером во всей главе, поскольку выдерживает три важные проверки: на поверхности он выглядит простым, но на практике выявляет глубокое операционное трение; он охватывает весь спектр развертывания от облачного обучения до периферийного вывода; а его трудности хорошо задокументированы на реальных развертываниях. Литература охватывает обе стороны разрыва между лабораторией и полевыми условиями: Gulshan et al. (2016) описывают исследование валидации на эталонных данных для автоматического обнаружения DR, а Beede et al. (2020) — сбои рабочего процесса и инфраструктуры, которые возникли при развертывании системы глубокого обучения в тайских клиниках. Вместе эти источники дают эмпирическую основу, которая прослеживает путь от сбора данных и валидации до физических ограничений развертывания.
Диабетическая ретинопатия — ведущая причина предотвратимой слепоты.8 Ограниченный доступ к специалистам в регионах с недостатком ресурсов мотивирует автоматизированные программы скрининга, однако для выявления болезни нужно распознавать тонкие патологические признаки. На «Кровоизлияния в сетчатке при скрининге DR» сопоставлены здоровая сетчатка и сетчатка с диабетической ретинопатией: выявление локальных микрососудистых кровоизлияний требует высокого пространственного разрешения и надежной проверки входных данных.
Кровоизлияния в сетчатке при скрининге DR: два изображения глазного дна рядом иллюстрируют тонкие визуальные признаки, которые система ML для скрининга должна обнаруживать. Выявление локальных микрососудистых поражений (например, отмеченного кровоизлияния) требует сохранения тонкого пространственного разрешения по всему конвейеру зрения и строгой проверки качества входных изображений, чтобы справляться с различиями освещения и камер в полевом развертывании. Источник: Google.
Первые исследования достигли уровня экспертов в контролируемых условиях. Однако перенос лабораторных моделей в клиническое развертывание выявил серьезное операционное трение: вариации освещения датчиков, периодические перебои сетевого соединения в сельских клиниках, нормативное соответствие и встраивание в клинический рабочий процесс.9 Для метрик, которые повторяются в этом примере, чувствительность — это доля истинно положительных результатов, специфичность — доля истинно отрицательных, а AUC — площадь под ROC-кривой (receiver operating characteristic). Одни и те же динамики распространения ограничений действуют, независимо от того, развертываем ли мы медицинскую диагностику в сельских пунктах здравоохранения или компьютерное зрение на массовых смартфонах: аппаратные пределы, вариативность работы персонала, делающего снимки, и качество данных определяют жизнеспособность в реальных условиях гораздо сильнее, чем AUC на эталонных данных.
Спецификация интерфейсов этапов
Каждый этап жизненного цикла работает как отдельная инженерная фаза с определенными входами, выходами и инвариантами качества. В производственных движках рабочих процессов эти контракты формализуются на направленном ациклическом графе (DAG) рабочего процесса, где узлы представляют отдельные задачи выполнения, а направленные ребра — проверенные зависимости артефактов. Общий жизненный цикл ML образует циклическую петлю обратной связи на протяжении недель и месяцев, но каждый автоматизированный прогон конвейера выполняется как ациклический граф зависимых шагов. Это позволяет оркестраторам распараллеливать независимые ветви, кешировать проверенные промежуточные результаты и останавливать выполнение до того, как нарушенные контракты распространятся дальше. Так же как микросервисы опираются на спецификации интерфейсов, чтобы задать границы интеграции, этапы конвейера ML требуют контрактов по схеме и распределению, чтобы выявлять несовместимости до того, как некорректные данные или деградировавшие веса пойдут дальше. «Спецификация интерфейсов этапов» формализует эти контракты, определяя требования ко входам, результаты и инварианты качества для всех шести этапов жизненного цикла.
| Этап | Контракт на входе | Контракт на выходе | Инвариант качества |
|---|---|---|---|
| Постановка задачи | Бизнес-требования; операционный контекст | Измеримые цели; выбор парадигмы развертывания; ресурсные ограничения | Все критерии успеха поддаются количественной оценке; целевая парадигма развертывания указана явно |
| Сбор и подготовка данных | Цели; целевое развертывание; требования к качеству | Версионированный набор данных со схемой; конвейер предобработки; правила валидации данных | Распределение близко к ожидаемой производственной среде; разметка удовлетворяет требованиям к точности |
| Разработка и обучение модели | Набор данных; целевые показатели точности; ресурсные ограничения | Обученные веса модели; конфигурация обучения; журналы экспериментов | Пороги точности достигнуты в пределах вычислительного бюджета; архитектура совместима с целевым развертыванием |
| Оценка и валидация | Обученная модель; отложенная тестовая выборка; критерии оценки | Метрики по подгруппам; анализ режимов отказа; сертификат валидации | Ни одна критическая подгруппа не опускается ниже минимальных порогов; калибровка уверенности соответствует требованиям предметной области |
| Развертывание и интеграция | Валидированная модель; требования к инфраструктуре; целевые значения соглашения об уровне обслуживания (SLA) | Конечная точка обслуживания; средства мониторинга; процедуры отката | Задержка и пропускная способность соответствуют требованиям парадигмы; интеграционные тесты пройдены |
| Мониторинг и сопровождение | Работающая система; базовые показатели производительности; пороги оповещений | Оповещения о дрейфе; критерии рассмотрения обновлений; отчеты об инцидентах | Покрытие оповещений и окна обнаружения определены; обнаруженная деградация запускает проверку |
Спецификация интерфейсов этапов: у каждого этапа жизненного цикла есть явные требования к входам, результатам и инварианты качества, которые должны выполняться, чтобы этап считался завершенным. Нарушения этих контрактов создают технический долг, который накапливается на последующих этапах. Выбор парадигмы развертывания на этапе постановки задачи (облако, периферия, мобильные устройства или TinyML из раздела «Системы машинного обучения») ограничивает все последующие этапы: цель TinyML предъявляет иные требования к данным, модели и мониторингу, чем облачная цель.
Эта спецификация объясняет, почему проекты ML проходят циклы итераций, показанные на «Упрощенном жизненном цикле с обратной связью». Когда последующий этап обнаруживает, что предшествующий контракт нарушен (например, оценка показывает, что распределение обучающих данных не совпадает с производственным), проекту приходится возвращаться назад, чтобы устранить первопричину. Команды, которые проверяют контракты на каждом переходе между этапами, ловят нарушения рано, когда стоимость исправления минимальна. Проверка контрактов этапов до перехода дальше не дает дефектам перерасти в переделки на поздних этапах, как показано в аудите переходов ниже.
Аудит переходов между этапами
Сценарий: инженерная команда утверждает, что завершила постановку задачи для классификатора медицинских изображений, и пытается перейти к сбору данных, не установив ограничений целевого развертывания.
Диагноз: в выходном контракте отсутствуют выбор парадигмы развертывания и ресурсные ограничения (целевые значения задержки и памяти). Попытка развернуть модель на поздней стадии жизненного цикла выявляет нарушения (например, предел памяти периферийного устройства менее 200 МБ), и исправление обходится в 16 раз дороже, чем раннее.
Системный урок: переходы между этапами работают как контрольные шлюзы качества на уровне плоскости управления жизненного цикла ML. Строгая проверка выходных контрактов до перехода дальше предотвращает дорогостоящие переделки на более ранних этапах и гарантирует, что сбор данных соответствует целевому оборудованию развертывания.
Без явных контрольных шлюзов контрактов неявные допущения распространяются дальше. Самая ранняя возможность ограничить их — постановка задачи, которая фиксирует эксплуатационные ограничения, обязательные для последующих этапов.
Постановка задачи
Постановка задачи в ML начинается с фраз, которые выглядят обманчиво простыми. Руководитель продукта пишет: «Создайте модель, которая обнаруживает диабетическую ретинопатию». Это одно предложение скрывает десяток инженерных решений: пороги чувствительности ради безопасности пациентов, возможности оборудования в сельских клиниках, бюджеты задержки, которые удерживают клиницистов в процессе работы, и регуляторные рамки, определяющие одобрение. В традиционном ПО требования переходят в детерминированный поток управления, явные конечные автоматы и реляционные схемы. В системах ML определение того, что система должна делать, неотделимо от определения того, как она будет учиться на данных и какие физические ограничения должно выдержать ее выполнение.
Сбалансировать эти требования можно только рассуждая о всем стеке системы. Инженерная команда не может оптимизировать точность изолированно: погоня за небольшим приростом чувствительности за счет увеличения глубины модели или перехода на визуальные трансформеры раздувает число параметров и арифметическую интенсивность, напрямую бросая вызов ограничениям памяти и тепловым пределам недорогого клинического оборудования. И наоборот, прореживание модели, чтобы уложиться в бюджет DRAM встроенного ускорителя, рискует опустить чувствительность ниже клинических порогов безопасности. Каждое техническое решение действует в задаче многокритериальной оптимизации, где статистические цели, физические бюджеты выполнения и эксплуатационные требования постоянно ограничивают допустимое пространство проектирования друг друга.
Слои ограничений
Любая постановка задачи ML раскладывается на три взаимодействующих слоя ограничений: статистический, физический и операционный. Эти слои образуют связанный стек, в котором ограничение одного уровня сразу сужает степени свободы остальных, а не являются изолированными требованиями. Статистический слой задает целевое поведение на распределениях данных: например, чувствительность выше 90 процентов и специфичность выше 80 процентов для разных пациентов и моделей камер, а не невзвешенную общую точность, которая скрывает режимы отказа у меньшинств. Физический слой ограничивает выполнение рамками аппаратуры: для сельских клиник это вывод на локальных периферийных ускорителях при жестких тепловых бюджетах, ограниченном объеме памяти (например, от 4 до 8 ГБ общей DRAM) и бюджетах задержки менее секунды, чтобы клинический процесс оставался интерактивным без зависимости от прерывистых сетевых каналов. Операционный слой охватывает клиническую аудируемость, регуляторное одобрение и рамки управления, которые определяют долгосрочное сопровождение системы.
Операционный слой несет физические последствия, с которыми традиционная инженерия ПО почти не сталкивается. В традиционной базе данных удаление записи пациента — это оператор DELETE. В системе ML веса модели могут кодировать статистические закономерности, выученные из этой записи: когда закон или регулятор требует устранить это влияние, соответствие требованиям может потребовать машинного разобучения (machine unlearning, активная область исследований с неполными гарантиями) или переобучения на оставшихся данных. Обязательство и средство зависят от действующего правила и системы. В масштабе системы DR любой из вариантов может превратить соответствие требованиям к приватности в повторяющуюся статью вычислительного бюджета, а происхождение данных обучения — в архитектурное ограничение.
Принцип распространения ограничений («Принцип распространения ограничений») объясняет, почему все три слоя должны быть связаны до начала разработки: ограничение, которое существует в физическом или операционном окружении, но остается незаявленным в постановке задачи, не исчезает. Оно позже проявляется как архитектурное нарушение, когда зависимые решения уже затвердели. Например, если инженерная команда задает цель только как общую точность классификации снимков сетчатки, стандартная оптимизация будет минимизировать функцию потерь перекрестной энтропии по большинству классов. В несбалансированной популяции скрининга, где 90 процентов пациентов здоровы, модель, которая предсказывает «болезни нет», достигает 90-процентной общей точности, пропуская при этом каждого пациента, которому нужна срочная помощь. Предотвратить это можно, переведя доменные инварианты (асимметричную цену пропущенного диагноза) в явный статистический контракт, который связывает формулировку функции потерь с бюджетом аппаратуры развертывания.
Когда виновата была метка (2018)
Контекст: в 2014 году Amazon собрала инженерную команду в своем эдинбургском центре, чтобы создать внутреннюю систему машинного обучения для ранжирования кандидатов на технические должности. Систему обучили на резюме, поданных в Amazon за десять лет (Dastin, 2018).
Механизм: поскольку прежний найм в основном велся среди мужчин, модель выучила, что язык, связанный с мужчинами, коррелирует с успехом при найме. Она систематически штрафовала такие слова, как «женский», и понижала оценку выпускниц женских колледжей.
Последствия: модель воспроизвела исторический перекос при найме, и автоматизированный скрининг резюме оказался непригоден для производственного найма.
Реакция: Amazon отказалась от экспериментального инструмента, поскольку попытки убрать явные признаки пола не могли гарантировать, что модель не выучит другие дискриминационные прокси-признаки.
Системный урок: постановка задачи должна задавать критерии справедливости, аудируемости и отказа до сбора данных и обучения. Рабочий процесс, обученный на смещенных метках, не выучивает эксплуатационную цель; он учится воспроизводить метки.
Постановки задач эволюционируют
Постановка задачи — это не статичная спецификация, зафиксированная в начале проекта; она развивается по мере расширения развертывания. Когда программа скрининга DR масштабируется от пилотной клиники с откалиброванной камерой глазного дна до региональных центров здоровья с разнородным оборудованием для съемки и различающимся составом пациентов,10 первоначальные допущения ломаются. Профили шумов датчиков расходятся, оптическое разрешение меняется, а демографические различия смещают частоты ошибок в подгруппах. Адаптация к этой эксплуатационной реальности заставляет постановку задачи включать стратифицированные целевые показатели точности и более широкие матрицы совместимости оборудования.
Такая динамическая эволюция напрямую вытекает из статистической природы ML. Масштабирование выявляет входы из длинного хвоста, которых не было в пилотной оценке, а производственные среды вносят ковариатный сдвиг, который никакой статический офлайн-набор данных полностью не отражает. Надежная постановка задачи предвидит этот дрейф, заранее задавая протоколы управления: какие сигналы мониторинга запускают формальную переоценку и как обновления порогов распространяются через последующие этапы конвейера. Когда эти эксплуатационные ограничения и границы производительности заданы на бумаге, рабочий процесс должен закрепить их в физических артефактах, начиная с конвейеров сбора данных, которые формируют обучающее распределение.
Сбор данных
Ограничения, заданные на бумаге, начинают действовать только тогда, когда опираются на реальные данные. Переход от постановки задачи к сбору данных связывает абстрактные целевые показатели точности с эксплуатационной реальностью: шумом датчиков, пропущенными записями и сетевыми ограничениями. В терминах железного закона этот этап определяет размер набора данных и объем байтов , который должны переместить системы хранения, сети и шины памяти. Ограничения развертывания, установленные при постановке задачи, превращаются в технические требования к данным: если модель должна работать на периферийных устройствах, конвейер сбора должен выдавать входы, совместимые с периферийной предобработкой; если она должна достигать чувствительности 90 процентов для разных популяций, набор данных должен достаточно полно представлять эти подгруппы, чтобы поддержать обучение модели.
Сбор и подготовка данных — это непрерывная инженерная дисциплина, а не разовая задача (глава «Инженерия данных»). Для скрининга DR конвейер должен принимать изображения, достаточно разнообразные статистически, чтобы обобщаться между клиниками, достаточно устойчивые, чтобы справляться с разными условиями съемки, и размеченные с достаточной клинической строгостью, чтобы выдержать регуляторные проверки.
Решения постановки задачи определяют требования к данным и в примере DR. Установленные многомерные критерии успеха (точность для разных популяций, эффективность оборудования и соответствие регуляторным требованиям) требуют стратегии сбора данных, которая выходит за рамки типичных наборов для компьютерного зрения. Не все данные одинаково полезны для обучения: глава «Отбор данных» показывает, как отбор может сохранить сопоставимое качество при меньших вычислительных затратах, когда набор данных содержит избыточность, при условии что выбранное подмножество сохраняет свидетельства, которые нужны задаче.
Системе DR нужны порядка снимков глазного дна сетчатки, каждый из которых просматривают несколько экспертов-офтальмологов. Экспертный консенсус решает присущую медицинской диагностике субъективность (два офтальмолога могут расходиться в пограничных случаях) и одновременно задает эталонные метки, которые выдержат регуляторную проверку. Процесс разметки должен фиксировать клинически значимые признаки, такие как микроаневризмы, кровоизлияния и твердые экссудаты, на всем спектре тяжести болезни.
Исходные высокоразрешающие снимки сетчатки могут занимать десятки мегабайт на изображение до сжатия, что создает серьезные инфраструктурные проблемы. Клиника, которая обрабатывает несколько десятков пациентов в день, может за неделю накапливать от нескольких гигабайт до десятков гигабайт данных изображений. Такой объем может занять большую часть ограниченного канала отправки данных (uplink) в часы работы клиники, поэтому наряду со сжатием, пакетированием, планированием или увеличением пропускной способности канала возможна и локальная обработка.
Сводки с периферии выигрывают у загрузки сырых медицинских изображений, когда доминирует пропускная способность.
Пропускная способность и вычисления
Задача: сельская клиника снимает сетчатку для скрининга DR. Какую долю предполагаемого окна отправки в ту же смену заняли бы сырые загрузки и какие альтернативы снижают эту нагрузку?
Расчет:
- Суточный объем: при 150 пациентах в день, 10 снимках на пациента и 5 МБ на снимок клиника производит 7,5 ГБ в день.
- Время отправки: канал имеет пропускную способность 2 Мбит/с, или 0,25 МБ/с. Деление 7 500 МБ на эту скорость дает 30 000 с, примерно 8,3 ч.
- Ограничение: если клиника требует отправки в ту же смену в течение своего рабочего окна в 8 ч, одна только эта передача занимает канал на 104,2 процента этого окна и может конкурировать с другим трафиком.
Системный вывод: локальный вывод с отправкой сводок детекции (10 КБ на пациента) снижает использование пропускной способности в 5 000 раз. Ночное пакетирование, сжатие, планирование или более быстрый канал — альтернативы, которые этим расчетом не сравниваются.
Разрыв между лабораторией и полевыми данными
Лабораторные данные и производственные данные существуют в разных мирах. Этот разрыв между лабораторией и полем появляется, когда скрининг DR развертывается в сельских клиниках Таиланда и Индии: снимки поступают с разнообразного оборудования, которым управляет персонал с разным уровнем опыта, часто при неудовлетворительном освещении и непостоянном положении пациента. Модель, обученная на высококачественных исследовательских снимках со стандартизированных камер глазного дна, может подвести на размытых, плохо освещенных снимках со старого оборудования. Причина здесь не в ошибке алгоритма, а в том, что распределение данных вышло за пределы обучающей области.
Поскольку сырые загрузки изображений могут превышать пропускную способность канала клиники, периферийное развертывание предлагает альтернативу. Развертывание периферийных ускорителей, таких как семейство NVIDIA Jetson,11 позволяет клиникам выполнять предобработку и вывод локально. Это снижает сетевую передачу на порядки, но вводит аппаратный компромисс: использовать более компактную модель, которая укладывается в маломощный периферийный бюджет, или закупить более производительные локальные устройства ценой более высоких затрат.
Ограничение пропускной способности делает инфраструктуру решением сбора данных, а не поздней деталью реализации. Архитектура сценария сочетает периферийные устройства для локального вывода и предобработки, клинические серверы агрегации для управления данными и буферизации и облачную инфраструктуру обучения для периодических обновлений модели. Целевая сквозная задержка составляет менее 100 мс, а работа должна продолжаться без задержек, вызванных отсутствием связи.
Ограничения приватности накладывают аналогичное архитектурное решение. Правила защиты данных пациентов могут побуждать к локальному хранению или распределенному обучению, но обычно они задают меры защиты и допустимые способы использования, а не одну обязательную топологию обучения. Рабочие процессы, которые держат сырые данные клиник локально и передают лишь одобренные обновления или сводки, усложняют и сбор данных, и инфраструктуру обучения моделей.
Распределенная инфраструктура данных
Если развертывание растет от нескольких клиник до сотен, инфраструктура данных должна масштабироваться соответственно. Каждое изображение сетчатки проходит несколько этапов: камеры клиник делают снимок, локальные системы обеспечивают первичное хранение и обработку, проверки качества убеждаются в пригодности, защищенная передача перемещает данные в центральные системы, и, наконец, интеграция с наборами данных для обучения завершает конвейер. Решения об инфраструктуре на каждом этапе формируются ограничениями развертывания, установленными при постановке задачи.
Уровни хранения — еще одно место, где конвейер данных либо сохраняет, либо разрушает скорость итераций на последующих этапах. Разные шаблоны доступа требуют разных решений для хранения, поэтому команды обычно внедряют многоуровневые архитектуры хранения,12 каждая из которых настроена под частоту доступа и требования к производительности.
Горячее хранилище использует высокопроизводительные NVMe SSD для данных, которые сейчас участвуют в циклах обучения. Теплое хранилище использует совместимое с S3 объектное хранилище для недавних наборов данных и активных валидационных выборок. Холодное хранилище использует дешевые архивные системы, такие как AWS Glacier, для исторических данных, которые нужны для регуляторных журналов аудита, но редко запрашиваются.
На практике граница между уровнями динамична: набор данных переходит из теплого уровня в горячий, когда выбран для следующего прогона обучения, и из горячего в холодный, когда модель, которую он обучил, заменена. Автоматизированные политики жизненного цикла управляют этими переходами, продвигая данные по расписанию обучения и понижая их уровень по давности обращения. Этот шаблон подробно разбирает глава «Инженерия данных».
Развертывание в сельских клиниках сталкивается с серьезными ограничениями связи, которые вынуждают выбирать стратегию передачи. Клиники с надежным широкополосным доступом могут передавать снимки почти в реальном времени для централизованной обработки, но клиникам с прерывистыми спутниковыми каналами, распространенными в удаленных районах Индии и Африки к югу от Сахары, нужны архитектуры «сохранить и переслать», которые пакетируют снимки в окна связи и асинхронно согласовывают результаты. Этот выбор распространяется на весь стек: клиникам с архитектурой «сохранить и переслать» нужны более крупные локальные буферы хранения, более надежные возможности локального вывода и логика разрешения конфликтов, когда локально полученные предсказания расходятся с более поздним облачным анализом.
Масштабируемость инфраструктуры — более трудная задача, чем сырая емкость. По мере роста системы от нескольких пилотных клиник до сотен производственных площадок разнородность данных растет вместе с их объемом: модель камеры, освещение и привычки оператора в каждой клинике могут давать другое распределение изображений. Инфраструктура должна справляться с растущей пропускной способностью и при этом отслеживать, откуда пришли данные. Метаданные о происхождении необходимы для отладки регрессий точности на конкретных площадках и для выполнения требований к журналу аудита, которые предъявляет регуляторная валидация. Поэтому расширение от первых клиник к широкой сети порождает возникающую сложность: вариативность оборудования, рабочих процессов, условий эксплуатации и размеров изображений, поскольку новые клиники добавляют устройства с более высоким разрешением. Каждая клиника становится отдельным источником данных,13 но система должна оценивать качество по всей сети.
Ответом рабочего процесса становится координирующая инфраструктура. Общие репозитории артефактов, версионированные API и автоматизированные конвейеры тестирования делают вариативность конкретных клиник видимой до того, как она превратится в сбой модели. Та же разнородность и делает необходимой валидацию в момент съемки: чем больше и разнообразнее сеть клиник, тем меньше пользы от обнаружения ошибок качества через недели в централизованном прогоне обучения.
Обеспечение качества и валидация
Размытый снимок сетчатки, который проскользнул мимо проверок качества, не просто занимает место в хранилище. Если такие снимки попадают в обучение с ненадежными метками или часто встречаются в эксплуатации, они могут искажать свидетельства, доступные модели, и повышать риск ошибок. Обеспечение качества гарантирует, что данные отвечают требованиям, от которых зависят последующие этапы. В нашем примере с DR автоматические проверки в точке сбора выявляют такие проблемы, как плохая фокусировка или неверный кадр, позволяя персоналу клиники немедленно переснять снимки, а не обнаружить проблему через недели во время обучения модели.
Валидация выходит за рамки качества изображений: она проверяет правильность разметки, привязку к пациенту и соответствие требованиям приватности. Локальная валидация выявляет проблемы в точке съемки; централизованная валидация обнаруживает аномалии распределения по всей сети клиник, например отмечая, когда снимки одной площадки смещаются в узкий демографический диапазон, что исказило бы обучающую выборку.
Решения о сборе данных напрямую ограничивают разработку модели: пропускная способность определяет, какие архитектуры возможны, требования приватности формируют конвейеры обучения, а вариативность качества в клиниках определяет требования к устойчивости. «Пути обратной связи между этапами жизненного цикла» конкретно показывает эти пути обратной связи. Проследите каждую помеченную стрелку: оценка выявляет, что модель DR работает хуже на снимках со старых камер глазного дна, что запускает целевой сбор данных в клиниках, использующих такое оборудование. Валидация по разным популяциям пациентов показывает меньшую чувствительность для пациентов с катарактой, что запускает стратегии аугментации данных, имитирующие помутнения хрусталика. Мониторинг выявляет дрейф точности в клиниках, которые обновили оборудование для съемки, и это возвращается обратно, чтобы обновить шаги предобработки.
Пути обратной связи между этапами жизненного цикла: многоэтапные пути обратной связи показывают, как открытия на последующих этапах могут требовать исправлений на более ранних. Пробелы в качестве и распределении данных, выявленные во время оценки, могут вызвать целевой сбор или аугментацию, а эксплуатационные ограничения и дрейф производительности после расследования могут мотивировать изменения модели, данных или конвейера.
Эти пути обратной связи подчеркивают главную мысль: сбор данных не заканчивается с началом обучения. Качество, объем и разнообразие данных, которые текут по этим конвейерам, становятся сырьем для следующего этапа — превращения отобранных наборов данных в обученные модели.
Разработка модели
У команды DR есть 128 000 размеченных снимков сетчатки, проверенный конвейер предобработки и цель: чувствительность более 90 процентов на периферийном оборудовании при задержке вывода менее 50 мс. Вопрос теперь не в том, какие данные собирать, а в том, какую модель строить, и на этот вопрос нет ответа вне уже установленных ограничений развертывания. В терминах железного закона этот этап определяет член операций : архитектурные решения задают вычислительный минимум, который должно выдерживать оборудование. Системы обучения (глава «Обучение моделей») должны координировать прием данных, распределенную синхронизацию параметров и подбор гиперпараметров14, не останавливая конвейеры выполнения. В высокорисковых областях, таких как здравоохранение, каждое проектное решение влияет на клинический исход, поэтому техническую производительность и эксплуатационные ограничения нужно интегрировать с самого начала.
Перед системой DR стоит трудная задача обучения: добиться диагностической точности на уровне эксперта при конечных бюджетах размеченных данных и оптимизации. Перенос обучения15 решает это ограничение, адаптируя модель, предобученную на исходной задаче, к целевой задаче. Обучающая часть соревнования ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 2012 содержит 1,3 млн размеченных изображений (Russakovsky et al., 2015). Повторное использование выученных представлений может улучшать оптимизацию и обобщение на целевой задаче по сравнению со случайной инициализацией; выгода зависит от сходства исходной и целевой задач, от того, какие слои переносятся, и от эффектов оптимизации, связанных с переносом (Yosinski et al., 2014).
В контролируемом исследовании валидации, описанном в работе (Gulshan et al., 2016), перенос обучения и размеченный набор из 128 000 изображений дали AUC16, равный 0,99, с чувствительностью 97,5 процента и специфичностью 93,4 процента при одной рабочей точке. Результат показывает потенциал крупномасштабного предобучения с дообучением на предметной области в условиях исследования; сам по себе он не подтверждает производительность в развертывании. Обратное распространение ошибки переводит функцию потерь классификации в корректировки весов по миллионам параметров. Лежащие в основе нейросетевые примитивы (глава «Вычисления в нейронных сетях») в конечном счете определяют, масштабируется ли обучение эффективно на специализированном оборудовании (глава «Обучение моделей»).
Высокая точность — лишь первая задача. Ограничения периферийного развертывания накладывают строгие требования к эффективности: модели могут потребовать уложиться в десятки или сотни мегабайт, выполнять вывод за десятки миллисекунд и работать в жестких бюджетах памяти.
С точки зрения рабочего процесса выигрыш в точности нужно взвешивать с учетом ограничений развертывания. Ансамблевое обучение17 иллюстрирует это противоречие: объединение предсказаний нескольких моделей часто повышает точность, но умножает задержку вывода и требования к памяти. Разнообразие может возникать из обучения на подмножествах данных (бэггинг), последовательного исправления ошибок (бустинг) или объединения предсказаний с помощью мета-модели (стекинг). В любом случае каждая дополнительная модель добавляет накладные расходы обслуживания, которые должны уместиться в целевое развертывание. Соревнование Netflix Prize показало, как сложность ансамбля может помешать развертыванию: победившее решение дало высокую точность, но Netflix не развернул его, поскольку эксплуатационные издержки превышали выгоду для бизнеса (Johnston, 2012).18
Исследовательские модели с ансамблями часто занимают несколько гигабайт, превышая пределы памяти периферийных устройств. Вместо того чтобы настраивать точность в отрыве от остального, команды должны применять систематическое сжатие моделей. Такие методы, как квантование и прореживание (глава «Сжатие моделей»), уменьшают размер модели и объем трафика памяти, но каждый шаг сжатия нужно проверять, чтобы не опустить клиническую чувствительность ниже требуемых порогов. Разработка модели — это непрерывный баланс между статистической производительностью и физической стоимостью выполнения.
Воспроизводимые системные артефакты
Баланс точности и эффективности дает больше, чем одни обученные веса. Распространенная ошибка — считать веса обученной модели единственным результатом этого этапа. В зрелом рабочем процессе ML результатом является воспроизводимый системный артефакт, который состоит из четырех компонентов:
- Веса модели: выученные параметры.
- Код вывода: точный код, который запускает модель, включая логику предобработки.
- Спецификация окружения: полный граф зависимостей (например, контейнер Docker,
requirements.txt, драйверы CUDA), необходимый для выполнения кода. - Конфигурация: гиперпараметры и настройки времени выполнения.
Без упаковки окружения вместе с моделью несоответствие зависимостей может привести к опасным сбоям. Одни несовместимости, включая неподдерживаемые комбинации CUDA или отсутствующие библиотеки, проявляются громко и сразу. Другие различия в совместимых ядрах, библиотеках линейной алгебры или процедурах изменения размера изображений, таких как в OpenCV и PIL, могут менять результаты с плавающей запятой или интерполяцию пикселей, не роняя процесс обслуживания. Такие изменения способны сдвигать выходы модели и влиять на точность. Поэтому воспроизводимость окружения необходима не только для успешного выполнения, но и для проверки эквивалентного поведения вывода. Модель, которая достигает точности 99 процентов в разработке, должна быть переоценена, если меняется ее производственное окружение, даже когда вывод завершается без исключений.
Точность и эффективность
Медицинские приложения требуют специфических метрик производительности19, которые отличаются от стандартных выходов классификации и функций потерь, описанных в главе «Вычисления в нейронных сетях». Системе DR нужна высокая чувствительность (чтобы не пропускать заболевания, требующие направления к специалисту) и высокая специфичность (чтобы не перегружать систему направлений). Эти метрики должны поддерживаться для разных популяций пациентов и условий качества изображений.
Оптимизации только под клиническую производительность недостаточно. В этом сценарии артефакт модели должен оставаться меньше 500 МБ, чтобы свободно умещаться в 4–8 ГБ общей системной памяти периферийной цели, а устройство должно работать в энергетическом бюджете менее 20 Вт и укладываться в клинический бюджет задержки. Улучшения по одному измерению часто достигаются ценой других: член операций , объем модели в байтах, который входит в , и фиксированные накладные расходы обслуживания могут тянуть в разные стороны. Глава «Архитектуры нейронных сетей» исследует емкость модели, «Системы машинного обучения» обсуждает осуществимость развертывания, и внутреннее напряжение между ними определяет архитектурные решения. Систематическое сжатие и повторная валидация20 могут сократить разрыв, выполняя требования развертывания и стремясь сохранить клиническую пользу.
Компромисс с ансамблем иллюстрирует более широкую закономерность: выбор ансамбля из легких моделей вместо одной большой снижает сложность каждой модели (что делает возможным развертывание на периферии), но увеличивает сложность конвейера (требуются логика оркестрации и мониторинг нескольких моделей). Каждое архитектурное решение порождает такие волны последствий для последующих этапов.
Разработка, управляемая ограничениями
Реальные ограничения формируют разработку модели от первоначального исследования до финальной оптимизации и требуют систематических экспериментов. Разработка начинается с того, что специалисты по данным работают вместе с предметными экспертами (в случае DR с офтальмологами), чтобы выявить тонкие поражения и требования к качеству изображений, которые важны клинически. Без этих знаний предметной области архитектор модели может выбрать разрешение или рецептивное поле (входную область, которую видит каждый внутренний признак), отбрасывающее значимые детали еще до того, как сеть сможет их использовать. Такой междисциплинарный подход помогает архитектурам моделей сохранять клинически значимые свидетельства, учитывая вычислительные ограничения, выявленные при сборе данных.
Вычислительные ограничения глубоко формируют экспериментальные подходы. Множество вариантов моделей, перебор гиперпараметров и разные подходы к предобработке могут сделать исчерпывающий эксперимент дорогим. Эта экономическая реальность стимулирует инвестиции в лучшее планирование заданий, кеширование промежуточных результатов, раннюю остановку и автоматизированную оптимизацию ресурсов. Систематическая оптимизация гиперпараметров и дисциплинированное планирование экспериментов могут сократить вычисления по сравнению с исчерпывающим перебором.
Неопределенность результатов ML требует научной методологии: контролируемых переменных через фиксированные случайные начальные значения и версии окружения, систематических исследований абляции21 для выделения вклада отдельных компонентов, анализа смешивающих факторов для разделения эффектов архитектуры и эффектов оптимизации и статистической проверки значимости по нескольким прогонам обучения с помощью парных офлайн-тестов, а не A/B-тестирования22, которое предназначено для сравнения моделей на живом производственном трафике. Без такой строгости команды не могут отличить реальное улучшение производительности от статистического шума, и это различие становится критичным, когда разница в 0,5 процента точности решает, достигает ли модель клинического порога чувствительности.
На каждом этапе разработки команды проверяют модели на соответствие ограничениям развертывания, выявленным на более ранних этапах жизненного цикла. Каждое архитектурное новшество нужно оценивать и по улучшению точности, и по совместимости с ограничениями периферийных устройств и требованиями клинического процесса. Такой двойной подход к валидации гарантирует, что усилия разработки соответствуют целям развертывания, а не оптимизации под лабораторные условия, которые не переносятся на реальную производительность.
От прототипа к производству
Команда из трех специалистов по данным может вести эксперименты в таблицах и общих блокнотах, тогда как команде из 30 человек, скорее всего, понадобится общая инфраструктура рабочих процессов. По мере того как проект переходит от прототипа к производству, сложность растет сразу по нескольким измерениям: больше наборы данных, сложнее модели, параллельные эксперименты и распределенная инфраструктура обучения. Неформальная координация может стать узким местом в производственном масштабе, когда команды делят разбиения данных, разрешают конфликты экспериментов и согласуют версии блокнотов. «Иллюстративная динамика автоматизации рабочих процессов» показывает одно допущенное противопоставление ручной координации и общей платформы рабочих процессов. Оси — относительные единицы, призванные показать форму, а не абсолютную пропускную способность.
Иллюстративная динамика автоматизации рабочих процессов: концептуальные кривые масштабирования сопоставляют скорость экспериментов ручных рабочих процессов и общих платформ по мере роста команды. Неструктурированные ad hoc скрипты в конце концов сталкиваются с «налогом на координацию» из-за конфликтов слияния и неверсионированных артефактов, тогда как общие платформы могут сокращать дублирование работы благодаря переиспользуемым компонентам и автоматизированной прослеживаемости происхождения. Кривые иллюстрируют допущения, а не эмпирические законы масштабирования.
Кривые на «Иллюстративной динамике автоматизации рабочих процессов» кодируют допущенные функции, а не измеренные законы масштабирования команд. Кривая ручного рабочего процесса представляет издержки координации из-за совместного использования разбиений данных, разрешения конфликтов экспериментов и согласования версий блокнотов. Кривая платформы представляет выгоды от переиспользуемых компонентов предобработки, версионированного отслеживания экспериментов и автоматизированного планирования. Фактическая пропускная способность не обязана выходить на насыщение или расти сверхлинейно: она зависит от параллелизма нагрузки, накладных расходов платформы, структуры команды и качества экспериментов. «Иллюстративная динамика автоматизации рабочих процессов» поэтому показывает, почему общая инфраструктура может сокращать дублирующуюся работу и ручную передачу задач, не предсказывая универсальной отдачи для каждой команды.
Воспроизводимость и технический долг
Общая инфраструктура может ускорять эксперименты, но быстрые итерации создают скрытую обязанность. Если эксперименты не воспроизводимы, команда не может надежно отличить настоящие улучшения от шума, а кодовая база накапливает технический долг23, который растет с каждым невоспроизводимым результатом.
Воспроизведение результатов ML требует отслеживания версий данных, случайных начальных значений, конфигураций оборудования и версий библиотек наряду с логикой программы. Оборудование и недетерминированные операции могут менять результаты обучения, поэтому командам нужна родословная, чтобы отличать архитектурные изменения от вариаций между прогонами. Эта вариация между прогонами физически возникает потому, что параллельные потоки GPU выполняются с недетерминированным планированием: такие операции, как накопление градиентов на обратном проходе, суммируют значения в произвольном порядке поступления, а сложение чисел с плавающей запятой не ассоциативно (). Кроме того, оптимизированные библиотеки производителей (например, cuDNN) динамически выбирают разные вычислительные ядра на разных аппаратных прогонах, если детерминированное выполнение не зафиксировано явно, поэтому одинаковый код и одинаковые случайные начальные значения могут давать расходящиеся веса. Систематическое отслеживание экспериментов фиксирует уникальные идентификаторы прогонов и версии артефактов. Такие системы, как MLflow и Weights & Biases, связывают версии данных, коммиты кода, гиперпараметры и полученные модели, чтобы команды могли восстановить различия между прогонами.
Цена пренебрежения воспроизводимостью — экономическая, а не только научная. Команды, которые не могут воспроизвести результат, тратят вычислительные ресурсы на повторные прогоны экспериментов, которые могут не сойтись к тому же итогу. Инфраструктура воспроизводимости, такая как версионированные окружения, контролируемые конвейеры и автоматическое сохранение контрольных точек, сокращает избыточные вычисления и поддерживает более уверенные архитектурные решения.
Воспроизводимые, оптимизированные модели необходимы, но недостаточны. Модель, которая достигает точности уровня эксперта на подобранных исследовательских данных, все равно может подвести в эксплуатации. Следующий этап подвергает эти обученные артефакты систематическому тестированию в тех условиях, с которыми они действительно столкнутся.
Оценка и валидация
Модель скрининга диабетической ретинопатии (DR) достигает площади под ROC-кривой (AUC) 0,99 на подобранном исследовательском наборе данных. Но при проверке на полевых снимках из клиники в Чиангмае, где техник с двумя неделями обучения работает с пятилетней камерой глазного дна, чувствительность падает до 78 процентов. Программа выполняется без исключений и без кодов ошибок: сверточные фильтры просто встречают распределения пикселей, искаженные оптическим размытием, слабым освещением и переменным расширением зрачка, которых не было в обучающем распределении. Высокая точность на подобранных тестовых разбиениях не гарантирует эксплуатационной надежности. Перед развертыванием обученные модели должны пройти систематические шлюзы оценки и валидации, которые проверяют соответствие требованиям точности, задержки и устойчивости в реалистичных условиях развертывания. Этот этап превращает сырые файлы контрольных точек в готовые к эксплуатации программные системы, измеряя поведение относительно заранее заданных эксплуатационных порогов.
Валидация в условиях эксплуатации — это шлюз: чувствительность в поле ниже требуемого минимума проваливает развертывание.
Валидация модели
Валидация модели — это шлюз доказательств, который решает, подходит ли обученная модель для развертывания под заданный сценарий. Она проверяет модель на ограничениях развертывания (целевые значения задержки, целевые показатели по подгруппам, бюджеты стоимости и устойчивость к сдвигу распределения), но не может гарантировать безопасность при всех возможных условиях.
- Значение: валидация добавляет измерения, которые точность на тестовой выборке игнорирует. Модель с точностью 95 процентов на статической тестовой выборке может не уложиться в целевую задержку 100 мс на самых медленных запросах, не выполнить требуемый порог по подгруппам, например максимальный разрыв производительности в пять процентных пунктов между демографическими группами, или потерять более десяти процентных пунктов точности при распространенных проблемах качества изображения, таких как размытие и блики. Каждое непроверенное измерение — это риск развертывания, который незаметно накапливается в эксплуатации.
- Отличие: оценка измеряет поведение модели на выбранных наборах данных, метриках и экспериментах, которые могут включать тесты вне распределения и по подгруппам. Валидация собирает более широкие свидетельства, необходимые для конкретного решения о развертывании, включая задержку системы, пропускную способность, устойчивость, операционную готовность и стоимость.
- Типичная ошибка: частое заблуждение состоит в том, что валидация — это «еще один тест». На самом деле это многомерный шлюз: модель может пройти тест точности и все равно не пройти валидацию, потому что нарушает ограничения по задержке, надежности в подгруппах или стоимости, которые точность сама по себе не измеряет.
Тогда как оценка количественно описывает изолированные алгоритмические свойства на статических тестовых наборах, валидация выясняет, выполняет ли интегрированный программно-аппаратный конвейер операционные инварианты в условиях живого обслуживания. Поскольку никакой конечный набор тестов не может гарантировать корректность при всех возможных вариациях входов, валидация работает как дисциплина управления рисками, построенная из четырех этапов: пороговая проверка метрик, поэтапные производственные выкаты, стресс-тестирование среды и регуляторная квалификация.
Метрики оценки и пороги
Метрики оценки должны напрямую соответствовать асимметричным функциям потерь целевого приложения. В скрининге диабетической ретинопатии стандартная точность классификации вводит в заблуждение из-за дисбаланса классов: тривиальный классификатор, который для каждого образца предсказывает отсутствие болезни, достигал бы высокой точности в популяции скрининга с низкой распространенностью, пропуская при этом каждую поддающуюся лечению патологию. Поэтому системные требования задают раздельные рабочие пороги: чувствительность выше 90 процентов гарантирует, что клиника выявит действенную патологию, а специфичность выше 80 процентов не дает ложноположительным направлениям перегрузить вторичные офтальмологические клиники. Порог классификации, который удовлетворяет обоим ограничениям одновременно, — это эмпирическая задача оптимизации на ROC-кривой (receiver operating characteristic).
Агрегированные метрики могут скрывать локальные режимы отказа. Стратифицированная оценка делит тестовый корпус по метаданным, таким как возрастные группы пациентов, хронические сопутствующие заболевания и модели камер клиник, чтобы измерить паритет производительности по срезам. Базовая сеть для зрения (backbone), которая достигает общей точности 94 процента на полном бенчмарке, может опуститься ниже 80 процентов на снимках пациентов с катарактой или при слабом окружающем освещении. Такие локальные падения производительности незаметны в агрегированной оценке, но в эксплуатации проявляются как серьезные сбои безопасности. Систематические методики бенчмаркинга (глава «Бенчмаркинг») автоматически оценивают эти срезы распределения до того, как кандидатная контрольная точка будет продвинута.
Помимо точности меток, оценка должна измерять калибровку вероятностей24, то есть соответствует ли предсказанная моделью уверенность ее эмпирической частоте ошибок. Современные глубокие нейронные сети часто выдают некалиброванные апостериорные вероятности, давая чрезмерно уверенные предсказания (более 90 процентов уверенности), даже для образцов вблизи границ решения. Когда автоматизированные конвейеры сортировки направляют пограничные случаи к специалистам-людям по порогам уверенности, некалиброванность неверно распределяет клиническое внимание и подрывает доверие практиков.
Офлайн- и онлайн-оценка
Шлюз валидации начинается офлайн, на статических наборах данных, и постепенно переходит к живому производственному трафику. Офлайн-оценка на отложенных тестовых выборках устанавливает базовую сходимость, но не может выявить физические узкие места системы, такие как фрагментация памяти при динамическом пакетировании, задержки сериализации по сетевым интерфейсам или остановки конвейера, вызванные потоками реальной телеметрии. Онлайн-оценка проверяет кандидатные модели в реальной динамике обслуживания с помощью поэтапного выката:25
- Теневой режим (темный трафик): API-шлюз асинхронно зеркалирует живые производственные запросы на кандидатную модель, работающую на выделенных ресурсах ускорителя. Кандидат выполняет вывод при реальных размерностях входов и реальном параллельном потоке запросов, но его предсказания направляются в журналы телеметрии, а не возвращаются клиентам. Так изолируются всплески задержки хвоста, ошибки нехватки памяти (OOM) и численные расхождения без радиуса поражения для пользователей.
- Канареечное развертывание: входной балансировщик направляет небольшую долю живого трафика (например, от 1 до 5 процентов) на новый контейнер обслуживания, возвращая живые предсказания, и одновременно отслеживает телеметрию систем на предмет циклов падений, регрессии задержки и всплесков ошибок в последующих сервисах.
- A/B-тестирование: распределители трафика делят пользовательские запросы между кандидатной и базовой моделями с помощью детерминированного хеширования, предоставляя статистические свидетельства того, переводятся ли алгоритмические улучшения в измеримые бизнес- или клинические выгоды.
Этот рабочий процесс поэтапного выката управляет риском валидации развертывания. Он отличается от шаблона постепенного развертывания между уровнями, описанного в главе «Системы машинного обучения».
Каждый этап валидации дает собственные, взаимодополняющие эксплуатационные свидетельства, как суммирует «Покрытие этапов валидации».
| Этап валидации | Типичные свидетельства |
|---|---|
| Офлайн-оценка | Поведение алгоритма |
| Теневой режим | Поведение интеграции |
| Канареечное развертывание | Поведение на ограниченном трафике |
| A/B-тестирование | Сравнительные результаты |
Покрытие этапов валидации: этапы дают взаимодополняющие, перекрывающиеся свидетельства, а не разбивают сбои на непересекающиеся классы.
Инфраструктура обслуживания должна поддерживать такой поэтапный конвейер валидации изначально. Встраивать динамическое разделение трафика, асинхронное зеркалирование запросов и дифференциальное журналирование выходов в уже работающий стек развертывания означает существенно переделывать API-шлюзы и конвейеры телеметрии.
Валидация производственных условий
Валидация производственных условий проверяет, выдерживает ли модель ML физические и операционные среды, заданные при постановке задачи. Стандартная оценка неявно предполагает, что тестовые образцы распределены так же, как обучающие данные. Валидация в производственных условиях намеренно проверяет это допущение по трем измерениям: неоднородность площадок, возмущения на уровне входов и временной дрейф.
Внешняя и многоцентровая валидация рассматривают сдвиги распределения на уровне площадок: выяснить, выучила ли модель обобщаемые представления или переобучилась под датчики оборудования среды разработки. При скрининге сетчатки чувствительность камерных сенсоров, оптические покрытия линз и спектры освещения различаются у разных производителей оборудования. Модель DR, обученная исключительно на снимках высококлассных камер глазного дна в исследовательских больницах, может подвести при развертывании в общинных клиниках, использующих старое оборудование. Многоцентровая валидация требует сравнивать кандидатные модели на данных, собранных на независимых площадках клиник с разной конфигурацией оборудования, разным окружающим освещением и разным уровнем квалификации операторов.
Тестирование устойчивости переключает фокус на отдельные запросы на вывод, оценивая устойчивость к реалистичным физическим искажениям и граничным случаям. Для конвейеров компьютерного зрения такие возмущения включают шум датчика, оптическое размытие, неравномерный контраст и частичное перекрытие зрачка. В тайском клиническом исследовании DR (Beede et al., 2020) полевые техники с ограниченным формальным обучением часто снимали смещенные или плохо сфокусированные снимки глазного дна. Оценка моделей на синтетических и эмпирических наборах возмущений показывает, нужен ли конвейеру обслуживания фильтр качества изображения на входе, который отбрасывает испорченные кадры до того, как выделять такты ускорителя на вывод.
Временная валидация оценивает, сохраняет ли модель предсказательную точность по мере того, как рабочая среда меняется на протяжении недель и месяцев. Поперечные тестовые наборы, взятые из фиксированного исторического окна, не отражают последующих сдвигов в демографии пациентов, эпидемиологии заболеваний или практике клинической работы. Изменение распределения входов без изменения меток порождает ковариатный дрейф, тогда как сдвиги в связи между признаками входа и клиническими диагнозами вызывают концептуальный дрейф. Оба явления ведут к незаметной деградации модели и обосновывают необходимость непрерывной телеметрии и конвейеров обнаружения дрейфа, описанных в разделе «Мониторинг и сопровождение».
Регуляторная валидация
Системы ИИ в здравоохранении подлежат валидации, специфичной для устройства и регуляторного пути. Когда требуется предрыночная проверка FDA, доказательства безопасности и эффективности должны соответствовать устройству и его регуляторному пути; клинические данные требуются для одних подач и не требуются для других.26
Валидация, специфичная для предметной области, выходит за рамки формального соответствия требованиям и охватывает клиническую полезность и протоколы безопасности. В клинических исследованиях валидации скрининга DR автоматизированную систему запускают вместе с сертифицированными офтальмологами, сравнивая классификации модели с эталоном, установленным панелями консенсусного арбитража. Эти исследования должны показать не только неуступающую по точности диагностику, но и безопасные режимы отказа. Системы, которые безопасно отказывают, направляя неоднозначные или маломотивированные образцы клиническим специалистам, успешно встраиваются в оказание помощи, тогда как системы, которые отказывают незаметно, порождают катастрофические диагностические ошибки.
Валидация человеческих факторов оценивает модель как встроенный компонент контура принятия решений человеком. Точная модель, которая создает высокую когнитивную нагрузку на оператора, демонстрирует чрезмерную задержку вывода, останавливающую прием пациентов, или часто выдает ложные тревоги, вызывает утомление от оповещений и побуждает персонал клиники отключать систему или обходить ее. Поэтому протоколы валидации должны количественно оценивать социотехнические метрики, включая частоту отмен решений врачом, время обработки исследования и согласованность направлений, наряду с сырой статистической точностью.
Готовность к развертыванию
Прохождение шлюза валидации создает неизменяемый манифест выпуска, который сертифицирует модель для производственного развертывания. Манифест фиксирует точный хеш контрольной точки модели, конфигурацию контейнера предобработки, параметры калибровки, результаты бенчмарков по назначенным демографическим срезам и срезам оборудования, а также сертификаты регуляторного допуска. Если модель не проходит установленный порог, например если p99-задержка обслуживания превышает бюджет соглашения об уровне обслуживания (SLA) или чувствительность на слабо освещенных снимках глазного дна падает ниже минимума безопасности, шлюз выпуска останавливает развертывание. Диагностика тогда направляет проблему назад, к ответственному этапу жизненного цикла: курирование данных для целевого сбора, обучение модели для переоценки функции потерь или оптимизация компилятора для слияния ядер.
Прохождение алгоритмического шлюза валидации — необходимое условие для производства, но готовность к развертыванию требует проверки всего исполнительного слоя. Математически валидированная модель не может обслуживать трафик без работающего пути обслуживания: детерминированных процедур предобработки входа, сериализованных графов вывода, оптимизированных под целевую среду выполнения оборудования, сборщиков телеметрии и автоматических триггеров отката. Когда пакет доказательств валидации готов, операционная задача переходит от офлайн-проверки к онлайн-обслуживанию и системной интеграции.
Развертывание и интеграция
Модель, прошедшая валидацию в разработке, сталкивается с иными режимами отказа после развертывания в производстве. В сценарии DR модель должна работать на планшетах в сельских клиниках с периодической связью, интегрироваться с больничными информационными системами с различными требованиями к схеме и выдавать предсказания, которые клиницисты могут интерпретировать напрямую. Требования к задержке и связи исключают облачный вывод с передачей данных туда и обратно. Развертывание — это место, где абстрактные эксплуатационные ограничения становятся физическими системными требованиями. В терминах железного закона путь обслуживания связывает вместе перемещение данных, эффективность выполнения и фиксированные накладные расходы; какой член доминирует, зависит от архетипа. Нагрузки компьютерного зрения класса ResNet-50 могут использовать пакетирование для повышения пропускной способности, рекомендательные нагрузки класса DLRM подчеркивают интерактивную задержку и доступ к эмбеддингам, а аудионагрузки класса TinyML работают при жестких энергетических бюджетах («Варианты рабочего процесса для маячных моделей»). Выделенная инфраструктура обслуживания (глава «MLOps») управляет этими компромиссами под живым трафиком.
Требования к развертыванию
Развертывание переводит абстрактный вычислительный граф в жесткие физические бюджеты: пиковый объем памяти, задержку выполнения, пределы рассеяния тепла и пропускную способность сети. В клиническом сценарии скрининга эти ограничения вынуждают выбирать между централизованным облачным обслуживанием и локальным периферийным выполнением. Облачное развертывание консолидирует вычисления на централизованных ускорителях, но требует стабильных широкополосных каналов в глобальной сети и несет регулярные платежи за API и трафик. Наоборот, периферийное развертывание устраняет сетевую задержку передачи и работает во время отключений глобальной сети, но требует предварительных капитальных затрат на оборудование и ограничивает размер модели локальной памятью устройства. Оценка этого компромисса требует количественно связать капитальные затраты, операционные расходы и объем вывода.
Экономика облачного и периферийного развертывания
Задача: производственная модель обрабатывает около 760 000 оплачиваемых снимков скрининга в месяц в 500 клиниках при ежедневной работе и одном обработанном снимке на пациента после локального отбора и проверок качества. Следует ли развертывать конечную точку облачного вывода или периферийный вывод на локальном сервере?
Вариант A: облачный вывод.
- Модель работает на централизованных GPU-серверах
- Стоимость вывода: около $0,01 за изображение (время облачного GPU и накладные расходы API)
- Годовая стоимость вывода по 500 клиникам, 50 пациентам в день, одному оплачиваемому снимку на пациента, 365 дням в году и $0,01 за изображение составляет $91 250 в год
- Плюс: закладываемые расходы на связь и сетевые операции для отправки 5 МБ на оплачиваемый снимок, около $45 000 в год
- Итого: около $136 250 в год операционных расходов
- Риск: задержка 200 мс и выше превышает целевую задержку сценария; отключения связи останавливают скрининг
Вариант B: периферийное развертывание на устройстве клиники.
- Разовое оборудование: устройство за $500 на каждую из 500 клиник требует $250 000 капитальных затрат
- Стоимость вывода: около $0,001 за изображение (условная полная переменная операционная доля)
- Годовая стоимость: около $25 000 в год на обслуживание плюс около $9 125 в год переменной стоимости вывода, всего около $34 125 в год
- Итого: $250 000 единовременно и около $34 125 в год
- Выгода: задержка ниже 50 мс; работа офлайн; гораздо меньшая стоимость одного вывода
Расчет:
- Годовая экономия: $136 250 в год (облако) − $34 125 в год (периферия) = $102 125 в год
- Окупаемость: $250 000 (оборудование) ÷ $102 125 в год ≈ 2,4 года
Системный вывод: при этих допущениях сценария периферийное развертывание окупается примерно за 2,4 года и позволяет вести вывод во время отключений связи, однако требует более жесткой оптимизации модели (она должна помещаться в память периферии) и более сложных конвейеров обновления. Парадигма развертывания, выбранная при постановке задачи, определяет, вообще ли вариант периферии жизнеспособен.
Стоимость облака растет быстрее стоимости периферии по мере роста развертывания.
В этом сценарии пропускная способность, целевая задержка и требования к автономной работе говорят в пользу периферийного развертывания. Этот выбор задает жесткие рамки памяти, задержки и тепла, которым должно удовлетворять сжатие модели (глава «Сжатие моделей»), и которые среды обслуживания (глава «Обслуживание моделей») должны выполнять в производственных границах.
Интеграция с хостом распространяет эти физические ограничения на программные интерфейсы существующей клинической инфраструктуры. Среда выполнения вывода должна обмениваться данными с больничными информационными системами (HIS), чтобы получать записи пациентов и сохранять результаты диагностики. Встраивание вероятностной модели в сложившийся клинический процесс принципиально отличается от подключения детерминированного датчика. Вместо того чтобы выдавать инвариантное скалярное измерение, модель выдает распределение вероятностей вместе с оценкой неопределенности. Поэтому граница интеграции требует явного контракта интерфейса, регулирующего маршрутизацию решений. Этот контракт сопоставляет предсказательную неопределенность с клиническими действиями, определяя, какие классификации запускают автоматические направления, а какие требуют проверки врачом. Порог уверенности нельзя оценивать изолированно: его эксплуатационная безопасность полностью зависит от последующего процесса, который он запускает. Нормативные рамки накладывают структурные ограничения на этот жизненный цикл данных. Законодательные требования, такие как HIPAA, регулируют передачу данных и ограничивают, можно ли сохранять производственные полезные нагрузки вывода, связывать их с идентификаторами пациентов или включать в конвейеры переобучения. Когда соответствие требованиям запрещает хранить сырые входы, непрерывное улучшение не может опираться на пассивное журналирование телеметрии. Правила приватности, таким образом, ограничивают стратегии текущего сопровождения модели, а не служат лишь контрольным списком безопасности транспортного уровня (глава «MLOps»).
От пилотного к полному развертыванию
Производственный выпуск идет дискретными этапами, чтобы изолировать режимы отказа при расширении среды выполнения. Офлайн-воспроизведение и синтетические тестовые стенды проверяют контракты схем и пределы параллелизма, не рискуя безопасностью пациентов. Последующие пилотные развертывания в нескольких клиниках подвергают стек обслуживания физическим вариациям, отсутствовавшим в лабораторных бенчмарках: оптическим искажениям разных моделей камер, шуму датчиков при неравномерном освещении клиник и различиям в обращении персонала. Полномасштабный выпуск расширяет охват длинного хвоста анатомических вариаций и редких патологий. Выявление таких сдвигов распределения требует непрерывного мониторинга во время выполнения, а не допущения, что распределения валидации сохраняются бесконечно.
Масштабирование на сотни удаленных клиник вносит неоднородность оборудования и операционное трение между распределенными узлами. Различия в оптике локальных датчиков меняют распределение пикселей входа еще до начала выполнения, поэтому нужны устойчивые ядра валидации входа, которые локально отбрасывают снимки вне спецификации. В то же время жесткие ограничения широкополосной пропускной способности исключают постоянную синхронизацию весов или потоковую передачу телеметрии высокого разрешения обратно в централизованный кластер. Вместо этого периферийные узлы должны работать автономно, локально кешируя метрики выполнения и синхронизируя состояние по возможности во время плановых окон обслуживания.
Поддержание клинической полезности требует откалиброванной оценки неопределенности, а не сырой общей точности. Когда модель сталкивается с неоднозначной патологией, выдача некалиброванного предсказания рискует привести к диагностической ошибке. Поэтому путь обслуживания включает маршрутизацию с участием человека в контуре (human-in-the-loop routing), которая использует откалиброванные границы решений, чтобы направлять пограничные случаи к экспертам-клиницистам. Этот механизм маршрутизации служит двум целям: он выступает пороговой границей безопасности в реальном времени для ухода за пациентом и одновременно создает канал непрерывного сбора данных. Разобранные пограничные случаи дают проверенные, высокоинформативные аннотации, которые возвращаются в последующие итерации обучения и напрямую противодействуют известным режимам отказа модели.
Согласованность в распределенных развертываниях требует неизменяемого версионирования артефактов модели и атомарных процедур обновления. Клиентские среды выполнения должны проверять криптографические контрольные суммы сериализованных графов до загрузки новых весов в память, чтобы частичные обновления не повредили выполнение на периферии. Развертывание отмечает переход от статической офлайн-оценки к непрерывной эксплуатации, при которой системная телеметрия постоянно проверяет, остаются ли распределения реальных задержек и поведение вывода в заданных эксплуатационных границах.
Мониторинг и сопровождение
Рассмотрим иллюстративный случай через полгода после запуска системы скрининга DR. Клиника обновляет свои камеры глазного дна, и новое оборудование выдает снимки с другими цветовыми профилями. Чувствительность модели на этой площадке тогда падает, потому что распределения пикселей, которые она выучила при обучении, больше не совпадают с поступающими снимками. Ни один код не менялся. Данные дрейфовали за пределы обучающей области, и модель деградировала незаметно. Системы ML могут деградировать из-за дрейфа данных, даже когда их артефакты остаются нетронутыми. Эта возможность означает, что развертывание — не конец жизненного цикла, а начало непрерывной эксплуатационной фазы. Мониторинг дает статистическую телеметрию для обнаружения деградации, а непрерывные конвейеры сопровождения (глава «MLOps») обновляют модели, когда есть основания.
В этом иллюстративном сценарии мониторинг отслеживает качество по клиникам, чтобы выяснить, влияют ли изменения демографии пациентов, технологии камер или износ оборудования на точность. Добавление новой модальности визуализации, например оптической когерентной томографии, было бы продуктовым изменением, требующим новых данных, валидации, интеграции в рабочий процесс и любого применимого регуляторного рассмотрения, а не рутинного сопровождения. Три пути обратной связи направляют решения об обновлении: данные о производительности могут обосновать целевой сбор данных, выводы о качестве данных могут потребовать изменений подготовки, а подтвержденная деградация модели может оправдать переобучение или иное вмешательство. Пороги дрейфа запускают рассмотрение, но не выбирают средство автоматически.
Мониторинг в производстве
Мониторинг должен одновременно обслуживать две аудитории: технические команды, которые отслеживают метрики состояния системы, и клинический персонал, которому нужны практически полезные выводы. Первое развертывание может выявить слепые зоны, невидимые при лабораторной валидации.27 Клиники со старым оборудованием могут показывать снижение точности. Отдельные подгруппы пациентов, например люди с пролиферативной ретинопатией или катарактой, осложняющей снимок глазного дна, могут давать повышенную частоту ошибок. Эти открытия запускают целевой сбор данных и архитектурные улучшения.
Система скрининга DR, где пропущенное заболевание, требующее направления, может задержать помощь и способствовать предотвратимой потере зрения, требует непрерывного эксплуатационного мониторинга и периодической оценки качества, когда поступают метки. Команды устанавливают количественные пороги для задержки, точности и устойчивости распределения данных. Легкие статистические тесты, такие как индекс стабильности популяции (PSI) и критерий Колмогорова–Смирнова (KS),28 запускают реакции от автоматических оповещений до рассмотрения переобучения (глава «MLOps»).
Производственная система DR может отслеживать четыре категории метрик на разных временных масштабах. Приведенные ниже пороги иллюстрируют одну сценарную политику; клинические и операционные команды должны проверить их для конкретного продукта, популяции и среды развертывания.
- Метрики производительности модели (требуют эталонных меток, поступают с задержкой): чувствительность (цель выше 90 процентов, оповещение, если семидневное скользящее среднее падает ниже 88 процентов), специфичность (цель выше 80 процентов, оповещение, если падает ниже 78 процентов) и производительность по подгруппам (оповещение, если у любой демографической группы отставание от базовой линии превышает 5 процентных пунктов).
- Косвенные метрики (доступны сразу, без эталонных меток): распределение уверенности предсказаний (оповещение, если среднее значение уверенности падает более чем на 10 процентов относительно базовой линии), доля направлений (оповещение, если доля меняется более чем на 15 процентов от базовой линии) и доля отказов по качеству изображения (оповещение, если более 20 процентов снимков не проходят проверку качества).
- Операционные метрики: задержка вывода (p95 ниже 50 мс, оповещение, если выше 100 мс), пропускная способность (оповещение, если глубина очереди превышает 50 снимков) и доля ошибок (оповещение, если более 0,1 процента запросов завершаются ошибкой).
- Метрики стабильности данных: распределения признаков и предсказаний, сравниваемые с базовой линией, с оповещениями, когда текущий трафик выходит за ожидаемый диапазон.
Иерархия важна: операционные метрики могут сигнализировать о немедленных проблемах, косвенные метрики — указывать на возможные проблемы модели, не дожидаясь эталонных меток, а метрики производительности часто приходят позже, потому что требуют размеченных данных.
Сопровождение в масштабе
Обновления модели требуют тщательной валидации и контролируемых выкатов. Команды используют фреймворки A/B-тестирования для оценки обновлений и реализуют механизмы отката29, которые быстро устраняют проблемы. Системы ML должны учитывать эволюцию данных, которая может влиять на поведение независимо от изменений кода.
В иллюстративном сценарии масштабирование от пилотных площадок до сотен клиник увеличивает сложность мониторинга. Объем журналов зависит от частоты запросов, сэмплирования, размеров полезных нагрузок и политик хранения, а также от числа клиник. Инфраструктура мониторинга должна отслеживать как глобальные метрики, так и поведение отдельных площадок, поддерживать родословную данных,30 то есть трассу метаданных, связывающую производственные журналы с версиями данных, кода и моделей, где это требуется для регуляторного соответствия, и сопоставлять производственные проблемы с экспериментами обучения для анализа первопричин.
Проактивное сопровождение замыкает петлю жизненного цикла: операционные сигналы выявляют потенциальные проблемы, рассмотрение определяет, нужны ли вновь валидированные данные или иное изменение, а производственные свидетельства возвращаются, чтобы уточнить постановки задач, стандарты качества данных и архитектурные решения. Когда выбрано переобучение, запланированные или запускаемые свидетельствами конвейеры могут включить одобренные данные и вернуть кандидата в валидацию. За этой операционной динамикой стоят три фундаментальных системных принципа: ограничения распространяются через границы этапов, обратная связь работает в несовпадающих временных масштабах, а поведение системы на системном уровне расходится с метриками компонентов («Системное мышление»).
Системное мышление
Сценарий диабетической ретинопатии показал, как этапы жизненного цикла взаимодействуют как связанная система: физические ограничения в точке оказания помощи напрямую определяли емкость модели, курирование обучающих данных и логику предобработки. Три структурных механизма объясняют эти связанные взаимодействия: обратное распространение ограничений, многомасштабные петли обратной связи и возникающие системные компромиссы. Управление этими механизмами отличает проактивное проектирование системы, управляемое ограничениями, от реактивной отладки после развертывания.
Принцип распространения ограничений
Иллюстративный сценарий удвоения показывает чувствительность к позднему обнаружению.
В сценарии DR прерывистый канал отправки данных клиники на 2 Мбит/с исключил облачный вывод и потребовал периферийного развертывания. Бюджеты памяти и мощности периферийной цели затем ограничили архитектуру модели, сделав предпочтительными легкие факторизованные свертки вместо больших ансамблей и потребовав автоматических проверок качества изображения в момент съемки. Каждое последующее ограничение сужало пространство проектирования для более ранних этапов, напрямую связывая аппаратные пределы со сбором данных и проектированием модели.
Принцип распространения ограничений
Принцип распространения ограничений утверждает, что ограничение, обнаруженное поздно в жизненном цикле ML, может вынудить переработку затронутых более ранних этапов. Фактическая стоимость исправления зависит от того, какие артефакты и решения должны измениться. Правило этой главы — иллюстративный сценарий чувствительности, а не эмпирический закон стоимости.
- Значение: требование задержки 100 мс, обнаруженное на этапе развертывания (этап 5), может распространиться назад и ограничить размер модели (этап 3: сложность алгоритма ), требования к набору данных (этап 2: размер набора ) и постановку задачи (этап 1: какая точность достижима). Объем переработки зависит от того, какие более ранние решения опирались на отсутствующее ограничение. В рамках железного закона ограничение развертывания по или может переопределить допустимую область для , и .
- Отличие: в отличие от модульной декомпозиции, которая поощряет независимую оптимизацию каждого компонента, этот принцип требует сквозного рассуждения. Оптимизация точности в отрыве может породить модель, которую невозможно развернуть, и тогда «локальный максимум» точности становится «глобальным минимумом» жизнеспособности системы.
- Типичная ошибка: частое заблуждение состоит в том, что развертывание — это «последний шаг». Среда развертывания — это ограничение первого дня: ее бюджет задержки, объем памяти и энергетические рамки задают границы каждого решения на более ранних этапах.
Распространение действует в обоих направлениях, создавая динамические сети ограничений, а не линейные зависимости. Когда развертывание в сельской клинике выявляет жесткие ограничения пропускной способности, команды могут перестроить конвейер так, чтобы передавать компактные выходы после локального вывода. Если же система вместо этого сжимает входы модели, чтобы пропустить их через канал отправки, артефакты сжатия с потерями ухудшают качество входа, и тогда обучающий набор должен включать соответствующие искажающие аугментации, чтобы предотвратить перекос обучения и обслуживания. И наоборот, перенос вывода целиком на периферию с отправкой лишь скалярных диагнозов разгружает пропускную способность канала, но сужает емкость DRAM периферийного устройства и его тепловые рамки. Решения о данных на верхних уровнях и границы машины на нижних остаются физически связанными.
Решения, принятые без учета границ исполнения на нижних уровнях, накапливают технический долг.31 Спецификация интерфейсов этапов («Спецификация интерфейсов этапов») операционализирует этот принцип, делая ограничения явными на каждой границе этапа, в соответствии с практиками контрактов для моделей, данных и инфраструктуры, которые обсуждаются в главе «MLOps». Такие контракты позволяют раньше обнаруживать ограничения. Когда распространение происходит именно через сбои качества данных, возникающий паттерн называется каскадом данных: цепочкой последующих сбоев, вызванных плохими данными (Sambasivan et al., 2021). Глава «Инженерия данных» формализует этот режим отказа и прослеживает, как он развивается от этапа к этапу.
Многомасштабная обратная связь
Системы ML добиваются успеха, организуя петли обратной связи в нескольких временных масштабах, и каждая служит своей цели. Один иллюстративный план эксплуатации для сценария DR использует проверки на уровне минут, чтобы поймать неверно настроенную камеру до того, как она выдаст смену непригодных снимков; ежедневные обзоры косвенных сдвигов, таких как доля направлений, уверенность, доля отказов по качеству или изменения камер на конкретной площадке; еженедельную агрегацию статистики точности по размеченным данным и тесты дрейфа, когда доступна эталонная разметка; ежемесячный анализ охвата популяции; и ежеквартальный обзор того, по-прежнему ли архитектура отвечает клиническим потребностям. Фактические каденсы зависят от задержки меток, продуктового риска, трафика и стоимости действия по каждому сигналу.
Иллюстративный план мониторинга охватывает от минут до кварталов на протяжении пяти порядков величины.
Временная структура этих петель обратной связи отражает внутреннюю динамику систем ML. Быстрые петли позволяют быстро исправлять эксплуатационные проблемы: неверно настроенную камеру клиники можно обнаружить и исправить за минуты. Медленные петли обеспечивают стратегическую адаптацию: понимание того, что сдвиги демографии популяции требуют расширения обучающих данных, занимает месяцы мониторинга, чтобы надежно выявить это. Такой многомасштабный подход балансирует отзывчивость и статистическую стабильность. Излишняя реакция на краткосрочную изменчивость вызывает «лихорадку» конвейера, например запускает ненужное переобучение на временных сдвигах, а вялая адаптация позволяет незаметному снижению точности продолжаться без смягчения.
Возникающая сложность и компромиссы ресурсов
Сложные системы порождают возникающие поведения, невидимые при анализе отдельных компонентов. В многоцентровом развертывании DR отдельные клиники могут демонстрировать стабильную совокупную производительность, тогда как системный анализ выявляет деградацию, сосредоточенную в конкретных демографических когортах, — режим отказа, который не обнаружить в изолированных журналах клиник. Кроме того, традиционные распределенные системы выходят из строя в первую очередь из-за детерминированных сбоев, таких как таймауты сети или аварийное завершение из-за нехватки памяти, тогда как системы ML также испытывают вероятностную деградацию: дрейф данных, концептуальный дрейф и усиление смещений. Вероятностная деградация не порождает трассировок стека или исключений времени выполнения: модель продолжает выдавать предсказания в пределах своего SLA по задержке, в то время как ее статистическая валидность незаметно убывает.
Цена позднего обнаружения
Примените принцип распространения ограничений к этому сценарию:
Команда обнаруживает во время мониторинга (этап 6), что их модель DR не работает для пациентов старше 70 лет. Это демографическое требование должно было быть задано при постановке задачи (этап 1).
- Коэффициент стоимости: вычислите относительный коэффициент стоимости по формуле из определения принципа распространения ограничений.
- Затронутые этапы: определите, какие промежуточные этапы, возможно, придется пересмотреть, чтобы исправить эту проблему.
- Правило предотвращения: сформулируйте правило проектирования, которое предотвратило бы эту переработку на поздних этапах.
Оптимизация ресурсов создает многомерные компромиссы, которые возникают и в традиционном ПО, а ML добавляет к ним выученное статистическое поведение. Повышение точности может потребовать увеличения числа параметров модели и перехода на более мощное оборудование; умноженное на сотни клиник, это предельное приращение точности определяет капитальные затраты на кластер. Эти компромиссы проявляют стену мощности и стену памяти, описанные в главе «Системы машинного обучения»: периферийное развертывание устраняет сетевую задержку WAN, но ограничивает сложность модели локальными пределами SRAM и DRAM; облачное развертывание снимает границы памяти ускорителя, но вносит сетевую задержку, которая может нарушить клинические процессы в точке оказания помощи. Каждый архитектурный выбор перераспределяет нагрузку по триаде D·A·M.
Эти три структурных паттерна (распространение ограничений через границы этапов, многомасштабный тайминг обратной связи и возникающие системные компромиссы) показывают, что системы ML нельзя спроектировать только модульной декомпозицией. Оптимизация конвейеров данных, топологий моделей и целей выполнения по отдельности гарантирует узкие места времени выполнения или незаметные сбои. Когда инженерные команды применяют к этой связанной динамике традиционные программные допущения, появляются предсказуемые антипаттерны. Заблуждения и ловушки в разделе «Заблуждения и ловушки» показывают, где эти ментальные модели ломаются на протяжении производственных жизненных циклов.
Заблуждения и ловушки
Перенос обычных программных шаблонов на рабочие процессы машинного обучения не учитывает статистической и зависящей от данных природы обученных систем. Следующие заблуждения и ловушки описывают повторяющиеся ошибки, которые тормозят циклы разработки, вызывают незаметные сбои в эксплуатации и накапливают технический долг на этапах конвейера.
Заблуждение и ловушка
Заблуждение: разработку ML можно вести по традиционным программным рабочим процессам без изменений.
Традиционные процессы разработки опираются на детерминированные спецификации, проверяемые бинарными модульными тестами. Системы машинного обучения, напротив, выводят поведение индуктивно из данных, заменяя детерминированные гарантии статистическими распределениями производительности («Жизненные циклы разработки: традиционное ПО и ML»). Линейные фазовые шлюзы и жесткие границы спринтов предполагают, что требования остаются неизменными после их задания. В рабочем процессе ML постановки задач эволюционируют, потому что разведочное обучение выявляет пробелы в распределении, дисбаланс классов или недостижимые компромиссы точности и задержки. Кроме того, опросы практиков показывают, что подготовка данных и сопровождение конвейера доминируют в инженерных усилиях («Количественная оценка жизненного цикла ML»). Жесткие линейные шлюзы рассматривают сбор данных как завершенный предшественник, а не как активную петлю обратной связи, и загоняют команды в дорогостоящие циклы, когда оценка на последующих этапах вынуждает пересматривать ранние допущения о данных.
Заблуждение и ловушка
Ловушка: рассматривать подготовку данных как одноразовый шаг предобработки.
Команды часто воспринимают очистку данных и конструирование признаков как статическую веху, которую нужно пройти до начала обучения. В эксплуатации распределения входящих данных непрерывно меняются по мере того, как меняется поведение пользователей, деградируют датчики и изменяются схемы верхних уровней. Архитектура двух конвейеров («Двухконвейерная разработка ML») отражает эту эксплуатационную реальность: конвейеры данных и конвейеры моделей должны работать параллельно с непрерывной обратной связью. Ранние решения по подготовке данных каскадно проходят через обучение и развертывание («Сбор данных»). Когда подготовка данных статична, незаметные сдвиги распределения и перекос признаков обучения и обслуживания обходят тесты на уровне кода и снижают точность вывода задолго до того, как появится эксплуатационное оповещение. Чтобы поймать дрейф данных при приеме, а не после незаметного сбоя модели в эксплуатации, нужны непрерывные конвейеры валидации данных с автоматической проверкой схемы и мониторингом распределений.
Заблуждение и ловушка
Заблуждение: прохождение оценки модели означает, что система готова к развертыванию.
Офлайн-оценка измеряет статистические потери на статических, подобранных валидационных наборах, но изолирует модель от динамики эксплуатационного обслуживания. Сильные агрегированные метрики не гарантируют, что система выполнит физические ограничения развертывания. В архитектуре двух конвейеров («Двухконвейерная разработка ML») офлайн-оценка оставляет непроверенными интеграцию обслуживания, входные конвейеры в реальном времени и операционный мониторинг. Пример скрининга диабетической ретинопатии («Пример: скрининг DR») иллюстрирует этот разрыв: модель, которая достигла точности уровня специалиста на подобранных эталонных снимках, в клиниках подвела из-за переменного освещения камер, прерываний работы техников и периодических сбоев сетевого соединения. Готовность к производству требует проверки на уровне системы, включая бюджеты хвостовой задержки при параллелизме, согласованность конвейера признаков и корректную деградацию при аппаратных сбоях. По принципу распространения ограничений («Принцип распространения ограничений») обнаружение эксплуатационных сбоев только после развертывания вынуждает дорогостоящие итерации как в архитектуре модели, так и в сборе данных.
Заблуждение и ловушка
Ловушка: масштабировать сбор данных, не проверив предельную ценность для модели.
Расширение набора данных часто считают универсально выгодной инвестицией в точность. На практике сбор данных следует степенному закону масштабирования с убывающей отдачей: как только основное распределение данных достаточно покрыто, дополнительные сырые примеры дают пренебрежимо малый прирост обобщения, тогда как затраты на хранение, пропускную способность приема и разметку растут. Петли обратной связи на «Двухконвейерной разработке ML» показывают, что точность модели зависит от связи между качеством набора данных, емкостью модели и эксплуатационными ограничениями. Прием большого объема неверно размеченных или избыточных образцов вносит шум и раздувает вычисления обучения, не повышая точности, тогда как компактный, тщательно подобранный набор с проверенными метками и сбалансированным представлением часто дает лучшие результаты. Поскольку решения о качестве данных каскадно проходят через все последующие этапы конвейера («Сбор данных»), команды должны измерять предельный прирост точности на каждый дополнительный образец, прежде чем выделять инженерный бюджет на более крупный прием данных.
Заблуждение и ловушка
Заблуждение: пропуск этапов валидации ускоряет поставку.
Сжатие или обход поэтапных этапов валидации кажется ускорением поставки проекта, но он напрямую переносит риск проверки на производственный трафик. Многоэтапная валидация («Оценка и валидация») изолирует ортогональные режимы отказа в условиях выполнения, которые становятся все более реалистичными. Пропуск теневого режима лишает команды возможности наблюдать за живым поведением вывода (например, узкими местами десериализации полезной нагрузки, конкуренцией за параллелизм и нарушениями SLA по хвостовой задержке) при реальных распределениях трафика. Обход канареечных развертываний убирает барьер радиуса поражения и сразу подвергает всех пользователей регрессиям на граничных случаях или численной нестабильности. Устранение сбоев в эксплуатации требует аварийных откатов, распределенного разбора журналов и восстановления поврежденного состояния, что обходится на порядки дороже в инженерном простое, чем обойденные шлюзы валидации.
Заблуждение и ловушка
Ловушка: откладывать выбор парадигмы развертывания до окончания разработки модели.
Команды часто полагают, что целевую платформу можно выбрать после оптимизации точности модели. На практике парадигма развертывания (облако, периферия, мобильные устройства или TinyML) — это первичное ограничение, которое формирует каждый предыдущий этап жизненного цикла («Спецификация интерфейсов этапов»). Допустим, команда разработала ансамбль моделей размером 2 ГБ, прежде чем узнала, что ее целевая TinyML-платформа имеет 256 КБ памяти. Возникающее несоответствие каскадно распространяется назад и заставляет переделывать предобработку данных, архитектуру модели и бенчмарки оценки. Иллюстративная модель распространения ограничений главы присваивает обнаружению на этапе 5 коэффициент относительно стоимости этапа 1. Откладывание выбора платформы гарантирует дорогостоящие циклы итераций, потому что аппаратура развертывания определяет, какие модели физически реализуемы, а не только где они выполняются.
Итоги
Жизненный цикл — это петля обратной связи, а не контрольный список. Конвейер данных преобразует сырые входы через сбор, прием, анализ, разметку, валидацию и подготовку в наборы данных, готовые для ML. Конвейер разработки модели проводит эти наборы через обучение, оценку, валидацию и развертывание, создавая производственные системы. С учетом всей главы стрелки обратной связи на «Двухконвейерной разработке ML» несут центральный смысл главы: каждая из них представляет урок, извлеченный в эксплуатации, который возвращается, чтобы укрепить более ранние этапы, делая обратную связь по данным и моделям явной частью цикла разработки.
Эта рамка объясняет, почему системы машинного обучения требуют специализированных дополнений к установившимся практикам инженерии ПО. Рабочие процессы ML добавляют вероятностную оптимизацию, выученное статистическое поведение и зависящие от данных петли обратной связи. Железный закон дает одну количественную призму: решения на протяжении жизненного цикла совместно меняют перемещение данных, число операций, эффективность оборудования и фиксированную задержку в , а производственные свидетельства возвращают нарушения ограничений на пересмотр. Такой взгляд признает, что успех возникает не из совершенствования отдельных этапов в изоляции, а из понимания того, как качество данных влияет на производительность модели, как ограничения развертывания формируют стратегии обучения и как выводы из эксплуатации определяют каждую последующую итерацию разработки.
Три паттерна определяют инженерную дисциплину жизненного цикла ML. Многие практики сообщают, что сбор, очистка, разметка, валидация или подготовка данных — основные статьи затрат времени, тогда как разработка модели — лишь одна часть жизненного цикла. Производственные системы также требуют повторяющихся циклов итераций на этапах данных, модели и инфраструктуры, поэтому инвестиции в инженерию данных могут давать высокую отдачу, когда качество данных — основной источник переработок. Наконец, поздние ограничения увеличивают переработку: иллюстративная модель распространения ограничений главы присваивает ограничению, обнаруженному на этапе , примерно -кратную стоимость исправления относительно этапа 1, а несоответствие парадигмы развертывания, обнаруженное на этапе 5, получает множитель стоимости 16. Фактическая переработка зависит от того, какие этапы затронуты. Раннее обнаружение ограничений не требует замораживания рабочего процесса. Оно задает рабочую оболочку через обязательства по задержке, памяти, мощности, безопасности и валидации, пока выбор данных и моделей продолжает итерироваться внутри этих границ.
Сначала увидьте всю карту
- Жизненный цикл — это петля, а не контрольный список: конвейеры данных и моделей развиваются параллельно, но именно обратная связь из эксплуатации делает их единой системой. Мониторинг, валидация и переобучение возвращают уроки из развертывания в решения о сборе, разметке, архитектуре и инфраструктуре.
- Поздние ограничения увеличивают переработку: иллюстративная модель присваивает ограничению развертывания, найденному на этапе , примерно -кратную стоимость исправления относительно этапа 1. Множитель 16 для несоответствия на этапе 5 показывает, почему требования должны рано распространяться назад.
- Скорость итераций расширяет возможности поиска: при принятых в примере допущениях легкая модель, отстающая на 5 процентных пунктов, достигает общего потолка в 99 процентов, потому что более короткие циклы допускают больше предполагаемых улучшений. Одна лишь скорость рабочего процесса не гарантирует качества модели.
- Интерфейсы делают обратную связь действенной: контракты этапов задают входы, выходы и инварианты качества, чтобы команды данных, моделей и развертывания могли обнаруживать нарушения до интеграции. Без явных контрактов каждый этап может оптимизироваться локально, а система в целом терпит неудачу.
- Производство говорит на разных часах: мониторинг вывода в реальном времени, обзоры пакетных обновлений и ежеквартальные архитектурные обзоры отвечают на разные режимы отказа. Считать всю обратную связь одной петлей значит либо слишком медленно реагировать на дрейф, либо бесполезно гонять дорогостоящие процессы без сигнала.
- Рабочий процесс проносит ограничения через время: постановка задачи фиксирует цели, сбор данных формирует свидетельства и объем байтов, разработка модели меняет операции и переиспользование, развертывание реализует полный путь обслуживания, а мониторинг возвращает нарушения на пересмотр. Жизненный цикл — это связь данных, алгоритма и машины, разворачивающаяся во времени.
Эта рамка рабочего процесса превращает ad hoc эксперименты с ML в более дисциплинированную инженерную практику. Понимая, как конвейеры данных и разработка моделей взаимодействуют через петли обратной связи, команды могут раньше выявлять риски интеграции и осмысленнее распределять ресурсы. Принцип распространения ограничений показывает, почему системное управление рабочим процессом — это снижение рисков, а не бюрократические издержки.
Если смотреть на жизненный цикл как на контрольный список, это последовательность этапов, которые нужно проходить по порядку. Если смотреть правильно, это петля. Ограничение, обнаруженное при развертывании, не остается там: оно может вынудить переработку зависимых решений о модели и данных. Поэтому рабочий процесс — это связанная система, а не конвейер, и та же связанность, которую таксономия D·A·M описывает в пространстве, разворачивается здесь во времени. Оптимизация одного этапа в изоляции лишь переносит сбой, а не устраняет его, поэтому дисциплина состоит в том, чтобы увидеть всю карту, прежде чем трогать любую ее часть.
От чертежа к топливу
Рамка рабочего процесса, изложенная здесь, служит чертежом для каждой технической главы, которая следует за ней. Однако двигатель без топлива — это лишь тяжелый кусок металла; для системы ML таким топливом являются данные. Поэтому глава «Инженерия данных» развивает первую ось D·A·M — данные. Часть II затем строит основную систему (вычисления в нейронных сетях, архитектуры моделей, фреймворки, обучение), часть III оптимизирует ее для развертывания (отбор данных, сжатие моделей, аппаратное ускорение, бенчмаркинг), а часть IV развертывает и эксплуатирует ее в производстве (обслуживание моделей, эксплуатационные практики, ответственная инженерия). Каждая глава предполагает, что читатель понимает, где ее техники укладываются в этот полный рабочий процесс, и опирается на системный взгляд, развитый здесь.
-
Разрыв между лабораторией и развертыванием: эмпирически это показано для системы глубокого обучения для скрининга диабетической ретинопатии, развернутой в тайских клиниках (Beede et al., 2020). Хотя на более раннем этапе валидации система демонстрировала точность на уровне специалистов, 393 из 1 838 отправленных снимков (21 процент) не прошли требования к качеству изображения: часто причиной было освещение клиники, обслуживание камер или практика расширения зрачка, не совпадавшая с допущениями системы. Эти отказы добавляли работы медсестрам, требовали повторных съемок или направлений и выявили барьеры в рабочем процессе и инфраструктуре, а не просто проблему точности модели. ↩
-
CRISP-DM (межотраслевой стандартный процесс интеллектуального анализа данных): CRISP-DM описал разработку систем, интенсивно работающих с данными, как шесть взаимосвязанных итеративных фаз, а не как линейный водопад (Chapman et al., 2000). Его базовый принцип проектирования (петли обратной связи между всеми фазами) непосредственно лег в основу структуры современного жизненного цикла ML. Работа Боэма по экономике разработки программного обеспечения обсуждала более высокую стоимость поздних исправлений (Boehm, 1981). Модель рабочего процесса далее использует , где — индекс этапа жизненного цикла, как иллюстративный сценарий чувствительности, а не как эмпирический закон стоимости. ↩
-
Затраты на позднее исправление: книга Боэма Software Engineering Economics (Boehm, 1981) обсуждала, как дефекты, найденные поздно, могут обходиться дороже в исправлении, чем выявленные на этапе требований. В системах ML поздно обнаруженные ограничения могут потребовать переобучения, изменений в конвейере данных и повторной валидации. Правило удвоения — иллюстративный сценарий чувствительности, а не эмпирический закон стоимости. ↩
-
Водопадная модель: план-ориентированный жизненный цикл часто изображают как последовательность требований, реализации и тестирования, однако Royce (1970) предостерегал, что чисто последовательная реализация рискованна, и описал итерации между последовательными фазами. Системы ML добавляют обратную связь по данным и модели, которую нужно явно контролировать. Эта глава использует иллюстративную модель чувствительности для этапов жизненного цикла ML. ↩
-
Версионирование данных: в отличие от кода, который меняется через дискретные, поддающиеся аудиту коммиты, данные могут дрейфовать постепенно (сдвиг распределения), внезапно (миграция схемы) или незаметно (деградация качества меток). Обычный Git непрактичен для многих наборов данных объемом в несколько терабайт, поэтому команды обычно версионируют манифесты или указатели на внешние данные с помощью таких инструментов, как DVC и Git LFS. Без версионирования данных команды не могут надежно воспроизвести предыдущий прогон обучения или определить, вызвана ли регрессия точности изменением кода или изменением данных. ↩
-
Локальность обращений: Denning (1968) формализовал принцип рабочего набора для виртуальной памяти. Случайно упорядоченные примеры могут снижать локальность, когда логический порядок отображается на разрозненные физические чтения, однако эффект зависит от структуры хранения, пакетирования, кеширования и предвыборки. ↩
-
Раздельные по глубине свертки: замена стандартной свертки этой более дешевой факторизацией снижает вычисления примерно в 8–9 раз для типичных размеров ядра (Sandler et al., 2018). Именно это делает правдоподобным бюджет вывода около 600 млн FLOP на устройствах класса мобильных. Механизм архитектуры подробно описан в главе «Архитектуры нейронных сетей». ↩
-
Диабетическая ретинопатия (DR): DR — частое осложнение диабета; раннее выявление может предотвратить потерю зрения, но доступ к специалистам заметно различается между странами. Этот разрыв мотивирует масштабируемые программы скрининга. В клиниках с ограниченным оборудованием или ненадежным соединением размер модели, работа без сети, задержка и интеграция в рабочий процесс могут стать решающими ограничениями развертывания. ↩
-
Разрыв во внедрении ИИ в здравоохранении: в развертывании DR в Таиланде, описанном в работе (Beede et al., 2020), реальные клиники выявили ограничения рабочего процесса, качества изображений, инфраструктуры и человеческого фактора, которых не было при контролируемой оценке. Этот случай показывает, почему одних лабораторных метрик недостаточно для вывода о готовности к развертыванию. ↩
-
Демографический дрейф: изменения в популяции могут выявлять разрывы в качестве, которые скрывает общая оценка. Бенчмарки систем анализа лица обнаружили большие демографические различия в частоте ошибок (Buolamwini and Gebru, 2018), а исследование систем оценки риска в здравоохранении выявило расово смещенное распределение ресурсов на основе прокси-метки при схожей потребности (Obermeyer et al., 2019). Эти примеры показывают, почему растущая программа DR должна оценивать качество по подгруппам, а не полагаться на общие показатели. ↩
-
NVIDIA Jetson: семейство NVIDIA Jetson охватывает широкий спектр моделей: от Jetson Orin Nano (7–15 Вт) через Jetson Orin NX (10–25 Вт) до Jetson AGX Orin (15–60 Вт). Этот сценарий использует устройство класса Orin Nano (от 4 до 8 ГБ общей памяти LPDDR5, энергетический бюджет 7–15 Вт) как конкретную периферийную цель. Его бюджеты памяти и мощности ограничивают сложность модели, а выбор более крупного устройства меняет и допустимую модель, и стоимость на каждую клинику. ↩
-
Многоуровневое хранение: размещение данных на разных носителях в зависимости от частоты доступа и требований к производительности. Разрыв в цене хранения в этом примере составляет примерно 4,3 раза: SSD с интерфейсом NVMe (Non-Volatile Memory Express) обеспечивают более 500 000 операций ввода-вывода в секунду (IOPS) при цене около $0,10 за ГБ в месяц, тогда как объектное хранилище стоит около $0,023 за ГБ в месяц, но дает задержку 100–200 мс. Для циклов обучения ML, которым нужно устойчивое последовательное чтение со скоростью 1–10 ГБ/с, неверный выбор уровня превращает конвейер, ограниченный вычислениями, в ограниченный вводом-выводом, напрямую раздувая член железного закона для данных . ↩
-
Распределенные данные клиник: обучение по площадкам клиник без простого объединения всех сырых данных решает проблемы приватности и управления, но переносит стоимость в координацию. Каждая площадка может использовать разные камеры, обслуживать разные популяции пациентов и следовать разным операционным распорядкам, поэтому система должна отслеживать, откуда пришли данные, и чем площадки различаются. Стоимость рабочего процесса поэтому состоит не только в емкости хранилища, а в инженерной работе, необходимой для сравнения, валидации и обновления моделей на площадках, данные которых ведут себя не одинаково. ↩
-
Гиперпараметры: выбор архитектуры и оптимизатора (например, скорость обучения и глубина сети) влияет на вычислительную работу обучения. Наивная декартова сетка, которая обучает каждую комбинацию независимо, несет мультипликативную стоимость поиска: 5 гиперпараметров по 4 значения каждый дают 1 024 конфигурации (). Раннюю остановку, многоточные методы и адаптивный поиск можно использовать, чтобы не доводить до конца каждый прогон, поэтому сетка представляет собой базовый вариант, а не неизбежную стоимость. ↩
-
Перенос обучения: для одной и той же архитектуры перенос обучения меняет способ инициализации и оптимизации параметров, но не операции, требуемые при выводе. ↩
-
AUC (площадь под ROC-кривой): показывает площадь под ROC-кривой, которая строится по доле истинно положительных и ложноположительных результатов при всех порогах классификации и принимает значения от 0 до 1; значение 0,5 соответствует случайному различению, а значения ниже 0,5 возможны. В отличие от точности, AUC не зависит от порога и нечувствителен к распространенности классов, поэтому это распространенная метрика для медицинских систем скрининга. Системное следствие: модель с AUC 0,99 все равно может давать неприемлемую чувствительность при конкретном пороге, выбранном для развертывания, поэтому одного AUC недостаточно для подтверждения готовности к развертыванию. ↩
-
Ансамблевое обучение: объединяет предсказания нескольких моделей (бэггинг, бустинг, стекинг). Вычисления вывода и хранение моделей обычно суммируются по составляющим. Последовательное выполнение может увеличивать задержку, тогда как параллельное выполнение обменивает задержку на дополнительное оборудование и координацию; фиксированного пропорционального множителя задержки, зависящего от размера ансамбля, не существует. ↩
-
Разрыв между соревнованием и производством: победитель Netflix Prize использовал сложный ансамбль, но Netflix не развернул выигрышный подход, поскольку дополнительная точность не оправдывала инженерных усилий (Johnston, 2012). ↩
-
Метрики медицинского ИИ: оценка медицинского ИИ делает упор на чувствительность (долю истинно положительных результатов) и специфичность (долю истинно отрицательных) наряду с общей точностью. Этот сценарий DR задает цель чувствительности более 90 процентов, потому что пропущенное заболевание, требующее направления, может задержать помощь и способствовать предотвратимой потере зрения; конкретные критерии приемки зависят от продукта и регулятора. Более тонкая системная ловушка — положительная предсказательная ценность (PPV): даже модель с высокой точностью может иметь низкую PPV в популяции с низкой распространенностью болезни. Эта зависимость от распространенности может требовать разных рабочих порогов на разных площадках развертывания, и такое ограничение не видно в стандартной оценке ML. ↩
-
Конвейер сжатия модели: чтобы перекрыть разрыв между точностью исследования и развертыванием на периферии, нужен итеративный цикл «сжать — проверить — скорректировать». Каждый шаг сжатия может уменьшить размер модели или стоимость выполнения, но он может и незаметно снизить чувствительность ниже клинического порога. Найти модель, которая помещается в память устройства и сохраняет клиническую чувствительность, обычно требует нескольких итераций, потому что только полный набор валидации показывает, удовлетворяет ли меньшая модель постановке задачи. ↩
-
Исследования абляции: получили название по хирургическому удалению тканей; они систематически отключают отдельные компоненты, чтобы выделить их вклад в производительность. Строгость важна, потому что разница в 0,5 процента точности может решить, достигает ли модель DR клинического порога чувствительности. Без абляции команда не может отличить настоящее архитектурное улучшение от шума, вносимого другим случайным начальным значением, и тратит итерации на призрачные выигрыши. ↩
-
A/B-тестирование в ML: сравнивает новую модель (B) с производственной базовой линией (A) на случайно распределенном живом трафике, чтобы оценить причинный эффект модели. Необходимый размер выборки зависит от базовой частоты событий, размера эффекта, дисперсии, распределения трафика, уровня значимости и статистической мощности; из одного лишь изменения в 0,5 процентного пункта не следуют ни универсальное число взаимодействий, ни универсальная продолжительность. ↩
-
Взаимозависимость артефактов ML: артефакты ML глубоко взаимозависимы. Измеренная точность модели связана с версией данных, конвейером предобработки и конфигурацией гиперпараметров, которые использовались для ее получения. Без отслеживания родословной команда может не определить, вызвана ли регрессия кодом, данными или вариацией между прогонами, и тогда приходится дорого перезапускать эксперименты, происхождение которых утеряно. ↩
-
Калибровка: у откалиброванной модели предсказанные вероятности совпадают с наблюдаемыми частотами: уверенность 80 процентов должна соответствовать 80-процентной правильности. Калибровка отличается от точности, а системное следствие для системы DR серьезно: клиницисты используют оценки уверенности для решений о сортировке, поэтому некалиброванная модель, которая присваивает 90-процентную уверенность неопределенным случаям, может опаснее сбить клинический процесс, чем менее точная, но хорошо откалиброванная альтернатива. Шкалирование Platt и температурное шкалирование могут улучшить калибровку после обучения, но их эффективность нужно оценивать на репрезентативных данных. ↩
-
Поэтапный выкат: теневой режим запускает новую модель параллельно, записывая предсказания, не отдавая их. Канареечное развертывание (назван по канарейкам в угольных шахтах) затем открывает ограниченную, настраиваемую долю трафика и постепенно ее увеличивает, если метрики держатся. Охват зависит от трафика, наблюдаемости, длительности и проверяемых режимов отказа, поэтому поэтапный выкат снижает риск, но не гарантирует, что поймает фиксированную долю производственных проблем. Глава «MLOps» подробно описывает стратегии реализации. ↩
-
Регулирование FDA для ИИ/ML: разрешение FDA на выпуск требует доказательств, соответствующих устройству, назначению, риску и регуляторному пути. План действий FDA 2021 года по ИИ/ML для программного обеспечения как медицинского изделия (SaMD) выделил управление жизненным циклом, мониторинг реальной эффективности и планирование контроля изменений, заранее определенных в протоколе, как ключевые вопросы для адаптивного программного обеспечения медицинских изделий (U.S. Food and Drug Administration, 2021). Эти вопросы делают версии моделей, происхождение обучения, мониторинг и документирование изменений важными артефактами рабочего процесса, не навязывая одинакового аудиторского артефакта на каждом этапе жизненного цикла. ↩
-
Разрыв производительности между лабораторией и клиникой: системы медицинского ИИ могут заметно менять производительность, когда модели камер, качество изображений, популяции пациентов или рабочие процессы операторов отличаются от данных разработки; разрыв возникает потому, что обучающие данные не могут охватить всего разнообразия производственных условий. FDA подчеркивает надзор за всем жизненным циклом продукта и мониторинг эффективности в реальных условиях для медицинских устройств с ИИ/ML, а подачи устройств могут требовать доказательств, соответствующих назначению и риску продукта. Для инженеров ML-систем это означает, что инфраструктура мониторинга должна быть предварительным условием развертывания, а не добавкой после запуска. ↩
-
Индекс стабильности популяции (PSI) и критерий Колмогорова–Смирнова (KS): два легких статистических метода для обнаружения дрейфа распределения. PSI разбивает признаки по интервалам и вычисляет расхождение; пороги вроде 0,1 и 0,2 являются эксплуатационными соглашениями, а не универсальными уровнями значимости. Критерий KS измеряет максимальное расстояние между эмпирическими функциями распределения. Оба достаточно дешевы для частого мониторинга, но обнаруженный сдвиг входа сам по себе не доказывает изменения точности: нужны метки или другие свидетельства исхода. Глава «MLOps» подробно описывает конвейеры обнаружения дрейфа. ↩
-
Сложность отката в ML: валидность модели ML связана с распределением данных, на котором она обучалась, а не только с ее кодом. «Эволюция данных» означает, что простой откат восстанавливает артефакт модели, но не может восстановить прошлую среду данных, создавая рассогласование состояний во времени. Поэтому даже быстрый откат — это тактика смягчения, а не настоящее восстановление системы, поскольку качество устаревшей модели на живых данных не гарантировано. ↩
-
Родословная данных: автоматическая фиксация метаданных, связывающих производственные журналы каждой клиники с точными данными, кодом и версией модели, которые их породили. Без такого явного следа сопоставление падения точности на конкретной площадке с экспериментом обучения может потребовать ручного криминалистического анализа, который задерживает установление первопричины. ↩
-
Технический долг в ML: Sculley et al. (2015) описывают специфичные для ML механизмы долга: запутанность (изменение одного признака влияет на все остальные, потому что модель выучила совместные распределения), скрытые петли обратной связи (предсказания влияют на будущие обучающие данные) и необъявленные потребители (последующие системы зависят от выходов без контрактов). Поскольку код ML часто составляет лишь малую часть производственной системы, окружающая конфигурация, конвейеры и инфраструктура позволяют этому долгу незаметно накапливаться. ↩
Инженерия данных
Назначение
Почему обучающие данные работают как исходный код в системе машинного обучения?
В традиционном программировании люди пишут логику, которую исполняют компьютеры. В машинном обучении люди пишут процедуры оптимизации, которые извлекают операционную логику из данных. Эта инверсия делает обучающие данные похожими на исходный код: их изменение может изменить обученную систему при переобучении модели, даже если традиционный код не менялся. Тонкие несогласованности в разметке порождают несогласованное поведение; пропущенные граничные случаи оставляют соответствующие сбои неизмеренными; исторические перекосы распространяются в выученное поведение. Модель, обученная только на этом наборе данных, не может вывести доказательства, относящиеся к задаче, но отсутствующие в нем, а систематические ошибки разметки определяют то, чему она научится. В отличие от исходного кода, который лежит неизменным, пока программист его не поправит, рабочее распределение может сдвигаться по мере изменения мира, и производительность в эксплуатации меняется, даже если в кодовой базе ничего не трогали. Инженерия данных может поглощать значительную часть усилий проекта, потому что эта работа имеет серьезные последствия. Каждое решение в конвейере данных (что собирать, как размечать, когда фильтровать, как делить) передается дальше и ограничивает архитектуру модели, динамику обучения и жизнеспособность развертывания. Поэтому инженерия данных — это не предобработка, а программирование на другом языке, где контроль качества, версионирование и мониторинг определяют, работает ли скомпилированная система сегодня и будет ли работать завтра. В терминах D·A·M сам конвейер — это задача совместного проектирования данных и машины: как бы тщательно ни были отобраны данные, алгоритм может учиться только так быстро, как машина способна их подать.
Цели обучения
- Объяснить данные как исходный код и проследить, как каскады данных распространяются через системы машинного обучения
- Рассчитать стоимость гравитации данных, налога на подачу и пропускной способности хранилища при перемещении или обслуживании наборов данных
- Оценить стратегии сбора данных по покрытию, качеству, стоимости разметки, управлению и ограничениям развертывания
- Спроектировать конвейеры приема и валидации данных для пакетных и потоковых нагрузок, ETL и ELT
- Реализовать идемпотентные преобразования, отслеживание родословной и проверки дрейфа для сохранения согласованности обучения и обслуживания
- Выбрать конструкции разметки, хранения, форматов файлов, версионирования и хранилища признаков для потребностей жизненного цикла ML
- Диагностировать долг данных и сбои производственных конвейеров по данным о качестве, надежности, масштабируемости и управлении
Компиляция набора данных
Рабочий процесс становится конкретным в конвейере данных: сырые входные данные проходят сбор, прием, анализ, разметку, валидацию и подготовку, прежде чем превратиться в наборы данных, готовые для ML. Сводка трудозатрат из опроса CrowdFlower 2016 года объясняет, почему этому конвейеру нужна собственная системная проработка: 60 процентов респондентов назвали очистку и упорядочивание данных самой трудоемкой задачей, а 19 процентов — сбор наборов данных (CrowdFlower, 2016). Ось данных таксономии D·A·M становится реальной только как инфраструктура: системы сбора, проверочные процедуры, рабочие процессы разметки, схемы хранения и управление.
Инженерия данных
Инженерия данных — это инфраструктурный слой, который управляет жизненным циклом данных от источника до модели и охватывает сбор, преобразование, хранение и управление.
- Значение: ее критическая функция — обеспечение согласованности обучения и обслуживания: она предотвращает незаметную деградацию, отделяя модель от нестабильности сырых данных. В рамках железного закона она определяет объем перемещаемых байтов , тогда как состав и качество набора данных определяют, остается ли набор репрезентативным для целевого распределения.
- Отличие: в отличие от науки о данных, которая сосредоточена на выводах и аналитике, инженерия данных отвечает за масштабируемость и надежность конвейера данных.
- Типичная ошибка: частое заблуждение сводит инженерию данных к простой «очистке данных». В системных терминах это компиляция набора данных: превращение сырых, зашумленных наблюдений в оптимизированную двоичную структуру, которую потребляют среды выполнения ускорителей.
Аналогия с компиляцией набора данных делает инфраструктуру конкретной. Так же как компилятор ПО преобразует исходный код через последовательность все более уточненных представлений (токены, абстрактные синтаксические деревья, промежуточные представления, машинный код), конвейер данных преобразует сырые, зашумленные наблюдения в пригодные для обучения числовые тензоры через сходные стадии. Фильтрация поврежденных записей, выбросов и нерелевантных признаков соответствует устранению мертвого кода: удалению материала, который ничего не вносит в обученное представление. Аугментация, которая синтетически расширяет ограниченные примеры поворотом изображений, сдвигом высоты звука или добавлением шума, соответствует развертыванию циклов: она дает модели больше вариантов базового паттерна без сбора новых данных. Дедупликация играет роль устранения общих подвыражений: она находит и объединяет повторяющиеся записи, которые иначе искажали бы оценки градиента и тратили вычисления. Проверка схемы, которая строго задает типы и диапазоны для каждой записи, — это проверка типов конвейера данных: она отклоняет некорректные входы до того, как они уронят «среду выполнения» обучения модели.
Из этого следует инженерное требование: наборы данных должны версионироваться с неизменяемой родословной, проверяться модульными тестами через наборы проверок схемы и отлаживаться при появлении регрессий. Удаление строки обучающих данных может изменить обученный артефакт так же, как удаление строки кода может изменить скомпилированный двоичный файл; переобучение — соответствующий шаг перекомпиляции. Компиляция также задает границу доверия между разбиениями набора данных. Обучающей выборке разрешено формировать параметры; валидационной выборке — выбор моделирования и решений в конвейере; тестовая выборка зарезервирована для оценки обобщающей способности после того, как эти решения приняты. Утечка возникает, когда информация пересекает эти границы: повторяющиеся примеры попадают в несколько разбиений, варианты одной и той же исходной записи оказываются по разные стороны разбиения, записи пользователей из одного домохозяйства попадают в обучающую и тестовую выборки или признаки вычисляются по будущим наблюдениям. Особенно коварная форма утечки возникает на этапе преобразования: вычисление глобальных параметров (например, среднего и дисперсии для нормализации или словарей категорий для заполнения пропусков) по всему набору до разбиения неявно переносит статистику распределения из тестового разбиения в фазу обучения. В сквозном примере распознавания ключевых слов, который проходит через всю главу, разбиения, независимые от диктора и учитывающие время, физически обеспечивают эту границу: разделение высказываний по личности диктора не позволяет акустической модели запоминать специфичные для говорящего резонансы голосового тракта, и оценка отражает обобщение на целевую популяцию пользователей.
Как и традиционный компилятор ПО, компилятор набора данных работает через дискретные физические стадии: сбор, прием, обработку, разметку, хранение и сопровождение жизненного цикла. На каждой стадии архитектура балансирует рамку четырех опор: качество (отношение сигнала к шуму и точность распределения), надежность (идемпотентное выполнение и строгие контракты схем), масштабируемость (пропускная способность потокового ввода-вывода, которая предотвращает голодание ускорителя) и управление (неизменяемая родословная и аудируемость). Для ограниченных периферийных целей, таких как встроенное распознавание ключевых слов, ошибка в кольцевом буфере ввода-вывода или нарушение контракта схемы напрямую приводят к перекосу обучения и обслуживания либо к сбою выполнения.
Эффективность конвейера зависит от физического взаимодействия между стоимостью перемещения и плотностью сигнала. Два физических свойства определяют этот компромисс: гравитация данных (пропускная способность межсоединений, ввод-вывод хранилища и задержка передачи, необходимые для перемещения объемов байтов) и информационная энтропия (плотность нового градиентного сигнала, содержащегося в этих байтах).
Отдача от отбора максимальна там, где плотность сигнала (энтропия) высока, а стоимость перемещения (гравитация) низка.
Как показывает соотношение между стоимостью перемещения и плотностью информации, инженерная отдача достигает пика, когда фильтрация и отбор выделяют записи с высокой энтропией до того, как возникнут затраты на передачу из-за гравитации данных. Низкоэнтропийные данные — повторяющиеся аудиокадры, фоновая тишина или дубликаты — насыщают пропускную способность PCIe от хоста к устройству и загрязняют иерархии памяти, давая минимальный прогресс градиента. Эффективная компиляция набора данных снимает это физическое ограничение, максимизируя энтропию информации, доставляемую на каждый перемещенный байт через иерархию хранения и межсоединений.
Физика данных
Метафора «данные как код» объясняет, что делают данные (определяют поведение системы), но не объясняет, почему их так дорого перемещать. Физика данных показывает, почему системы данных должны рассматривать данные как физическое вещество с измеримыми свойствами. Как у физических веществ есть плотность и вязкость, у наборов данных есть измеримые полезный для задачи сигнал и гравитация данных.
Гравитация данных
Перемещение данных сопряжено с физическим и финансовым трением: гравитация данных прямо пропорциональна объему набора и обратно пропорциональна пропускной способности сети . Передача набора объемом в петабайт по каналу 10 Гбит/с занимает несколько дней непрерывной передачи (); даже по выделенному каналу 100 Гбит/с задержка передачи и тарифы на исходящий трафик остаются достаточно большими, чтобы определять проектирование системы. Поскольку перенос 1 ПБ через сетевые границы одновременно медленный и дорогой, вычислительные кластеры должны перемещаться к месту хранения данных, а не данные к вычислениям. Это ограничение привело к появлению архитектур «озеро-хранилище» (lakehouse)1 (Zaharia et al., 2021), в которых распределенные движки запросов, такие как Apache Spark и Presto, работают прямо поверх общих объектных хранилищ. В масштабе организации парадигма data mesh (Dehghani, 2022) децентрализует владение, чтобы избежать централизованного массового перемещения, и рассматривает наборы данных как продукты, принадлежащие предметной области.
Полезный для задачи сигнал
Не все биты приносят одинаковую пользу на единицу стоимости перемещения. Физическое хранилище измеряет байты, тогда как оптимизация ML извлекает полезный для задачи сигнал — специфичную для задачи меру градиентной информации, а не сырую энтропию Шеннона. Набор из миллиона одинаковых изображений несет существенную гравитацию данных, но не добавляет градиентной информации сверх первого образца. Напротив, отобранная коллекция из 10 000 разнообразных граничных случаев несет пренебрежимо малую гравитацию данных, но богатый контролирующий сигнал. Соотношение полезного для задачи сигнала и гравитации данных определяет отдачу от перемещения данных:
Такое соотношение благоприятствует наборам данных, предельная учебная ценность которых оправдывает накладные расходы на передачу. Дедупликация и активное обучение напрямую оптимизируют это отношение: они устраняют избыточный объем байтов и отдают приоритет примерам обучения с высокой энтропией.
Проблема подачи: скорость потока и налог на подачу
Гравитация данных определяет стоимость массового перемещения данных; проблема подачи определяет стоимость доставки их исполнительным блокам в реальном времени. Это узкое место по скорости потока ввода-вывода: пропускная способность хранилища не успевает за вычислительной производительностью.
В рамках железного закона система работает только так быстро, как ее самый медленный этап. Когда ускоритель может обрабатывать 1 843 изображения в секунду, а подключенный том поставляет только 250 МБ/с, вычислительные блоки простаивают в ожидании ввода-вывода. Этот разрыв задает налог на подачу: реальное время, потерянное на ожидание ввода-вывода, которое напрямую снижает эффективность системы . На базовом облачном блочном хранилище этот налог может превышать 77,5 процента: ускоритель тратит больше половины времени шага на ожидание данных. Чтобы питать такой ускоритель, требуется 1,1 ГБ/с, поэтому конвейерам приходится применять специализированные иерархии хранения, разобранные в разделе «Варианты систем хранения». Расстояние также увеличивает энергопотребление: по мере удаления данных от арифметико-логических устройств энергия передачи превосходит энергию самих вычислений.
Инвариант движения энергии
Железный закон из раздела «Железный закон систем машинного обучения» и анализ стены памяти из раздела «Баланс системы и аппаратура» подразумевают принцип инженерии данных: перемещение одного 32-битного значения стоит примерно в 173–10 811 раз больше энергии, чем одно умножение FP32 из таблицы, и множитель растет по мере выхода данных за пределы кристалла. Более поздние главы по оптимизации используют тот же градиент стоимости внутри проектирования модели и аппаратуры; здесь вопрос в том, сколько энергии информационный поток из внешнего мира уже потребляет до того, как модель начнет вычисления. «Энергия перемещения и вычисления над 32-битным значением» делает этот градиент стоимости явным для всей иерархии памяти.
Операция Энергия (пДж) Относительная стоимость Умножение FP32 3,7 пДж/FLOP 1× Доступ к DRAM (32 бита) 640 пДж 173× Доступ к локальному SSD (32 бита) 4 000 пДж 1 081,1× Передача по сети (32 бита) 40 000 пДж 10 810,8× Энергия перемещения и вычисления над 32-битным значением: примерная энергия на событие на каждом этапе иерархии перемещения данных; множители нормированы к одному 32-битному умножению FP32. Все строки используют одинаковую ширину в 32 бита, поэтому отношения сравнивают события одинакового размера. Сами по себе они не доказывают, какое слагаемое доминирует в полной нагрузке: общая энергия зависит также от числа арифметических операций и передач.
Градиент стоимости, количественно описанный в «Энергия перемещения и вычисления над 32-битным значением», показывает, почему локальность данных доминирует в оптимизации систем. Каждая избежанная передача устраняет соответствующую энергию перемещения, и эта экономия накапливается по эпохам обучения.
Поскольку перемещение данных требует физических затрат энергии, объем данных действует как физическая масса. Удаление 50 процентов обучающих данных через дедупликацию дает больше, чем экономия постоянной емкости хранилища: оно устраняет затраты энергии на всех этапах сети, памяти и предобработки. Раннее отфильтровывание малоинформативных образцов — один из самых действенных архитектурных рычагов, когда ввод-вывод и коммуникации доминируют во времени выполнения нагрузки.
Энергетическая иерархия и эвристика плотности сигнала сходятся к одному рычагу оптимизации: эффективная инженерия данных максимизирует отдачу от отбора данных, определенную в «отдаче от отбора данных». Курирование данных работает как инженерия отношения сигнала к шуму. Дедупликация убирает избыточный объем байтов, сохраняя полезный для задачи сигнал, и напрямую повышает отдачу от отбора. Активное обучение отдает приоритет примерам с высокой энтропией перед повторяющимися образцами, концентрируя плотность информации на каждый переданный байт. Отфильтровывание малоинформативных записей экономит пропускную способность межсоединений и энергию хранения, не давая вводу-выводу выше по потоку заморозить блоки выполнения ускорителя.
Эти принципы управляют отдельными пакетами внутри одного серверного узла. На уровне кластера и дата-центра гравитация данных определяет инфраструктурные решения для глобальной сети. Когда перемещение петабайтов между регионами становится медленнее и дороже, чем развертывание удаленных ускорителей, вычисления должны переместиться к хранилищу. Разбор стоимости передачи между дата-центрами позволяет количественно оценить эту физическую границу.
Физика гравитации данных
Задача: обучающий набор объемом 1 ПБ находится в дата-центре на востоке США, а удаленный пул ускорителей доступен на западе США. Что быстрее: переместить данные или вычисления?
Расчет:
- Пропускная способность сети: 100 Гбит/с 12,5 ГБ/с.
- Время передачи: 1 000 000 ГБ 12,5 ГБ/с = 80 000 секунд, примерно 22 ч.
- Стоимость: 1 000 000 ГБ $0,02/ГБ = $20 000. (Базовая цена: тарифы AWS на исходящую передачу данных, 2024 год.)
Системный вывод: если обучение занимает меньше 22 ч, передача данных длится дольше обучения. Если обучение стоит меньше $20 000 (примерно 5 000 часов TPUv4), пропускная способность обходится дороже вычислений. Для данных масштаба петабайт код переходит к данным; для данных масштаба гигабайт данные переходят к коду.
Рассмотрение данных как физического вещества привязывает проектирование конвейера данных к аппаратным реалиям: пределы пропускной способности определяют скорость потока, иерархии памяти задают рассеяние энергии, а масштаб набора данных определяет размещение вычислений.
Физика данных
Инженерия данных определяется физическими затратами. Проверьте свою интуицию:
- Гравитация данных: почему наборы данных масштаба петабайт заставляют вычисления переходить к данным?
- Инвариант движения энергии: почему перемещение байта данных стоит на порядки больше энергии, чем его обработка?
- Полезный для задачи сигнал: почему меньший, но разнообразный набор данных может быть ценнее огромного избыточного?
Физические ограничения определяют рабочий диапазон систем данных ML, но одной физической осведомленности недостаточно для надежности. Система, которая учитывает гравитацию данных, все равно может выйти из строя, если пренебречь валидацией схемы, если повреждения данных останутся незамеченными или если конвейеры приема молча падают под нагрузкой. Чтобы превратить эти физические реалии в надежную производственную инфраструктуру, нужна систематическая архитектурная рамка, которая организует инженерные решения по приему, преобразованию и хранению.
Рамка четырех опор
Кредитная модель скоринга отклоняет каждого заявителя из одного региона, потому что смежная команда поменяла поле почтового индекса с целого числа на строку. Модель медицинской визуализации незаметно деградирует в течение месяцев, потому что камеры в партнерской больнице сменили оборудование. Система обнаружения мошенничества пропускает новый вид атаки, потому что ее обучающие данные устарели на полгода. Каждый сбой восходит к своей первопричине (дрейф схемы, сдвиг распределения, устаревание данных), но все они имеют общий паттерн: разрозненные инженерные решения по данным взаимодействовали так, как никто не предвидел до развертывания. Эти каскадные сбои мотивируют рамку из четырех опор, организованную вокруг качества, надежности, масштабируемости и управления.
Каскады данных
Системам машинного обучения свойственен характерный паттерн сбоев, называемый каскадами данных: плохое качество данных на ранних стадиях усиливается по всему конвейеру (Sambasivan et al., 2021). Некоторые некорректные входы сразу вызывают программные ошибки, но данные могут пройти схемы и тесты, одновременно незаметно портя выученное поведение2, пока проблемы качества не станут достаточно серьезными, чтобы потребовать дорогостоящего расследования, переделки или переобучения.
Ошибки в данных редко остаются в точке возникновения: они накапливаются по стадиям конвейера. Проследите последовательность связанных стадий на «Каскады качества данных» слева направо, чтобы увидеть, как начальный дефект данных распространяется в извлечение признаков, оптимизацию модели и решения о развертывании.
Каскады качества данных: дефекты, возникающие на ранних этапах семиэтапного рабочего процесса, по временной шкале выбрасывают дуги сбоев прямо в поздние стадии оценки и развертывания. Ранние ошибки постановки задачи и сбора накапливаются при последующей обработке и вынуждают дорогостоящие перезапуски проекта (пунктирные красные возвратные пути), когда дефекты наконец проявляются в эксплуатации. Источник: (Sambasivan et al., 2021).
Каскад данных
Каскад данных — это режим отказа систем ML, при котором проблемы качества данных на входе распространяются через сбор, разметку, инжиниринг признаков, обучение, оценку и развертывание, усиливаясь в сбои последующих моделей или вред пользователям.
- Значение: стоимость исправления растет вместе с числом последующих артефактов, которые использовали испорченные данные: таблицы признаков нужно пересоздать, модели переобучить, метрики оценки пересчитать, а развернутые системы откатить или исправить. Один дефект схемы или разметки может поэтому обесценить весь прогон обучения и все эксперименты, полученные из него, превращая локальную ошибку данных в событие переработки всего конвейера.
- Отличие: в отличие от изолированной ошибки качества данных каскад данных определяется распространением и усилением. Исходный дефект может быть небольшим, но каждая стадия конвейера считает свой вход надежным и превращает дефект в новое производное состояние, поэтому первопричину становится труднее наблюдать по мере удаления системы от сбора.
- Типичная ошибка: частое заблуждение состоит в том, что каскады данных ловят обычные программные тесты. На деле поврежденные данные могут удовлетворять схемам, проходить модульные тесты и давать успешные задания обучения, одновременно обучая модель неверному сигналу; предотвращение каскадов требует родословной, валидации, контрактов и мониторинга, привязанного к поведению модели.
Эта петля обратной связи создает коварный режим эксплуатационного отказа: незаметную деградацию. В отличие от обычных падений ПО, которые порождают трассировки стека и тревожные оповещения, ошибки модели, вызванные данными, выдают синтаксически корректные результаты с ухудшенной семантической точностью. К моменту, когда последующие метрики отразят сбой, испорченные предсказания уже загрязнили исторические хранилища данных, и приходится дорого откатывать состояние и заново принимать данные.
Джунгли конвейеров
Сценарий: производственная модель кредитного скоринга внезапно начинает отклонять всех заявителей из определенного географического региона.
Диагностика: команда базы данных выше по потоку изменила схему поля
zip_codeсintegerнаstring(значение «02139»), чтобы поддерживать международные коды, но не обновила контракты данных ниже по потоку. Устаревшее преобразование ниже по потоку по-прежнему приводило строку к целому числу перед сериализацией и отбрасывало ведущий ноль («2139»). Модель начинала считать знакомый почтовый индекс ненаблюдавшейся категорией повышенного риска.Системный урок: непроверенные границы признаков создают джунгли конвейеров, в которых изменения схемы выше по потоку вызывают незаметные сбои моделей ниже по потоку. Версионируемые контракты данных со строгой валидацией схемы и диапазонов предотвращают порчу данных между системами.
Четыре базовые опоры
Чтобы сбои не накапливались по конвейеру, инфраструктура данных должна уравновешивать четыре конкурирующих эксплуатационных приоритета. «Четыре опоры инженерии данных» организует эти приоритеты в четыре структурные опоры: качество (целостность и пригодность входных данных), надежность (эксплуатационная согласованность и отказоустойчивость), масштабируемость (пропускная способность и наращивание емкости) и управление (соответствие требованиям, происхождение и этика).
Четыре опоры инженерии данных: качество, надежность, масштабируемость и управление образуют базовую рамку систем данных ML. Каждая опора вносит необходимые возможности (сплошные стрелки), а компромиссы между опорами (пунктирные линии) требуют тщательного баланса: накладные расходы на валидацию влияют на пропускную способность, ограничения согласованности сужают распределенный масштаб, требования к приватности влияют на производительность, а смягчение смещений может уменьшить доступный объем обучающих данных.
Эти четыре эксплуатационные опоры задают пространство компромиссов для архитектуры конвейера данных. Приоритет масштабируемости без валидации качества или контрактов надежности может увеличить пропускную способность, одновременно позволяя плохим или несогласованным данным распространяться. И наоборот, исчерпывающие меры управления могут добавить накладные расходы на хранение и вычисления, которые ограничивают скорость итераций обучения.
Качество определяет целостность входных данных и их пригодность для задачи: данные должны точно отражать рабочее распределение, с корректными эталонными метками и неповрежденными признаками. Например, в периферийном конвейере регистрации голоса правила качества отфильтровывают обрезанные аудиоформы сигнала, низкие отношения сигнала к шуму и фоновые акустические помехи, чтобы модель училась на четких границах решения, а не на ложных акустических артефактах.
Надежность спрашивает, продолжает ли этот конвейер регистрации работать, когда устройство, сеть или поведение пользователя несовершенны. Конвейер, который выдает отличные примеры слов пробуждения в лаборатории, но ломается при прерывистой связи, разрядке батареи или сбоях микрофона, не приносит пользы в доме пользователя. Обработка ошибок, повторные попытки, локальная буферизация и корректная деградация превращают правило качества в работающую систему: устройство может запросить еще одну фразу, отложить загрузку до восстановления связи или сохранить заведомо корректную регистрацию, а не молча принимать испорченное аудио.
Масштабируемость спрашивает, переживает ли то же решение рост. Ручная политика проверки, которая работает для тысячи записей, рушится, когда продукт расширяется до миллионов пользователей, десятков языков и акустических условий «длинного хвоста». Система должна масштабировать валидацию, хранение, разметку и переобучение, не давая стоимости инфраструктуры расти быстрее ценности более полного покрытия. Лимитирующий ресурс зависит от нагрузки: для периферийной речи доминируют пропускная способность хранилища и разметки, тогда как для рекомендательных систем ограничивающим становится объем памяти. «Маячная модель рекомендаций DLRM» показывает, где опора масштабируемости бьет сильнее всего: таблицы эмбеддингов перерастают память одного узла, и распределенное разбиение становится проектным требованием первого класса, а не второстепенной деталью.
Управление задает границы, в которых должны работать качество, надежность и масштабируемость. Для распознавания ключевых слов управление определяет, могут ли сырые голосовые записи покидать устройство, как долго можно хранить аудио регистрации, какая запись согласия разрешает использование и какая документация подтверждает, что набор данных покрывает нужные акценты без раскрытия частной речи. Идеально масштабируемый, надежный и качественный конвейер, который нарушает Общий регламент ЕС по защите данных (GDPR) или закрепляет демографические смещения, создает ответственность, а не ценность. Практики документирования наборов данных, такие как заявления о наборе данных (data statements), делают часть этого управления видимой: они фиксируют происхождение, предполагаемое использование, условия сбора и покрытие, необходимые для анализа смещений и научного сравнения (Bender and Friedman, 2018).
Когда системы ML дают сбои, четыре опоры служат диагностической линзой для поиска первопричин. Постепенная деградация точности указывает на качество: дрейф данных сместил распределение в обслуживании относительно обучения или качество меток снизилось по мере смены состава разметчиков. Прерывистые сбои конвейера указывают на надежность: при пиковой нагрузке не хватает обработки ошибок, логики повторов или контроля ресурсов. Обучение, которое длится слишком долго при достаточном железе, указывает на масштабируемость: однопоточное преобразование, нераспределенное перемешивание или медленный уровень хранения мешают использовать параллельные ресурсы. Пробелы в соответствии требованиям, обнаруженные при аудитах, указывают на долг управления: отслеживание родословной неполно, права доступа устарели или политики хранения не успевают за регуляторными изменениями.
Маячная модель рекомендаций DLRM
Рекомендательные системы в стиле DLRM наглядно показывают проблему масштабируемости современной инженерии данных. Современные рекомендательные нагрузки разделяют требования конвейера к ресурсам: непрерывные сигналы проходят через плотные матричные конвейеры, тогда как категориальные идентификаторы требуют распределенной инфраструктуры поиска масштаба терабайт. «Профиль масштабируемости DLRM» показывает эти эксплуатационные точки напряжения на стадиях приема данных, агрегирования таблиц эмбеддингов и взаимодействия признаков.
Свойство Значение Следствие для системы Масштаб данных Идентификаторы пользователей и элементов с высокой кардинальностью Таблицы эмбеддингов и поиска могут перерасти память одной машины. Ограничение Емкость памяти Таблицы больше не помещаются в одну машину и должны быть разбиты на части. Узкое место Разреженный доступ Случайные обращения к поиску нагружают пропускную способность памяти сильнее, чем вычисления. Профиль масштабируемости DLRM: модели рекомендаций нагружают инженерию данных по емкости памяти и пропускной способности разреженного доступа, а не по вычислениям.
На этапе приема категориальные идентификаторы с высокой кардинальностью остаются компактными записями в потоке, ограниченном пропускной способностью. Узкое место по сетевой пропускной способности и емкости памяти возникает позже, когда обучение или обслуживание должны извлекать разреженные эмбеддинги из терабайтов разбитого на части состояния таблиц. Смягчить эту асимметрию можно стратегиями кэширования признаков и разбиения таблиц, которые рассматриваются дальше в жизненном цикле конвейера.
Самые коварные сбои затрагивают несколько опор. Признаки, которые различаются между обучением и обслуживанием, задевают одновременно качество (значения неверны) и надежность (вычисление несогласованно). Политика удаления, продиктованная приватностью, также может создавать пробелы в качестве, если сохраненные данные больше не покрывают популяцию развертывания. Диагностика таких межопорных сбоев требует проверки контрактов согласованности, сравнения распределений признаков между средами и отслеживания родословной преобразований — всех приемов, которые подробно рассматриваются в этой главе. Поэтому диагностика в производстве должна проверять инфраструктуру данных наряду с поведением модели.
Пример: распознавание ключевых слов
Системы распознавания ключевых слов (KWS) закрепляют рамку четырех опор конкретными физическими ограничениями. Детектор слова пробуждения, встроенный в микроконтроллеры с батарейным питанием и мобильные сопроцессоры, непрерывно слушает целевые фразы, такие как «OK Google» или «Alexa», в повседневной акустической среде, работая под жесткими ограничениями по вычислениям, памяти и энергии.3
Общие эксплуатационные цели инженерии данных переводятся в конкретные методы, инструменты и проверки. Для обмена репликами с голосовым ассистентом, показанного на рисунке «Распознавание ключевых слов в действии», эти механизмы включают дедупликацию, контракты схем, предвыборку и отслеживание родословной, сопоставленные с соответствующими архитектурными опорами.
Распознавание ключевых слов в действии: обмен репликами с Amazon Echo Dot. Пользователь произносит «Alexa», устройство подтверждает слово пробуждения, и пользователь отдает команду «приглуши свет». Легковесный детектор слова пробуждения работает непрерывно и запускает основного голосового ассистента только после того, как произнесено ключевое слово.
Четыре опоры напрямую переводятся в конкретные инженерные ограничения для распознавания ключевых слов. Основная задача обманчиво проста: обнаружить определенные ключевые слова среди фоновых звуков и других произнесенных слов с высокой точностью, малой задержкой и минимумом ложных срабатываний на устройствах с сильно ограниченными вычислительными ресурсами. Хорошо заданная постановка задачи определяет нужные ключевые слова, предполагаемое применение и сценарий развертывания. Цели, которые из нее следуют, должны уравновешивать конкурирующие требования: целевые показатели — точность обнаружения ключевых слов 98 процентов при задержке менее 200 мс — сочетаются с ограничениями ресурсов, требующими минимального энергопотребления и размеров модели, оптимизированных под доступную память устройства.
Небольшие частоты ложноположительных срабатываний на окно накапливаются до эксплуатационного сбоя.
Целевые показатели ложных срабатываний
Задача: система KWS, работающая постоянно, должна допускать не более одного ложного пробуждения в месяц. При классификационных окнах по одной секунде, работающих круглосуточно, насколько строгой должна быть частота ложноположительных срабатываний на окно?
Переменные:
- Режим работы: постоянно включен (24 часа в сутки).
- Размер окна: классификационные окна по одной секунде.
- Окон в месяц: одно окно в секунду, 24 часа в сутки, за 30 дней — 2 592 000 окон в месяц.
Расчет:
- Частота ложноположительных срабатываний (FPR): одно допустимое ложное пробуждение, деленное на месячное число окон, дает примерно
- Требование отклонения не-ключевых слов: отклонение 99,99996 процента окон с не-ключевыми словами.
Системный вывод: здесь недостаточна агрегированная точность (например, «99 процентов точности»). Оценка должна сообщать число ложных принятий в час (FA/Hr) вместе с соответствующим поведением ложных отказов.
Метрики успеха для KWS выходят за рамки простой точности и включают долю истинно положительных срабатываний (true positive rate: доля правильно распознанных ключевых слов от всех произнесенных), частоту ложноположительных срабатываний (не-ключевые слова, ошибочно принятые за ключевые) и кривые компромисса между обнаружением и ошибками. Эти кривые сравнивают число ложных принятий в час с частотой ложных отказов на потоковом аудио, похожем на реальное развертывание (Nayak et al., 2022). Из этих метрик именно частота ложноположительных срабатываний определяет пригодность для систем, работающих постоянно. Поскольку KWS слушает непрерывно, каждую секунду каждого дня, даже микроскопическая частота ложноположительных срабатываний на окно накапливается по миллионам окон оценки в недопустимый эксплуатационный сбой.
Эксплуатационные метрики дополнительно отслеживают время отклика (от произнесения ключевого слова до ответа системы) и энергопотребление (среднюю мощность, используемую при обнаружении ключевого слова), а приоритеты заинтересованных сторон создают дополнительное напряжение вокруг этих метрик. Производители устройств ставят на первое место низкое энергопотребление, разработчики ПО подчеркивают простоту интеграции, а конечные пользователи требуют точности и отзывчивости. Баланс этих конкурирующих требований определяет архитектурные решения на протяжении всей разработки.
Ограничения встроенных устройств накладывают жесткие границы на эти архитектурные выборы. Ограничения памяти требуют крайне легковесных моделей, часто в диапазоне десятков килобайт, чтобы помещаться в постоянно включенный островок системы на кристалле;4 этот бюджет должен вмещать не только веса модели, но и буферы извлечения признаков и состояние предобработки. Ограниченные вычислительные возможности (часто несколько сотен МГц тактовой частоты) требуют агрессивной оптимизации модели. Большинство встроенных устройств работает от батарей, поэтому системы KWS нацеливаются на энергопотребление ниже милливатта во время непрерывного прослушивания. Устройства также должны работать в разнообразных сценариях — от тихих спален до шумных промышленных помещений.
Качество и разнообразие данных в конечном счете определяют, можно ли соблюсти эти ограничения. Набор данных должен охватывать демографическое разнообразие (дикторов с разными акцентами, возрастом и полом), чтобы обеспечить широкое распознавание. Вариации ключевых слов требуют внимания, поскольку люди по-разному произносят слова пробуждения, а разнообразие фонового шума необходимо для обучения моделей, которые работают в реальных сценариях — от тихой обстановки до шума. Когда прототип создан, итеративная обратная связь и доработка удерживают систему в соответствии с целями по мере эволюции сценариев развертывания, требуя тестирования в реальных условиях и систематического уточнения на основе наблюдаемых паттернов сбоев.
Пространство проектных решений KWS
Точность KWS, допустимый уровень ложных пробуждений, бюджет задержки, бюджет энергии и ограничения памяти образуют многомерное пространство решений, в котором выборы инженерии данных каскадно влияют на производительность системы. В таблице «Пространство проектных решений KWS» количественно описаны ключевые компромиссы, что позволяет принимать обоснованные решения, а не выбирать наугад. В одной из строк используются мел-частотные кепстральные коэффициенты (MFCC): компактные признаки речевых частот, число коэффициентов которых определяет размер признаков, вычислительную стоимость и акустическую детализацию. «Систематическая обработка данных» показывает, как их извлекают.
| Выбор проектного решения | Влияние на качество | Влияние на задержку | Влияние на стоимость | Влияние на память |
|---|---|---|---|---|
| 16 кГц против 8 кГц | +2–4% точности | 2× нагрузка на обработку входа | 2× объем хранения сырого аудио | 2× размер признаков |
| 13 против 40 коэффициентов MFCC | +3–5% точности | 3× вычисления признаков | Минимальное | 3× память признаков |
| 1 млн против 10 млн обучающих примеров | +5–8% точности | 10× время обучения | 10× стоимость разметки | 10× хранилище |
| Чистые против зашумленных обучающих данных | +10–15% в реальных условиях | Минимальная | 3× стоимость сбора | Минимальная |
| Локальный против облачного вывода | до 2% риска потери точности | 10 мс против 100 мс | $0 за запрос против $0,001 за запрос | 64 КБ против масштаба облака |
| Синтетическая против реальной аугментации | +3–5% устойчивости | Минимальная | 10× дешевле | Минимальная |
Пространство проектных решений KWS: иллюстративные входные данные сценариев, которые оценивают каждый выбор по четырем осям — качеству, задержке, стоимости и памяти. Значения не являются измерениями одной системы и не должны складываться как аддитивные эффекты. Более высокая частота дискретизации удваивает объем хранения и обработки сырого аудио, а больше обучающих примеров умножает требования к разметке и хранению. Фактическое качество и задержку необходимо измерять на целевом конвейере.
Работа в милливаттных энергетических рамках и при строгих бюджетах SRAM порядка десятков килобайт означает, что инженерная команда не может одновременно выбрать самый точный вариант по каждой оси. Чтобы превратить эти каталогизированные компромиссы в производственное развертывание, нужно решить задачу оптимизации с ограничениями: распределить конечный бюджет данных между разметкой, хранением и управлением так, чтобы максимизировать точность модели и не выйти за рамки аппаратного бюджета. В примере «Оптимизация пространства проектных решений KWS» эта оптимизация разобрана для развертывания в умной колонке.
Оптимизация пространства проектных решений KWS
Сценарий: система KWS для умной колонки имеет такие ограничения:
- Цель: точность 98 процентов, не более одного ложного пробуждения в месяц
- Бюджет: $150 000 на инженерию данных в целом
- Память: ограничение размера модели 64 КБ (постоянно включенный островок)
- Срок: 6 месяцев до выпуска в производство
Шаг 1: применить ограничения, чтобы отсеять варианты.
Для этого сценария команда выбирает два консервативных варианта:
- 13 коэффициентов MFCC, чтобы уменьшить память состояния признаков и вычисления
- локальный вывод, чтобы избежать сетевой задержки и сохранить работу без сети
Ограничение размера модели 64 КБ само по себе не доказывает, что любая из альтернатив неосуществима: развернутая модель, состояние предобработки, среда выполнения и сетевой стек требуют отдельных измерений занимаемого объема.
Шаг 2: рассчитать распределение бюджета.
Бюджет $150 000 делится между тремя категориями затрат по удельным ставкам, установленным в разделе «Масштабируемость и оптимизация стоимости»:
- Разметка (около 60 процентов): $90 000 доступно
- Хранение и обработка (около 25 процентов): $37 500
- Управление и прочее (около 15 процентов): $22 500
При $0,10 за метку и 20 процентах накладных расходов на проверку: $90 000 ÷ $0,12 за метку = 750 000 размеченных примеров
Это дает примерно 0,75 млн размеченных примеров, чуть меньше опорной точки в 1 млн в нашем пространстве решений. Переход от 1 млн к 10 млн в строке «Пространство проектных решений KWS» поэтому следует читать как ориентир масштаба, а не как прямую интерполяцию: реальный бюджет на разметку сам по себе не покупает полного прироста объема данных.
Шаг 3: максимизировать оставшуюся точность.
План качества состоит из трех компонентов:
- иллюстративная точность базовой модели около 90 процентов
- частичный прирост от объема данных при 750 тысячах реальных примеров
- потребность: более высокая частота дискретизации и синтетическая или зашумленная аугментация, чтобы достичь цели 98 процентов
Три варианта из пространства решений остаются в рамках бюджета и ограничений памяти:
- частота дискретизации 16 кГц: +2–4 процента точности, в 2 раза больше стоимость хранения ✓ (укладывается в бюджет)
- зашумленные обучающие данные: +10–15 процентов точности в реальных условиях, в 3 раза больше стоимость сбора
- синтетическая аугментация: +3–5 процента устойчивости, в 10 раз дешевле реальных данных ✓
Шаг 4: итоговая конфигурация.
Сценарий сочетает эти выборы с 13 коэффициентами MFCC и расчетным бюджетом на 750 тысяч размеченных реальных примеров из «Кандидатная конфигурация KWS». Эффекты качества могут перекрываться, поэтому таблица фиксирует кандидатную конфигурацию, а не решенный оптимум.
Результат: расчет бюджета допускает примерно 750 тысяч размеченных людьми примеров. Достижение целевого качества 98 процентов и укладывание в ограничение модели 64 КБ остаются требованиями валидации для обученной и развернутой системы.
Системный вывод: систематический анализ пространства решений превращает фразу «нам нужно больше данных» в проверяемое распределение. Заявленные допущения о разметке обеспечивают около 750 тысяч реальных примеров, а синтетический объем, точность и занимаемый объем развернутой системы все еще требуют измерения.
«Кандидатная конфигурация KWS» фиксирует итоговую конфигурацию, сопоставляя каждый проектный выбор с ограничением, которое его вынуждает: выборка и аугментация оплачиваются там, где укладываются в бюджет, а точность и память зафиксированы постоянно включенным островком.
| Выбор | Вариант | Обоснование |
|---|---|---|
| Частота дискретизации | 16 кГц | +3% точности при 2 стоимости хранения в пределах бюджета |
| Коэффициенты MFCC | 13 | Снижает память состояния признаков и вычисления; окончательная проверка требует измерения |
| Обучающие примеры | 750 тысяч реальных и иллюстративная синтетическая аугментация | Число размеченных людьми примеров следует из бюджета; объем синтетики — выбор сценария |
| Разнообразие данных | Смесь зашумленных и чистых данных | Критично для развертывания в реальных условиях |
| Вывод | Локальный, пониженная точность | Пониженная точность может уменьшить занимаемый объем; окончательное укладывание в 64 КБ требует анализа сжатия (глава «Сжатие моделей») |
| Аугментация | Преимущественно синтетическая | В 10 раз дешевле реальных данных |
Кандидатная конфигурация KWS: сценарий, который использует расчетный бюджет на реальные метки и фиксирует оставшиеся выборы по частоте дискретизации, аугментации и развертыванию для измерения относительно целей по качеству и памяти.
Кандидатная конфигурация задает целевые требования, но для их выполнения нужно организовать взаимодополняющие каналы получения данных. Базовые корпуса задают акустическое априорное распределение, целевая краудсорсинговая разметка закрывает пробелы в демографическом покрытии, а синтетические генераторы обеспечивают объем при параметризованных акустических условиях. Четыре опоры дают диагностические и архитектурные критерии для оценки этих каналов, но происхождение данных определяет физический сырой материал, который уточняет каждая последующая стадия конвейера. В разделе «Получение данных» излагаются экономические и системные компромиссы между этими стратегиями сбора.
Рамка четырех опор
Четыре опоры дают системный взгляд на каждый выбор в конвейере.
Опоры
- Качество: можете ли вы отличать корректность от покрытия (граничные случаи, покрытие подгрупп) и объяснить, почему важны оба?
- Надежность: можете ли вы назвать конкретные режимы отказа (дрейф схемы, пропущенные значения, перекос), которые вызывают незаметную деградацию, а не явные падения?
- Масштабируемость: можете ли вы объяснить, какие части конвейера становятся узкими местами по мере роста объема данных (пропускная способность хранилища, вычисления, координация) и почему?
- Управление: можете ли вы сформулировать, что нужно отслеживать, чтобы набор данных можно было аудировать (происхождение, ограничения согласия, права доступа, документация)?
Компромиссы
- Напряжение между опорами: для одного изменения конвейера (например, более строгой валидации, более жестких требований приватности или большего числа источников данных) можете ли вы предсказать, какая опора улучшится и какие опоры окажутся под нагрузкой?
Получение данных
Получение данных начинается, когда команда называет пробел в покрытии, который модель должна закрыть. Полная база ImageNet5 выросла примерно до 14,2 млн размеченных изображений в 21 841 синсете, тогда как задача ImageNet Large Scale Visual Recognition Challenge использовала подмножество из 1 000 классов (Deng et al., 2009; Russakovsky et al., 2015). Обучающий корпус GPT-3 использовал десятки терабайт сырого текста Common Crawl, отфильтрованного до сотен гигабайт, в сочетании с отобранными данными из веба, книг и Википедии (Brown et al., 2020). Система распознавания ключевых слов (KWS) требует 23,4 млн аудиообразцов, охватывающих 50 языков, но инженерная задача выходит далеко за пределы объема хранения. Модель должна распознавать слова пробуждения при разных акцентах, микрофонах, комнатах, возрастах и фоновых шумах, которые никакой один метод сбора не может экономически покрыть. Поэтому стратегия получения данных — это последовательность решений о закрытии пробелов: переиспользовать то, что уже соответствует развертыванию, собрать недостающее, собирать скрапингом или синтезировать там, где масштаб является решающим ограничением, и отвергать источники, чье происхождение или ограничения согласия делают их непригодными.
Профиль развертывания KWS показывает, почему получение данных не может оптимизировать одно измерение изолированно. Достижение точности 98 процентов в разнообразных акустических средах требует репрезентативного покрытия региональных акцентов, возрастных групп дикторов и реверберации помещений. Поддержание стабильного обнаружения на потребительских устройствах вносит аппаратную вариативность: микрофоны различаются частотной характеристикой, отношением сигнала к шуму и поведением при аналого-цифровом ограничении. Кроме того, поддержка миллионов одновременно работающих периферийных устройств требует объемов данных, которые ручная курация не может экономически обеспечить, а детекторы слова пробуждения, слушающие постоянно, работают в жестких границах приватности, регулирующих хранение аудио и его анонимизацию. Источник данных, который максимизирует объем, но ущемляет соответствие требованиям приватности, или который фиксирует безупречное студийное аудио, игнорируя искажения полевого микрофона, не решает задачу развертывания.
Оценка и выбор источников данных
Выбор между отобранными наборами данных, экспертным краудсорсингом, контролируемым веб-скрапингом и синтетической генерацией зависит от того, какой источник лучше всего закрывает следующий пробел между распределением развертывания и обучения при приемлемой стоимости, качестве и рисках управления. Поэтому оценка начинается с самого дешевого переиспользуемого источника и переходит к активному сбору или моделированию, только когда оставшийся пробел в покрытии оправдывает предельную инженерную стоимость.
Готовые наборы данных из репозиториев, таких как Kaggle, UCI (Dua and Graff, 2024) и ImageNet, — первая проверка. Они дают скорость и сопоставимость, когда распределение развертывания достаточно похоже на эталонное, чтобы переиспользование имело смысл. Для KWS отобранный речевой корпус может задать базовую модель и показать, какие слова, языки и акустические условия уже покрыты. Базовые корпуса не гарантируют полного эксплуатационного покрытия, но делают непокрытые пробелы в распределении измеримыми.
Пригодность повторного использования набора данных зависит от точности документации. Без подробных записей о калибровке датчиков, распределениях окружения и порогах фильтрации внешние данные ставят под угрозу воспроизводимость эксперимента (Pineau et al., 2021; Henderson et al., 2018). Полная документация описывает методологию сбора, определения таксономии меток и распределения базовых ошибок, что позволяет проводить независимую валидацию. По мере роста приема до миллионов образцов разнообразие набора усиливает скрытый шум меток (Gudivada et al., 2017), делая ручную проверку невозможной и требуя автоматизированных конвейеров валидации.
Стандартные метрики валидации могут создавать иллюзию готовности модели, если их оценивать на нерепрезентативных данных. Совместное использование набора данных («Распространение смещения общего набора данных») показывает, как обучение нескольких моделей на одном общем наборе распространяет общие смещения, слепые зоны и системные ограничения по всей экосистеме.
Распространение смещения общего набора данных: пять моделей (от A до E) обучаются на одном центральном хранилище наборов данных, к которому ведет путь, помеченный как общие обучающие данные. Под моделями пять помеченных стрелок (распространение смещения, общие ограничения, слепые зоны, общие слабости и системные проблемы) сходятся в один блок «ограниченное соответствие реальному миру». Обучение всех моделей на одном наборе данных не порождает пять независимых дефектов; оно порождает один коррелированный сбой во всей экосистеме.
Этот разрыв в распределении — центральный режим отказа статичных офлайн-эталонов. Поскольку эмпирическая минимизация риска оптимизируется только по наблюдаемым обучающим распределениям, модели используют ложные артефакты статичных эталонов, которые исчезают в производственной среде. Поэтому автоматизированный мониторинг дрейфа и непрерывная валидация данных становятся обязательными эксплуатационными требованиями.
Масштабируемость и оптимизация стоимости
Ручная курация перестает работать, когда задаче нужны миллионы обучающих примеров. В большом масштабе основными путями к массивным наборам данных становятся веб-скрапинг и синтетическая генерация. Масштабируемость получения данных по сути является экономической задачей: стоимость разметки за единицу, пропускная способность приема и накладные расходы хранения растут по очень разным кривым. Подходы, которые хорошо работают на тысячах примеров, становятся непрактичными на миллионах, тогда как автоматизированные конвейеры генерации данных распределяют свои затраты на настройку по большим объемам.
Экономика единицы на каждом этапе определяет, какая стратегия доминирует. Разметка одного медицинского снимка, например, может стоить на порядки дороже, чем его хранение в течение года, и это соотношение перестраивает распределение бюджета для любой команды с фиксированным финансированием. «Иллюстративные затраты на инженерию данных (2024)» и «Иллюстративные временные масштабы инженерии данных» дают необходимый контекст для решений о получении данных.
Инженеры ML должны использовать датированные справочные допущения из таблиц «Иллюстративные затраты на инженерию данных (2024)» и «Иллюстративные временные масштабы инженерии данных» как исходные данные для сравнений конкретных нагрузок, а не как текущие ценовые предложения или напрямую сопоставимые итоги.
| Операция | Стоимость | Примечания |
|---|---|---|
| Краудсорсинговая метка изображения | $0,01–0,05 | Простая классификация |
| Разметка ограничивающей рамки | $0,05–0,20 | За рамку, простые сцены |
| Экспертная медицинская метка | $50–200 | За исследование, радиолог |
| S3, хранение (Standard) | $23 за ТБ в месяц | Горячее хранение |
| S3, извлечение (Glacier) | $0,02 за ГБ | Стандартное: 3–5 часов |
| Час обучения на облачном GPU | $2–4 | Спотовые цены облака |
| Час проверки человеком | $15–50 | В зависимости от квалификации |
Иллюстративные затраты на инженерию данных (2024): датированные справочные допущения для моделей стоимости конкретных нагрузок, а не текущие котировки поставщиков. Поскольку строки используют разные единицы измерения, сравнивайте их, только предварительно пересчитав каждую ставку на количество, которое она оценивает.
«Иллюстративные временные масштабы инженерии данных» дополняет картину иллюстративными длительностями операций разметки, обучения и обслуживания.
| Операция | Длительность | Узкое место |
|---|---|---|
| Разметка 1 млн изображений (краудсорсинг) | 2–4 недели | Пропускная способность аннотирования |
| Обучение ResNet-50 на ImageNet | 4–6 часов | Вычисления (8 A100, оптимизировано) |
| Поиск в хранилище признаков | 1–10 мс | Сеть и кэш |
Иллюстративные временные масштабы инженерии данных: сценарий охватывает около 9 порядков величины, причем медленнейшим перечисленным этапом является разметка людьми. Фактические длительности зависят от набора данных, задачи, оборудования и конфигурации сервиса.
Операционные временные масштабы расходятся на этих этапах на порядки: недели на человеческую аннотацию, часы на обучение на GPU и миллисекунды на поиск при обслуживании. В этом конвейере критическим узким местом становится пропускная способность аннотирования. Бюджет разметки в $100 000 намного превышает $64–$192, необходимые для одного прогона обучения ResNet-50 на 8 A100, — асимметричное соотношение от 520,8 до 1 562,5 раза. Внутри этих затрат на разметку инженерные усилия следуют крайне неравномерному степенному распределению: 80 процентов бюджета уходит на 20 процентов распределения данных — длинный хвост редких акустических граничных случаев, диалектных вариаций и неоднозначных записей.
Все цифры затрат отражают приблизительные ставки облачных провайдеров 2024 года и предназначены для передачи относительных величин, а не точных цен.6 Для этой нагрузки и модели стоимости человеческий труд доминирует в стоимости одного прогона обучения. Другие задачи, особенно те, что переиспользуют существующие метки или требуют повторного крупномасштабного обучения, могут иметь другое доминирующее слагаемое; команды должны измерять, прежде чем решать, где оптимизировать.
Веб-скрапинг — основной механизм обхода затрат на ручную аннотацию в масштабе. Фундаментальные наборы данных для компьютерного зрения, такие как ImageNet (Deng et al., 2024) и OpenImages (Kuznetsova et al., 2020), опирались на автоматизированный скрапинг, тогда как современные языковые модели зависят от многотерабайтных веб-обходов (Groeneveld et al., 2024). Конвейеры приема, нацеленные на предметные корпуса, например на публичные репозитории кода (Chen et al., 2021), расширяют покрытие при низкой стоимости получения каждого образца. Однако автоматизированные скраперы хрупки в эксплуатации: изменения схемы и DOM ломают парсеры извлечения, ограничения частоты HTTP 429 дросселируют сетевую пропускную способность, а динамический рендеринг JavaScript приводит к пропускам при захвате. Сырые веб-обходы также захватывают анахроничные или нерелевантные образцы, которые загрязняют контролируемые цели.
«Шум в источниках данных» показывает один такой результат веб-скрапинга по запросу «traffic light» (англ. «светофор»): историческую фотографию вместо современного светодиодного сигнала. Если бы изображения из этого контекста были избыточно представлены или коррелировали с меткой, модель могла бы выучить ложные признаки, связанные с регулировщиками в форме или историческими улицами, а не визуальные свойства, нужные в среде развертывания.
Шум в источниках данных: черно-белая фотография 1914 года, на которой видны ранние электрические светофоры с ручным управлением. Она иллюстрирует, как исторические изображения могут попадать в результаты веб-скрапинга по современным запросам. Такой анахроничный контент требует систематической валидации и фильтрации, чтобы не допустить ложных корреляций в обучающих данных. Изображение воспроизведено по (Stromberg, 2015).
Этот сбой показывает, почему объем набора данных не может заменить семантическую валидацию: необработанный веб-масштаб лишь умножает распространенность ложных корреляций. Помимо технической валидации, скрапинг работает в жестких правовых границах и границах управления. Условия использования сайтов, директивы robots.txt и меняющаяся судебная практика в области авторского права ограничивают автоматизированный обход (Harvard Law School, 2024). Конвейеры приема должны обеспечивать журналирование происхождения данных, фильтры соответствия авторскому праву и очистку персональных данных до того, как собранные материалы попадут в общее хранилище.
Краудсорсинг переносит узкое место получения данных с извлечения сырых образцов на контроль качества распределенных человеческих разметчиков. Платформы вроде Amazon Mechanical Turk (Amazon Web Services, 2024) продемонстрировали это в масштабе на ImageNet, распределив миллионы задач по категоризации изображений между тысячами независимых исполнителей (Deng et al., 2024). Краудсорсинг дает два основных системных преимущества: горизонтальное масштабирование за счет параллельной отправки микрозадач и демографическое разнообразие по региональным акцентам и акустическим условиям. Однако распределенная разметка людьми вносит значительный разброс в точность меток. Чтобы шум меток не испортил последующие градиенты, конвейер получения должен реализовать автоматизированный контроль качества: голосование по консенсусу, валидацию по эталонному набору (чередование заранее размеченных контрольных образцов) и динамическую маршрутизацию задач (Sheng and Zhang, 2019). В конвейере KWS краудсорсинговый сбор7 нацелен на образцы слов пробуждения из определенных акустических сред и недостаточно представленных диалектов, которые публичные веб-скрапы не захватывают.
Синтетическая генерация данных снимает узкое место человеческого труда, создавая обучающие образцы алгоритмически. Это меняет инженерный компромисс: предельная стоимость генерации стремится к нулю, но стоимость проверки растет, поскольку синтетические данные полезны, только если симулятор точно отражает физические распределения целевой среды развертывания. «Синтетическая аугментация данных» показывает, как синтетические симуляции и исторические наблюдения сливаются в единый обучающий конвейер.
Синтетическая аугментация данных: сочетание смоделированных граничных случаев с историческими данными системы во время обучения. Алгоритмическая генерация дополняет реальные наблюдения, чтобы закрыть пробелы в покрытии для редких событий и опасных режимов работы, не неся пропорциональных затрат на человеческий сбор. Источник: (AnyLogic, 2024).
Синтетические данные особенно эффективны для синтеза редких событий и аугментации данных. Движки симуляции, основанные на физике, позволяют контролируемо выбирать хвостовые события, такие как насыщение датчиков на высокой скорости или редкие траектории столкновений, которые слишком опасно или дорого зафиксировать эмпирически (NVIDIA, 2024). В задачах компьютерного зрения автоматизированные конвейеры аугментации, такие как AutoAugment (Cubuk et al., 2019) и RandAugment (Cubuk et al., 2020), оптимизируют политики преобразований по пространственным и фотометрическим искажениям (Shorten and Khoshgoftaar, 2019). В обработке речи SpecAugment применяет искажение времени и маскирование спектрограммы прямо в частотной области, заставляя акустические модели учиться представлениям, инвариантным к локальному выпадению частот (Park et al., 2019). Для системы KWS параметрический синтез речи из текста (Werchniak et al., 2021) в сочетании со сверткой с импульсной характеристикой помещения (room impulse response, RIR) генерирует экземпляры слов пробуждения при различных временах реверберации и профилях синтетического фонового шума.
Генерация синтетических данных
Сценарий: команда распознавания ключевых слов не располагает достаточным количеством физических записей редких акцентов дикторов, акустики помещений и профилей фонового шума.
Диагностика: чистый физический сбор не может покрыть редкие акустические граничные случаи в сроки проекта. Генерация синтетических вариаций аудио изменением высоты тона, аддитивным шумом и моделированием импульсной характеристики помещения расширяет разнообразие обучающего набора без дорогостоящего полевого сбора.
Системный урок: генерация синтетических данных работает как автоматизированный множитель конвейера данных. Целевая синтетическая аугментация известных граничных случаев закрывает пробелы в покрытии распределения, которые иначе потребовали бы непомерно дорогого физического сбора набора данных.
Чтобы обеспечить требование 23,4 млн аудиообразцов на 50 языках, нужно организовать эти каналы получения данных в соответствии с их предельными кривыми стоимости. Отобранные публичные эталоны дают дешевую начальную инициализацию модели; веб-скрапинг обеспечивает высокопроизводительный акустический объем; краудсорсинг собирает целевые образцы для недостаточно представленных диалектов; а параметрическое моделирование синтезирует хвостовые акустические искажения. Сочетание этих уровней закрывает пробел в покрытии, не выходя за рамки бюджетов на оборудование и разметку.
Требования к покрытию и разнообразию
Одного масштаба набора данных недостаточно для гарантии обобщения. Пробелы в покрытии в огромных корпусах — географические смещения, недостаточное представительство демографических групп, дрейф калибровки датчиков и ненаблюдавшиеся граничные случаи — порождают систематические режимы отказа, которые агрегированные метрики валидации скрывают (Wang et al., 2019; Oakden-Rayner et al., 2020). Как показывает «Распространение смещения общего набора данных», несколько независимых моделей, обученных на одних и тех же публичных наборах, наследуют одни и те же слепые зоны; разнообразное получение данных из нескольких источников — основная архитектурная защита от коррелированных системных сбоев.
Ограничения управления дополнительно формируют получение данных: регуляторные требования к приватности и данным о здоровье, такие как GDPR и HIPAA, ограничивают то, какие данные можно собирать и как (European Parliament and Council of the European Union, 2016; United States Congress, 1996), а этичное получение источников требует справедливой компенсации и прозрачного использования вклада людей. Полную инфраструктуру управления для производственных систем ML рассматривает раздел «Управление данными и соответствие требованиям» главы «Ответственная инженерия».
Прием разнородных входов — записей краудсорсинга, синтетических волновых форм и веб-аудиопотоков — предъявляет строгие архитектурные требования на границе конвейера. Поскольку входящие потоки имеют разные аудиокодировки, частоты дискретизации, задержки приема и уровни шумового фона, уровень приема не может считать внешние входы однородными данными. Инфраструктура хранения и валидации должна принять, нормализовать и проверить этот потоковый объем, прежде чем его можно будет зафиксировать в хранилище признаков для обучения.
Архитектура конвейера данных
В рамках компиляции архитектура конвейера данных выполняет роль фронтенда компилятора: она разбирает разнородные сырые входы в единое промежуточное представление, которое последующие стадии могут надежно обрабатывать. Аудиофайлы с платформ краудсорсинга, синтетические волновые формы из систем генерации и периферийные записи с развернутых устройств поступают в обучающий конвейер в разных форматах, и конвейер должен нормализовать, проверить и направить их в согласованную схему. Производственный вывод KWS потребляет непрерывное аудио при отдельном ограничении на низкую задержку; конвейер, который рассматривается здесь, следует записанным примерам, на которых строятся и обновляются модели. «Сквозной конвейер данных» показывает этот путь от источников данных через прием, обработку, разметку и хранение до обучения ML.
Сквозной конвейер данных: разнородные исходные данные (пакетные и потоковые) нормализуются в единое хранилище, прежде чем поступить на обучение и обработку признаков. Архитектура отделяет пропускную способность приема от итеративных циклов преобразования и разметки, и все это ограничено общим слоем управления данными.
Каждый уровень на рисунке «Сквозной конвейер данных» выполняет свою роль в подготовке данных к обучению. Выбор подходящего движка требует оценки того, как компромиссы конвейера взаимодействуют между стадиями: проверки качества при приеме определяют фильтрацию хранения ниже по потоку, а бюджеты задержки при обслуживании ограничивают сложность предобработки.
Иерархии хранения и пропускная способность ввода-вывода определяют пропускную способность конвейера данных наряду с декодированием и преобразованием на стороне процессора. Физические компромиссы охватывают несколько порядков величины: объектное хранилище с высокой задержкой подходит для надежного архивирования, тогда как хранилища в оперативной памяти с низкой задержкой обслуживают поиск признаков в реальном времени. Аналогично пропускная способность варьируется от жестких дисков на 100–200 МБ/с до оперативной памяти на 50–200 ГБ/с. «Архитектура хранения» подробно разбирает эти компромиссы хранения.
Выбор между паттернами приема требует сопоставить характеристики нагрузки с возможностями инфраструктуры. Потоковые нагрузки требуют явных гарантий долговечности сообщений, порядка в разделах и восстановления после сбоев. Пакетные нагрузки зависят от объема набора данных относительно доступной памяти, сложности преобразований и разбиения по кластеру. Утилиты одной машины справляются с наборами масштаба гигабайт, тогда как обработка масштаба терабайт требует распределенных вычислительных движков, которые разделяют выполнение на части.
Качество через валидацию и мониторинг
Рассмотрим конвейер для беспилотного автомобиля, в котором 15 процентов меток облака точек LiDAR смещены на 10–20 см — этого достаточно, чтобы поместить рамку пешехода на пустой тротуар. Поскольку каждая запись остается структурно корректной, проверки схемы пропустили бы дефект; статистический мониторинг соответствия меток показаниям датчика мог бы его выявить.
Качество составляет основу надежных систем ML. Конвейеры обеспечивают качество через непрерывную валидацию на каждой границе. Дефекты данных — ведущая причина производственных сбоев ML: дрейф схемы выше по потоку ломает задания парсинга, сдвиги распределения снижают точность модели, а тихая порча данных отравляет представления признаков (Sculley et al., 2015). Эти сбои редко вызывают немедленные исключения времени выполнения; вместо этого они незаметно ухудшают последующие предсказания. Предотвращение каскадных сбоев требует упреждающего статистического мониторинга до того, как испорченные пакеты попадут на обучение модели.
Microsoft Tay (2016)
Контекст: в марте 2016 года Microsoft запустила Tay, чат-бота в Twitter, который должен был общаться с пользователями в сети и адаптировать свои ответы на основе публичных взаимодействий (Lee, 2016).
Механизм: злоумышленники координировали токсичные запросы и использовали публичную поверхность взаимодействия, в том числе поведение, при котором бот повторял текст, предоставленный пользователями. Публичное изложение Microsoft описывает злоупотребление системой, но не подтверждает неограниченного обновления весов в сети.
Последствия: через 16 часов после развертывания Tay начал публиковать оскорбительные, расистские и мизогинные высказывания.
Реакция: Microsoft приостановила работу чат-бота через 16 часов после запуска, публично извинилась и заявила, что для повторного запуска нужны более надежные защиты от злоупотреблений.
Системный урок: публичные пути приема требуют средств контроля состязательных входов. Иначе функция, которая принимает пользовательский контент, становится также поверхностью атаки, а вредные входы могут распространиться по системе в течение нескольких часов.
Производственные команды реализуют мониторинг в масштабе через системы оповещений по уровню серьезности, в которых разные типы сбоев запускают разные протоколы реагирования. Самые критические оповещения сообщают о полном отказе системы: конвейер полностью остановил обработку, пропускная способность равна нулю более пяти минут или основной источник данных стал недоступен. Такие ситуации требуют немедленного внимания, поскольку они останавливают все последующее обучение или обслуживание моделей. Более тонкие паттерны деградации требуют других стратегий обнаружения. Когда пропускная способность падает до 80 процентов базового уровня, частота ошибок превышает 5 процентов или показатели качества отклоняются от характеристик обучающих данных больше чем на два стандартных отклонения, система сигнализирует о деградации, которая требует срочного, но не немедленного внимания. Эти постепенные сбои часто оказываются опаснее полных отключений, потому что они длятся незамеченными часами или днями, незаметно портя входы модели и ухудшая качество предсказаний.
Система рекомендаций, которая обрабатывает события взаимодействия пользователей со скоростью 50 000 записей в секунду, делает эти уровни серьезности конкретными. Ее система мониторинга отслеживает несколько взаимозависимых сигналов. Оповещения о мгновенной пропускной способности срабатывают, если обработка падает ниже 40 000 записей в секунду дольше 10 минут: это учитывает нормальные колебания трафика и одновременно выявляет настоящие проблемы мощности или обработки. У каждого признака в потоке данных есть собственный профиль качества: если признак вроде user_age имеет пустые значения более чем в 5 процентах записей, тогда как в обучающих данных пустых значений было меньше 1 процента, в источнике данных выше по потоку, вероятно, что-то сломалось. Проверка дубликатов выполняется на выборке данных и отслеживает одно и то же событие, появляющееся несколько раз, — паттерн, который может указывать на неправильно работающую логику повторов или на запрос к базе, по ошибке возвращающий одни и те же записи.
Эти измерения мониторинга приобретают особое значение, когда речь идет о сквозной задержке. Система должна отслеживать и то, поступают ли данные, и то, сколько времени они проходят через весь конвейер от момента события до того, как полученные признаки становятся доступны для вывода модели. Когда 95-й перцентиль задержки превышает 30 секунд в системе с соглашением об уровне обслуживания в 10 секунд, система мониторинга должна определить, на какой стадии конвейера возникла задержка: приеме, преобразовании, валидации или хранении.
Оповещения о схеме и задержке выявляют структурные и временные сбои; обнаружение сдвига распределения непрерывного признака требует статистического сравнения с базовым уровнем обучения.
Обнаружение дрейфа критерием K-S
Сценарий: мониторинг устойчивости распределения
session_durationмежду базовым уровнем обучения и текущим распределением обслуживания .Анализ: применить критерий Колмогорова — Смирнова для сравнения эмпирических функций распределения:
Вычислить функции распределения: рассчитать кумулятивные функции распределения для обоих наборов данных.
Рассчитать статистику : найти максимальную абсолютную разность между функциями распределения. Пусть и обозначают эмпирические функции распределения базового уровня обучения и текущих данных обслуживания в точке .
Определить значимость: для двух независимых выборок сравнить с критическим значением , которое зависит от размера базовой выборки обучения и размера выборки обслуживания . Коэффициент 1,36 — приближение для больших выборок при уровне значимости . Результат: при размерах выборок критическое значение примерно равно 0,061: Если наблюдается максимальная разность , она превышает критическое значение, поэтому мы отвергаем нулевую гипотезу и отмечаем значимый дрейф.
Системный вывод: статистические тесты дрейфа превращают расплывчатую тревогу о сдвиге распределения в эксплуатационный триггер. Тест должен запускать расследование или процесс переобучения, а не незаметно становиться еще одним числом на дашборде.
Как показано в примере «Обнаружение дрейфа критерием K-S», отслеживание статистических свойств позволяет понять, продолжают ли данные обслуживания отражать распределение обучения. Вместо того чтобы просто проверять, попадают ли отдельные значения в заранее заданные диапазоны, производственные системы поддерживают скользящие статистики по эксплуатационным окнам. Для непрерывных числовых признаков, таких как transaction_amount или session_duration, система мониторинга вычисляет скользящие эмпирические функции распределения и использует непараметрические оценки, например критерий Колмогорова — Смирнова8, чтобы обнаружить, когда входы обслуживания расходятся с базовым уровнем обучения.
Критерий K-S обнаруживает дрейф непрерывных признаков; «Обнаружение дрейфа данных и реакция на него» подробно описывает таксономии сдвига распределения (ковариатный, меточный, концептуальный и дрейф качества меток), а также индекс стабильности популяции (PSI) и дивергенцию Кульбака — Лейблера.
Категориальные признаки требуют иных статистических подходов. Вместо сравнения средних и дисперсий системы мониторинга отслеживают распределения частот категорий. Когда появляются новые категории, которых никогда не было в обучающих данных, или когда существующие категории существенно меняют относительную частоту, система помечает потенциальные проблемы качества данных или настоящие сдвиги распределения; например, доля трафика «мобильный» против «настольный» может измениться более чем на 20 процентов. Такая статистическая бдительность выявляет тонкие проблемы, которые простая валидация схемы полностью пропускает: значения возраста могут оставаться в допустимом диапазоне 18–95 лет, тогда как распределение смещается от преимущественно людей 25–45 лет к преимущественно людям старше 65 лет, что указывает на изменение источника данных, которое повлияет на качество модели.
Валидация на уровне конвейера включает несколько стратегий, работающих вместе. Валидация схемы выполняется синхронно, когда данные входят в конвейер, и немедленно отклоняет некорректные записи до того, как они распространятся ниже по потоку. Современные инструменты, такие как TensorFlow Data Validation (TFDV) (Breck et al., 2019), автоматически выводят схемы из обучающих данных, фиксируя ожидаемые типы данных, диапазоны значений и требования к наличию.
Такая синхронная валидация остается простой и быстрой, проверяя свойства, которые можно оценить для отдельных записей за микросекунды. Более сложная валидация, которая требует сравнения данных обслуживания с распределениями обучения или агрегирования статистик по многим записям, должна выполняться асинхронно, чтобы не блокировать конвейер приема. Системы статистической валидации обычно выбирают 1–10 процентов трафика обслуживания — этого достаточно, чтобы обнаружить значимые сдвиги, не тратя вычисления на анализ каждой записи. Эти выборки накапливаются в скользящих окнах, обычно по часу, 24 часа и семь дней, и разные окна показывают разные паттерны. Почасовые окна выявляют внезапные сдвиги, например когда источник данных переключается на резервный с другими характеристиками, тогда как недельные окна показывают постепенный дрейф в популяции пользователей или их поведении.
Самая коварная проблема валидации возникает из-за перекоса обучения и обслуживания (training-serving skew): режима отказа, при котором признаки вычисляются по-разному при обучении и при обслуживании. Обычно это происходит, когда конвейеры обучения обрабатывают данные пакетами с помощью одного набора библиотек или логики, тогда как системы обслуживания вычисляют признаки в реальном времени по другим реализациям. Даже кажущиеся незначительными расхождения (материализованное представление9, обновляемое раз в неделю, против полного соединения, пересчитываемого каждый день) могут существенно снизить точность в эксплуатации и трудно диагностируются, потому что система не выдает явных ошибок. «Согласованность обучения и обслуживания» формализует это требование согласованности и количественно оценивает его влияние на конкретном примере. Чтобы обнаружить перекос обучения и обслуживания, нужна инфраструктура, которая может пересчитывать признаки обучения на данных обслуживания для сравнения: выборка сырых данных обслуживания и их обработка по обоим конвейерам позволяет измерить расхождения. Эксплуатационную инфраструктуру мониторинга для этой задачи в масштабе рассматривает глава «MLOps».
Качество данных как код
Подобно тому как модульные тесты защищают традиционное ПО, тесты ожиданий от данных защищают конвейеры ML. В подходе качества данных как кода инженеры используют декларативные библиотеки, такие как Great Expectations или Pandera, чтобы выражать контракты данных в виде исполняемых наборов тестов, которые работают на разных стадиях конвейера.
Интеграция ожиданий в конвейеры непрерывной интеграции и развертывания (CI/CD) гарантирует, что проверки выполняются автоматически на принятых пакетах и останавливают последующее обучение, когда контракты данных нарушены. Конвейер, построенный по схеме «прием данных — валидация — обучение», блокирует развертывание, когда валидация обнаруживает аномалии, например значения возраста 150, и запускает оповещения для расследования.
Исполняемые ожидания ловят свойства, которые может закодировать набор проверок; остается вопрос, что еще данные, выглядящие корректными, могут сделать неверно.
Механическое и семантическое качество
В традиционном ПО многие проверки являются механическими. Разыменование нулевого указателя — ошибка времени выполнения в языках с нулевыми ссылками, тогда как поведение при целочисленном переполнении зависит от языка и типа.
В системах ML у качества данных есть второе, более мягкое измерение: семантическое качество.
- Механическая проверка: «является ли
ageцелым числом?» (да или нет).- Семантическая проверка: «меняется ли распределение
age?» (вероятностная).Набор данных может быть механически безупречным (без пустых значений, с правильными типами), но семантически сломанным (например, все пользователи внезапно оказываются 25-летними из-за изменения значения по умолчанию). Надежные системы ML должны проверять и оболочку (механически), и содержание (семантически).
Когда валидация становится кодом, наборы ожиданий становятся версионируемыми артефактами наряду с кодом обучения. Когда код обучения меняется, обновления ожиданий позволяют контрактам данных развиваться вместе с ним. Такая связка снижает риск незаметного расхождения, когда код предполагает свойства данных, которые вышестоящий конвейер уже не предоставляет; «проверки качества данных» показывает этот паттерн, задавая явные ограничения на диапазоны столбцов, допустимость пустых значений, уникальность и наборы категорий.
Проверки качества данных: набор Great Expectations проверяет диапазон возраста, наличие и уникальность идентификаторов и допустимые коды стран, а затем вызывает ошибку, если проверка не пройдена.
import great_expectations as gx
# Создаем контекст данных
context = gx.get_context()
# Определяем набор ожиданий как исполняемый контракт качества
suite = gx.ExpectationSuite(name="user_data_quality")
suite = context.suites.add(suite)
# Проверка диапазона: исключает физиологически невозможные значения
suite.add_expectation(
gx.expectations.ExpectColumnValuesToBeBetween(
column="age", min_value=0, max_value=120
)
)
# Проверка пустых значений: обеспечивает целостность первичного ключа для соединений
suite.add_expectation(
gx.expectations.ExpectColumnValuesToNotBeNull(column="user_id")
)
# Уникальность: исключает дублирующиеся обучающие примеры
suite.add_expectation(
gx.expectations.ExpectColumnValuesToBeUnique(column="user_id")
)
# Проверка категорий: выявляет неожиданные значения из-за изменений выше по потоку
suite.add_expectation(
gx.expectations.ExpectColumnDistinctValuesToBeInSet(
column="country_code",
value_set=["US", "CA", "UK", "DE", "FR"],
)
)
# Связываем набор с заранее настроенным определением батча и запускаем проверку
# (определение батча связывает GX с ресурсом данных training_users)
validation_definition = gx.ValidationDefinition(
name="training_users_validation",
data=batch_definition,
suite=suite,
)
validation_definition = context.validation_definitions.add(
validation_definition
)
results = validation_definition.run()
if not results.success:
raise ValueError(f"Проверка качества данных не пройдена: {results}")
Эти проверки ловят многие проблемы данных на уровне схемы в производстве до того, как данные попадут на обучение, включая пропущенные значения, недопустимые диапазоны, ошибки типов и нарушения контрактов. Оставшиеся проблемы требуют мониторинга во время выполнения и проверки результатов, потому что семантические проблемы качества часто проявляются только в полном производственном потоке данных.
Обнаружение дрейфа данных и реакция на него
Модели ML опираются на предположение, что производственные данные похожи на обучающие. Когда это предположение нарушается через статистические сдвиги, а не через явное нарушение контракта, производительность модели может меняться незаметно, без очевидных ошибок и сбоев системы. Методы валидации и мониторинга из раздела «Качество через валидацию и мониторинг» способны выявить и внезапные, и постепенные проблемы; обнаружение дрейфа данных специально сосредоточено на изменениях распределений, которые могут со временем менять поведение модели. Обнаружение, расследование и реакция на такие изменения требуют длительных усилий по мониторингу, поэтому дрейф — основная обязанность инженерии данных, а не необязательная продвинутая тема. Глава «MLOps» строит на этом фундаменте оркестрацию реакции в эксплуатации, валидацию результатов и конвейеры переобучения на основе свидетельств в масштабе.
Формальные определения метрик расхождения, которые делают член расхождения уравнения деградации («деградация») применимым на практике, приведены в разделе «Измерение дрейфа (расхождение)» приложения «Основы данных». Индекс стабильности популяции (PSI) количественно описывает изменения категориальных или сгруппированных по интервалам признаков, а дивергенция Кульбака — Лейблера (KL) измеряет информационно-теоретическое расхождение между распределениями вероятностей. Эти две метрики кодируют разные предположения о распределении и разные масштабы, и ни одна из них сама по себе не задает универсального порога. Команды калибруют пороги, специфичные для метрики, по базовому уровню развертывания и отслеживают их во времени. Пересечение порога сигнализирует, что живое распределение сместилось достаточно далеко, чтобы оправдать расследование и проверку результатов; одного расхождения входов недостаточно, чтобы установить, улучшилась точность или ухудшилась и насколько. Математически PSI дискретизирует непрерывный признак на опорные интервалы (обычно децили базового распределения ) и вычисляет . Поскольку процентная разность и логарифм отношения имеют одинаковый знак, каждый сдвигающийся интервал положительно вносит вклад в индекс, что дает эмпирическое практическое правило: указывает на стабильное распределение, сигнализирует о умеренном сдвиге, а требует обязательного расследования.
Целенаправленное обнаружение и смягчение требуют разложения дрейфа на составляющие компоненты распределения, как показано на рисунке ниже.
Каждый тип дрейфа восходит к компоненту распределения, который сдвинулся.
Первый случай — ковариатный сдвиг: он меняет распределение входов, сохраняя связь между признаками и метками: меняется, а остается прежним. Система медицинской визуализации, обученная на одной модели камеры, позже может получить производственные снимки от другого производителя. Связь «снимок — болезнь» не меняется, но значения пикселей сдвигаются, потому что различаются характеристики датчиков, калибровка цвета или конвейеры обработки изображений. Поэтому обнаружение сосредоточено на распределениях входных признаков с использованием таких метрик, как PSI или дивергенция KL.
Второй случай — сдвиг меток: он меняет распределение выходов, сохраняя связь между метками и признаками: меняется, а остается прежним. Распространенность болезни может меняться по сезонам, тогда как симптомы остаются устойчивыми предикторами каждой болезни. Рекомендательная система может увидеть тот же паттерн, когда запускаются новые товарные категории: относительная частота пользовательских предпочтений меняется, не меняя того, что делает товары привлекательными внутри каждой категории. Обнаружение часто может начинаться без эталонных меток, если отслеживать сдвиги в распределении предсказаний модели.
Самый трудный случай — концептуальный дрейф: связь между признаками и метками меняется, так что эволюционирует во времени (Gama et al., 2014). Протоколы медицинского лечения меняются, предпочтения пользователей смещаются вместе с общественными трендами, а паттерны мошенничества адаптируются, когда злоумышленники реагируют на системы обнаружения. В отличие от ковариатного или меточного сдвига концептуальный дрейф требует эталонных меток для обнаружения, потому что система должна наблюдать, изменилась ли сама связь «признак — метка».
Дрейф качества меток
Дрейф качества меток10 представляет собой метауровневый сдвиг, отличный от трех описанных выше сдвигов распределения: надежность эталонных меток со временем ухудшается, даже когда базовые распределения данных остаются стабильными. Этот тип дрейфа особенно коварен, потому что стандартный мониторинг распределений признаков его не обнаруживает. Краудсорсинговые метки могут ухудшаться по мере смены пула разметчиков, устаревания обучающих материалов или изменения инструкций по разметке без соответствующих обновлений модели. Системы автоматической разметки накапливают ошибки по мере того, как модели, на которых они работают, уходят от исходных условий эксплуатации. Рекомендательная система, которая использует клики как неявные метки, может видеть падение качества меток, когда поведение пользователей становится более исследовательским, когда меняются паттерны трафика ботов или когда изменения интерфейса меняют способ взаимодействия пользователей с контентом.
Обнаружение требует мониторинга согласованности аннотаций, а не распределений признаков. Метрики межаннотаторского согласия, такие как каппа Коэна11 , дают количественную оценку. Пусть обозначает наблюдаемое согласие между разметчиками, а — согласие, ожидаемое по случайности. «каппа Коэна» задает статистику:
Наблюдение за во временных окнах выявляет тенденции деградации. Проект аннотирования медицинских снимков может установить базовое значение (почти полное согласие) на этапе первичного сбора данных, а затем зафиксировать снижение до (существенное согласие) через шесть месяцев, когда в проект придут новые разметчики без эквивалентного обучения предметной области.
Для систем с откалиброванными вероятностями модели предиктивная энтропия дает дополнительный сигнал неопределенности. Пусть обозначает вероятность, которую модель присваивает категории меток , а — натуральный логарифм, так что энтропия измеряется в натах. «энтропия меток» задает эту меру:
Рост предиктивной энтропии указывает на большую неопределенность предсказательного распределения модели, но не определяет причину. Более трудные входы, сдвиг распределения, изменения калибровки или несогласованный надзор могут давать один и тот же сигнал.
Стратегии смягчения зависят от анализа первопричин. Переобучение разметчиков устраняет систематические ошибки, возникающие из-за неясных инструкций, дешево и очень эффективно. Голосование нескольких разметчиков по правилам большинства или консенсуса обеспечивает высокую точность для областей с высокими ставками, но заметно увеличивает стоимость аннотирования. Разметка с помощью модели снижает утомление разметчиков, но рискует внести смещение, если вспомогательная модель имеет собственные систематические ошибки. Выборочная экспертная проверка, при которой специалисты предметной области аудируют случайную выборку аннотаций, позволяет проводить анализ первопричин, когда обнаружено падение качества, но покрывает лишь небольшую долю общего потока аннотаций.
Внедрение в эксплуатацию метрик PSI и дивергенции KL, введенных в разделе «Измерение дрейфа (расхождение)», требует связать их с автоматическими оповещениями и процедурами проверки. Инженерия данных отвечает за определение специфичных для предметной области порогов дрейфа по базовому поведению и свидетельствам результатов, за выбор окон мониторинга, которые способны выявить и внезапные, и постепенные изменения, и за инструментирование конвейеров для непрерывного вычисления этих метрик. Глава «MLOps» позже рассматривает, как производственные команды сочетают эти сигналы с размеченными результатами, многоуровневыми оповещениями, путями эскалации, мониторингом холодного старта и оркестрацией реакции, специфичной для причины.
Статистическое обнаружение дрейфа выявляет изменения распределений во времени, но сам мониторинг не поддерживает работу системы, когда вышестоящие конвейеры останавливаются, приходят некорректно сформированные данные или определения схемы меняются без предупреждения. Поддержание непрерывности обслуживания при сбоях требует активных механизмов надежности: изоляции сбоев, противодавления (backpressure) и корректной деградации.
Надежность через корректную деградацию
Надежность означает, что системы продолжают работать, когда возникают проблемы. Конвейеры постоянно сталкиваются с трудностями: источники данных временно становятся недоступны, сетевые разрывы отделяют компоненты друг от друга, изменения схемы выше по потоку ломают логику парсинга, или неожиданные всплески нагрузки исчерпывают ресурсы. Корректная деградация означает обработку этих сбоев через систематический анализ отказов, интеллектуальную обработку ошибок и автоматизированные стратегии восстановления, которые сохраняют непрерывность обслуживания даже в неблагоприятных условиях.
Систематический анализ режимов отказа для конвейеров данных ML выявляет предсказуемые паттерны, которые требуют специфичных инженерных мер противодействия. Порча данных возникает, когда вышестоящие системы вносят тонкие изменения формата, проблемы кодировки или модификации значений полей, которые проходят базовую валидацию, но портят входы модели. Поле даты, которое переключается с формата «ГГГГ-ММ-ДД» на «ММ/ДД/ГГГГ», может не вызвать срабатывания валидации схемы, но сломает любое вычисление признаков на основе дат. Сбои эволюции схемы12 происходят, когда исходные системы добавляют поля, переименовывают столбцы или меняют типы данных без согласования, ломая предположения последующей обработки о конкретных именах или типах полей. Исчерпание ресурсов проявляется как постепенное ухудшение производительности, когда рост объема данных опережает планирование мощностей, и в конце концов вызывает сбои конвейера в периоды пиковой нагрузки.
Эффективные стратегии обработки ошибок гарантируют, что проблемы локализуются и систематически устраняются. Интеллектуальная логика повторов для временных ошибок (сетевых прерываний или кратковременных отказов сервисов) требует стратегий экспоненциальной задержки (exponential backoff), чтобы не перегружать восстанавливающиеся сервисы. Простой линейный повтор, который пытается переподключиться каждую секунду, наводнил бы испытывающий трудности сервис попытками подключения и мог бы помешать его восстановлению. Экспоненциальная задержка, при которой повтор выполняется через одну секунду, затем через две, затем через четыре, удваивая интервал на каждой попытке, дает сервисам время на восстановление и сохраняет настойчивость. Многие системы ML используют очереди мертвых писем (dead-letter queues, DLQ): отдельное хранилище для данных, которые не обработались после нескольких попыток повтора. Это позволяет позже проанализировать проблемные данные и, возможно, переработать их, не блокируя основной конвейер (Kleppmann, 2016). Конвейер, обрабатывающий финансовые транзакции, который встречает некорректные данные, может направить их в очередь мертвых писем, а не терять критические записи или останавливать всю обработку.
В системах ML очереди мертвых писем служат двум целям помимо анализа сбоев. Производственные команды систематически просматривают содержимое DLQ, чтобы выявить: (1) нарушения схемы, указывающие на изменения выше по потоку, (2) граничные паттерны, которые модель должна обрабатывать, и (3) проблемы качества данных, требующие исправления в исходной системе. Например, DLQ системы обнаружения мошенничества выявила транзакции нового типа платежа, которые модель никогда не видела, что побудило к целевому сбору данных и переобучению, а не просто к записи сбоев в журнал. Так DLQ перестает быть пассивным хранилищем ошибок и становится активным источником для выявления слепых зон модели и управления ее улучшением.
Помимо ad hoc обработки ошибок, предотвращение каскадных сбоев требует паттернов предохранителя (circuit breaker)13 и изоляции переборок (bulkhead), чтобы сбой отдельного компонента не распространялся по всей системе. Когда сервис вычисления признаков выходит из строя, паттерн предохранителя прекращает вызывать этот сервис после обнаружения повторяющихся сбоев, не давая вызывающей стороне ждать тайм-аутов, которые каскадно привели бы к ее собственному отказу.
Автоматизированная инженерия восстановления выходит за рамки простой логики повторов. Экспоненциальная задержка, джиттер, сброс нагрузки (load shedding) и предохранители снижают давление запросов на испытывающие трудности сервисы, позволяя кратковременным сбоям восстанавливаться; простое увеличение тайм-аутов может удерживать ресурсы дольше и усугубить перегрузку. Многоуровневые системы резервного переключения обеспечивают деградированное обслуживание, когда основные источники данных выходят из строя: подача слегка устаревших кэшированных признаков при сбое вычисления в реальном времени или использование приближенных признаков, когда точное вычисление не укладывается в тайм-аут. Система рекомендаций, которая не может вычислить предпочтения пользователя за последние 30 дней, может перейти к предпочтениям за последние 90 дней, давая менее точные, но все еще полезные рекомендации вместо полного отказа. Развитые процедуры оповещения и эскалации гарантируют, что человеческое вмешательство происходит, когда автоматизированное восстановление не удалось, и что во время сбоя фиксируется достаточно диагностической информации для быстрой отладки.
Логика повторов, очереди мертвых писем и предохранители служат обработчиками ошибок времени выполнения в компиляторе набора данных: они перехватывают некорректные входы, не останавливая весь конвейер. Эти защитные механизмы работают, когда данные уже вошли в систему. Выбор паттерна приема — пакетного или потокового, а также извлечения, преобразования и загрузки (ETL) против извлечения, загрузки и преобразования (ELT) — определяет, как быстро новые данные доходят до модели, какая буферная инфраструктура нужна и где применяются инварианты надежности.
Прием данных
В рамках компилятора прием данных выполняет роль лексера: он читает потоки сырых источников и разбивает их на структурированные записи, которые могут обработать последующие стадии. Основное препятствие производительности на этой стадии — узкое место ввода-вывода (I/O). Ускорители простаивают, если прием не может подготовить тензоры достаточно быстро, чтобы вычислительные блоки оставались загруженными. В идеализированной двухстадийной модели время шага лежит в диапазоне от при полном перекрытии до без перекрытия. Эти границы переформулируют проблему подачи из раздела «Проблема подачи: скорость потока и налог на подачу» через второй ресурсный взгляд: если в предыдущем сценарии пропускная способность хранилища оставляла вычислительные блоки без данных, то узкие места приема чаще возникают из-за накладных расходов декомпрессии и декодирования на стороне процессора.
Если конвейер данных не может декодировать изображения достаточно быстро, чтобы держать GPU занятым, дорогой ускоритель простаивает. Это явление создает «узкое место» загрузчика данных: добавление GPU не дает ускорения, пока входной конвейер не улучшен, — контринтуитивный результат для команд, которые ожидают линейного масштабирования от вложений в железо. Такое узкое место часто возникает в компьютерном зрении, где декодирование JPEG высокого разрешения и аугментация на CPU могут доминировать во входном пути. Для этого иллюстративного расчета каждый рабочий процесс подает 375 изображений/с, а ускоритель потребляет 3 000 изображений/с, поэтому для достижения точки пересечения нужны 8 рабочих процессов. Этот результат — согласование мощностей, а не константа железа: ниже точки пересечения ограничивает входной конвейер; выше нее дополнительные рабочие процессы не повышают пропускную способность, потому что ограничивает потолок ускорителя. Фактические требования ResNet-50 и A100 зависят от преобразований изображений, хранилища, размера батча, процессоров хоста и конфигурации фреймворка.
Масштабирование пропускной способности обучения требует совместного проектирования приема на хосте вместе с вычислениями на GPU: пиковая производительность ускорителя в FLOP/s остается неиспользованной, если предобработка на хосте не может подавать тензоры достаточно быстро, чтобы вычислительные блоки не простаивали. «Узкое место загрузчика данных» иллюстрирует эту динамику насыщения: он показывает пересечение плоского потолка потребления ускорителя и кривой подачи CPU по мере масштабирования рабочих процессов DataLoader.
Узкое место загрузчика данных: пропускная способность обучения (изображений/с) в зависимости от числа рабочих процессов DataLoader. Синяя кривая подачи CPU растет с числом рабочих процессов до достижения иллюстративного предела входного конвейера; красная пунктирная линия отмечает емкость потребления ускорителя. Нижняя кривая является узким местом: ускоритель голодает слева от точки пересечения, а дополнительные рабочие процессы сверх точки пересечения не повышают пропускную способность ускорителя.
Когда пропускная способность загрузчика падает ниже скорости потребления ускорителя, загрузка резко падает: матричные исполнительные блоки простаивают в ожидании батчей, а память с высокой пропускной способностью (HBM) простаивает, удерживая статические веса. Снятие этого узкого места требует пулов рабочих процессов с несколькими процессами, асинхронной предвыборки в закрепленную память через шину PCIe и аппаратно ускоренных движков декомпрессии, которые полностью обходят узкие места процессора хоста.
Пакетные и потоковые паттерны приема
Выбор между пакетной и потоковой обработкой — это не предпочтение одной архитектуры перед другой, а суждение о том, как быстро данные теряют ценность и какие инфраструктурные затраты оправдывает такая свежесть. Пакетные системы получают эффективность, мирясь с устареванием данных, тогда как потоковые системы получают свежесть, принимая постоянную эксплуатационную сложность.
Пакетный прием предполагает сбор данных группами за заданный период перед обработкой. Этот метод уместен, когда обработка в реальном времени не критична и данные можно обрабатывать по расписанию. Пакетный подход позволяет эффективно использовать вычислительные ресурсы, распределяя издержки запуска на большие объемы данных и обрабатывая их, когда ресурсы доступны или дешевле всего. Например, розничная компания может использовать пакетный прием для обработки ежедневных данных о продажах ночью и обновлять свои ML-модели прогнозирования запасов каждое утро (Akidau et al., 2015). Пакетное задание может обрабатывать гигабайты транзакционных данных, используя десятки машин в течение 30 минут, а затем освобождать эти ресурсы для других нагрузок. Такая обработка по расписанию оказывается намного экономичнее поддержания постоянно включенной инфраструктуры, особенно когда небольшое устаревание прогнозов не влияет на бизнес-результаты.
Пакетная обработка также упрощает обработку ошибок и восстановление. Когда пакетное задание падает на полпути, система может повторить весь пакет или продолжить с контрольных точек без сложного управления состоянием. Специалисты по данным могут просмотреть неудачные пакеты, понять, что пошло не так, и переобработать их после исправлений. Пакетные задания можно сделать воспроизводимыми, если контролировать входы, код, конфигурацию, случайность, операции, чувствительные к порядку, и внешнее состояние, что упрощает отладку и валидацию. Эти свойства делают пакетный прием привлекательным для рабочих процессов ML даже тогда, когда обработка в реальном времени технически осуществима, но не требуется.
В противоположность такому плановому подходу потоковый прием обрабатывает данные в реальном времени по мере их поступления, непрерывно потребляя события, а не дожидаясь накопления пакетов. Этот паттерн необходим для приложений, которым нужна немедленная обработка данных, сценариев, где данные быстро теряют ценность, и систем, которым нужно реагировать на события по мере их возникновения. Финансовое учреждение может использовать потоковый прием для обнаружения мошенничества в реальном времени, обрабатывая каждую транзакцию по мере ее совершения, чтобы сразу отметить подозрительную активность до завершения транзакции. Ценность обнаружения мошенничества резко падает, если выявление происходит через часы после завершения мошеннической транзакции: к тому времени деньги уже переведены, а счета скомпрометированы.
Однако потоковая обработка вносит сложность, которой пакетная обработка избегает. Система должна справляться с противодавлением (backpressure) — ситуацией, когда нижестоящие системы не успевают за входящими потоками данных. Во время всплесков трафика, когда внезапный наплыв производит данные быстрее, чем емкость обработки, система должна либо буферизовать данные (что требует памяти и вносит задержку), либо выполнять выборку (теряя часть данных), либо оказывать давление назад на производителей (потенциально вызывая их сбои). Соглашения об уровне обслуживания (SLA) по свежести данных задают максимально допустимые задержки между генерацией данных и их обработкой. Соблюдение SLA в 100 миллисекунд требует иной инфраструктуры, чем соблюдение SLA в один час, и влияет на архитектуры сети, хранения и обработки.
Понимая ограничения каждого подхода по отдельности, многие производственные ML-системы применяют гибридные схемы, сочетающие пакетный и потоковый прием. Система рекомендаций может использовать потоковый прием для взаимодействий пользователей в реальном времени, чтобы немедленно обновлять рекомендации на основе сессии, тогда как пакетный прием применяется для ночной обработки профилей пользователей и признаков элементов; «Стоимость реального времени» количественно оценивает финансовый компромисс между этими двумя эксплуатационными режимами.
Стоимость реального времени
Задача: конвейер принимает 1 млн событий в секунду. Что дешевле: пакетный прием (раз в час) или потоковый (менее секунды)?
Расчет:
- Пропускная способность: при 1 млн событий в секунду и 1 КБ на событие конвейер переносит 1 ГБ/с.
- Требования потока: чтобы поддерживать 1 ГБ/с с задержкой менее 100 мс, системе нужны около 50 основных ядер и около 50 резервных, или всего 100 постоянно включенных ядер. Работа этих ядер 24 часа в сутки по цене $0,05 в час обходится в $120 в сутки.
- Требования пакетной обработки: обработать 3,6 ТБ (окно 1 час) за 10 минут. Высокая пропускная способность (последовательный ввод-вывод) эффективна. Пакетный дизайн требует 200 ядер на 10 минут каждого часа, накапливая 800 ядро-часов в сутки. По цене $0,05 в час это обходится в $40 в сутки.
Системный вывод: для того же объема данных потоковая обработка примерно в 3 раза дороже. Эта надбавка оправдана, только когда ценность задержки менее секунды превышает добавленную стоимость.
Как показывает предыдущий расчет стоимости, надбавка за реальное время напрямую проистекает из выделения ресурсов. Потоковые системы требуют постоянно включенной инфраструктуры с резервными вычислениями и хранилищем, чтобы достигать задержек в миллисекунды без потери событий. Пакетные системы, напротив, выделяют эфемерные экземпляры, которые обрабатывают большие объемы последовательно с высокой загрузкой, а затем выключаются. Выбор между ними зависит от того, требует ли нижестоящий вывод строго свежести признаков менее секунды.
Парадигма приема также определяет, как обучается нижестоящая модель. Пакетный прием естественным образом сочетается с периодическим переобучением: данные накапливаются в хранилище, автоматическое задание переобучает модель на обновленном корпусе, а проверенная контрольная точка развертывается в обслуживание. Потоковый прием делает эту пакетную границу менее естественной, повышая возможность непрерывного онлайн-обучения — прямого обновления весов модели по мере поступления событий. Однако непрерывные обновления вносят эксплуатационные риски, которых избегают пакетные контрольные точки: внезапные сдвиги распределения, поврежденные записи или состязательные полезные нагрузки могут испортить веса до того, как сработают шлюзы валидации (Lee, 2016). Поэтому большинство производственных систем разделяют прием и обучение: они потоково записывают данные в долговечный буфер, обучаясь на проверенных пакетах, и оставляют непрерывные онлайн-обновления для строго ограниченных доменов с низким риском.
Сравнение ETL и ELT
Архитектура конвейера определяет, когда и где вычислительные ресурсы применяются к сырым входящим записям. «Архитектурные парадигмы ETL и ELT» сопоставляет последовательности потоков традиционных конвейеров ETL14 и современных ELT15, показывая, где граница преобразования располагается относительно постоянного хранилища.
Архитектурные парадигмы ETL и ELT: смещение границы преобразования относительно хранилища. ETL обеспечивает валидацию схемы и очистку до загрузки, чтобы защитить качество хранилища, тогда как ELT загружает сырые данные непосредственно в масштабируемое хранилище, меняя вычисления и занимаемый объем хранилища на гибкие повторяемые переработки.
В системах машинного обучения паттерн ELT отделяет пропускную способность приема от нижестоящего конструирования признаков: сырые неизменяемые события сразу попадают в масштабируемое хранилище. Хранение сырых событий сохраняет неразобранные поля, которые позже могут оказаться предсказательными, и позволяет командам извлекать новые признаки из исторических наборов данных без повторного приема внешних потоков источников. Когда логика преобразования меняется или обнаруживаются ошибки, инженеры пересчитывают признаки, отправляя запросы к озеру-хранилищу, а не воспроизводя логи вышестоящих систем. Компромисс материальный: сохранение сырых данных высокой точности увеличивает занимаемый объем хранилища, преобразования приходится пересчитывать, если они используются несколькими моделями без промежуточной материализации, а хранение неочищенных сырых полезных нагрузок усложняет управление данными и соблюдение приватности. «Стоимость размещения преобразований» количественно оценивает, как эти компромиссы переводятся в эксплуатационные затраты на инфраструктуру.
Стоимость размещения преобразований
Задача: команда обрабатывает 10 ТБ сырых данных кликстрима ежедневно и должна вычислять пользовательские признаки сессий для 3 ML-моделей, каждой из которых нужны разные окна агрегации (1 час, 24 часа, 7 дней). Что дешевле: ETL или ELT?
Расчет:
- Подход ETL: преобразовать до загрузки. Вычислить все три окна агрегации в кластере Spark до загрузки в хранилище.
- вычисления Spark: 10 ТБ по $5 за ТБ = $50 в сутки
- хранение: 3 преобразованных набора по 2 ТБ каждый, всего 6 ТБ по $23 за ТБ в месяц = $138 в месяц
- стоимость изменения схемы: повторный запуск всего конвейера (около 4 часов) при каждом изменении
- Подход ELT: сначала загрузить сырые данные, затем преобразовать в хранилище.
- хранение: 10 ТБ сырых данных в сутки, хранение 30 дней = 300 ТБ по $23 за ТБ в месяц = $6 900 в месяц
- вычисления запросов: 3 модели, каждая со стоимостью запроса $5 в сутки за 30 дней, всего $450 в месяц
- стоимость изменения схемы: переписать SQL-запрос (около 30 минут) при каждом изменении
Системный вывод: ETL экономит $6 762 в месяц на хранении. После пересчета вычислений Spark в месячную стоимость ETL составляет $1 638 в месяц ($1 500 вычисления и $138 хранение), тогда как ELT составляет $7 350 в месяц ($6 900 хранение и $450 вычисления запросов). Это дает преимущество в облачных затратах $5 712 в месяц до учета инженерного труда. Однако ETL обходится в 8 раз дороже по инженерному времени при каждом изменении схемы. Точка безубыточности зависит от стоимости инженерного труда и частоты изменений схемы: стабильные схемы выигрывают от более низкой облачной стоимости ETL, а частые изменения определений признаков — от более быстрой итерации ELT.
Производственные ML-системы редко используют один паттерн исключительно. Структурированные данные со стабильными схемами часто проходят через ETL ради эффективности и соответствия требованиям, тогда как неструктурированные данные или быстро меняющиеся конвейеры признаков выигрывают от гибкости ELT. Для нагрузок глубокого обучения, обрабатывающих изображения, аудио или текст, предпочтение ELT проявляется еще глубже: шаг преобразования для неструктурированных данных часто выполняется внутри загрузчика данных фреймворка, а не в хранилище вовсе, применяя случайные обрезки, генерацию спектрограмм или токенизацию текста на лету во время каждой эпохи обучения. Материализация десяти аугментированных вариантов выше по потоку увеличила бы набор из 50 000 изображений до 500 000 хранимых копий, поэтому принцип ELT «загрузить сырые данные, преобразовать поздно» естественно распространяется на сам цикл обучения.
Выбор между предварительным преобразованием и преобразованием при загрузке зависит от повторного использования запросов: преобразованные данные, к которым обращаются сотни раз, окупают вычисления ETL, тогда как разовые исследовательские запросы выигрывают от эластичности хранилища ELT. Параметризованная модель стоимости в «Точка безубыточности архитектур ETL и ELT» оценивает этот порог безубыточности при разных объемах данных и частотах запросов.
Точка безубыточности архитектур ETL и ELT: параметризованное финансовое сравнение, которое вычисляет затраты на вычисления и хранение для разных стратегий преобразования.
# Сравнение стоимости ETL и ELT
daily_raw_tb = 10
s3_per_tb_mo = 23
spark_per_tb = 5
n_models = 3
retention_days = 30
query_cost_per = 5
# ETL
etl_spark_daily = daily_raw_tb * spark_per_tb
etl_datasets = 3
etl_tb_each = 2
etl_storage_tb = etl_datasets * etl_tb_each
etl_storage_mo = etl_storage_tb * s3_per_tb_mo
# ELT
elt_storage_tb = daily_raw_tb * retention_days
elt_storage_mo = elt_storage_tb * s3_per_tb_mo
elt_query_mo = n_models * query_cost_per * retention_days
# Экономия
storage_savings_mo = elt_storage_mo - etl_storage_mo
Разница в хранении в этом сценарии говорит в пользу ETL, но листинг не учитывает стоимость труда по изменению схемы. Расчет в примере «Стоимость размещения преобразований» оценивает эти эксплуатационные издержки напрямую.
Когда потоковые компоненты входят в архитектуры ETL и ELT, выбор инфраструктуры становится выбором режима отказа. Теорема CAP16 утверждает, что во время сетевого разделения распределенный сервис чтения и записи не может гарантировать одновременно линеаризуемую согласованность и доступность для каждого запроса. Apache Kafka17 обеспечивает порядок внутри каждого раздела; ее доступность и долговечность при сбоях зависят от настроек подтверждения, репликации и выбора лидера. Apache Pulsar отделяет брокеры без состояния от долговечного хранения сообщений в реплицированных журналах Apache BookKeeper. Его встроенная географическая репликация асинхронна, поэтому удаленный кластер может отставать во время сбоев или разделений, а не обеспечивать одновременно строгую согласованность и доступность между регионами. Amazon Kinesis раскрывает эксплуатационные компромиссы через емкость шардов, хранение и настройку производителей и потребителей, но в терминах CAP при сетевом разделении он по-прежнему не может гарантировать одновременно строгую согласованность и доступность.
Размещение вычисления признаков
Для конвейеров ML размещение вычисления признаков определяет, какой ресурс платит за признак: хранилище платит, когда признаки материализуются, а вычисления и задержка — когда признаки генерируются по запросу. Этот выбор существенно влияет на скорость обучения, стоимость хранения и воспроизводимость.
Один подход — предвычислить признаки во время ETL и сохранить результаты. Признаки, вычисленные конвейером, обеспечивают быструю итерацию обучения (признаки уже лежат на диске), воспроизводимость (одни и те же признаки используются последовательно) и меньшие вычислительные затраты на обучение. Недостатки — стоимость хранения (признаки хранятся отдельно от сырых данных), риск устаревания (предвычисленные признаки могут расходиться, когда меняется логика) и негибкость (любое изменение требует полного пересчета).
Альтернатива — вычислять признаки на лету во время обучения. Признаки, вычисляемые загрузчиком, гарантируют всегда актуальное вычисление (изменения логики сразу отражаются), гибкость экспериментов (признаки легко менять) и меньшее хранилище (хранятся только сырые данные). Цена — более медленное обучение (вычисление повторяется каждую эпоху), более высокие расходы на вычисления (GPU часто простаивают в ожидании признаков) и потенциальная недетерминированность при невнимательной реализации.
На практике преобладают гибридные паттерны. Дорогие и стабильные признаки (эмбеддинги пользователей, требующие матричной факторизации, исторические агрегаты за месяцы данных) предвычисляются и материализуются. Дешевые и чувствительные ко времени признаки, такие как сигналы свежести, контекст сессии и преобразования на основе времени, вычисляются в загрузчике данных.
Например, рекомендательная система предвычисляет стабильные признаки представления пользователя (дорогие, стабильные на протяжении дней), а признаки «время с последнего взаимодействия» (дешевые, чувствительные ко времени) вычисляет в загрузчике данных. Это балансирует затраты на хранение, время вычислений и свежесть признаков в зависимости от специфики каждого признака.
Стратегии интеграции и пример KWS
Независимо от того, используются ли подходы ETL или ELT, интеграция разнородных источников данных остается центральной задачей приема. Данные могут происходить из баз данных, API, файловых систем и устройств IoT, и у каждого свой формат (реляционные строки, документы JavaScript Object Notation (JSON)18, двоичные потоки), протокол доступа и частота обновления. Системный принцип — стандартизировать на границе приема: нормализовать форматы, проверять схемы и предоставлять последующей обработке единый интерфейс независимо от источника. Такая стандартизация границы отделяет сложность разнообразия источников от сложности конструирования признаков, позволяя каждой из них развиваться независимо.
Производственные KWS-системы часто выполняют постоянное обнаружение слов пробуждения на устройстве. Серверные потоковые и пакетные конвейеры могут принимать активированные запросы, согласованные диагностические данные, краудсорсинговые записи, синтетические данные и проверенные взаимодействия для обслуживания и обучения. Пакетная обработка обычно следует паттерну ETL: аудио нормализуется, фильтруется от шума и разбивается на сегменты одинаковой длительности до сохранения в форматах, оптимизированных для обучения.
Обработка ошибок в голосовых системах требует особого внимания. Очереди мертвых писем хранят неудачные попытки распознавания для последующего анализа, выявляя граничные случаи, которые нужно покрыть в будущих итерациях модели. Каждый входящий аудиообразец должен пройти проверку качества (отношение сигнала к шуму, частоту дискретизации, границы длительности, близость диктора), прежде чем попасть в конвейер обработки. Недопустимые образцы направляются в очереди анализа, а не отбрасываются, поскольку эти сбои часто указывают на акустические условия, недостаточно представленные в обучающих данных. Допустимые образцы поступают в обнаружение в реальном времени и одновременно журналируются для возможного включения в будущие обучающие данные.
Эта архитектура приема завершает граничный слой, через который внешние данные входят в конвейер. Принятые данные, как бы надежно они ни доставлялись, остаются сырыми: аудио приходит с несогласованными частотами дискретизации, тексты имеют разные кодировки, а числовые признаки охватывают несовместимые масштабы. Последующее обучение требует преобразовать эти разнородные записи в единое представление, гарантируя, что идентичные преобразования выполняются как при обучении, так и при обслуживании.
Систематическая обработка данных
Прием разбирает сырые потоки на корректно сформированные записи, а обработка данных выполняет проход оптимизации и понижения уровня компилятора. Как оптимизации компилятора должны сохранять семантику программы при улучшении производительности выполнения, так и преобразования данных должны сохранять лежащий в основе сигнал, одновременно форматируя тензоры для численной устойчивости. Определяющее ограничение — согласованность: преобразования, общие для обучения и обслуживания, должны сохранять одинаковую семантику, повторяемые операции должны оставаться идемпотентными при повторах, а преобразования данных должны масштабироваться, не разрывая родословную.
Скрытые риски технического долга в производственных системах ML — зависимости от данных, изменения во внешнем мире, долг конфигурации и отсутствие мониторинга — выделены в работе (Sculley et al., 2015). Несогласованность обучения и обслуживания — одна из конкретных форм этого риска. Рассмотрим нормализацию сумм транзакций при обучении: удаление символов валюты и приведение строк к числам с плавающей запятой, но без идентичной предобработки при обслуживании. Это расхождение вносит перекос обучения и обслуживания, ухудшая точность модели ниже по потоку. В конвейере KWS требование конкретно: преобразования должны стандартизировать данные при разных условиях записи (разные микрофоны, уровни фонового шума, частоты дискретизации), сохраняя акустические характеристики, которые отличают слова пробуждения от фоновой речи, — и это извлечение признаков должно оставаться побитово согласованным между путями обучения и встроенного обслуживания.
Согласованность обучения и обслуживания
Задача согласованности обучения и обслуживания выходит за рамки применения одного и того же кода: параметры, вычисленные по обучающим данным (константы нормализации, словари кодирования, отображения словарей), должны сохраняться и переиспользоваться при обслуживании. Это требование и есть императив согласованности.
Императив согласованности
Императив согласованности требует эквивалентного поведения преобразований и состояния в средах обучения и обслуживания.
- Значение: KL-дивергенция между распределениями признаков, порожденными преобразованием обслуживания (текущим) и обучающим преобразованием (базовым), где обозначает отображение признаков, которое переводит сырой вход в вектор признаков , может сигнализировать о рассогласовании. Ее связь со снижением производительности зависит от модели, задачи и сдвинувшихся признаков и должна проверяться по свидетельствам результатов.
- Отличие: в отличие от качества данных, которое касается чистоты отдельной записи, императив согласованности касается выравнивания всего конвейера преобразования.
- Типичная ошибка: частое заблуждение состоит в том, что согласованность «исправляется» общим кодом. На деле это проблема синхронизации состояния: параметры, вычисленные по обучающим данным (например, средние и стандартные отклонения), должны сохраняться и переиспользоваться при обслуживании.
Нарушение императива согласованности незаметно снижает точность в эксплуатации, потому что модели не выбрасывают исключений времени выполнения при получении входов вне распределения; они возвращают уверенные, но ошибочные предсказания. Предотвращение незаметного перекоса требует проектировать конвейеры преобразования, начиная с ограничений развертывания обслуживания и двигаясь назад.
Защитная обработка
Перекос обучения и обслуживания — частая причина незаметной деградации в эксплуатации.
- Определение: можете ли вы определить перекос обучения и обслуживания через пути обработки обучения и обработки живых запросов?
- Механизм: можете ли вы объяснить, почему независимое пересчитывание нормализации при обучении и обслуживании может сделать живые данные незнакомыми для модели?
- Инвариант: можете ли вы объяснить, как общая логика, синхронизированное состояние и проверки паритета снижают перекос?
Очистка данных — первое место, где согласованность может быть либо обеспечена, либо нарушена. Сырые данные часто содержат пропущенные значения, дубликаты или выбросы, которые ухудшают производительность модели. Ключевая мысль в том, что операции очистки должны быть детерминированными и воспроизводимыми: при одинаковом входе они должны давать одинаковый выход независимо от среды. Это требование определяет, какие методы очистки безопасны для использования в производстве.
Очистка данных включает дедупликацию, обработку пропущенных значений и нормализацию строк. Например, база клиентов может привести «John Doe», «john doe» и «DOE, John» к единому формату отображения. Нормализация сама по себе не доказывает, что записи относятся к одному и тому же человеку; разрешение идентичности требует стабильного идентификатора или отдельно проверенного правила сопоставления. И форматирование, и правила сопоставления должны быть зафиксированы в коде, который выполняется одинаково при обучении и обслуживании.
Обработка выбросов обнажает фундаментальное операционное расхождение между пакетным обучением и онлайн-обслуживанием. При обучении поврежденные записи или экстремальные сбои датчиков можно отбросить, чтобы предотвратить взрыв градиентов. При обслуживании же модель не может отбросить входящий запрос на вывод, не нарушив свой контракт по задержке и доступности. Поэтому вместо отбрасывания записей конвейеры обслуживания должны ограничивать признаки интервалами (например, ), используя параметры, оцененные по обучающему разбиению. Более сложные фильтры выбросов, такие как пространственная кластеризация на основе плотности или многомерные изолирующие леса, создают серьезные риски согласованности: если их вычислять по динамическим мини-батчам обслуживания, классификация запроса зависит от того, какие другие запросы случайно пришли в то же окно батча, что нарушает изоляцию запросов.
Оценка качества дополняет очистку данных, систематически проверяя надежность и полезность данных по нескольким измерениям: точность, полноту, согласованность и своевременность. В производственных системах качество данных деградирует тонкими способами, которые базовые метрики пропускают: поля, которые никогда не содержали пустых значений, внезапно показывают разреженные паттерны, числовые распределения уходят от обучающих диапазонов или появляются категориальные значения, которых не было при разработке модели.
Чтобы выявлять такие тонкие паттерны деградации, мониторинг качества в производстве требует метрик, выходящих за рамки простого подсчета пропущенных значений («Качество через валидацию и мониторинг»). Ключевые индикаторы включают паттерны пустых значений по признакам (внезапный рост указывает на сбои выше по потоку), аномалии числа записей (рост в 10 раз часто указывает на дублирование данных или ошибки конвейера), нарушения диапазонов значений (цены становятся отрицательными, возраст выходит за реалистичные пределы) и частоту сбоев соединения между источниками данных. Обнаружение статистического дрейфа19 становится необходимым: мониторинг средних, дисперсий и квантилей признаков во времени позволяет поймать постепенную деградацию до того, как она повлияет на производительность модели. Например, в рекомендательной системе электронной коммерции средняя длительность пользовательской сессии может постепенно вырасти с восьми до 12 минут за полгода из-за улучшения дизайна сайта, но внезапное падение до трех минут указывает на ошибку сбора данных.
Валидация качества должна обеспечивать идентичные схемы и предикаты проверки в конвейерах обучения и обслуживания. Пока среды обучения могут позволить себе вычислительно интенсивные проходы профилирования по всем наборам данных, пути обслуживания должны выполнять облегченные проверки утверждений (например, валидацию типов, ограничение диапазонов и наличие обязательных полей) в рамках бюджета задержки запроса. Несовпадения между валидацией на этапе обучения и проверками на этапе обслуживания позволяют испорченным входам незаметно дойти до модели.
Методы преобразования переводят данные из сырого вида в представление, готовое для модели, но системный риск заключается в параметрах, которые эти преобразования выучивают. Типичные задачи преобразования включают нормализацию и стандартизацию, которые приводят числовые признаки к общему диапазону или распределению. Например, площадь и количество комнат могут сильно различаться по масштабу; нормализация приводит их к сопоставимым числовым диапазонам, хотя их влияние по-прежнему зависит от модели и выученных параметров (Bishop, 2006). Согласованность обучения и обслуживания требует, чтобы параметры нормализации, вычисленные по обучающим данным, хранились и применялись при обслуживании идентично. Эксплуатационно эти параметры должны сохраняться вместе с самой моделью и загружаться при инициализации обслуживания.
Помимо численного масштабирования, преобразования кодируют дискретные входы через категориальное кодирование, извлекают циклические представления из временных меток и строят производные пространственные признаки. Категориальные кодировки должны обрабатывать как категории, присутствовавшие при обучении, так и незнакомые категории, встречающиеся при обслуживании. Надежный конвейер строит индекс словаря исключительно по обучающему разбиению, сохраняет этот словарь вместе с артефактом модели и отображает неизвестные токены времени выполнения на явный индекс «вне словаря» (<UNK>). Пропуск этого отображения приводит к несоответствиям размерностей времени выполнения или незаметным коллизиям индексов при онлайн-выводе.
Модель прогноза состояния здоровья может получать сырые GPS-координаты для каждого визита пациента, но сами по себе широта и долгота не отражают непосредственно доступ к медицинской помощи. Инженер может вывести расстояние до ближайшей больницы как предполагаемый прокси географической доступности. Предсказывает ли этот признак исходы, улучшает ли модель или вносит чувствительные прокси местоположения и социально-экономического статуса, должно устанавливаться через данные и экспертную проверку предметной области, а не предполагаться из одного лишь преобразования.
Конструирование признаков для предметной области синтезирует сырые входы в представления, которые напрямую раскрывают информативные сигналы алгоритму обучения (Kuhn and Johnson, 2013). Вместо того чтобы требовать от модели открывать нелинейные комбинации с нуля, инженерные признаки кодируют структурные связи предметной области. Например, в рекомендательной системе розничной торговли конвейеры вычисляют давность, частоту и денежную стоимость (recency, frequency, monetary, RFM) транзакций клиента (известный как RFM-анализ), чтобы свести траектории покупок к плотным поведенческим векторам.
Конструирование признаков способно сильно влиять на результат, потому что оно меняет то, какой сигнал видит модель. В некоторых нагрузках хорошо спроектированные признаки улучшают производительность больше, чем очередной раунд выбора алгоритма или настройки гиперпараметров. Это влияние нужно уравновешивать требованиями согласованности производственных систем. Каждый инженерный признак, общий для обучения и обслуживания, должен вести себя одинаково в обеих средах. Поэтому производственные системы реализуют логику конструирования признаков в общих библиотеках или скоординированных конвейерах, а не переписывают ее независимо. Многие организации используют хранилища признаков,20 описанные в разделе «Хранилища признаков», чтобы уменьшить несогласованность между средами.
В конвейере KWS аудиозаписи, собранные у краудсорсинговых участников, синтетических генераторов речи и полевых акустических записей, поступают с сильной акустической изменчивостью. Сырое аудио содержит несовершенства, которые ожидались еще при постановке задачи: окружающий шум, от тихих спален до промышленных цехов, ограничение амплитуды из-за насыщенных аналого-цифровых преобразователей, расхождения усиления между аппаратурой микрофонов и несогласованные частоты дискретизации. Стандартизация этих входов при сохранении фонемных переходных процессов, которые отличают слова пробуждения от фонового шума, необходима для достижения целевой точности 98 процентов.
Оценка качества для KWS расширяет общие принципы аудиоспецифичными метриками. Помимо проверки пустых значений или соответствия схеме, конвейер валидации отслеживает уровни фонового шума (отношение сигнала к шуму выше 20 дБ), оценки четкости звука (анализ частотного спектра) и постоянство темпа речи (длительность слова пробуждения в пределах от 500 до 800 мс). Конвейер помечает записи, шум, длительность, ограничение или искажение которых выходят за рамки правил приемки сценария. Эти проверки не доказывают полезность образца, но снижают вероятность того, что известные дефекты дойдут до разработки модели. Как показывают нарастающие каскады ошибок в «Каскады качества данных», фильтрация испорченных записей у источника предотвращает размножение ранних дефектов по нижестоящим артефактам.
Преобразование аудиоданных для KWS включает перевод сырых форм волны в форматы, пригодные для ML-моделей, при сохранении согласованности обучения и обслуживания. Сырые аудиоформы волны (последовательности значений амплитуды, снимаемых тысячи раз в секунду) имеют высокую размерность. Конвейеры KWS часто преобразуют их в компактные представления, которые подчеркивают частоты и временные паттерны, наиболее значимые для речи. «Аудиопредставления признаков» сравнивает три иллюстративных представления, используемых в этом конвейере: форму волны, ее время-частотную спектрограмму и компактное приближение MFCC. Эти стандартизированные представления признаков, обычно мел-частотные кепстральные коэффициенты (MFCC)21 или спектрограммы,22 подчеркивают характеристики, значимые для речи, и уменьшают шум и изменчивость между разными условиями записи. Тогда как сырое кратковременное преобразование Фурье (STFT) дает сотни линейных частотных бинов на временное окно, мел-частотный анализ агрегирует эти бины через нелинейные треугольные банки фильтров, согласованные с человеческим слуховым восприятием, а затем дискретное косинусное преобразование сжимает сигнал до всего 13–40 декоррелированных коэффициентов. Для периферийных устройств этот шаг сокращает объем данных более чем на порядок, позволяя кадрам аудиопризнаков умещаться в жесткие бюджеты SRAM порядка десятков килобайт во встроенных сопроцессорах.
Аудиопредставления признаков: три иллюстративных вида показывают форму аудиоволны, ее время-частотную спектрограмму и компактное приближение MFCC. Спектрограмма кодирует время, частоту и мощность сигнала; нижняя панель представляет меньший набор коэффициентов во времени.
Идемпотентные преобразования
Надежность добавляет безопасность повторов к этим основаниям качества. Если качество отвечает за то, что производят преобразования, то надежность управляет тем, насколько безопасно их можно повторять. Идемпотентность23 означает, что многократное применение операции имеет тот же эффект, что и однократное. Это свойство необходимо для производственных ML-систем, где обработка может повторяться после сбоев, данные могут переобрабатываться для исправления ошибок или одни и те же данные могут проходить через несколько путей обработки. Детерминированность — связанное, но отдельное требование: одинаковые входы и зафиксированное состояние должны давать одинаковые выходы.
В терминах конечных автоматов операция идемпотентна, если . В системах хранения установка регистра в абсолютное значение () идемпотентна, тогда как увеличение счетчика () или добавление строки в журнал без ключа — нет: каждое повторное выполнение меняет состояние системы. Распределенные конвейеры данных работают на вытесняемых рабочих узлах и ненадежных сетях, где тайм-ауты и падения узлов запускают автоматические повторы. Если стадия добавляет преобразованные записи в целевую таблицу, рабочий процесс, упавший после записи, но до подтверждения завершения, при повторе выполнится снова и создаст дубликаты записей. Идемпотентный конвейер обеспечивает семантику записи, например детерминированные вставки-обновления по ключу (вставить, если нет, перезаписать, если есть) или атомарную замену каталогов, гарантируя, что повторные попытки задания сходятся к одному и тому же итоговому набору данных.
Управление частичными сбоями конвейера требует явного разграничения состояния между стадиями. Отделение стадий постоянными промежуточными контрольными точками гарантирует, что каждая фаза может повторяться независимо, без повторного выполнения вышестоящей работы. Для долгих заданий, обрабатывающих корпуса масштаба терабайт, контрольные точки разделов состояния (например, завершенных файловых шардов или смещений потребителей потока) ограничивают задержку повторов: сбой задачи после пяти часов выполнения требует переиграть только незафиксированный шард, а не перезапускать все пятичасовое задание. Механизм контрольных точек должен фиксировать выходные разделы и маркеры состояния в одной атомарной транзакции, не давая записям потеряться или обработаться дважды.
Детерминированные преобразования — это те, которые всегда дают один и тот же выход для одного и того же входа, без зависимости от внешних факторов вроде времени, случайных чисел или изменяемого глобального состояния. Преобразования, зависящие от текущего времени (например, вычисление «дней с момента события» относительно текущей даты), нарушают детерминизм, потому что переобработка исторических данных даст другие результаты. Решение — явно фиксировать временные опорные точки: вместо «дней с момента события» вычислять «дней от события до опорной даты», где опорная дата фиксирована и сохранена. Случайные операции должны использовать генераторы случайных чисел с заданным зерном (seed), которое детерминированно выводится из входных данных, обеспечивая воспроизводимость.
Надежность в конвейере KWS требует воспроизводимого извлечения признаков. Предобработка аудио должна быть детерминированной: для одного и того же сырого аудиофайла всегда вычисляются одни и те же MFCC-признаки, независимо от того, когда происходит обработка и какой сервер ее выполняет. Это позволяет отлаживать поведение модели (всегда можно воссоздать точные признаки для проблемного примера), переобрабатывать данные после исправления ошибок (получая согласованные результаты) и выполнять распределенную обработку (разные рабочие процессы дают одинаковые признаки из одного входа). Код обработки фиксирует все параметры (размер окна быстрого преобразования Фурье (FFT), шаг сдвига окна, число коэффициентов MFCC) в конфигурации, версионируемой вместе с кодом, что обеспечивает воспроизводимость во времени и в разных средах выполнения. Даже при тщательном проектировании производственные системы должны внедрять мониторинг во время выполнения, чтобы обнаруживать перекос, если он возникнет. Глава «MLOps» рассматривает операционное сравнение и мониторинг распределений в масштабе.
Распределенная обработка
Масштаб становится следующим ограничением, когда качество и надежность уже обеспечены. Качество гарантирует, что преобразования дают корректные выходы; надежность гарантирует, что они дают согласованные выходы. Ни одно из этих свойств не имеет значения, если обработка не успевает за объемом данных или за сроком. По мере роста наборов данных и параллельности экспериментов обработка данных может перерасти одну машину, даже если сырые байты все еще помещаются на локальном хранилище. Техники очистки, которые работают на гигабайтах в памяти, должны тогда стать учитывающими разбиение, внеядерными (out-of-core) или распределенными, не меняя своей семантики.
Эти вызовы проявляются, когда оценка качества должна не отставать от поступающих данных, когда конструирование признаков требует вычисления статистик по всему набору данных до преобразования отдельных записей и когда конвейеры преобразования создают узкие места при огромных объемах. Обработка должна масштабироваться от разработки (гигабайты на ноутбуках) до производства (терабайты в кластерах), сохраняя согласованное поведение.
Обработка на одной машине достаточна для удивительно больших нагрузок при аккуратной инженерии. Современные серверы с 256 ГБ оперативной памяти могут обрабатывать наборы данных объемом в несколько терабайт с помощью внеядерной обработки, которая передает данные с диска потоком. Библиотеки вроде Dask или Vaex предоставляют API в стиле pandas, которые автоматически распараллеливают вычисления по нескольким ядрам и обрабатывают их потоком. Прежде чем инвестировать в инфраструктуру распределенной обработки, команды должны исчерпать оптимизацию на одной машине: использовать эффективные форматы данных (Parquet24 вместо CSV), минимизировать выделение памяти, применять векторные операции и использовать многоядерный параллелизм. Эксплуатационная простота обработки на одной машине (без сетевой координации, без частичных сбоев, простая отладка) делает ее предпочтительной, когда производительности достаточно.
Когда наборы данных превышают пропускную способность или ограничения хранилища одного узла, обработка должна масштабироваться на распределенные кластеры. Разбиение данных между несколькими вычислительными ресурсами вводит проблемы распределенной координации. Распределенная координация ограничена временем кругового обхода сети: локальные операции завершаются за микросекунды, тогда как сетевая координация требует миллисекунд, что создает разницу в задержке в 1 000 раз. Это ограничение объясняет, почему операции, требующие глобальной координации (например, вычисление статистик нормализации по 100 машинам), создают узкие места. Каждое разбиение быстро вычисляет локальные статистики, но для их объединения нужна информация от всех разбиений.
Локальность данных при таком масштабе становится критичной. При пиковой пропускной способности 10 ГБ/с передача одного терабайта обучающих данных по сети занимает порядка 100 секунд; чтение того же объема с SSD на 5 ГБ/с занимает порядка 200 секунд. Это одного порядка величины, что подталкивает проектирование ML-систем к архитектурам «вычисления следуют за данными»25. Когда узлы обработки обращаются к локальным данным со скоростью оперативной памяти (50–200 ГБ/с), но должны координироваться по сетям с пропускной способностью 1–10 ГБ/с, несоответствие полосы пропускания создает серьезные узкие места. География усиливает эти проблемы: координация между дата-центрами должна учитывать задержку сети (50–200 мс между регионами), частичные сбои и регуляторные ограничения, не позволяющие данным пересекать границы. Понимание того, какие операции легко распараллеливаются, а какие требуют дорогостоящей координации, определяет архитектуру системы и ее производительность. Эта накладная нагрузка составляет налог на координацию, который ограничивает распределенную обработку данных. Размер этого налога, а также то, что быстрее — централизовать или агрегировать, — зависит от соотношения между сетевым круговым обходом и временем локальных вычислений; это выводится в расчете на салфетке в примере «Налог на координацию».
Локальное агрегирование выигрывает у сбора всех данных, когда доминирует сетевая задержка.
Налог на координацию
Задача: среднее значение для нормализации должно быть вычислено по 1 ТБ признаков, распределенных по 100 узлам. Что быстрее: (A) собрать все данные на один узел и вычислить централизованно или (B) вычислить локальные средние и агрегировать их?
Вариант A (централизованный):
- передача 1 ТБ по сети 10 ГБ/с: 100 секунд
- вычисление среднего на одном узле: примерно от 5 до 20 секунд при пропускной способности оперативной памяти
- итого: примерно от 105 до 120 секунд
Вариант B (распределенный):
- каждый узел вычисляет локальное среднее: примерно от 0,05 до 0,2 секунды (10 ГБ при скорости оперативной памяти)
- отправка 100 частичных средних (по 8 байт каждое):
- агрегирование: пренебрежимо мало
- итого: примерно от 0,05 до 0,2 секунды (в сотни и несколько тысяч раз быстрее)
Системный вывод: алгебраически разложимые редукции часто могут использовать частичное агрегирование рядом с данными; например, распределенное среднее переносит частичные суммы и количества. Соединения и декартовы произведения могут требовать перетасовки, хотя партиционирование и совместное размещение могут снизить эту стоимость. Проектирование конвейера должно минимизировать ненужное перемещение, перенося подходящие вычисления к данным — принцип «вычисления следуют за данными», лежащий в основе таких систем, как MapReduce (Dean and Ghemawat, 2004), Spark (Zaharia et al., 2010) и современных фреймворков ML.
Параллелизация приема данных между распределенными рабочими узлами дает убывающую отдачу по пропускной способности всякий раз, когда узкие места, которые нельзя разбить на части, — например, последовательная декомпрессия или захват центральной блокировки базы данных, — ограничивают параллелизм. Закон Амдала26 формализует этот предел масштабирования в следующем уравнении:
где обозначает долю времени выполнения, затрачиваемую на принципиально последовательные стадии, — распараллеливаемую долю (), а — число активных рабочих процессов. Даже когда 90 процентов конвейера извлечения признаков распараллеливаются на сотнях узлов (), максимальное теоретическое ускорение не может превышать , что показывает, почему устранение последовательных узких мест ввода-вывода важнее добавления вычислительных узлов.
Выбор фреймворка следует тому же вопросу координации, что и анализ Амдала: он зависит от того, какие части преобразования могут выполняться независимо, а какие требуют общего состояния или порядка. Apache Spark распараллеливает преобразования по кластерам машин, автоматически обрабатывая разбиение данных, планирование задач и отказоустойчивость. Beam предоставляет единый API для пакетной и потоковой обработки, позволяя одной и той же логике преобразования работать на нескольких движках выполнения (Spark, Flink, Dataflow). API tf.data в TensorFlow оптимизирует конвейеры загрузки данных для обучения ML, поддерживая распределенное чтение, предвыборку и преобразование. Выбор зависит от того, является ли обработка пакетной или потоковой, как распараллеливаются преобразования и какая среда выполнения доступна.
Компромисс размещения вычисления признаков, введенный в разделе «Размещение вычисления признаков», приобретает дополнительное значение в масштабе. Когда распределенная обработка повышает пропускную способность, стоимость пересчета признаков на сотнях рабочих процессов за эпоху нужно сопоставлять со стоимостью хранения материализованных признаков один раз. На масштабе терабайт даже небольшие вычислительные затраты на пример умножаются в существенные накладные расходы, что объясняет, почему производственные системы выбирают гибридные паттерны: предвычисляют дорогие, стабильные признаки, а дешевые, чувствительные ко времени признаки вычисляют на лету.
Масштабируемость в конвейере KWS проявляется на нескольких стадиях. Разработка использует обработку на одной машине на выборочных наборах данных для быстрой итерации. Обучение в масштабе может потребовать распределенной обработки, когда набор данных (23,4 млн примеров) превышает практическую емкость одной машины или когда эксперименты идут параллельно. Извлечение признаков по отдельным файлам — задача, легко распараллеливаемая (embarrassingly parallel), но сквозное ускорение ограничено пропускной способностью общего хранилища, операциями с метаданными, планированием и конкуренцией за запись результатов. Производственное развертывание добавляет более строгий бюджет состояния предобработки 16 КБ наряду с ограничением размера модели 64 КБ, что требует тщательной оптимизации занимаемого объема, чтобы уместить обработку в возможности устройства.
Родословная преобразований
Управление завершает четырехопорный взгляд на обработку данных, обеспечивая подотчетность и воспроизводимость. Опора управления требует отслеживать, какие преобразования применялись, когда они выполнялись, какая версия кода обработки работала и какие параметры использовались. Эта родословная преобразований27 поддерживает воспроизводимость, отладку, аудируемость и итеративное улучшение, когда обнаруживаются ошибки преобразования. Она может служить свидетельством для документации или процедур соответствия требованиям, но сама по себе родословная не объясняет решение модели и не устанавливает соответствие регуляторным требованиям.
Версионирование преобразований фиксирует, какая версия кода обработки создала каждый набор данных. Когда логика преобразования меняется (исправляется ошибка, добавляются признаки или улучшается качество), номер версии увеличивается. Наборы данных помечаются версией преобразования, которая их создала, что позволяет найти все данные, требующие переобработки, когда обнаружены ошибки. Это версионирование выходит за рамки версий кода и захватывает всю среду обработки: версии библиотек (разные версии NumPy могут давать слегка различающиеся численные результаты), конфигурации среды выполнения (переменные окружения, влияющие на поведение) и инфраструктуру выполнения (архитектура CPU, влияющая на точность с плавающей запятой).
Отслеживание параметров сохраняет конкретные значения, использованные при преобразовании. Для нормализации это означает хранение среднего и стандартного отклонения, вычисленных по обучающим данным. Для категориального кодирования — хранение словаря (набора всех наблюдаемых категорий). Для конструирования признаков — хранение любых констант, порогов или параметров, использованных при вычислении признаков. Эти параметры обычно сериализуются вместе с артефактами модели, гарантируя, что обслуживание использует те же параметры, что и обучение. Современные ML-фреймворки, такие как TensorFlow и PyTorch, предоставляют механизмы для упаковки параметров предобработки вместе с моделями, упрощая развертывание и обеспечивая согласованность.
Родословная обработки для воспроизводимости отслеживает полную историю преобразований от сырых данных до итоговых признаков. Она включает, какие файлы сырых данных читались, какие преобразования применялись в каком порядке, какие параметры использовались и когда происходила обработка. Системы родословной, такие как Apache Atlas, Amundsen или коммерческие решения, инструментируют конвейеры для автоматического захвата этого потока. Когда предсказания модели оказываются неверными, инженеры могут проследить родословную назад и определить обучающие данные, которые повлияли на поведение, оценки качества, привязанные к этим данным, применявшиеся преобразования и то, можно ли воссоздать точный сценарий для расследования.
Фиксация точной версии кода связывает результаты обработки непосредственно с состоянием репозитория, которое их создало. Когда код обработки хранится в системе контроля версий (Git), каждый набор данных должен записывать хеш коммита кода, который его создал. Это позволяет воссоздать точную среду обработки: извлечь конкретную версию кода, установить зависимости, перечисленные для этой версии, и запустить обработку с идентичными параметрами. Контейнерные технологии, такие как Docker, упрощают это, фиксируя всю среду обработки (код, зависимости, системные библиотеки) в неизменяемом образе, который можно перезапустить через месяцы или годы с идентичными результатами.
Опора управления в конвейере KWS отслеживает параметры обработки аудио, которые критически влияют на поведение модели. Когда аудио нормализуется до стандартной громкости, опорный уровень громкости сохраняется. Когда БПФ (быстрое преобразование Фурье) переводит аудио в частотную область, фиксируются размер окна, шаг сдвига окна и оконная функция (например, Хэмминга или Ханна). Когда вычисляются MFCC, фиксируются число коэффициентов, частотный диапазон и параметры банка мел-фильтров. Такое всестороннее отслеживание параметров обеспечивает несколько критически важных возможностей: точное воспроизведение обучающих данных при отладке сбоев модели, проверку того, что обслуживание использует ту же предобработку, что и обучение, и систематическое изучение того, как выбор предобработки влияет на точность модели. Без такой инфраструктуры управления команды прибегают к ручной документации, которая неизбежно устаревает или становится неверной, и это приводит к незаметному перекосу обучения и обслуживания, снижающему производительность в эксплуатации.
Чистые, нормализованные, готовые к признакам данные остаются инертными без надзорного сигнала. Эта граница важна на практике, потому что преобразование может быть идеально воспроизводимым и все же присоединять ошибочную цель, а детерминированная предобработка не может компенсировать испорченную эталонную истину. Обучение с учителем требует присвоения целевых значений — объявления того, какие аудиосегменты содержат слова пробуждения, а какие фиксируют фоновый шум, — и это вносит субъективное человеческое суждение и вероятностные эвристики в то, что было детерминированным конвейером.
Разметка данных
Конвейеры обработки в разделе «Систематическая обработка данных» преобразуют сырые данные в структурированные признаки, но обучение с учителем по-прежнему требует меток, которые говорят модели, какие паттерны соответствуют каждой цели. В конвейере KWS стадии приема и обработки дают миллионы чистых, стандартизированных аудиоспектрограмм, но обучению нужны эталонные аннотации, указывающие, какие сегменты содержат слово пробуждения, а какие представляют фоновый шум. Это объявление и есть эталонная истина (ground truth),28 и его массовое производство часто оказывается самой зависимой от человека и подверженной ошибкам стадией конвейера.
В отличие от автоматических преобразований, которые можно распараллелить по машинам, разметка вносит в конвейер человеческое суждение, создавая недетерминированную задержку и стохастические режимы ошибок. Краудсорсинговый разметчик может принять прошептанное «Alexa» за фоновый шум. Опытный радиолог может не согласиться с коллегой относительно пограничного диагноза. Такие расхождения могут отражать подлинную неоднозначность, неясные инструкции, ошибку разметчика или различия в квалификации; система разметки должна различать эти причины и управлять ими, а не считать каждое расхождение неустранимым. Поэтому инфраструктура разметки должна балансировать пропускную способность, проверку качества, стоимость и происхождение данных.
Типы меток и требования к системе
Архитектура системы, занимаемый объем хранения и пропускная способность загрузчика напрямую зависят от гранулярности меток. В системе компьютерного зрения, которая отслеживает транспортные средства, пешеходов и дорожные знаки по видеопотоку, каждое представление цели накладывает свои ограничения на хранение, вычисления и сериализацию.
Метки классификации — самая простая форма: каждому входу присваивается дискретный индекс класса (или многометочная двоичная маска). Требования к хранению скромны — обычно целое фиксированной ширины (например, индекс uint16 или int32) на изображение, — но паттерны доступа различаются между обучением и оценкой: конвейеры обучения перемешивают и выбирают случайно, тогда как конвейеры валидации последовательно проходят корпус, что порождает разные стратегии индексации и локальности кэша.
Ограничивающие рамки выходят за рамки классификации, локализуя объекты внутри каждого кадра. Каждая рамка хранит четыре координаты (например, или координаты центра с шириной и высотой) вместе с идентификатором класса. Поскольку сцены содержат переменное число объектов, хранение меток переходит от записей фиксированной ширины к структурам тензоров переменной длины, требуя динамического дополнения или обработки батчей неравной длины в загрузчике данных. Более того, позиционирование ограничивающих рамок занимает в 10–20 раз больше времени, чем одиночная классификация, напрямую замедляя пропускную способность разметки и раздувая ее стоимость.
Более мелкая гранулярность разметки многократно умножает масштаб хранения и обработки.
Карты сегментации назначают идентификатор класса каждому пикселю, порождая плотные двумерные матрицы меток (). В автономном вождении и мониторинге дорожного движения это означает прослеживание неровных границ проезжей части, транспортных средств и пешеходов. Эти плотные аннотации многократно увеличивают объем хранения и пропускную способность приема. Маска сегментации для изображения требует около 2,1 млн меток (по одной на пиксель), тогда как для сравнения: этого же изображения может хватить примерно 10 ограничивающих рамок или одной метки классификации. Если каждая рамка хранит 4 координаты, это примерно в 51 840 раз больше скалярных записей меток, чем у 10 рамок, прежде чем учитывать кодирование каждого значения; а часы, необходимые для ручной сегментации каждого изображения, делают такой подход пригодным только тогда, когда критична точность на уровне пикселя.
«Модальности разметки данных» сопоставляет пять модальностей аннотирования, и выбор зависит от входа, задачи и доступного бюджета аннотирования. Классификация может размечать всю сцену, тогда как ограничивающие рамки и карты сегментации локализуют объекты или области. Производственные наборы данных могут сочетать модальности: один кадр камеры может нести метку сцены, рамки препятствий и маски области пути, причем каждый тип метки служит отдельной последующей задаче.
Модальности разметки данных: четыре строки показывают метки классификации, ограничивающих рамок, сегментации и подписей для одного изображения; пятая строка показывает метку-расшифровку для аудиовхода. Подходящее представление разметки зависит от модальности входа и задачи.
Помимо этих геометрических меток, производственные системы также должны управлять богатыми метаданными, необходимыми для контроля качества и отладки. Набор данных Common Voice (Ardila et al., 2020) служит примером этого в распознавании речи: отслеживаются демографические данные дикторов для справедливости, метрики качества записи для фильтрации и информация о языке для поддержки многоязычности. Если модель обнаружения объектов отказывает в дождливых условиях, метаданные о погоде, захваченные во время сбора, указывают на пробел в покрытии. Это требование к метаданным показывает, как выбор типа метки каскадно влияет на весь проект системы: инфраструктура должна оптимизировать хранение под выбранный формат, реализовать подходящие паттерны выборки и отслеживать, какие версии модели использовали какие версии меток, чтобы соотносить улучшения качества с приростом производительности.
Точность меток и консенсус
Качество меток требует ограничить шум меток, несмотря на присущую субъективность и неоднозначность датчиков в больших наборах данных. Даже при четких инструкциях и тщательно спроектированной системе ненулевая доля меток неизбежно будет испорчена (Northcutt et al., 2021; Thyagarajan et al., 2022). Задача состоит не в полном устранении ошибок разметки (что невозможно), а в систематическом измерении межаннотаторского согласия и управлении частотой ошибок, чтобы удерживать их в границах, которые не ухудшают производительность модели.
Сбои разметки возникают из двух различных источников, требующих разных инженерных ответов. «Повсеместные ошибки разметки» показывает конкретные примеры обоих режимов отказа. Одни примеры отражают деградированные или неоднозначные входы, где правильную метку трудно вывести из одних лишь данных; другие визуально ясны, но для правильной разметки требуют знаний предметной области, семантики конкретного набора данных или экспертного суждения. Эти разные режимы отказа определяют архитектурные решения о квалификации разметчиков, маршрутизации задач и механизмах консенсуса: ошибки, связанные с качеством, требуют фильтрации данных выше по потоку, а ошибки, связанные с экспертизой, требуют многоуровневой маршрутизации разметчиков.
Повсеместные ошибки разметки: уверенно неверно размеченные примеры из широко используемых эталонов, каждый показывает данную метку рядом с исправленной эталонной истиной (MNIST, CIFAR-10, CIFAR-100, Caltech-256, ImageNet, QuickDraw). Мелкозернистые путаницы, такие как краб, помеченный как омар, или черный аист, помеченный как белый аист, показывают, что даже отобранные наборы данных содержат систематические ошибки, что мотивирует тщательный контроль качества и экспертную разметку. Источник: (Northcutt et al., 2021).
С учетом этих присущих проблем качества производственные ML-системы внедряют несколько уровней контроля качества. Систематические проверки качества непрерывно наблюдают за конвейером разметки через случайную выборку размеченных данных для экспертной проверки и статистические методы для отметки потенциальных ошибок. Инфраструктура должна эффективно выполнять эти проверки на миллионах примеров, не создавая узких мест. Стратегии выборки обычно проверяют от 1 до 10 процентов меток, балансируя чувствительность обнаружения и стоимость проверки. Приложения повышенного риска, такие как медицинская диагностика или автономные автомобили, могут проверять 100 процентов меток через несколько независимых проверок, тогда как менее ответственные приложения, например рекомендации товаров, могут проверять только 1 процент выборочными проверками.
Помимо подходов случайной выборки, сбор нескольких меток для каждой точки данных, часто называемый «консенсусной разметкой», помогает выявлять спорные или неоднозначные случаи. Коммерческие платформы разметки, такие как Labelbox и Scale AI, предоставляют рабочие процессы консенсуса и многоуровневого контроля качества (Labelbox, Inc., 2024; Scale AI, Inc., 2024), но статистическая основа — межаннотаторское согласие. Инфраструктура консенсуса обычно собирает несколько меток на пример и вычисляет такие метрики, как каппа Фляйса — обобщение статистики каппы Коэна, введенной в разделе «Обнаружение дрейфа данных и реакция на него», с двух оценщиков на любое число разметчиков (Fleiss, 1971). Примеры с низким согласием, для которых в качестве операционных эвристик используются пороги вроде категорий Лэндиса — Коха, направляются на экспертную проверку, а не принуждаются к консенсусу в действительно неоднозначных случаях (Landis and Koch, 1977).
Подход консенсуса отражает экономический компромисс, необходимый для масштабируемых систем. Экспертная проверка стоит дороже на пример, чем краудсорсинговая разметка, но принуждение к согласию по неоднозначным примерам путем голосования большинства неэкспертов может давать систематически смещенные метки. Направляя эксперту только действительно неоднозначные случаи, выявленные по низкому межаннотаторскому согласию или провалу проверок по эталонному набору, системы балансируют стоимость и качество. Такой многоуровневый подход позволяет экономически обрабатывать миллионы примеров, сохраняя стандарты качества за счет целевого вмешательства экспертов.
Хотя техническая инфраструктура служит основой для контроля качества, успешные системы разметки должны также учитывать человеческий фактор. Эффективная работа с разметчиками требует стандартизированных рубрик аннотирования с каноническими положительными и отрицательными примерами, визуальных каталогов граничных случаев, автоматической обратной связи, которая сравнивает разметчиков с известными эталонными записями, и калибровочных сессий, на которых разметчики разрешают пограничные случаи. Для сложных или специфичных для предметной области задач система может реализовать многоуровневый доступ, направляя трудные случаи разметчикам с подтвержденной экспертизой в предметной области.
Мониторинг качества порождает значительный объем телеметрии, которую нужно эффективно принимать и отслеживать. Наиболее информативные сигналы охватывают несколько измерений. Частоты межаннотаторского согласия показывают, сходятся ли несколько разметчиков на одном примере, а оценки уверенности в метках отражают заявленную разметчиками уверенность в решениях. Время на одну аннотацию служит двусторонним индикатором: слишком быстро выполненные аннотации указывают на небрежность, а слишком долгие — на замешательство или неясные инструкции. Паттерны ошибок выявляют систематические смещения или недопонимания в пуле разметчиков, а производительность разметчиков на примерах из эталонного набора обеспечивает калибровку по эталонной истине. Наконец, демографический анализ поведения разметчиков выявляет, размечают ли определенные группы систематически иначе, что могло бы внести непреднамеренное смещение в обучающие данные. Эти метрики должны вычисляться и обновляться эффективно по миллионам примеров, часто требуя выделенных аналитических конвейеров, которые обрабатывают данные разметки почти в реальном времени, чтобы ловить проблемы качества до того, как они затронут большие объемы данных.
Масштабирование с помощью ИИ-разметки
Ограничения пропускной способности ручной аннотации делают чисто человеческую разметку узким местом для крупномасштабного обучения, тогда как полностью автоматическая разметка не обладает надежностью, необходимой для неоднозначных или критичных для безопасности примеров. Разметка с помощью ИИ решает этот компромисс, используя вывод модели для обработки рутинных входов и ускорения человеческой аннотации, сохраняя при этом ручную проверку для выборок с высокой неопределенностью. «Иерархия решений для разметки с поддержкой ИИ» показывает четыре распространенных пути. Традиционное обучение с учителем использует прямые человеческие метки. Полуконтролируемое обучение использует структуру неразмеченных данных вместе с размеченным подмножеством. Слабый надзор заменяет отдельные ручные аннотации программными функциями разметки. Трансферное обучение повторно использует представления, выученные на вышестоящей задаче, уменьшая, но не устраняя потребность в метках конкретной задачи. Каждый путь меняет, где оплачивается стоимость надзора и какие допущения (геометрия неразмеченных данных, точность программных эвристик или переносимость представлений) конвейер должен проверять.
Иерархия решений для разметки с поддержкой ИИ: верхний вопрос о получении размеченных данных ветвится на четыре пути: традиционное обучение с учителем, полуконтролируемое обучение, слабый надзор и трансферное обучение, а активное обучение — как экономящая затраты альтернатива. Ветви различают, откуда берется надзор и какие дополнительные допущения или предобученные артефакты конвейер должен проверять. Адаптировано по обзору слабого надзора из лаборатории ИИ Стэнфордского университета (Ratner et al., 2019).
Эти пути обменивают разные допущения, а не простые количества меток. В зависимости от пути конвейер опирается на структуру неразмеченных данных, связанную с задачей, переносимое представление, измеримую точность функций разметки или доступный цикл оценки. Производственные системы должны фиксировать каждое допущение и проверять его на удержанных, проверенных людьми данных. Диаграмма служит картой решений, а не абсолютным рейтингом качества.
Разметка с поддержкой ИИ делит работу в соответствии с сильными сторонами каждого участника. Люди оценивают неоднозначные случаи, замечают тонкие ошибки и применяют знания предметной области; модели могут обрабатывать рутинные случаи в масштабе при условии валидации. Производственные системы объединяют эти возможности через несколько взаимодополняющих подходов.
Предварительная аннотация использует модели ИИ для генерации предварительных меток, которые люди затем проверяют и исправляют, — превращая задачу из «разметь с нуля» в «проверь и исправь». Программные фреймворки разметки, такие как Snorkel (Ratner et al., 2018; Ratner et al., 2017), развивают это дальше через слабый надзор29, автоматически генерируя начальные метки в масштабе с помощью эвристик на основе правил, баз знаний и выходов существующих моделей. В автономном вождении предобученные модели обнаружения объектов могут размечать транспортные средства и пешеходов, которые аннотаторы-люди проверяют и уточняют, автоматически обрабатывая многие очевидные случаи.
Большие языковые модели (LLM) теперь помогают конвейерам разметки, генерируя описания, составляя инструкции по разметке на основе примеров и объясняя свои рассуждения при назначении меток. Например, системы модерации контента используют LLM для первичной классификации контента с объяснениями, которые проверяют рецензенты-люди. Однако интеграция LLM вносит системные проблемы: стоимость вывода и ограничения частоты запросов, зависящие от провайдера и модели, а также необходимость систематической валидации выходов, потому что LLM могут выдавать уверенные, но неверные метки. Многие организации применяют многоуровневые подходы: более мелкие специализированные модели для рутинных случаев и более крупные LLM — для сложных сценариев, требующих тонкого суждения.
Активное обучение идет на дополняющий компромисс: оно тратит вывод модели, чтобы сократить человеческую разметку, поэтому релевантный вопрос в том, укладываются ли эти вычисления в тот же бюджет.
Такие методы, как активное обучение30, дополняют эти подходы, приоритизируя кандидатные примеры по неопределенности модели (Settles, 2009; Coleman et al., 2022). Эти системы непрерывно анализируют неопределенность модели, чтобы выявить ценных кандидатов для разметки. Вместо разметки случайной выборки неразмеченных данных активное обучение выбирает примеры, где текущая модель наиболее неуверенна или где метки сильнее всего улучшили бы производительность модели. Инфраструктура должна эффективно вычислять метрики неопределенности (часто энтропию предсказаний или расхождение между моделями ансамбля), поддерживать очереди задач, упорядоченные по информативности, и адаптировать стратегии приоритизации на основе поступающих меток. Например, в конвейере медицинской визуализации активное обучение направляет редкие или пограничные патологии опытным радиологам, тогда как рутинные снимки получают автоматические предварительные аннотации, которые врачи быстро проверяют. Такой подход может существенно сократить требуемые аннотации в благоприятных условиях, хотя он требует тщательной инженерии, чтобы предотвратить петли обратной связи, в которых неопределенность модели смещает то, какие данные будут размечены. Расчет бюджета делает этот рычаг конкретным.
Множитель активного обучения
Задача: набор данных из 10 млн примеров имеет бюджет на разметку $50 000. Случайная выборка дает точность 85 процентов при 100 тысячах примеров, тогда как целевая точность — 95 процентов.
Расчет:
- Эффективность выборки: активное обучение может достичь целевой точности меньшим числом примеров, чем случайный выбор, в благоприятных условиях.
- Стоимость на точку: случайная выборка = $0,50 за метку. Активное обучение добавляет вычислительную стоимость (около $0,01 за изображение на вывод), чтобы найти трудные примеры.
- Множитель:
- Случайная: достижение 95 процентов может потребовать 1 млн меток ($500 000). Бюджет превышен.
- Только метки активного обучения: системе может понадобиться около 100 000–200 000 трудных примеров ($50 000–$100 000).
- Оценка всего пула: оценка всех 10 млн кандидатных изображений добавляет $100 000, поэтому общая стоимость активного обучения становится $150 000–$200 000. Бюджет превышен.
Системный вывод: выбор алгоритма — важный рычаг для числа меток, но вычисления должны укладываться в бюджетную модель. Если потратить 10 процентов этого бюджета на вывод ($5 000), при заявленной цене вывода будет оценено только 500 тысяч кандидатных изображений, и на метки останется примерно 90 тысяч. Активное обучение жизнеспособно, только если пул кандидатов сужается до оценки, стоимость вывода заметно падает или вычисления финансируются отдельно от разметки.
Оценка полного пула может превысить бюджет на метки еще до начала разметки.
Контроль качества становится все более важным по мере того, как эти компоненты ИИ взаимодействуют. Система должна отслеживать производительность и ИИ, и людей через систематические метрики. Важна калибровка уверенности модели: если ИИ сообщает 95 процентов уверенности, но достигает точности лишь 75 процентов на этом уровне уверенности, предварительные аннотации вводят проверяющих в заблуждение. Частоты согласия человека и ИИ показывают, помогает ли помощь ИИ или мешает: когда люди часто переопределяют предложения ИИ, предварительные аннотации, возможно, вносят смещение вместо ускорения работы. Эти метрики требуют тщательной инструментации всего конвейера разметки, отслеживая как итоговые метки, так и взаимодействие между разметчиками-людьми и ИИ на каждой стадии.
Эти принципы проявляются в масштабе в областях, критичных для безопасности. Инфраструктура разметки для автономных автомобилей может обрабатывать большие объемы кадров датчиков, используя предварительную аннотацию ИИ для разметки распространенных объектов, а необычные сценарии (строительные зоны, машины экстренных служб) направляя экспертам-людям: это распределенная архитектура, в которой предварительная аннотация работает на кластерах GPU, а проверка людьми масштабируется по командам аннотаторов. Системы медицинской визуализации сталкиваются с параллельной проблемой дефицита меток: большие репозитории неразмеченных клинических данных делают экспертную аннотацию узким местом и мотивируют эффективные по данным рабочие процессы, которые учатся полезным представлениям на неразмеченной структуре до применения экспертных меток (Krishnan et al., 2022). В таких областях общий паттерн инженерии данных — многоуровневая эскалация: автоматизация обрабатывает очевидные случаи, люди — неоднозначные, а мониторинг следит, чтобы граница между «очевидным» и «неоднозначным» адаптировалась по мере развития возможностей ИИ и условий развертывания.
Автоматическая разметка в KWS
Разметка наборов данных для распознавания ключевых слов в масштабе создает специфичные для речи системные проблемы. Генерация миллионов размеченных примеров слов пробуждения без пропорциональных затрат на человеческую аннотацию требует выхода за рамки ручных и краудсорсинговых рабочих процессов. Многоязычный корпус произнесенных слов (Multilingual Spoken Words Corpus, MSWC) (Mazumder et al., 2021) демонстрирует, как автоматическая разметка снимает это узкое место пропускной способности: корпус программно извлекает более 23,4 млн примеров односекундной речи, охватывающих 340 000 ключевых слов на 50 языках, из непрерывных речевых корпусов.
Такой масштаб делает ручную аннотацию непрактичной: 23,4 млн примеров даже при 10 секундах на метку потребовали бы около 65 000 часов, примерно 32,5 человеко-года полной занятости. Широкий, документированный источник данных на 50 языках может улучшить покрытие, но само по себе число языков не гарантирует репрезентативности дикторов, акцентов, устройств или акустических сред. Автоматическая система в «Подготовка многоязычных данных» решает проблему масштаба, начиная с парного аудио предложений и транскрипций, а затем использует принудительное выравнивание31, чтобы оценить границы слов в непрерывной речи.
На таком масштабе контроль качества становится задачей выборки и происхождения, а не исчезает. Конвейер должен сообщать о покрытии по языкам, дикторам, акцентам, устройствам и акустическим средам; сохранять для каждого извлеченного фрагмента исходную запись, версию транскрипции, версию выравнивателя и уверенность в границах; направлять выравнивания с низкой уверенностью и недопредставленные срезы на проверку людьми. Удержанная оценка должна затем измерять целевые слова пробуждения по этим срезам. Эти средства контроля отличают большой корпус от репрезентативного и делают ошибки извлечения прослеживаемыми, когда нижестоящая модель KWS дает сбой.
Подготовка многоязычных данных: принудительное выравнивание и сегментация превращают парные аудио- и текстовые данные в размеченные односекундные фрагменты, создавая крупномасштабный корпус для обучения моделей распознавания ключевых слов на 50 языках. Этот автоматизированный процесс позволяет масштабировать разработку систем KWS, эффективно генерируя обучающие примеры из доступных речевых ресурсов, таких как Common Voice и многоязычный контент с субтитрами. Источник: (Mazumder, 2021).
Система извлечения использует эти точные маркеры времени, чтобы генерировать чистые образцы ключевых слов, одновременно справляясь с предсказуемыми инженерными проблемами: фоновый шум, мешающий границам слов, дикторы, неожиданно растягивающие или сжимающие слова за пределы целевой длительности от 500 до 800 мс, и более длинные слова, выходящие за границу в одну секунду. MSWC предоставляет автоматическую оценку качества, которая анализирует аудиохарактеристики, чтобы выявлять возможные проблемы с качеством записи, четкостью речи или фоновым шумом; это важно для поддержания согласованных стандартов на 23,4 млн образцах без ручных проверок, которые сделали бы такой масштаб непозволительно дорогим.
Команды разработчиков голосовых ассистентов часто опираются на эту основу автоматической разметки. Хотя автоматические корпуса могут не содержать конкретных слов пробуждения, нужных продукту, они дают отправную точку для прототипирования KWS, особенно для недостаточно обслуживаемых языков, где коммерческих наборов данных не существует. Производственные системы обычно добавляют поверх этого целевую запись и проверку людьми для сложных случаев (необычные акценты, редкие слова или трудные акустические среды), координируя автоматизированную обработку и человеческую экспертизу.
На этом этапе конвейер компиляции выпустил свои основные артефакты: векторы признаков в паре с эталонными метками. Доставка этих тензоров исполнительным блокам раскрывает физическую иерархию хранения. Фундаментальное противоречие носит механический характер: пакетное обучение требует высокопроизводительного последовательного потока через петабайты записей, тогда как вывод в реальном времени требует поиска отдельных векторов признаков за доли миллисекунды. Архитектура хранения определяет, вычисляют ли ускорители непрерывно или простаивают, ожидая ввода-вывода.
Архитектура хранения
Размеченные наборы данных, которые производит конвейер (23,4 млн образцов на 50 языках в примере KWS), требуют продуманной организации хранения, чтобы сбалансировать пропускную способность обучения и задержку обслуживания. Согласование этих расходящихся профилей доступа требует отображения паттернов доступа нагрузки непосредственно на физические возможности лежащих в основе носителей хранения.
Требования к хранению для машинного обучения принципиально расходятся с требованиями транзакционных систем. Вместо оптимизации под частые мелкие записи и точечные поиски, характерные для банковских систем или электронной коммерции, нагрузки ML приоритизируют устойчивую пропускную способность последовательного чтения, крупномасштабные сканирования от гигабайт до петабайт и гибкость схемы. Реляционная база данных, обслуживающая каталог интернет-магазина, обрабатывает миллионы отдельных запросов к товарам в секунду с низкой задержкой, но задание обучения, последовательно сканирующее тот же каталог на протяжении десятков эпох, упирается в несгруппированные чтения с диска, присущие транзакционным движкам хранения.
Варианты систем хранения
Пакетное обучение последовательно сканирует миллионы примеров; вывод в реальном времени извлекает по одному вектору признаков за раз. Эти противоположные паттерны доступа тянут хранилище в двух направлениях, и выбор системы означает минимизацию члена данных железного закона систем ML для того паттерна, который доминирует. Каждый носитель хранения накладывает физические ограничения на пропускную способность, которые определяют максимальную скорость конвейеров обучения и обслуживания.
Две метрики производительности хранилища управляют этой оптимизацией. IOPS (операции ввода-вывода в секунду) считает различные запросы чтения или записи, которые устройство может обработать в секунду, ограничивая случайный доступ, например выборку небольших батчей изображений или отдельных профилей пользователей. Пропускная способность (bandwidth) измеряет объем данных, передаваемый в секунду, обычно , ограничивая последовательный доступ, например сканирование файла Parquet для обучения.
Выбор между базами данных, хранилищами данных и озерами данных по сути означает выбор того, какие из этих метрик оптимизировать на разных стадиях жизненного цикла. Традиционные базы данных (онлайн-обработка транзакций, OLTP) оптимизированы для высокого IOPS при малых размерах блоков и построчной организации. Они хранят каталоги товаров, профили пользователей или истории транзакций со строгими гарантиями ACID и задержкой поиска отдельной записи менее миллисекунды. В рабочих процессах ML этот профиль подходит для онлайн-подачи признаков: рекомендательная система, которая ищет профиль пользователя при выводе в реальном времени, или антифрод-сервис, запрашивающий исторические счетчики транзакций, нуждаются в случайных точечных запросах, ограниченных задержкой каждого запроса. В крайнем случае крупные рекомендательные системы обслуживают миллиарды разреженных чтений признаков в секунду из таблиц масштаба терабайт, что требует движков хранения, максимизирующих IOPS, а не массовую пропускную способность. Однако базы данных не подходят как источник обучающих данных. Когда задание обучения сканирует миллионы записей за несколько эпох, построчная организация заставляет движок хранения загружать в память целые строки с диска, даже когда модель использует только 20 из 100 признаков. Возникающий несгруппированный ввод-вывод и впустую потраченная пропускная способность шины ограничивают производительность.
Хранилища данных (онлайн-аналитическая обработка, OLAP) инвертируют эту физическую организацию, упорядочивая таблицы по столбцам, а не по строкам (Stonebraker et al., 2018). Храня значения каждого атрибута подряд на диске, колоночные форматы позволяют последовательным сканированиям читать только признаки, нужные модели, передавая одну пятую несжатого объема строк при выборке 20 столбцов из 100. Расчет эффективности формата в разделе «Производительность хранения и стоимость» количественно оценивает этот выигрыш на примере обнаружения мошенничества. Колоночная организация также достигает высокой степени сжатия однородных типов данных, напрямую уменьшая количество байтов, переданных по шине хранения. Хранилища данных превосходно подходят для инженерии признаков, пакетных агрегаций и обучения табличных моделей, где интерфейсы SQL упрощают итеративное исследование данных. Однако хранилища требуют структурированных схем и плохо справляются с мультимодальными артефактами, такими как сырое аудио, изображения высокого разрешения и свободный текст. Изменение схемы в ходе быстрых экспериментов требует дорогостоящих операций ALTER TABLE над таблицами из миллиардов строк, тормозя скорость разработки.
Озера данных полностью отказываются от заранее заданных табличных схем, храня структурированные, полуструктурированные и неструктурированные данные в нативных форматах на объектном хранилище большой емкости. Определение структуры данных откладывается до момента запроса: это архитектурный паттерн, известный как «схема при чтении» (schema-on-read).32
Такая организация подходит для исследовательской инженерии данных и мультимодальных обучающих конвейеров, где наборы признаков непрерывно развиваются. Система компьютерного зрения или мультимодальная система может хранить сырые журналы датчиков в формате JSON, изображения в виде файлов JPEG, потоки кликов в Parquet, а выученные представления в виде двоичных массивов NumPy в одном репозитории. Независимые задания обучения накладывают схемы при чтении, извлекая разные подмножества без согласования миграций схем. Однако схема при чтении переносит управление с приема на извлечение. Без дисциплинированного управления метаданными озера данных вырождаются в «болота данных» — неупорядоченные репозитории с осиротевшими деревьями каталогов вроде userdata_v2_final и userdata_v2_ACTUALLY_FINAL, родословная и качество которых не зафиксированы. Производственным озерам данных нужен выделенный каталог метаданных (например, AWS Glue Data Catalog, Apache Atlas или Databricks Unity Catalog) для записи родословной, частоты обновлений, версий схем и политик доступа.
Каждая архитектура хранения оптимизирована под свой паттерн доступа и фазу жизненного цикла, как суммирует «Характеристики систем хранения».
| Атрибут | Традиционная база данных | Хранилище данных | Озеро данных |
|---|---|---|---|
| Назначение | Операционные и транзакционные задачи | Аналитика и отчетность | Хранение сырых и разнородных данных для будущей обработки |
| Тип данных | Структурированные | Структурированные | Структурированные, полуструктурированные и неструктурированные |
| Масштаб | От малых до средних объемов | От средних до больших объемов | Большие объемы разнородных данных |
| Оптимизация производительности | Оптимизирована для транзакционных запросов (OLTP) | Оптимизирована для аналитических запросов (OLAP) | Оптимизирована для масштабируемого хранения и извлечения |
| Примеры | MySQL, PostgreSQL, Oracle DB | Google BigQuery, Amazon Redshift, Microsoft Azure Synapse | Google Cloud Storage, AWS S3, Azure Data Lake Storage |
Характеристики систем хранения: каждая архитектура хранения предпочитает свой паттерн доступа и этап рабочего процесса ML. Базы данных поддерживают случайный доступ с высоким IOPS, необходимый для онлайн-подачи признаков; хранилища данных обеспечивают последовательную пропускную способность для пакетного обучения и инженерии признаков; озера данных дают гибкость схем и экономическую эффективность для длительного хранения больших объемов сырых данных. Неудачное соответствие системы и нагрузки может вносить существенные штрафы в производительность.
Производственные архитектуры ML редко выбирают одну технологию хранения. Зрелые системы объединяют все три уровня в единую топологию данных: базы данных обрабатывают операционную телеметрию и поиск в реальном времени; хранилища данных выполняют структурированную выборку признаков и аналитику агрегатов; озера данных хранят мультимодальные сырые записи и промежуточные контрольные точки. Например, в конвейере беспилотного автомобиля телеметрия автомобиля поступает в операционную базу данных для немедленного мониторинга состояния, агрегированная статистика вождения пополняет хранилище данных для аналитики парка, а сырые кадры камер и облака точек лидара хранятся в объектном хранилище для обучения моделей.
Производительность хранения и стоимость
Физические носители хранения различаются на три порядка по стоимости и на пять порядков по пропускной способности. Несоответствие уровня хранения паттерну доступа либо раздувает инфраструктурные затраты недоиспользуемой емкостью, либо лишает обучающие ускорители данных во время простоев ввода-вывода.
«Иллюстративные компромиссы стоимости и производительности хранения (2024)» показывает, почему ML-системы используют многоуровневое хранение. При этих допущениях 2024 года хранение нашего обучающего набора KWS (748,8 ГБ) в объектном хранилище стоит $17,2 в месяц, что делает доступным хранение сырого аудио, тогда как рабочие наборы на NVMe33 стоят от $74,9 до $224,6 в месяц для активного обучения, но загружаются в 50 раз быстрее.
| Уровень хранения | Стоимость ($/ТБ в месяц) | Пропускная способность последовательного чтения | Задержка случайного чтения | Типичный сценарий ML |
|---|---|---|---|---|
| NVMe SSD (локальный) | $100–300 | 5–7 ГБ/с | 10–100 мкс | Загрузка обучающих данных, активная подача признаков |
| Объектное хранилище (S3, GCS) | $20–25 | 100–500 МБ/с (на соединение) | 10–50 мс | Сырое хранение в озере данных, артефакты моделей |
| Хранилище данных (BigQuery, Redshift) | $20–40 | 1–5 ГБ/с (колоночное сканирование) | 100–500 мс (запуск запроса) | Запросы к обучающим данным, инженерия признаков |
| Кэш в оперативной памяти (Redis, Memcached) | $500–1000 | 20–50 ГБ/с | 1–10 мкс | Онлайн-подача признаков, вывод в реальном времени |
| Архивное хранилище (Glacier, Nearline) | $1–4 | 10–50 МБ/с (после извлечения) | Часы (извлечение) | Историческое хранение, архивы для соответствия требованиям |
Иллюстративные компромиссы стоимости и производительности хранения (2024): эти диапазоны планирования зависят от провайдера, региона, конфигурации и нагрузки. Загрузка обучающих данных требует высокопроизводительного последовательного доступа; раздел «Иерархия памяти» приложения «Основы машины» описывает иерархию памяти, с которой должен согласовываться этот паттерн. Онлайн-обслуживание нуждается в случайных чтениях с низкой задержкой, тогда как архивное хранение ставит стоимость выше скорости доступа ради соответствия требованиям и исторических данных.
Эта разница в пропускной способности определяет скорость инженерных итераций. Обучение, которое загружает данные со скоростью 5 ГБ/с, завершает загрузку набора за 149,8 с, против 7 488 с при типичных скоростях объектного хранилища. Это ускорение в 50 раз определяет, могут ли инженеры итерировать несколько раз в день или должны ждать часами между экспериментами.
Задержка доступа охватывает восемь порядков величины: от кэша до интернета.
Разрыв задержек между регистрами на кристалле и удаленным хранилищем охватывает более восьми порядков величины, из-за чего небуферизованные удаленные запросы ввода-вывода останавливают конвейеры выполнения GPU. Перевод этих микросекундных задержек в человеческие масштабы («Иерархия задержек памяти и хранения») иллюстрирует штраф производительности от некэшированного чтения. Эти цифры, популяризированные ключевым докладом Джеффа Дина на LADIS в 2009 году,34 показывают, почему небуферизованный удаленный ввод-вывод оставляет современные ускорители без данных и почему распределенное обучение требует строгой локальности данных.
| Операция | Задержка (нс) | Человеческий масштаб | Влияние на ML-систему |
|---|---|---|---|
| Ссылка на кэш L1 | 0,5 | 1 секунда | Мгновенно |
| Ссылка на кэш L2 | 7 | 14 секунд | Быстрое вычисление |
| Основная память (DRAM) | 100 | 3 минуты | Порог «стены памяти» |
| SSD (локальный NVMe) | 100 000 | 2 дня | Узкое место загрузки данных |
| Сеть (тот же дата-центр) | 500 000 | 11,57 дня | Задержка распределенной координации |
| SSD (удаленная сеть) | 2 000 000 | 46,30 дня | Источник перекоса обучения и обслуживания |
| Объектное хранилище (S3) | 20 000 000 | 1 год | Доступ к архиву |
| Интернет (Калифорния — Виргиния) | 100 000 000 | 6 лет | Пользовательский опыт в глобальном масштабе |
Иерархия задержек памяти и хранения: типичные времена доступа к оборудованию, приведенные к человеческому масштабу, где обращение к кэшу L1 за 0,5 нс соответствует одной секунде.
Помимо входных наборов данных, архитектуры хранения должны вмещать плотные числовые массивы, порождаемые при разработке модели: веса параметров, состояния оптимизаторов и контрольные точки обучения.
Современные нейронные сети содержат от миллионов до сотен миллиардов параметров, что порождает паттерны хранения и извлечения, отличные от табличных данных. GPT-3 (Brown et al., 2020) требует примерно 700 ГБ для весов модели в формате FP32 (175 млрд параметров по 4 байта), хотя на практике часто используют более компактные числовые форматы, такие как FP16 (350 ГБ), чтобы вдвое снизить нагрузку на память. Даже при точности FP16 эта единственная контрольная точка превышает операционные базы данных многих организаций. От 60 млн параметров AlexNet (Krizhevsky et al., 2012) до 175 млрд параметров GPT-3 (Brown et al., 2020) размер модели вырос примерно в 2916 раз за восемь лет. Веса моделей требуют блочно выровненных форматов хранения, чтобы поддерживать параллельное чтение групп параметров при инициализации и контрольном сохранении, что требует совокупной пропускной способности хранилища, приближающейся к пределам сетевой структуры (25–100 Гбит/с), чтобы вычислительные блоки оставались активными. Методы квантования на стороне модели, которые сжимают эти объемы, рассматриваются в главе «Сжатие моделей».
Отслеживание этих артефактов создает проблемы версионирования. Стандартные системы контроля версий вроде Git хорошо работают с инкрементальными текстовыми различиями, но не справляются с отслеживанием многогигабайтных двоичных файлов, где одно обновление весов порождает совершенно новый файл. Наивное хранение десяти исторических контрольных точек модели объемом 10 ГБ потребляет 100 ГБ. Производственные ML-рабочие процессы разделяют метаданные и двоичные артефакты: такие инструменты, как DVC (Data Version Control) и MLflow, хранят легковесные криптографические хеши в Git, а двоичные контрольные точки выносят во внешние адресуемые по содержимому объектные хранилища. Это обеспечивает точную воспроизводимость без раздувания репозитория кода.
Обучение на нескольких ускорителях усиливает нагрузку на хранилище через параллельный ввод-вывод. Когда задание обучения охватывает несколько ускорителей, каждый ранг должен одновременно читать обучающие батчи, записывать снимки оптимизатора и сбрасывать промежуточные контрольные точки. Системы хранения должны поглощать одновременные чтения и записи с темпом, пропорциональным числу рабочих процессов, предотвращая сериализацию ввода-вывода, которая оставляет дорогие ускорители простаивающими. Механизмы координации этих параллельных рабочих процессов разбираются в главе «Обучение моделей».
Это физическое несоответствие между пропускной способностью вычислений и хранилища раскрывает обрыв производительности из-за голодания ускорителя по данным. Тогда как оперативная память хоста на современных серверных узлах отдает 50–200 ГБ/с, локальные NVMe SSD дают 1–7 ГБ/с, а сетевое хранилище — 1–10 ГБ/с. Когда ускоритель может обрабатывать данные быстрее, чем иерархия хранения успевает их подготовить, конвейер данных становится лимитирующим ограничением. Десятикратное несоответствие между скоростью потребления GPU и пропускной способностью хранилища заставляет ускорители простаивать 90 процентов времени. Пропускная способность обучения ограничена минимумом из вычислительной мощности и скорости подачи данных.
Бюджет пропускной способности хранилища
Задача: какая конфигурация хранилища не даст эталонному ускорителю голодать при обучении ResNet-50? Семейство устройств описано в главе «Аппаратное ускорение»; здесь важно, как потолок вычислений превращается в бюджет пути данных.
Начнем с потолка вычислений. Эталонный ускоритель может выдавать 312 TFLOP/s на плотных операциях FP16. ResNet-50 требует около 8 GFLOP на каждый прямой проход, а с учетом обратного прохода обучения стоимость шага обучения достигает примерно 24,6 GFLOP на изображение. Глава «Обучение моделей» выводит механизм обратного прохода; здесь суммарная стоимость на изображение служит входом для бюджета хранилища. Деление пиковой производительности ускорителя на стоимость шага на изображение дает потолок вычислений 12 682 изображения в секунду.
Этот потолок вычислений становится требованием к хранилищу, как только каждое изображение должно поступить с диска или из объектного хранилища. При сжатых JPEG-изображениях по 150 КБ путь данных должен поставлять 12 682 изображения в секунду по 150 КБ каждое, то есть примерно 1,9 ГБ/с.
Теперь у вариантов хранения есть конкретная цель: насыщение этого ускорителя требует устойчивой пропускной способности 1,9 ГБ/с.
- S3 Standard дает около 100 МБ/с на поток, поэтому конвейеру нужно 19 параллельных рабочих потоков до учета программных накладных расходов.
- SATA SSD дают около 500 МБ/с при последовательном чтении, что делает их узким местом для этого ускорителя.
- NVMe SSD дают примерно 5–7 ГБ/с, то есть подходящий класс локального хранилища для этой цели.
Системный вывод: с SATA SSD максимальная пропускная способность ограничена 500 МБ/с, поделенными на изображения по 150 КБ, то есть примерно 3 333 изображения в секунду. Ускоритель стоимостью $15 000 будет работать с загрузкой 26 процентов, потому что хранилище поставляет лишь малую долю потолка обработки изображений ускорителем. Физика хранения определяет скорость обучения.
Проектирование высокопроизводительного обучения начинается с согласования пропускной способности хранилища со спросом ускорителя. Это аргумент главы о голодании ускорителя, рассмотренный под третьим и последним углом: раздел «Проблема подачи: скорость потока и налог на подачу» оценил простой ускорителя как налог на подачу, раздел «Прием данных» проследил ту же остановку до рабочих процессов декодирования на CPU, а здесь вопрос в том, какой уровень хранения может поддерживать требуемую скорость подачи.
Цифра 500 МБ/с отражает эффективную последовательную скорость чтения SATA III (предел интерфейса — 550 МБ/с), а реальная производительность случайного чтения мелких файлов может быть заметно ниже. Эта оговорка подкрепляет общий принцип, управляющий конвейерами данных: уравнение «пропускная способность обучения» ограничивает пропускную способность обучения вычислительной мощностью и скоростью подачи данных, определенной в уравнении «подача данных». Пусть , и обозначают скорости в образцах в секунду; — пропускная способность хранилища в байтах в секунду, — безразмерная доля, теряемая на накладные расходы, а — байты на образец. При полном перекрытии форма с минимумом скоростей соответствует нижней границе из раздела «Прием данных»; при неполном перекрытии фактическое время шага выше.
Когда оказывается меньшей из двух скоростей, дополнительные вычисления ускорителя уже не могут поднять пропускную способность обучения; средство должно увеличить полезную пропускную способность хранилища или уменьшить байты на образец.
Когда пропускная способность хранилища становится лимитирующим фактором, команды должны либо улучшить производительность хранилища за счет более быстрых носителей, распараллеливания или кэширования, либо сократить объем данных, которые нужно перемещать. Обучение больших языковых моделей может требовать обработки сотен гигабайт текста в час, тогда как модели компьютерного зрения, обрабатывающие изображения высокого разрешения, могут требовать устойчивых скоростей данных свыше 50 ГБ/с в распределенных кластерах. Эти требования делают загрузку данных решением о размещении в системе: загрузчики данных фреймворка распараллеливают ввод-вывод между асинхронными рабочими процессами, используя очереди предвыборки с двойной буферизацией, чтобы совместить фазу выборки данных для батча в оперативной памяти хоста с вычислением прохода для батча на памяти GPU, предотвращая простои вычислений в ожидании данных (). Загрузчики фреймворка могут также переносить дорогую работу по аугментации ближе к ускорителю, а не хранить каждый аугментированный вариант.
Выбор формата файла напрямую масштабирует член данных железного закона. Колоночные форматы вроде Parquet хорошо подходят для табличных признаков, позволяя проекцию столбцов и фильтрацию с проталкиванием, тогда как последовательные форматы с шардами, такие как WebDataset или TFRecord, упаковывают миллионы мелких двоичных объектов (например, изображения или аудио) в непрерывные последовательные потоки. Это шардирование устраняет накладные расходы на случайное позиционирование диска (), превращая медленный случайный ввод-вывод в устойчивую последовательную пропускную способность хранилища (). Измерение этого эффекта как эффективности формата дает множитель к эффективной пропускной способности. Тогда как Parquet оптимизирует колоночную организацию на диске, представления в памяти сталкиваются с аналогичным узким местом сериализации при передаче данных между движками приема, датафреймами и ML-фреймворками. Стандарт Apache Arrow решает эту границу в памяти, определяя независимую от языка колоночную организацию памяти, что позволяет разделять данные между процессами конвейера без копирования (zero-copy) и дорогостоящих циклов сериализации и десериализации.
Эффективность формата
Форматы хранения определяют, сколько «отходов» данных нужно переместить, чтобы извлечь сигнал, необходимый для обучения. Пусть — безразмерная доля прочитанных байтов, которые несут выбранные признаки, от 0 до 1. уравнение «эффективная пропускная способность» показывает, как эта доля переводит физическую пропускную способность в полезную пропускную способность конвейера:
Значения ниже 1 означают, что формат тратит часть физического пути данных на нерелевантные байты; поэтому улучшение компоновки может повысить полезную пропускную способность без замены устройства хранения.
Сценарий: обучение модели обнаружения мошенничества на 20 признаках из таблицы со 100 столбцами.
Построчные форматы (например, CSV) должны прочитать все 100 столбцов, чтобы получить 20 нужных признаков, давая долю полезных байтов 0,2 и тратя 80 процентов пропускной способности диска впустую. Напротив, колоночные форматы (например, Parquet) читают только выбранные столбцы, достигая (без учета накладных расходов на метаданные) и давая в 5 раз более высокую эффективную пропускную способность.
Системный вывод: в этом сценарии, где есть только проекция, переход с CSV на Parquet дает такой же прирост эффективной пропускной способности чтения, как 5-кратно более быстрый путь данных. Раздел «Строчные и колоночные форматы» приложения «Основы данных» подробно рассматривает построчную и колоночную организацию хранения и алгебру операций над данными (выборка, проекция, соединение).
Колоночные форматы хранения, такие как Parquet или Optimized Row Columnar (ORC), дают сокращение ввода-вывода в 5–10 раз для типичных нагрузок ML за счет двух взаимодополняющих механизмов: проекции столбцов и сжатия на уровне столбцов, использующего однородное распределение значений. Сжатие особенно эффективно для категориальных признаков с ограниченной кардинальностью: столбец кодов стран с 200 уникальными значениями на 100 млн записей сжимается в 20–50 раз благодаря словарному кодированию, тогда как кодирование длин серий сжимает отсортированные столбцы, сохраняя только переходы значений. В сочетании проекция и сжатие дают суммарное сокращение ввода-вывода в 20–100 раз по сравнению с несжатыми построчными форматами, ускоряя время эпохи обучения и уменьшая занимаемый объем хранилища.
Алгоритмы сжатия обменивают плотность хранения на пропускную способность распаковки на CPU. Хотя gzip достигает более высокой степени сжатия в 6–8 раз, Snappy сжимает в 2–3 раза, но распаковывает со скоростью 500 МБ/с, примерно в 4,2 раза быстрее gzip со скоростью 120 МБ/с. Для обучения ML, где пропускная способность приема определяет загрузку ускорителя, преимущество Snappy в скорости перевешивает экономию места gzip. Обучение на наборе данных объемом 100 ГБ, сжатом gzip, требует 13,9 минуты распаковки на CPU, тогда как Snappy требует всего 3,3 минуты. Когда обучение проходит по данным 50 эпох, разница в 10,6 минуты за эпоху накапливается до 9 часов в сумме, потенциально сокращая многодневные прогоны обучения до ночных. Более быстрая распаковка напрямую повышает пропускную способность входного конвейера, снижает требования к промежуточному размещению в памяти хоста и поддерживает насыщенность вычислений ускорителя.
Помимо формата и сжатия, разбиение данных на партиции определяет эффективность извлечения, согласуя организацию хранения с общими паттернами доступа. Рекомендательная система, обрабатывающая взаимодействия пользователей, разбивает данные по временной метке и демографическим сегментам пользователей, позволяя прогонам обучения запрашивать недавние временные срезы без сканирования всего исторического репозитория. Стратегии партиционирования напрямую взаимодействуют с распределенным обучением: диапазонное партиционирование по ID пользователя направляет согласованные профили пользователей на определенные ранги параллелизма данных, тогда как случайное партиционирование гарантирует, что все рабочие процессы получают независимые и одинаково распределенные образцы. Гранулярность критична: слишком мало крупных партиций ограничивают параллелизм рабочих процессов, тогда как миллионы микрошардов вызывают избыточные накладные расходы на метаданные и ухудшают последовательную предвыборку с диска. В многоускорительном обучении перекос партиций создает серьезные узкие места-отстающие (stragglers): если семь рабочих процессов в задании из восьми ускорителей завершают загрузку батча за 12 мс, а один читает из чрезмерно крупной партиции и тратит 180 мс, этот единственный отстающий задерживает синхронизацию градиентов по всему кластеру. Сбалансированное партиционирование, соответствующее бюджетам чтения рабочих процессов, поэтому является архитектурным условием высокой эффективности ускорителей, как разбирается в главе «Обучение моделей».
Хранение на протяжении жизненного цикла ML
Требования к хранению меняются, потому что каждая стадия жизненного цикла предъявляет свой профиль доступа к одним и тем же базовым данным. Набор данных проходит случайную выборку при исследовательском анализе данных, высокопроизводительный последовательный поток при обучении модели и точечные запросы с низкой задержкой при производственном обслуживании.
На начальной стадии разработки скорость итераций и гибкость схемы важнее сырой пропускной способности. Основная системная задача — управлять ревизиями экспериментов, не раздувая емкость хранилища: десять исследовательских прогонов на наборе данных объемом 100 ГБ наивно порождают 1 ТБ избыточных копий. Архитектура с метаданными-указателями, введенная в разделе «Производительность хранения и стоимость», отделяет отслеживание версий от файлового хранения: такие инструменты, как DVC, отслеживают родословную через небольшие манифесты хешей, а хранилища с адресацией по содержимому дедуплицируют одинаковые двоичные полезные нагрузки. Политики управления усиливают это разделение на уровни, предоставляя широкий доступ к анонимизированным наборам для разработки и ограничивая доступ к чувствительным производственным данным зашифрованными аудируемыми уровнями доступа.
На этапе обучения профиль доступа смещается к устойчивой последовательной пропускной способности. Современные глубокие нейронные сети обрабатывают огромные наборы данных за десятки или сотни эпох, что делает пропускную способность хранилища определяющим фактором загрузки оборудования. Обучение ResNet-50 на ImageNet на восьми ускорителях при 40 000 изображений/с требует устойчивой пропускной способности хранилища примерно 6 ГБ/с для сжатых изображений по 150 КБ и значительно больше, если размещаются несжатые тензоры FP32. Уровни хранения, которые не могут поддерживать эту скорость, оставляют ускорители простаивать и раздувают эксплуатационные затраты кластера. Компромисс размещения признаков («Размещение вычисления признаков») становится критичным: предвычисление представлений признаков дает 30-кратное сокращение хранилища (сырые входы по 150 КБ уменьшаются до векторов эмбеддингов по 5 КБ), но вносит риски устаревания, когда обновляются модели извлечения признаков.
Производственный вывод меняет цель оптимизации с последовательной пропускной способности на случайный доступ с низкой задержкой. Сервис рекомендаций, обрабатывающий 10 000 запросов в секунду с SLA 10 мс и 10 чтениями признаков на запрос, требует 100 000 IOPS. Чтобы выдержать такую скорость случайного доступа, нужны хранилища «ключ — значение» в оперативной памяти, такие как Redis, распределенные кэши или специально построенные хранилища признаков с низкой задержкой. Периферийное развертывание налагает дальнейшие физические границы: ограниченная флеш-память, прерывистая сетевая связность и необходимость обновлять модели без прерывания работы определяют многоуровневое кэширование, где основные модели находятся в локальной флеш-памяти, а справочные данные асинхронно синхронизируются с облачными конечными точками. В производстве инфраструктура обслуживания должна поддерживать атомарные откаты и параллельное A/B-тестирование (глава «MLOps»). Эти эксплуатационные гарантии зависят от строгого происхождения: каждая развернутая модель должна прослеживаться до точного снимка набора данных, на котором она обучалась.
Версионирование данных для воспроизводимости ML
Представим производственную модель рекомендаций, у которой показатель кликабельности внезапно падает после планового еженедельного переобучения, хотя кодовая база приложения не менялась. Команде разработки нужно определить, связано ли падение с незаявленным изменением признака, сдвигом распределения меток или повреждением таблицы выше по потоку. Без неизменяемой связи между обученным артефактом модели и ее обучающими входами диагностика требует дней спекулятивного деления пополам. С версионированием данных инженеры напрямую сравнивают снимки обучающих наборов и выделяют первопричину: запоздалое заполнение (backfill) в конвейере выше по потоку, которое незаметно исказило частоты меток.
Движки версионирования на уровне файлов, такие как DVC (Data Version Control), реализуют эту возможность, сочетая Git с удаленным хранилищем с адресацией по содержимому (Iterative, 2024). Git отслеживает небольшие текстовые файлы-указатели (.dvc), содержащие криптографические хеши, а DVC синхронизирует лежащий в основе двоичный набор данных с объектным хранилищем («рабочий процесс DVC»). Переключение на более раннюю версию Git автоматически восстанавливает точную версию набора данных, соответствующую этому историческому состоянию кода.
Рабочий процесс DVC: семантика, похожая на Git, для версионирования данных. DVC отслеживает большие файлы данных вместе с коммитами кода, позволяя точно воспроизвести любой исторический обучающий набор с помощью парных команд git checkout и dvc checkout.
# Добавляем данные под контроль версий
dvc add data/training.csv
git add data/training.csv.dvc
git commit -m "Add training data v1"
dvc push # Загружаем в удаленное хранилище
# Позже: получаем точные данные для любого исторического коммита
git checkout abc123
dvc checkout # Восстанавливает точные данные из этого коммита
Хотя версионирование на уровне файлов подходит для массивных артефактов вроде изображений и аудио, табличные наборы требуют версионирования непрерывно изменяющихся таблиц. Современные открытые табличные форматы, такие как Delta Lake, решают эту задачу, поддерживая журнал транзакций только на добавление для всех вставок, удалений строк и изменений схемы (Armbrust et al., 2020). Этот журнал дает возможности путешествия во времени: запросы обучения могут зафиксировать состояние набора данных по временной метке или идентификатору версии («путешествие во времени в Delta Lake»).
Путешествие во времени в Delta Lake: SQL-запросы определяют историческое состояние таблицы по временной метке или версии журнала транзакций.
-- Запрос данных в том виде, в каком они были на конкретную дату
SELECT * FROM training_data TIMESTAMP AS OF '2024-01-15'
-- Или по номеру версии для программного доступа
SELECT * FROM training_data VERSION AS OF 47
Два корпоративных компонента интегрируются с этими движками версионирования, чтобы обеспечить сквозную воспроизводимость. Во-первых, извлечение из хранилища признаков по моменту времени (point-in-time) оценивает признаки так, какими они были в момент наблюдения, исключая утечку меток. Во-вторых, реестр моделей записывает манифест родословной для каждой развернутой модели: хеш коммита Git (SHA), идентификатор версии данных, конфигурацию обучения и метрики оценки. В описанной ранее регрессии показателя кликабельности этот аудиторский след превращает открытое расследование ошибки в немедленное сравнение снимков.
Долгосрочное хранение балансирует аудируемость с затратами на хранение и нормами защиты данных. Производственные конвейеры большого объема используют многоуровневое хранение: горячие SSD-уровни для активного обучения и отладки, теплое объектное хранилище для периодических снимков оценки и холодный архив для записей соответствия требованиям. Поскольку бессрочное хранение данных масштаба петабайт экономически неустойчиво и часто нарушает законы о приватности, политики жизненного цикла данных должны задавать явные горизонты хранения и механизмы очистки.
Физическая архитектура хранения определяет, где живут данные и как быстро они перемещаются, но одной физической организации недостаточно, чтобы гарантировать семантическую согласованность между входами обучения и признаками вывода. Связь офлайн-пакетного обучения и обслуживания в реальном времени требует специализированной инфраструктуры признаков.
Хранилища признаков
Фундаментальная задача управления признаками в производстве — сохранять семантическую согласованность между разнородными средами выполнения: подача исторических значений признаков для обучения и текущих значений для вывода. Корректность на момент времени (point-in-time correctness) — основное эксплуатационное требование, которое побуждает команды внедрять хранилища признаков, смягчая перекос обучения и обслуживания и позволяя переиспользовать признаки между моделями.
В производственных средах конвейеры вычисления признаков часто дробятся между языками и движками выполнения. На этапе разработки модели специалисты по данным вычисляют признаки вроде user_purchase_count_30d с помощью пакетных SQL-запросов в офлайн-хранилище данных. При производственном обслуживании онлайн-микросервис вычисляет ту же метрику инкрементально из кэша в оперативной памяти. Даже если их задумано сделать идентичными, небольшие расхождения в арифметике часовых поясов, заполнении пропусков или округлении с плавающей запятой заставляют офлайн- и онлайн-признаки расходиться. Платформа Michelangelo компании Uber популяризировала хранилище признаков, чтобы устранить именно эту форму перекоса обучения и обслуживания через централизованные переиспользуемые определения признаков (Hermann and Del Balso, 2017).
Хранилище признаков
Хранилище признаков — это архитектурный слой, который централизует управление признаками машинного обучения, отделяя вычисление признаков от их использования.
- Значение: оно поддерживает корректное на момент времени историческое извлечение для обучения и согласованные определения признаков для вывода в реальном времени , снижая перекос обучения и обслуживания, когда временные метки, запоздалые заполнения, свежесть и синхронизация обработаны корректно.
- Отличие: в отличие от универсальной базы данных хранилище признаков спроектировано для двух режимов хранения: офлайн-хранилища (колоночного и пакетного) для обучения и онлайн-хранилища (ключ — значение с низкой задержкой) для обслуживания.
- Типичная ошибка: частое заблуждение состоит в том, что хранилище признаков — это лишь «место для хранения данных». На деле оно управляет определениями признаков, их значениями и извлечением; преобразование может выполняться в самом хранилище признаков, в офлайн-хранилище или в отдельном пакетном или потоковом вычислительном движке.
Хранилища признаков (с эксплуатационной точки зрения их рассматривает раздел «Хранилища признаков» главы «MLOps») создают единый источник истины для определений признаков на протяжении жизненного цикла ML. Регистрируя определение признака как единый граф вычислений, хранилище признаков вычисляет одно и то же преобразование как над историческими пакетными данными, так и над живыми потоками вывода. Такое общее определение предотвращает перекос обучения и обслуживания, устраняя незаметные падения производительности, когда модели обучаются с высокими оценками валидации, но спотыкаются в производстве. Централизация также позволяет переиспользовать признаки внутри организации: дорогие представления, например многомерные эмбеддинги пользователей, выведенные из месяцев журналов взаимодействий, вычисляются один раз и обслуживаются нескольким командам моделирования.
Чтобы согласовать противоположные профили доступа, хранилища признаков реализуют два движка хранения. Офлайн-хранилище использует колоночные форматы (такие как Parquet) на объектном хранилище большой емкости, оптимизированные для многогигабайтных последовательных сканирований при пакетном обучении. Онлайн-хранилище использует базы данных «ключ — значение» с низкой задержкой (такие как Redis), оптимизированные для точечных поисков менее 10 мс при выводе в реальном времени. Синхронизация этих двух движков требует автоматизированных конвейеров, которые передают пакетно вычисленные снимки признаков в онлайн-хранилище, тогда как потоковый прием непрерывно обновляет оба хранилища по мере поступления пользовательских событий.
Возможности путешествия во времени отличают настоящее хранилище признаков от простого кэша. Обучение требует вычисления признаков такими, какими они были в точный момент события, а не их текущих значений. Например, в модели оттока клиентов обучение на клиенте, который ушел 15 января, должно использовать признаки, вычисленные 14 января, а не текущее состояние профиля после ухода. Хранилища признаков обеспечивают корректность на момент времени с помощью as-of соединения (временного соединения): для каждого наблюдения с временной меткой движок извлечения соединяет самую свежую запись признака, метка обновления которой удовлетворяет . Этот фильтр временного неравенства гарантирует, что будущая информация не может просочиться в историческую обучающую матрицу, даже когда несколько вышестоящих таблиц признаков обновляются с разной частотой.
Производительность двух хранилищ напрямую ограничивает пропускную способность обучения и задержку обслуживания. Офлайн-хранилище должно поддерживать пакетные скорости чтения в миллионы векторов признаков в минуту по широким схемам. Онлайн-хранилище должно обеспечивать от тысяч до миллионов точечных запросов в секунду, соблюдая бюджеты задержки в единицы миллисекунд. Когда пользовательские действия (например, добавление товара в корзину) требуют свежести признаков менее секунды, потоковые конвейеры признаков непрерывно обновляют онлайн-хранилище. Этот потоковый слой вносит проблемы распределенных систем, требуя семантики обработки ровно один раз (exactly-once), чтобы предотвратить дублирование обновлений состояния при повторах, и механизмов водяных знаков (watermarks) для обработки событий, пришедших не по порядку и с опозданием.
Развертывание сквозного конвейера от сбора, приема, обработки и разметки до хранения не завершает инженерию данных. В производстве входные среды непрерывно дрейфуют: аппаратура датчиков меняется, схемы выше по потоку мутируют, а пулы разметчиков обновляются. Без активного эксплуатационного сопровождения статические конвейеры незаметно деградируют со временем.
Операционное здоровье данных
Система распознавания ключевых слов (KWS), развернутая на периферийных устройствах, запускается с точностью 98 процентов и подтвержденной согласованностью обучения и обслуживания. Через шесть месяцев точность в эксплуатации снижается до 94 процентов без каких-либо изменений весов или архитектуры модели. Сбой восходит к трем незаметным мутациям конвейера: новая аппаратура микрофонов смартфонов изменила частотную характеристику акустики, инструкции по человеческой разметке сместились без запуска повторной аннотации набора данных, а изменение схемы в метаданных пользователей выше по потоку было развернуто без предупреждения. Каждый режим отказа представляет проявление долга данных (data debt): накопленных, непроконтролированных компромиссов в качестве данных, целостности схем и происхождении, которые накапливаются через границы систем. В отличие от традиционных программных дефектов, которые вызывают ошибки сегментации или необработанные исключения, долг данных оставляет граф выполнения работать нормально, тогда как лежащее в основе статистическое распределение деградирует. Эксплуатация надежных производственных систем требует формализовать этот долг: классифицировать его источники, количественно оценивать его накопление относительно целевых уровней обслуживания и применять структурированные протоколы отладки, когда производственные метрики деградируют.
Категории долга данных
Сбой периферийного KWS иллюстрирует четыре различные категории долга данных. Акустический сдвиг, вызванный аппаратурой, составляет долг свежести; расходящийся стандарт аннотирования вводит долг качества; а незаметная модификация метаданных порождает одновременно долг схемы и долг документации. Хотя каждая категория требует своих инструментов диагностики и протоколов исправления, у них общий механизм отказа: неявная связанность через непроконтролированные интерфейсы.
Долг данных
Долг данных — это сложный процент неявной связанности и отсутствующей документации в стеке данных ML.
- Значение: он проявляется как незаметная деградация производительности и растущие накладные расходы на сопровождение, вызванные неуправляемыми зависимостями конвейера или необнаруженными сдвигами распределений.
- Отличие: в отличие от технического долга, связанного с кодом, который вызывает предупреждения компилятора, сбои тестов или исключения времени выполнения, долг данных позволяет вычислениям успешно завершаться, выдавая статистически недопустимые результаты.
- Типичная ошибка: частое заблуждение — считать долг данных просто «плохими данными». На деле это сбой архитектуры системы: он возникает, когда допущения обучающего распределения больше не обеспечиваются на границе системы.
Первая категория — долг документации: происхождение данных, семантический смысл и параметры сбора остаются незаписанными. Когда наборы данных не сопровождаются паспортами наборов данных или карточками данных (Gebru et al., 2021; Pushkarna et al., 2022), колонки признаков лишены описательных метаданных, а шаги преобразования остаются недокументированными, сопровождение конвейера рушится при смене персонала команды. Как показано в работе (Sambasivan et al., 2021), отсутствующие метаданные и незафиксированные практики сбора данных запускают нарастающие каскады данных в системах с высокими ставками. Инженерам последующих стадий приходится восстанавливать семантику признаков из устаревших скриптов приема, аудиты происхождения не проходят проверки соответствия требованиям, а невысказанные допущения — например, динамические диапазоны датчиков или соглашения о единицах измерения — порождают незаметные аномалии предсказаний, когда меняется инструментирование выше по потоку.
Вторая категория, долг схемы, возникает из накопленных обходных решений в преобразованиях и несогласованных миграций. Когда вышестоящие сервисы меняют структуру полезной нагрузки или семантику полей, команды часто применяют локальные заплатки — например, извлечение строк регулярными выражениями или подстановку NULL по умолчанию — вместо обновления контрактов данных на границе производителя. Со временем эти заплатки создают хрупкие слои парсинга, характеризующиеся ветвлением по версиям, избыточными парсерами временных меток и защитными преобразованиями типов. На границе приема непроверенная мутация схемы может незаметно изменить ранг собранного тензора, отбросить разреженные признаки или внести индексы «вне словаря», которые сталкиваются с зарезервированными токенами эмбеддингов. Как установлено в анализе джунглей конвейеров («Четыре базовые опоры»), нарушения контрактов выше по потоку часто маскируются под сбои сходимости нижестоящих моделей или аномалии вывода.
Третья категория, долг качества, состоит из известных дефектов данных, которые остаются неисправленными из-за сроков поставки или вычислительных бюджетов. Обучающий корпус с частотой ошибок меток 3 процента представляет конкретный долг качества: каждый прогон обучения на этом корпусе оптимизирует модель под испорченные цели. Долг качества нарастает, когда предсказания моделей служат признаками или псевдометками для нижестоящих моделей, усиливая шум меток в зависимых сервисах. Характерные эксплуатационные метрики включают накопленные расхождения аннотаций, неустраненные перекосы демографического представительства и неочищенные почти дублирующиеся записи, которые искусственно завышают оценки валидации через утечку данных.
Четвертая категория, долг свежести, возникает, когда статичные обучающие наборы расходятся с развивающимися производственными распределениями. Модель, обученная на поведении пользователей 2023 года и развернутая в 2025 году, несет существенный долг свежести: ковариатные и концептуальные сдвиги между историческим обучающим образцом и живым трафиком систематически снижают точность вывода. Долг свежести накапливается незаметно, потому что устаревшие параметры продолжают выполнять матричные умножения без аппаратных исключений или сбоев времени выполнения. Эксплуатационные индикаторы включают отставание частоты обучения (когда время с последнего прогона обучения превышает интервал сдвига распределения), устаревание кэша в онлайн-хранилищах признаков и статические таблицы поиска, которые не отражают недавнее состояние предметной области. Управление этими обязательствами требует установления явных количественных порогов для каждой категории.
Измерение и прогнозирование долга данных
В отличие от технического долга, который можно оценить метриками сложности кода, долг данных требует специализированных подходов к измерению. «Метрики долга данных» задает примерные пороги предупреждения и критические пороги для каждой категории долга, делая долг данных отслеживаемым как цель уровня обслуживания (SLO) инженерной системы, а не представляя универсальных стандартов.
| Категория долга | Метрика | Порог предупреждения | Критический порог |
|---|---|---|---|
| Документация | % наборов данных с карточками данных | < 80% | < 50% |
| Документация | % колонок с описаниями | < 90% | < 70% |
| Схема | Ветви версий схемы | > 3 | > 10 |
| Схема | % преобразований с try/catch | > 20% | > 50% |
| Качество | Известная частота ошибок меток | > 1% | > 5% |
| Качество | Документированные метрики смещения | Не измеряются | Измеряются, но не устраняются |
| Свежесть | Дней с последнего переобучения | > 90 дней | > 365 дней |
| Свежесть | PSI относительно базового уровня обучения | > 0,1 | > 0,25 |
Метрики долга данных: иллюстративные пороги для обнаружения накопления долга данных в четырех категориях. Пороги предупреждения указывают на долг, требующий внимания в ближайших циклах планирования; критические пороги — на долг, требующий немедленного исправления, чтобы предотвратить деградацию системы. Строка PSI использует распространенные эксплуатационные диапазоны мониторинга дрейфа, тогда как остальные строки следует калибровать под толерантность к риску и стоимость отказа конкретной ML-системы.
Долг данных накапливается через связанные петли обратной связи в производственных конвейерах. Выходы моделей часто поступают в нижестоящие озера данных как псевдометки или синтетические признаки; любое неисправленное смещение меток или испорченное предсказание в вышестоящей модели тем самым кодифицируется в эталонную истину зависимых систем. Одновременно деградирует код приема: каждое защитное обходное решение, добавленное для обработки недокументированной мутации схемы, увеличивает цикломатическую сложность, делая последующие миграции схем более склонными к сбою. По мере того как дрейф распределения неуклонно расширяет расхождение между обучающим базисом и живыми потоками вывода, неподдерживаемые системы испытывают нарастающие накладные расходы на сопровождение. Чтобы смоделировать чувствительность сопровождения конвейера к неустраненному долгу, пусть — начальный уровень долга, — предполагаемая чистая скорость накопления за период планирования, а — число прошедших периодов. Модель планирования — уравнение «накопление долга» — проецирует накопленное обязательство:
Как показано на рисунке ниже, даже умеренные различия в периодической скорости накопления дают расходящиеся траектории на длительных эксплуатационных горизонтах. Эта геометрическая формулировка служит эвристикой для планирования, а не точным физическим законом; в производственных средах накопление долга часто прерывается дискретными миграциями выше по потоку, а не постоянным ростом.
Иллюстративные траектории долга при допущении постоянных скоростей.
Стратегии устранения долга
Количественная оценка метрик долга данных превращает открытый дефицит сопровождения в бюджет инженерных работ, который можно использовать. Устранение можно затем встроить в регулярные эксплуатационные циклы до того, как сбои конвейера нарушат работу нижестоящих сервисов. Каждая категория долга требует отдельного технического вмешательства, но все четыре требуют устойчивого выделения мощностей, а не реактивного разбора инцидентов.
Для долга документации устранение сосредоточено на институционализации метаданных набора данных. Инженерные команды могут выделять плановые интервалы сопровождения, чтобы документировать происхождение данных, семантику колонок тензоров и графы предобработки. Приоритетная работа с таблицами признаков, которые используются многими потребителями, гарантирует, что общие зависимости несут полные описания схем и родословную преобразований.
Устранение долга схемы требует превентивного соблюдения контрактов на границах производителей. Явные контракты схем между сервисами логирования выше по потоку и конвейерами приема ниже по потоку, закодированные с помощью инструментов валидации вроде Pandera или Great Expectations, задают строгие схемы типов, границы значений и ограничения на допустимость пустых значений. Быстрый отказ при нарушениях схемы не дает защитным заплаткам с подстановкой NULL и разбором строк накапливаться внутри конвейеров преобразования.
Работа с долгом качества требует структурированных процессов для исправления выявленных ошибок аннотирования, дубликатов образцов и пробелов в демографическом представительстве. Команды должны вести отслеживаемый список ошибок с количественно измеренными скоростями сокращения и включать курирование набора данных в планирование спринтов наряду с задачами архитектуры модели, а не откладывать его бессрочно.
Долг свежести требует автоматизированного мониторинга дрейфа в сочетании с основанным на свидетельствах ритмом переобучения. Интеграция мониторов индекса стабильности популяции (PSI) и дивергенции Кульбака — Лейблера (KL) («Обнаружение дрейфа данных и реакция на него») в эксплуатационные дашборды позволяет конвейерам автоматически запускать задания переобучения, когда расстояние распределений превышает проверенные пороги, вместо ожидания, пока деградирует точность в производстве.
Как и технический долг в традиционной инженерии ПО, долг данных — это присущий инженерный компромисс. Стратегический долг, например принятие минимальной документации или отложенной дедупликации ради немедленного окна развертывания, может быть осознанным инженерным выбором. Режим отказа — неосознанный долг: компромиссы, введенные без измерения, которые незаметно накапливаются, пока исправление не потребует перестройки конвейера. Управление здоровьем данных требует рассматривать долг данных как операционный параметр, уравновешиваемый со скоростью разработки, задержкой обслуживания и вычислительными бюджетами.
Отладка конвейеров данных
Когда долг данных созревает, он проявляется как необъяснимая деградация точности, падения конвейеров приема или расхождения производительности между подгруппами. Эффективная отладка изолирует первопричины на границе «данные — машина»: «Каскады данных» показывают, что дефекты приема выше по потоку запускают аномалии ниже по потоку; «Согласованность обучения и обслуживания» выявляет расхождения между офлайн-генерацией признаков и онлайн-обслуживанием; а «Обнаружение дрейфа данных и реакция на него» находит статистическое расхождение во времени. «Блок-схема отладки конвейера данных» сводит эти диагностические принципы в иерархическую процедуру первичной диагностики.
Блок-схема отладки конвейера данных: четыре последовательные проверки расставляют приоритеты гипотез о дрейфе, переобучении или артефактах данных, перекосе обучения и обслуживания, а также покрытии подгрупп. Каждая ветвь предлагает гипотезу для исследования, а не окончательный диагноз; если ни одно из перечисленных условий не выполняется, последний блок предлагает проверить архитектуру модели или ее емкость.
Сбои производственного ML часто восходят к зависимостям от данных и сдвигам операционного конвейера, а не только к архитектуре модели.35 Приоритетная проверка перекоса обучения и обслуживания, дрейфа распределения и шума меток выделяет режимы отказа входов выше по потоку до начала дорогостоящих архитектурных переработок или перебора гиперпараметров.
Заблуждения и ловушки
Конвейеры данных редко падают с немедленными сбоями времени выполнения; вместо этого они незаметно искажают распределения признаков, портят состояние обучения или морят голодом дорогие кластеры ускорителей. Эти заблуждения и ловушки разбирают физические узкие места и архитектурные ошибочные представления, которые подрывают производственные системы.
Заблуждение и ловушка
Заблуждение: больше данных всегда улучшает производительность модели.
За порогом дополнительные данные дают убывающую отдачу, которой управляют эмпирические законы масштабирования. Исследования в компьютерном зрении, переводе и языковом моделировании показывают, что тестовая потеря следует степенному закону от размера набора данных, так что каждое последующее снижение ошибки требует экспоненциально большего объема образцов (Hestness et al., 2017). В системных терминах избыточные примеры потребляют дисковый ввод-вывод, пропускную способность шины от хоста к устройству и вычислительные ресурсы ускорителя, не внося нового градиентного сигнала. Эвристика полезного для задачи сигнала из раздела «Физика данных» передает этот компромисс: наращивание сырого объема байтов без сохранения плотности информации раздувает инфраструктурные затраты, давая незначительное улучшение потери на оценке.
Заблуждение и ловушка
Ловушка: планирование миграции петабайтов как передачи, ограниченной только пропускной способностью.
Деление исходного размера набора данных на пропускную способность сетевого канала дает теоретическое время передачи по проводу, но передача по проводу редко является критическим путем. Гравитация данных («Физика данных») связывает крупные наборы данных с сетью окружающей инфраструктуры: конвейеры преобразования при приеме, проверки схем, политики контроля доступа и нижестоящие потребители. Перенос корпуса масштаба петабайт между облаками или дата-центрами требует рефакторинга конвейеров, повторной валидации целостности данных, прогрева кэша и переиндексации метаданных. Поэтому инженерное время эксплуатации, необходимое для адаптации зависимых систем, многократно превышает время сетевой передачи.
Заблуждение и ловушка
Заблуждение: предобработку данных можно завершить один раз и больше к ней не возвращаться.
Конвейеры предобработки превращают сырые наблюдения в тензоры с помощью преобразований, параметризованных по историческим распределениям: словарей токенизации, векторов масштабирования по среднему и дисперсии, таблиц частот категорий и границ обрезки числовых значений. Когда производственные распределения дрейфуют, эти статические преобразования незаметно ломаются. Токенизаторы сталкиваются с ростом доли слов вне словаря, фиксированные статистики нормализации искажают активации признаков в режимы вне распределения, а статические границы обрезки обрезают динамический диапазон. Поддержание верности конвейера требует автоматизированного мониторинга входных тензоров и плановой перекалибровки статистик предобработки наряду с переобучением модели.
Заблуждение и ловушка
Ловушка: игнорирование стоимости сериализации данных.
Профилирование часто сосредоточено исключительно на выполнении ядер GPU, тогда как загрузчики данных тихо разбирают сырые файлы JSON или CSV. Разбор текстовых записей требует от ядер CPU хоста сотен тактов на образец на декодирование строк, токенизацию, преобразования из ASCII в числа с плавающей запятой и выделение памяти в куче. Это узкое место сериализации на CPU морит голодом вычислительные движки ускорителей, оставляя GPU простаивать в ожидании передачи входов по PCIe. Двоичные форматы сериализации, такие как Apache Arrow или массивы с отображением в память, устраняют накладные расходы на разбор, поддерживая прямую десериализацию без копирования в закрепленную память. Для табличных схем колоночные форматы, такие как Parquet, устраняют дисковый ввод-вывод, читая только нужные проекции столбцов. Сравнение скорости приема данных со скоростью потребления ускорителя показывает, не ограничивает ли десериализация на CPU хоста пропускную способность обучения.
Заблуждение и ловушка
Заблуждение: высокая точность на обучении означает готовность к производству.
Точность на обучении отражает эмпирическую оптимизацию на исторических обучающих распределениях, а валидация на удержанных данных оценивает обобщение при тех же допущениях о выборке. Производственные среды вносят немоделированные граничные случаи, шум датчиков и живой распределительный дрейф. Модель с высокой точностью валидации терпит неудачу при развертывании, если вышестоящие конвейеры признаков мутируют или тайм-ауты вывода запускают значения по умолчанию. Диагностика регрессий после развертывания требует структурированной изоляции первопричин — дрейфа данных, порчи признаков и путей выполнения системы («Блок-схема отладки конвейера данных»), а не опоры на одну агрегированную офлайн-метрику.
Заблуждение и ловушка
Ловушка: игнорирование перекоса обучения и обслуживания до развертывания.
Перекос обучения и обслуживания возникает, когда логика генерации признаков расходится между офлайн-конвейером обучения и онлайн-средой вывода. Признаки обучения обычно извлекаются пакетно с помощью фреймворков вроде Apache Spark или SQL-движков над озерами данных. Онлайн-признаки должны вычисляться в бюджетах задержки на уровне миллисекунд внутри микросервисов приложения. Расхождения в точности чисел с плавающей запятой, агрегациях временных окон, версиях библиотек или тонкой временной утечке (например, включение данных с временной меткой после точки предсказания) вносят незаметное численное расхождение. Поскольку модель по-прежнему получает корректные векторы с плавающей запятой, вывод проходит без исключений времени выполнения, а качество предсказаний деградирует. Смягчение этой ловушки требует общей логики преобразования, воспроизводимых хранилищ признаков и автоматизированных тестов паритета перед развертыванием, которые проверяют эквивалентность признаков в офлайн- и онлайн-путях.
Заблуждение и ловушка
Заблуждение: синтетические данные могут полностью заменить сбор реальных данных.
Синтетические данные обогащают обучающие наборы, генерируя редкие граничные случаи, контролируемые физические вариации или образцы, соответствующие требованиям приватности, но их полезность ограничена точностью генератора. Генеративные модели и симуляторы выбирают образцы только из распределений внутри носителя своих параметризованных допущений. При обучении исключительно на синтетических данных модели переобучаются под артефакты генератора и остаются уязвимыми для немоделированной дисперсии реального мира. Например, в системе KWS детектор, обученный полностью на синтезированной речи, деградирует при встрече с подлинной акустической реверберацией, разнообразными акцентами, искажениями частотной характеристики микрофонов и нестационарным фоновым шумом. Синтетическая генерация дополняет эмпирический сбор, но репрезентативные наблюдения реального мира остаются обязательными для проверки жизнеспособности развертывания.
Заблуждение и ловушка
Ловушка: пренебрежение версионированием данных, пока отладка модели не начнет его требовать.
Рассмотрение обучающих наборов как изменяемых каталогов объектного хранилища разрушает воспроизводимость экспериментов. Когда переобученная модель демонстрирует регрессию производительности, неверсионированный конвейер не позволяет инженерам определить, связана ли регрессия с изменившейся инструкцией по разметке, незаметной порчей при миграции схемы или подлинным сдвигом распределения. Как только динамические таблицы перезаписаны или сырые журналы источников удалены, восстановить исторические обучающие входы становится невозможно. Как установлено в разделе «Родословная преобразований», надежная родословная данных требует, чтобы каждая контрольная точка модели неизменно связывалась с конкретным снимком набора данных, хешем кода преобразования и профилем конфигурации. Отложенное версионирование данных превращает стандартный анализ первопричин в спекулятивную криминалистику по утраченному состоянию обучения.
Итоги
В системах машинного обучения обучающие данные работают как исполняемый исходный код: изменения набора данных меняют обученное поведение скомпилированной модели без изменения хотя бы одной строки алгоритмического кода. Поскольку процедуры оптимизации извлекают операционную логику напрямую из наблюдений, ошибки на этапе сбора данных, согласованности схем и разметки усиливаются на последовательных стадиях конвейера в виде каскадов данных. Поэтому подготовка данных — это задача совместного проектирования систем: иерархии хранения определяют скорость, с которой подаются ускорители, архитектуры приема балансируют задержку потоковой обработки и операционные затраты, а контракты признаков предотвращают незаметный перекос обучения и обслуживания.
Данные — это исходный код
- Каскады данных делают качество на входе самой выгодной инвестицией: ошибки сбора усиливаются на каждой стадии конвейера («Каскады качества данных»). Четыре опоры (качество, надежность, масштабируемость, управление) организуют профилактику, а долг документации, схемы, качества и свежести требует непрерывного устранения.
- Данные — это код: версионируйте, тестируйте, проверяйте: набор данных — исходный код ML-системы. Применяйте ту же строгость через контроль версий, тесты валидации и ревью данных.
- Согласованность обучения и обслуживания не подлежит обсуждению: преобразования признаков, общие для обучения и обслуживания, должны иметь эквивалентную семантику и переиспользовать одно и то же выученное состояние, например константы нормализации и отображения словарей.
- Выбор архитектуры конвейера имеет большие последствия для стоимости: потоковая обработка обходится дороже в эксплуатации, чем пакетная, а ETL обменивает экономию хранилища на больший объем работы при изменении схемы. Выбирайте паттерны приема по ценности задержки, а не по привлекательности реального времени.
- Затраты на разметку доминируют и требуют значительного выделения ресурсов: разметка может стоить в сотни раз, а иногда более чем в тысячу раз больше одного оптимизированного прогона обучения; в эталонном расчете в разделе «Масштабируемость и оптимизация стоимости» это соотношение составляет от 521 до 1 562 раз. Разметка может оставаться дорогим узким местом планирования, даже когда работа по аннотированию распараллелена.
- Иерархия хранения определяет скорость итераций: разрыв в пропускной способности в 50 раз между локальным NVMe (5 ГБ/с) и облачным объектным хранилищем (100 МБ/с) определяет, происходят ли итерации ежедневно или еженедельно.
- Уравнение деградации становится применимым благодаря мониторингу дрейфа и результатов: метрики расхождения, такие как KL, измеряют изменения между и , тогда как размеченные результаты или проверенные прокси определяют, соответствуют ли эти изменения деградации модели.
Пример KWS сочетает отобранный, краудсорсинговый и синтетический сбор; проверку согласованности; многоуровневое хранение для 23,4 млн аудиообразцов объемом 748,8 ГБ сырых данных; и родословную для устройств, которые слушают постоянно. На каждой стадии инженерия данных управляет физическим перемещением данных и статистическими контрактами, которые позволяют алгоритму учиться, не испытывая голодания аппаратуры и не дрейфуя незаметно в эксплуатации.
От исходного кода к исполняемому файлу
Конвейер данных выпустил чистый версионированный обучающий набор, но сам по себе набор данных ничему не учит. Глава «Вычисления в нейронных сетях» открывает этот черный ящик и рассматривает ось алгоритма: математические операции, которые превращают подготовленные примеры в выученное поведение и делают нейронные сети предсказуемыми, отлаживаемыми и оптимизируемыми.
-
Озеро-хранилище (lakehouse): сочетает дешевое хранение озера данных (без схемы) с семантикой запросов хранилища (транзакции ACID, принудительное соблюдение схемы) через транзакционные табличные слои, такие как Delta Lake. Для рабочих нагрузок ML озеро-хранилище сокращает копирование ETL (извлечение, преобразование, загрузка) между озером и хранилищем и позволяет вычислять признаки прямо на слое хранения, где уже лежат данные. Это прямой ответ на гравитацию данных, поскольку многократное копирование петабайтных объемов увеличивает стоимость (Armbrust et al., 2020; Zaharia et al., 2021). ↩
-
Каскады данных: сбой «незаметен», потому что деградируют входы модели, а не код модели: поврежденные данные могут пройти модульные тесты и выглядеть здоровыми при обычном мониторинге системы. По описанию (Sambasivan et al., 2021), каскады часто невидимы и проявляются с задержкой: ошибочные практики с данными могут обнаружиться только после того, как последующая оценка, развертывание или сбои у пользователей покажут, что модель училась на неверном сигнале. Исправление тогда требует проследить проблему назад через сбор данных, разметку, инжиниринг признаков и решения по оценке, а некоторые команды перезапускают или прекращают затронутую работу. ↩
-
Регистрация Voice Match: повторение фразы «OK Google» создает микромасштабный конвейер данных: фильтры качества отсеивают зашумленные образцы, надежность завершает регистрацию, масштабируемость помещает модель в память всегда включенной системы на кристалле (SoC), а управление контролирует хранение, обработку и срок хранения. Инженерия данных применима везде, где данные определяют поведение системы. ↩
-
Островок всегда включенной части системы на кристалле (SoC): современные системы на кристалле разделяют домены питания, так что маломощный «всегда включенный» островок (обычно с потреблением ниже милливатта) следит за триггерами пробуждения, пока основной процессор спит. Критическое ограничение в том, что этот островок должен вмещать и веса модели, и код предобработки аудио в своей выделенной памяти SRAM: раздельный бюджет, который заставляет архитектуры KWS оптимизировать полный объем, а не только число параметров. ↩
-
ImageNet: работа 2009 года сообщала о 3,2 млн изображений в 5 247 синсетах; полная база позже достигла примерно 14,2 млн изображений в 21 841 синсете, тогда как задача использовала подмножество из 1 000 классов (Deng et al., 2009; Russakovsky et al., 2015; Deng et al., 2024). Ее ценность как эталона неотделима от инженерии данных: команда Фей-Фей Ли создала инфраструктуру разметки, которую позже могли переиспользовать другие команды. Оговорка — чувствительность к процедурам аннотирования и умеренные сдвиги распределения: модели, настроенные на распределение ImageNet, могут показывать худший результат на родственных, но смещенных тестовых наборах (Recht et al., 2019; Beyer et al., 2020). ↩
-
Соотношения цен: цены на извлечение из архива и соотношения уровней отражают политику провайдера, а не физический инвариант. В этом иллюстративном сценарии ускоренное извлечение стоит втрое дороже стандартного уровня; фактические цены и доступность уровней нужно проверять перед развертыванием. ↩
-
Amazon Mechanical Turk (MTurk): краудсорсинговая платформа, которая распределяет небольшие задачи между удаленными исполнителями и позволяет масштабировать аннотирование за пределы процессов только с экспертами. (Snow et al., 2008) оценивают этот подход для задач аннотирования естественного языка и показывают, что аннотации неэкспертов могут быть полезны, если дизайн задачи и контроль качества продуманы. Для сбора аудио со словами пробуждения те же компромиссы проявляются в предметной форме: масштаб привлекателен, но поступающие записи все равно нужно проверять по акустическим критериям, таким как отношение сигнала к шуму, длительность и корректность записи, прежде чем их безопасно включить в обучающий набор. ↩
-
Критерий Колмогорова — Смирнова (K-S): непараметрический тест, который измеряет максимальное расстояние между двумя эмпирическими функциями распределения без предположения о параметрическом семействе распределений (Berger and Zhou, 2014). В конвейерах ML критерий K-S обычно используется как одномерный детектор дрейфа непрерывных признаков, при этом такие пороги, как , служат триггерами для расследования, а не универсальными правилами отказа. Дискретные и категориальные переменные требуют тестов и калибровки, подходящих для их распределений. ↩
-
Материализованное представление: оптимизация базы данных, которая предвычисляет результаты запроса и кэширует их как физическую таблицу. Для систем ML риск структурный: когда материализованное представление обновляется по другому расписанию в средах обучения и обслуживания, значения признаков, на которых обучалась модель, могут разойтись с тем, что она получает при выводе, снижая точность без выдачи ошибки выполнения. ↩
-
Дрейф качества меток: деградация надежности аннотаций со временем, отличная от сдвигов распределения самих данных. Этот тип дрейфа невидим для стандартного мониторинга признаков, поскольку признаки остаются стабильными, а метки деградируют: усталость разметчиков, смена пула исполнителей или эволюция инструкций незаметно портят эталонную истину, на которой учится модель. Обнаружение требует мониторинга межаннотаторского согласия в скользящих временных окнах и сравнения автоматических меток с периодическими экспертными аудитами. ↩
-
Каппа Коэна: введена (Cohen, 1960) для измерения согласия между оценщиками с поправкой на согласие, ожидаемое из распределений классов оценщиков, которое игнорирует сырой процент совпадений. Если два независимых разметчика каждый помечают 90 процентов изображений как «не спам» в бинарной задаче, их ожидаемое согласие составляет 82 процента, поэтому сырое согласие может вводить в заблуждение. Статистика обозначается ; интерпретационные диапазоны, такие как категории Лэндиса — Коха, являются описательными эвристиками, а не универсальными порогами качества данных (Landis and Koch, 1977). ↩
-
Эволюция схемы: этот режим отказа возникает из-за отсутствия контрактного тестирования между вышестоящими производителями данных и нижестоящими потребителями ML. Пока «громкие» сбои, такие как переименованный столбец, ломают явные предположения и сразу приводят к падению конвейера, «тихие» сбои опаснее. Поле, которое меняет тип с целого числа на строку, может пройти валидацию, но испортить логику признаков без немедленного обнаружения. ↩
-
Предохранитель (circuit breaker): назван по трем состояниям работы — замкнут (нормальный поток), разомкнут (сбои блокируются) и полуоткрыт (пробный запрос на восстановление) — по аналогии с электрическим предохранителем, который прерывает ток при перегрузке. В конвейерах данных ML предохранитель не дает отказавшему сервису вычисления признаков распространять тайм-ауты по всему пути обслуживания: как только число сбоев превышает порог, предохранитель размыкается, и конвейер переключается на кэшированные или признаки по умолчанию, а не ждет мертвого сервиса. ↩
-
Извлечение, преобразование, загрузка (ETL): традиционный ETL проверяет схему и типы данных — детерминированные проверки, которые либо проходят, либо нет. ETL для ML должен дополнительно проверять распределительные свойства: что распределение значений не сместилось так, чтобы ухудшить производительность модели. Это требует статистических тестов (K-S, PSI), а не валидации схемы, где порог прохождения — бизнес-решение, а не техническое. Дополнительный компромисс — жесткость: изменение логики вычисления признаков требует переобработки всего набора данных из исходных источников, а стоимость растет линейно с объемом данных. ↩
-
Извлечение, загрузка, преобразование (ELT): этот подход хранит сырые данные до преобразования, позволяя командам пересмотреть запрос преобразования и перезапустить его по сохраненным входам без повторного приема из исходных систем. Время итерации по-прежнему зависит от объема данных, сложности запроса, емкости хранилища и стратегии материализации. ↩
-
Теорема CAP (согласованность, доступность, устойчивость к разделению): выдвинута как гипотеза (Brewer, 2000) и формально доказана (Gilbert and Lynch, 2002). Во время сетевого разделения линеаризуемая согласованность может потребовать отклонения запросов, тогда как доступная система может вернуть устаревшие или расходящиеся значения. CAP не гарантирует паритета преобразования признаков и корректности на момент времени (point-in-time correctness). ↩
-
Apache Kafka: Kafka использует разделенный журнал с лидером и упорядочивает записи внутри каждого раздела, а не во всей теме. Долговечность и доступность записи при сбоях зависят от режима подтверждения, репликации, требований к синхронным репликам и поведения при выборе лидера. ↩
-
JSON (JavaScript Object Notation): гибкость схемы, которая делает JSON распространенным форматом для API, создает узкое место валидации на границе приема. В отличие от двоичных форматов с заранее заданными схемами, каждый документ JSON требует разбора и валидации схемы, прежде чем его можно стандартизировать для последующего использования. Эти накладные расходы на запись могут делать прием медленнее, чем у двоичных форматов вроде Protobuf; разница зависит от схемы, парсера, полезной нагрузки и нагрузки. ↩
-
Статистическое обнаружение дрейфа: средние, дисперсии и квантили, которые отслеживает мониторинг качества, служат ранними сигналами для члена расхождения уравнения деградации. Сдвиг средней длительности сессии с восьми до 12 минут за полгода может указывать на дрейф; внезапное падение до трех минут может указывать на сбой сбора. Прежде чем выбирать переобучение или исправление в исходной системе, нужны проверки результатов и расследование источника. ↩
-
Хранилище признаков: основной режим отказа — перекос обучения и обслуживания: признаки обучения могут вычисляться пакетно (например, скользящие семидневные средние по историческим данным), тогда как признаки обслуживания вычисляются в реальном времени из потокового источника. Даже при формально общей логике различия во времени и состоянии могут создавать систематические расхождения. Хранилище признаков может снизить этот риск, координируя определения, источники данных, обработку временных меток и офлайн- и онлайн-материализацию, но корректность по-прежнему зависит от реализации, свежести и синхронизации. Michelangelo из Uber помог закрепить этот двойной интерфейс для пакетного обучения и обслуживания с низкой задержкой (Hermann and Del Balso, 2017). ↩
-
MFCC (мел-частотные кепстральные коэффициенты): это преобразование достигает компактности и устойчивости к шуму, применяя мел-шкальную фильтрацию, которая избирательно подчеркивает частоты, по которым люди различают речь. Этот процесс сокращает тысячи сырых аудиоотсчетов из небольшого временного окна (например, 25 мс) до всего 13–39 коэффициентов — агрессивного снижения размерности, которое требуется для постоянно работающего аппаратного обеспечения масштаба килобайт. Несовпадение параметров между обучением и обслуживанием создает перекос признаков и может снизить точность. ↩
-
Спектрограмма: кратковременное преобразование Фурье (STFT) вычисляет это двумерное представление, превращая одномерную форму волны в время-частотное изображение. Это представление позволяет моделям ML в стиле изображений обрабатывать аудио, но также создает жесткую зависимость: несовпадение параметров STFT (например, окна 25 мс против 30 мс) меняет представление признаков между обучением и обслуживанием и может ухудшить производительность. ↩
-
Идемпотентность: от латинских idem («тот же») и potens («имеющий силу») — буквально «имеющий ту же силу при повторном применении». В ML-конвейерах идемпотентность обеспечивает безопасные повторы после частичных сбоев: неидемпотентная операция (например, добавление в журнал) при повторе создает дубликаты. Идемпотентная операция оставляет одно и то же итоговое состояние после однократного или многократного применения. ↩
-
Parquet: колоночный формат хранения, который организует данные по столбцам, а не по строкам. Для описанных оптимизаций на одной машине это критично: вместо того чтобы расточительно читать целую строку CSV ради нескольких столбцов, читатель Parquet загружает только нужные для вычисления столбцы. Итоговое сокращение ввода-вывода зависит от выбранных столбцов, кодирования, сжатия и нагрузки. ↩
-
MapReduce: разработан (Dean and Ghemawat, 2004) в Google для обработки многопетабайтного веб-индекса компании на тысячах типовых машин. Его планировщик предпочтительно назначает задачи map узлам, которые хранят входные данные, сокращая сетевой трафик входа. Этот паттерн, учитывающий локальность, повлиял на Hadoop и позже на распределенные системы обработки данных. ↩
-
Закон Амдала: (Amdahl, 1967) изложил аргумент о последовательной доле на конференции AFIPS Spring Joint Computer Conference в 1967 году, объяснив, почему многопроцессорные системы сталкиваются с убывающей отдачей. Исходная мысль — что последовательная доля нагрузки накладывает жесткий потолок на параллелизм — применима к конвейерам данных напрямую: такие операции, как вычисление глобальных статистик нормализации, вынуждают последовательные фазы агрегирования, ограничивающие ускорение независимо от того, сколько рабочих процессов параллельно обрабатывают отдельные записи. ↩
-
Родословная данных: когда модель выдает ошибочное или дискриминационное предсказание, родословная помогает инженерам определить, возникла ли вносящая вклад проблема в сырых данных, вычислении признаков, обучении или обслуживании. Полученный след может поддержать расследование инцидентов и документационные обязанности, специфичные для юрисдикции, но его полезность зависит от полной инструментации и сохраненной истории; она не гарантирует объяснения поведения модели. ↩
-
Эталонная истина (ground truth): термин из дистанционного зондирования, где орбитальные измерения проверяются отправкой команды на физическое место — «землю» — чтобы установить «истину». Этимология несет системное предупреждение: метки ML — это прокси реальности, а не сама реальность. Когда разметчик краудсорсинга помечает изображение как «кошка», эта метка отражает суждение разметчика, а не объективный факт. Каждая последующая метрика — точность (accuracy), прецизионность (precision) и полнота (recall) — измеряется относительно этого прокси, а значит, ошибки качества меток незаметно распространяются на каждую оценку модели. ↩
-
Слабый надзор: парадигма «программирования данных», которая обменивает часть ручного труда аннотирования на предварительные усилия по написанию и проверке программных функций разметки. После написания функцию можно дешево применять в масштабе, но выполнение, разрешение конфликтов, мониторинг качества и сопровождение по-прежнему стоят денег; полезное сравнение зависит от нагрузки, а не буквально нулевой предельной стоимости. ↩
-
Активное обучение: переворачивает традиционную парадигму разметки: вместо случайного выбора примеров для разметки модель запрашивает те, которые ей нужнее всего, как правило, там, где неопределенность предсказания наибольшая (Settles, 2009). Это может сократить число меток, необходимых для достижения целевой точности, но инфраструктурный компромисс — это вычисления вместо меток: при $0,01 за изображение оценка полного пула из 10 млн примеров стоит $100 000 до получения каких-либо человеческих меток. Активное обучение становится бюджетным рычагом только тогда, когда пул кандидатов предварительно отфильтрован, вывод намного дешевле или вычислительный бюджет отделен от бюджета разметки. ↩
-
Принудительное выравнивание (forced alignment): при известной транскрипции выравниватель оценивает, где в аудио встречаются ее слова, часто используя покадровые акустические оценки и декодирование последовательностей. Точность временного разрешения зависит от модели, признаков, языка и качества записи, поэтому оценки границ все равно требуют проверки качества. Известная транскрипция делает сегментацию на уровне слов намного дешевле ручной разметки каждого фрагмента, хотя вычисления, проверка и исправление ошибок остаются. ↩
-
Схема при чтении (schema-on-read): применяет определения структуры данных во время запроса, а не при приеме, в отличие от схемы при записи (schema-on-write, традиционные базы данных), где данные должны соответствовать заранее заданной структуре до сохранения. Для конвейеров ML на ранней стадии разработки схема при чтении позволяет быстро экспериментировать: команды могут хранить сырые данные датчиков, изображения и журналы, не фиксируя схему признаков заранее. Компромисс — управление: без обязательных схем озера данных вырождаются в «болота данных», где поиск и валидация обучающих данных становятся узким местом. ↩
-
NVMe (Non-Volatile Memory Express): протокол хранения, который подключается напрямую к шине PCIe с очередями команд на 64K, обеспечивая последовательную пропускную способность 5–7 ГБ/с и задержку на уровне микросекунд. Контраст с SATA SSD (500 МБ/с, одна очередь) — разрыв в пропускной способности в 10 раз, который может стать узким местом конвейера обучения, когда время обслуживания хранилища превышает время вычислений. ↩
-
Джефф Дин: старший научный сотрудник Google, архитектор MapReduce, BigTable, Spanner и TensorFlow. Его ключевой доклад на LADIS 2009 года свел цифры из «Иерархия задержек памяти и хранения» к инженерной эвристике: ссылка на кэш L1 (0,5 нс) и круговой обход между дата-центрами (150 мс) отличаются в раз — восемь порядков величины, которые объясняют, почему конвейер обучения, читающий признаки из удаленного хранилища вместо локального NVMe, оставляет без данных ускоритель, который должен был питать. ↩
-
Распределение отказов ML: рассматривайте паттерн доминирования данных как диагностическую эвристику, а не универсальное эмпирическое распределение. Проверки данных и эксплуатации служат начальными гипотезами для первичной диагностики, но они не исключают дефектов кода, узких мест аппаратного обмена или численной нестабильности. ↩
Принципы построения
Построение системы машинного обучения требует не только сборки компонентов модели; оно требует управления потоком информации и энергии через кремний. Часть I установила, что данные одновременно являются программой и физическим якорем каждой ML-системы. Опираясь на этот якорь, часть II переходит к взаимодействию алгоритма и машины: как математические модели совместно проектируются вокруг физических пределов аппаратуры, которая должна их исполнять. Принципы здесь начинаются с учета, который определяет, почему одни архитектуры успешны в масштабе, а другие терпят неудачу.
Железный закон систем машинного обучения
Инвариант: пусть обозначает фактическое время выполнения (wall-clock) в секундах. Здесь — объем данных в байтах, — эффективная пропускная способность соответствующего пути памяти или сети в байтах в секунду, — общее число операций с плавающей запятой, — пиковая скорость вычислений в FLOP/s, — безразмерная эффективность использования аппаратуры, а — фиксированные накладные расходы задержки в секундах, например запуск ядра или сетевой обмен туда и обратно. Когда перемещение данных, вычисления и фиксированные накладные расходы выполняются последовательно, их идеализированные времена складываются: Полное изложение см. в разделе «Железный закон систем машинного обучения».
Когда перемещение данных и вычисления перекрываются на современной аппаратуре, фактическое время выполнения следует критическому пути и не может быть меньше времени более медленного этапа плюс любой фиксированной задержки, которая остается вне перекрытия. Практический урок касается доминирования, а не безусловного суммирования.
Следствие: оптимизация редко бывает свободна от компромиссов. Снижение одного члена часто переносит узкое место на другой. Например, использование неструктурированной разреженности может сократить выполняемые арифметические операции, но разреженные представления и ядра могут снизить эффективную пропускную способность или добавить трафик индексов, увеличивая время перемещения данных . Оптимизация улучшает время выполнения только в той мере, в какой она сокращает критический путь на целевой аппаратуре.
Железный закон указывает, что оптимизировать, но не как. Архитектура решает, как это делать, еще до начала реализации.
Кремниевый контракт
Инвариант: каждая архитектура модели и режим нагрузки неявно берут обязательство перед аппаратурой — ставку на то, какой ресурс будет насыщен первым.
- ResNet-50 предполагает высокую плотность вычислений с плавающей запятой. При пакетном обучении или выводе на ускорителях она часто ограничена вычислениями: производительность ограничена .
- Llama 3 на 8 миллиардов параметров предполагает высокоскоростной доступ к памяти при авторегрессионном декодировании. При малых батчах она часто ограничена пропускной способностью: производительность ограничена .
- DLRM предполагает огромные таблицы вложений и разреженные обращения. Ее определяют и емкость, и пропускная способность: производительность зависит от того, помещаются ли таблицы вложений в доступную иерархию памяти и насколько быстро можно обслуживать разреженные обращения.
Следствие: проектировать модель, не зная, какой ресурс аппаратуры она насытит, — все равно что проектировать мост, не зная прочности стали. Проект должен быть направлен на узкое место.
Вместе железный закон и кремниевый контракт задают рамку для каждого проектного решения в части II. Последующие главы переводят эти принципы в компоненты стека ML: математические основы градиентного потока, архитектурные паттерны, которые закладывают определенные аппаратные ресурсы, фреймворки, которые отображают операции модели на аппаратуру, и системы обучения, которые исполняют ту же физику в масштабе.
Вычисления в нейронных сетях
Назначение
Почему понимание математики нейронной сети важнее, чем чтение ее кода?
Код нейронной сети может выглядеть обманчиво простым: несколько тензорных операций скрывают работу, которую должен выполнить каждый слой системы. Размерности матриц определяют объем арифметики и перемещений данных; промежуточные значения определяют нагрузку на память; диапазоны чисел и градиенты определяют, остается ли обучение устойчивым. Операция, которая по отдельности кажется дешевой, может доминировать в системе, если ее повторяют по батчу или если ее результаты нужно сохранять для обучения, поэтому длина исходного кода мало говорит о стоимости ресурсов. Две реализации одной и той же модели могут работать очень по-разному, потому что форма батча, точность и целевая машина меняют то, что помещается в память, насколько быстро выполняется вычисление и остаются ли его результаты численно корректными. Когда обучение останавливается или развертывание исчерпывает память, чтение вызова фреймворка редко показывает, какое ограничение является решающим. Численный сбой, узкое место памяти и неэффективная реализация могут давать похожие симптомы, но требовать разных решений. Поэтому диагностика и планирование требуют рассуждать от базовых операций к перемещенным байтам, сохраненным значениям и повторяемой работе. Такой взгляд способен выявить несоответствие до того, как его обнаружит дорогой прогон обучения или попытка развертывания. Эти примитивы дают устойчивый словарь, общий для архитектур, и делают программные абстракции поддающимися аудиту: непрозрачный код превращается в нагрузку, которую можно измерить, диагностировать и сопоставить с аппаратурой. В терминах D·A·M нейронные вычисления — это интерфейс, где алгоритмическая структура становится машинной работой, а физические пределы возвращаются в проектирование модели.
Цели обучения
- Объяснить, почему выученная арифметика заменила логику на правилах при распознавании многомерных паттернов
- Рассчитать число параметров, операции умножения с накоплением, объем хранения активаций и трафик памяти для многослойных сетей
- Сравнить функции активации по нелинейности, поведению градиента и аппаратной стоимости вычислений
- Применить функцию кросс-энтропийных потерь и обновления градиентов для анализа динамики обучения с учителем
- Вывести прямое и обратное распространение как матричные операции над батчами
- Проанализировать нагрузки обучения и вывода с учетом вычислений, памяти и ограничений развертывания
- Оценить сквозной конвейер распознавания документов: от предобработки через пороги решений до проверки человеком
От логики к арифметике
Набор данных, прошедший предыдущие инженерные этапы, готов к разработке модели, но примеры сами по себе не обучаются. Следующая системная граница — это модель, где данные превращаются в выученное поведение через матричные умножения, функции активации и обновления градиентов. Модель, которая корректно работает на одной машине и падает на другой, не обязательно страдает от аппаратного дефекта. Размерности ее слоев могут порождать промежуточные активации — выходы каждого слоя, которые обучение сохраняет для обратного прохода, — и они превышают доступную память. Сбой возникает из-за несоответствия между нагрузкой модели и бюджетом машины.
«Кремниевый контракт» гласит: каждая архитектура модели заключает вычислительную сделку с аппаратурой, на которой работает. По алгоритмической оси математические операторы архитектуры определяют необходимую работу и состояние. Точность, реализация, повторное использование данных, среда выполнения и аппаратура затем определяют фактический трафик памяти, задержку и энергопотребление. Чтобы соблюдать этот контракт, инженер систем должен понимать и операторы, и то, как они отображаются на машину.
Каждый математический оператор нейронной сети задает конкретную вычислительную нагрузку на аппаратуре. Нейронные вычисления переносят исполнение от явного логического ветвления (управляющий поток if-then-else) к длинным последовательностям непрерывных математических преобразований, в которых доминируют операции умножения с накоплением. Этот переход от логики к арифметике создает плотные тензорные нагрузки, пропускная способность которых зависит от арифметической интенсивности, размера батча, повторного использования кэша и ограничений модели Roofline, задаваемых пиковой вычислительной мощностью и пропускной способностью памяти. Сбои в таких системах возникают из-за численной неустойчивости, затухающих градиентов или насыщенных режимов активации, а не из-за синтаксических ошибок. Например, распознавание одной рукописной цифры в работающей сети MNIST требует 109 184 MAC и при этом в прямом проходе не выполняет ни одной логической ветки.
Арифметика без ветвлений не означает арифметику без риска. Когда промежуточные значения выходят за динамический диапазон числового формата, аппаратные блоки либо вызывают исключение, либо молча выдают бесконечности (Inf) и недопустимые значения (NaN), которые портят последующие тензоры. Опасность необработанного численного переполнения характерна не только для машинного обучения: системы, критичные к безопасности, катастрофически отказывали, когда нарушались численные инварианты.
Переполнение, ставшее уроком (1996)
Контекст: рейс 501 Ariane 5 Европейского космического агентства повторно использовал программное обеспечение инерциальной навигации от Ariane 4, включая числовые преобразования, допущения которых соответствовали профилю полета старой ракеты (European Space Agency, 1996).
Механизм: профиль полета Ariane 5 привел к тому, что 64-битное значение с плавающей запятой при преобразовании вышло за пределы знакового 16-битного целого, и возникла необработанная ошибка операнда.
Последствия: бортовой компьютер вышел из строя через 36 секунд после старта; ракета отклонилась от курса, разрушилась и была уничтожена вместе с полезной нагрузкой-спутником стоимостью $370 млн.
Реакция: в расследовании рекомендовали ограничить программное обеспечение функциями, необходимыми в полете, пересмотреть допущения о диапазонах и продумать обработку исключений так, чтобы одна ошибка преобразования не могла вывести из строя резервные блоки (European Space Agency, 1996).
Системный урок: числовые диапазоны, обработка исключений и допущения о повторном использовании — часть системного контракта. Вычисление может быть синтаксически верным и при этом недопустимым для физического режима, в котором работает. В системах ML это случается всякий раз, когда представимый диапазон числового формата не совпадает с величинами, которые через него проходят: низкоточное умножение, переполнившее формат, порождает Inf или NaN, которые молча распространяются по остальным вычислениям, — поэтому численные режимы для отладки так же важны, как и управляющий поток.
Глубокое обучение
Глубокое обучение — это вычислительная парадигма, которая выучивает послойные представления признаков из данных, последовательно применяя нелинейные преобразования. Для подходящих задач эти выученные представления могут сокращать ручной инжиниринг признаков, но увеличивают вычисления и объем состояния.
- Значение: для подходящих классов композиционных функций глубина может представить иерархию намного эффективнее по числу параметров, чем мелкая сеть. Каждый слой добавляет работу и состояние, а решающее ограничение может лежать по оси данных, алгоритма или машины — в зависимости от нагрузки.
- Отличие: мелкие методы, такие как логистическая регрессия и метод опорных векторов, могут хорошо работать с подходящими представлениями. Глубокое обучение вместо этого использует несколько нелинейных стадий, чтобы выучивать представления совместно с задачей предсказания; это может сокращать ручной дизайн признаков и иногда поддерживать перенос между задачами.
- Типичная ошибка: распространено заблуждение, будто одного числа параметров достаточно, чтобы объяснить глубокое обучение. Ширина может аппроксимировать широкие классы функций, но глубина способна кодировать некоторые композиционные функции намного эффективнее. Архитектура, данные, оптимизация и масштаб вместе определяют практический результат.
Глубокое обучение — это физическая вычислительная нагрузка, в которой математические операторы складываются в архитектурные конвейеры и предъявляют особые требования к памяти и исполнительным блокам ускорителя по всей таксономии D·A·M. В обзоре 2015 года в журнале Nature Лекун, Бенжио и Хинтон1 (LeCun et al., 2015) обобщили эту парадигму.
Классическое машинное обучение часто требовало, чтобы эксперты проектировали экстракторы признаков для каждой новой задачи — трудоемкий процесс, который встраивал знания предметной области в вручную построенные представления. Глубокое обучение снимает эту нагрузку, выучивая представления непосредственно из данных через иерархические слои нелинейных преобразований. На «Иерархии ИИ и хронологии» эта связь показана в двух видах: историческая шкала ключевых вех и таксономическая вложенность, где глубокое обучение находится внутри машинного обучения, а оно — внутри искусственного интеллекта.
Иерархия ИИ и хронология: временная шкала с 1950-х до 2010-х годов наложена на современную таксономическую связь между искусственным интеллектом, машинным обучением и глубоким обучением. Вложенные полосы показывают область охвата, а не взаимоисключающие исторические эпохи: глубокое обучение входит в машинное обучение, а машинное обучение — в искусственный интеллект. Датированные вехи идут от семинара в Дартмуте в 1956 году до трансформера в 2017 году.
Этот сдвиг парадигмы добавляет инженерные задачи, которые обычная отладка программ не решает. Сбои глубокого обучения могут иметь неочевидные симптомы: нестабильность градиентов2, которая мешает обучению, ошибки точности вычислений, которые портят веса модели за многие итерации, или неэффективные паттерны доступа к памяти в тензорных операциях3, из-за которых вычислительные блоки ускорителя недогружены. Чтобы устранить такие сбои, нужно рассуждать о физическом исполнении тензорной алгебры на аппаратуре, а не пошагово проходить процедурный управляющий поток.
Диагностика и устранение таких сбоев требуют понимания того, как алгоритмические формулировки напрямую переходят в физические требования к аппаратуре. Структурные требования системы фундаментально зависят от того, как она представляет паттерны: через вручную написанные правила, инженерные статистические признаки или сквозные выученные представления. Проследив одну цифру MNIST размером через эти три парадигмы, мы увидим этот сдвиг: каждая стратегия представления перестраивает арифметическую интенсивность системы, трафик памяти и операционный профиль.
Вычисления с паттернами
Переход от логики к арифметике меняет то, как аппаратура обрабатывает паттерны реального мира. Проследив одну задачу — классификацию цифры MNIST размером пикселей — через три парадигмы, видно, как стратегии представления фундаментально меняют вычислительный профиль.
От явной логики к выученным паттернам
Программирование на правилах требует, чтобы разработчики задавали процедуры, которые отображают входы в выходы. Возьмем простую игру вроде Breakout.4 Ее симулятор использует явные правила столкновений: когда мяч попадает в кирпич, код удаляет кирпич и меняет направление мяча («Правила столкновений в Breakout»). Такие общие правила хорошо работают для четко определенной физики игры, но вручную написанная политика распознавания для каждого варианта беспорядочных, неструктурированных данных реального мира не масштабируется.
Правила столкновений в Breakout: программа игры использует явные правила if-then для обнаружения столкновений, задавая смену направления мяча и удаление кирпича при контакте. Подход эффективен для игры с понятной физикой и ограниченным числом состояний, но он показывает, что системы на правилах должны заранее предусмотреть каждый возможный сценарий.
Поток данных на «Потоке традиционного программирования» делает явной традиционную связь: программа применяет заданные процедуры к входным данным и получает выходы. Ранние исследования в области искусственного интеллекта проверяли, могут ли вручную написанные символьные правила масштабироваться до сложных задач рассуждения и распознавания.
Поток традиционного программирования: правила и данные подаются на вход традиционной программе, которая выдает ответы на выходе. Этот шаблон «вход — выход» лежал в основе ранних систем ИИ, но не обладает гибкостью, нужной для сложного распознавания паттернов.
Несмотря на кажущуюся простоту, ограничения систем на правилах быстро проявляются в сложных задачах реального мира. Распознавание человеческой активности иллюстрирует эту трудность. Отнести движение со скоростью ниже 4 км/ч к ходьбе кажется простым, пока в дело не вмешивается реальная сложность. Изменения скорости, переходы между видами активности и непредвиденные случаи требуют новых правил, что видно на последовательных фрагментах кода в «Правилах классификации активности». Задачи компьютерного зрения усложняют картину. Чтобы обнаружить кошку, нужны правила об ушах, усах и формах тела, которые учитывают ракурсы, освещение, перекрытия и природные вариации. Ранние системы добивались успеха только в контролируемых средах с четко определенными ограничениями.
Правила классификации активности: последовательные фрагменты кода классифицируют ходьбу со скоростью ниже 4 км/ч, затем добавляют бег со скоростью ниже 12 км/ч и езду на велосипеде на более высоких скоростях. Последний необработанный случай показывает, как реальные ситуации вынуждают усложнять ветвление логики.
Осознавая эти ограничения, направление инженерии знаний, характерное для исследований ИИ 1970–1980-х годов, пыталось систематизировать создание правил. Экспертные системы5 кодировали знания предметной области в виде явных правил и показывали перспективу в отдельных областях с четко определенными параметрами, но не справлялись с задачами, которые люди выполняют естественно: распознаванием объектов, пониманием речи и интерпретацией естественного языка. Эти провалы выявили более глубокую проблему: многие аспекты интеллектуального поведения опираются на неявное знание, которое плохо поддается представлению в виде явных правил.
Рассмотрим один иллюстративный классификатор на правилах для цифры размером 28 на 28 пикселей: сравнить яркость пикселей с порогами, проверить паттерны штрихов в определенных областях и ветвиться по результатам. В этой игрушечной реализации вычисление составляет около 100 сравнений над 784 байтами данных о пикселях — немного, предсказуемо и помещается в обычный кэш CPU. Это сравнение задает базовый уровень нагрузки, но не точность промышленной системы на правилах.
Узкое место инжиниринга признаков
Провалы систем на правилах подсказали альтернативу: вместо того чтобы кодировать знания человека в виде явных правил, пусть система находит паттерны в данных. Машинное обучение предложило это направление: вместо правил для каждой ситуации исследователи писали программы, которые выделяли паттерны в примерах. Однако успех этих методов по-прежнему во многом зависел от человеческой проницательности, которая определяла, какие паттерны искать, — процесс, известный как инжиниринг признаков.
Инжиниринг признаков превращал сырые данные в представления, которые открывают паттерны для алгоритмов обучения. Метод гистограмм направленных градиентов (HOG)6 (Dalal and Triggs, 2005) наглядно показывает этот подход: он находит границы, где яркость резко меняется, делит изображение на ячейки и измеряет ориентации границ внутри каждой ячейки («Метод HOG»). Так сырые пиксели превращаются в дескрипторы формы, устойчивые к изменениям освещения и небольшим сдвигам.
Метод HOG: локальный фрагмент изображения делится на ячейки, ориентации градиентов накапливаются в гистограмму, а полученный дескриптор описывает локальную форму, уменьшая чувствительность к освещению. Схема воспроизведена с рисунка 5 работы (Bakheet and Al-Hamadi, 2021) по лицензии CC BY 4.0.
Дополняющие методы, такие как масштабно-инвариантное преобразование признаков (SIFT)7 (Lowe, 1999) и фильтры Габора8, выделяли разные зрительные паттерны. SIFT находил ключевые точки, устойчивые к изменениям масштаба и ориентации, а фильтры Габора выделяли текстуры и частоты. Каждый из них кодировал экспертные знания о распознавании зрительных паттернов.
Эти инженерные усилия позволили добиться прогресса в компьютерном зрении в 2000-х годах. Системы теперь могли распознавать объекты с некоторой устойчивостью к вариациям реального мира, что привело к приложениям в обнаружении лиц и пешеходов и в распознавании объектов. Несмотря на эти успехи, подход имел ограничения. Экспертам приходилось тщательно проектировать экстракторы признаков для каждой новой задачи, и получившиеся признаки могли пропускать важные паттерны, которые не были предусмотрены при их проектировании. Узкое место сохранялось: человеческая экспертиза не могла масштабироваться до сложности и разнообразия зрительных паттернов реального мира.
Вернемся к той же цифре размером 28 на 28 пикселей. В этой иллюстративной реализации HOG делит изображение на сетку 7 на 7 ячеек размером 4 на 4 пикселя, вычисляет величины и ориентации градиентов, раскладывает их по 9 гистограммам ориентаций на ячейку и получает вектор признаков из 441 элемента. Линейный классификатор на основе метода опорных векторов (SVM) затем выполняет десять скалярных произведений над этим вектором. Результат — около 8 000 операций и примерно 2 КБ рабочей памяти: примерно в 80 раз больше работы игрушечного базового варианта на правилах, но вычисление по-прежнему структурировано и хорошо обслуживается векторными блоками CPU, работающими по принципу одна инструкция — много данных (SIMD). Размер дескриптора, число классов и реализация меняют эту стоимость.
Автоматическое открытие паттернов
Ограничения ручных признаков мотивируют более радикальный подход: вместо того чтобы кодировать признаки вручную, система сама находит их. Нейронные сети воплощают именно этот сдвиг: вместо явных правил или опоры на спроектированные человеком экстракторы признаков система выучивает представления непосредственно из сырых данных.
Обучение с учителем меняет традиционную связь программирования. Вместо того чтобы напрямую кодировать каждое правило решения, инженеры дают примеры и целевые ответы, а оптимизация порождает обученную модель. На «Открытии правил на основе данных» эта связь становится наглядной: выученные правила здесь выступают выходом, а не входом. Люди по-прежнему формируют задачу через данные, цели, архитектуры и оценку.
Открытие правил на основе данных: блок-схема переворачивает традиционный шаблон программирования: данные и ответы служат входами процесса машинного обучения, который на выходе выдает выученную функцию принятия решений. Этот сдвиг заменяет вручную написанную политику решений, но инженеры по-прежнему отвечают за данные, цель, архитектуру и оценку.
Система находит паттерны в примерах через этот автоматизированный процесс. Когда ей показывают миллионы изображений кошек, она учится распознавать все более сложные зрительные паттерны: от простых границ до сочетаний, которые образуют признаки, характерные для кошек. Это напоминает работу биологических зрительных систем, которые строят понимание от базовых зрительных элементов к сложным объектам.
Постепенное наслаивание паттернов показывает, почему важна глубина нейронной сети. Для некоторых классов композиционных функций более глубокие сети могут представлять функции, для которых потребовались бы значительно более широкие мелкие сети; это преимущество формализовано в разделе «Почему важна глубина».
Глубокое обучение часто демонстрирует эмпирическое масштабирование: в рамках данного режима качество может расти по мере эффективного использования дополнительных данных, вычислений и емкости модели, хотя прирост зависит от качества данных, оптимизации, архитектуры и условий оценки. В конкурсе ImageNet традиционные методы в 2011 году давали примерно 25,8 процента ошибки top-5. AlexNet9 снизил ее до 15,3 процента в 2012 году. К 2015 году ResNet достиг 3,6 процента ошибки top-5, что ниже опубликованного уровня человека около 5,1 процента при том же протоколе оценки.
«Феномен двойного спуска» иллюстрирует двойной спуск в режимах сложности модели. В классическом недопараметризованном режиме ошибка на тестовой выборке при росте емкости следует стандартной U-образной кривой. В точке интерполяции, когда у модели ровно столько параметров, чтобы подогнать обучающую выборку, ошибка на тесте резко растет. За этим порогом, в современном перепараметризованном режиме, ошибка на тесте может снова снижаться. Оси нормированы, чтобы подчеркнуть структурный профиль семейств моделей, а не отдельный набор данных.
Феномен двойного спуска: иллюстративная нормированная кривая показывает, что ошибка на тесте сначала снижается, затем растет в классическом режиме, достигает пика в точке интерполяции и снова снижается в перепараметризованном современном режиме.
Непривычная форма важна потому, что ошибка на тесте — это ошибка на отложенных примерах, а не на обучающих, которые модель видит напрямую: сначала она следует ожидаемой U-образной кривой, а затем снова снижается, когда у модели параметров больше, чем предсказывает простейшая теория. Такое поведение усложняет классическое описание перепараметризации. Обычный компромисс смещения и дисперсии10 предполагает, что слишком маленькие модели недообучаются, а модели с избыточной емкостью рискуют подогнать шум. Двойной спуск (Belkin et al., 2019) показывает, что более крупные модели иногда обобщают лучше меньших после порога интерполяции. Этот эффект перепараметризации означает, что масштаб может быть инженерным рычагом, но не означает, что масштаб автоматически безопасен: распределение данных, процедура обучения и регуляризация по-прежнему определяют, помогает ли дополнительная емкость или приводит к запоминанию. Переобучение и методы регуляризации, которые его контролируют, подробно описаны в разделе «Вопросы сходимости и устойчивости».
Качество нейронных сетей следует эмпирическим законам масштабирования, и у них есть прямые системные последствия. Устойчивый ориентир такой: размеры передовых моделей и бюджеты вычислений на обучение выросли на порядки за последнее десятилетие («Эволюция вычислений в нейронных сетях» описывает эту траекторию количественно). Этот рост делает потенциальными узкими местами пропускную способность арифметики, пропускную способность памяти, емкость хранилища и связь, а их важность зависит от нагрузки и машины. Количественные формулировки масштабирования, включая то, как размер модели, данные и вычисления уравновешивают друг друга, разобраны в главе «Обучение моделей»; практические ответы рассмотрены в главе «Сжатие моделей».
Ни одна из этих связей не делает размер модели правилом выбора. Двойной спуск описывает измеренную обобщающую способность при конкретных данных и режиме обучения, а историческое масштабирование описывает инвестиции ресурсов в отдельные системы. Выбор модели по-прежнему требует сравнения кандидатов на репрезентативных данных развертывания и с учетом полной стоимости обучения, обслуживания, мониторинга и сопровождения. Полезный вопрос — не может ли дополнительный масштаб помочь, а окупает ли его измеренный выигрыш эти системные издержки. Такое сравнение должно учитывать и неопределенность как выигрыша, так и издержек.
Когда использовать нейронные сети
Не каждая задача выигрывает от глубокого обучения. Нейронные сети — сильные кандидаты, когда данные обладают пространственной, последовательной или иерархической структурой, которую может использовать архитектура, простые базовые модели не достигают нужного качества решения, а измеренный выигрыш оправдывает полную стоимость системы («Кандидаты для нейронных сетей»). При малом объеме разметки, низкоразмерных табличных данных, приблизительно линейных зависимостях, жестких ограничениях задержки или строгих требованиях к аудируемости классические методы могут дать полезное качество при меньших, чем у нейронной сети, усилиях на обучение, обслуживание и сопровождение («Кандидаты для классических методов»).
Условие Что проверять Обоснование Репрезентативные данные Обучающая и валидационная выборки покрывают условия развертывания Емкость не может заменить отсутствующее покрытие Эксплуатируемая структура Пространственные, последовательные или иерархические паттерны Архитектура может закодировать полезное априорное знание Разрыв базового уровня Простые методы не достигают целевого качества решения Сложность покупает измеримый выигрыш Операционная пригодность Выигрыш сохраняется при ограничениях задержки, памяти и стоимости Одной точности офлайн недостаточно Преимущество в сопровождении Выученные признаки сокращают повторяющиеся ручные обновления Сопровождение всей системы становится проще Кандидаты для нейронных сетей: условия, при которых глубокое обучение, вероятно, превзойдет классические методы.
Условие Базовый вариант для проверки Причина предпочесть его Мало размеченных данных Линейная модель или ансамбль деревьев Меньшая дисперсия и более простая валидация Структурированные табличные входы Градиентный бустинг или линейная модель Высокая точность без выученных признаков Примерно линейный сигнал Линейная или аддитивная модель Прозрачность и дешевое выполнение Жесткое ограничение ресурсов Правила или компактная классическая модель Предсказуемые задержка, память и энергопотребление Нужна прямая аудируемость Ограниченное дерево или линейная модель Решения легче проверить Кандидаты для классических методов: условия, при которых более простые модели, вероятно, сравняются с нейронной сетью или превзойдут ее.
Системный вывод: сначала постройте простой базовый вариант, прежде чем создавать нейронную сеть. Сравнивайте кандидатов по целевой метрике задачи и по ресурсам, нужным для их обучения, обслуживания, мониторинга и обновления. Оставляйте нейросетевой подход, только если его измеренная польза оправдывает добавленную систему. История распознавания документов в разделе «Распознавание рукописных цифр» показывает, почему сравнение должно учитывать предобработку, политику отказов и стоимость проверки человеком, а не только точность модели.
Обучение представлений из данных меняет способ построения систем ИИ. Сокращение ручного инжиниринга признаков порождает новые требования: инфраструктуру для работы с большими наборами данных, высокопроизводительное оборудование для их обработки и специализированные ускорители для эффективного выполнения математических вычислений. Эти вычислительные требования помогли стимулировать разработку микросхем, оптимизированных под операции нейронных сетей. Сегодня глубокое обучение лежит в основе крупных систем компьютерного зрения, распознавания речи, игровых систем и обработки естественного языка.
Вернемся к той же цифре размером 28 на 28 пикселей, которую теперь обрабатывает трехслойная нейронная сеть главы (784 → 128 → 64 → 10). При принятых реализациях прямой проход требует 109 184 MAC, что в 1 091,8 раза больше работы игрушечного базового варианта на правилах. 109 386 параметров занимают 438 КБ в формате с плавающей запятой одинарной точности на 32 бита (FP32), что превышает размер большинства кэшей L1 и создает трафик между уровнями кэша во время вывода. Обучение увеличивает стоимость еще сильнее: каждое изображение проходит прямой и обратный проход до обновления весов; при упрощенной арифметике плотных слоев это порядка трех прямых проходов, повторенных по 60 000 изображений на несколько эпох. Плотные матричные умножения теперь доминируют в арифметике этого примера и благоприятствуют параллельному оборудованию, сдвигая инженерную задачу от ветвления управляющего потока к пропускной способности памяти, повторному использованию данных и параллелизму аппаратуры.
Требования к вычислительной инфраструктуре
В этом сравнении на MNIST выученные признаки тратят гораздо больше арифметики.
Сквозной пример с MNIST прослеживает один набор иллюстративных реализаций: от около 100 сравнений (на правилах) через около 8 000 операций (HOG) до 109 184 MAC (нейронная сеть). Это рост в 1 091,8 раза в принятых моделях операций, с соответствующим переходом к параллельным матричным операциям. «Тенденции ресурсов системы» обобщает тенденции, которые выявляет это сравнение.
Сравнение важно, потому что каждый шаг меняет вероятное узкое место: от управления на CPU с плотным ветвлением к конвейерам признаков, ориентированным на батчи, и далее к матричному параллелизму, питаемому из памяти. CPU остаются эффективными для небольших сетей и задач, чувствительных к задержке, тогда как крупные плотные операции чаще эффективнее отображаются на ускорители.
Переход к параллелизму порождает новые узкие места. Центральная проблема — стена памяти:11 пропускная способность вычислений выросла быстрее, чем пропускная способность внешней памяти. Ограничена ли матричная операция памятью или вычислениями, зависит от ее арифметической интенсивности: крупное, хорошо разбитое на блоки матричное умножение может быть ограничено вычислениями, тогда как матрично-векторные, узкие или слабо переиспользующие данные слои часто упираются в пропускную способность.12 Аппаратные ответы рассмотрены в разделе «Понимание стены памяти в ИИ» главы «Аппаратное ускорение», а иерархия памяти подробно описана в разделе «Иерархия памяти» приложения «Основы машины».
| Аспект системы | Традиционное программирование | ML с признаками | Глубокое обучение |
|---|---|---|---|
| Вычисления | Часто ориентированы на управляющий поток | Структурированные параллельные операции | Часто матричный параллелизм |
| Доступ к памяти | Зависит от нагрузки | Обычно ориентирован на батчи | Большие рабочие наборы тензоров |
| Перемещение данных | Зависит от программы и входа | Перемещение по конвейеру признаков | Перемещение параметров и активаций |
| Потребности в аппаратуре | Обычно центрирован на CPU | Часто CPU с векторными блоками | Нередко дружественно к ускорителям |
| Масштабирование ресурсов | Зависит от входа и программы | Определяется дескрипторами и данными | Определяется шириной, батчем, состоянием и повторным использованием |
Тенденции ресурсов системы: иллюстративные реализации переходят от правил, ориентированных на управление, к структурированным конвейерам признаков и затем к матрично-насыщенным нейронным вычислениям. Это тенденции нагрузки, а не требования к каждой программе в каждой парадигме.
Энергия добавляет ограничение наряду со скоростью. Перенос данных из основной памяти в вычислительные блоки может стоить гораздо больше энергии, чем простая арифметическая операция (Horowitz, 2014). Эта иерархия энергии объясняет, почему нейросетевые ускорители максимизируют повторное использование данных: они держат часто используемые значения в локальной памяти и планируют операции так, чтобы сократить перемещения. Что доминирует — перемещение или арифметика, зависит от точности, повторного использования, формы нагрузки и аппаратуры, но стоимость перемещения мотивирует специализированные архитектуры: от GPU центров обработки данных до ускорителей TinyML.
Компромисс между памятью и вычислениями проявляется по-разному на всем спектре от облака до периферии, который введен в разделе «Системы машинного обучения». Облачные серверы могут тратить больше памяти и мощности ради пропускной способности, тогда как мобильные устройства работают в более жестких энергетических бюджетах. Обучение с большими батчами обычно делает упор на пропускную способность; вывод, чувствительный к задержке или работающий от батареи, может делать упор на время отклика или энергию на одно предсказание. Точный приоритет зависит от нагрузки развертывания.
Эти ограничения одной машины усиливаются при масштабировании на несколько машин: плотные слои растут вместе с соседними размерностями, батчи увеличивают хранение активаций и потребность в пропускной способности, а обучение добавляет множители для обратного прохода, активаций и состояния оптимизатора. Методы сжатия моделей, аппаратного ускорения и системы обучения реагируют на это давление: они сокращают работу, повышают полезную скорость машины или меняют место хранения состояния.
Эти физические ограничения — параллелизм аппаратуры, стены памяти и перемещение данных, доминирующее по энергии, — прямо вытекают из структуры нейронных вычислений: весов, которые меняются при обучении, многих простых элементов, работающих одновременно, слоев, которые собирают низкоуровневые признаки в высокоуровневые понятия, и повторного использования данных, которое минимизирует энергоемкие перемещения. Эти свойства конкретно проявляются в фундаментальном строительном блоке нейронных вычислений — искусственном нейроне.13 Так же как понимание одного транзистора раскрывает работу сложных процессоров, понимание искусственного нейрона раскрывает поведение сетей с миллионами параметров.
Искусственный нейрон как вычислительный примитив
Базовая единица нейронных вычислений — искусственный нейрон (или узел) — служит упрощенной математической абстракцией нервной активности (McCulloch and Pitts, 1943). Более поздние цифровые реализации нейронных сетей превратили эту абстракцию в стандартизированный вычислительный блок. Из таких блоков, работающих вместе, возникают сложные сети. Сравните биологический и искусственный нейроны бок о бок на «Соответствии биологического и искусственного нейронов», чтобы увидеть, как эта вычислительная модель сводит биологическую сложность к более простой вычислительной форме.
Соответствие биологического и искусственного нейронов: сравнение бок о бок показывает, как структуры биологического нейрона отображаются на компоненты искусственного. Дендриты соответствуют входам, синапсы — весам, тело клетки — функции суммирования, а аксон — выходу активации. Эту схему следует читать как абстракцию, а не как утверждение о сходстве: она сохраняет только то, что сводится к арифметике, и отбрасывает электрохимию, которая создавала поведение.
Правая часть «Соответствия биологического и искусственного нейронов» прослеживает сигнал через четыре стадии; каждая переводит биологическую структуру в математическую операцию:
- Прием входов (дендриты → ): искусственный нейрон получает вектор входных признаков . При распознавании цифр MNIST это яркости пикселей. Аналогия с дендритами отражает прием многих сигналов, не претендуя на биологическую эквивалентность.
- Взвешивание (синапсы → ): каждый вход умножается на обучаемый вес , так же как силы синапсов модулируют биологические сигналы. Веса работают как регуляторы «усиления», определяя, насколько сильно каждый признак влияет на итоговое решение. Смещение (показано как верхний вход на «Соответствии биологического и искусственного нейронов») сдвигает порог активации. В сети выученное поведение распределено по множеству таких параметров, а не хранится в одном весе.
- Агрегация сигнала (тело клетки → линейная функция ): нейрон интегрирует взвешенные сигналы и получает одно скалярное значение . Это соответствует тому, как тело биологической клетки суммирует входящие электрохимические сигналы, чтобы решить, накопилось ли достаточно свидетельств для определенного паттерна.
- Нелинейная активация (аксон → функция активации ): агрегированный сигнал проходит через функцию активации и дает выход активации (часто обозначается ). Это соответствует решению аксона сработать по принципу «все или ничего»: нелинейность определяет, «выпустит» ли нейрон сигнал в следующий слой. В отличие от биологического случая, может давать градуированные выходы (например, ReLU пропускает положительные значения и обнуляет отрицательные), но принцип тот же — пороговое срабатывание с последующей передачей. «Биологические и искусственные структуры нейрона» формализует эти соответствия.
| Биологическая структура | Искусственный компонент | Математическая операция | Инженерная роль |
|---|---|---|---|
| Дендриты (принимают сигналы) | Входной вектор | Прием данных от датчиков или предыдущих слоев | |
| Синапсы (модулируют силу) | Вектор весов | Обучаемые параметры, кодирующие важность | |
| Тело клетки (интегрирует сигналы) | Линейная функция | Линейная интеграция сигналов признаков | |
| Аксон (выдает выход) | Функция активации | Нелинейное пороговое срабатывание и передача сигнала |
Биологические и искусственные структуры нейрона: структурные компоненты, сопоставленные математическим формулировкам и физическим состояниям памяти.
С точки зрения инженерии систем этот перевод показывает, почему нейронные сети могут предъявлять высокие вычислительные требования. Прямое скалярное вычисление одного нейрона выполняет операций умножения с накоплением (MAC)14, а без повторного использования загружает входов, весов и смещение, прежде чем записать выход. Батчевые и блочные ядра переиспользуют входы и веса между многими вычислениями нейронов, снижая трафик на одну операцию MAC. В масштабе сети производительность поэтому зависит и от числа операций, и от того, насколько эффективно реализация переиспользует данные.
Переход от отдельных нейронов к интегрированным системам требует учитывать центральный компромисс между представительной способностью и вычислительной стоимостью. Цифровое оборудование выполняет арифметику быстро, но объем операций и перемещения данных в глубоких сетях создает узкие места, которые не видны при рассмотрении одного нейрона.
Воспроизведение разумного поведения в кремнии сталкивается с тремя взаимосвязанными системными ограничениями. По мере роста моделей перемещение параметров и активаций может стать более жестким ограничением, чем пропускная способность арифметики. Параллелизм конфликтует с зависимостями: многие операции внутри слоя могут выполняться параллельно, но слой по-прежнему зависит от слоя , что задает нижнюю границу сквозной задержки. Точность также находится в компромиссе с памятью, пропускной способностью и энергией: более широкие представления требуют больше хранилища и перемещений данных, а более узкие форматы требуют доказательств, что качество решения остается приемлемым. Поиск минимально достаточной точности разобран в главе «Сжатие моделей».
Решение этих ограничений требует двух дополняющих стратегий. Архитектурное индуктивное смещение — это встроенное структурное допущение о данных: сверточные сети предполагают, что соседние пиксели на изображении значимы вместе, а рекуррентные сети предполагают, что порядок важен в последовательностях. Кодирование таких допущений сужает класс функций в сторону структур, которые, как ожидается, окажутся полезными (Mitchell, 1980). Вычислительное масштабирование дает дополнительную емкость и усилия на оптимизацию. Современная инженерия ИИ сочетает оба подхода, используя архитектурную структуру, чтобы эффективно использовать доступный масштаб.
Требования к аппаратуре и программному обеспечению
Перевод нейронных понятий в кремний имеет физическую цену. Извлечение признаков может превращаться во взвешенные линейные суммы с последующими нелинейными активациями, а плотные взаимодействия — в матричные операции, которые аппаратура должна выполнять эффективно. Однако математический граф не задает план исполнения. Фреймворки и компиляторы должны выбрать ядра, раскладки тензоров, границы слияния операций и расписания для конкретного процессора. Поэтому две реализации могут вычислять одну и ту же функцию с одинаковым номинальным числом арифметических операций и при этом заметно различаться по трафику данных, временному хранению и задержке. Аппаратура предоставляет арифметические блоки, память и каналы связи; программное обеспечение определяет, как граф ими пользуется. Именно этот уровень трансляции решает, станет ли параллелизм, видимый в модели, полезной загрузкой машины.
Выученное поведение нейронной сети распределено по параметрам, которые хранятся по обычным адресам памяти. Вывод извлекает параметры и активации; обучение добавляет сохраненные промежуточные значения, градиенты и состояние оптимизатора, поэтому важны и емкость хранилища, и пропускная способность. Биологические синапсы сочетают хранение и локальную обработку, тогда как цифровые ускорители перемещают значения по иерархии памяти. Мозг потребляет около 20 процентов покоящегося кислорода и калорий организма (Raichle and Gusnard, 2002), однако прямые сравнения эффективности вводят в заблуждение, поскольку биологические и искусственные системы решают разные задачи при разных ограничениях точности и задержки. Более узкий системный урок состоит в том, что перемещение данных важно настолько, что оно мотивирует специализированную аппаратуру из главы «Аппаратное ускорение» и стратегии оптимизации из главы «Сжатие моделей».
Эти аппаратные требования возникли не за один день. Напряжение между алгоритмическими амбициями и доступным кремнием определило весь путь развития нейросетевых исследований — от первых перцептронов до сегодняшних моделей с триллионами параметров.
Эволюция вычислений в нейронных сетях
Перцептрон15 ввел вероятностную модель нейрона для обучения и хранения информации (Rosenblatt, 1958). Его простая математика столкнулась с аппаратным ограничением: более крупным сетям требовалось намного больше вычислений и памяти. Глубокое обучение развивалось через эту совместную эволюцию алгоритма и кремния: абстракция нейрона оставалась узнаваемой, тогда как аппаратура, способная ее выполнять, менялась. Эта совместная эволюция задает рамку для дальнейшей истории: прогресс требовал и лучших методов, и лучших машин.
Алгоритм обратного распространения ошибки16 применил к нейронным сетям Пол Вербос в своей докторской диссертации 1974 года (Werbos, 1974), опираясь на работу Сеппо Линнаинмаа 1970 года по автоматическому дифференцированию (Linnainmaa, 1970), а позднее его популяризировали Румельхарт, Хинтон и Уильямс (Rumelhart et al., 1986). Их публикация показала практическую эффективность алгоритма, привлекла к нему широкое внимание в сообществе машинного обучения и вызвала новый интерес к нейронным сетям. Эта глава возвращается к алгоритму в разделе «Вычисление градиентов и обратное распространение ошибки»; системная реализация разобрана в разделе «Механика обратного распространения ошибки» главы «Обучение моделей». Демонстрация 1986 года показала, что скрытые элементы могут выучивать полезные внутренние признаки, но не решила системной задачи масштабирования обучения. Более крупные модели умножают прямые операции, сохраненные активации, вычисления градиентов и обновления параметров. Практическое внедрение поэтому зависело от улучшений во всем стеке, а не только от правила обучения.
Эта история дает повторяющийся системный урок: алгоритм становится полезным только тогда, когда вся система может эффективно его обучать и оценивать. Задержка между ранними работами по обратному распространению17 и широким внедрением отражала созревание аппаратуры, данных, инициализации, нелинейностей, оптимизации, бенчмарков и программной инфраструктуры. Поэтому алгоритм может быть жизнеспособным в принципе задолго до того, как окружающая его система сделает его полезным на практике. Глубокое обучение возникло из этого схождения, а не из одного лишь нового математического открытия.
Хотя этот термин приобрел известность в 2010-х годах одновременно с огромным ростом данных и вычислений, лежащая в основе траектория масштабирования охватывает семь десятилетий. «Рост вычислений» показывает представительные оценки вычислений на обучение ИИ почти за семь десятилетий в логарифмическом масштабе и выявляет два аппроксимированных режима: общие вычисления обучения, измеряемые в операциях с плавающей запятой (FLOP), шли по сравнительно медленному тренду до 2010 года, затем после 2012 года фронтир глубокого обучения резко ускорился. Крупномасштабные модели после 2015 года лежат на порядки выше траектории до 2010 года, показывая, что современный прогресс вкладывает аппаратные и алгоритмические выигрыши в значительно более крупные прогоны обучения.
Помимо чистых вычислений, этот рост несет энергетическую цену, которую системные инженеры не могут игнорировать. При принятых допущениях трехдневный прогон LeNet-1 на рабочей станции потребляет около 54 кВт·ч. Если применить внешнюю оценку GPU-дней для GPT-4 и коэффициент накладных расходов дата-центра, получится около 33 600 МВт·ч, что сопоставимо с годовым потреблением электроэнергии примерно у 3 200 типичных домохозяйств в США.18 Это оценки порядка величины, а не измеренные данные энергоснабжения; они зависят от загрузки ускорителей, накладных расходов объекта и границы расчета. И все же масштаб делает энергию на операцию и достигнутую загрузку предметом проектирования наравне с пиковыми FLOP/s. Количественный энергетический анализ приведен в главе «Аппаратное ускорение».
Рост вычислений: график рассеяния в логарифмическом масштабе с представительными оценками вычислений на обучение в FLOP за период с 1958 по 2024 год. Аппроксимирующие линии сравнивают более медленный режим до 2010 года с более крутым фронтиром глубокого обучения после 2012 года; значения иллюстрируют рост порядка величины, а не аудированную перепись прогонов обучения моделей.
«Историческая производительность» подкрепляет эти тенденции представительными системами, показывая, как параметры, вычисления и аппаратура развивались совместно на протяжении четырех десятилетий нейросетевых разработок. Три закономерности заслуживают отдельного рассмотрения. Во-первых, отображенный на графике фронтир вычислений обучения после 2012 года растет в масштабе месяцев, хотя аппроксимированная скорость зависит от выбранных систем и неопределенных оценок. Во-вторых, алгоритмические и системные улучшения в некоторых областях снизили вычисления, необходимые для достижения фиксированных целевых значений бенчмарков, поэтому тренд вычислений на фронтире не описывает эффективность при постоянной возможности. В-третьих, загрузка аппаратуры, пониженная точность, зрелость программного обеспечения и условия закупок опосредуют связь между сырыми вычислениями и денежной стоимостью; они не гарантируют, что стоимость растет медленнее. Для инженеров систем эти различия влияют на сроки инфраструктуры, бюджеты экспериментов и решения «строить или покупать». Планирование поэтому требует измеренной эффективности, заявленной цели сравнения и явной неопределенности, особенно для закрытых моделей, архитектура и конфигурация обучения которых не раскрыты.
| Год | Система | Параметры | Операции обучения (FLOP) | Аппаратура | Время обучения | Ошибка / задача |
|---|---|---|---|---|---|---|
| 1989 | LeNet-1 | ~10 тыс. | – | Sun-4/260 (рабочая станция) | 3 дня | 1% при отказе 12,1% (цифры USPS) |
| 1998 | LeNet-5 | SGI Origin 2000 (200 МГц) | 2–3 дня | 0,95% (MNIST) | ||
| 2012 | AlexNet | ~60 млн | 2× GPU GTX 580 | 5–6 дней | 15,3% (ImageNet) | |
| 2015 | ResNet-152 | ~60 млн | 8× GPU Tesla K80 | ~3 недели | 3,6% (ImageNet) | |
| 2020 | GPT-3 | 175 млрд (точно) | Не раскрыто | Не раскрыто | Н/Д (язык) | |
| 2023 | GPT-4 | Не раскрыто | – (внешняя оценка) | Не раскрыто | Не раскрыто | Н/Д (язык) |
Историческая производительность: четыре десятилетия представительных нейросетевых систем, показывающих рост состояния модели, вычислений обучения и аппаратной инфраструктуры. В более ранних строках используются опубликованные спецификации там, где они доступны. Конфигурация аппаратуры и продолжительность обучения GPT-3 не раскрыты; архитектура, число параметров, конфигурация аппаратуры и продолжительность обучения GPT-4 не раскрыты, а ее оценка вычислений — внешняя оценка порядка величины, согласованная с «Ростом вычислений». Общее число параметров также не определяет вычисления на один вход для разреженно активируемых архитектур. «Порядок» обозначает неопределенность на порядок величины.
Успехи по трем направлениям усилили эти тенденции: доступность данных, алгоритмические новшества и вычислительная инфраструктура. Чтобы увидеть взаимодействие, проследите стрелки на «Благотворном цикле глубокого обучения»: более быстрая инфраструктура сделала практичными большие данные и модели, растущие наборы данных создали новые возможности и давление для алгоритмов, а алгоритмические достижения изменили требования к вычислительным системам. Этот цикл дает возможности, но не действует автоматически: прогресс в одном направлении может обнажить узкое место в другом, вместо того чтобы дать немедленный выигрыш.
Благотворный цикл глубокого обучения: три взаимно усиливающих фактора — доступность данных, алгоритмические инновации и вычислительная инфраструктура — образуют самоподкрепляющуюся петлю, в которой прорывы в одной области создают возможности в других.
Доступность данных обеспечила объем примеров, который нужен выученным представлениям. Рост интернета и цифровых устройств создал огромные новые источники обучающих данных: платформы обмена изображениями предоставили миллионы размеченных изображений, цифровые собрания текстов позволили обрабатывать язык в большом масштабе, а сети датчиков порождали непрерывные потоки данных реального мира. Это изобилие дало нейронным сетям сырье, необходимое для эффективного выучивания сложных паттернов.
История нейронных сетей — это взрыв масштаба энергии обучения.
Алгоритмические новшества превратили этот объем в обучаемые системы. Новые методы инициализации сетей и управления скоростью обучения сделали обучение более стабильным. Методы борьбы с переобучением улучшили обобщение в измеренных режимах. Исследователи также задокументировали эмпирические связи между размером модели, вычислениями, объемом данных и качеством, что привело к все более амбициозным архитектурам, при этом полезный режим масштабирования остался зависимым от задачи.
Возникающие нагрузки создали спрос на вычислительную инфраструктуру с большей пропускной способностью, и она развивалась в ответ. Со стороны аппаратуры GPU обеспечили параллельные вычисления, необходимые для эффективных нейросетевых расчетов, а тензорные процессоры (TPU)19 (Jouppi et al., 2023) подняли производительность еще выше. Системы памяти высокой пропускной способности и быстрые межсоединения решали задачи перемещения данных. Программное обеспечение развивалось в ногу с аппаратурой: фреймворки и библиотеки упростили построение и обучение сетей, распределенные вычислительные системы сделали возможным обучение в масштабе, а инструменты оптимизации развертывания моделей сократили разрыв между исследованиями и промышленной эксплуатацией.
Понимание возникновения глубокого обучения
Прежде чем связать эту историю с ее инфраструктурными последствиями, проверьте, понимаете ли вы, почему возникло глубокое обучение:
- Ограничения правил: можете ли вы объяснить, почему программирование на правилах не справляется с задачами вроде распознавания изображений?
- Классическое машинное обучение и глубокое обучение: можете ли вы сравнить признаки, спроектированные вручную в классическом машинном обучении, с автоматическим выучиванием признаков в глубоком обучении?
- Три фактора: можете ли вы описать три фактора, сошедшиеся вместе для современного глубокого обучения (данные, алгоритмы, инфраструктура)?
- Спрос на аппаратуру: можете ли вы объяснить, почему глубокое обучение чаще, чем традиционное программирование, требует специализированной аппаратуры?
Если какие-то из этих понятий остаются неясными, перечитайте соответствующие разделы, прежде чем продолжать. Системные последствия, о которых пойдет речь дальше, строятся непосредственно на этой концептуальной основе.
Сближение доступности данных, алгоритмических инноваций и вычислительной инфраструктуры превратило нейронные сети из теоретических формулировок в доминирующие производственные нагрузки. Поскольку современные передовые модели упираются в пропускную способность памяти, задержку межсоединений и тепловые бюджеты, системная инженерия переходит от определения модели на высоком уровне к физическому исполнению. Управление этими узкими местами требует рассмотрения конкретных математических примитивов и потоков данных аппаратуры, которые выполняются на ускорителях.
Основы нейронных сетей
Теперь вопрос в том, почему вычислительные требования могут стать такими экстремальными. Для подходящих нейросетевых нагрузок GPU может превосходить CPU потому, что обеспечивает высокую параллельную пропускную способность и повторное использование данных для матричных и тензорных операций, а не просто из-за тактовой частоты. Структура этих примитивов сети — нейронов, слоев и нелинейных активаций — определяет, как данные текут через аппаратуру и как требования к памяти масштабируются при обучении и выводе. Понимание этих операций показывает, как простая арифметика отдельных нейронов складывается в требования к инфраструктуре, которые сформировали современный ИИ.
Изложенные здесь понятия относятся к нейронным сетям прямого распространения, на которых держится эта глава и которые повторяются во многих более крупных архитектурах. Их общие основы — взвешенные суммы, нелинейные активации и обучение на основе градиентов. Освоение этих операций и их вычислительных характеристик дает основу для рассуждений о более специализированных сетях, тогда как последующие главы вводят операторы и паттерны исполнения, которых нет в этой простой модели.
Почему важна глубина: сила иерархических представлений
Однослойная сеть, пытающаяся классифицировать рукописные цифры, должна напрямую отобразить сырые пиксели в метки. Более глубокая сеть может вместо этого использовать иерархическую структуру, если целевая функция композиционна. Вопрос в том, почему глубина дает такие преимущества в представлении, и ответ обосновывает всю математику, которая следует дальше.
Глубокие сети могут использовать композиционность: сложные паттерны раскладываются на более простые, которые в свою очередь раскладываются дальше. В распознавании изображений выученные представления могут проходить путь от локальных границ и текстур к частям и объектам. Такие иерархические закономерности встречаются во многих наборах данных и мотивируют послойные модели, хотя обученная сеть не обязана воспроизводить именно эту последовательность.
Рассмотрим распознавание цифры «семь» в примере MNIST. Однослойная сеть отображает все 784 значения пикселей напрямую в решение. Когда у задачи есть композиционная структура, глубокая сеть может вычислить решение с большей эффективностью по параметрам, переиспользуя промежуточные признаки:
- Слой 1 выучивает простые детекторы границ: вертикальные линии, горизонтальные линии, диагональные штрихи
- Слой 2 объединяет границы в формы: горизонтальный верхний штрих «семерки», диагональный нисходящий штрих
- Слой 3 объединяет формы в полные паттерны цифр
Каждый слой опирается на предыдущий, позволяя последующим вычислениям переиспользовать более ранние признаки. Эта иерархия может быть намного эффективнее по параметрам, чем мелкое представление, если у задачи подходящая композиционная структура. Те же детекторы границ, выученные для «семерки», могут участвовать и в распознавании «единицы», «четверки» и других цифр. Такое переиспользование параметров помогает объяснить, почему глубина — эффективный проектный выбор, не подразумевая фиксированного преимущества по параметрам для каждой задачи. Однако выбор между добавлением слоев и расширением существующих не симметричен: глубина и ширина вносят вклад в представительную емкость разными механизмами.
Послойная обработка в биологическом зрении помогла мотивировать иерархические модели, но это не означает, что искусственные сети воспроизводят те же механизмы. Архитектуры, рассмотренные в главе «Архитектуры нейронных сетей», кодируют разные структурные допущения для изображений, последовательностей и других типов данных. Глубина объясняет, почему послойные представления могут быть полезны; остальная механика объясняет, как реализована иерархия. Следующие разделы раскрывают эту механику: как вычисляют нейроны, как соединяются слои и как информация течет от входа к выходу.
Компромисс между глубиной и шириной
Для некоторых классов функций глубина дает экспоненциальное преимущество в представлении: сеть из слоев может представить функции, для которых мелкой сети потребовалось бы экспоненциально больше элементов (Telgarsky, 2016). Этот ограниченный теоретический результат объясняет, почему нелинейная композиция может быть эффективной по параметрам; это не универсальная гарантия для любой задачи.
Однако каждый дополнительный слой вносит три инженерные проблемы:
- Добавляет последовательные зависимости (слой ждет слоя ), ограничивая параллелизм
- Увеличивает длину пути градиента, создавая риск затухающих или взрывающихся градиентов
- Требует хранить промежуточные активации для обратного распространения ошибки
Современные архитектуры балансируют глубину и ширину. Сеть из десяти слоев по 100 нейронов имеет то же общее число скрытых элементов — 1 000 — что и сеть из двух слоев по 500, но не то же число параметров, класс функций или граф исполнения. Оба варианта открывают параллелизм внутри каждого слоя; более глубокая сеть добавляет последовательные зависимости и может эффективнее представлять некоторые композиционные функции.
Основы архитектуры сети
Архитектура нейронной сети определяет, как информация течет от входа к выходу. Современные сети могут быть чрезвычайно сложными, но все они опираются на несколько организационных принципов, которые формируют и реализацию, и требуемую вычислительную инфраструктуру.
Распознавание рукописных цифр делает эти понятия конкретными: речь о классификации изображений из набора MNIST (LeCun et al., 1998). Эта, на первый взгляд, простая задача раскрывает все основные принципы нейронных сетей и дает интуицию для более сложных приложений.
Каждый архитектурный выбор — от того, как соединяются нейроны, до того, как организованы слои, — создает конкретные вычислительные паттерны, которые нужно эффективно отобразить на аппаратуру. Это отображение между архитектурой сети и вычислительными требованиями необходимо для построения масштабируемых систем ML.
Сквозной пример: распознавание цифр MNIST
Сценарий: развертывание простого классификатора рукописных цифр на полутоновых изображениях с 10 выходными классами.
Расчет: сквозная архитектура главы отображает 784 сырых признака пикселей через 128 и 64 скрытых элемента в 10 выходов, создавая примерно 100 тыс. параметров.
Системный урок: проверка размерностей входного вектора и параметров слоев на компактном наборе данных задает базовые требования к вычислениям и пропускной способности памяти до масштабирования к высокоразмерным производственным нагрузкам.
Взвешенная сумма перцептрона
Вычислительный механизм каждого плотного слоя — это искусственный нейрон в духе перцептрона, путь сигнала которого (входы, веса, смещение, агрегация, активация) раздел «Искусственный нейрон как вычислительный примитив» проследил через его биологические истоки. Осталось формализовать этот путь математически, потому что именно эта повторяющаяся операция становится ядром уровня слоя, которое выполняет аппаратура. В сети MNIST нейрон первого слоя объединяет все 784 яркости пикселей в одну активацию, которая может реагировать на выученный паттерн, например на вертикальную границу, общую для «единицы» и «семерки». Проследите «Архитектуру перцептрона» слева направо: каждый вход умножается на свой вес , произведения суммируются со смещением, а функция активации преобразует полученную оценку. Разные нейроны повторяют ту же структуру с разными выученными весами, что позволяет одному слою проверять много паттернов на одном и том же входе.
Архитектура перцептрона: входы поступают слева, каждый масштабируется своим весом, а взвешенные произведения и смещение сходятся в узле суммирования перед тем, как единственная функция активации выдает выход. Умножения и накопление вдоль этого пути — единица работы на нейрон, которую расчеты стоимости слоя перемножают.
Каждый вход имеет соответствующий вес , и перцептрон умножает каждый вход на свой вес. Промежуточный выход вычисляется как взвешенная сумма входов по формуле «взвешенная сумма»:
Здесь обозначает принимающий нейрон, когда перцептроны собраны в слой, а сумма идет по всем индексам входов . Проще говоря, каждый признак входа масштабируется в соответствии со своей важностью (весом), а результаты суммируются в одну оценку. Это скалярное произведение двух векторов — базовая операция, для выполнения которой с максимальной пропускной способностью спроектированы аппаратные ускорители, и причина, по которой производительность нейронной сети измеряют числом выполненных операций MAC в секунду.
Смещение сдвигает линейный выход вверх или вниз, давая модели дополнительную гибкость для подгонки данных. Поэтому линейная комбинация перцептрона со смещением записывается так («взвешенная сумма со смещением»):
Имея эту взвешенную сумму, подходящие выходная функция активации и функция потерь могут поддержать регрессию или классификацию. Бинарный линейно-пороговый классификатор выбирает один из двух классов относительно порога; многоклассовые сети вместо этого выдают несколько оценок и обычно нормируют их с помощью softmax.
При прямом скалярном учете без повторного использования, установленном ранее, один нейрон выполняет операций умножения с накоплением и перемещает свои входы, веса, смещение и выход. Формализация добавляет взгляд на слой. Плотный слой из нейронов повторяет взвешенную сумму раз, поэтому его арифметическая стоимость составляет MAC — именно матричное умножение , которое должна выполнить аппаратура, и именно в этой форме остальная часть главы считает работу.
Нелинейные функции активации
Функции активации — точка, где сходятся выразительность, поток градиентов и аппаратная стоимость. Они превращают линейные взвешенные суммы в нелинейные выходы; без них несколько линейных слоев свелись бы к одному линейному преобразованию, что сильно ограничило бы выразительную силу сети. На «Распространенных функциях активации» сравниваются три часто используемые поэлементные функции активации и одна векторная функция (softmax); у каждой есть математические свойства, которые формируют и поведение обучения, и стоимость исполнения.
Распространенные функции активации: четыре нелинейные функции активации, построенные с указанием диапазонов их выходов. Сигмоида отображает входы в с гладкими градиентами, tanh дает центрированные относительно нуля выходы в , а ReLU выдает ноль для отрицательных входов. Softmax (справа внизу) показывает одну компоненту трехэлементного вектора, при этом два других логита фиксированы на значениях 13 и 0. Его увеличенная ось y (примерно от до ) не сопоставима с другими панелями и показывает только одну компоненту вектора, выходы которого взаимозависимы и в сумме дают 1.
Выбор функции активации влияет и на обучение, и на вычислительную эффективность, показывая, как системные ограничения формируют алгоритмический дизайн. ReLU () стала распространенной функцией активации скрытых слоев в сетях прямого распространения, потому что она дешева, имеет локальную производную, равную единице, для положительных входов и может давать разреженные активации. Более ранние дифференцируемые глубокие сети часто использовали сигмоиду или tanh. Их гладкие S-образные кривые могут насыщаться, из-за чего градиенты уменьшаются на многих слоях и мешают обучению ранних слоев. Этот контраст — не простое ранжирование: сигмоида остается подходящей для некоторых бинарных выходов, tanh полезна, когда нужны ограниченные активации, центрированные относительно нуля, а современные архитектуры используют дополнительные семейства активаций. Значимый проектный вопрос — какая функция обеспечивает нужную семантику выхода и поведение градиента при приемлемой стоимости исполнения. Понимание этих ролей объясняет, почему ReLU получила распространение, не превращая ее в универсальное значение по умолчанию.
Сигмоида
Логистическая сигмоида20 сжимает непрерывные входы в открытый интервал (формула «сигмоида»):
S-образная кривая отображает логиты в , поэтому сигмоида может параметризовать бинарную вероятность. Она приближается к единице для больших положительных входов и к нулю для больших отрицательных. Хотя сигмоида гладкая и дифференцируемая всюду, обучение на основе градиентов не обязано опираться на то же: у ReLU в нуле используется назначенный субградиент.
У сигмоиды есть существенное ограничение: для входов с большими по модулю значениями (далеко от нуля) градиент становится крайне малым, и это явление называется проблемой затухающего градиента.21 При обратном распространении эти малые градиенты перемножаются через слои, и градиенты ранних слоев становятся экспоненциально малыми. Это фактически мешает обучению глубоких сетей, поскольку обновления весов становятся пренебрежимо малыми.
Выходы сигмоиды не центрированы относительно нуля. Когда входы, питающие обновление параметров, также неотрицательны, знаки их градиентов весов могут коррелировать, порождая менее прямые траектории оптимизации. Полный градиент по-прежнему зависит от ошибок вышестоящих слоев и не обязан быть одного знака.
Гиперболический тангенс (tanh)
Гиперболический тангенс22 центрирует выходные активации относительно нуля на интервале (формула «tanh»):
Tanh дает S-образную кривую, похожую на сигмоиду, но центрированную в нуле: отрицательные входы отображаются в отрицательные выходы, а положительные — в положительные. Эта симметрия уравновешивает поток градиентов во время обучения и часто дает более быструю сходимость, чем сигмоида.
Как и сигмоида, tanh гладкая и дифференцируемая всюду, и все же страдает от проблемы затухающего градиента для входов с большими по модулю значениями. Когда функция насыщается (приближается к −1 или 1), градиенты стремятся к нулю. Несмотря на это ограничение, центрированность выходов tanh делает ее предпочтительнее сигмоиды для скрытых слоев во многих архитектурах, особенно в рекуррентных нейронных сетях, где важно поддерживать сбалансированные активации на протяжении шагов времени.
Сигмоида и tanh разделяют критическое ограничение: насыщение градиента при экстремальных входных значениях. Поиск функции активации, которая избегает этой проблемы и при этом остается вычислительно эффективной, привел к одной из самых важных инноваций глубокого обучения.
ReLU
ReLU23 обнуляет отрицательные значения, сохраняя линейное тождество для положительных входов (формула «ReLU»):
Характерная форма ReLU — прямая линия для положительных входов и ноль для отрицательных — дает три преимущества. Во-первых, ее локальная производная равна единице для положительных входов, что исключает насыщение активации на этой ветви; полный градиент сети по-прежнему может уменьшаться или расти через веса и другие операции. Во-вторых, ReLU вводит детерминированную разреженность активаций, обнуляя отрицательные значения; это отличается от стохастического маскирования dropout.24 Нулевые значения сами по себе не дают ускорения, потому что обычные плотные ядра все равно обрабатывают их позиции, если реализация не использует разреженность. В-третьих, ReLU использует сравнение и выбор, output = (input > 0) ? input : 0, а не аппроксимацию экспоненты. Это локальные свойства оператора, тогда как сквозная производительность зависит от того, как он объединяется с соседними операциями.
У ReLU есть и недостатки. Проблема «умирающего» ReLU — нейроны, которые навсегда выдают ноль и перестают обучаться, — возникает, когда нейроны застревают в неактивном состоянии. Если веса нейрона во время обучения меняются так, что предактивация постоянно отрицательна для всех обучающих примеров, нейрон выдает ноль на любой вход. Поскольку градиент ReLU для отрицательных входов тоже равен нулю, при обратном распространении через этот нейрон не проходит никакой градиент: веса не обновляются, и нейрон остается мертвым. Такое может случиться при больших скоростях обучения, которые выталкивают веса в неблагоприятные области. С системной точки зрения мертвые нейроны — это потраченная впустую емкость: параметры, которые занимают память и вычисления при выводе, но ничего не вносят в выход. Аккуратная инициализация (He et al., 2015), умеренные скорости обучения и варианты «протекающего» ReLU помогают смягчить проблему умирающих ReLU. Пакетная нормализация25 вместо этого стабилизирует входы слоев и позволяет использовать более высокие скорости обучения (Ioffe and Szegedy, 2015).
Softmax
В отличие от поэлементных функций активации, которые действуют на каждое значение независимо, softmax26 — это векторная функция: она учитывает все значения одновременно, чтобы получить распределение вероятностей. В простых классификаторах softmax обычно используется в выходном слое, а не как поэлементная скрытая активация; в архитектурах внимания она также нормирует выученные векторы оценок важности. Функция softmax задается формулой:
Для вектора из значений (их часто называют логитами27) softmax преобразует их в вероятностей, сумма которых равна 1. Одна компонента выхода softmax показана на «Распространенных функциях активации» (справа внизу); на практике softmax обрабатывает целые векторы, где выход каждого элемента зависит от всех входных значений.
В многоклассовых классификаторах softmax обычно используется в выходном слое. Она преобразует произвольные вещественные логиты в нормированные предсказанные вероятности, но эти значения не обязательно являются калиброванными оценками уверенности. Класс с наибольшей вероятностью становится предсказанным классом, а большие логиты получают непропорционально большие вероятности.
Математическая связь между входными логитами и выходными вероятностями дифференцируема, поэтому во время обучения градиенты проходят обратно через softmax. В сочетании с функцией кросс-энтропийных потерь (рассмотренной в разделе «Функции потерь») softmax дает особенно простые выражения градиента, которые эффективно направляют обучение. Помимо математических свойств, выбор функций активации имеет прямые последствия для эффективности аппаратуры.
Функции активации и аппаратура
Широкое распространение ReLU объясняется аппаратной эффективностью наряду с тем, что она позволяет избежать затухающих градиентов. Вычисление требует одной операции сравнения, тогда как сигмоида и tanh требуют вычисления экспонент — операций, которые намного дороже по времени и энергии. Расчет «налога на транзисторы» в разделе «Налог на транзисторы» моделирует этот разрыв как отношение стоимости логики, а глава «Аппаратное ускорение» рассматривает более широкие следствия для бенчмарков и реализации на ускорителях.
Налог на транзисторы: стоимость логического блока
У выбора функции активации есть вторая стоимость, помимо поведения градиента: площадь кремния. В компьютерной архитектуре стоимость логического блока измеряется числом транзисторов и энергией на операцию.
Тракт данных ReLU можно реализовать логикой сравнения и выбора, тогда как сигмоида или tanh требуют аппроксимации трансцендентной функции, например таблицей поиска или вычислением полинома. Иллюстративные допущения здесь приписывают ReLU 50 эквивалентов транзисторов, а высокоточному экспоненциальному тракту данных — 2 500. Фактические площадь, задержка и энергия зависят от точности, метода аппроксимации, совместного использования ресурсов, целевой пропускной способности и технологии аппаратуры.
Это иллюстративное различие и есть налог на транзисторы: при принятых допущениях смоделированная «цена» сигмоиды в кремнии в 50 раз выше цены ReLU. Точное соотношение не является константой аппаратуры. Устойчивый системный урок состоит в том, что простые кусочно-линейные активации, как правило, дешевле реализовать, чем трансцендентные функции, а принятие ReLU отражает также ее поведение при оптимизации и поток градиентов.
Иллюстративная логическая модель показывает, почему ReLU, как правило, дешевле в реализации.
Эти преобразования превращают линейную входную сумму в нелинейный выход, давая общее вычисление искусственного нейрона (формула «нейрон перцептрона»):
Эта нелинейность расширяет то, что могут представлять многослойные сети. Без нее стопка линейных слоев алгебраически сводится к одному линейному преобразованию, сколько бы промежуточных матриц ни вычисляла реализация. На «Линейных и нелинейных границах решений» левая панель показывает линейную границу, которая не может разделить классы, а правая — одну криволинейную границу, которую может представить многослойная сеть с нелинейными активациями и подходящими выученными параметрами. Рисунок иллюстрирует представительную возможность, а не гарантию того, что обучение найдет эту границу. Оптимизация, покрытие данными и архитектура по-прежнему определяют, какую функцию порождают выученные параметры.
Линейные и нелинейные границы решений: две диаграммы рассеяния сравнивают классификацию с функциями активации и без них. Без активации прямая линия не разделяет два класса. С нелинейной функцией активации сеть порождает криволинейную границу решений, которая верно разделяет точки.
Теорема об универсальной аппроксимации28 утверждает, что достаточно широкие сети с подходящими функциями активации могут сколь угодно точно аппроксимировать широкие классы функций. Эта теоретическая основа в сочетании с вычислительными и оптимизационными свойствами конкретных функций активации, таких как ReLU и сигмоида, объясняет практическую эффективность нейронных сетей в сложных задачах. Однако теорема утверждает лишь существование при допущении неограниченной ширины; она ничего не говорит об ускорителе, который выполняет вычисление. Физические системы ML накладывают жесткие ограничения на оба измерения компромисса «ширина — глубина»: один скрытый слой, достаточно широкий, чтобы аппроксимировать сложную функцию, требует хранения параметров и памяти активаций, которые могут полностью исчерпать VRAM ускорителя, а сеть, слишком глубокая, чтобы поместить свои активации в память, упирается в то же ограничение при обратном проходе. Поэтому инженерная задача состоит не в том, существует ли сеть достаточной ширины или глубины, а в том, помещается ли она в бюджет памяти и пропускной способности целевой аппаратуры.
Слои и связи
Отдельные нейроны вычисляют взвешенные суммы, применяют смещения и пропускают результаты через функции активации. Однако сила нейронных сетей возникает из организации нейронов в слои — наборы элементов, которые выполняются параллельно над общими входами. Входной слой принимает сырые тензоры признаков; один или несколько скрытых слоев преобразуют эти представления через последовательные матричные умножения и нелинейные активации; а выходной слой выдает предсказания, специфичные для задачи, или логиты решений.
На «Послойной архитектуре сети» данные входят во входной слой, проходят через несколько скрытых слоев, которые постепенно извлекают все более абстрактные признаки, и выходят из выходного слоя в виде предсказания. Каждый последующий слой преобразует представление, строя все более сложные признаки — иерархический конвейер обработки, который дает глубоким нейронным сетям способность выучивать сложные паттерны.
Послойная архитектура сети: глубокие нейронные сети преобразуют данные через последовательные слои, извлекая все более сложные признаки и паттерны. Каждый слой применяет нелинейные преобразования к выходам предыдущего, в итоге отображая сырые входы в желаемые выходы.
По мере того как данные текут через сеть, они преобразуются на каждом слое, чтобы извлекать значимые паттерны. Процесс взвешенной суммы и активации, введенный для отдельных нейронов, масштабируется: каждый слой применяет эти операции параллельно по всем своим нейронам, а выходы одного слоя становятся входами следующего. Так возникает иерархический конвейер, в котором простые признаки, обнаруженные в ранних слоях, объединяются в все более сложные паттерны в глубоких слоях, — это позволяет нейронным сетям выучивать сложные представления из сырых данных.
Параметры и связи
Обучаемые параметры29 нейронных сетей — веса и смещения — определяют, как информация течет через сеть и как к входным данным применяются преобразования. Их организация напрямую влияет и на емкость обучения, и на вычислительные требования.
Матрицы весов
Веса определяют, насколько сильно входы влияют на выходы нейронов. В плотных слоях эти веса организуются в матрицы, которые эффективно отображаются на ядра линейной алгебры. В слое с входными признаками и нейронами веса образуют матрицу , где каждый столбец представляет веса одного нейрона. Произведение матрицы на вектор обрабатывает один вход, тогда как произведение матрицы на матрицу обрабатывает батч входов и может открывать больше параллельной работы и повторного использования данных.
Для одного нейрона предактивация — это скалярное произведение . Для слоя из нейронов вычисление элементов независимо упускает возможности для векторизации SIMD и повторного использования кэша. Запись слоя в виде матричного умножения вычисляет все предактиваций одним плотным вызовом линейной алгебры (формула «линейный слой»):
Эта формула вычисляет предактивацию каждого нейрона для одного входа: вектор , умноженный на матрицу весов , дает все значений, а вектор смещений сдвигает каждое из них. Для батча вход становится матрицей, и тот же слой превращается в произведение матриц. Эти ядра составляют большую часть работы в плотных сетях прямого распространения, но доминируют ли они во времени выполнения и ограничены ли они вычислениями или памятью, зависит от их размерностей, размера батча, точности, реализации и целевой аппаратуры.
Такая матричная организация — больше, чем математическое удобство: она отражает то, как современные нейронные сети реализуются ради эффективности. Каждый вес задает силу связи между входным признаком и нейроном в слое.
Здесь рассматривается классический случай: каждый нейрон слоя связан с каждым нейроном предыдущего слоя, образуя «плотный», или «полносвязный», слой. Такой шаблон позволяет каждому нейрону использовать все признаки предыдущего слоя. Полносвязные слои задают математические принципы, нужные здесь, тогда как альтернативные шаблоны связей (рассмотренные в главе «Архитектуры нейронных сетей») используют структуру данных и могут сокращать работу или повышать статистическую эффективность.
«Полносвязные слои» показывают плотный шаблон явно: маленькая трехслойная сеть, где подписан каждый весовой коэффициент связи. Каждый вход соединен с каждым скрытым нейроном, а каждый скрытый нейрон — с каждым выходом. Каждое подписанное ребро задает один обучаемый вес, что делает видимыми число параметров и структуру арифметики. Читайте по одному нейрону назначения: его входящие ребра образуют один столбец предыдущей матрицы весов, а его смещение сдвигает получившуюся взвешенную сумму. Если прочитать все назначения вместе, проявится матричная операция. Числовые подписи иллюстративны, а не являются расчетом прямого прохода; важна форма матриц. Для слоев размеров матрицы весов равны и , что требует весов без учета смещений.
Полносвязные слои: трехслойная сеть с плотными связями между слоями, где каждый нейрон объединяет информацию от всех нейронов предыдущего слоя. Подписанные ребра и узлы иллюстрируют организацию весов, смещений и активаций; это не расчет прямого прохода с числами.
Смещения
У каждого нейрона слоя также есть связанное смещение30. Веса определяют относительную важность входов, а смещения позволяют нейронам сдвигать свои функции активации. Этот сдвиг важен для обучения, поскольку он дает сети гибкость для подгонки более сложных паттернов.
Для слоя из нейронов смещения образуют вектор . При выполнении слоя этот вектор прибавляется к взвешенной сумме входов (в той же форме, что и «линейный слой»), независимо сдвигая порог активации каждого нейрона:
Организация весов и смещений в сети прямого распространения следует систематическому шаблону. Для каждого параметризованного аффинного слоя его вычисление задают три компонента; веса и смещения обучаются, а функцию активации обычно выбирает проектировщик:
- Матрица весов
- Вектор смещений
- Функция активации
Так получается полное вычисление слоя (формула «активация слоя»):
Здесь (для батчей записывается как ) обозначает выход активации слоя. Всюду принято соглашение о векторах-строках: каждый образец — строка, а матрица весов отображает ширину предыдущего слоя в ширину текущего. С этой формулой основные понятия архитектуры становятся достаточно полными, чтобы двигаться дальше.
Основы архитектуры нейронной сети
Прежде чем переходить к топологии сети и обучению, проверьте, как вы усвоили базовые понятия:
Используйте архитектуру MNIST 784 → 128 → 64 → 10 как сквозную проверку.
- Уравнение нейрона: можете ли вы записать уравнение нейрона, включая взвешенную сумму, смещение и функцию активации?
- ReLU и сигмоида: можете ли вы объяснить, почему ReLU вычислительно дешевле сигмоиды и при этом дает нелинейность, нужную многослойной сети?
- От слоев к матрицам: можете ли вы сопоставить входной, скрытые и выходной слои с соответствующими матрицами весов ?
- Число параметров: можете ли вы подсчитать общее число параметров, включая веса и смещения?
- Ширина, глубина, стоимость: можете ли вы объяснить, как ширина слоев, глубина и связность меняют объем памяти и стоимость арифметики?
Если что-то из этого кажется неясным, перечитайте более ранние разделы об основах нейронных сетей, искусственных нейронах и параметрах, прежде чем продолжать. Предстоящие разделы об обучении и оптимизации непосредственно опираются на эти основы.
Проектирование архитектуры
Проектирование архитектуры определяет, как отдельные нейроны, функции активации и матрицы весов соединяются, чтобы решать задачи, с которыми не справится ни один слой в отдельности. У этого проектирования есть прямые системные последствия: каждый топологический выбор (добавление слоя, расширение скрытого измерения, изменение связности) меняет число параметров, объем памяти и стоимость арифметики.
Топология сети описывает, как отдельные нейроны организуются в слои и соединяются, образуя полные нейронные сети. Формировать интуицию начнем с простой задачи, которая стала известной в истории ИИ.31
Пример XOR мотивирует сеть со скрытым слоем, но реальные сети требуют систематического учета ограничений проекта и масштаба вычислений. Распознавание рукописных цифр на наборе MNIST (LeCun et al., 1998) показывает, как структура задачи определяет размерности сети, тогда как конфигурация скрытых слоев остается важным проектным решением.
Формирование интуиции: задача XOR
Рассмотрим сеть, которая выучивает функцию XOR — классическую задачу, требующую нелинейности. Пусть входы и могут принимать значения 0 или 1; XOR выдает 1, когда входы различаются, и 0, когда они совпадают.
Конфигурация: два входа → два скрытых нейрона → один выход
Пример: для входов :
- Первый скрытый нейрон:
- Второй скрытый нейрон:
- Выход:
Системный вывод: скрытые слои не просто добавляют емкость — они меняют класс функций, которые система может представить. XOR — маленький пример, который делает глубину структурным требованием, а не декоративным проектным выбором (Minsky and Papert, 1969).
Архитектура сети прямого распространения
Применение трехслойной архитектуры к MNIST показывает, как характеристики данных и требования задачи ограничивают проект сети. Сравните две панели на «Топологии сети для MNIST», чтобы увидеть эту архитектуру с двух сторон: панель (a) схематично изображает полутоновое изображение пикселей, подключенное к скрытым и выходному слоям, а панель (b) показывает те же значения, развернутые в 784-мерный вектор признаков. Матричное умножение может работать с многомерными массивами, но этот полносвязный слой задает один вес на каждую пару входного признака и скрытого элемента, поэтому оси изображения не сохраняются в его параметризации. Сверточные архитектуры, рассмотренные в главе «Архитектуры нейронных сетей», вместо этого кодируют пространственную локальность напрямую.
Ширина входного слоя напрямую определяется форматом данных. Для изображения 28 на 28 пикселей каждый пиксель становится входным признаком, что требует 784 входных нейронов. Эквивалентно: 28 строк и 28 столбцов разворачиваются в 784 значения. Данные можно представить либо как двумерную пространственную сетку пикселей, либо как развернутый одномерный вектор, где каждое значение задает яркость одного пикселя.
Структура выходного слоя определяется требованиями задачи. Для распознавания цифр с 10 классами последний слой содержит 10 выходных нейронов, по одному на каждую возможную цифру (0–9). Получив изображение, сеть выдает оценку для каждого выходного нейрона; затем softmax может превратить эти логиты в предсказанные вероятности классов.
Между фиксированными входным и выходным слоями есть свобода в проектировании топологии скрытых слоев. Выбор структуры скрытых слоев, включая число слоев и их ширины, — одно из ключевых проектных решений в нейронных сетях. Дополнительные слои увеличивают глубину сети, позволяя выучивать более абстрактные признаки через последовательные преобразования. Ширина каждого слоя дает емкость для выучивания разных признаков на каждом уровне абстракции.
Расширение скрытых слоев со 100 до 1000 нейронов увеличивает число параметров примерно с 89,6 тыс. до 1,8 млн (примерно с 358 КБ до 7 МБ в FP32). Улучшит ли более широкая сеть точность, можно выяснить только обучением и оценкой; одного лишь роста объема хранения уже достаточно, чтобы это имело значение для бюджетов мобильного развертывания.
Топология сети для MNIST: на двух панелях показана архитектура сети для распознавания цифр. Панель (a) схематично изображает цифру на изображении размером пикселей, подключенном через скрытые слои к 10 выходным узлам. Панель (b) показывает ту же архитектуру с входным изображением, развернутым в вектор из 784 элементов, что иллюстрирует, как пространственные данные поступают в сеть.
Шаблоны связности слоев
Полносвязная архитектура из раздела «Параметры и связи» максимизирует гибкость, соединяя каждый нейрон с каждым нейроном следующего слоя, но сама связность — инженерное решение. Плотные, разреженные и пропускные шаблоны обменивают гибкость обучения на число параметров, локальность и поток градиентов.
Плотная связность — стандартный шаблон, при котором каждый нейрон соединен с каждым нейроном последующего слоя. В примере MNIST соединение 784-мерного входного слоя со скрытым слоем из 128 нейронов требует 100 352 весовых параметров (). Такая полная связность позволяет слою выучивать произвольные линейные комбинации своих входов; нелинейные активации между плотными слоями распространяют эти комбинации на нелинейные зависимости. Число параметров растет как произведение ширин соседних слоев, поэтому расширение одного слоя увеличивает их линейно, а расширение обоих — квадратично.
Разреженные шаблоны связности вводят целенаправленные ограничения на то, как нейроны соединяются между слоями. Вместо того чтобы сохранять все возможные связи, нейрон соединяется лишь с подмножеством нейронов соседнего слоя. Этот подход черпает вдохновение в биологических нейронных системах, где нейроны, как правило, образуют связи с ограниченным числом других нейронов. В задачах обработки зрения, таких как пример MNIST, нейрон может соединяться только с входами, которые представляют соседние пиксели, отражая локальную природу зрительных признаков.
По мере углубления сетей путь от входа к выходу становится длиннее, что потенциально осложняет обучение. Пропускные соединения решают это, добавляя прямые пути между несмежными слоями. Такие связи дают альтернативные маршруты для потока информации, дополняя стандартное послойное продвижение. В конвейере распознавания цифр пропускные соединения позволяют более поздним слоям напрямую обращаться как к высокоуровневым паттернам, так и к исходным значениям пикселей.
Эти шаблоны связности имеют прямые аппаратные последствия наряду с теоретическими. Плотные связи максимизируют гибкость обучения и эффективно отображаются на ядра общего матричного умножения (GEMM) на тензорно-ориентированной аппаратуре. Разреженные связи уменьшают теоретическое число параметров и FLOP, но разреженная матрица весов не выполняется автоматически быстрее плотной на стандартной аппаратуре: без поддержки структурированной разреженности (например, шаблонов 2:4, которые аппаратура может использовать через сжатые форматы индексов) арифметическое сокращение не переходит в пропорциональное сокращение времени выполнения. Пропускные соединения помогают поддерживать эффективный поток информации в глубоких сетях, сохраняя пути градиентов, которые делают очень глубокие архитектуры обучаемыми.
Размер модели и вычислительная сложность
То, как расположены параметры (веса и смещения), определяет и емкость обучения, и вычислительную стоимость — это сторона модели в «кремниевом контракте» («Железный закон систем машинного обучения»): число параметров, их численная точность и требуемые операции вместе задают вычислительную сделку, которую модель заключает с аппаратурой. Топология определяет структуру сети, а инициализация и организация параметров напрямую влияют на динамику обучения и итоговое качество.
Наглядный пример: память при обучении и выводе
Один прямой проход через сеть 784 → 128 → 64 → 10 требует 109 184 MAC. Объем памяти при обучении рассказывает другую историю. Оценка объема памяти при размере батча 32 в формате с плавающей запятой одинарной точности (32 бита, 4 байта) показывает разрыв между требованиями обучения и вывода по параметрам, активациям, градиентам и состоянию оптимизатора.
Первый вклад — параметры модели: «Параметры MNIST по слоям» суммирует веса и смещения по слоям. Всего 109 386 параметров по 4 байта каждый занимают 437,5 КБ.
| Слой | Веса | Смещения | Всего параметров |
|---|---|---|---|
| Вход → скрытый 1 | = 100 352 | 128 | 100 480 |
| Скрытый 1 → скрытый 2 | = 8 192 | 64 | 8 256 |
| Скрытый 2 → выход | = 640 | 10 | 650 |
| Итого | 109 386 параметров |
Параметры MNIST по слоям: число весов и смещений для сети 784-128-64-10. Первый слой (вход → скрытый 1) доминирует в бюджете параметров, поскольку умножает 784-мерный вход на 128 скрытых элементов; более глубокие слои быстро уменьшаются по мере сжатия представления к 10 классам выхода.
Следующий вклад — активации. В «Памяти активаций MNIST при размере батча 32» записаны тензор активаций каждого слоя и его стоимость по памяти при размере батча 32.
| Слой | Форма активаций | Значения | Память |
|---|---|---|---|
| Вход | 25 088 | 100,4 КБ | |
| Скрытый 1 | 4 096 | 16,4 КБ | |
| Скрытый 2 | 2 048 | 8,2 КБ | |
| Выход | 320 | 1,3 КБ | |
| Итого | 31 552 | 126 КБ |
Память активаций MNIST при размере батча 32: формы тензоров активаций по слоям, число значений и стоимость памяти в 32-битных числах с плавающей запятой за один прямой проход. Активации входа доминируют в таблице активаций (100,4 КБ); для этого небольшого многослойного перцептрона (MLP) на MNIST общий объем активаций остается ниже объема параметров, тогда как более крупные батчи и более глубокие сети делают активации центральной проблемой памяти при обучении.
Обучение добавляет два вклада в память, которые при выводе не возникают. Градиенты занимают то же место, что и обновляемые ими параметры — здесь 437,5 КБ, а оптимизатор адаптивной оценки момента (Adam) хранит импульс и скорость, занимая вдвое больше места, чем параметры, — еще 875,1 КБ. В «Памяти при обучении и выводе MNIST при размере батча 32» сведен объем памяти по компонентам для обучения и вывода.
| Компонент | Обучение | Вывод |
|---|---|---|
| Параметры | 437,5 КБ | 437,5 КБ |
| Активации | 126 КБ | 117 КБ |
| Градиенты | 437,5 КБ | — |
| Состояние оптимизатора | 875,1 КБ | — |
| Итого | около 1,9 МБ | около 554 КБ |
Память при обучении и выводе MNIST при размере батча 32: упрощенная учетная таблица в FP32 для игрушечного MLP на MNIST. При обучении сохраняются активации и добавляются градиенты и два буфера Adam; при выводе используется пиковый буфер соседних слоев. Рабочая память фреймворка и методы экономии памяти могут изменить итоговые значения.
Системный урок задает масштаб. При размере батча 32 обучение требует в этой упрощенной учетной таблице в 3,4 раза больше памяти, чем вывод. Абсолютный разрыв растет вместе с хранением параметров и активаций; соотношение зависит от их баланса и от реализационных решений, таких как контрольные точки, точность и повторное использование рабочей памяти.
От MNIST к памяти GPT-2
Сквозной пример MNIST и «маячная» модель GPT-2 показывают, как масштаб модели меняет член данных железного закона.
- MNIST (сквозной пример): 109 386 параметров по 4 байта каждый занимают примерно 438 КБ. Вся эта модель помещается в кэш L2 современного процессора.
- GPT-2 (маячная модель): 1,5 млрд параметров по 4 байта каждый занимают примерно 6 ГБ без учета активаций и рабочей памяти среды выполнения. Это превышает емкость кэша и переводит модель в режим памяти устройства или нескольких устройств, если не снизить точность.
Системный вывод: переход от примерно 109,4 тыс. к 1,5 млрд параметров — это рост в 13 712,9 раза. Увеличение означает фазовый сдвиг в инженерии, а не просто «больше параметров». MNIST может держать веса рядом с процессором; обслуживание GPT-2 должно управлять гораздо более крупным рабочим набором памяти. Ограничена ли конкретная нагрузка вычислениями или памятью, по-прежнему зависит от размера батча, точности, повторного использования и баланса аппаратуры.
Число параметров растет вместе с шириной и глубиной сети. В сети MNIST входной слой размерности 784, скрытые слои из 128 и 64 нейронов и выходной слой из 10 нейронов (784 → 128 → 64 → 10) задают объем параметров. Первый слой требует 100 352 весов и 128 смещений, второй — 8 192 весов и 64 смещений, выходной слой — 640 весов и 10 смещений, всего 109 386 параметров. Каждый из них должен храниться в памяти и обновляться в ходе обучения.
MNIST помещается в кэш; GPT-2 — в VRAM.
Требования к памяти, сведенные в «Памяти при обучении и выводе MNIST при размере батча 32», выглядят скромными для небольшого классификатора MNIST. Масштабирование до моделей производственного размера резко меняет эти требования и тем самым режим работы аппаратуры.
Быстрая оценка для инженеров ML
Подробные расчеты необходимы для проектных документов, но опытные инженеры также развивают навык быстрой оценки в уме. Эти приемы «расчетов на салфетке» позволяют быстро проверить осуществимость до перехода к подробному анализу.
Оценка памяти:
- Параметры → байты: умножить на четыре для 32-битной одинарной точности (FP32), на два для 16-битной половинной точности (FP16) или формата brain floating point 16 (BF16, у которого диапазон экспоненты как у FP32), либо на один для 8-битного целого (INT8)
- Параметры полносвязного (FC) слоя: вход выход (плюс смещения выхода, обычно пренебрежимо малые)
- Состояние обучения: параметры, градиенты и состояние оптимизатора могут требовать примерно в 3–4 раза больше памяти, чем одни веса; пиковые активации и рабочая память добавляются сверху
- Накладные расходы оптимизатора Adam: вдвое больше памяти, чем занимают параметры (импульс и скорость)
- Максимальный размер батча: примерно (VRAM GPU постоянное состояние рабочая память) / пиковые активации на один образец
Оценка вычислений:
- FLOP полносвязного слоя: (умножение и сложение = 2 операции)
- Перевод MAC в FLOP: умножить на 2
- Оценка загрузки вычислений:
Пример: «Можно ли обучить модель на 100 млн параметров на GPU с 16 ГБ памяти?»
Прикидка в уме: 100 млн параметров по 4 байта каждый при четырех копиях, нужных для обучения, требуют 1,6 ГБ постоянного состояния модели. Остается около 14,4 ГБ на активации, временную рабочую память и накладные расходы фреймворка. Ответ: параметры помещаются, но конфигурация обучения пока не подтверждена; размер батча, форма активаций и рабочая память ядер определяют, помещается ли весь шаг.
Системный вывод: грубая оценка постоянного состояния может быстро отсеять невозможные конфигурации, но размер батча по-прежнему зависит от запаса памяти под активации и рабочую память.
Помимо этого примера подгонки модели, «Проверки осуществимости по расчетам на салфетке» сводит три распространенных вопроса осуществимости к однострочным формулам, которые инженер может применить до того, как обратиться к профилировщику.
Вопрос Быстрая оценка «Поместится ли модель в память GPU?» «Сколько времени занимает эпоха на MNIST?» «Ограничена ли нагрузка вычислениями или памятью?» Сравнить арифметическую интенсивность с Проверки осуществимости по расчетам на салфетке: три быстрых правила оценки в уме для подгонки под GPU, времени эпохи и режима ограниченности, сведенные к однострочным формулам, которые инженер может применить до запуска профилировщика.
Учетная таблица памяти по компонентам из «Памяти при обучении и выводе MNIST при размере батча 32» явная, но намеренно упрощенная. На практике инженеры систем работают на двух уровнях детализации: подробные бюджеты для проектных документов и оценки порядка величины для ранних проверок осуществимости. Таблица подтверждает, что MNIST уверенно помещается в кэш, тогда как GPT-2 требует гораздо более крупного уровня памяти, еще до учета рабочей памяти среды выполнения. Быстрая оценка в уме должна приходить к тому же выводу за секунды, а не минуты, и отмечать любую модель, которая физически не помещается в целевую аппаратуру, до запуска хотя бы одной строки кода профилирования.
Расчеты осуществимости говорят инженеру, помещается ли модель; они ничего не говорят о том, научится ли она. Это зависит от того, как сначала задаются параметры, которые хранят эти байты. Инициализация параметров критична для поведения сети. Если задать все параметры нулями, нейроны слоя будут вести себя одинаково, и разнообразное выучивание признаков станет невозможным. Поэтому веса обычно инициализируют случайно, часто с помощью специальных стратегий вроде инициализации Xavier/Glorot32 (Glorot and Bengio, 2010) или инициализации He (He et al., 2015), тогда как смещения часто начинаются с малых постоянных значений или нулей. Масштаб этих начальных значений важен: слишком большие или слишком малые значения приводят к плохой динамике обучения.
Распределение параметров влияет на то, как информация течет через слои. При распознавании цифр, если веса слишком малы, важные детали входа могут не дойти до последующих слоев. Если они слишком велики, сеть может усиливать шум. Смещения помогают подстраивать порог активации каждого нейрона, позволяя сети выучивать оптимальные границы решений.
Разные архитектуры накладывают особые ограничения на организацию параметров. Одни разделяют веса между областями сети, чтобы кодировать распознавание паттернов, инвариантное к положению; другие фиксируют часть весов в нуле, реализуя разреженные шаблоны связности.
Архитектура сети, нейроны и параметры теперь на месте, но остается центральный вопрос: механизм, благодаря которому эти случайно инициализированные параметры становятся полезными. Случайно соединенная сеть выдает выходы не лучше случайного угадывания. Архитектура отвечает на вопрос что вычисляет модель; обучение отвечает на вопрос как она учится. Механика раскрывает системные ограничения, потому что обучение добавляет обратные вычисления, сохраненные активации, градиенты и состояние оптимизатора. Размер батча становится совместным статистическим и аппаратным выбором: он меняет шум градиента, память активаций, повторное использование данных и параллельную эффективность. Процесс обучения координирует эти издержки, превращая 109 386 параметров из случайных чисел в работающий классификатор цифр.
Процесс обучения
Сеть MNIST сейчас содержит 109 386 параметров, инициализированных случайным образом, — числа, которые не кодируют никаких знаний. Превращение этих случайных значений в классификатор цифр с точностью выше 95 процентов опирается на четыре операции, повторяемые миллионы раз: прямое распространение вычисляет предсказание, функция потерь измеряет ошибку, обратное распространение ошибки вычисляет градиент потерь по каждому параметру, а оптимизатор использует эти градиенты, чтобы обновить параметры.
Обучение с учителем на размеченных примерах
Случайно инициализированная сеть различает цифры не лучше случайного угадывания среди десяти классов (около 10 процентов точности). Чтобы превратить ее в классификатор с точностью 95 процентов, нужно обучение с учителем: сеть показывают размеченные примеры и корректируют ее веса в зависимости от допущенных ошибок. Рассмотрим задачу распознавания цифр MNIST: набор содержит 60 000 обучающих изображений, каждое из которых представляет собой полутоновое изображение пикселей с правильной меткой цифры. Сеть должна выучить связь между этими изображениями и соответствующими цифрами в итеративном процессе предсказания и корректировки весов. Качество и целостность обучающих данных существенны для успеха модели («Инженерия данных»).
Связь между входами и выходами определяет методику обучения. Обучение работает как цикл, в котором каждая итерация обрабатывает подмножество обучающих примеров, называемое батчем.33 Для каждого батча сеть выполняет четыре операции: прямое вычисление по слоям сети дает предсказания, функция потерь оценивает точность предсказаний, поправки весов вычисляются по ошибкам предсказаний, а веса сети обновляются, чтобы улучшить будущие предсказания.
Итеративный подход можно записать математически. Для входного изображения и его истинной метки сеть вычисляет предсказание по формуле («предсказание сети»):
Эта формула охватывает весь прямой проход: сеть принимает вход (например, изображение цифры ) и, используя текущие параметры (веса и смещения всех слоев), выдает предсказание (вектор из десяти вероятностей, по одной на каждую цифру). Запись с точкой с запятой отличает вход , который меняется от примера к примеру, от , который при выводе фиксирован, а при обучении меняется. Ошибку сети измеряет функция потерь34 (формула «общая функция потерь»):
Измерение ошибки управляет корректировкой параметров сети через обратное распространение ошибки, которое рассмотрено в разделе «Вычисление градиентов и обратное распространение ошибки». На практике обучение работает с батчами примеров, а не с отдельными входами. Для набора MNIST каждая итерация обучения может обрабатывать одновременно 32, 64 или 128 изображений по причинам, которые разобраны в разделе «Обновления градиента по мини-батчам». Цикл обучения продолжается, пока сеть не достигнет достаточной точности или не выполнит заранее заданное число итераций. На протяжении всего процесса функция потерь служит ориентиром: ее уменьшение указывает на улучшение качества. Установление правильных метрик и протоколов оценки необходимо для оценки эффективности обучения (глава «Бенчмаркинг»).
Вычисление прямого прохода
Изображение MNIST превращается в десять оценок классов, проходя через взвешенные слои и нелинейные активации. Это вычисление и есть прямое распространение: входные данные проходят через слои сети, чтобы получить предсказания. Во время обучения предсказания затем сравниваются с истинным значением; получившаяся потеря попадает в цикл обратного прохода и обновления, показанный на «Архитектуре цикла обучения». Сам прямой проход лежит в основе и вывода, и обучения.
Архитектура цикла обучения: предсказание и истинное значение встречаются в функции потерь; обратное распространение ошибки вычисляет градиенты параметров, а оптимизатор превращает эти градиенты в обновления параметров для следующего прямого прохода.
Данные движутся вперед через слои (красная стрелка на «Архитектуре цикла обучения»), а градиенты текут назад, обновляя веса (оранжевая стрелка). Рисунок показывает важную асимметрию: прямое распространение дает выходы модели, а обратное — градиенты параметров. Именно эта зависимость объясняет, почему обучение сохраняет значения прямого прохода, нужные обратному проходу для каждой операции.
Когда изображение рукописной цифры попадает в сеть, оно проходит через ряд преобразований по слоям. Каждое преобразование сочетает взвешенные входы с выученными паттернами, постепенно извлекая значимые признаки. Для классификатора цифр 784-128-64-10 изображение пикселей проходит через несколько слоев и в итоге дает вероятности для каждой возможной цифры (0–9).
Процесс начинается с входного слоя, где яркость каждого пикселя становится входным признаком. Для MNIST это 784 входных значения (), каждое нормировано в диапазоне от 0 до 1. Затем эти значения проходят вперед через скрытые слои, где каждый нейрон объединяет свои входы согласно выученным весам и применяет нелинейную функцию активации.
Каждый прямой проход через сеть MNIST (784-128-64-10) требует существенного объема матричных операций. Только первый слой выполняет 100 352 MAC на образец. При обработке нескольких образцов в батче эти операции умножаются соответственно, и требуется тщательное управление пропускной способностью памяти и вычислительными ресурсами. Специализированная аппаратура вроде GPU выполняет эти операции эффективно за счет параллельной обработки.
Обработка отдельного слоя
Прямое вычисление в нейронной сети идет систематически: каждый слой преобразует свои входы в все более абстрактные представления. Классификатор цифр наглядно это показывает: процесс преобразования проходит отдельные стадии. На каждом слое вычисление включает два ключевых шага: линейное преобразование входов и затем нелинейную активацию. Линейное преобразование применяет ту же операцию взвешенной суммы, что определена в формуле «взвешенная сумма со смещением», но теперь с обозначениями, которые отслеживают индексы слоев (формула «линейное преобразование слоя»):
Здесь содержит активации предыдущего слоя (выходы после применения функций активации), — матрица весов слоя , а — вектор смещений (распространяемый на весь батч). Верхний индекс отслеживает, какому слою принадлежит каждый параметр. Соглашение о векторах-строках согласуется с уравнением для одного образца (формула «взвешенная сумма со смещением»): каждая строка — один образец, а умножение справа на переводит ее в ширину следующего слоя.
После этого линейного преобразования каждый слой применяет нелинейную функцию активации (здесь или обозначает общую функцию активации слоя ; в разделе «Взвешенная сумма перцептрона» обозначала конкретно сигмоиду), как записано в формуле («активация слоя»):
Этот процесс повторяется на каждом слое, образуя цепочку преобразований:
Возвращаясь к распознаванию цифр: значения пикселей сначала проходят преобразование весами первого скрытого слоя, которое переводит 784-мерный вход в промежуточное представление. Каждый последующий слой дополнительно преобразует это представление и в итоге выдает 10-мерный вектор оценок классов, по одной на каждую возможную цифру.
Матричная формулировка умножения
Полный процесс прямого распространения можно записать как композицию функций, каждая из которых представляет преобразование слоя. Эта формализация опирается на пример MNIST.
Для сети из слоев полное прямое вычисление записывается как композиция (формула «композиция прямого прохода»):
Матричное умножение составляет более 90 процентов FLOP прямого прохода этой плотной сети.
Эта композиция показывает, что прямое распространение в своей основе — цепочка матричных умножений, перемежающихся нелинейными активациями. Понять, почему матричное умножение доминирует в вычислениях ИИ, можно, изучив арифметическую интенсивность каждой операции.
Вложенное выражение раскрывается послойно: каждый шаг использует активации предыдущего слоя как свой вход:
- Первый слой:
- Скрытые слои :
- Выходной слой:
В примере MNIST размерности операций для батча из изображений таковы:
- Вход :
- Веса первого слоя :
- Веса скрытого слоя :
- Веса выходного слоя :
Арифметическая интенсивность определяет, ограничено ядро вычислениями или памятью. Блочное плотное матричное умножение переиспользует значения, тогда как отдельная поэлементная операция делает мало работы на байт. «Идеализированная арифметическая интенсивность матричного умножения и поэлементного ReLU» сравнивает их идеализированные интенсивности.
| Операция | Число операций () | Минимальный объем перемещений | Идеализированная интенсивность | Типичная оптимизация |
|---|---|---|---|---|
| Матричное умножение | байт | Блочные вычисления на CPU/GPU/TPU | ||
| Поэлементная операция (ReLU) | байт | Векторизация и слияние операций |
Идеализированная арифметическая интенсивность матричного умножения и поэлементного ReLU: плотное блочное умножение матриц выполняет операций и перемещает не менее примерно байт при байтах на значение, поэтому потенциальное повторное использование растет вместе с . Отдельная поэлементная активация остается на уровне FLOP на байт (0,125 FLOP на байт для FP32); реализации часто объединяют ее с соседним ядром, чтобы избежать отдельного обращения к памяти.
Почему матричное умножение доминирует в ИИ
Современные ускорители имеют большие вычислительные массивы относительно пропускной способности внешней памяти. Они приближаются к пиковой арифметической производительности, только когда операции открывают достаточно повторного использования и параллельной работы. Плотные и сверточные слои хорошо отображаются на оптимизированные ядра; пользовательские последовательности поэлементных операций часто объединяют, чтобы их промежуточные значения оставались на кристалле.
Для одного образца выражение — это общее умножение матрицы на вектор (GEMV); объединение образцов в батч превращает то же вычисление в , то есть GEMM. Многомерные операции, такие как двумерные и трехмерные свертки, отображаются на то же ядро GEMM через преобразования приведения (например,
im2col), которые разворачивают перекрывающиеся скользящие рецептивные поля в столбцы двумерной матрицы, чтобы оптимизированные библиотеки базовой линейной алгебры (BLAS) производителей могли выполнять их с пиковой эффективностью аппаратуры. Это приведение вводит явный системный компромисс: поскольку скользящие рецептивные поля перекрываются,im2colдублирует входные элементы в памяти, часто увеличивая временное хранилище тензоров в раз (например, в для свертки ). Системные компиляторы принимают эти накладные расходы памяти как сознательный компромисс: они превращают шаговые пространственные обращения к памяти в непрерывные матричные умножения, которые загружают систолические массивы ускорителя. Матричные операции составляют более 90 процентов операций с плавающей запятой в примере плотной сети этой главы и доминируют во многих важных нейросетевых нагрузках, хотя доля зависит от архитектуры и режима исполнения. Для повышения производительности инженеры используют приемы вроде блочной организации и тайлинга, чтобы увеличить повторное использование кэша или памяти на кристалле. Этот принцип совместного проектирования аппаратуры и программного обеспечения — проектирование архитектур моделей вокруг операций, которые специализированная аппаратура выполняет эффективно, — централен для современного глубокого обучения. Подробное рассмотрение арифметической интенсивности GEMM, форматов разреженных матриц и вычислительной сложности распространенных типов слоев, нужное для практической оптимизации этих операций, приведено в разделе «Обобщенное матричное умножение (GEMM)» приложения «Основы алгоритмов».
Пошаговая последовательность вычислений
Чтобы понять, как эти математические операции превращаются в реальные вычисления, нужно рассмотреть прямое распространение для батча изображений MNIST. Этот процесс показывает, как данные превращаются из сырых значений пикселей в предсказания цифр.
Рассмотрим батч из 32 изображений, поступающих в сеть. Каждое изображение начинается как сетка значений пикселей , которая разворачивается в 784-мерный вектор. Для всего батча получается входная матрица размером , где каждая строка представляет одно изображение. Значения обычно нормируют так, чтобы они лежали в диапазоне от 0 до 1.
Преобразование на каждом слое идет как последовательность, меняющая формы; формы определяют и выбор ядра, и хранение активаций. Сеть сначала берет входную матрицу () и преобразует ее весами первого слоя. Если первый скрытый слой содержит 128 нейронов, — матрица , поэтому вычисление дает матрицу . Затем к каждому элементу этой матрицы прибавляется соответствующее смещение, и результат проходит через функцию активации. Например, при активации ReLU все отрицательные значения становятся нулями, а положительные остаются без изменений. Эта нелинейность позволяет сети выучивать сложные паттерны в данных. Последний слой преобразует свои входы в матрицу , где каждая строка содержит 10 оценок классов. Пусть обозначает сырую оценку (логит) для цифры , а пробегает все 10 цифр. Часто эти оценки переводят в вероятности с помощью функции softmax (формула «softmax»):
Для каждого изображения батча это дает распределение вероятностей по возможным цифрам. Цифра с наибольшей вероятностью и есть предсказание сети.
Подсчет операций в прямом проходе
Задача: каково общее число арифметических операций () при одном прямом проходе через сеть MNIST (784 → 128 → 64 → 10) при размере батча 32?
Исходные данные: умножение матриц размерностей требует FLOP (одно умножение и одно сложение на каждый выходной элемент, суммированные по членам). Добавление смещения дает операций сложения с плавающей запятой. Активация ReLU дает сравнений, поэтому в таблице для строк активаций указана эквивалентная по операциям работа, а не чистые FLOP.
Решение: «Число операций прямого прохода MNIST по слоям» раскладывает число операций по слоям. Итог — около 7 МОп, или 7 МОп ÷ 32 = около 219 КОп на изображение.
Системный вывод:
- Слой 1 доминирует: первый слой дает 91,9 процента всех операций, потому что обрабатывает самый большой вход (784 измерения). Поэтому снижение размерности в ранних слоях так эффективно.
- Вычисления и память: при батче 1 чтение параметров должно окупиться одним изображением (219 КОп), что дает арифметическую интенсивность около 0,5 FLOP на байт в принятой модели трафика. При батче 32 одно чтение параметров плюс один проход по активациям батча перемещают не менее около 564 КБ и поднимают интенсивность примерно до 12,4 FLOP на байт. Дополнительные промахи кэша и промежуточный трафик могут снизить фактическое значение. Сравнение показывает, почему батчирование улучшает повторное использование, но ограничено ли поведение памятью или вычислениями, по-прежнему зависит от баланса машины, который введен в разделе «Модель Roofline» приложения «Основы машины».
- Интуиция масштабирования: удвоение ширины скрытых слоев (784 → 256 → 128 → 10) увеличивает число операций примерно в 2,15 раза — до около 15 МОп. Это следует из пересчета каждого слоя: слои 1 и 3 удваиваются, слой 2 учетверяется, поэтому итог растет примерно в 2,15 раза, а не в четыре.
| Слой | Операция | Размерности | Операции |
|---|---|---|---|
| Слой 1 | Умножение матриц | () () | = 6 422 528 |
| Слой 1 | Смещение + ReLU | = 8 192 | |
| Слой 2 | Умножение матриц | () () | = 524 288 |
| Слой 2 | Смещение + ReLU | = 4 096 | |
| Слой 3 | Умножение матриц | () () | = 40 960 |
| Слой 3 | Смещение + Softmax | около 640 (упрощенно) | |
| Итого | около 7 МОп |
Число операций прямого прохода MNIST по слоям: эквивалентная по операциям разбивка одного прямого прохода через сеть 784-128-64-10 при размере батча 32. Строки умножения матриц — это FLOP; строки смещения, ReLU и softmax — поэлементные операции, включенные, чтобы показать их пренебрежимо малый вклад. Умножение матриц первого слоя доминирует, потому что умножает 784-мерный вход на самую широкую матрицу весов; операции смещения и активации вносят меньше 1 процента общего итога.
Соображения по реализации и оптимизации
Прямое распространение легко записать математически, но его реализация ограничена хранением активаций, размером батча, раскладкой памяти и соответствием аппаратуре. Управление памятью играет центральную роль при прямом распространении, потому что активации каждого слоя должны сохраняться для обратного прохода во время обучения. Для примера MNIST (784-128-64-10) при размере батча 32 требования к хранению активаций таковы:
- Входной слой: = 25 088 значений
- Первый скрытый слой: = 4 096 значений
- Второй скрытый слой: = 2 048 значений
- Выходной слой: = 320 значений
Итого 31 552 значения должны храниться в памяти для каждого батча во время обучения, что согласуется с расчетом в разделе «Размер модели и вычислительная сложность». Требования к памяти растут линейно с размером батча и становятся существенными для более крупных сетей.
Пакетная обработка вносит важные компромиссы. Большие батчи делают матричные операции эффективнее и лучше загружают аппаратуру, но требуют больше памяти. Например, удвоение размера батча до 64 удвоит требования к памяти для активаций. Эта связь между размером батча, использованием памяти и вычислительной эффективностью на практике определяет выбор размера батча.
Организация вычислений также влияет на производительность. Матричные операции можно оптимизировать за счет аккуратной раскладки памяти и специализированных библиотек. Выбор функций активации влияет и на способность сети к обучению, и на вычислительную эффективность, поскольку одни функции (как ReLU) требуют меньше вычислений, чем другие (как tanh или сигмоида).
Вычислительные особенности нейронных сетей благоприятствуют архитектурам параллельной обработки. Хотя традиционные CPU могут выполнять эти операции, GPU, созданные для параллельных вычислений, могут быть значительно быстрее на крупных плотных матричных операциях. Специализированные ускорители ИИ достигают еще лучшей эффективности благодаря арифметике пониженной точности, специализированным архитектурам памяти и оптимизациям потока данных, настроенным под паттерны вычислений нейронных сетей.
Энергия на один вывод может заметно различаться между аппаратными платформами. CPU обеспечивают гибкое исполнение, GPU дают высокую пропускную способность за счет параллелизма, а специализированные периферийные ускорители жертвуют универсальностью ради эффективного исполнения отдельных операторов. Одна только мощность не определяет энергию: нужная величина — мощность, проинтегрированная по времени выполнения для той же нагрузки и того же целевого качества. Иерархия памяти и перемещение данных часто объясняют большую часть различий. Эти соображения повторяются в последующих главах, особенно в главе «Архитектуры нейронных сетей», где оптимизации, специфичные для архитектуры, вводят дополнительные компромиссы.
Прямое распространение превращает входы в предсказания, но само предсказание бесполезно для обучения. Циклу обучения нужен способ измерить, насколько неверно это предсказание, в форме, которая направляет корректировку весов. Эту роль выполняют функции потерь: они переводят разрыв между предсказанием и действительностью в одно число, которое оптимизация может минимизировать.
Функции потерь
Процесс прямого распространения, описанный в разделе «Вычисление прямого прохода», достаточен для вывода, когда предобученная модель делает предсказания. Для обучения модели, однако, нужна количественная метрика ошибки, которая измеряет, насколько предсказания совпадают с истинными значениями. Функции потерь количественно выражают эти ошибки и служат механизмом обратной связи, направляющим обучение. Они превращают абстрактную цель «делать хорошие предсказания» в конкретную задачу оптимизации.
Продолжим пример распознавания цифр MNIST: когда сеть обрабатывает изображение рукописной цифры, она выдает десять оценок классов, которые часто переводят в предсказанные вероятности для цифр 0–9. Функция потерь сравнивает эти предсказания с целевым значением. Если на изображении «семерка», кросс-энтропия штрафует модель за слишком малую вероятность цифры 7. Более высокая потеря означает худшее значение выбранной целевой функции на этом примере; сама по себе она не диагностирует причину и не доказывает, что все метрики задачи ухудшились.
Основы измерения ошибки
Функция потерь ставит в соответствие предсказанию и цели скалярную стоимость при выбранной целевой функции. Меньшая потеря означает лучшее значение этой целевой функции на оцениваемых примерах, но это не то же самое, что более высокая точность: уверенность и калибровка могут меняться, тогда как предсказанный класс остается прежним. Во время обучения градиенты потерь направляют обновления параметров. При распознавании рукописных цифр кросс-энтропия штрафует предсказания, которые дают малую вероятность правильной цифре.
Математически функция потерь принимает два входа: предсказания сети и истинные значения . Для одного обучающего примера в классификации цифр потеря измеряет расхождение между предсказанием и истиной. При обучении на батчах система вычисляет среднюю потерю по всем примерам батча (формула «потеря батча»):
Здесь — размер батча, а — предсказание и истина для -го примера. Усреднение сохраняет масштаб потерь и среднего градиента сопоставимым при разных размерах батча, хотя оптимальная скорость обучения по-прежнему может меняться вместе с размером батча и режимом оптимизации. Суммирование также естественно ложится на параллельное оборудование: потерю каждого примера можно вычислить независимо, а затем редукция объединяет их.
Выбор функции потерь зависит от типа задачи. Для классификации цифр функция потерь должна работать с распределениями вероятностей по нескольким классам, давать осмысленные градиенты, направляющие обучение, штрафовать неверные предсказания пропорционально их серьезности и эффективно масштабироваться при пакетной обработке. Кросс-энтропийная потеря удовлетворяет всем четырем требованиям.
Кросс-энтропия и функции потерь для классификации
Для задач классификации, таких как распознавание цифр MNIST, кросс-энтропийная потеря — распространенный способ сравнивать предсказанные распределения вероятностей с истинными метками классов. Информационно-теоретическая идея энтропии восходит к Шеннону (Shannon, 1948); в классификации с учителем кросс-энтропия штрафует низкую вероятность, назначенную правильному классу.
Логарифм задает кросс-энтропийной потере ее поведение при оптимизации: вероятности, близкие к нулю для правильного класса, влекут все более большие штрафы. Эта форма дает сильные градиенты для уверенно неверных предсказаний и делает вероятность правильного класса центральной величиной целевой функции.
Для одного изображения цифры сеть выдает распределение вероятностей по 10 возможным цифрам. Истинное значение представляется как вектор one-hot35, где все элементы равны 0, кроме единицы на позиции правильной цифры. Например, если истинная цифра — «семь», метка равна .
Кросс-энтропийная потеря для этого примера задана формулой («кросс-энтропия»):
Здесь — предсказанная сетью вероятность цифры . Поскольку — one-hot вектор, выражение упрощается до (формула «кросс-энтропия, упрощенная»):
где — индекс правильного класса. Поэтому потеря зависит только от предсказанной вероятности правильной цифры: сеть штрафуется в зависимости от того, насколько она уверена в верном ответе.
Например, если сеть предсказывает такие вероятности для изображения «семерки»:
Предсказание: [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8, 0.0, 0.1]
Истина: [0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
Потеря составит , то есть примерно 0,223. Если бы сеть была увереннее и предсказала 0,9 для правильной цифры, потеря снизилась бы примерно до 0,105.
Методы вычисления потерь по батчу
Практическое вычисление потерь требует учитывать и численную устойчивость, и пакетную обработку. При работе с батчами данных целевая функция оценивает среднюю потерю по всем примерам.
Для батча из примеров кросс-энтропийная потеря принимает вид (формула «кросс-энтропия по батчу»):
Здесь индексирует примеры батча, — десять выходных классов, — one-hot индикатор целевого класса для примера , а — предсказанная вероятность этого класса. Усреднение по сохраняет масштаб потерь сопоставимым при изменении размера батча.
Эффективное вычисление этой потери требует внимания к численной точности. Опасна не обычная малая вероятность, а вероятность, которую неустойчивый softmax округляет до нуля. Если вероятность правильного класса становится равной 0, то обращается в , и последующая арифметика может дать значение «не число» (NaN).
Устойчивые реализации избегают вычисления численно хрупкой вероятности до взятия логарифма:
- Сдвигать логиты перед возведением в экспоненту — ядро приема log-sum-exp (раздел «Логиты и численная стабильность» приложения «Основы данных»), как показано в формуле («softmax, устойчивый»):
Вычитание одного и того же из каждого логита не меняет вероятности softmax, поскольку общий множитель сокращается между числителем и знаменателем. Численный эффект решающий: наибольший сдвинутый логит становится нулем, поэтому наибольшая экспонента равна , а не потенциально переполняющемуся значению.
- Предпочитайте объединенную кросс-энтропию по логитам. Для целевого класса и устойчивая реализация вычисляет
Устойчивая кросс-энтропия по логитам математически эквивалентна , но никогда не округляет крошечную вероятность softmax до нуля заранее. Ограничение вероятности или добавление может служить защитным приемом, но оно меняет целевую функцию и не должно заменять устойчивую формулировку.
Влияние на динамику обучения
При размере батча 32 и 10 выходных классах каждый шаг обучения обрабатывает 32 набора по 10 оценок, вычисляет потерю для каждого примера и усредняет их в одну потерю батча. Во время обучения это значение выполняет две роли. Его градиент задает направление обновления, а его динамика помогает понять, прогрессирует ли оптимизация, останавливается или расходится. Точность решения, калибровку и другие метрики оценки по-прежнему нужно измерять отдельно на отложенных данных.
Для классификатора MNIST потеря на обучении часто начинается около , когда вероятности классов близки к равномерным, быстро падает на ранней оптимизации, а затем улучшается медленнее. Низкая потеря на обучении говорит об уверенности на обучающих примерах, но не доказывает обобщения. Потеря на валидации и метрики задачи определяют, переносится ли выученное поведение на отложенные данные.
Градиенты функции потерь по выходным логитам сети задают начальный сигнал ошибки, который управляет обратным распространением. Когда softmax и кросс-энтропия сочетаются, градиент по каждому логиту принимает особенно простой вид: разность предсказанной и целевой вероятностей, . Это математическое свойство делает кросс-энтропийную потерю особенно подходящей для задач классификации, поскольку она дает сильные градиенты даже тогда, когда предсказания далеки от цели. В средах выполнения систем именно это математическое сокращение служит главным мотивом для слияния softmax и кросс-энтропии в один оператор. Обратное распространение через отдельный softmax требует вычисления полной матрицы Якоби размера (промежуточное хранение и вычисления порядка ); объединение потери с активацией выхода сворачивает весь обратный шаг в поэлементное векторное вычитание порядка (), устраняя крупное узкое место по памяти и вычислениям на выходном слое.
Выбор функции потерь влияет и на другие решения обучения. Масштаб градиента взаимодействует со скоростью обучения, а усреднение потерь по батчам влияет на шум градиента и, следовательно, на полезный диапазон размеров батча. Кривизна влияет на поведение оптимизатора, а решения о сходимости требуют метрик валидации и правила остановки, а не одной лишь траектории потерь на обучении.
Функции потерь количественно выражают ошибку предсказания, но сам сигнал ошибки не говорит системе, насколько чувствительна потеря к каждому параметру. При 109 386 параметрах сети MNIST оценивание каждой производной через независимые возмущения было бы вычислительно непосильным. Это задача распределения ответственности (credit assignment): связать итоговую ошибку с параметрами и промежуточными значениями, которые ее могут изменить. Следующий раздел вводит обратное распространение ошибки, которое применяет правило цепочки, чтобы эффективно вычислить все эти локальные чувствительности.
Вычисление градиентов и обратное распространение ошибки
Обратное распространение ошибки
Обратное распространение ошибки — это алгоритм вычисления градиентов, который системы обучения используют, чтобы применить правило цепочки к вычислительному графу: записанные операции и сохраненные или пересчитанные значения прямого прохода позволяют за один обратный обход вычислить градиент потерь по каждому параметру.
- Значение: для плотных слоев обратный проход часто требует порядка удвоенного числа FLOP прямого прохода и обязывает сохранять или пересчитывать промежуточные значения, нужные правилу цепочки. Для модели с слоями, размером батча и ширинами слоев упрощенный учет активаций растет как . Градиенты и состояние оптимизатора добавляют еще память, поэтому модель, которая помещается на одном ускорителе для вывода, там может не поместиться при обучении.
- Отличие: численное дифференцирование требует возмущенного вычисления для каждого из параметров. Автоматическое дифференцирование в обратном режиме вычисляет все градиентов за один обратный обход, стоимость которого пропорциональна вычислительному графу, избегая отдельных прямых проходов.
- Типичная ошибка: распространено заблуждение, будто обратное распространение ошибки — это и есть обучение. Это алгоритм вычисления градиентов; сам параметр обновляет градиентный спуск. Смешение двух понятий скрывает системное разделение: обратное распространение определяет требования к памяти (хранение активаций), а оптимизатор — дополнительные требования к состоянию (буферы импульса и дисперсии).
Конвейер автозавода дает конкретное воплощение той же задачи распределения ответственности. Автомобили проходят четыре станции: установку рамы (A), монтаж двигателя (B), установку колес (C) и финальную сборку (D). Когда инспекторы находят дефектный автомобиль, они должны определить, какая станция вызвала проблему.
Решение работает в обратном направлении. Начиная с дефекта, инспекторы прослеживают ответственность через каждую станцию: насколько вклад сборки D отличается от того, что она получила от C, и насколько работа C отличается от того, что пришло от B. Каждая станция получает корректирующую обратную связь, пропорциональную ее вкладу. Если главной причиной был монтаж двигателя на станции B, она получает самый сильный сигнал к изменению.
Обратное распространение ошибки следует аналогичному обратному прослеживанию, но вычисляет чувствительность, а не причинную «вину». Начиная с потери, оно оценивает, как небольшое изменение входов каждого слоя изменило бы эту потерю, и передает эти производные назад. Оптимизатор затем превращает полученные градиенты параметров в реальные обновления.
В нейронных сетях каждый слой действует как станция на конвейере, а обратное распространение ошибки определяет чувствительность итоговой потери к каждой связи. Перевод этой интуиции в математику требует правила цепочки из математического анализа. В аналогии с заводом «сигнал корректировки станции D» соответствует градиенту на выходном слое, локальная чувствительность соответствует частной производной, а «передача обратной связи назад» описывает умножение по правилу цепочки, которое распространяет градиенты по сети.
Чувствительность локальна: она относится к текущим значениям параметров, входному батчу и потере. Она отвечает на контрфактический вопрос — как бесконечно малое изменение здесь изменило бы эту потерю, — а не на вопрос, является ли вес навсегда важным или исторически вызвал предсказание. Вычислительный граф делает этот вопрос операционным. Каждый узел записывает операцию, а его правило обратного прохода отображает входящий градиент потери в градиенты для его входов. Обратный обход начинается со скалярной потери, применяет эти локальные правила в обратном порядке зависимостей и накапливает вклады, когда одно значение влияет на потерю по нескольким последующим путям. Именно поэтому обратное распространение — больше, чем передача одного сигнала ошибки по цепочке: среда выполнения должна учитывать зависимости графа и объединять все релевантные пути, прежде чем градиент будет готов. Алгоритм ниже превращает это описание на уровне графа в послойную процедуру.
Шаги алгоритма обратного распространения ошибки
Прямое распространение вычисляет предсказания, а обратное — градиенты, которые оптимизатор использует для корректировки весов. Рассмотрим сквозной пример, где сеть предсказывает «тройку» для изображения «семерки». Обратное распространение систематически вычисляет, как потеря отреагировала бы на малое изменение каждого веса при текущих значениях параметров.
Процесс начинается на выходе сети, где предсказанные вероятности цифр сравниваются с истинной меткой. Получившийся градиент потерь затем движется назад через сеть, давая локальную чувствительность потери к значениям и весам каждого слоя. Вычисление следует правилу цепочки из математического анализа и разбивает связь между весами и потерей на управляемые шаги.
Математические основы обратного распространения ошибки дают теоретическую базу для обучения нейронных сетей, но практическая реализация требует программной поддержки. Венгерт (Wengert) показал автоматическое вычисление численных производных без аналитических выражений для производных (Wengert, 1964). Современные фреймворки предоставляют эту возможность через системы автоматического дифференцирования, которые вычисляют градиенты автоматически. В разделе «Правило цепочки и автоматическое дифференцирование» приложения «Основы алгоритмов» формально выводится правило цепочки и объясняется, почему автоматическое дифференцирование в обратном режиме вычисляет все градиенты параметров за один обратный проход, а раздел «Алгоритм обратного распространения» пошагово разбирает алгоритм обратного прохода и объясняет, почему он стоит примерно вдвое больше FLOP прямого прохода. Системные аспекты этих фреймворков рассмотрены в главе «Фреймворки машинного обучения» (раздел «Реализация автоматического дифференцирования во фреймворке»). Основной контракт реализации приведен в алгоритме: прямой проход должен сохранить значения, которые понадобятся обратному проходу.
Алгоритм (псевдокод): шаг обучения обратным распространением ошибки. Вход: мини-батч , метки , слоев с параметрами , функция потерь . Выход: градиенты параметров для оптимизатора.
A(0) ← X
Для ℓ = 1 до N_L: ▷ прямой проход
вычислить Z(ℓ), A(ℓ); сохранить значения, нужные для ее производной
Вычислить потерю L(A(N_L), y); задать градиент выхода ∇_A(N_L) L
Для ℓ = N_L вниз до 1: ▷ одно и то же локальное правило повторяется
по сохраненным значениям прямого прохода вычислить ∇_W(ℓ) L, ∇_b(ℓ) L
передать ∇_A(ℓ-1) L предыдущему слою
Вернуть накопленные градиенты параметров
Сохранение активаций в прямом цикле алгоритма — точка, где входит системная стоимость: каждая активация остается в памяти, пока обратный проход не дойдет до ее слоя, поэтому память активаций растет вместе с размером батча, числом слоев и шириной активаций. Поэтому обучение может превышать объем памяти вывода, даже если число параметров не меняется.
Видео (3Blue1Brown): Градиентный спуск — часть 1
Видео (3Blue1Brown): Градиентный спуск — часть 2
Распространение сигнала ошибки
Поток градиентов через нейронную сеть идет в направлении, противоположном прямому распространению. Начиная с потери на выходном слое, градиенты распространяются назад и вычисляют, насколько потеря локально чувствительна к каждому слою и, в конечном счете, к каждому весу.
Рассмотрим, что происходит, когда классификатор цифр принимает «семерку» за «тройку». Функция потерь формирует начальный сигнал ошибки на выходном слое, который по сути говорит, что вероятность «семерки» должна вырасти, а вероятность «тройки» — упасть. Этот сигнал ошибки затем распространяется назад через слои сети.
Для сети из слоев поток градиентов можно записать математически. На каждом слое чувствительность итоговой потери к выходу этого слоя определяется правилом цепочки36 и схематичной записью якобиана (формула «правило цепочки»):
Это вычисление каскадом идет назад через сеть: градиенты каждого слоя зависят от градиентов слоя над ним. Результат — локальная чувствительность, а не причинная «вина»: эквивалентные параметризации могут представлять ту же функцию с градиентами разного масштаба. Обратное распространение ошибки поставляет эти чувствительности, а оптимизатор может нормировать, накапливать или иным образом преобразовывать их перед обновлением весов.
Этот процесс сталкивается с трудностями в глубоких сетях. Когда градиенты движутся назад через много слоев, они могут затухать или взрываться. Повторное умножение может сделать градиенты экспоненциально малыми, особенно при насыщенных сигмоиде или tanh. Значения ниже минимального положительного нормального числа ( в FP32 или в FP16) попадают в субнормальный диапазон, если формат и аппаратура сохраняют субнормальные числа; еще меньшие значения обнуляются при underflow, а некоторые режимы ускорителей для скорости сбрасывают субнормальные числа в нуль. На другом полюсе значения, превышающие максимум представимого, могут переполниться до Inf и распространить NaN, дестабилизируя обучение.
Процесс вычисления производных
Вычисление градиентов включает расчет нескольких частных производных на каждом слое: как изменения весов, смещений и активаций влияют на итоговую потерю. Эти вычисления напрямую следуют из правила цепочки математического анализа, но для практического обучения их нужно реализовать эффективно.
На каждом слое обратное распространение ошибки вычисляет три различные компоненты градиента, каждая из которых выполняет свою роль в оптимизации:
Сначала входящий сигнал ошибки преобразуется в градиент предактивации поэлементным умножением () на производную локальной функции активации (формула «градиент предактивации»):
Для активаций ReLU действует как двоичная маска: она пропускает градиенты через активные нейроны () и обнуляет неактивные.
Градиенты весов измеряют локальную чувствительность итоговой потери к каждому весу. Оптимизатор использует эти градиенты, чтобы определить обновления параметров (формула «градиент весов»):
Градиенты смещений измеряют, как изменение каждого смещения влияет на потерю. Поскольку смещения сдвигают порог активации нейронов, эти градиенты показывают, должны ли нейроны активироваться легче или труднее; это выражено формулой («градиент смещения»):
Здесь — вектор из единиц, поэтому умножение слева суммирует поэкземплярные градиенты смещений по батчу.
Градиенты входов передают сигнал ошибки назад, к предыдущему слою. Они не обновляют параметры напрямую: эти градиенты служат «сигналами корректировки», которые позволяют более ранним слоям учиться на итоговой ошибке предсказания (формула «градиент активации»):
Эти уравнения показывают физическое происхождение классического системного правила: обратный проход требует примерно вдвое больше арифметики, чем прямой (). Прямой проход выполняет одно матричное умножение на плотный слой (), тогда как обратный проход должен вычислить два различных матричных умножения одинаковой вычислительной сложности: одно — для градиентов весов (), второе — для передачи градиентов предыдущему слою (). Итерация обучения целиком поэтому требует FLOP прямого прохода.
Эти три типа градиентов сталкиваются с практическим системным ограничением: желаемый эффективный батч может быть больше того, что помещается в память ускорителя сразу. Инженеры решают это через накопление градиентов: полный батч делится на меньшие микробатчи, каждый из которых помещается в память, а их градиенты накапливаются с правильной нормировкой потерь перед шагом оптимизатора. С точки зрения оптимизатора эффективный размер батча равен сумме по всем микробатчам; с точки зрения аппаратуры каждый микробатч — независимый проход вперед и назад, который укладывается в бюджет памяти. Для вычислений, независимых между примерами, накопление согласованно нормированных градиентов дает ту же сумму или среднее градиентов по батчу. Точная численная эквивалентность не универсальна: порядок редукции в плавающей запятой, операции, зависящие от батча (например, пакетная нормализация), стохастические слои и потери, зависящие от батча, могут сделать выполнение по микробатчам отличным от одного прохода по полному батчу.
Рассмотрим последний слой, где сеть выдает вероятности цифр. Если сеть предсказала для изображения «семерки», градиент проходит назад в три шага:
- Начать с ошибки в этих вероятностях
- Вычислить, как корректировка весов повлияла бы на эту ошибку
- Распространить эти градиенты назад, чтобы скорректировать веса более ранних слоев
Стоимость памяти при обратном распространении
Хранение активаций — лишь одна составляющая более широкого бюджета состояния обучения. В упрощенном учете для одного устройства, который не учитывает временные рабочие области и накладные расходы фреймворка, «память обучения» охватывает четыре основных объема в байтах:
Уравнения производных также образуют учет зависимостей по состоянию:
- Градиент весов по формуле «градиент весов» требует входной активации .
- Производная активации может требовать или компактную маску, которая записывает, какие нелинейные элементы были активны.
- Градиент входа по формуле «градиент активации» требует веса слоя .
- Оптимизатор потребляет готовые градиенты параметров и может добавлять импульс, дисперсию или другое состояние после того, как обратное распространение их вычислило.
Система обучения может сохранять эти значения для самого быстрого обратного прохода, пересчитывать выбранные значения ради экономии памяти или выгружать состояние и разделять его между уровнями памяти или устройствами. Ни один из этих вариантов не устраняет стоимость: пересчет тратит дополнительные FLOP, а выгрузка и разделение вводят перемещения данных и синхронизацию. Для глубоких сетей с большими батчами, широкими активациями или входами высокого разрешения этот компромисс может целиком занять емкость ускорителя. Полное уравнение памяти обучения и подробный разбор затрат на веса, градиенты, состояние оптимизатора и активации приведены в разделе «Истинная стоимость памяти обучения» приложения «Основы алгоритмов».
Минимальная сеть делает арифметику градиентов конкретной: проследим фактические значения через обратное распространение.
Трассировка градиентов: пример обратного распространения ошибки
Конфигурация: рассмотрим сеть с двумя входами, скрытым слоем из двух нейронов (активация ReLU) и одним выходным нейроном (без активации для простоты). Пусть текущие веса и смещения таковы:
- Скрытый слой: ,
- Выходной слой: ,
Для входа и цели при среднеквадратичной ошибке :
Прямой проход (чтобы зафиксировать значения, которые нужны обратному распространению):
- Предактивация скрытого слоя:
- Активация скрытого слоя (ReLU):
- Выход:
- Потеря:
Обратный проход (правило цепочки применяется слой за слоем):
Шаг 1: градиент выходного слоя. Градиент потери по выходу равен Шаг 2: градиенты весов выходного слоя (применяем «градиент весов»). Поскольку у выходного слоя нет функции активации,
Шаг 3: передача сигнала на скрытый слой (применяем «градиент активации»). Сигнал ошибки, переданный назад, равен:
Шаг 4: прохождение через ReLU. Производная ReLU равна единице при и нулю в остальных случаях, поэтому Градиент второго нейрона обнуляется, потому что ReLU заблокировал его прямой сигнал.
Шаг 5: градиенты весов скрытого слоя (применяем «градиент весов»):
Обновления весов (при скорости обучения ): каждый вес сдвигается против своего градиента. Например, обновляется с до , слегка подталкивая сеть к правильному выходу. Веса второго скрытого нейрона для этого примера не получают обновлений, потому что ReLU заблокировал его активацию; это иллюстрирует механизм, который может привести к мертвым нейронам, если такое будет происходить систематически на обучающих данных.
Системный вывод: обратное распространение ошибки — не только процедура математического анализа, но и граф зависимостей данных. Системы обучения должны сохранять прямые активации, нужные этому обратному проходу, поэтому память активаций становится системной стоимостью первого порядка.
Понимание этих математических деталей необходимо для отладки и оптимизации, но современные практики редко вычисляют градиенты вручную. Системный прорыв — в том, как фреймворки реализуют эти вычисления автоматически. Рассмотрим простую операцию: умножение матриц с последующей активацией ReLU, output = relu(input @ weight). Математический градиент требует вычисления производной ReLU (0 для отрицательных входов, 1 для положительных) и применения правила цепочки к матричному умножению. Фреймворк записывает операцию в вычислительный граф во время прямого прохода, хранит предактивации до ReLU, нужные для вычисления градиента, прикрепляет правило обратного прохода к каждой операции и планирует обратный обход так, чтобы сбалансировать корректность, использование памяти и загрузку аппаратуры. Эта автоматизация превращает вычисление градиентов из ручного, подверженного ошибкам процесса, требующего глубокой математической экспертизы, в надежную системную возможность, которая позволяет быстро экспериментировать и развертывать модели.
Детали вычислительной реализации
Хранение активаций — лишь первая стоимость обратного прохода. По мере роста модели обучение добавляет также хранение градиентов, трафик состояния оптимизатора и нагрузку на планирование, которые не учитывает оценка памяти прямого прохода.
Рассмотрим более крупный вариант сети MNIST (784 → 512 → 256 → 10) при размере батча 32. Активации каждого слоя должны храниться до тех пор, пока обратный проход не дойдет до этого слоя:
- Входной слой: значений (около 100 КБ при 32-битных числах)
- Скрытый слой 1: значений (около 66 КБ)
- Скрытый слой 2: значений (около 33 КБ)
- Выходной слой: значений (около 1 КБ)
Помимо активаций, обучение выделяет память для градиентов параметров. Для этой более крупной сети примерно с 535 818 параметрами хранение градиентов занимает несколько мегабайт. Продвинутые оптимизаторы вроде Adam37 примерно утраивают этот объем, поддерживая члены импульса и скорости для каждого параметра.
Пропускная способность и объем памяти усиливают эти требования к емкости. Шаг обучения читает параметры, производит градиенты и сохраняет или пересчитывает значения прямого прохода, нужные обратному вычислению каждого слоя. Хранение сохраненных активаций обычно растет вместе с размером батча и глубиной сети, поэтому пиковая память обучения превышает объем вывода для той же модели и батча. Для скромных сетей, таких как пример MNIST, этот трафик остается управляемым. По мере роста моделей пропускная способность памяти и хранение активаций могут стать решающими ограничениями, что мотивирует память высокой пропускной способности, смешанную точность, разбиение и контрольные точки активаций (activation checkpointing).
Вычислительный паттерн обратного распространения следует строгой последовательности: вычислить градиенты текущего слоя, обновить сохраненные градиенты, передать сигнал ошибки предыдущему слою и повторять, пока не будет достигнут входной слой. При пакетной обработке эти вычисления выполняются одновременно по всем примерам батча, что позволяет эффективно использовать матричные операции и возможности параллельной обработки.
Современные фреймворки выполняют эти вычисления с помощью развитых движков автоматического дифференцирования (autograd)38. Динамические вычислительные графы записывают операции по мере их выполнения, тогда как статические графы откладывают выполнение, чтобы открыть больше возможностей для оптимизации. Когда сценарий обучения запрашивает градиенты, фреймворк автоматически управляет выделением памяти, планированием операций и накоплением градиентов по вычислительному графу. Система отслеживает, какие тензоры требуют градиентов, и планирует операции так, чтобы обратный проход следовал зависимостям, созданным при прямом проходе. Такое автоматическое управление позволяет практикам сосредоточиться на проектировании модели, а не на тонкостях реализации вычисления градиентов.
Обратное распространение ошибки
Задача распределения ответственности спрашивает, как потеря зависит от параметров по всей сети. Обратное распространение вычисляет эти градиенты через правило цепочки; проверьте, понятен ли механизм:
Механизм
- Правило цепочки: можете ли вы объяснить, как «правило цепочки» раскладывает сложный сигнал ошибки на локальные градиенты для каждого слоя?
- Затухание градиента: почему градиенты часто затухают в глубоких сетях?
Обучение и вывод
- Вычислительная стоимость: если прямой проход требует операций, почему обучение требует примерно операций суммарно?
- Стоимость памяти: почему обучение должно сохранять или пересчитывать значения прямого прохода, нужные обратному проходу, и как это масштабируется с размером батча и глубиной сети?
- Стоимость слоя: для плотного слоя, отображающего 4 096 входов в 4 096 выходов при размере батча 32, оцените его FLOP прямого прохода и байты активаций FP16 с одной значащей цифрой, затем скажите, какие из этих двух величин растут при удвоении батча.
Обратное распространение вычисляет локальный градиент потерь по каждому весу; оптимизатор превращает этот сигнал в реальное обновление параметров. Размер шага, уточнение направления и импульс между итерациями определяются оптимизатором. Ни один оптимизатор не лучший для всех возможных задач (Wolpert and Macready, 1997), поэтому обучение нейронной сети зависит от выбора правил обновления и гиперпараметров, соответствующих модели, данным и ограничениям аппаратуры.
Алгоритмы обновления параметров
Градиентный спуск
Градиентный спуск — это итеративный алгоритм оптимизации, который обновляет параметры модели в направлении антиградиента, , обменивая вычислительные шаги на снижение потерь.
- Значение: выбор оптимизатора влияет на память обучения. В упрощенном учете FP32 стохастический градиентный спуск (SGD) хранит каждый вес и градиент (8 байт на параметр), тогда как Adam добавляет два буфера моментов, доводя эти четыре тензора до 16 байт на параметр. Обучение со смешанной точностью может хранить отдельные основные значения в FP32, а остальные тензоры — в более узком формате; полный учет разобран в главе «Обучение моделей». Состояние оптимизатора, сохраненные активации, градиенты, временные рабочие области и буферы связи вместе определяют, сколько ускорителей требуется для обучения.
- Отличие: обратное распространение вычисляет градиенты (сигнал «что менять»), а оптимизатор применяет обновления (действие «изменить»). Обратный проход определяет, какие значения прямого прохода должны оставаться доступными, тогда как оптимизатор добавляет собственное состояние и вычисление обновления.
- Типичная ошибка: распространено заблуждение, будто градиентный спуск находит глобальный минимум. Ландшафты потерь нейронных сетей невыпуклые: в них много локальных минимумов, седловых точек и плато. На практике SGD и его варианты сходятся к областям низкой потери, которые хорошо обобщаются, но путь зависит от расписания скорости обучения, размера батча и инициализации.
Теперь процессу оптимизации нужно правило обновления, которое превращает градиент, полученный обратным распространением, в изменения параметров. Этот итеративный процесс использует локальную чувствительность потери по каждому весу, чтобы обновлять параметры и снижать потерю на последовательных шагах. Основное правило обновления сочетает вычисление градиента обратным распространением с корректировкой параметров, как определено в формуле («градиентный спуск»):
где — совокупность параметров сети (весов и смещений), — скорость обучения, а — градиент, вычисленный обратным распространением ошибки.
Для классификатора цифр это означает корректировку весов ради повышения точности. Если сеть часто путает «семерки» с «единицами», градиентный спуск изменит веса, чтобы лучше различать эти цифры. Скорость обучения 39 задает величину корректировки: слишком большие значения приводят к перескоку оптимальных параметров, а слишком малые — к медленной сходимости.
Видео (3Blue1Brown): Обратное распространение ошибки
Несмотря на сильную невыпуклость ландшафтов потерь нейронных сетей, методы на основе градиентов часто находят полезные решения, когда модель, данные, инициализация и режим оптимизации хорошо согласованы. Теоретические причины, связанные с такими понятиями, как гипотеза лотерейного билета (Frankle and Carbin, 2019), неявное смещение (Neyshabur et al., 2017) и преимущества перепараметризации (Nakkiran et al., 2019), остаются активными областями исследований. Для практической инженерии систем ML ключевой вывод эмпирический: скорость обучения, инициализацию, регуляризацию и конфигурацию обучения нужно проверять вместе.
Обновления градиента по мини-батчам
Нейронные сети обычно обрабатывают несколько примеров одновременно при обучении — этот подход называется градиентным спуском по мини-батчам. Вместо обновления весов после каждого отдельного изображения перед обновлением вычисляется средний градиент по батчу примеров.
Для батча размера пусть обозначает потерю для примера ; средний градиент потерь принимает вид (формула «градиент батча»):
При типичном размере батча 32 система выполняет один прямой проход по 32 изображениям, вычисляет 32 потери для отдельных примеров, усредняет их градиенты и применяет одно обновление весов. Это усреднение сглаживает шумные градиенты отдельных примеров, но также означает, что ускоритель должен держать активации батча доступными, пока обратный проход их не использует. Поэтому размер батча влияет на доступный параллелизм и загрузку вместе с формой модели, реализацией ядер и аппаратурой.
Итеративный процесс обучения
Полный процесс обучения объединяет прямое распространение, обратное распространение и обновления весов в систематический цикл обучения. Этот цикл повторяется, пока сеть не достигнет удовлетворительного качества или не выполнит заранее заданное число итераций.
Один проход по всему обучающему набору называется эпохой.40 Для MNIST, где 60 000 обучающих изображений и размер батча 32, каждая эпоха состоит из 1 875 итераций по батчам. Алгоритм мини-батч SGD описывает цикл мини-батч SGD: каждая эпоха перемешивает данные, проходит по ним по одному мини-батчу с прямым и обратным проходом и применяет одно обновление параметров на батч.
Алгоритм (псевдокод): мини-батч стохастический градиентный спуск. Вход: обучающая выборка , скорость обучения , размер батча , число эпох , начальные параметры . Выход: обученные параметры .
θ ← θ0
Для e = 1 до E:
перемешать обучающую выборку ▷ снижает влияние порядка примеров
Для каждого мини-батча M размера B:
ŷ_i ← f_θ(x_i) для всех (x_i, y_i) из M
L_M ← (1/B) · сумма по (x_i, y_i) из M от L(ŷ_i, y_i)
θ ← θ − η · ∇_θ L_M ▷ обратное распространение, затем обновление
конец цикла по мини-батчам
оценить на валидации; остановиться, если выполнен критерий сходимости
конец цикла по эпохам
Вернуть θ
Цикл по мини-батчам делает размер батча аппаратной единицей работы: больший может улучшить загрузку матричных блоков и заполненность ускорителя, но увеличивает память активаций; а поскольку обновление происходит один раз на батч, а не один раз на пример, также задает частоту обновления градиента. Внутренний цикл в алгоритме мини-батч SGD — это единица, которую аппаратура многократно выполняет. Прямой проход создает активации для каждого примера текущего мини-батча, обратный проход использует нужные сохраненные значения для вычисления градиентов, а оптимизатор изменяет параметры один раз на батч. Потеря на обучении отслеживает целевую функцию на последних батчах, тогда как точность на валидации измеряет качество решения задачи на отдельной отложенной выборке. Тестовая выборка остается зарезервированной для финальной оценки после фиксации выбора модели и гиперпараметров.
Вопросы сходимости и устойчивости
Сеть, которая достигает 99,5 процента точности на обучающих данных, но только 85 процентов на релевантных невидимых данных, демонстрирует большой разрыв обобщения — сильный признак переобучения. Модель могла выучить полезные паттерны, но одновременно слишком тесно специализироваться на обучающей выборке.
Переобучение
Переобучение — это сбой обобщения, при котором качество на обучающей выборке растет, а качество на релевантных невидимых данных — нет.
- Значение: диагностический признак измерим: потеря на обучении продолжает падать, тогда как потеря на валидации растет или релевантная метрика на валидации выходит на плато, и разрыв обобщения расширяется. Одно лишь число параметров не определяет это поведение; важны покрытие данными, архитектура, оптимизация, регуляризация и связь между распределениями обучения и развертывания.
- Отличие: в отличие от недообучения (когда модели не хватает емкости, чтобы уловить целевую функцию, и ошибки и на обучении, и на валидации остаются высокими) переобучение дает низкую ошибку на обучении и высокую на валидации, показывая, что модель специализировалась на обучающей выборке, а не выучила лежащее в основе распределение.
- Типичная ошибка: больше данных помогает, только если они репрезентативны для поведения, которое система должна обобщать. Дополнительные примеры, аугментация, регуляризация и ранняя остановка — возможные меры, но каждую из них нужно оценивать на отложенных данных из релевантного рабочего режима.
Выбор скорости обучения сильно влияет на динамику обучения. Слишком большая для данного оптимизатора, размера батча, нормализации и расписания скорость может заставить потерю колебаться или расходиться; слишком малая может растратить эпохи на пренебрежимо малый прогресс. Универсального «умеренного» значения не существует, поэтому инженеры проверяют скорости в заданной конфигурации обучения и следят и за устойчивостью оптимизации, и за качеством на валидации.
Мониторинг сходимости дает важную обратную связь во время обучения и продолжается в эксплуатации, как описано в главе «MLOps». Выравнивание кривой потерь на обучении сигнализирует о замедлении оптимизации, но не указывает причину: прогон может приближаться к полезному решению, упираться в предел оптимизации или недообучаться. Плато на валидации так же диагностично, а не окончательно. Разрыв между качеством на обучении и на валидации помогает отличить переобучение от улучшений, которые переносятся на отложенные примеры. Взаимосвязь размера батча, доступной памяти и вычислительных ресурсов требует тщательного баланса, чтобы обеспечить эффективное обучение в рамках аппаратных ограничений — те же компромиссы между памятью и вычислениями, что были установлены ранее в этом разделе.
Процесс обучения нейронной сети
Полный цикл обучения задает математический механизм, который позволяет нейронным сетям учиться на данных. Прежде чем переходить к выводу и развертыванию, проверьте, как вы усвоили основы цикла обучения:
Используйте сеть MNIST (784 → 128 → 64 → 10) и размер батча 32 как сквозную проверку.
- Прямой проход: можете ли вы проследить прямой проход по формулам и ?
- Кросс-энтропийная потеря: можете ли вы объяснить, что измеряет кросс-энтропийная потеря и почему потеря батча усредняется по примерам?
- Обратный проход: можете ли вы проследить, как градиенты текут назад через сеть и почему нужны сохраненные активации?
- Правило обновления: можете ли вы записать правило обновления градиентного спуска и объяснить, как размер батча задает компромисс между памятью, пропускной способностью и стабильностью градиента?
- Память обучения: можете ли вы объяснить, почему полный цикл обучения требует больше памяти, чем вывод?
Если какие-то понятия остаются неясными, перечитайте более ранние разделы о прямых проходах, функциях потерь, обратном распространении и обучении, прежде чем продолжать. Эти механизмы составляют основу различия между обучением и выводом, которое следует дальше.
Выбор точки остановки требует периодически оценивать модель на валидационной выборке и сохранять ее веса в надежное хранилище — эта практика называется контрольными точками (checkpointing). Для небольшой модели вроде сети MNIST запись контрольной точки занимает пренебрежимо мало времени. Для модели, параметры которой занимают десятки или сотни гигабайт, синхронная запись контрольной точки может приостановить цикл обучения, пока эти байты сериализуются на диск или в объектное хранилище; асинхронное и распределенное сохранение уменьшает эту паузу, но все равно расходует память, сеть и пропускную способность хранилища. Сама проверка на валидации требует полного прямого прохода по отложенной выборке, что при большом масштабе отнимает значительное время ускорителя, которое иначе ушло бы на обучение. Поэтому контрольные точки и валидация — не бесплатные статистические наблюдения: они создают повторяющиеся издержки ввода-вывода и вычислений, частоту которых нужно соотносить с потребностями восстановления и выбора модели. Слишком редкое сохранение рискует потерей полезных весов после сбоя или последующей деградации; слишком частое нагружает пропускную способность хранилища и добавляет накладные расходы. Поэтому мониторинг сходимости, концептуально простой, при масштабе становится задачей системной инфраструктуры.
Полный конвейер обучения проходит от прямого распространения через вычисление потерь к обновлениям весов на основе градиентов. Однако обучение — это подготовка, а не конечная цель: как только параметры оптимизированы, развертывание модели для предсказаний в реальном времени полностью меняет профиль ресурсов.
Конвейер вывода
Обучение превращает случайно инициализированные веса в параметры, которые кодируют полезные паттерны, но развертывание исполняет эти параметры при совершенно другом профиле ресурсов. При выводе41 те же математические операторы работают в принципиально ином режиме: жесткие сроки задержки заменяют массовую пропускную способность обучения, градиенты и состояние оптимизатора исчезают из памяти, а целевые среды исполнения простираются от периферийных процессоров в милливаттах до облачных серверов с несколькими ускорителями. Этот переход меняет то, как пропускная способность памяти, вычислительная мощность и стадии конвейера определяют производительность системы.
Развертывание в производстве и конвейер предсказаний
Представьте, что модель, которая достигала 99 процентов точности на тестовой выборке, через три месяца после развертывания начинает выдавать бессмысленные результаты, хотя ни один код не менялся. Веса заморожены, и конвейер вывода работает без ошибок. Одна из возможных причин — мир, в котором работает модель, изменился, а сама модель осталась прежней.
Переход от обучения к выводу ограничивает способность зафиксированной развернутой модели адаптироваться. Обученные модели обобщают на невидимые входы через выученные статистические паттерны, но их параметры не меняются при обычном выводе. Когда эксплуатационные данные расходятся с обучающим распределением, модель продолжает применять выученные паттерны. Рассмотрим систему восприятия автономного автомобиля: если зоны дорожных работ становятся более частыми или появляются новые конфигурации транспортных средств, ее реакция по-прежнему отражает обучающие данные. Системы, которые не обновляют параметры в режиме онлайн, адаптируются через контролируемый сбор данных, валидацию и переобучение — намеренный инженерный процесс, подробно описанный в главе «Обучение моделей».
Различия операционных фаз
Работа нейронной сети делится на две фазы с заметно разными вычислительными требованиями и временем жизни состояния. Вывод выполняет только прямой проход: входы оцениваются по статическим параметрам, а размеры батчей диктует входящий трафик. Обучение соединяет прямой проход с обратным распространением ошибки для вычисления градиентов и обновления параметров и подбирает размеры батчей так, чтобы максимизировать заполненность ускорителя и стабильность градиента. Главное: обучение должно одновременно хранить промежуточные активации, градиенты и состояние оптимизатора, что умножает требования к рабочей памяти.42 Хотя базовые веса сети одинаковы, граф исполнения меняется: регуляризаторы, которые нужны только при обучении (например, dropout), удаляются, а соседние матричные операции и активации могут быть объединены или квантованы в специализированные ядра исполнения. На «Потоке вывода и обучения» показан этот структурный контраст между двунаправленным обучением и однонаправленным выводом.
Поток вывода и обучения: при выводе нейронные сети используют выученные веса только для вычисления прямого прохода, что упрощает поток данных и снижает вычислительные затраты по сравнению с обучением, которому нужны и прямой, и обратный проходы для обновления весов. Такой упрощенный процесс позволяет эффективно развертывать обученные модели для предсказаний в реальном времени.
Эти вычислительные различия напрямую проявляются в выборе аппаратуры и топологии развертывания. Кластеры обучения опираются на ускорители с высокой пропускной способностью и большой памятью, потребляющие сотни ватт на сокет, и на выделенную холодильную инфраструктуру центров обработки данных. Развертывание вывода на ограниченной аппаратуре ставит во главу угла предсказуемую хвостовую задержку и энергоэффективность на разнородных платформах: мобильные устройства работают на маломощных нейропроцессорах (обычно 2–4 Вт), периферийные серверы используют специализированные ускорители вывода,43 а облачные инстансы применяют пониженную числовую точность, чтобы насытить тензорные ядра.44 В масштабе промышленная эксплуатация вводит операционные требования — динамическое пакетирование запросов, балансировку нагрузки и изоляцию сбоев, которые не возникают в изолированных прогонах обучения. На уровне памяти обучение сохраняет все активации прямого прохода до тех пор, пока обратные проходы их не потребят, тогда как вывод отбрасывает или перезаписывает промежуточные буферы по мере продвижения исполнения по графу; «Прямой проход при обучении и выводе» сводит этот профиль ресурсов.
| Характеристика | Прямой проход при обучении | Прямой проход при выводе |
|---|---|---|
| Хранение активаций | Сохраняет значения, нужные обратному проходу | Сохраняет текущие входной и выходной буферы |
| Паттерн памяти | Сохраняет или пересчитывает выбранные промежуточные состояния | Переиспользует буферы по мере завершения последовательных слоев |
| Вычислительный поток | Построен для подготовки вычисления градиентов | Оптимизирован для непосредственного получения выхода |
| Профиль ресурсов | Высокие требования к памяти для операций обучения | Минимальный объем памяти для эффективного исполнения |
Прямой проход при обучении и выводе: обе фазы выполняют одни и те же уравнения прямого прохода, но по-разному управляют состоянием. Обучение должно сохранять или пересчитывать значения, нужные обратному проходу, и кроме того несет градиенты и состояние оптимизатора. Вывод может переиспользовать скользящую пару буферов слоев. При одинаковом размере батча 32 упрощенная учетная таблица MNIST из «Памяти при обучении и выводе MNIST при размере батча 32» дает отношение памяти обучения к памяти вывода около 3,4; оно зависит от нагрузки и реализации.
Память и вычислительные ресурсы
Нейронные сети по-разному расходуют вычислительные ресурсы при выводе и при обучении. У вывода две обязанности по памяти. Первая — постоянная: обученные веса и смещения должны оставаться доступными для каждого запроса. Вторая — временная: каждый слой создает буфер активаций, который нужен только до тех пор, пока следующий слой его не использует. Именно это различие делает вывод гораздо более экономным, чем обучение, хотя арифметика прямого прохода одна и та же.
Для эталонной сети MNIST (784 → 128 → 64 → 10) постоянный блок параметров содержит 109 386 параметров, или около 438 КБ при 32-битной числовой точности с плавающей запятой. Показатели по слоям в «Ресурсах вывода MNIST по слоям» объясняют почему: каждый полносвязный слой выполняет одно умножение с накоплением на каждый вес, поэтому объем памяти параметров и арифметика растут вместе.
| Слой | Веса | Смещения | Умножения с накоплением |
|---|---|---|---|
| Слой 1 | = 100 352 | 128 | 100 352 |
| Слой 2 | = 8 192 | 64 | 8 192 |
| Выход | = 640 | 10 | 640 |
| Итого | 109 386 параметров | учтены в итоге | 109 184 |
Ресурсы вывода MNIST по слоям: постоянный блок параметров и число умножений с накоплением для эталонной сети MNIST. В полносвязных слоях те же веса, которые занимают память, определяют и объем арифметики на один вывод.
Эта модель «постоянные параметры плюс скользящие буферы» объясняет и последующие оптимизации развертывания. Пакетирование может повысить повторное использование арифметики и загрузку аппаратуры, но расширяет хранение активаций. Более низкая числовая точность может уменьшить постоянный блок параметров и буферы активаций,45 но только если качество решения выдерживает более компактное представление. Раскладки, специфичные для аппаратуры, могут улучшить повторное использование кэша, держа рабочие данные рядом с вычислительными блоками. Вывод упрощает планирование этих оптимизаций, поскольку параметры фиксированы, а многие активации живут недолго.
Приемы повышения производительности
Фиксация параметров и устранение состояния обратного прохода открывают системные возможности оптимизации, недоступные при обучении. Поскольку граф прямого вычисления статичен и детерминирован, движки исполнения могут оптимизировать раскладку памяти, планирование операторов и числовую точность относительно физических пределов целевого процессора.
Пакетирование входов вносит фундаментальное противоречие между задержкой отдельного запроса и эффективностью аппаратуры. При обработке одного изолированного входа () полносвязные слои выполняют произведения матрицы на вектор (GEMV). Процессор должен передать каждый весовой параметр по шине памяти из DRAM в регистры, чтобы выполнить всего две операции с плавающей запятой на значение, что дает арифметическую интенсивность не выше примерно (при 16-битной точности) или (при 32-битной точности). В этом режиме выполнение ограничено пропускной способностью памяти: арифметические блоки простаивают в ожидании параметров. Объединение запросов в батч размера превращает нагрузку в общее матричное умножение (GEMM). Каждый параметр, загруженный из памяти, теперь параллельно переиспользуется для всех входов, и арифметическая интенсивность растет пропорционально , пока машина не достигнет потолка пропускной способности вычислений. Компромисс — хранение активаций: для сети MNIST обработка одного изображения требует хранения 202 значений выходов слоев (986 значений с учетом входного буфера), тогда как батч из 32 изображений требует 6 464 значения выходов слоев. Промышленные системы, обслуживающие интерактивный трафик, должны динамически балансировать этот компромисс, накапливая входы лишь до предела, который допускает их бюджет задержки на уровне сервиса.
Распределение памяти при выводе гораздо экономнее, чем при обучении, потому что времена жизни промежуточных активаций строго не пересекаются. При обучении каждый тензор активаций должен существовать до тех пор, пока обратное распространение не дойдет до его слоя, что приводит к накопительному потреблению памяти по всей глубине сети (). При выводе, как только слой завершил выполнение, буфер активаций слоя становится ненужным, и выделенное под него хранилище можно освободить или перезаписать. Среды исполнения для обслуживания используют это свойство времени жизни через статическое планирование памяти или двойную буферизацию (схема «пинг-понг»), чередуя два физических блока памяти по мере продвижения данных по слоям. При такой схеме пиковая память временных активаций сворачивается из накопленного итога по всем слоям до максимальной суммы соседних слоев: .
Аппаратно-специфичная компиляция дополнительно снижает задержку, устраняя трафик внешней памяти. На CPU процедуры исполнения разбивают матрицы на блоки, помещающиеся в кэши L1 и L2, избегая простоев на обращениях к основной памяти с высокой задержкой, и вызывают векторные инструкции SIMD (например, AVX-512 или ARM NEON), которые выполняют несколько операций умножения с накоплением за такт. На ускорителях эффективность исполнения зависит от слияния операторов. Наивный путь исполнения запускает отдельные ядра для матричного умножения, добавления смещения и нелинейной активации, после каждого шага записывая промежуточные тензоры обратно в память высокой пропускной способности (HBM) и тут же читая их обратно. Слияние ядер объединяет эти операции в одно ядро, удерживая промежуточные значения целиком в регистрах на кристалле и разделяемой памяти SRAM. Это заменяет дорогие обращения к глобальной памяти локальным доступом к регистрам, снижая накладные расходы на запуск ядер и загрузку шины памяти.
Отказ от обратного прохода также открывает возможность снизить числовую точность. Обучению нужны широкий динамический диапазон и высокая точность (например, FP32 или BF16), чтобы накапливать малые обновления градиента без underflow и катастрофической потери значимости. При выводе замороженные веса и активации часто можно квантовать в представления с меньшим числом бит, например FP16 или INT8, с пренебрежимо малым влиянием на итоговые предсказания. Более низкая точность напрямую бьет по узкому месту пропускной способности памяти: перевод параметров из FP32 в INT8 сокращает вчетверо объем байтов, передаваемых по шине памяти, и вчетверо увеличивает эффективную емкость кэшей на кристалле. Для сети MNIST уменьшение ширины хранения вдвое снижает объем байтов параметров и активаций вдвое; реальное ускорение задержки зависит от того, есть ли у целевого процессора специализированные конвейеры низкоточной арифметики (например, Tensor Cores или инструкции векторного скалярного произведения).
Хотя здесь это показано на сети прямого распространения, эти системные механизмы — амортизация передач параметров через пакетирование, ограничение времени жизни данных переиспользованием буферов, устранение обращений к памяти через слияние операторов и разгрузка шины через квантование — образуют основное проектное пространство всех промышленных движков вывода. Специализированные структуры сетей вносят дополнительные вычислительные паттерны: сверточные операторы разделяют веса по пространственным измерениям, повышая арифметическую интенсивность, рекуррентные архитектуры обрабатывают последовательные шаги с итеративными зависимостями состояния, а трансформерные модели требуют динамического управления кэшем ключей и значений. Эти архитектурные структуры и методы их сжатия рассмотрены в главах «Архитектуры нейронных сетей» и «Сжатие моделей», тогда как архитектуры обслуживания, динамическое пакетирование и эксплуатация в промышленной среде разобраны в разделе «Оптимизация пропускной способности» главы «Обслуживание моделей» и в главе «MLOps».
Интерпретация выходов и принятие решений
Выходы нейронной сети становятся полезными только после того, как их переводят обратно в решения, с которыми может работать обычная система. Предобработка переводит данные реального мира в тензорную форму; постобработка отображает выходы сети в метки, пороги решений, логику валидации, обработку ошибок и последующие сообщения. В сквозном примере MNIST одних логитов недостаточно: системе распознавания цифр нужны наиболее вероятный класс цифры, оценка уверенности, калибровка которой проверена, и запасной маршрут, который направляет неоднозначные предсказания или предсказания с низкой уверенностью на проверку человеком или на второй распознаватель.
Эти граничные стадии имеют совсем иной вычислительный профиль, чем прямой проход. Пока исполнение нейронной сети использует массивно-параллельные матричные блоки ускорителей, предобработка (например, декодирование и нормировка изображений) и постобработка (например, редукция argmax, проверка порогов и сериализация сообщений) обычно выполняются как последовательный скалярный код на хост-CPU. По закону Амдала по мере того, как ядра ускорителя сокращают время прямого прохода почти до нуля, эти неускоренные стадии CPU и связанные с ними передачи данных по PCIe начинают доминировать в сквозной задержке запроса.
Полный жизненный цикл нейронной сети — от проектирования архитектуры через обучение до развертывания для вывода — представляет собой набор математических операций с измеримыми ресурсными затратами. До сих пор эти операции существовали в контролируемой среде сквозного примера MNIST, где данные чистые, задержка ничем не ограничена и аппаратура не испытывает нагрузки. Исторический пример проверяет их на промышленном развертывании, где ни одно из этих условий не выполняется.
Полная система нейронной сети
Прежде чем разбирать, как эти понятия работают вместе в реальном развертывании, проверьте, как вы понимаете полный жизненный цикл нейронной сети:
Используйте классификатор MNIST (784 → 128 → 64 → 10) как сквозную промышленную систему.
- Жизненный цикл системы: можете ли вы проследить путь от проектирования архитектуры через цикл обучения к обученной модели и развертыванию для вывода?
- Память обучения и вывода: при одинаковом размере батча можете ли вы объяснить, почему эта учетная таблица дает обучению примерно в 3,4 раза больше памяти, чем выводу, назвав члены для градиентов, состояния оптимизатора и сохраненных активаций?
- Сквозная трассировка: можете ли вы проследить одно изображение цифры через предобработку, прямое распространение, выходные вероятности, постобработку и итоговое предсказание?
- Поиск узких мест: можете ли вы указать, где могут возникнуть узкие места в системе реального времени, обрабатывающей 100 изображений в секунду?
- Человек в контуре: можете ли вы объяснить, как проверенные пороги решений и мониторинг определяют, когда нужно вмешательство человека?
Распознавание рукописных цифр показывает, как архитектурные решения, предобработка, пороги решений и проверка человеком сочетаются в работающем конвейере обработки документов.
Распознавание рукописных цифр
В конце 1980-х годов Лекун и его коллеги продемонстрировали распознавание рукописных почтовых индексов (ZIP-кодов) на основе обратного распространения ошибки по изображениям, предоставленным почтовой службой США (USPS) (LeCun et al., 1989). Связанная работа по сверточному распознаванию документов позднее поддержала промышленно развернутые считыватели банковских чеков (LeCun et al., 1998). Это были разные системы, но они демонстрировали один и тот же инженерный паттерн: предобработка нормировала изменчивое рукописное письмо, нейросетевой вывод выдавал кандидатов-цифры, пороги отказа направляли неуверенные предсказания на проверку человеком, а последующая логика превращала принятые предсказания в операционные решения. Этот общий конвейер служит системным примером сквозного проектирования машинного обучения, показывая, как предобработка, структура модели и политика отказов взаимодействуют при физических ограничениях пропускной способности.
Задача распознавания документов
Ограничения работы при сортировке документов напрямую следуют из физической механики обработки. Почтовая сортировочная машина перемещает конверты мимо оптических сканеров на механических транспортерах с фиксированной скоростью, оставляя всего десятки миллисекунд на каждый объект, чтобы получить изображение, выделить символы, вычислить модель и привести в действие физические заслонки-распределители. Неверно направленный конверт или неверно прочитанный чек влекут серьезные издержки в виде ручной повторной обработки или последующей финансовой сверки. Поскольку точность на неконтролируемом рукописном тексте не может достичь 100 процентов, конвейер должен сочетать автоматический вывод с явным механизмом отказа, который направляет неоднозначные входы операторам. Образцы рукописных адресов на «Вариативности рукописных адресов» иллюстрируют сенсорную изменчивость, которую стадии предобработки и классификации должны разрешить в этих временных ограничениях.
Вариативность рукописных адресов: образцы адресов и почтовых индексов демонстрируют большой разброс толщины штрихов, наклона, интервалов и формы символов. Конвейер распознавания документов должен поглощать эту изменчивость, не принимая законные различия почерка за изменение задуманных символов. Образцы из базы данных CEDAR CD-ROM 1 USPS Office of Advanced Technology.
Поглощение этой физической изменчивости требует распределить вычислительную нагрузку между несколькими стадиями конвейера. Захват и нормировка изображений на входе ограничивают распределение входных данных, поступающих в нейронную сеть; нейросетевой вывод отображает пиксельные паттерны в калиброванные оценки классов; а логика порогов на выходе определяет компромисс между автоматической пропускной способностью и ошибкой.
Инженерный процесс и проектные решения
Распознать чистую, центрированную цифру несложно. Распознать рукописный текст на фоне переменного фона, масштаба, выравнивания и качества изображения — значит принимать инженерные решения на каждом этапе, от подготовки данных до развертывания.
История наборов данных должна оставаться раздельной. Ранние исследования почтовых индексов использовали изображения почтовых цифр, предоставленные для этой задачи (LeCun et al., 1989). MNIST позднее был составлен из баз рукописных цифр Национального института стандартов и технологий (NIST) и стандартизирован в эталонные изображения, нормированные по размеру (LeCun et al., 1998). Он не возник из сбора реальных конвертов с разными цветами, текстурами, освещением и ориентациями. Однако в обоих наборах инженерное требование было одним и тем же: предобработка должна уменьшать несущественную изменчивость, не стирая информацию о штрихах, необходимую для распознавания.
Проектирование архитектуры балансирует точность, время обработки и стоимость памяти. Для стандартизированного входа цифры из этой главы центральный вопрос в том, какую емкость модели способны поддержать доступные бюджеты задержки и аппаратуры. Полносвязные слои масштабируются как произведение входных и выходных размерностей, требуя значительного хранения параметров и пропускной способности памяти. Сверточные слои переиспользуют веса по пространственным рецептивным полям, сокращая объем параметров и держа промежуточные активации компактными.
Обучение должно охватывать вариативность почерка, а не оптимизироваться только под отобранный тестовый набор. Предобработка нормирует размер и ориентацию, а аугментация может познакомить модель с дополнительными правдоподобными вариантами. Оценка затем должна измерять качество по релевантным стилям письма и условиям эксплуатации, следуя систематическому процессу, описанному в главе «Рабочий процесс машинного обучения».
Пороги уверенности определяют разделение труда между автоматизацией и проверкой человеком. Высокий порог отклоняет больше объектов для ручной обработки; низкий пропускает больше ошибок модели. Правило ожидаемой стоимости выбирает порог , минимизирующий при ограничениях пропускной способности и задержки.
Общая архитектура конвейера
Почтовые исследования ZIP-кодов и развернутые считыватели банковских чеков использовали разные операционные системы, но оба укладываются в шаблон «Конвейера распознавания документов». Получение изображения и традиционная предобработка готовят вход, нейросетевой вывод выдает оценки цифр, а постобработка либо принимает результат, либо направляет спорный объект на проверку.
Конвейер распознавания документов: составной шестистадийный поток, извлеченный из исследований почтовых ZIP-кодов и развернутых систем чтения чеков. Получение изображения и традиционная предобработка готовят рукописные цифры к нейросетевому выводу, после чего сырые оценки проходят постобработку до итогового результата приложения.
Конвейер начинается с получения изображения. В почтовых исследованиях входом было изображение области рукописного ZIP-кода; развернутые считыватели чеков аналогично начинались со сканов документов. Качество получения изображения определяет, какую изменчивость должны поглотить последующие стадии предобработки и распознавания.
Предобработка находит нужное поле, отделяет его символы или иным образом их выделяет и нормирует полученные изображения. Пороговая обработка, анализ связных компонент и нормировка размера — типичные традиционные приемы. Для расчетов MNIST в этой главе используются стандартизированные изображения ; здесь этот размер — учебное соглашение, а не утверждение о каждом почтовом или чековом развертывании.
Затем нейронная сеть обрабатывает каждое нормированное изображение цифры. Система почтовых исследований 1989 года использовала раннюю вариацию LeNet (LeCun et al., 1989) с примерно 10 тыс. параметров, занимавших около 40 КБ в одинарной точности. Этот объем параметров на порядок меньше, чем 109,4 тыс. в полносвязной сети MNIST из этой главы. На рабочих станциях конца 1980-х поддержание объема параметров около 40 КБ позволяло весам модели целиком находиться в быстром кэше во время вывода, минимизируя трафик внешней памяти и сохраняя вычислительную пропускную способность, необходимую для обработки цифр в сроки сортировки.
Постобработка превращает оценки цифр в решения приложения. Для задачи с ZIP-кодом одна неуверенная цифра может отправить весь код на дальнейшую обработку или на проверку человеком. Развернутые считыватели документов используют тот же общий принцип: принимать достаточно уверенные предсказания и отклонять неуверенные случаи, а не навязывать ответ.
Развернутые считыватели документов должны выполнять сквозные временные ограничения, охватывающие получение, предобработку, вывод, постобработку и последующее действие. Точный механизм различается между почтовыми и финансовыми документами, но пропускная способность зависит от всего конвейера, а не только от задержки нейронной сети.
Результаты и операционные последствия
Исследование ZIP-кодов 1989 года представило свои измерения модели, распознавания, пропускной способности и обучения как единую экспериментальную систему. В «Ранних результатах распознавания ZIP-кодов» эти измерения приведены вместе, что показывает, как политика отказа и предобработка влияют на смысл «сырой» скорости классификатора (LeCun et al., 1989).
| Показатель | Опубликованный результат |
|---|---|
| Ошибка и отказ | 1% ошибок классификации после отказа от 12,1% тестовых цифр |
| Пропускная способность | 10–12 классификаций в секунду с учетом получения изображения; более 30 в секунду после нормировки |
| Параметры модели | около 10 000 |
| Обучение | 23 прохода; около 3 дней на рабочей станции Sun-4/260 |
Ранние результаты распознавания ZIP-кодов: измерения системы обратного распространения 1989 года, примененной к изображениям цифр, предоставленным USPS. Результат по отказам показывает, почему операционную частоту ошибок нужно читать вместе с долей входов, которые не передаются автоматической классификации (LeCun et al., 1989).
Эти измерения выделяют три системных компромисса по всему конвейеру:
Во-первых, сквозная пропускная способность ограничивалась ненейронными стадиями. Пока нейронная сеть выполняла более 30 классификаций в секунду (менее 33 мс на цифру), весь конвейер обрабатывал лишь 10–12 объектов в секунду (83–100 мс на объект). Физическая работа с документами, сканирование, пороговая обработка и сегментация занимали более половины общего бюджета задержки. Ускорение одного только нейросетевого вывода дает убывающую отдачу, когда окружающий ввод-вывод и традиционная предобработка доминируют на временной шкале исполнения.
Во-вторых, операционная надежность зависела от явного пути отказа. Вместо того чтобы пропускать каждую цифру через автоматическую классификацию, система удерживала 12,1 процента наиболее неоднозначных тестовых входов от автоматической маршрутизации. Отказ от этого хвоста предсказаний с высокой неопределенностью снизил наблюдаемую ошибку классификации на оставшемся автоматическом потоке до 1 процента. Порог отказа сдвигает рабочую точку вдоль фронта Парето: автоматизация берет на себя рутинный объем, а операторы разбирают неоднозначный хвост, защищая операционный бюджет ошибок системы.
В-третьих, размер модели ограничивался вычислительным потолком машины для обучения. Обучение 10 000 параметров потребовало 23 прохода примерно за три дня на рабочей станции Sun-4/260. Масштабирование до больших режимов параметров было невозможно при тактовой частоте процессора и пропускной способности памяти эпохи развертывания.
Поддержка таких систем в эксплуатации предъявляет требования к жизненному циклу, выходящие за рамки обучения модели. Изменения оптики сканеров, составов чернил, текстуры конвертов или региональных стилей письма со временем смещают распределение входов. Промышленный мониторинг должен отслеживать статистику входных изображений и доли отказов наряду с задержкой классификации и запускать сбор данных и переобучение модели, когда доля отказов превышает пропускную способность операторов проверки.
Ключевые инженерные уроки и проектные принципы
По всем исследованиям почтовых ZIP-кодов и развернутым считывателям чеков центральный урок таков: нейронные вычисления успешны только тогда, когда окружающий конвейер разделяет то же операционное ограничение. Предобработка, вывод, постобработка, отказы и последующие действия должны вместе обеспечивать нужную пропускную способность и бюджет ошибок.
Превращение рукописных пометок в надежные операционные решения требовало согласованных выборов в архитектуре сети, обучении, предобработке, политике уверенности и последующей обработке. Эти исторические системы установили принципы, которые остаются основополагающими в промышленных развертываниях: ограничение распределения входов с помощью специализированной предобработки, подбор архитектур под пределы пропускной способности памяти, калибровка порогов уверенности для поддержки запасного маршрута с участием человека и проектирование всего пути данных под бюджеты сквозной задержки. Операционный жизненный цикл, нужный для поддержания таких конвейеров, формализован в главе «MLOps».
Современные периферийные системы работают при других ограничениях по мощности, задержке и развертыванию, но лежащие в основе инженерные компромиссы остаются теми же: предобработка поглощает изменчивость реальной среды, пороги уверенности защищают бюджеты ошибок на последующих стадиях, а сквозная пропускная способность аппаратуры определяет жизнеспособную емкость модели.
Чтение исторических сравнений систем
Ранний считыватель класса LeNet и многослойный перцептрон MNIST из этой главы показывают преемственность вычислений, а не контролируемый эталон производительности. Их наборы данных, архитектуры, программные стеки, машины и эксплуатационные цели различаются. Обоснованное сравнение структурное: оба преобразуют нормированные пиксели в оценки цифр, оба зависят от выученных параметров и конвейера предобработки, и оба требуют явной политики для неуверенных выходов.
Число параметров дает один конкретный контраст. Сеть ZIP-кодов 1989 года имела около 10 000 параметров, тогда как полносвязная сеть главы — 109 386. Эта разница описывает состояние модели; сама по себе она не определяет задержку, энергопотребление, пропускную способность или стоимость. Для этого нужны фиксированная нагрузка и измерения, которые указывают аппаратуру, числовую точность, среду исполнения, размер батча и сквозной путь принятия решения. Разделение этих переменных не дает приписать более быстрое развертывание целиком кремнию, когда изменились также данные, модель, программное обеспечение или эксплуатационная политика.
Конвейер распознавания документов показывает фундаментальное согласование инженерии систем ML: высокопроизводительная автоматическая классификация требует непрерывной координации между распределением данных, алгоритмической емкостью и ограничениями лежащей в основе машины.
Таксономия D·A·M
Для истории распознавания документов разные ресурсы служили разным целям. Изображения ZIP-кодов, предоставленные USPS, легли в основу раннего исследования распознавания; LeNet дала алгоритмический механизм; позднейшие считыватели банковских чеков дали задокументированный пример развертывания; а MNIST стал стандартизированным эталоном, созданным на основе данных NIST. Вместе они не образуют единой системы, но в совокупности воплощают трехстороннее согласование таксономии D·A·M: отражает ли данные распределение задачи, может ли алгоритм выучить нужное преобразование и способна ли машина выполнить это вычисление в рамках физических бюджетов задержки, памяти и энергии. Пересечения этих осей разобраны в приложении «Таксономия D·A·M».
Ось данных определяет, отражают ли обучающие и оценочные примеры эксплуатационное распределение. Изображения ZIP-кодов USPS, цифры MNIST и входы банковских чеков имеют общую семантику цифр, но происходят из разных процессов получения и разной шумовой среды: разрешение сканирования, артефакты пороговой обработки и разметка документа делают их невзаимозаменяемыми. Предобработка может нормировать вариации масштаба и ориентации, но она не может синтезировать не представленные стили почерка или исправить политику разметки, расходящуюся с последующими операционными решениями. Данные также задают физический след: разрешение входа, размер батча, раскладка тензоров и числовая точность определяют объем байтов, которые должны пройти через иерархии памяти в память ускорителя.
Эти входящие байты задают вход для оси алгоритма, которая определяет математические операции, необходимые для выучивания или оценки представлений. В сквозной сети главы полносвязный слой 784 → 128 задает и исходную представительную емкость, и самый большой блок параметров модели. Функции активации вводят нелинейности, которые определяют, какие границы решений могут сформироваться и остаются ли обратно распространяемые градиенты численно устойчивыми; функция потерь и оптимизатор определяют, как ошибки предсказания управляют обновлениями параметров. Эти выборы задают математическую работу, которую должна выполнить система, но алгоритмическая формулировка остается жизнеспособной, только если ее статистические допущения соответствуют распределению данных, а вычислительный граф укладывается в аппаратный бюджет.
Этот аппаратный бюджет задается осью машины, которая определяет, может ли нужная линейная алгебра выполниться в пределах физической задержки, пропускной способности памяти, емкости памяти и тепловых ограничений. Прямое распространение передает веса параметров и входные активации в арифметические блоки; обратное распространение сохраняет эти прямые активации в памяти, вычисляет тензоры градиентов, обновляет состояния оптимизатора и проходит обратный вычислительный граф. Увеличение размера батча амортизирует загрузку параметров за счет роста арифметической интенсивности, но пропорционально расширяет хранение активаций. Понижение числовой точности с FP32 до 16- или 8-битных форматов в два или четыре раза уменьшает трафик памяти и открывает специализированные блоки матричных вычислений, при условии что сокращенный динамический диапазон сохраняет численную устойчивость и точность решения. Поэтому физическая машина ограничивает не только то, насколько быстро выполняется фиксированная архитектура, но и то, какие размеры батча, числа параметров и числовые форматы физически реализуемы.
Попарные пересечения объясняют, почему эти оси нельзя оптимизировать по отдельности. Данные и алгоритм определяют, чему может научиться система; данные и машина определяют, как информация представляется и перемещается; алгоритм и машина определяют, как вычисление выполняется эффективно. В центре все три ограничения связывают друг друга одновременно. Расширение набора данных улучшает статистическое покрытие, но увеличивает трафик хранения; расширение слоя повышает емкость модели, но превышает память ускорителя; снижение точности арифметики повышает пропускную способность исполнения, но рискует ухудшить качество решения задачи.
Количественные анализы этой главы превращают эту диагностическую рамку в конкретную инженерную практику. Столкнувшись с эксплуатационным симптомом — недостаточной точностью, нарушенным целевым уровнем сервиса по задержке или сбоем из-за нехватки памяти, — инженеры формулируют конкурирующие гипотезы по всем трем осям. Чтобы их различить, нужно измерить решающую физическую или статистическую величину: покрытие выборки и точность разметки для данных, динамику градиентов и распределения ошибок для алгоритма, либо загрузку вычислений, насыщение пропускной способности памяти и объем занимаемой емкости для машины. Поскольку вмешательство на одной оси обычно сдвигает решающее ограничение на другую, валидация требует профилирования сквозной производительности при целевой промышленной нагрузке. Приложение «Таксономия D·A·M» расширяет этот первый диагностический цикл до систематического справочника по методам пересечения, применяемым во всем курсе.
Рассуждение в терминах таксономии D·A·M не дает принимать системные проблемы за изолированные программные ошибки. На практике, однако, инженерные решения часто срываются, когда команды опираются на интуитивные допущения — например, считают, что глубокие сети невозможно отлаживать, что глубина всегда превосходит ширину или что точность на уровне программного обеспечения гарантирует операционную пропускную способность. Чтобы увидеть, где эти эвристики не работают, нужно разобрать повторяющиеся ловушки, которые возникают, когда нейронные вычисления сталкиваются с физическим железом.
Заблуждения и ловушки
Статистическое обучение добавляет режимы отказа, которые одна лишь построчная проверка кода не выявляет. Перечисленные ниже заблуждения и ловушки могут привести к неверному распределению усилий или развертыванию неподходящих решений.
Заблуждение и ловушка
Заблуждение: Нейронные сети полностью непрозрачны и не поддаются отладке.
Нейронные сети не дают построчной причинной трассы традиционного кода, но диагностике они поддаются. Визуализация активаций может показать выученные паттерны, анализ градиентов измеряет локальную чувствительность к входам, а абляционные исследования оценивают вклад компонентов. Эти инструменты дают частичные свидетельства, а не полное объяснение: карты значимости могут быть нестабильны, коррелированные признаки усложняют атрибуцию, а абляция может изменить то поведение, которое должна проверять. Для классификатора MNIST из раздела «Основы архитектуры сети» веса первого слоя все же могут служить полезной проверкой того, какие паттерны выучила модель. Отладка статистической системы поэтому сочетает зондирование на уровне модели со срезами данных, контролируемыми вмешательствами и сквозной оценкой.
Заблуждение и ловушка
Ловушка: Отказ от экспертных знаний предметной области ради доступности глубокой модели.
Команды считают, что автоматическое выучивание признаков устраняет потребность в знаниях предметной области. Успешные системы требуют экспертизы на каждом этапе: выбор архитектуры, проектирование целевой функции обучения, подготовка датасета и интерпретация выходов. История распознавания документов в разделе «Распознавание рукописных цифр» показывает, почему пороги уверенности должны отражать экономику эксплуатации и направлять неуверенные случаи операторам. Без знаний предметной области команды могут развернуть сети, которые выглядят сильными на тестовой выборке, но терпят неудачу в промышленной эксплуатации, потому что их пороги, запасные пути или стоимость ошибок заданы неверно.
Заблуждение и ловушка
Заблуждение: Глубокие сети всегда точнее широких.
Инженеры полагают, что наращивание числа слоев — основной путь к повышению точности, поскольку глубина позволяет иерархически извлекать признаки. На практике одна лишь глубина дает убывающую отдачу. ResNet показала, что очень глубокие остаточные сети можно эффективно обучать, но ее результаты на ImageNet также ясно показывают, что добавление слоев нужно соотносить с возросшими затратами на обучение и вывод (He et al., 2016). Позднее EfficientNet продемонстрировала, что составное масштабирование ширины, глубины и разрешения входа может превзойти масштабирование только по глубине при заданном бюджете ресурсов (Tan and Le, 2019). Урок не в том, что глубина плоха; команды должны измерять загрузку емкости и масштабировать то измерение архитектуры, которое дает наилучшую точность на FLOP.
Заблуждение и ловушка
Ловушка: Использование нейронных сетей для задач, которые решаются более простыми методами.
Команды считают, что глубокое обучение всегда работает лучше. На небольших наборах данных или при приблизительно линейных зависимостях более простая модель, такая как логистическая регрессия, может сравняться с нейронной сетью или превзойти ее, требуя меньше обучения, памяти и сопровождения. Величина этого преимущества зависит от нагрузки, поэтому команды должны сравнить простой базовый вариант и обосновать усложнение измеренным выигрышем для конкретной задачи. Нейронные сети превосходно выявляют иерархические паттерны («Автоматическое открытие паттернов»), но несут дополнительные издержки. Используйте их, когда их представительная емкость дает достаточную пользу, чтобы оправдать измеренную системную стоимость.
Небольшие нейросетевые нагрузки остаются ограниченными памятью даже на больших GPU.
Заблуждение и ловушка
Заблуждение: Проблемы распределения обучающих данных можно исправить после проектирования модели.
Команды рассматривают обучение как механическую подачу данных через архитектуры. Сети на несбалансированных наборах данных могут плохо работать на редких классах: детектор мошенничества при дисбалансе 99:1 достигает точности 99 процентов, всегда предсказывая «не мошенничество» и не находя ни одного случая мошенничества. Невзвешенная целевая функция среднего эмпирического риска может недооценивать редкие, но критичные классы, если выборка, веса, конструкция потерь и оценка не учитывают дисбаланс. Команды, которые пропускают разведочный анализ данных, могут развернуть модели с высокими совокупными метриками, но недопустимо слабым качеством на редких классах.
Заблуждение и ловушка
Ловушка: Развертывание исследовательских моделей в промышленной эксплуатации без учета системных ограничений.
Промышленная эксплуатация добавляет ограничения, которых нет в исследованиях: бюджеты задержки (50–100 мс сквозной задержки), лимиты памяти (2–4 ГБ для периферийных устройств) и параллельную нагрузку (100–1 000 запросов в секунду, RPS). Полный конвейер включает предобработку, вывод и постобработку («Конвейер вывода»). Модель, которая выполняет вывод за 20 мс, не укладывается в бюджет 50 мс, когда предобработка добавляет 25 мс, а постобработка — 10 мс (всего 55 мс). Поэтому отделение разработки модели от проектирования системы тратит усилия на точность, игнорируя осуществимость развертывания.
Заблуждение и ловушка
Заблуждение: Больше вычислительной мощности автоматически означает более быстрое обучение.
Команды покупают дорогие GPU, ожидая пропорционального ускорения, но производительность может определяться трафиком памяти или накладными расходами на запуск. Арифметическая интенсивность показывает, какой ресурс является решающим. По простой модели трафика, которая читает параметры один раз и перемещает активации каждого батча по одному разу, прямой проход MNIST из «Числа операций прямого прохода MNIST по слоям» достигает примерно 12,4 FLOP на байт при батче 32 и еще меньше при батче 1. Это намного ниже точек перехода (ridge points) многих высокопроизводительных ускорителей. Точка перехода процессора — его отношение баланса машины (пиковые вычисления в FLOP/s, деленные на пиковую пропускную способность памяти в байтах/с), которое задает минимальную арифметическую интенсивность для насыщения вычислительных блоков. Для современных серверных ускорителей вроде NVIDIA A100 или H100 эта точка перехода лежит между и FLOP на байт. Поскольку 12,4 FLOP на байт у MNIST более чем на порядок ниже этого порога, выполнение застревает на склоне, ограниченном пропускной способностью памяти, и дополнительные пиковые FLOP/s полностью бесполезны, пока не вырастут размер батча или повторное использование данных. Раздел «Модель Roofline» приложения «Основы машины» объясняет, почему дополнительные пиковые FLOP/s не помогут, пока нагрузка не даст достаточно повторно используемой работы на байт. Кэши, слияние операций, векторизация и стоимость запуска делают измеренное ускорение окончательной проверкой.
Заблуждение и ловушка
Ловушка: Экстраполяция улучшений точности без учета убывающей отдачи.
Команды могут экстраполировать выигрыш в 5 пунктов от масштабирования с 10 тыс. до 100 тыс. параметров на еще 5 пунктов при переходе к 1 млн. Эмпирическое улучшение, напротив, убывает с ростом масштаба в зависимости от задачи, метрики, качества данных, семейства моделей и режима масштабирования. В «Исторической производительности» строки ImageNet показывают, как ошибка снижается с 15,3 процента у AlexNet до 3,6 процента у ResNet-152, тогда как вычисления обучения растут с примерно до FLOP. Поэтому команды должны измерять предельную отдачу в своем режиме, а не экстраполировать линейно.
У этих заблуждений и ловушек общий корень: поведение статистической системы рассматривается так, будто его определяет только код. Если распознать их заранее, внимание направляется на подходящие измерения и диагностику.
Итоги
Нейронные вычисления переводят математические формулировки в физическое исполнение на машине. Линейная алгебра и математический анализ определяют стоимость операций согласно железному закону систем ML (). Прямое распространение задает вычислительную работу , часто доминируемую матричными умножениями, тогда как обратное распространение сохраняет отдельные промежуточные значения и добавляет градиенты и состояние оптимизатора. Получающийся объем памяти зависит от архитектуры, размера батча, точности, оптимизатора и стратегии пересчета. Эти механизмы делают объемы памяти, арифметические интенсивности и пределы задержки оцениваемыми до развертывания.
Замена рукописных правил решений параметрами, выученными из данных, превращает инжиниринг признаков в машинное исполнение. Послойные композиции взвешенных сумм, нелинейных активаций и обновлений градиента образуют иерархические представления, которые переводят сырые входы в предсказания. Обучение настраивает веса связей итеративной оптимизацией, а вывод применяет фиксированные параметры к входящим данным. Эти фазы предъявляют разные физические требования: в учетной таблице FP32 этой главы шаг обучения с батчем 32 требует примерно в 3,4 раза больше памяти, чем вывод с батчем 32, потому что обратное распространение сохраняет активации и выделяет буферы градиентов и оптимизатора. В промышленной эксплуатации, как показал пример распознавания документов, эти математические ядра не работают изолированно: предобработка, нейросетевой вывод, отказы и постобработка должны совместно укладываться в единый бюджет задержки и надежности.
Математика модели
- Каждый сдвиг парадигмы меняет системную стоимость представления: в этом примере с цифрой 28×28 число операций растет от примерно 100 сравнений (на правилах) через примерно 8 000 операций (классическое ML) до 109 184 MAC (глубокое обучение) — сценарий роста в 1 091,8 раза, который меняет требования к аппаратуре.
- Нейронные сети выучивают представления из данных: эти сети заменяют часть рукописных признаков иерархическими представлениями, выученными из примеров. Такая гибкость переносит нагрузку на репрезентативные данные, вычисления обучения и валидацию.
- Обучение и вывод часто делают упор на разные цели: обучение обычно выигрывает от эффективной пропускной способности при повторяющихся обновлениях, тогда как онлайн-вывод обычно ценит задержку отдельного запроса; офлайн-вывод может отдавать предпочтение пропускной способности. Размер батча связывает загрузку, память, пропускную способность, задержку и статистическое поведение в этих режимах.
- Активации — это математика и аппаратура: ReLU обычно дешевле реализовать, чем сигмоиду или tanh, а ее единичный градиент для положительных входов исключает насыщение активации на этой ветви. Ее практическое преимущество сочетает стоимость реализации с поведением при оптимизации.
- Прямой проход часто строится на матричной работе: плотные матричные ядра дают более 90 процентов FLOP в примере плотной сети этой главы и доминируют во многих важных нейросетевых нагрузках, поэтому специализированное матричное железо может заметно превосходить универсальное исполнение для этих операций.
- Обратное распространение требует сохранения пути: решение задачи распределения ответственности требует сохранять или пересчитывать значения, которые использует обратный проход, поэтому стоимость памяти часто определяет, можно ли обучить модель на данном устройстве, и мотивирует методы, которые сокращают, пересчитывают или разделяют состояние обучения.
- Полный конвейер ML определяет сквозную производительность: предобработка, нейронные вычисления и постобработка влияют на задержку и надежность. Примеры распознавания документов показали, что успех в промышленной эксплуатации зависит от работы всего конвейера в реальных ограничениях, а не только от точности модели на тестовой выборке.
Эскалация между вычислительными парадигмами реальна в нагрузке MNIST: классификация одной цифры 28×28 требовала около 100 сравнений при рукописных правилах, но 109 184 MAC в скромной трехслойной сети — рост в 1 091,8 раза, который меняет каждое системное измерение в «Тенденциях ресурсов системы». Это сравнение задает ось алгоритма таксономии D·A·M и показывает, как алгоритмические выборы напрямую переходят в ограничения машины.
Многослойные перцептроны, разобранные в этой главе, показывают прямой ресурсный закон: плотная связность заставляет и хранение параметров, и число операций умножения с накоплением масштабироваться как произведение размерностей соседних слоев. Только в первом слое изображение MNIST размером дает 784 входных значения, и для соединения каждого входа с 128 скрытыми нейронами требуется 100 352 весов. Эта плотная связность не содержит явного априорного знания о пространственной локальности: модель должна выучить из данных, какие связи между близкими и далекими пикселями важны, одновременно расходуя пропускную способность памяти и хранилище на вычисление каждой связи.
Код показывает, что от сети требуется, а математика — во что обойдется ее исполнение. Именно в этой арифметике алгоритм встречается с машиной: веса нужно хранить и передавать, плотные слои отображаются на матричные исполнительные механизмы, а сохраненные активации занимают память ускорителя, от которой зависит, помещается ли обучение на устройство. По кремниевому контракту математика заранее фиксирует операции, которые машина должна выполнить. Аудит этого контракта позволяет инженерам систем вычислить решающие узкие места из первых принципов, прежде чем профилирование подтвердит, где исполнение останавливается.
От универсального к специализированному
Универсальные полносвязные сети превращают каждую связь входа с нейроном в объем памяти и объем вычислений . Однако реальные данные обладают структурой, которую можно использовать: изображения имеют пространственную локальность, текст содержит последовательные зависимости, а аудиосигналы следуют временным паттернам. Глава «Архитектуры нейронных сетей» рассматривает специализированные архитектуры, такие как сверточные сети и трансформеры, которые кодируют эти структурные допущения как индуктивные смещения. Подгонка топологии сети под структуру данных сокращает избыточные перемещения данных и улучшает повторное использование весов, но вводит новые компромиссы в хранении активаций, арифметической интенсивности и распараллеливании на ускорителе.
-
Лекун, Бенжио и Хинтон: лауреаты премии ACM Тьюринга 2018 года за концептуальные и инженерные прорывы, которые сделали глубокие нейронные сети критически важным компонентом вычислительной техники. Их совместная работа продвинула обучение представлений, архитектуры сетей и методы обучения, на которых держится современное глубокое обучение. ↩
-
Нестабильность градиентов: в упрощенном 20-слойном сигмоидном пути сами множители производной активации ограничены сверху величиной , то есть . Полный градиент включает также веса и другие операции, но многократно насыщенные производные все равно могут сделать обновления ранних слоев пренебрежимо малыми. Плато или NaN могут выявить симптом, не указывая на причину; ректифицированные линейные активации (ReLU), аккуратная инициализация, нормализация, методы оптимизации и остаточные связи помогли сделать глубокие сети обучаемыми, а раздел «Остаточные связи: решение проблемы глубины» главы «Архитектуры нейронных сетей» подробно рассматривает остаточные связи. ↩
-
Тензорные операции: логические размерности тензора отображаются на плоскую физическую раскладку, и ядро может предпочитать другой порядок. Если при переходе от порядка «канал первым» к порядку «канал последним» для типичного входа ImageNet (224×224×3, около 151 КБ) требуется материализованная перестановка, то на каждое изображение приходится около 301 КБ трафика чтения и записи, при этом математический результат модели не меняется. Некоторые среды выполнения обходятся без копирования с помощью представлений, слияния операций или совместимого ядра. Когда перестановка остается, она может съесть часть жесткого бюджета вывода еще до начала основной арифметики модели. ↩
-
Breakout (DQN — deep Q-network): аркадная игра Atari 1976 года стала вехой ИИ, когда DQN от DeepMind (2015) выучил игровую политику по пикселям без вручную заданной политики для каждой ситуации. Среда, пространство действий, награда и предобработка по-прежнему программировались. DQN уменьшал кадры до , складывал 4 кадра на входе и выбирал новое действие каждые 4 кадра, что показывает: обучаемое управление по-прежнему опирается на инженерный цикл вывода в реальном времени. ↩
-
Экспертные системы: эти системы превращают человеческую экспертизу в явные правила
IF-THEN. Такой подход инженерии знаний плохо масштабируется для задач вроде распознавания объектов, где существенную изменчивость трудно перечислить. Даже успешные системы вроде XCON от DEC накапливали тысячи вручную написанных правил, поэтому получение правил, их согласованность и поддержка стали центральными инженерными издержками. ↩ -
Гистограмма направленных градиентов (HOG): влиятельный ручной дескриптор для обнаружения пешеходов до эпохи глубокого обучения (Dalal and Triggs, 2005). Одна распространенная конфигурация вычисляет ориентации градиентов в ячейках пикселей, а размер ячеек и другие параметры подбираются под задачу. Фиксированный вычислительный граф HOG эффективно выполняется на CPU с предсказуемой задержкой, тогда как выученные признаки могут сократить необходимость переделывать дескриптор, но не переносятся между областями автоматически и часто выигрывают от ускорителей только с ростом масштаба модели и батча. ↩
-
Масштабно-инвариантное преобразование признаков (SIFT): SIFT воплощает эти экспертные знания в четырехэтапном алгоритме, который находит ключевые точки, устойчивые к масштабу и повороту. Число найденных ключевых точек зависит от изображения, что осложняет пакетирование фиксированной формы. Системы могут регуляризовать представление с помощью ограничения числа точек, паддинга, пулинга или фиксированных кодировок, но каждый такой выбор добавляет вычисления или отбрасывает информацию. ↩
-
Фильтры Габора: изначально разработанные для локализованного анализа «время — частота» (Gabor, 1946), эти фильтры выделяют границы и текстуры с определенными ориентациями и частотами. Типичный банк содержит множество вручную спроектированных фильтров по ориентациям и частотам. Глубокие сверточные слои вместо этого выучивают небольшие ядра из данных; ранние фильтры сверточных нейронных сетей (CNN) часто становятся детекторами границ, цвета и текстуры, переводя проектирование признаков от ручных банков фильтров к оптимизации на основе данных (Krizhevsky et al., 2012; LeCun et al., 2015). ↩
-
Разделение памяти AlexNet: команда Крижевского разделила AlexNet между двумя GPU NVIDIA GTX 580, в каждом из которых было по 3 ГБ VRAM, чтобы модель и состояние обучения помещались на два устройства. Этот обходной путь иллюстрирует системный урок: конфигурация обучения может превышать бюджет памяти одного устройства, и тогда инженеры вынуждены распределять работу и обмен данными между устройствами. ↩
-
Компромисс смещения и дисперсии: в некоторых перепараметризованных режимах ошибка на тесте снова снижается после порога интерполяции, поэтому классическое описание с одной U-образной кривой неполно. Следствие для систем: размер модели нельзя считать универсально монотонным риском переобучения. Более крупные модели могут стать полезным инженерным вариантом, если измеренные данные, оптимизация и режим регуляризации подтверждают выигрыш. ↩
-
Стена памяти: быстрая память на кристалле отвечает за наносекунды, тогда как более крупная внешняя память находится на порядки дальше по задержке и энергии. Веса нейронных сетей часто превышают размер самых маленьких кэшей, поэтому производительность зависит от разбиения на блоки, более крупных уровней кэша, статической памяти SRAM на кристалле и памяти высокой пропускной способности (HBM), которые позволяют переиспользовать значения до следующего обращения к внешней памяти. Недостаточное повторное использование может оставить вычислительные блоки простаивающими, даже когда пиковая арифметическая пропускная способность высока. ↩
-
Операции, ограниченные памятью: арифметическая интенсивность матричного умножения (FLOP на загруженный байт) определяет, ограничен слой вычислениями или памятью. Слои, которые лежат ниже точки пересечения Roofline для оборудования, завершают арифметику раньше, чем из памяти придет следующий блок весов. Итог: эффективная загрузка оборудования может резко упасть, и добавление вычислительных блоков дает мало ускорения, пока не улучшатся пропускная способность памяти или повторное использование данных. ↩
-
Нейрон: Маккаллок и Питтс (McCulloch and Pitts, 1943) ввели математическую пороговую модель нервной активности: входы складываются, и выход срабатывает по принципу «все или ничего», когда достигается порог. Этот логический нейрон — точка отсчета для абстракции искусственного нейрона и для сетей, построенных из множества простых элементов. Обученные веса, глубокие иерархии и современные тракты с объединенным умножением и сложением (FMA) в ускорителях — более поздние разработки, которые превращают эту абстракцию в матрично-насыщенные нагрузки, изучаемые в этой главе. ↩
-
MAC (умножение с накоплением): базовая операция плотных и сверточных слоев — . Спецификации аппаратуры часто указывают пропускную способность объединенного умножения и сложения в FLOP, поскольку одно умножение и одно сложение считаются двумя операциями с плавающей запятой. При таком соглашении скорость в FLOP/s вдвое выше скорости в MAC/s, если MAC считать одной операцией умножения с накоплением. Выбор слоев и батча также создает затраты на активации, связь и перемещение данных, поэтому число MAC необходимо, но недостаточно для бюджета системы. ↩
-
Перцептрон: машина, построенная для исполнения алгоритма обучения; с самого начала она напрямую связывала аппаратуру и программное обеспечение. Один слой с линейным порогом не может представить нелинейно разделимые функции, такие как XOR, сколько бы дополнительных входов ни добавлять. Многослойные нелинейные сети расширяют класс представимых функций, но вместе с этим вносят издержки обучения и системные издержки, описанные в этой главе. ↩
-
Обратное распространение ошибки: сокращение от «backward propagation of errors» (обратное распространение ошибок). Алгоритм использует правило цепочки, чтобы вычислить, насколько функция потерь локально чувствительна к миллионам весов. Он не устанавливает, какие веса исторически вызвали ошибку. Вербос применил его к нейронным сетям в 1974 году (Werbos, 1974), а публикация Румельхарта, Хинтона и Уильямс 1986 года показала практическую эффективность (Rumelhart et al., 1986). Системная цена: обратное распространение требует хранить активации прямого прохода и дополнительное состояние обучения, что создает многократно больший объем памяти, количественно оцененный далее в главе. ↩
-
Задержка внедрения алгоритма относительно системы: обратное распространение было доступно в форме для нейронных сетей к 1974 году (Werbos, 1974), а демонстрация 1986 года Румельхарта, Хинтона и Уильямс привлекла к нему гораздо большее внимание (Rumelhart et al., 1986). Механизмы внимания появились в нейронном машинном переводе в 2014 году, трансформеры сделали их центральными в 2017 году, а позднее инфраструктура масштаба TPU и GPU позволила развертывать гораздо более крупные системы. Эти истории не означают, что каждая вычислительно дорогая идея обязательно станет успешной. Они показывают, что алгоритм следует оценивать вместе с данными, методами оптимизации, программным обеспечением, аппаратурой и режимом задачи, которые нужны, чтобы сделать его полезным. ↩
-
Масштаб энергии обучения: оценка предполагает рабочую станцию мощностью 750 Вт для исторического прогона и использует 10,5 МВт·ч в год как типичный бюджет электроэнергии домохозяйства в США. Сценарий закрытой модели рассматривает внешнюю оценку в GPU-днях как время ускорителя, эквивалентного A100, и применяет простой коэффициент накладных расходов дата-центра. Результат иллюстрирует масштаб, но не устанавливает реальную энергию, затраченную на обучение GPT-4. ↩
-
TPU (тензорный процессор): специализированный ускоритель Google, впервые развернутый внутри компании в 2015 году, оптимизированный именно под матричные умножения, которые доминируют в нагрузках нейронных сетей. TPU v1 достигал 92 TOPS (целочисленных операций в секунду в INT8, по данным производителя) для вывода при 75 Вт, что давало энергоэффективность, недоступную универсальным GPU того времени. Название «Tensor Processing Unit» отражает решение пожертвовать универсальной гибкостью ради максимальной пропускной способности для операции, которая нужна нейронным сетям чаще всего. ↩
-
Сигмоида: от греческих sigma и eidos («сигмообразная»), что относится к S-образной кривой, отображающей входы в ограниченный диапазон (0, 1). Отображение требует аппроксимации экспоненты, которую обычно реализуют специализированными инструкциями, таблицами поиска или полиномиальными методами. Оно, как правило, дороже операции сравнения и выбора ReLU, хотя измеренный разрыв зависит от точности, векторизации и аппаратуры. Принятие ReLU отражало и более простое распространение градиента по ее положительной ветви, и более дешевое исполнение. ↩
-
Проблема затухающего градиента: умножение якобианов по слоям в правиле цепочки может сокращать градиенты. Производная сигмоиды не превышает 0,25, поэтому на упрощенном 10-слойном пути одни лишь множители производной активации дают не более . Полный градиент включает также веса и другие операции, но многократно насыщенные производные активации все равно могут сделать обновления ранних слоев пренебрежимо малыми. ↩
-
Tanh (гиперболический тангенс): благодаря центрированию диапазона выходов относительно нуля
tanhможет уменьшать коррелированное поведение обновлений, связанное с полностью положительными активациями. Его вычислительная стоимость близка к сигмоиде, так как она также опирается на аппроксимацию экспоненты, а поведение насыщения по-прежнему допускает затухающие градиенты. ↩ -
ReLU (ректифицированная линейная единица): в отличие от дорогих экспоненциальных операций предыдущих функций активации, операция
max(0, x)в ReLU сводится к простому сравнению и выбору. Эта эффективность вместе с лучшим распространением градиента для положительных активаций помогла сделать вычислительно посильными глубокие архитектуры эпохи AlexNet (Nair and Hinton, 2010; Krizhevsky et al., 2012). ↩ -
Dropout: случайное отключение нейронов во время обучения заставляет сеть выучивать избыточные представления; это техника регуляризации, которая использовалась при переходе к глубоким моделям зрения в эпоху AlexNet (Srivastava et al., 2014; Krizhevsky et al., 2012). Это создает системное расхождение между вычислительными графами обучения (стохастический) и вывода (детерминированный). Неспособность переключиться с графа обучения на граф вывода — распространенная ошибка, которая может незаметно ухудшить точность. ↩
-
Системная цена пакетной нормализации: BatchNorm добавляет два обучаемых параметра на признак (масштаб и сдвиг ) и ведет себя по-разному при обучении и выводе: обучение использует живые среднее и дисперсию по мини-батчу, а вывод — зафиксированные скользящие статистики. Поддерживая лучше масштабированные распределения активаций, она стабилизирует обучение и может позволить более высокие скорости обучения, но также делает слой зависимым от статистик батча. Маленькие батчи дают шумные оценки среднего и дисперсии, поэтому математический стабилизатор становится системным выбором относительно размера батча, памяти активаций и паритета обучения и обслуживания. Более поздние архитектуры и крупномасштабные режимы обучения вводят дальнейшие варианты того же компромисса статистик батча. ↩
-
Softmax: название отражает ее роль «мягкой», дифференцируемой версии
argmax— функции, которая должна просмотреть весь вектор, чтобы найти максимальное значение. Эта векторная операция не используется как прямая замена поэлементным нелинейностям вроде ReLU, но она центральна всякий раз, когда модели нужно нормировать вектор оценок, включая классификационные головы и слои внимания. Прямое возведение в экспоненту может переполнить 32-битный формат с плавающей запятой. Устойчивые реализации вычитают наибольший логит перед экспонентой; такой сдвиг не меняет ни одной вероятности softmax, но делает наибольшую экспоненту равной единице. ↩ -
Логиты: в многоклассовых нейросетевых классификаторах логиты — это ненормированные выходные оценки. Разности оценок соответствуют логарифмам отношений вероятностей после softmax, тогда как отдельный многоклассовый логит сам по себе не является калиброванной величиной логарифма шансов. Поскольку
argmaxпо логитам иargmaxпо вероятностям softmax выбирают один и тот же класс, вывод может пропустить softmax, если нужен только лучший класс. ↩ -
Теорема об универсальной аппроксимации: при условиях на функцию активации, целевую функцию, компактную область определения и допуск аппроксимации достаточно широкая сеть с одним скрытым слоем может сколь угодно точно аппроксимировать целевую функцию. Этот результат о существовании неконструктивен: он не указывает, как найти веса и сколько нейронов потребует практическое обучение. Для некоторых классов функций глубина дает экспоненциальное преимущество в представлении по сравнению с мелкими сетями, но это разделение не универсально. ↩
-
Стоимость памяти параметров: число параметров — обманчивый показатель для оценки важности с точки зрения памяти; некоторые слои добавляют небольшие обучаемые параметры масштаба или сдвига, которые почти не влияют на бюджет байтов, но могут заметно менять поведение модели при изменении настроек обучения. И наоборот, основная масса параметров в плотных матрицах весов требует дополнительного состояния при обучении: градиентов и служебных данных оптимизатора сверх самих сохраненных весов. Модель, которая помещается в память для вывода, поэтому может требовать в несколько раз больше памяти для обучения; эта стоимость количественно оценена далее в бюджете памяти обучения. ↩
-
Смещения: смещение добавляет один параметр на нейрон, тогда как у нейрона с входами есть весов, поэтому смещения составляют параметров слоя. Их доля во всей модели и влияние на точность зависят от ширины слоев, архитектуры и нормализации. Некоторые современные архитектуры опускают смещения в слоях, за которыми следует пакетная нормализация, поскольку преобразование нормализации содержит выученный сдвиг. ↩
-
Задача XOR: XOR — классический пример того, почему важна топология сети. Один слой с линейным порогом не может представить эту нелинейно разделимую функцию, сколько бы элементов он ни содержал, тогда как небольшая сеть с нелинейным скрытым слоем может. Точное число нужных элементов зависит от соглашений об активациях и представлении; устойчивый урок в том, что добавление нелинейной глубины меняет класс функций, которые может выразить сеть. ↩
-
Инициализация Xavier/Glorot: для слоя с входами и выходами распространенный выбор Glorot использует дисперсию весов , чтобы уравновесить прямые активации и обратные градиенты (Glorot and Bengio, 2010). Такая поправка не добавляет FLOP; это вопрос задания случайного распределения при запуске. ↩
-
Пакетная обработка: пакетирование служит двум целям. Большие батчи усредняют шум градиента по большему числу примеров и могут повысить загрузку аппаратуры, превращая матрично-векторную работу в более крупные матрично-матричные ядра. Они также выполняют больше работы суммарно и обычно увеличивают задержку для отдельного запроса; выигрыш в пропускной способности зависит от формы и аппаратуры. Каждое удвоение размера батча примерно удваивает память активаций, поэтому размер батча — совместное оптимизационное и системное решение, а не чисто статистический или аппаратный выбор. ↩
-
Функция потерь: в статистической теории решений ее сформулировал Абрахам Вальд как «стоимость» неверного решения; количественно задает разрыв между предсказанием и истинным значением . Выбор функции потерь формирует геометрию оптимизации: он определяет ландшафт градиентов, по которому должно идти обратное распространение ошибки. Функция с плоскими областями вблизи неверных предсказаний дает слабые градиенты, которые тормозят обучение, тогда как функция с крутыми градиентами вблизи границы решений ускоряет сходимость именно там, где это важнее всего, — системное следствие, рассмотренное в разделе «Функции потерь». ↩
-
One-hot-кодирование: представление классов как -мерных двоичных векторов, в которых ровно один элемент равен 1; такое кодирование разреженно по построению: для 10 классов MNIST 90 процентов каждого вектора метки — нули. Реализации обычно хранят целочисленный индекс класса вместо того, чтобы материализовать этот вектор. Для очень больших выходных пространств такие методы, как выборочный softmax, также позволяют сократить вычисление выхода. ↩
-
Правило цепочки: тождество математического анализа для -слойной сети становится произведением из множителей. Если каждая частная производная чуть меньше единицы, произведение экспоненциально стремится к нулю; если чуть больше — оно взрывается. Эта мультипликативная структура делает глубину системным ограничением, а не только проектным выбором: она задает требования к численной точности и стратегии инициализации, которые нужны, чтобы обучение оставалось стабильным (Glorot and Bengio, 2010; He et al., 2015). ↩
-
Adam (адаптивная оценка моментов): хранит для каждого параметра оценки первого и второго моментов, что требует дополнительной памяти FP32, вдвое превышающей объем самих параметров (Kingma and Ba, 2015). Для модели MNIST на 100 тыс. параметров эти накладные расходы пренебрежимо малы, но для модели на 7 млрд параметров они добавляют около 56 ГБ, что часто решает, помещается ли модель на одном GPU или требует разбиения. Adam широко используют, потому что его адаптивные обновления хорошо работают во многих задачах, но скорость обучения, расписание, регуляризация и стратегия памяти все равно требуют проверки. ↩
-
Autograd (автоматическое дифференцирование): дифференцирование в обратном режиме восходит к работе Линнаинмаа по дифференцированию компьютерных программ (Linnainmaa, 1970). Современные движки autograd записывают операции прямого прохода в ориентированный ациклический граф (DAG), а затем обходят его назад, применяя правило цепочки, чтобы вычислить градиенты автоматически. Ключевой системный компромисс: более гибкое исполнение фиксирует именно то, что произошло на каждой итерации, тогда как более фиксированное исполнение открывает больше возможностей для оптимизации заранее. Этот выбор проектирования фреймворков подробно рассмотрен в главе «Фреймворки машинного обучения». ↩
-
Скорость обучения: этот скаляр сильно влияет на инфраструктуру обучения, потому что изменение размера батча может потребовать перенастройки расписания оптимизации. Правило линейного масштабирования увеличивало скорость обучения вместе с размером батча для конкретного режима обучения на ImageNet с большим батчем (Goyal et al., 2017), но лучшая политика зависит от модели, оптимизатора, данных и масштаба. Применение правила масштабирования за пределами проверенного режима может привести к расходимости при переходе от обучения на одном GPU к обучению на нескольких. ↩
-
Эпоха: один полный проход по обучающему набору. Число проходов напрямую умножает общий объем работы: прогон MNIST на 100 эпох выполняет в 100 раз больше прямых и обратных проходов, чем одна эпоха. Обучение больших языковых моделей часто задается бюджетом токенов, а не простым числом эпох, потому что источники данных могут смешиваться и выбираться с разной частотой. Тот же учет все равно действует: каждый дополнительный обучающий токен добавляет еще одно прямое и обратное вычисление. ↩
-
Вывод (inference): от латинского inferre («вносить, заключать»), заимствовано из логики, где означает выведение заключений из посылок. Машинное обучение использует термин для обозначения границы систем: обучение выполняет прямые и обратные проходы и ведет состояние оптимизатора, тогда как обычный вывод выполняет прямой граф с замороженными параметрами. Удаление градиентов, состояния оптимизатора и большинства сохраненных активаций может существенно сократить память и вычисления, но соотношение зависит от архитектуры, размера батча, точности, рабочей памяти среды выполнения и стратегии обслуживания. ↩
-
Бюджет мощности GPU для обучения: требование «большой памяти» диктуется необходимостью одновременно держать параметры, градиенты, состояние оптимизатора и активации. Соответствующее энергопотребление определяет «значительную холодильную инфраструктуру»: один мощный GPU для обучения потребляет 400–700 Вт. Даже по сравнению с мобильным чипом вывода мощностью 4 Вт это как минимум в 100 раз больший бюджет мощности. ↩
-
Периферийные ускорители вывода: Edge TPU (Google Coral) работает в классе мобильных и встраиваемых устройств примерно на 2 Вт, давая 4 TOPS через тракт данных INT8. Периферийные серверы относятся к другому классу: Jetson AGX Orin достигает 275 TOPS при 15–60 Вт, то есть пропускная способность примерно в 68,8 раза выше, но при допущении о питании от сети. ↩
-
Квантование: переход от FP32 к INT8 уменьшает хранение параметров в 4 раза и может повысить пропускную способность на аппаратуре с эффективным трактом данных INT8, хотя реальное ускорение зависит от поддержки ядрами, трафика памяти и формы нагрузки. Вывод часто допускает более низкую точность, чем обучение, поскольку не нужно представлять малые градиенты и обновления оптимизатора через многократные шаги обучения. Компромисс не бесплатен: агрессивное квантование может снизить точность, особенно на редких или плохо представленных входах, поэтому калибровка и оценка на уровне задачи должны определить безопасную точность для каждого развертывания. Методы квантования подробно разобраны в главе «Сжатие моделей». ↩
-
FP32 и форматы пониженной точности: формат IEEE 754 binary32 использует 32 бита (1 бит знака, 8 битов экспоненты, 23 бита мантиссы), тогда как 16-битные альтернативы распределяют экспоненту и мантиссу иначе: IEEE 754 FP16 выделяет 5 битов экспоненты и 10 битов мантиссы, давая высокую точность, но узкий динамический диапазон ( до ), что требует динамического масштабирования потерь; brain floating point (BF16) выделяет 8 битов экспоненты, как у FP32, что исключает underflow при обучении. INT8 дополнительно сокращает 32-битный объем в четыре раза до 8 целочисленных битов (от −128 до 127), широко используемых для высокопроизводительного вывода после калибровки или обучения с учетом квантования. Формальное численное сравнение приведено в разделе «Численные представления» приложения «Основы машины». ↩
Архитектуры нейронных сетей
Назначение
Почему выбор архитектуры нейронной сети — это обязательство перед инфраструктурой, а не только модельное решение?
Выбор архитектуры нейронной сети одновременно является решением о моделировании и договором с физикой. Обязательство начинается со структуры в данных. Архитектура, которая соответствует этой структуре, может обучаться на меньшем числе параметров и примеров, тогда как неудачное соответствие требует дополнительных данных и машинного времени, чтобы компенсировать неверный вычислительный шаблон. Свертка, внимание, рекуррентность и поиск по таблице эмбеддингов кодируют не просто разные предположения о данных: они создают различные шаблоны вычислений, состояния и перемещения данных. Эти шаблоны определяют, параллелится ли работа без потерь, помещается ли промежуточное состояние в памяти и остаются ли обучение и обслуживание доступными по стоимости при нужном масштабе. Две архитектуры могут давать близкое качество предсказаний, но требовать разных объемов памяти и профилей задержки и открывать разные возможности для последующих методов повышения эффективности. Поэтому одна только точность на эталонных тестах не показывает, какой вариант остается жизнеспособным. Архитектурные решения также распространяются за пределы модели. Конвейеры данных перенимают определенные входные структуры, инфраструктура обучения выстраивается вокруг вычислительного профиля модели, системы обслуживания настраиваются под ее путь запроса, а мониторинг наследует ее типичные отказы. Когда эти зависимости накопятся, замена архитектуры может означать перестройку большей части окружающей системы. Решение об архитектуре оправдано, только если его прогностические выигрыши совместимы со всем контекстом развертывания. В терминах D·A·M архитектура — это в основе своей совместное проектирование алгоритма и машины: математический граф определяет работу, которую должна выполнить машина, а бюджет машины ограничивает, какие графы остаются практичными.
Цели обучения
- Различать вычислительные особенности MLP, CNN, RNN, трансформеров и рекомендательных моделей в стиле DLRM
- Объяснять, как индуктивные смещения используют структуру разных типов данных
- Анализировать вычислительную сложность и масштабирование памяти для разных семейств архитектур
- Определять строительные блоки, такие как остаточные связи, нормализация и гейтинг, которые делают возможным обучение глубоких сетей
- Применять схему выбора архитектуры, чтобы сопоставить характеристики данных с конструкцией модели
- Оценивать, как вычисления, доступ к памяти и перемещение данных определяют эффективность отображения на аппаратуру
- Критически разбирать заблуждения при выборе архитектуры в условиях ограничений по задержке, пропускной способности и распараллеливанию
Архитектурные принципы
Плотная модель тратит параметры и память на связи, которые изображению редко нужны. Сверточные нейронные сети (CNN) кодируют локальность; многослойные перцептроны (MLP) этого не делают. Матричное умножение, функции активации и вычисление градиентов образуют «глаголы» нейронных сетей. Архитектуры собирают эти глаголы в вычислительные графы: специализированные структуры, оптимизированные под конкретные типы данных и вычислительные ограничения. По кремниевому контракту (принцип «Кремниевый контракт») каждая архитектура заключает с аппаратурой неявное соглашение, обменивая вычислительные шаблоны на эффективность для определенных классов задач.
Индуктивное смещение от сильного (CNN) к слабому (MLP): сильное предположение требует меньше данных.
Каждая нейронная сеть решает, как организовать вычисления, чтобы соответствовать внутренней структуре данных. У изображений есть пространственная локальность, у языка — последовательные зависимости, а табличные записи часто не имеют фиксированной пространственной или последовательной организации. Архитектура напрямую кодирует эти предположения в вычислительный граф, а они влияют на число параметров, загрузку аппаратуры и осуществимость развертывания. Поэтому выбор архитектуры — это задача системной инженерии, которая напрямую затрагивает члены железного закона: количество операций и объем перемещаемых данных . Структурные предположения, которые кодирует каждая архитектура, называются индуктивными смещениями,1 и они служат объединяющим понятием для всей этой главы.
Индуктивное смещение
Индуктивное смещение — это структурное ограничение, заложенное в архитектуру модели, которое сужает пространство гипотез и позволяет обобщать по конечным данным, кодируя предметные предположения (например, пространственную локальность или порядок следования) прямо в вычислительный граф.
- Значение: индуктивное смещение может уменьшить объем данных , необходимый для обобщения. Для одного детектора выходного признака полносвязное соединение использует параметров, тогда как общий фильтр CNN использует параметров и применяется в каждой позиции, требуя операций. Для RGB-изображения общий фильтр использует примерно в 5 575,1 раза меньше параметров, чем один полносвязный детектор признака, что уменьшает объем хранения параметров и часто — данные, необходимые для предотвращения переобучения.
- Отличие: в отличие от регуляризации (которая штрафует сложность гипотез во время обучения через члены L1/L2), индуктивное смещение сужает пространство гипотез на этапе проектирования архитектуры: CNN представляет нелокальные функции менее непосредственно, чем локальные паттерны, тогда как регуляризация ограничивает сложность через целевую функцию обучения.
- Типичная ошибка: частое заблуждение состоит в том, что более сильное индуктивное смещение всегда лучше. Сильное смещение локальности (CNN) хорошо работает на пространственных данных, но представляет дальние зависимости в языке менее непосредственно, чем глобальное внимание, которое поддерживает дальние зависимости ценой квадратичных вычислений оценок .
Архитектура — ось алгоритма в D·A·M: она задает бюджет числа операций.
Сверточная сеть кодирует индуктивное смещение пространственной локальности: близлежащие пиксели важнее далеких. Трансформер позволяет каждому элементу обращать внимание на любой другой, обеспечивая дальние связи ценой квадратичных вычислений оценок. Эти смещения помогают архитектурам обучаться эффективно, сужая пространство функций, которые они представляют. Без подходящего смещения модели может потребоваться значительно больше данных и вычислений, чтобы выучить ту же структуру. Объединяющая схема в «Схеме выбора архитектуры» собирает эти семейства архитектур вместе, после того как каждое смещение появилось на практике.
Перед инженерами систем машинного обучения стоит основной компромисс: выразительная мощность против вычислительной эффективности. Согласно железному закону машинного обучения (принцип «Железный закон систем машинного обучения»), выбор архитектуры — главный фактор, определяющий член числа операций . Механизм внимания трансформера дает глобальные связи, но масштабируется как операций по длине последовательности ; CNN использует пространственную локальность, чтобы свести число операций к линейному масштабированию по числу пространственных позиций. Подбор подходящих индуктивных смещений под данные нагрузки при сохранении разумного бюджета числа операций и определяет практику выбора нейросетевой архитектуры.
Ансамбль, который Netflix не внедрил (2009)
Контекст: Netflix в 2009 году присудил свой Большой приз в $1 млн за 10-процентное улучшение точности рекомендаций (Johnston, 2012).
Механизм: внедрение выигравшего улучшения в производство потребовало существенных инженерных усилий как раз тогда, когда бизнес Netflix переходил от рассылки DVD к потоковому вещанию. Этот переход также принес более богатые сигналы о просмотре и изменил то, что персонализация должна была оптимизировать.
Последствия: дополнительная точность не оправдала усилий на производстве, поэтому Netflix не развернул код Большого приза.
Реакция: Netflix сохранил два алгоритма из более раннего Progress Prize и перенаправил работу над рекомендациями на персонализацию для потокового вещания.
Системный урок: выигрыш офлайн-метрики ценен, только если стоимость его интеграции и целевая функция по-прежнему соответствуют производственной системе.
Выбор архитектурной основы задает основной шаблон памяти и вычислений для последующего оборудования. «Семейства нейросетевых архитектур» сопоставляет пять основных семейств нейронных сетей по их пространственным и временным индуктивным смещениям, тензорным операциям и характеристикам доступа к памяти.
| Архитектура | Тип данных | Ключевая идея | Системное узкое место |
|---|---|---|---|
| MLP | Табличные/неструктурированные | Полная связность | Пропускная способность памяти |
| CNN | Пространственные (изображения) | Локальные фильтры и разделение весов | Пропускная способность вычислений |
| RNN | Последовательные (временные ряды) | Рекуррентное состояние | Последовательные зависимости |
| Трансформеры | Реляционные (язык) | Динамическое внимание | Квадратичные вычисления оценок; при необходимости хранение матрицы |
| DLRM | Категориальные (рекомендации) | Таблицы эмбеддингов | Емкость памяти (ТБ и более) |
Семейства нейросетевых архитектур: каждое семейство нацелено на свою структуру данных и показывает свое системное узкое место. Столбец узких мест напрямую читается из железного закона: MLP нагружают пропускную способность памяти плотными активациями, CNN нагружают пропускную способность вычислений, потому что свертка переиспользует фильтры во многих пикселях, RNN нагружают последовательные зависимости, которые мешают параллелизму, трансформеры вычисляют квадратичные взаимодействия оценок и могут материализовать квадратичное хранилище оценок, а DLRM нагружает емкость памяти на уровне терабайтов из-за таблиц эмбеддингов.
Пять конкретных архитектур моделей проходят через всю книгу как маячные модели: постоянные опорные точки, которые привязывают абстрактные понятия к конкретной системной реальности. Эти примеры — конкретные реализации архетипов нагрузок (таких как «вычислительный зверь» и «пожиратель полосы пропускания»), введенных в «Архетипах нагрузок». Их выбор отражает эмпирический фронт Парето эволюции моделей («Фронт эффективности»), который сопоставляет точность на ImageNet с вычислительной стоимостью.
Фронт эффективности: точность top-1 на ImageNet против вычислительной стоимости (GMAC). Точки-представители составлены по опубликованным отчетам о моделях AlexNet, VGG, ResNet, Inception, MobileNetV2, EfficientNet, ViT, Swin Transformer и ConvNeXt (Krizhevsky et al., 2012; Simonyan and Zisserman, 2015; He et al., 2016; Szegedy et al., 2015; Sandler et al., 2018; Tan and Le, 2019; Dosovitskiy et al., 2021; Liu et al., 2021; Liu et al., 2022). Пунктирный «фронт Парето» — иллюстративная кривая компромисса, а не результат повторного запуска тестов: точные значения точности и заявленной вычислительной стоимости различаются в зависимости от варианта модели, рецепта обучения, реализации и принятого способа подсчета операций (умножения с накоплением или операции с плавающей запятой). В легенде выделено шесть семейств: устаревшие CNN (серый), плотные CNN (синий), эффективные мобильные архитектуры (зеленый), модели класса EfficientNet (фиолетовый), современные CNN (оранжевый) и трансформеры (красный). Фронт возглавляют эффективные семейства и современные CNN; трансформеры обменивают значительные вычисления на гибкое моделирование дальних связей, не доминируя по ним, а ViT-B/16 находится ниже фронта.
Эти модели служат каноническими нагрузками для понимания системных ограничений. Каждая занимает отдельное положение на компромиссе между точностью и вычислительной стоимостью, как показано в «Фронте эффективности». График фронта следует читать как историческую карту представительных статей по архитектурам, а не как контролируемую таблицу эталонных тестов. Он прослеживает путь от плотных CNN, которые ставили точность на первое место, через MobileNet, который снижал вычисления на единицу точности, к архитектурам-трансформерам, которые обменивают значительные вычислительные затраты на гибкое моделирование дальних связей. Архитектурные решения, принятые на этапе проектирования, определяют, где система окажется на этом фронте.
Состав маячных моделей: биографии моделей
Пять моделей заслуживают роль маячных, потому что каждая выделяет одно системное узкое место, которое повторяется снова и снова: вычисления (ResNet-50), пропускную способность памяти (GPT-2), емкость памяти (DLRM), задержку на периферии (MobileNetV2) и постоянную работу при малом энергопотреблении в задаче распознавания ключевых слов (KWS).
ResNet-50 (He et al., 2016) задает опору для вычислительно интенсивного маяка в компьютерном зрении. Остаточная сеть (ResNet) решила проблему деградации в очень глубоких простых сетях: добавление слоев могло увеличивать ошибку обучения, несмотря на достаточную емкость. Введя «пропускающие связи», которые улучшают оптимизацию и поток градиентов, она позволила строить сети из 50, 100 и даже 1000 слоев. Архитектура ResNet выиграла конкурс ImageNet 2015 года (с очень глубокими 152-слойными моделями), а ResNet-50 стала широко используемой опорной архитектурой и эталонной нагрузкой для компьютерного зрения. С точки зрения систем это высокорегулярная, вычислительно интенсивная нагрузка, почти целиком состоящая из плотных сверток, что делает ее полезным тестом пропускной способности вычислений с плавающей запятой на GPU.
GPT-2 (Radford et al., 2019) задает опору для языкового маяка, узким местом которого выступает пропускная способность памяти. Generative Pre-trained Transformer 2 показал, что масштабирование простой архитектуры декодер-трансформера на больших наборах данных позволяет получать связный генерируемый текст. В отличие от BERT, кодировщика, который читает контекст в обоих направлениях, GPT-2 генерирует текст последовательно (авторегрессивно2), создавая значительное давление на пропускную способность памяти при декодировании с батчем из одного или малым батчем, поскольку веса модели считываются на каждом шаге декодирования. Он служит архетипом для больших языковых моделей, таких как Llama и ChatGPT.
DLRM (Naumov et al., 2019) задает опору для разреженного рекомендательного маяка. Meta открыла исходный код DLRM, чтобы показать нагрузку, которая отличается от CNN и трансформеров критическим образом. Модели зрения и языка вычислительно тяжелые, а рекомендательные системы — тяжелые по памяти. Им нужно искать предпочтения пользователей и товаров в огромных таблицах эмбеддингов, которые могут достигать терабайтов, что создает особые трудности для критичного к задержке обслуживания (глава «Обслуживание моделей»). DLRM полезна как эталон для емкости памяти и шаблонов разреженного доступа к памяти в центрах обработки данных.
Канонические нагрузки
В архитектуре компьютеров процессор MIPS (microprocessor without interlocked pipelined stages) часто используют для преподавания конвейеризации не потому, что это самый быстрый доступный чип, а потому, что он наиболее ясно воплощает принципы вычислений с сокращенным набором команд (RISC). Так же и эта книга использует ResNet-50, GPT-2, DLRM, MobileNetV2 и KWS как канонические нагрузки. Изучение этих «маяков» выделяет инженерные принципы, связанные с математикой, перемещением данных и локальностью, которые сохраняют силу даже тогда, когда конкретные архитектуры моделей меняются.
MobileNet (Howard et al., 2017) задает опору для маяка энергоэффективности на периферии. MobileNet бросил вызов тенденции к все более крупным моделям, поставив на первое место эффективность. Он популяризировал раздельные по глубине свертки для эффективных моделей зрения — архитектурное новшество, которое сократило число FLOP в 8–9 раз для ядер при минимальной потере точности. Меньший вычислительный объем сделал MobileNet естественным кандидатом для методов сжатия и развертывания с меньшей разрядностью (хранение и вычисления с меньшим числом бит на значение), описанных в главе «Сжатие моделей». Он стал эталонным семейством для совместного проектирования моделей зрения с учетом ограничений батареи и задержки смартфонов и встроенных устройств.
KWS (Warden, 2018) задает опору для постоянно работающего маяка TinyML. Модели распознавания ключевых слов (например, те, что реагируют на «Hey Siri» или «Ok Google») представляют крайний край эффективности. Рассчитанные на работу на «всегда включенных» микроконтроллерах с памятью порядка килобайт и бюджетом мощности в милливаттах, эти модели (часто раздельные по глубине CNN) воплощают ограничения TinyML (Warden and Situnayake, 2020; Banbury et al., 2021; Banbury et al., 2021). Они заставляют инженеров считать каждый байт и каждый такт, мотивируя экстремальное квантование (INT8 и INT4) и специализированное оборудование. Вместе эти биографии объясняют, почему маячные модели — не каталог моделей: каждая выделяет свою сигнатуру узкого места, которую анализ арифметической интенсивности может количественно оценить.
Сигнатуры нагрузок: спектр арифметической интенсивности
ResNet-50 переиспользует веса свертки во многих пространственных позициях, тогда как декодирование GPT-2/Llama с батчем из одного примера передает большое состояние весов и KV-кеша для одного токена за раз. Этот контраст мотивирует введение арифметической интенсивности — отношения FLOP к байтам, описанного в «Вычислениях в нейронных сетях», — и использование модели Roofline для оценки того, ограничена ли нагрузка вычислениями или памятью.
Оценка только по весам: у ResNet интенсивность примерно в 160 раз выше, чем у GPT-2 при батче из одного примера.
Эти узкие места отражают лежащую в основе математику, но расчет здесь — это оценка только по весам, а не полное измерение трафика основной памяти. Он делит объем операций с плавающей запятой на объем весов модели в FP32, не учитывая трафик активаций, промежуточных результатов и KV-кеша. Батчирование позволяет амортизировать трафик весов на примеры или токены, а дополнительное перемещение состояния может снизить реальную интенсивность. Формулы FLOP и числа параметров для каждой операции, которые использует эта оценка, приведены в разделе «Шпаргалка по вычислительной сложности» приложения «Основы алгоритмов». «Сигнатуры маячных нагрузок» сравнивает три маячных сценария и показывает разрыв примерно в 160,2 раза при этих допущениях.
| Семейство моделей | Маяк | Интенсивность | Аппаратная предрасположенность |
|---|---|---|---|
| Плотная CNN | ResNet-50 | ~80,1 FLOP/байт | Богата вычислениями (GPU/TPU) |
| Эффективное зрение | MobileNetV2 | ~42,8 FLOP/байт | Сбалансирована (мобильные NPU) |
| Трансформер | GPT-2 (вывод) | ~0,50 FLOP/байт | Ускоритель с высокой пропускной способностью памяти |
Сигнатуры маячных нагрузок: оценки интенсивности FP32 по весам для трех сценариев моделей. Эти значения указывают на разное давление на вычисления и пропускную способность, но не определяют фиксированную аппаратную предрасположенность: реальные узкие места зависят от режима выполнения и баланса аппаратуры.
Эта таблица дает один системный вход для выбора архитектуры. Требования задачи определяют, какие семейства моделей жизнеспособны, тогда как размер батча, точность, длина последовательности, реализация, поведение кеша и целевая аппаратура определяют, предсказывает ли оценка реальное узкое место при развертывании. MobileNet часто подходит для ограниченных развертываний в задачах зрения, а декодирование трансформера с батчем из одного примера часто сильно нагружает пропускную способность памяти, но оба выбора требуют измерения в целевом режиме.
Столбец узких мест в «Сравнении маячных моделей» показывает, какой системный ресурс — пропускная способность вычислений, пропускная способность памяти, емкость памяти, задержка или энергопотребление — ограничивает производительность для каждого класса нагрузок. В терминах железного закона («Железный закон машинного обучения») это узкое место показывает, определяют ли время выполнения операции () или перемещение данных (), и от этого зависит, какие стратегии оптимизации остаются эффективными.
| Модель | Область | Параметры | FLOP на вывод | Память | Узкое место | Роль в книге |
|---|---|---|---|---|---|---|
| ResNet-50 | Зрение | 25,6 млн | 8,2 GFLOP | 102,4 МБ | Вычисления | Пропускная способность плотного зрения |
| GPT-2 XL | Язык | 1,5 млрд | 3 GFLOP/токен | 6 ГБ | Пропускная способность памяти | Обслуживание поток токен за токеном |
| DLRM | Рекомендации | 25 млрд | Низкое | 100 ГБ | Емкость памяти | Таблицы эмбеддингов и планирование емкости |
| MobileNetV2 | Зрение на периферии | 3,5 млн | 600 MFLOP | 14 МБ | Задержка | Раздельные по глубине свертки и эффективность |
| KWS (DS-CNN) | Аудио | 200 тыс. | 20 MFLOP | 800 КБ | Энергопотребление | Бюджет энергии при постоянной работе |
Сравнение маячных моделей: количественные характеристики и педагогические роли пяти канонических нагрузок. Память — это хранение весов в FP32, а FLOP приведены на один вывод, за исключением GPT-2 XL, для которого указаны на один генерируемый токен; строка DLRM показывает число записей таблиц эмбеддингов, а не плотные параметры. Столбец узких мест указывает на главное системное ограничение, которое проявляет каждая модель: модели, ограниченные вычислениями, как ResNet, нагружают арифметическую пропускную способность, а модели, ограниченные пропускной способностью памяти, как GPT-2, нагружают скорость передачи из памяти.
Выбор архитектуры в конечном счете — это инженерный компромисс между математикой и перемещением памяти . Механизмы, стоящие за сигнатурами в «Сигнатурах маячных нагрузок», объясняют, почему каждый маяк занимает свое место на спектре интенсивности. ResNet-50 получает высокую интенсивность, потому что сверточные слои переиспользуют каждый вес много раз по пространственным измерениям изображения (в глубоких bottleneck-блоках доходит до 100–200 и более FLOP/байт), поэтому его производительность ограничена арифметической пропускной способностью аппаратуры. GPT-2 находится на противоположном краю: каждый генерируемый токен дает только умножение матрицы на вектор, а не матрично-матричные операции пакетной обработки, поэтому система загружает огромные веса из памяти ради математики для одного токена, и производительность ограничена пропускной способностью памяти. MobileNet на уровне всей модели занимает промежуточное положение, а отдельные раздельные по глубине слои оказываются ниже, если учитывать трафик активаций: раздельные по глубине свертки сокращают общее , но перемещают больше данных относительно этой работы. Это хорошо подходит мобильной аппаратуре, но часто не загружает мощные GPU, оптимизированные под плотную математику.
Арифметическая интенсивность и архитектура
Сопоставьте выбор архитектуры с его системными последствиями:
- Переиспользование весов (CNN): как повторное использование одних и тех же весов для многих входов меняет арифметическую интенсивность?
- Большие таблицы эмбеддингов (DLRM): как огромные таблицы эмбеддингов меняют баланс между перемещением данных и вычислениями?
- Авторегрессивное декодирование (GPT-2): почему генерация токен за токеном меняет картину батчирования и пропускной способности?
Этот спектр определяет, нужен ли системе более быстрый процессор или более быстрая память, чтобы повысить производительность. Инструмент, который книга использует для количественной оценки этих пределов на конкретной аппаратуре, — модель Roofline: она откладывает достижимую производительность против арифметической интенсивности и показывает, где нагрузка переходит из режима, ограниченного памятью, в режим, ограниченный вычислениями. Аналитическое описание дано в разделе «Модель Roofline» приложения «Основы машины», а прикладные примеры — в главе «Аппаратное ускорение». Раздел «Конкретный пример: анализ A100» того же приложения разбирает эту классификацию интенсивности и узкого места на реальной спецификации ускорителя: вычисляет точку перехода (ridge point) для A100 и показывает, как одна и та же операция попадает по разные стороны от нее.
Сигнатуры маячных моделей делают следующий шаг конкретным: каждое семейство архитектур нужно рассмотреть через шаблон данных, который оно обрабатывает, вычисления, которые оно выполняет, отображение на аппаратуру, которое оно порождает, и узкое место, которое оно обнажает. Этот четырехчастный взгляд гарантирует, что каждая архитектура оценивается по тому, сколько стоит ее запуск, а не только по тому, чему она учится.
MLP: обработка плотных паттернов
Представьте спам-фильтр смартфона: по набору признаков, извлеченных из письма (репутация отправителя, число ссылок, наличие определенных ключевых слов), модель должна выдать одну вероятность: спам или нет. Эта задача классификации, где каждый входной признак связан с каждым выходом, относится к области полносвязных сетей. MLP3 — это полносвязные архитектуры, введенные в «Вычислениях в нейронных сетях», которые теперь рассматриваются через четырехчастный системный взгляд, введенный ранее.
MLP воплощают индуктивное смещение: они не предполагают в данных никакой априорной структуры, позволяя любому входу быть связанным с любым выходом. Этот выбор архитектуры дает максимальную гибкость, рассматривая все связи входов как одинаково правдоподобные, что делает MLP универсальными, но вычислительно затратными по сравнению со специализированными альтернативами. Их представительная способность была теоретически установлена теоремой об универсальной аппроксимации (UAT)4 (Cybenko, 1989; Hornik et al., 1989), введенной в «Вычислениях в нейронных сетях». Теорема утверждает, что достаточно большой MLP с нелинейными функциями активации может аппроксимировать любую непрерывную функцию на компактной области при подходящих весах и смещениях. Именно это сочетание теоретической универсальности и плотной связности и выражает архитектурная идея многослойного перцептрона.
Многослойные перцептроны
Многослойные перцептроны — это архитектуры нейронных сетей прямого распространения, которые последовательно применяют полносвязные слои: каждый нейрон одного слоя связан с каждым нейроном следующего и не кодирует структурных предположений о предметной области входа.
- Значение: отсутствие структурного априори дает плотным слоям квадратичное масштабирование числа параметров по ширине слоя. Один слой, отображающий 1 024 входа в 1 024 выхода, требует 1 048 576 параметров и около 2,1 МБ памяти для весов в FP16. Свертка , отображающая 1 024 входных канала в 1 024 выходных, имеет около 9,4 млн весов; преимущество свертки для изображений возникает из-за разделения пространственных весов между позициями, а не из-за уменьшения самой матрицы смешивания каналов. Поэтому MLP неэффективны для высокоразмерных структурированных входов, таких как изображения.
- Отличие: в отличие от сверточных нейронных сетей, которые используют пространственную локальность для уменьшения числа параметров, MLP одинаково обрабатывают все элементы входа, поэтому они являются предпочтительной архитектурой для табличных данных, где нет ни пространственной, ни последовательной структуры.
- Типичная ошибка: частое заблуждение состоит в том, что MLP слишком просты, чтобы важно было их использовать для сложных задач. MLP дают полезную плотную базовую линию, но CNN, рекуррентные сети и трансформеры добавляют операторы и шаблоны связности, которые нельзя свести к одному лишь разделению весов.
На практике UAT объясняет, почему MLP работают на разных задачах, и одновременно показывает разрыв между теоретической способностью и практической реализацией. Теорема гарантирует, что некоторый MLP может аппроксимировать любую функцию, но не говорит, каким должен быть размер сети и как определить веса. Хотя теоретически MLP может решить любую задачу распознавания образов, для этого может понадобиться непрактично большая сеть или непомерные вычисления. Именно эта теоретическая универсальность определяет выбор MLP для табличных данных, систем рекомендаций и задач, где связи входов неизвестны. В то же время эти практические ограничения побудили к разработке специализированных архитектур, которые используют структуру данных ради вычислительной эффективности, как показывают «CNN», «RNN» и «трансформеры».
Разрыв обучаемости
Теорема UAT гарантирует математическое существование, но между тем, что архитектура может представить, и тем, что градиентный спуск может выучить на практике, лежит принципиальный разрыв.
Представительная способность — это функции, которые архитектура может выразить при неограниченных ресурсах; упомянутая выше UAT гарантирует, что у MLP универсальная представительная способность. Эта способность особенно полезна благодаря гипотезе многообразия,5 которая утверждает, что данные высокой размерности на самом деле занимают гораздо более простую структуру. Обучаемость — это вопрос о том, может ли градиентный спуск найти хорошие веса при конечном числе обучающих примеров и вычислительном бюджете. Функция может быть представимой и при этом практически не обучаемой.
Это различие снимает кажущийся парадокс между универсальной аппроксимацией и архитектурным прогрессом. Специализированные архитектуры, такие как ResNet и трансформеры, улучшают обучаемость, встраивая индуктивные смещения, которые соответствуют структуре данных, даже когда это сужает представительную способность.
Три фактора создают разрыв обучаемости:
- Сложность выборки: UAT не дает оценок числа нужных обучающих примеров. Для изображений MLP обрабатывает 784 пикселя независимо и для выучивания пространственных корреляций требует экспоненциально большого числа примеров. CNN встраивает смещение локальности и резко снижает требования к выборке. Математически сложность выборки для MLP может расти экспоненциально с размерностью входа, тогда как для архитектур, соответствующих структуре данных, — полиномиально.
- Эффективность параметров: UAT гарантирует, что некоторой ширины достаточно, но не дает конструктивных оценок. Некоторые классы функций требуют ширины, быстро растущей с размерностью входа, тогда как архитектуры с соответствующей композиционной структурой могут представить их компактнее.
- Трудность оптимизации: даже когда оптимальные веса существуют, градиентный спуск может их не найти. Поверхности функции потерь MLP имеют сложную топологию без регуляризующего эффекта архитектурных ограничений. Специализированные архитектуры сокращают пространство поиска, вводя симметрии, которые использует градиентный спуск. Классический эталон — рукописные цифры MNIST — наглядно показывает этот разрыв между представимостью и обучаемостью.
MNIST: представимость против обучаемости
Сценарий: классификация цифр MNIST размером полносвязным MLP и CNN.
Диагностика: трехслойный MLP требует 20 млн параметров, потому что обрабатывает все 784 входных пикселя независимо, игнорируя пространственную структуру. CNN использует локальные рецептивные поля и разделение весов, сокращая число параметров до 421,4 тыс. (в 47 раз меньше).
Системный урок: индуктивное смещение определяет эффективность параметров. Встраивание пространственной локальности в архитектуру модели снижает объем параметров на порядки и уменьшает нагрузку на пропускную способность памяти SRAM при выводе.
Разрыв обучаемости мотивирует главный принцип проектирования этой главы: встраивать индуктивные смещения, которые соответствуют структуре данных. Каждая архитектура жертвует теоретической общностью ради практической обучаемости. Теорема об отсутствии бесплатного обеда (No Free Lunch) (Wolpert and Macready, 1997)6 формализует этот компромисс: смещение, которое помогает одной задаче, может навредить другой. Инвариантность CNN к сдвигу помогает классификации изображений, но вредит задачам, где важна абсолютная позиция. Выбор архитектуры по сути есть акт подбора индуктивного смещения под структуру данных.
Эти теоретические выводы напрямую переходят в инженерные решения. Подходящие индуктивные смещения уменьшают число параметров (что делает возможным развертывание на периферии), ускоряют сходимость (снижая стоимость обучения) и порождают структурированные шаблоны вычислений, которые эффективно отображаются на специализированную аппаратуру (глава «Аппаратное ускорение»). MLP на 20 млн параметров, непригодный для развертывания на периферии, превращается в CNN на 421,4 тыс. параметров, который помещается без труда, — сокращение в 47 раз, достигнутое за счет соответствия архитектуры структуре данных. Чтобы понять, где плотная связность все еще необходима, нужно выделить шаблоны данных, в которых нет структурных упрощений.
Потребности в обработке паттернов
Плотная обработка паттернов нацелена на предметные области, где входные признаки не имеют геометрических координат или порядка следования. В табличных наборах данных, рекомендательных эмбеддингах или многофакторных моделях риска любой входной признак может взаимодействовать с любым другим. Поскольку представление данных не несет структуры сетки или последовательности, сеть не может ограничить вычисления локальными пространственными окнами или последовательными шагами. Каждый выходной нейрон должен иметь возможность объединять любой входной признак, а веса связей определяет оптимизация.
Когда набор изображений вроде MNIST обрабатывается плотной архитектурой, система разворачивает изображение в неструктурированный вектор из 784 элементов. Отказ от двумерного пространственного априори заставляет сеть одинаково трактовать все пары пикселей. Хотя это позволяет слою связать любой пиксель с любым классом, модель должна полностью через оптимизацию выяснить пространственную смежность — архитектурный выбор, который напрямую ведет к матричным операциям, определяющим MLP.
Алгоритмическая структура
Взаимодействие всех со всеми признаками требует полной связности между представлениями соседних слоев. В MLP это проявляется как последовательность полносвязных слоев, в которой каждый нейрон связан с каждым нейроном предыдущего слоя. Плотная связность напрямую переходит в матричное умножение — формулировку, введенную в «Матричной формулировке умножения», которая делает плотные слои исполнимыми на параллельной аппаратуре. «Архитектура многослойного перцептрона» показывает, как каждый слой преобразует свой вход через эту основную операцию.
Архитектура многослойного перцептрона: трехслойная сеть, в которой каждый нейрон связан со всеми нейронами соседних слоев. Выделенный нейрон получает взвешенные вклады от всех входов, иллюстрируя плотный шаблон связности , реализуемый через матричные умножения. Для классификации MNIST 784-мерный вход связан со 100 скрытыми нейронами через весовую матрицу , что требует 78 400 операций умножения с накоплением на один образец. Адаптировано по (Reagen et al., 2017).
«Плотный слой» задает аффинное преобразование плотного слоя с последующей активацией.
где — выход слоя , — вход из предыдущего слоя, — матрица весов слоя , — вектор смещений, а — функция активации; «Нелинейные функции активации» подробно разбирает выпрямленную линейную функцию (ReLU) и родственные нелинейности. Это послойное преобразование, концептуально простое, порождает шаблоны вычислений, эффективность которых критически зависит от того, как среда выполнения организует эти операции для разных структур задач.
Размерности этих операций показывают вычислительный масштаб плотной обработки паттернов. Входной вектор (в этой записи он рассматривается как строка) содержит все потенциальные входные признаки. Матрицы весов фиксируют все возможные связи «вход — выход». Выходной вектор дает преобразованные представления. Пример с четырьмя пикселями превращает этот учет в арифметику.
Конкретный пример вычисления
Рассмотрим упрощенное изображение из 4 пикселей, обрабатываемое скрытым слоем из 3 нейронов:
Вход: (4 значения яркости пикселей)
Матрица весов:
Вычисление: \begin{gather*} \mathbf{z}^{(1)} = \mathbf{h}^{(0)}\mathbf{W}^{(1)} = \begin{bmatrix} 0{,}5{\times}0{,}8 + (-0{,}3)\times 0{,}2 + 0{,}2{\times}0{,}9 + 0{,}7{\times}0{,}1 \ 0{,}1{\times}0{,}8 + 0{,}8{\times}0{,}2 + (-0{,}4)\times 0{,}9 + 0{,}3{\times}0{,}1 \ (-0{,}2)\times 0{,}8 + 0{,}4{\times}0{,}2 + 0{,}6{\times}0{,}9 + (-0{,}1)\times 0{,}1 \end{bmatrix} = \begin{bmatrix} 0{,}59 \ -0{,}09 \ 0{,}45 \end{bmatrix} \end{gather*} После ReLU: (отрицательные значения обнулены)
Системный вывод: каждый скрытый нейрон комбинирует все входные пиксели с разными весами, демонстрируя неограниченное взаимодействие признаков. Плотные слои покупают общность ценой максимальной стоимости связности.
Пример MNIST делает этот масштаб конкретным. 784-мерный вход связан с каждым нейроном первого скрытого слоя. Скрытый слой из 100 нейронов требует весовой матрицы (78 400 параметров), где каждый вес задает обучаемую связь между входным пикселем и скрытым признаком. Этот единственный слой служит опорой вычислительного анализа на протяжении всей главы.
Эта алгоритмическая структура допускает произвольные связи между признаками и порождает конкретные вычислительные шаблоны, с которыми должны справляться компьютерные системы. Плотная связность дает ту универсальную аппроксимирующую способность, о которой говорилось выше, но вносит вычислительную избыточность: хотя теоретическая универсальность MLP позволяет моделировать любую непрерывную функцию при достаточной ширине, такая гибкость требует множества параметров, чтобы выучить относительно простые шаблоны. Каждый входной признак влияет на каждый выход, обеспечивая максимальную выразительность ценой максимальных вычислительных затрат. Эти компромиссы мотивируют последующие стратегии сжатия, которые снижают вычислительные потребности, сохраняя возможности модели, а в главе «Аппаратное ускорение» рассматриваются аппаратные реализации, которые используют регулярную структуру матричных операций.
Вычислительное отображение
«Алгоритмическая структура» определяет, что вычисляет MLP; вычислительное отображение показывает, как это вычисление переходит в аппаратные операции. «MLP-слой в матричной форме» показывает, как это отображение переходит от математической абстракции к вычислительной реальности.
MLP-слой в матричной форме: операции матричного уровня фреймворка скрывают сложность умножения с накоплением за одним вызовом функции, позволяя оптимизированным библиотекам BLAS эффективно использовать матричную аппаратуру.
def mlp_layer_matrix(X, W, b):
"""Прямой проход MLP с помощью операций матричного уровня фреймворка."""
# X: матрица входов (размер батча по числу входов)
# W: матрица весов (число входов по числу выходов)
# b: вектор смещений (число выходов)
# Один вызов GEMM: фреймворки передают его в оптимизированные BLAS/cuBLAS
# Для MNIST: 784 * 100 = 78 400 MAC на образец
H = activation(matmul(X, W) + b)
return H
Функция mlp_layer_matrix напрямую повторяет математическое уравнение, используя высокоуровневые матричные операции (matmul), чтобы выразить вычисление в одной строке и скрыть его внутреннюю сложность. Такой стиль реализации характерен для фреймворков глубокого обучения, где оптимизированные библиотеки управляют собственно вычислением.
Операции фреймворка, такие как output = matmul(X, W), скрывают физическое исполнение. С точки зрения аппаратуры плотное матричное умножение сводится к каноническому трехуровневому вложенному циклу, который определяет локальность доступа к памяти, границы распараллеливания и использование регистров.
Реализация в «Вычислении плотного слоя» открывает этот шаблон исполнения напрямую. Вычисление выходов слоя требует накопления взвешенных вкладов от всех входов для каждого образца в батче. Внешний цикл перебирает образцы батча, средний — выходные нейроны, а внутренний выполняет повторяющиеся операции умножения с накоплением (MAC)7, сопоставляя каждый входной признак с соответствующим параметром.
Вычисление плотного слоя: вложенные циклы показывают сложность , где каждый выходной нейрон требует num_inputs операций умножения с накоплением, поэтому входной слой эталонного MNIST требует 78 400 MAC на образец.
def mlp_layer_compute(X, W, b):
"""Явная структура циклов, раскрывающая шаблоны вычислений MLP."""
# Цикл 1: каждый образец обрабатывается независимо (параллелизуемо)
for batch in range(batch_size):
# Цикл 2: вычисляем каждый выходной нейрон
for out in range(num_outputs):
Z[batch, out] = b[out] # Инициализация смещением
# Цикл 3: накапливаем взвешенные входы (самый внутренний цикл)
# Это операция MAC: result += input * weight
for in_ in range(num_inputs):
Z[batch, out] += X[batch, in_] * W[in_, out]
# Итого на выход: num_inputs MAC +
# num_inputs обращений к памяти
H = activation(Z) # Поэлементная нелинейность
return H
В эталонном слое MNIST вычисление 100 скрытых нейронов требует всего 78 400 MAC; каждый отдельный выходной нейрон требует 784 операций умножения с накоплением и не менее 1 568 обращений к памяти (784 для входов и 784 для весов). Промышленные реализации вызывают оптимизированные библиотеки матричных операций, такие как Basic Linear Algebra Subprograms (BLAS),8 но тот же шаблон вложенных циклов по-прежнему определяет задачу проектирования системы. Аппаратные архитектуры, которые ускоряют эти матричные операции, включая тензорные ядра (Tensor Cores) GPU9 и специализированные ускорители для ИИ, рассматриваются в главе «Аппаратное ускорение».
Системные последствия
Плотная обработка паттернов концентрирует давление на аппаратуру по трем направлениям: емкость памяти для хранения параметров, пропускная способность вычислений на матричных блоках и пропускная способность памяти для перемещения весов.
Все три ограничения происходят из связности «все со всеми». Основной объем памяти определяется хранением параметров. Хотя эталонный слой MNIST требует всего 78 400 параметров, масштабирование становится непомерным для широких скрытых состояний. Слой, связывающий 2048 входов с 2048 выходами, требует 4 194 304 параметров (16,8 МБ в FP32). Поскольку при выводе одного образца каждый вес считывается один раз на входной вектор, переиспользовать веса между входами невозможно, и выполнение ограничено емкостью памяти и ее пропускной способностью.
Основное вычисление — плотное умножение матрицы на вектор (GEMV), а при батчировании — матричное умножение (GEMM). Оно регулярно и поддается распараллеливанию, но арифметическая интенсивность (FLOP/байт) низка при малых батчах. Размер батча — это число входных образцов, обрабатываемых вместе; более крупные батчи амортизируют стоимость загрузки весов на большее число вычислений. Современные процессоры оптимизируют плотные слои с помощью блоков SIMD (одна инструкция — много данных), таких как AVX-512 на CPU, или систолических массивов в тензорных процессорах (TPU) и GPU, амортизируя накладные расходы управления на большие блоки параллельной арифметики.
Итоговое узкое место — перемещение данных. Чтобы вычислить 100 скрытых значений из 784 входов, система должна переместить весов из памяти к вычислительным блокам. Если применить схему арифметической интенсивности из «Сигнатур нагрузок» к этому слою, получим примерно 0,5 FLOP/байт для выполнения в FP32 с батчем из одного образца. В модели, которая учитывает только веса и считает одно чтение FP32 на вес, не учитывая трафик входов, выходов, смещений и кешей, эту величину дает «интенсивность плотного слоя», где и — ширины входа и выхода.
На ускорителях, у которых точки перехода составляют сотни FLOP/байт, этот слой в FP32 с батчем из одного образца ограничен пропускной способностью памяти. Батчирование может повысить интенсивность, амортизируя трафик весов, но граница перехода зависит от формы матриц, точности, реализации и аппаратуры. Конкретно: увеличение размера батча до масштабирует арифметику до FLOP, тогда как матрица весов загружается один раз ( байт), и интенсивность, ограниченная весами, растет примерно до , пока трафик входов и активаций не начнет доминировать. Поэтому полносвязные слои могут становиться узкими местами вывода, хотя всего выполняют меньше FLOP, чем сверточные слои.
Разделение весов избавляет свертку от взрыва параметров полносвязного слоя.
Плотная связность, таким образом, перемещает максимум данных ради минимума вычислений. Для данных с внутренней структурой (например, пространственной локальностью в изображениях или временным порядком в последовательностях) специализированные архитектуры могут использовать эту структуру и для лучшей точности, и для лучшей эффективности. Самая устоявшаяся из таких архитектур — сверточная нейронная сеть.
CNN: обработка пространственных паттернов
Предположение MLP о том, что каждый вход может напрямую взаимодействовать с каждым выходом, оказывается особенно дорогим для пространственно структурированных данных, таких как изображения. Связь каждого пикселя изображения высокого разрешения с каждым скрытым элементом создает неуправляемый объем параметров, который исчерпывает память ускорителя и сводит арифметическую интенсивность к медленной работе, ограниченной пропускной способностью памяти. Как показало ранее приведенное сравнение на MNIST, пример CNN использует в 47 раз меньше параметров, опираясь на пространственную локальность, а не обрабатывая каждый пиксель независимо.
CNN10 закладывают этот вычислительный компромисс непосредственно в аппаратные вычисления (LeCun et al., 1998; Krizhevsky et al., 2012). Вместо того чтобы материализовать матрицу связности «все со всеми», CNN ограничивает каждую выходную активацию локальным пространственным фрагментом и скользит одними и теми же весами фильтра по всей входной области.
Это пространственное индуктивное смещение переходит в два структурных ограничения на граф вычислений. Разделение параметров применяет одни и те же малые веса фильтра во всех пространственных позициях, сокращая хранение параметров с миллионов различных весов до компактного ядра, которое помещается в кеши на кристалле. Локальная связность ограничивает рецептивное поле каждого нейрона пространственно соседней областью, исключая вычисления над далекими и не связанными между собой пикселями. Вместе эти ограничения определяют семейство сверточных сетей.
Сверточные нейронные сети
Сверточные нейронные сети (CNN) — это архитектуры, которые используют эквивариантность относительно сдвига и пространственную локальность, чтобы разделять обученные фильтры между всеми пространственными позициями, отвязывая число параметров от разрешения входа.
- Значение: разделение весов дает резкое сокращение числа параметров. Сверточный слой с 64 входными и 64 выходными каналами требует параметров независимо от того, является входное изображение или . Эквивалентный полносвязный слой на входе потребовал бы млн параметров, то есть примерно в 5 575 раз больше. Такое масштабирование с постоянным числом параметров позволяет CNN обрабатывать входы высокого разрешения в пределах памяти одного ускорителя.
- Отличие: в отличие от MLP, которые связывают каждый входной элемент с каждым выходным (глобальная связность), CNN ограничивают каждый выход локальной пространственной окрестностью, кодируя предположение, что близлежащие пиксели важнее далеких. Это ограничение исключает целые классы гипотез на этапе проектирования архитектуры, а не штрафует их во время обучения.
- Типичная ошибка: частое заблуждение состоит в том, что CNN — это модели только для зрения. Операция свертки применима к любым данным с сеточной топологией: одномерные свертки обрабатывают аудиосигналы и временные ряды, двумерные — изображения и спектрограммы, трехмерные — видео и объемные данные.
Компромисс очевиден: CNN жертвуют теоретической общностью MLP ради практического выигрыша в эффективности, когда данные обладают известной структурой. Там, где MLP обрабатывают каждый входной элемент независимо, CNN используют пространственные связи, чтобы получить и вычислительную экономию, и лучшую точность в задачах зрения.
Потребности в обработке паттернов
Обработка пространственных паттернов относится к задачам, в которых корреляция между точками данных быстро убывает с геометрическим расстоянием. В естественном изображении ковариация пикселя с соседними пикселями высока, что позволяет обнаруживать локальные примитивы, такие как границы, текстуры и контуры. Наложение таких операций позволяет локальным примитивам иерархически складываться в представления более высокого уровня: границы складываются в контуры, контуры — в фрагменты поверхностей, а фрагменты — в цельные объекты. Конвейер в «Извлечении пространственных признаков» придает этой иерархии конкретный визуальный вид.
Извлечение пространственных признаков: изображение зебры проходит через повторяющиеся стадии свертки, ReLU и пулинга, которые формируют все более глубокие карты признаков, затем следуют выравнивание, полносвязные слои и softmax-классификация по классам «лошадь», «зебра» и «собака».
Такая иерархическая композиция проявляется в разных физических областях: локальные окрестности пикселей, образующие контуры в компьютерном зрении, локальные кластеры время-частота, которые выделяют фонемы на спектрограммах речи, и смежные блоки вокселей, выделяющие границы тканей в объемной томографии. Архитектура работает не потому, что подражает биологическому зрению, а потому, что соответствует композиционной структуре лежащих в основе данных.
В обработке изображений распознавание объекта требует двух различных вычислительных гарантий. Во-первых, архитектура должна выделять локальные геометрические примитивы на ограниченных рецептивных полях. Во-вторых, поскольку объект сохраняет свою смысловую идентичность независимо от того, где он появляется в кадре, сеть должна распознавать эти примитивы при любых сдвигах координат.11 Сверточные сети удовлетворяют обоим требованиям, сочетая локальные ядра с разделением параметров: на промежуточных стадиях они обеспечивают эквивариантность относительно сдвига, а пулинг дает инвариантность на последующих стадиях (LeCun et al., 1989; Krizhevsky et al., 2012).12 Эти архитектурные ограничения, введенные LeCun13 (LeCun et al., 1989), заменяют неограниченные плотные матричные умножения структурированными пространственными шаблонами (стенсилами).
Алгоритмическая структура
Формально «свертка» вычисляет прямой проход двумерного сверточного слоя, считая локальные поканальные скалярные произведения в каждой пространственной координате:
Здесь — активация в пространственной позиции в выходном канале слоя . Тройная сумма перебирает измерения фильтра: пространственные смещения охватывают окно локального ядра (определяя локальное рецептивное поле слоя),14 а пробегает все входные каналы. Тензор хранит веса ядра, связывающие канал с каналом , а — смещение для канала. Поскольку веса ядра не зависят от пространственных координат , одни и те же параметры фильтра используются в каждой координате.
Сверточные слои обычно используют малые пространственные ядра ( или ), чтобы сохранять компактный объем параметров, и наращивают слои, чтобы расширить эффективное рецептивное поле. Механика скользящего окна в «Операции свертки» иллюстрирует эту операцию: фильтр перемещается по входному массиву и в каждой допустимой координате вычисляет скалярное произведение с накоплением, формируя выходную карту признаков. Интерактивный инструмент CNN Explainer (Wang et al., 2021) показывает, как эти наложенные скользящие окна извлекают поканальные шаблоны активаций по слоям.
Операция свертки: оранжевое рецептивное поле в пунктирном входе отображается в одну клетку фиолетового выхода свертки без дополнения (valid). Применение фильтра к этому рецептивному полю требует 9 операций умножения с накоплением на каждый входной канал для каждого выходного значения. Для входа RGB разделение параметров сокращает плотную связь из 150 528 весов до локального фильтра из 27 весов, то есть примерно в 5 575 раз меньше весов, и кодирует эквивариантность относительно сдвига: тот же детектор границ работает в любой точке изображения.
Применение CNN к изображениям MNIST размером показывает различие в представлении состояния. Вместо того чтобы разворачивать изображение в вектор из 784 элементов, который разрушает пространственную смежность, каждый сверточный слой применяет набор фильтров (например, 32 фильтра размером ) непосредственно к двумерной сетке. При единичном шаге и дополнении, которое сохраняет размеры границ, слой выдает тензор активаций , сохраняющий пространственную сетку. Каждая координата содержит 32 различных признаковых измерения, извлеченных из ее непосредственной окрестности.
Сохранение пространственной топологии меняет способ, которым исполнительные блоки обращаются к памяти. Вместо того чтобы загружать неразделяемую матрицу весов один раз на образец, как в MLP, сверточный слой потоково пропускает входные карты признаков через аппаратные регистры, а компактные веса фильтра удерживает в быстрой SRAM на кристалле или в регистровых файлах. Этот арифметический шаблон определяет оптимизации иерархии памяти ИИ-ускорителей, где тайлинг циклов и параллельная редукция по каналам снижают трафик к высокоскоростной памяти (HBM).
Этот шаблон переиспользования данных гарантируется эквивариантностью относительно сдвига: сдвиг входа дает такой же пространственный сдвиг в выходной карте признаков. Для системной инженерии эквивариантность означает, что вычислительное расписание и геометрия доступа к памяти остаются одинаковыми во всех пространственных координатах.
Эквивариантность и инвариантность определяют, как архитектура реагирует на пространственные преобразования. Оператор эквивариантен относительно преобразования , если преобразование входа приводит к тому же преобразованию выхода («эквивариантность»):
Для сверточного слоя с шагом 1 без краевых эффектов дополнения сдвиг входа на вектор смещает результирующие карты признаков ровно на . Информация о пространственных координатах распространяется через слой детерминированно. Напротив, оператор инвариантен относительно , если преобразование входа оставляет выход неизменным («инвариантность»):
Глобальный слой среднего пулинга по всей карте признаков обладает инвариантностью относительно сдвига: сдвиг входа меняет пространственное расположение активаций, но усреднение по всем пространственным позициям сворачивает координаты в скаляр, одинаковый независимо от того, где появились признаки.
Это математическое различие определяет, где эквивариантность нужно сохранять, а где в иерархию сети следует вводить инвариантность. Задачи вроде обнаружения объектов и семантической сегментации требуют эквивариантности вплоть до последнего слоя: координаты ограничивающих рамок и попиксельные маски должны точно следовать за координатами объекта. Задачи классификации, напротив, требуют эквивариантности в промежуточных экстракторах признаков, чтобы сохранять относительные пространственные отношения («глаза над носом»), тогда как последние слои вводят инвариантность к сдвигу через пулинг, сворачивая пространственные координаты в вектор вероятностей классов.
Для входа и фильтра дискретная двумерная свертка вычисляется как
Применение сдвига (где ) и переиндексирование суммы дают
что подтверждает эквивариантность относительно сдвига с точностью до граничных условий: . Эквивариантный сверточный слой сохраняет информацию о координатах, тогда как инвариантный слой пулинга полностью отбрасывает пространственные координаты. Пример «Эквивариантность: обнаружение признаков» проверяет это отслеживание с помощью явных матричных операций.
Эквивариантность: обнаружение признаков
Условия: рассмотрим изображение с вертикальной границей в столбце 3:
Фильтр детектора вертикальных границ:
Свертка исходного изображения:
Карта признаков показывает положительную активацию там, где фильтр переходит от темного к светлому (левая сторона границы), и отрицательную там, где переход от светлого к темному (правая сторона):
Сдвинутый вход (граница перемещена в столбец 5):
Свертка сдвинутого изображения:
Системный вывод: активация признака сдвигается на ту же величину, что и вход, демонстрируя эквивариантность. Сеть знает, что граница находится в столбце 5 сдвинутого изображения, а не просто что где-то есть граница.
Эффективность параметров — самое непосредственное системное следствие эквивариантности относительно сдвига. Навязывание разделения весов отвязывает емкость параметров от разрешения входа. Например, обработка RGB-изображения с помощью MLP требует, чтобы каждый скрытый нейрон был связан со всеми 150 528 входными пикселями. CNN с фильтром требует всего 27 параметров на фильтр, которые переиспользуются во всех пространственных позициях . Это примерно в 5 575,1 раза меньше параметров на один детектор признака. Компактный объем параметров позволяет держать веса модели в SRAM ускорителя или в кеше L2, что делает возможными большие батчи без выгрузки во внешнюю DRAM.
Вычислительная регулярность, которую навязывает эквивариантность, напрямую помогает аппаратному исполнению. Поскольку одна и та же операция скользящего окна выполняется в каждой пространственной координате, вычислительный шаблон аккуратно ложится на блоки векторных операций SIMD и систолические массивы. Современные GPU и TPU используют эту однородную структуру: конвейеры исполнения выдают одинаковые инструкции по пространственным тайлам без расхождения потока управления. Перекрывающиеся рецептивные поля означают, что соседние выходные координаты разделяют входные активации, открывая возможности для кеширования в разделяемой памяти и алгоритмической перестройки данных (например, преобразования im2col), которые полностью загружают блоки исполнения аппаратуры.
Эквивариантность также повышает эффективность выборки и снижает накладные расходы конвейера обучения. Когда сеть обновляет фильтр, чтобы распознавать признак в одной координате, разделение параметров обеспечивает распознавание этого признака во всех пространственных координатах одновременно. Модели не нужны отдельные обучающие примеры, чтобы выучить тот же признак при разных пиксельных смещениях: это работает как структурная аугментация данных. Такая эффективность выборки уменьшает общее число итераций обучения, объем хранения датасета и требуемую пропускную способность ввода-вывода между хостом и устройством для достижения целевой точности.
Формулировка через групповую эквивариантность
С точки зрения теории групп эквивариантность свертки относительно сдвигов — это частный случай общего принципа. Группа сдвигов состоит из всех двумерных сдвигов и замкнута относительно композиции (сдвиг на , затем на , равен сдвигу на ). Свертка эквивариантна относительно этой группы. Более поздние исследования расширяют эту схему на другие группы симметрий. Cohen and Welling (2016) разработали групповые эквивариантные CNN, которые работают с поворотами и отражениями, строя фильтры, эквивариантные относительно групп поворотов. Это позволяет выучивать признаки, инвариантные к повороту, в таких задачах, как спутниковые снимки или медицинская визуализация, где ориентация не определяет смысл.
Математическая схема обобщается естественно: для группы , действующей на входное пространство и выходное пространство , функция является -эквивариантной, если
Стандартные CNN эквивариантны относительно сдвига, тогда как сети, эквивариантные относительно поворота, распространяют это на группы поворотов. Архитектурный принцип обобщается: симметрии данных следует встраивать в архитектуру как эквивариантности. Для системной инженерии определение симметрий данных напрямую влияет на выбор архитектуры: более жестко ограниченные архитектуры с сильными симметриями часто дают более компактные модели, а специализированные эквивариантности могут требовать нестандартных операций, например сверток с поворотами, которым нужна либо аппаратная поддержка, либо эффективная программная реализация.
На практике идеальная эквивариантность часто нарушается ограничениями реализации. Асимметричное дополнение на границах вносит краевые артефакты, которые ломают строгую симметрию относительно сдвига. Прореживание с шагом вносит пространственный алиасинг: сдвиг входа на один пиксель вызывает фазовые сдвиги подвыборки в выходной карте признаков. Слои батч-нормализации также искажают пространственную эквивариантность, если статистики активаций вычисляются или применяются по пространственным позициям непоследовательно. Современные промышленные сети мирятся с этими отклонениями, потому что вычислительная экономия от шага и стабильность обучения, которую дает нормализация, перевешивают потерю точной математической эквивариантности.
Пространственное индуктивное смещение
CNN успешны потому, что соответствуют структуре данных изображений. Проверьте, понимаете ли вы:
- Разделение параметров: как использование одного и того же фильтра по всему изображению снижает число параметров на порядки по сравнению с MLP?
- Эквивариантность относительно сдвига: почему сдвиг входного изображения приводит к соответствующему сдвигу карты признаков?
- Свертка, ограниченная вычислениями: почему сверточный слой переиспользует каждый загруженный вес фильтра во многих выходных позициях, делая себя ограниченным вычислениями по сравнению с другими слоями?
Эти структурные свойства воплощают пространственное индуктивное смещение, введенное в «Архитектурных принципах»: ограничивая связность локальными окрестностями и разделяя параметры по всем координатам, CNN навязывают априорное предположение, что визуальные примитивы локализованы и эквивариантны относительно сдвига. Переиспользование одних и тех же весов ядра по всей карте признаков сокращает хранение параметров на порядки по сравнению с плотными слоями и ограничивает пространство гипотез функциями, которые сохраняют геометрическую структуру.
Эта послойная структура естественно реализует иерархическое обучение представлений (Bengio et al., 2013). Ранние слои выделяют низкоуровневые признаки (границы и цветовые градиенты) на малых рецептивных полях, а последующие слои складывают эти примитивы в промежуточные текстуры, части объектов и семантические категории. Наложение сверточных слоев расширяет эффективное рецептивное поле: при фиксированных ядрах и единичном шаге сторона рецептивного поля растет на пикселей на слой, а его площадь растет квадратично, пока не охватит всю входную область. То, насколько эффективно ускорители исполняют эту расширяющуюся иерархию, зависит от того, как шаблоны скользящего окна отображаются на параллельные конвейеры исполнения.
Вычислительное отображение
Перевод математической свертки в аппаратное исполнение требует преодоления разрыва между высокоуровневыми программными интерфейсами и конвейерами исполнения на кремнии. Высокоуровневые фреймворки абстрагируют свертку как единый вызов слоя, показанный в «Абстракции сверточного слоя». За этим лаконичным интерфейсом базовая среда исполнения должна планировать трафик памяти по иерархии кешей и переводить шаблоны скользящего окна на матричную аппаратуру.
Абстракция сверточного слоя: операции свертки на уровне фреймворка скрывают сложность вычислений скользящего окна; обычно вызов передается в cuDNN или MKL, которые внутри используют преобразование im2col или прямые алгоритмы свертки.
def conv_layer_spatial(input, kernel, bias):
"""Свертка на уровне фреймворка.
Один вызов передается оптимизированному ядру (часто через im2col + GEMM).
"""
# Свертка применяет общие веса во всех позициях
# Для ядра 3x3 на входе 28x28 (с дополнением): 9 MAC на позицию x 784 позиции
output = convolution(input, kernel) + bias
return activation(output)
Чтобы раскрыть механику, которую скрывает абстракция фреймворка, «Логическое вычисление свертки» описывает канонический семиуровневый вложенный цикл, необходимый для прямой двумерной свертки. Эти циклы делятся на три структурных уровня: перебор образцов батча, пространственный обход координат карты признаков и накопление по измерениям входных и выходных каналов вместе со смещениями ядра . Обход пространственных координат и выходных каналов задает сетку независимых выходных активаций.
Логическое вычисление свертки: семь вложенных циклов раскрывают сложность . Хотя такая запись логически верна, на аппаратуре этот шаблон неэффективен; промышленные системы преобразуют его в блочные матричные умножения.
def conv_layer_compute(input, kernel, bias):
# Логическое представление свертки (обычно реализуется через im2col +
# GEMM)
# Цикл 1: обрабатываем каждое изображение батча
for image in range(batch_size):
# Циклы 2 и 3: проход по изображению в пространстве
for y in range(height):
for x in range(width):
# Цикл 4: вычисляем каждый выходной признак
for out_channel in range(num_output_channels):
result = bias[out_channel]
# Циклы 5 и 6: проход по окну ядра
for ky in range(kernel_height):
for kx in range(kernel_width):
# Цикл 7: обрабатываем каждый входной признак
for in_channel in range(num_input_channels):
# ... операции MAC ...
Три внутренних цикла выполняют скалярное произведение ядра в каждой пространственной точке. Для каждой выходной активации ядро обрабатывает локальный входной фрагмент по всем входным каналам. Такой прямой вложенный цикл на современной аппаратуре дает плохую локальность кеша и несогласованные обращения к памяти, поскольку соседние пространственные итерации обращаются к перекрывающимся входным фрагментам через шаговые смещения.
Чтобы избежать шаговых обращений к памяти, промышленные библиотеки вроде cuDNN и oneDNN обычно сводят свертки к преобразованию im2col (image-to-column, «изображение в столбцы»). Переупорядочивая каждый фрагмент рецептивного поля в непрерывный столбец входной матрицы, im2col переписывает всю свертку как плотное обобщенное матричное умножение (GEMM). Такое преобразование меняет объем памяти — дублирование перекрывающихся входных пикселей до раз в DRAM или SRAM — на структурную регулярность ядер GEMM, которые загружают тензорные ядра и систолические массивы. В качестве альтернативы техники неявного GEMM формируют эти матричные координаты на лету в регистровых файлах, не материализуя дублированный буфер в памяти. При фильтрах и 32 выходных каналах каждой выходной координате требуется всего 9 операций MAC на входной канал вместо 784 MAC в эталонном слое MLP. Хотя число операций на активацию снижается, скользящее окно создает особые профили переиспользования данных, которые определяют организацию промежуточного хранения в памяти.
Системные последствия
Преобразования скользящего окна и im2col, описанные в «Вычислительном отображении», показывают, как вычисляют CNN; этот раздел показывает, чего стоит это вычисление по памяти, вычислениям и перемещению данных. Эти затраты зависят от глубины слоя, времени жизни активаций и от того, остаются ли карты признаков в кеше SRAM или вытесняются в HBM.
Требования к памяти
Потребление памяти в сверточных слоях делится на два различных компонента состояния: статические параметры фильтров и переходные карты признаков (активации). Разделение весов обеспечивает компактное хранение параметров: для входа ImageNet сверточный слой с 64 фильтрами , применяемыми к одному входному каналу, требует всего 576 параметров. Даже при 64 входных каналах хранение 36 864 весов занимает около 147 КБ в FP32, что без труда помещается в кеш L2 или L1 на кристалле. Напротив, промежуточные карты признаков растут с разрешением входа и глубиной каналов: карта признаков с 64 каналами порождает 3,2 млн значений активаций (примерно 12,8 МБ в FP32 на образец батча). Во время обучения эти активации должны оставаться в памяти для вычисления градиентов при обратном проходе, поэтому память активаций, а не емкость весов, становится определяющим ограничением памяти для глубоких CNN на ускорителях.
Ускорители используют эту разницу в объеме через иерархическое кеширование. CPU хранят компактные веса фильтров в кешах L2/L3, пока потоково передают тензоры активаций. GPU размещают веса фильтров и входные тайлы в SRAM на кристалле (разделяемая память) и в регистровых файлах, переиспользуя загруженные веса на тысячах пространственных координат и исключая избыточные обращения к внешней HBM. Принципы аппаратного проектирования, которые поддерживают эти шаблоны кеширования, подробно описаны в главе «Аппаратное ускорение».
Потребности в вычислениях
Вычисление сверточного слоя требует многократного подсчета локальных скалярных произведений по пространственным позициям. Для входа ImageNet с фильтрами и 64 выходными каналами вычисление одной пространственной позиции требует 576 операций умножения с накоплением на входной канал. Повторение этого вычисления по всем 50 176 пространственным позициям дает миллионы операций на слой. Хотя каждый пространственный шаблон (стенсил) обращается к меньшему числу параметров, чем плотный слой, пространственное повторение умножает общее число операций с плавающей запятой.
Эта вычислительная регулярность открывает широкие возможности аппаратного распараллеливания. Поскольку каждая пространственная координата независима, процессоры распараллеливают работу сразу по нескольким осям: по измерению батча, по пространственным координатам и по выходным каналам. CPU выполняют векторные инструкции SIMD15, чтобы вычислять несколько пространственных выходов за такт, а GPU распределяют варпы потоков по тысячам одновременных исполнительных дорожек. Методы сжатия модели, которые меняют этот вычислительный профиль, такие как прореживание и канальная разреженность, рассматриваются в главе «Сжатие моделей».
Перемещение данных
Перемещение данных в сверточном слое имеет профиль арифметической интенсивности, принципиально отличный от MLP. В полносвязном слое при батче из одного образца каждый загруженный вес используется ровно один раз, и арифметическая интенсивность меньше 1 FLOP/байт. В двумерной свертке каждый вес фильтра переиспользуется во всех 50 176 позициях карты признаков . Это массовое переиспользование весов повышает операционную интенсивность и смещает вычисления из режима, ограниченного пропускной способностью памяти, к потолку, ограниченному вычислениями.
Системная задача смещается от загрузки весов к промежуточному размещению активаций. Поскольку соседние пространственные рецептивные поля перекрываются, наивный шаблон доступа к памяти перечитывал бы каждый входной пиксель из памяти до раз. Среды исполнения избегают этого избыточного трафика, разбивая вычисление на двумерные пространственные блоки, которые помещаются в SRAM ускорителя. Когда входной тайл загружен в разделяемую память, все перекрывающиеся скалярные произведения фильтров для этого тайла выполняются на месте, амортизируя передачу DRAM/HBM и максимизируя 50 176 переиспользований каждого веса фильтра.
Эти шаблоны памяти, вычислений и перемещения данных сходятся в одной модели, которая служит опорной точкой главы для вычислительно ограниченных нагрузок зрения: архитектуре ResNet-50.
ResNet-50 (маяк зрения)
Почему это важно: ResNet-50 — опорная точка для регулярных нагрузок зрения, насыщенных свертками. Ее архитектура почти полностью состоит из плотных сверточных слоев, что делает ее очень регулярной и эффективной на GPU. При пакетном исполнении с хорошим переиспользованием данных производительность ResNet-50 обычно ограничивается пропускной способностью вычислений с плавающей запятой (FLOP/s), поэтому она служит полезным маяком для объяснения параллелизма данных, квантования и стратегий батчирования. «Системный профиль ResNet-50» сводит количественные свойства и их системные последствия:
Свойство Значение Системное следствие Параметры 25,6 млн 102,4 МБ размер модели в FP32; помещается в памяти GPU без труда. FLOP на изображение 8,2 GFLOP Свертки — самый крупный отдельный класс ядер, примерно 48% всех MAC. Ограничение Высокие вычислительные затраты при батчировании Ограничено пиковой пропускной способностью FLOP/s, когда велико переиспользование весов и активаций; вывод с малым батчем может переходить в режим, ограниченный памятью. Узкое место Пропускная способность FP Максимально выигрывает от специализированных матричных блоков (тензорных ядер). Профиль Высокая эффективная арифметическая интенсивность при переиспользовании Арифметическая интенсивность зависит от размера батча, алгоритма свертки и фактического трафика памяти. Системный профиль ResNet-50: количественные свойства маяка зрения и их системные последствия. При батчированном переиспользовании сверток ResNet-50 имеет высокую эффективную арифметическую интенсивность и обычно ограничен вычислениями, поэтому пиковая пропускная способность FP на тензорных ядрах часто задает потолок раньше, чем пропускная способность памяти.
Профиль ResNet-50, ограниченный вычислениями, предполагает обилие аппаратных ресурсов, тогда как большая часть вывода выполняется на устройствах с энергетическим бюджетом на три порядка меньше, чем у GPU центра обработки данных. MobileNetV2 показывает, что архитектурные новшества могут быть направлены именно на этот режим, достигая конкурентной точности при малой доле вычислительных затрат.
MobileNetV2 (маяк эффективности)
Почему это важно: MobileNetV2 представляет периферийные нагрузки, ограниченные задержкой. Ее раздельные по глубине свертки обменивают емкость смешивания каналов на скорость, что делает ее полезной базовой моделью для мобильных приложений, встроенного зрения и поиска нейронной архитектуры (NAS), то есть автоматического перебора конструкций моделей. «Системный профиль MobileNetV2» сводит количественные свойства маяка эффективности:
Свойство Значение Системное следствие Параметры 3,5 млн 14 МБ в FP32; в 7,3 раза меньше, чем у ResNet-50. FLOP на изображение 600 MFLOP в 13,7 раза меньше, чем у ResNet-50, при сопоставимой точности. Ограничение Ограничение задержкой Важнее всего скорость вывода одного изображения. Узкое место Накладные расходы/доступ к памяти Диспетчеризация операторов и доступ к памяти могут доминировать над реальными вычислениями. Профиль Низкая арифметическая интенсивность Доступ к памяти и управляющая логика важнее пиковых FLOP/s. Системный профиль MobileNetV2: количественные свойства маяка эффективности и их системные последствия. Примерно на порядок меньше ResNet-50 и по параметрам, и по FLOP; форма операций MobileNetV2 и арифметическая интенсивность делают задержку одного изображения чувствительной к накладным расходам диспетчеризации операторов и доступу к памяти на мобильных CPU.
Профили ResNet-50 и MobileNetV2 показывают важный системный компромисс: модель с FLOP в 13,7 раза меньше не работает автоматически в 13,7 раза быстрее. Превращается ли сокращение операций в реальное ускорение по часам, зависит от арифметической интенсивности, накладных расходов на диспетчеризацию операторов и баланса аппаратуры по модели Roofline. На центрах обработки данных с GPU, спроектированными под высокую арифметическую интенсивность, MobileNetV2 часто дает лишь скромное ускорение, потому что ее фрагментированные операции раздельных по глубине сверток недогружают тензорные ядра.
Приемы повышения эффективности архитектуры, такие как раздельные по глубине свертки и прореживание (удаление избыточных весов или каналов), которые подробно описаны в главе «Сжатие моделей», меняют баланс отображения на аппаратуру. В главе «Аппаратное ускорение» рассматривается, как архитектуры процессоров используют эти шаблоны пространственного переиспользования данных в аппаратуре. Врезка «Заблуждение: FLOP равны скорости» разбирает центральное заблуждение, которое напрямую связывает число FLOP с задержкой исполнения.
Заблуждение: FLOP равны скорости
Заблуждение: «MobileNetV2 имеет в 13,7 раза меньше FLOP, чем ResNet-50, значит, он должен работать в 13,7 раза быстрее».
Решение: на некоторых высокопроизводительных GPU MobileNetV2 может работать медленнее, чем ResNet-50, несмотря на гораздо меньшее число операций. Раздельные по глубине свертки MobileNetV2 имеют низкую арифметическую интенсивность: они перемещают больше данных относительно вычислений. GPU, оптимизированные под плотные матричные операции, могут плохо загружать свои вычислительные блоки на таких ядрах. FLOP измеряют работу; производительность зависит от того, насколько хорошо эта работа отображается на аппаратуру. Такое несоответствие архитектуры и аппаратуры повторяется как общее заблуждение в «Заблуждениях и ловушках».
Эффективные архитектуры: распознавание ключевых слов
Системные последствия из «Системного вывода» предполагают стандартные архитектуры CNN с полными свертками. Стандартные свертки масштабируются как , и такой объем вычислений превышает жесткие энергетические бюджеты периферийных устройств, работающих постоянно. Чтобы преодолеть этот разрыв, эффективные архитектуры, такие как раздельные по глубине CNN (DS-CNN), раскладывают стандартную свертку на две различные операции. Эта факторизация, введенная Sifre в контексте извлечения признаков (Sifre and Mallat, 2014) и популяризированная MobileNet (Howard et al., 2017), разделяет пространственную фильтрацию и смешивание каналов. Свертка по глубине применяет фильтры к каждому входному каналу независимо ( параметров), а поточечная свертка использует свертку , чтобы спроецировать каналы в выходную размерность ( параметров). Такое разложение сокращает число параметров и FLOP до доли примерно от стандартной свертки (коэффициент сокращения примерно , или примерно в 8–9 раз для фильтров при большом ), что делает исполнение в реальном времени возможным на микроконтроллерах с ограниченными ресурсами. При распознавании ключевых слов непрерывный одномерный аудиопоток предобрабатывается кратковременным преобразованием Фурье в двумерную спектрограмму время-частота (или в мел-частотные кепстральные коэффициенты), что позволяет двумерным сверточным ядрам скользить по временным и частотным бинам и выделять акустические сигнатуры фонем.
Нагрузка распознавания ключевых слов служит примером этого режима периферийной эффективности.
KWS (маяк TinyML)
Почему это важно: модели распознавания ключевых слов (такие как DS-CNN) представляют ограниченный по мощности край спектра. Используемые в постоянно работающих приложениях, например в умных дверных звонках, которые пробуждают более крупный конвейер зрения только после аудиосигнала, эти модели должны работать на микроконтроллерах с бюджетом мощности в милливатты.
KWS заставляет инженеров считать каждый байт и каждый такт. Это маяк для экстремального квантования (INT8/INT4, подробно в главе «Сжатие моделей») и специализированных архитектурных примитивов (раздельных по глубине сверток), которые обменивают теоретическую представительную мощность на максимальную эффективность на ватт.
От тяжелых по вычислениям стандартных сверток ResNet-50 через раздельные по глубине варианты MobileNet к микроэнергетическому развертыванию KWS CNN показывают, как архитектурные ограничения превращают структуру данных в аппаратную эффективность. Согласуя шаблон вычислений с пространственной локальностью и эквивариантностью относительно сдвига, эти модели максимизируют арифметическую интенсивность и минимизируют хранение параметров. Однако фундаментальное предположение оператора свертки — что пространственная близость определяет корреляцию признаков — перестает работать, когда связи в данных упорядочены по времени, а не по геометрии. Когда входы образуют последовательные потоки, в которых будущие состояния зависят от произвольно далекого исторического контекста, скользящие пространственные шаблоны не могут уловить временные зависимости без непомерного расширения ядер. Обработка таких данных требует архитектур, построенных вокруг последовательной эволюции состояния.
RNN: обработка последовательных паттернов
Сверточные сети используют пространственную структуру, в которой физическая близость определяет статистическую корреляцию. Многие реальные сигналы обладают вместо этого временной структурой, в которой смысл определяют порядок следования и исторический контекст. Обработка последовательностей требует архитектур, которые поддерживают устойчивое состояние на протяжении шагов времени.
Рекуррентные нейронные сети
Рекуррентные нейронные сети (RNN) — это архитектуры обработки последовательностей, которые поддерживают скрытое состояние , обновляемое на каждом шаге времени, и кодируют предположение, что текущий выход зависит от всех предыдущих входов через этот вектор состояния фиксированного размера.
- Значение: состояние фиксированного размера дает памяти для вывода независимо от длины последовательности (обработка последовательности из 10 000 токенов требует такой же памяти, как последовательность из 10 токенов), но правило последовательного обновления создает последовательное узкое место, при котором все шагов должны выполняться по порядку. Это напрямую вносит вклад в член железного закона и не позволяет RNN использовать параллелизм GPU по временной оси при обучении.
- Отличие: в отличие от механизмов внимания, которые одновременно обращаются ко всей истории токенов и материализуют матрицу оценок при обработке полной последовательности, RNN сжимают историю в узкое место состояния, поэтому градиентный сигнал должен распространяться назад через все шагов. Это приводит к , то есть произведению якобианов, которое экспоненциально затухает или взрывается с ростом длины последовательности.
- Типичная ошибка: частое заблуждение состоит в том, что RNN устарели. Для потокового вывода на аппаратуре с ограниченными ресурсами, где память внимания непомерна, например для распознавания ключевых слов на микроконтроллере, -размер состояния RNN остается обоснованным с системной точки зрения выбором.
RNN удерживают память состояния фиксированной, но задержка растет с длиной последовательности.
Прямые архитектуры и стандартные CNN либо обрабатывают входы независимо, либо ограничивают контекст фиксированным пространственным рецептивным полем. В последовательных областях, однако, зависимости охватывают переменные и часто неограниченные временные расстояния. Расширение сверточного рецептивного поля, чтобы охватить длинные последовательности, требует либо наложения десятков слоев, либо применения расширенных (дилатированных) ядер; оба подхода увеличивают число параметров и объем хранения промежуточных активаций независимо от того, содержат ли промежуточные токены релевантную информацию.
Рекуррентные архитектуры — от простых рекуррентных сетей до управляемых вариантов, таких как сети долгой краткосрочной памяти (LSTM) (Elman, 1990; Hochreiter and Schmidhuber, 1997), — решают это ограничение, вводя временное индуктивное смещение: порядок исполнения кодирует направление причинности, а история сжимается в повторяющееся состояние. Вместо того чтобы обрабатывать каждый входной вектор изолированно, сеть переносит внутренний вектор состояния через последовательные шаги времени. Это индуктивное смещение порождает явный инженерный компромисс: оно дает временной контекст переменной длины в рамках фиксированного бюджета памяти, но вводит зависимости данных, переносимые через цикл, которые сериализуют исполнение на параллельной аппаратуре ускорителей.
Потребности в обработке паттернов
В последовательной обработке паттернов интерпретация поступающего токена зависит от предшествующей последовательности. Например, многозначное слово bank нельзя однозначно разрешить в отрыве от контекста: «river bank» обозначает речной берег, а «bank account» — банковский счет. Одной идентичности слова недостаточно; его смысловую роль определяет предшествующий контекст. Акустические сигналы и временные ряды телеметрии обладают теми же свойствами: отдельные отсчеты неоднозначны без исторического контекста, охватывающего несколько частот и временных масштабов.
Данные с такой структурой предъявляют к базовой модели три конкретных требования:
- Прием последовательностей переменной длины: последовательности приходят разной длины , что исключает тензоры весов фиксированной размерности, требующие статических форм входа.
- Сохранение контекста: модель должна удерживать информативные исторические сигналы на произвольных временных лагах, не требуя явного разбиения на окна.
- Непрерывное обновление состояния: внутренние представления должны динамически обновляться по мере поступления каждого нового токена, включая новые данные и отбрасывая устаревшую или шумную историю.
MLP не могут удовлетворить эти требования, потому что размерности их входного слоя статически фиксированы на этапе компиляции и требуют дополнения нулями или обрезки до жесткой максимальной длины последовательности. CNN обрабатывают входы через статические скользящие окна, и для этого рецептивные поля должны расти линейно или экспоненциально с глубиной сети. Архитектура, созданная специально для обработки последовательных паттернов, должна делать сохранение состояния внутренним свойством своего потока данных.
Алгоритмическая структура
Чтобы удовлетворить требованиям «Потребностей в обработке паттернов», рекуррентные сети вводят направленные циклы в свой вычислительный граф. Вместо того чтобы отображать входы напрямую в выходы через прямые слои, RNN поддерживает устойчивый вектор — скрытое состояние, — который итеративно обновляется на каждом шаге времени. Скрытое состояние действует как внутренний регистр, суммируя прошлые наблюдения, чтобы задать контекст для будущих предсказаний.
Базовый переход состояния в «рекуррентном соотношении» вычисляет текущее скрытое состояние , объединяя вектор входящего токена с предыдущим состоянием :
где — скрытое состояние в момент времени , — вход в момент , содержит рекуррентные веса, — входные веса, — вектор смещения скрытого состояния, а — функция активации. В уравнении используются векторы-столбцы; в более поздних листингах применяются батчевые тензоры в соглашении row-major, поэтому их умножения весов записаны справа. Сравните левую и правую панели «развертки рекуррентной нейронной сети»: левая показывает компактную рекуррентную петлю, а правая разворачивает ее по шагам времени, делая явными временные зависимости, которые создает эта рекурренция.
Развертка рекуррентной нейронной сети: левая панель показывает компактную рекуррентную петлю; правая разворачивает ее по шагам времени. Три матрицы весов используются совместно на всех шагах: (вход → скрытое состояние), (скрытое состояние → скрытое состояние) и (скрытое состояние → выход). Эти матрицы переиспользуются на каждом шаге, поэтому число параметров не зависит от длины последовательности. Для скрытого состояния размерности 128 и входа размерности 100 каждый шаг времени требует 16 384 MAC для рекуррентных связей и 12 800 для проекции входа.
Развертывание рекуррентного цикла на шагов раскрывает алгоритмические свойства рекуррентности. Число параметров не зависит от длины последовательности , потому что матрицы весов и используются совместно на всех шагах времени. Однако совместное использование весов по времени создает зависимость, переносимую через цикл: шаг не может вычислить , пока шаг не выдаст . Эта зависимость образует критический путь из последовательных операций, который не позволяет аппаратным ускорителям распараллеливать вычисления по оси последовательности.
Такая последовательная структура порождает принципиально различные характеристики памяти при выводе и обучении. При потоковом выводе RNN вычисляет по одному шагу за раз, отбрасывает предыдущие сырые входы и хранит только текущее скрытое состояние. Накладные расходы памяти на состояние строго равны , независимо от того, охватывает ли последовательность 10 или 10 000 шагов. Напротив, обучение методом обратного распространения во времени (BPTT) разворачивает граф на всю последовательность длины . Вычисление градиентов по правилу цепочки требует вычисления произведения якобианов по всем промежуточным переходам:
Чтобы вычислить эти произведения якобианов, движок обучения должен хранить промежуточные активации в памяти ускорителя. Таким образом, BPTT превращает рабочее состояние в объем памяти при обучении. Кроме того, многократное умножение на приводит к тому, что градиенты экспоненциально затухают или взрываются на длинных горизонтах, ограничивая эффективное контекстное окно простых RNN. Рекуррентная матрица весов часто содержит связи с минимальным вкладом во временные зависимости, что позволяет существенно сжимать ее методами, описанными в главе «Сжатие моделей».
Вычислительное отображение
Перевод рекуррентных уравнений в аппаратное исполнение показывает, как математические абстракции отображаются на ядра ускорителей, иерархии памяти и вложенные циклы. Если сверточные слои используют пространственную локальность и переиспользование весов по тайлам («Архитектурные принципы»), то рекуррентные шаги раскладываются на умножения матрицы на вектор или матрицы на матрицу, ограниченные сериализацией потока данных.
«Шаг рекуррентного слоя» показывает механизм одного шага времени с помощью матричных операций уровня фреймворка: объединить предыдущее скрытое состояние с текущим входом, прибавить смещение и применить активацию, чтобы получить следующее скрытое состояние. Код намеренно ограничен одним шагом, потому что системная стоимость связана не с самим шагом, а с цепочкой зависимостей, которая мешает параллельному исполнению по времени.
Абстракция рекуррентного слоя: реализация уровня фреймворка, которая на каждом шаге времени объединяет два матричных умножения, и . Для скрытого состояния размерности 128 и входа размерности 100 каждый шаг требует 16 384 + 12 800 = 29 184 MAC, но последовательные зависимости мешают распараллеливанию по времени.
def rnn_layer_step(x_t, h_prev, W_hh, W_hx, b):
# x_t: вход в момент t (размер батча × размерность входа)
# h_prev: предыдущее скрытое состояние (размер батча × размерность скрытого состояния)
# W_hh: рекуррентные веса (размерность скрытого состояния × размерность скрытого состояния)
# W_hx: входные веса (размерность входа × размерность скрытого состояния)
h_t = activation(matmul(h_prev, W_hh) + matmul(x_t, W_hx) + b)
return h_t
На уровне фреймворка rnn_layer_step скрывает структуру циклов и трафик памяти за высокоуровневыми матричными умножениями (matmul). На аппаратуре вычисление этого шага требует перемещения весов и активаций по иерархии памяти. Чтобы увидеть, где исполнение становится последовательным и где сохраняется параллелизм, «Вычисление рекуррентного слоя» раскрывает матричные операции в явные вложенные циклы вплоть до скалярных операций умножения с накоплением.
Вычисление рекуррентного слоя: вложенные циклы раскрывают структуру последовательных зависимостей. Цикл 1 дает параллелизм по батчу, но циклы 2–3 должны завершиться до активации в цикле 4, и, что важно, каждый шаг времени зависит от выхода предыдущего шага, создавая последовательную глубину , которая мешает распараллеливанию GPU по временной оси.
def rnn_layer_compute(x_t, h_prev, W_hh, W_hx, b):
# Инициализируем следующее скрытое состояние
h_t = np.zeros_like(h_prev)
# Цикл 1: обрабатываем каждую последовательность батча
for batch in range(batch_size):
# Цикл 2: вычисляем рекуррентный вклад (h_prev × W_hh)
for i in range(hidden_dim):
for j in range(hidden_dim):
h_t[batch, i] += h_prev[batch, j] * W_hh[j, i]
# Цикл 3: вычисляем вклад входа (x_t × W_hx)
for i in range(hidden_dim):
for j in range(input_dim):
h_t[batch, i] += x_t[batch, j] * W_hx[j, i]
# Цикл 4: добавляем смещение и применяем активацию
for i in range(hidden_dim):
h_t[batch, i] = activation(h_t[batch, i] + b[i])
return h_t
Структура циклов раскрывает границы параллелизма рекуррентного исполнения. Цикл 1 показывает, что экземпляры батча полностью независимы: последовательности внутри батча распараллеливаются по ядрам ускорителя без взаимного влияния. Внутри каждого экземпляра батча циклы 2 и 3 выполняют рекуррентное преобразование () и проекцию входа (). Обе редукции должны полностью накопиться, прежде чем цикл 4 сможет поэлементно прибавить смещение и применить функцию активации, чтобы получить .
При размерности входа 100 и размерности скрытого состояния 128 каждый шаг выполняет два матричных умножения: проекцию входа и рекуррентное преобразование . Когда размер батча велик (), эти операции исполняются как обобщенные матричные умножения (GEMM) и достигают высокой арифметической интенсивности, поскольку веса, загруженные из памяти, переиспользуются по всем образцам. Когда размер батча мал (, типично для потокового вывода в реальном времени), операции сворачиваются в умножения матрицы на вектор (GEMV). В GEMV каждый весовой параметр должен быть извлечен из памяти ради одной операции умножения с накоплением, а арифметическая интенсивность падает до FLOP/байт, оставляя вычислительные блоки ускорителя без работы.
Системные последствия
Рекуррентные архитектуры накладывают жесткое физическое ограничение: последовательную зависимость. В отличие от MLP и CNN, где аппаратура может распараллеливать исполнение по нейронам, каналам и пространственным пикселям, RNN не может распараллелить вычисления по оси последовательности. Обновление задает строгий порядок: шаг не может начаться, пока шаг не завершится и не запишет свой выход. Для входной последовательности длины системе нужно запустить 1 000 последовательных матричных умножений. Масштабирование вычислительной мощности или пропускной способности памяти ускоряет каждый отдельный шаг, но закон Амдала диктует, что задержка ограничена сериализованным критическим путем. Поэтому параллельное масштабирование строго ограничено измерением батча.
Во время вывода рекуррентные сети демонстрируют исключительную эффективность по памяти. Поскольку рекуррентное состояние сжимает историю в вектор фиксированного размера , память состояния при выводе растет как (например, 2 КБ для состояния FP32 размерности 512) и остается полностью постоянной, будет ли длина последовательности равна 10 или 10 000 токенов. Этот постоянный объем памяти резко контрастирует с механизмами внимания («Внимание»), где полное внимание по последовательности материализует матрицу оценок при предзаполнении (prefill), а авторегрессивная генерация поддерживает KV-кеш размером . Для потокового развертывания на периферийной аппаратуре с ограниченной памятью, например на микроконтроллерах, рабочее состояние RNN размером устраняет исчерпание памяти, которое ограничивает трансформеры.
Рекуррентное исполнение демонстрирует особое поведение иерархии памяти: высокую временную локальность параметров, но низкую операционную интенсивность при стандартной диспетчеризации фреймворка. Матрицы весов и переиспользуются на каждом шаге времени и комфортно размещаются в SRAM или кеше L2, если модель помещается на кристалл. Однако наивный запуск отдельных ядер для проекции входа, рекуррентной проекции, прибавления смещения и активации на каждом шаге времени порождает сильные накладные расходы на запуск ядер и заставляет промежуточные тензоры постоянно перемещаться туда и обратно через HBM. Чтобы смягчить это узкое место пропускной способности памяти, промышленные рекуррентные среды исполнения объединяют проекции, прибавление смещения и активацию в одно монолитное ядро, которое удерживает в регистрах GPU и разделяемой памяти на протяжении всего исполнения последовательности.
Это архитектурное противоречие между состоянием фиксированной емкости и сериализованным исполнением определяло обработку последовательностей до появления трансформеров. Хотя рекуррентные сети поддерживают постоянные накладные расходы памяти независимо от длины последовательности, последовательная зависимость мешает аппаратуре распараллеливать вычисления по шагам времени, а состояние фиксированной емкости становится информационным узким местом, в котором ранние входы затухают на длинных промежутках (проблема затухающего градиента). Преодоление обоих ограничений требовало архитектуры, способной устанавливать прямые связи, адресуемые по содержимому, между произвольными позициями последовательности без промежуточных рекуррентных шагов: это механизм внимания («Внимание»). Для развернутых рекуррентных конвейеров методы смягчения, такие как слияние операторов и конвейерный параллелизм, разобраны в разделе «Оптимизация потоков данных» главы «Аппаратное ускорение».
Внимание: динамическая обработка
Рекуррентные сети сериализуют исполнение вдоль оси последовательности и сжимают всю историческую информацию в скрытый вектор фиксированной емкости («Системные последствия RNN»). В предложении «Кошка, которая сидела у окна с видом на сад, спала» подлежащее «кошка» и сказуемое «спала» разделяют восемь промежуточных слов, однако они образуют основную синтаксическую и смысловую связь. RNN должна обрабатывать все промежуточные токены последовательно, рискуя потерять информацию на промежуточных рекуррентных переходах, и при этом не дает аппаратуре распараллелить вычисления по шагам времени. Это ограничение порождает альтернативный вычислительный шаблон: операцию, которая напрямую вычисляет релевантность между любыми двумя позициями независимо от расстояния.
Механизмы внимания16 устраняют это ограничение (Bahdanau et al., 2015), вводя динамические шаблоны связности, которые адаптируются к содержимому входа. Вместо того чтобы пропускать весь контекст через один вектор состояния фиксированной емкости, внимание «кодировщик — декодер» вычисляет оценки сходства между каждым состоянием декодера и всеми позициями входа кодировщика, динамически направляя информацию по последовательности.
Механизмы внимания
Механизмы внимания — это операции нейронных сетей, которые вычисляют взвешенную сумму векторов значений, где веса выводятся из выученных оценок сходства между вектором запроса и набором векторов ключей. Это обеспечивает динамическую маршрутизацию информации, зависящую от содержимого, между любыми двумя позициями последовательности.
- Значение: внимание связывает любые два токена на глубине , но вычисляет взаимодействий оценок. Если эти оценки материализуются, последовательность из 4 096 токенов с 16-битными оценками занимает 33,6 МБ на слой на голову (около 16,8 млн оценок по 2 байта каждая), напрямую увеличивая члены и железного закона. Блочные алгоритмы точного внимания позволяют не хранить полную матрицу, но плотное вычисление оценок остается квадратичным.
- Отличие: в отличие от RNN, которые сжимают весь прежний контекст в один вектор состояния фиксированного размера, механизмы внимания сохраняют представления токенов и вычисляют оценки релевантности напрямую. Во время обучения или при полном предзаполнении последовательности (prefill), то есть первом проходе, который обрабатывает весь промпт, число взаимодействий оценок растет квадратично с длиной последовательности. При авторегрессивной генерации сохраненный KV-кеш (ключи и значения предыдущих токенов) растет как , пока каждый новый токен обращает внимание на прежние ключи и значения.
- Типичная ошибка: частое заблуждение состоит в том, что внимание — это универсальная схема взвешивания, которую можно свободно применять везде. Квадратичное вычисление оценок — жесткое ограничение масштабирования: удвоение контекста учетверяет число взаимодействий оценок. Наивные реализации также учетверяют хранение оценок; блочные точные алгоритмы вроде FlashAttention избегают полной матрицы, а разреженные варианты сокращают число вычисляемых оценок.
Хотя механизмы внимания сначала использовались как компоненты внутри рекуррентных архитектур, их способность связывать любую позицию с любой другой сделала рекуррентную структуру ненужной для многих задач над последовательностями. Архитектура трансформера17 (Vaswani et al., 2017) объединила внимание с полносвязными слоями, остаточными связями, нормализацией и позиционной информацией без рекуррентности. Этот архитектурный сдвиг обменял последовательный путь RNN длиной на постоянную длину пути между позициями внутри одного слоя внимания, что позволило распараллеливать вычисления по позициям последовательности на высокопроизводительных ускорителях.
Архитектура трансформера («Трансформеры») наследует основные системные свойства от внимания: маршрутизацию, зависящую от содержимого, параллельное исполнение последовательности и квадратичное масштабирование оценок. Анализ системных последствий этого класса архитектур начинается с базовой задачи обработки паттернов, которую решает внимание.
Потребности в обработке паттернов
Обработка динамических паттернов относится к сценариям, в которых связи между элементами не заданы архитектурой, а возникают из содержимого. Машинный перевод хорошо иллюстрирует эту задачу: при переводе фразы «the bank by the river» понимание слова bank требует обращения к слову river, а во фразе «the bank approved the loan» важной оказывается связь со словами approved и loan. В отличие от RNN, которые обрабатывают информацию последовательно, или CNN, которые используют фиксированные пространственные шаблоны, динамическая обработка последовательностей требует операции, которая оценивает связи на основе идентичности токенов. Схема разрешения местоимения в «Иллюстративном паттерне внимания» делает эту динамическую маршрутизацию видимой.
Иллюстративный паттерн внимания: схематичный паттерн внимания для местоимения «they». Толщина линий отражает гипотетическую величину веса внимания: сильнее всего связаны «student», «finish» и «homework». Один слой внимания связывает все позиции напрямую и может вычислять их плотные взаимодействия параллельно.
В «Иллюстративном паттерне внимания» механизм внимания разрешает неоднозначное местоимение they, назначая большие веса релевантным токенам контекста, таким как student и finish; толщина линий показывает эти веса. Поскольку все попарные связи вычисляются параллельно, сеть улавливает эту дальнюю синтаксическую зависимость в одном слое, не передавая промежуточное состояние через промежуточные токены.
Обработка, зависящая от входа, выходит далеко за пределы языка. В предсказании структуры белков взаимодействия аминокислот зависят от химических свойств и пространственного расположения, а не только от позиции в цепи. В анализе графов графовые сверточные сети (GCN) агрегируют признаки по наблюдаемым соседям каждого узла (Kipf and Welling, 2017). В отличие от CNN, которые обращаются к памяти регулярными пространственными шагами, или трансформеров, которые работают с плотными тензорами последовательностей, агрегация соседей в GCN следует нерегулярной структуре смежности входного графа. Каждый шаг сбора обращается к набору эмбеддингов узлов, специфичному для входа, что обесценивает предвыборку кеша и не дает объединять обращения к памяти. Нерегулярные шаблоны сбора соседей поэтому могут ограничивать исполнение пропускной способностью памяти и промахами кеша, а не пропускной способностью вычислений. В анализе документов связи между разделами зависят от смыслового содержания, а не от близости.
Зависимость от входа не означает связности «все со всеми». Плотное внимание вычисляет оценки для каждой пары элементов последовательности, тогда как GCN ограничивает агрегацию ребрами наблюдаемого графа. Графы, специфичные для входа, могут требовать разных расписаний сбора и обладать разной локальностью. Общая системная трудность в том, что вычислительный или шаблон доступа к памяти реагирует на вход, а не следует фиксированному шаблону. Даже когда размерности тензоров остаются фиксированными, оценки, зависящие от содержимого, определяют, какая информация выделяется. Внимание дает один механизм для выучивания таких связей, а плотное самовнимание составляет основу архитектуры трансформера.
Алгоритмическая структура
Чтобы удовлетворить требованиям динамической маршрутизации из «Потребностей в обработке паттернов», нужен формальный оператор, который отображает последовательности переменной длины в веса сродства, зависящие от содержимого (Bahdanau et al., 2015). Архитектура трансформера реализует это отображение через оператор масштабированного скалярного произведения внимания, введенный (Vaswani et al., 2017):
Входы (запросы), (ключи) и (значения)18 — это выученные линейные проекции представлений токенов. Для входной последовательности длины , спроецированной в размерность , скалярное произведение вычисляет все попарных сходств токенов (раздел «Скалярное произведение как мера сходства» приложения «Основы алгоритмов» формализует скалярное произведение как меру сходства). Масштабирование на не дает скалярным произведениям расти по величине при больших размерностях, что иначе загнало бы softmax в области с практически нулевыми градиентами. Оператор softmax19 нормирует каждую строку матрицы оценок в распределение вероятностей по позициям ключей. Наконец, умножение этих нормированных весов на дает выходные векторы, которые образуют взвешенные комбинации представлений значений.
«Механизм внимания: запрос, ключ, значение» иллюстрирует этот вычислительный поток для последовательности длины . Каждая строка получающейся матрицы определяет, насколько сильно отдельный токен обращает внимание на каждый токен последовательности. В обученной модели наибольшие значения сходства отражают сильные контекстные зависимости, тогда как значения, близкие к нулю, подавляют нерелевантные позиции.
Механизм внимания «запрос — ключ — значение»: для последовательности из 6 токенов запросы (голубые) сопоставляются с ключами (красными), давая матрицу внимания с элементами. Цвет ячеек идет от синего к красному по сетке как иллюстративный градиент, а не как вычисленные веса. Каждая выходная позиция агрегирует информацию из всех значений (зеленые), взвешенных собственной строкой этой матрицы. Структура матрицы показывает и вычислительный шаблон (тридцать шесть вычислений сходства), и наивное узкое место памяти (хранение весов внимания). Источник: Transformer Explainer (Cho et al., 2025).
Хотя веса внимания динамически меняются вместе с входными токенами, генерация векторов запросов, ключей и значений требует статических линейных проекций на выученные матрицы параметров. В реализациях на ускорителях эти три операции объединяют в одно пакетное матричное умножение, чтобы максимально загрузить тензорные ядра и исключить накладные расходы на запуск ядер. «Вычисление QKV-проекции» показывает эту объединенную проекцию: умножение матрицы эмбеддингов токенов на упакованную весовую матрицу дает конкатенированные представления запросов, ключей и значений за один проход ядра.
Вычисление QKV-проекции: матрица эмбеддингов () умножается на весовые матрицы QKV () плюс смещение, давая объединенные проекции (). Выходная размерность 2304 содержит конкатенированные проекции запросов, ключей и значений (каждая размерности 768). Это единое пакетное матричное умножение, требующее = 10,6 млн MAC, заменяет 3 отдельные операции проекции ради эффективности. Источник: Transformer Explainer (Cho et al., 2025).
Вычислительное отображение
Перевод оператора внимания в физическое исполнение раскрывает системную стоимость зависящей от данных связности. Вычисление попарных выравниваний требует двух различных матричных умножений на каждую голову внимания: GEMM для оценок () и GEMM для контекста (, где ). Для входа длины последовательности и размерности головы каждая фаза выполняет операций умножения с накоплением, что дает вычислительную сложность на голову.
«Вычисление внимания в слое» сопоставляет высокоуровневую матричную запись с явной реализацией через циклы, которая раскрывает это квадратичное масштабирование. Матричная версия сводится к оптимизированным подпрограммам GEMM на тензорных ядрах ускорителя, тогда как версия с циклами показывает нижележащую структуру физического исполнения: итерации по батчу, квадратичные внутренние произведения «запрос — ключ», редукции softmax по строкам и финальный проход накопления значений по всем позициям последовательности.
Вычисление внимания: две реализации с одинаковой сложностью . Матричная форма (вверху) использует оптимизированный GEMM, а вложенные циклы (внизу) раскрывают квадратичные попарные сравнения: для длины последовательности 512 и размерности 64 вычисление оценок внимания требует = 16,8 млн MAC на голову внимания, плюс еще 16,8 млн MAC на агрегацию значений.
def attention_layer_matrix(Q, K, V):
# Q, K, V: (размер батча × длина последовательности × d_model)
# Вычисляем оценки внимания
scores = matmul(Q, K.transpose(-2, -1)) / sqrt(d_k)
weights = softmax(scores) # Нормируем оценки
output = matmul(weights, V) # Комбинируем значения
return output
def attention_layer_compute(Q, K, V):
# Инициализируем выходы
scores = np.zeros((batch_size, seq_len, seq_len))
outputs = np.zeros_like(V)
# Цикл 1: обрабатываем каждую последовательность батча
for b in range(batch_size):
# Цикл 2: вычисляем внимание для каждой позиции запроса
for i in range(seq_len):
# Цикл 3: сравниваем с каждой позицией ключа
for j in range(seq_len):
# Вычисляем оценку внимания
for d in range(d_model):
scores[b, i, j] += Q[b, i, d] * K[b, j, d]
scores[b, i, j] /= sqrt(d_k)
# Применяем softmax к оценкам
for i in range(seq_len):
scores[b, i] = softmax(scores[b, i])
# Цикл 4: комбинируем значения с весами внимания
for i in range(seq_len):
for j in range(seq_len):
for d in range(d_model):
outputs[b, i, d] += scores[b, i, j] * V[b, j, d]
return outputs
Системные последствия
Механизмы внимания демонстрируют отличительные системные шаблоны, которые отличаются от предыдущих архитектур из-за требований к динамической связности. В терминах железного закона («Железный закон машинного обучения») внимание смещает узкое место с ограниченного задержкой последовательного пути RNN к квадратичным взаимодействиям оценок и перемещению данных, которое зависит от реализации. Наивные реализации материализуют матрицу внимания , тогда как блочные алгоритмы вроде FlashAttention избегают хранения полной матрицы, пересчитывая и потоково пропуская блоки через более быструю память (см. раздел «Доказательство тайлинга FlashAttention и рекуррентности online softmax» приложения «Основы алгоритмов», где разобраны пошаговая рекуррентная формула онлайнового softmax и вывод сокращения ввода-вывода).
Требования к памяти
Механизмам внимания нужно хранилище для проекций «запрос — ключ — значение» и промежуточных признаковых представлений. Наивная реализация также материализует матрицу весов внимания для каждой последовательности и каждой головы, создавая квадратичное узкое место памяти наряду с входами и выходами размера . Для длинных последовательностей эти переходные оценки могут доминировать в памяти ускорителя, хотя выученные матрицы проекций сохраняют фиксированный размер. Блочные ядра точного внимания, такие как FlashAttention, потоково пропускают блоки оценок через более быструю память и не хранят полную матрицу в HBM, однако по-прежнему вычисляют плотных взаимодействий. Это различие отделяет неизбежную квадратичную вычислительную стоимость плотного внимания от необязательного квадратичного хранения оценок. Без блочной обработки ядер материализация промежуточных матриц оценок быстро исчерпывает высокоскоростную память ускорителя при промышленных длинах последовательностей.
Удвоение контекста учетверяет число взаимодействий оценок и наивное хранение оценок.
Квадратичное узкое место
Задача: сколько памяти требует материализованная матрица внимания при длине последовательности 100 000 (контекстное окно)?
Расчет:
- Размер матрицы: матрица оценок внимания имеет размерность на голову, для голов (в этом примере 12 голов).
- Элементы: 100 000 100 000 12 голов = 1,2 10¹¹ элементов.
- Память: при FP16 (2 байта на элемент): 1,2 10¹¹ 2 байта = 240 ГБ.
- Сохраняемые слои: 240 ГБ на слой 32 сохраняемых слоя = 7 680 ГБ.
Системный вывод: материализованная матрица внимания занимает 240 ГБ на слой. Наивное обучение, сохраняющее оценки всех 32 слоев для обратного прохода, потребовало бы 7 680 ГБ, что намного превышает емкость любого отдельного GPU. Эта стена памяти мотивирует две широкие стратегии реализации, которые рассматриваются далее: не материализовать полную матрицу, разбивая вычисление на блоки, или сократить число вычисляемых оценок.
Вычисления и перемещение данных
Вычисление внимания делится на две основные фазы GEMM, между которыми стоит редукция по строкам: генерация попарных оценок «запрос — ключ» и вычисление взвешенных сумм по значениям. Внутренние произведения «запрос — ключ» требуют операций MAC, симметрично повторяемых на стадии агрегации значений. Промежуточный softmax требует поиска максимума по строкам, возведения в экспоненту и суммирования. В отличие от статических сверток с весами, где веса фильтров переиспользуются в фиксированных позициях сетки, внимание вычисляет временные, зависящие от входа матрицы сходства, которые нужно пересчитывать для каждой конфигурации токенов.
Интуиция квадратичного масштабирования
Масштабирование для длинного контекста определяется стоимостью внимания. Проверьте свою интуицию:
- Квадратичный рост: можете ли вы объяснить, почему удвоение длины последовательности учетверяет плотные взаимодействия оценок и материализованную матрицу оценок?
- Граница блочной обработки: можете ли вы объяснить, почему плотное внимание на длинном контексте остается дороже даже тогда, когда блочная обработка устраняет хранение полной матрицы?
Перемещение данных в механизме внимания создает шаблоны доступа к памяти, которые отличаются от операций с фиксированным шаблоном. Вычисление внимания требует проецирования и потокового чтения тензоров запросов, ключей и значений, а затем маршрутизации векторов значений согласно динамически вычисленным оценкам. В наивных реализациях размещение промежуточной матрицы оценок в глобальной памяти HBM/DRAM превращает материализацию оценок в главное узкое место пропускной способности. Статические свертки выигрывают от предсказуемых кеш-линий, а RNN переиспользуют веса во времени, тогда как наивное внимание порождает огромные короткоживущие активационные объемы, которые не вмещаются в стандартные объемы кеша на кристалле.
Квадратичная стена
Сценарий: ранние развертывания BERT жестко ограничивали контекст последовательностью в 512 токенов при выводе и предзаполнении (Devlin et al., 2019).
Диагностика: стандартное самовнимание материализует матрицу оценок , память которой растет квадратично (). Увеличение длины последовательности с 512 до 4 096 токенов увеличивает память оценок в 64 раза и вызывает аварийное завершение из-за нехватки памяти GPU.
Системный урок: сверхлинейный рост памяти превращает алгоритмическую сложность в аппаратные узкие места. Обслуживание длинных последовательностей требует блочной обработки ввода-вывода в духе FlashAttention, разреженного внимания или строгого усечения токенов, чтобы ограничить объем активаций в SRAM.
Внимание заменяет последовательное узкое место скрытого состояния рекуррентных моделей динамической маршрутизацией постоянной глубины, но переносит системную нагрузку на квадратичное масштабирование арифметики и интенсивный трафик пропускной способности памяти. В сочетании с полносвязными слоями, остаточными связями и нормализацией этот примитив позволяет параллельно обрабатывать последовательности от начала до конца на современных ускорителях. Архитектура трансформера («Трансформеры») строится непосредственно на этом фундаменте и задает доминирующую архитектурную парадигму современных крупномасштабных систем машинного обучения.
Трансформеры: параллельная обработка последовательностей
Внимание дает вычислительный примитив динамической маршрутизации между позициями, зависящей от содержимого, однако изначально оно надстраивалось над рекуррентными архитектурами и унаследовало их последовательное узкое место. Архитектура трансформера устраняет рекуррентность, сочетая внимание с полносвязными слоями, остаточными связями, нормализацией и позиционной информацией. Это позволяет вычислять параллельно по позициям последовательности при полной обработке последовательности, сохраняя динамическую связность. Этот архитектурный сдвиг порождает особые физические затраты: квадратичное вычисление плотных оценок при предзаполнении, накопление состояния «ключ — значение» при обслуживании и сильное давление на пропускную способность памяти при авторегрессивной генерации.
Трансформеры
Трансформеры — это архитектуры нейронных сетей, которые сочетают самовнимание, полносвязные слои, остаточные связи, нормализацию и позиционную информацию без рекуррентности, что позволяет параллельно обрабатывать позиции последовательности при обучении и предзаполнении.
- Значение: параллелизм — главная системная выгода. RNN, обрабатывающая последовательность из токенов, выполняет последовательно зависимых шагов. Трансформер обрабатывает все позиции последовательности одновременно, отображая взаимодействия токенов в крупные матричные умножения (GEMM), которые максимизируют загрузку вычислительных блоков ускорителя. Плотное самовнимание вычисляет попарных взаимодействий оценок, а наивные реализации материализуют промежуточный тензор активаций в памяти с высокой пропускной способностью (HBM).
- Отличие: в отличие от внимания внутри рекуррентной основы, которая наследует последовательный путь родительской архитектуры, трансформеры используют внимание как основную операцию смешивания между позициями, чередуя ее с поэлементными полносвязными сетями.
- Типичная ошибка: частое заблуждение состоит в том, что у трансформеров «бесконечный контекст». Длина контекста ограничена двумя различными объемами памяти: матрицей активаций оценок внимания при обучении и предзаполнении и KV-кешем , который накапливается при авторегрессивном обслуживании. При длинных последовательностях объем KV-кеша может сравняться с весами статической модели или превзойти их, и тогда управление KV-кешем и эффективность пропускной способности памяти становятся главными инженерными ограничениями.
Потребности в обработке паттернов
Механизмы внимания впервые появились как дополнение к рекуррентным архитектурам «последовательность в последовательность» (Sutskever et al., 2014; Bahdanau et al., 2015). Эти гибридные модели улучшили динамическую связность на длинных контекстах, но сохранили цикл рекуррентного обновления состояния: шаг по-прежнему строго зависел от шага , что мешало параллельному исполнению по позициям последовательности на параллельной аппаратуре. Устранение рекуррентности требует заменить последовательное распространение состояния связями «все со всеми» между элементами последовательности, обменяв ограниченную память на шаг на параллельное исполнение на ускорителе.
Архитектура трансформера (Vaswani et al., 2017) делает самовнимание основным примитивом смешивания между позициями в паре с позиционными кодировками, которые вносят порядок последовательности. Этот архитектурный выбор обменивает пространственную параметрическую эффективность CNN и ограниченное состояние шага у RNN на неограниченный параллелизм по последовательности при обучении и предзаполнении.
Алгоритмическая структура
Архитектурный сдвиг в трансформерах опирается на слои самовнимания. В отличие от внимания «кодировщик — декодер», где запросы берутся из целевой последовательности, а ключи и значения — из исходной, самовнимание получает запросы, ключи и значения из одной и той же входной последовательности . Такая самореференциальность всех трех проекций позволяет модели разрешать зависимости внутри последовательности на произвольных расстояниях между токенами без промежуточных рекуррентных шагов. «Самовнимание» формализует это преобразование:
Здесь — входная последовательность, а , и — выученные матрицы весов для запросов, ключей и значений соответственно. Эта запись показывает, что самовнимание выводит все свои компоненты из одного и того же входа, создавая динамический шаблон обработки, зависящий от содержимого. Поскольку матричное умножение и построчный softmax действуют симметрично по измерению токенов, самовнимание строго перестановочно-эквивариантно: перестановка строк лишь так же переставляет строки выхода, то есть последовательность рассматривается как неупорядоченное множество. Поэтому позиционные кодировки — будь то синусоидальные векторы, добавляемые к представлениям, или поворотные позиционные эмбеддинги (rotary position embeddings), применяемые к ним, — вносятся в представления, чтобы разрушить эту симметрию и закодировать порядок слов и относительное расстояние.
Трансформеры расширяют одноголовое самовнимание, выполняя несколько операций внимания параллельно через многоголовое внимание. Вместо того чтобы вычислять один набор весов внимания по измерениям, архитектура проецирует запросы, ключи и значения в различных подпространств меньшей размерности . Каждая голова одновременно обращает внимание на свои шаблоны представлений. Их выходы конкатенируются и проецируются через выходную матрицу , как записано в «многоголовом внимании»:
где каждая голова внимания вычисляется как:
Масштабирующий множитель обеспечивает численную стабильность и стабильность градиентов. Если считать компоненты запроса и ключа независимыми случайными величинами с нулевым средним и единичной дисперсией, их скалярное произведение имеет нулевое среднее и дисперсию . Без масштабирования большие размерности головы загоняют скалярные произведения в области, где функция softmax насыщается и градиенты почти нулевые. Деление на нормирует дисперсию к единице, сохраняя стабильные градиенты и обеспечивая эффективное обучение.20
Концептуально внимание реализует дифференцируемую память, адресуемую по содержимому. Тогда как обычные архитектуры памяти извлекают сохраненные значения по явным адресам, самовнимание использует вектор запроса , чтобы оценить сходство со всеми кандидатами-ключами . Получающееся распределение softmax дает непрерывную интерполяцию по векторам значений , работая как дифференцируемая операция поиска.
С точки зрения теории информации механизмы внимания реализуют плавную агрегацию информации. Веса softmax образуют категориальное распределение по позициям ключей, а энтропия распределения показывает, насколько сфокусирована или размыта маршрутизация (Cover and Thomas, 2006). Это уравновешивает две конкурирующие цели: сосредоточить вероятностную массу на релевантных токенах, сохраняя достаточную энтропию, чтобы избежать хрупких жестких решений о выборе.
Однако многоголовое внимание полного ранга часто демонстрирует структурную избыточность: несколько голов выучивают коррелированные карты внимания. Кроме того, экспонента в softmax создает острую чувствительность к исчезновению и переполнению в форматах с пониженной точностью. Эти особенности, важные для аппаратуры, мотивируют структурное прореживание, низкоранговую факторизацию, разреженные шаблоны внимания и специализированные стратегии квантования, которые подробно описаны в главе «Сжатие моделей».
Самовнимание выучивает динамические шаблоны активации по входной последовательности. В отличие от CNN, которые применяют фиксированные фильтры, или RNN, которые используют фиксированные шаблоны рекуррентности, внимание выучивает, какие элементы должны активироваться совместно, на основе их содержимого. Обученные головы внимания часто специализируются на разных синтаксических или смысловых шаблонах (Clark et al., 2019), динамически подстраивая эффективный граф связности под каждую входную последовательность.
Архитектура трансформера применяет этот механизм самовнимания внутри более широкой структуры, которая обычно включает полносвязные слои, послойную нормализацию и остаточные связи. «Архитектура трансформера (кодировщик — декодер)» показывает, как входные токены проходят через повторяющиеся блоки внимания и полносвязные блоки, каждый из которых обернут остаточными связями и нормализацией, и выходят как контекстуализированные представления. Поскольку все позиции можно обрабатывать параллельно, а не последовательно, архитектура обменивает рекуррентное состояние на крупные матричные операции, хорошо отображаемые на обучение на ускорителях.
Архитектура трансформера (кодировщик — декодер): полная архитектура. Кодировщик (слева, повторяется раз) состоит из многоголового внимания, за которым следуют полносвязные слои, каждый с остаточными связями (стрелки в обход блоков) и послойной нормализацией. Декодер (справа) добавляет маскированное внимание, чтобы не обращаться к будущим токенам при авторегрессивной генерации. Позиционные кодировки (синусоидальные волны) вносят информацию о порядке последовательности, которой нет в инвариантной к перестановкам операции внимания. Такая конструкция обеспечивает параллелизм обучения по всем позициям, а декодер при выводе сохраняет авторегрессивную причинность. Источник: (Vaswani et al., 2017).
Вычислительное отображение
Рост длины последовательности бросает вызов иерархиям памяти ускорителей, потому что полное самовнимание масштабируется квадратично с длиной контекста. «Взрыв контекстного окна» иллюстрирует эту траекторию: ранние трансформеры работали с контекстными окнами от 512 до 2 048 токенов (Devlin et al., 2019; Radford et al., 2019; Brown et al., 2020), тогда как современные промышленные модели поддерживают окна от 128 тыс. до более чем миллиона токенов (OpenAI, 2023; Anthropic, 2023; Google, 2024). Названия продуктов здесь служат лишь историческими ориентирами масштаба; устойчивый системный принцип в другом: более длинные контекстные окна переносят сложность из внешних конвейеров извлечения и разбиения документов в бюджеты емкости и пропускной способности памяти ускорителя. Блочные алгоритмы вроде FlashAttention (Dao et al., 2022) и разреженные приближения смягчают выделение промежуточной памяти, но не устраняют фундаментального масштабирования состояния внимания.
Взрыв контекстного окна: емкость контекста моделей (токены, логарифмическая шкала) от ранних моделей (от 512 до 2 тыс. токенов) до современных архитектур с длинным контекстом (от 128 тыс. до 1 млн токенов). При росте контекста в наивная память внимания растет в (), что стимулирует развитие FlashAttention, разреженного внимания и линейного внимания.
«Слой самовнимания» показывает типичную реализацию, в которой самовнимание выводит запросы, ключи и значения из одной и той же входной последовательности.
Самовнимание и многоголовое внимание: самовнимание (вверху) выводит , и из одного и того же входа через три проекции, а затем вычисляет внимание, как было описано выше. Многоголовое внимание (внизу) запускает параллельных голов внимания размерности , затем конкатенирует и проецирует результаты. Для GPT-2 (размерность 768, 12 голов) каждая голова работает с 64 измерениями, распределяя спроецированное признаковое пространство между головами и одновременно открывая разнообразные шаблоны связей.
def self_attention_layer(X, W_Q, W_K, W_V, d_k):
# X: входной тензор (размер батча × длина последовательности × d_model)
# W_Q, W_K, W_V: матрицы весов (d_model × d_k)
Q = matmul(X, W_Q)
K = matmul(X, W_K)
V = matmul(X, W_V)
scores = matmul(Q, K.transpose(-2, -1)) / sqrt(d_k)
attention_weights = softmax(scores, dim=-1)
output = matmul(attention_weights, V)
return output
def multi_head_attention(X, W_Q, W_K, W_V, W_O, num_heads, d_k):
outputs = []
for i in range(num_heads):
head_output = self_attention_layer(
X, W_Q[i], W_K[i], W_V[i], d_k
)
outputs.append(head_output)
concat_output = torch.cat(outputs, dim=-1)
final_output = matmul(concat_output, W_O)
return final_output
Параллельная обработка последовательности принципиально меняется при авторегрессивном выводе: пошаговая генерация выходных токенов вновь вводит последовательную сериализацию и превращает матричные умножения, ограниченные вычислениями, в операции умножения матрицы на вектор, ограниченные пропускной способностью памяти, как это количественно показано в «Системных последствиях» на примере маяка GPT-2 XL.
Системные последствия
Квадратичное узкое место, разобранное в «Системных последствиях» внимания, проявляется по-разному в разных режимах исполнения. Обучение и предзаполнение полной последовательности вычисляют все позиции токенов одновременно, тогда как авторегрессивное декодирование генерирует по одному токену за раз. Поэтому рабочее узкое место смещается от матричных умножений, ограниченных вычислениями, к извлечению весов и состояния, ограниченному пропускной способностью памяти, и определяется длиной последовательности, размером батча и пределами иерархии памяти.
Обучение: квадратичная вычислительная стена
Во время обучения и предзаполнения промпта все позиции токенов обрабатываются параллельно, что позволяет тензорным ядрам ускорителя достичь высокой загрузки вычислений с плавающей запятой. Однако вычисление оценок плотного внимания растет как с длиной последовательности . Для длинных последовательностей (например, 32 тыс. токенов) материализация матрицы внимания требует гигабайтов памяти под активации на каждый слой по всем головам. Запись этой квадратичной промежуточной матрицы в HBM ускорителя и чтение ее обратно для softmax создает крайнее узкое место пропускной способности памяти. Это физическое ограничение мотивирует блочную обработку ядер с учетом ввода-вывода (такую как FlashAttention (Dao et al., 2022)), которая объединяет шаги скалярного произведения, softmax и взвешивания значений в быстрые тайлы SRAM на кристалле, обходя обращения к HBM для промежуточной матрицы . Иерархии памяти аппаратуры (HBM, SRAM, регистровые файлы), которые делают такую блочную обработку эффективной, описаны в главе «Аппаратное ускорение».
Авторегрессивное декодирование с малым батчем: стена пропускной способности памяти
Авторегрессивное декодирование генерирует один токен за раз и часто оказывается ограниченным пропускной способностью памяти при батче из одного образца или малых батчах. Чтобы сгенерировать токен, система выполняет три крупные операции:
- Считать веса модели; степень их переиспользования определяется батчированием и иерархией памяти (например, модель на 70 млрд параметров хранит 140 ГБ весов в FP16; GPT-2 XL делает стоимость этого первого шага конкретной).
- Выполнить умножения матрицы на вектор.
- Считать и записать KV-кеш.
KV-кеш21 растет линейно с длиной последовательности ( на запрос; это отличается от матрицы оценок внимания при обучении) и хранит векторы ключей и значений всех предыдущих токенов, чтобы не вычислять их заново (Pope et al., 2023; Kwon et al., 2023). Ключи и значения прошлых токенов сохраняются, потому что запрос только что сгенерированного токена () должен обращаться ко всему историческому контексту ( и ), чтобы вычислить свое следующее представление. Прошлые запросы () безопасно отбрасываются, поскольку прошлые токены никогда не обращают внимания вперед, к будущим токенам, а кеширование прошлых ключей и значений избавляет от повторного прохода всей модели по полному промпту на каждом генерируемом токене. Для длинных контекстов этот кеш может стать огромным (например, более 100 ГБ), а каждый шаг декодирования считывает прошлые ключи и значения. Возникающее давление на пропускную способность зависит от длины контекста, батчирования, архитектуры внимания, раскладки кеша и аппаратуры.
GPT-2 XL (маяк пропускной способности)
Почему это важно: GPT-2 XL служит примером декодирования с батчем из одного образца, ограниченного пропускной способностью памяти. В использованной здесь модели, учитывающей только веса, каждый шаг декодирования считывает 6 ГБ весов FP32 и выполняет операции умножения матрицы на вектор. Получающаяся арифметическая интенсивность составляет около 0,5 FLOP/байт при весах FP32 или 1 FLOP/байт при весах FP16. Батчирование может амортизировать этот трафик весов, тогда как трафик KV-кеша и активаций добавляется к нему. «Системный профиль GPT-2 XL» сводит количественные свойства маяка пропускной способности:
Свойство Значение Системное следствие Параметры 1,5 млрд Загрузка весов доминирует в задержке вывода. Размер модели 6 ГБ (FP32) Помещается на один GPU, но насыщает пропускную способность HBM. Вычисления 3 GFLOP/токен Низкие вычисления на токен; узкое место — перемещение данных, а не математика. Ограничение Пропускная способность памяти Скорость токенов/с при батче из одного образца сильно зависит от пропускной способности HBM. Профиль Ограничено пропускной способностью (декодирование с малым батчем) Большие батчи могут амортизировать трафик весов и сместить узкое место. Системный профиль GPT-2 XL: оценки только по весам для авторегрессивного декодирования с батчем из одного образца. При этих допущениях каждый шаг считывает веса модели с интенсивностью примерно 0,5–1 FLOP/байт, поэтому пропускная способность HBM сильно ограничивает скорость генерации.
На протяжении обучения и вывода трансформеры демонстрируют различные операционные сигнатуры: неограниченное параллельное исполнение по позициям токенов при обучении, квадратичную арифметическую сложность по длине контекста и ограниченную пропускной способностью потоковую передачу весов при авторегрессивном декодировании.
Однако плотные и пространственные модели не охватывают всего спектра промышленных нагрузок. Крупномасштабные рекомендательные системы отходят от стандартных конвейеров, в которых доминирует арифметика: они сочетают поиск разреженных эмбеддингов, где пропускную способность определяют емкость памяти и нерегулярное распределение обращений, с последующими плотными слоями взаимодействия. Этот гибрид важен в промышленном масштабе: Meta сообщила, что рекомендательные модели составляли большую часть циклов ее ИИ-вывода (Gupta et al., 2020), хотя таким нагрузкам уделяется меньше академического внимания, чем языковым и визуальным моделям. «Разреженные архитектуры» рассматривает рекомендации как последнюю парадигму главы.
Разреженные архитектуры: рекомендательные системы
Когда пользователь открывает потоковый сервис или интернет-магазин, система должна выбрать несколько рекомендаций из каталога в миллионы позиций менее чем за 50 мс. Инженерная задача требует отобразить и пользователей, и товары в плотные векторы общего пространства эмбеддингов, а затем вычислить вероятности взаимодействия в большом масштабе.
В отличие от сверточных сетей, ограниченных вычислениями, или трансформеров, ограниченных пропускной способностью памяти, рекомендательные модели работают в режиме, который определяется главным образом емкостью памяти. Ускоритель, спроектированный для плотных матричных умножений, — например, NVIDIA A100 с сотнями терафлопс арифметической пропускной способности и 80 ГБ HBM, — в рекомендательных нагрузках большую часть времени простаивает. Доминирующие операции — не плотные матричные умножения, а разреженные выборки (gather) из таблиц, которые могут занимать терабайты.
Потребности в обработке паттернов
Ключевая задача рекомендательных систем — работа с категориальными признаками высокой кардинальности. Модель должна обрабатывать идентификаторы пользователей по миллиардам аккаунтов и идентификаторы товаров по миллионам позиций. Сырые идентификаторы не несут никакой внутренней геометрии. Пользователь 1042 не находится «рядом» с пользователем 1043 ни в одном содержательном метрическом пространстве, и нейронная сеть не может вывести смысловые связи из одних лишь целых чисел.
Эмбеддинги решают задачу представления, отображая каждый дискретный идентификатор в плотный вектор, называемый эмбеддингом22 (Mikolov et al., 2013). Системная цена в том, что каждое обращение становится нерегулярным чтением из таблицы размером в десятки или сотни гигабайт. Поэтому рекомендательные модели сталкиваются со стеной емкости и узким местом пропускной способности памяти еще до выполнения первого плотного полносвязного слоя.
Алгоритмическая структура
Архитектура DLRM (Naumov et al., 2019) стандартизирует этот процесс как четырехэтапный конвейер, разделенный между плотным и разреженным режимами. Непрерывные признаки, такие как возраст пользователя или время суток, сначала проходят через нижний MLP — этап, интенсивный по вычислениям, но легкий по памяти, в котором доминируют плотные матричные умножения. Параллельно категориальные идентификаторы индексируют отдельные таблицы эмбеддингов; именно здесь возникает стена емкости памяти:
Например, таблица эмбеддингов для одного миллиарда пользователей с 128-мерными векторами требует байта 512 ГБ памяти. Этот этап интенсивен по памяти, но легок по вычислениям, потому что каждое обращение — это копирование из памяти без арифметического переиспользования. Далее слой взаимодействия объединяет плотные активации нижнего MLP с выбранными разреженными векторами эмбеддингов через попарные скалярные произведения, которые отражают связи «пользователь — товар». Наконец, верхний MLP обрабатывает объединенные представления взаимодействий через полносвязные слои и предсказывает целевую вероятность, например вероятность клика (CTR). Такое сочетание плотных и разреженных вычислений делает DLRM рекомендательным маяком главы; «Вычислительное отображение и системные последствия» количественно описывает получающийся профиль, ограниченный емкостью.
Вычислительное отображение и системные последствия
Вычислительное отображение DLRM делится на два режима, которые нагружают разные подсистемы аппаратуры. Плотные MLP выполняют стандартные операции GEMM — ту же вычислительную схему, что и в разделе «Вычислительное отображение» для MLP, которую эффективно обрабатывают тензорные ядра. Разреженные обращения к эмбеддингам, однако, качественно другие. Это индексированные выборки из памяти с нулевой арифметической интенсивностью, поэтому каждое обращение на уровне операции ограничено пропускной способностью памяти. Это узкое место операций отличается от ограничения по емкости: общий размер таблиц определяет, помещаются ли параметры в память устройства, тогда как пропускная способность шины памяти определяет, как быстро можно собрать отдельные строки. Поскольку каждый обучающий образец или запрос обращается к своему набору разреженных строк, шаблон доступа демонстрирует почти нулевую пространственную и временную локальность, обесценивая стратегии кеширования и предвыборки, которые помогают CNN и MLP.
DLRM (рекомендательный маяк)
Почему это важно: DLRM служит примером нагрузок, ограниченных емкостью памяти. Ее огромные таблицы эмбеддингов часто превышают память одного ускорителя или сервера, поэтому система должна решить, где размещать эти таблицы, прежде чем сможет оптимизировать арифметическую пропускную способность. Слой взаимодействия затем собирает выбранные векторы эмбеддингов и объединяет их с плотными признаками, так что емкость и нерегулярное перемещение данных становятся главными ограничениями. Это резко контрастирует с CNN (ограничены вычислениями) и трансформерами (ограничены пропускной способностью памяти) и требует других решений по аппаратуре и развертыванию. «Системный профиль DLRM» сводит количественные свойства рекомендательного маяка.
Свойство Значение Системное следствие Параметры эмбеддингов 25 млрд Параметры 4 байта; доминирует в общем размере модели. Размер модели 100 ГБ (FP32) Может превышать быструю память одного устройства. Ограничение Емкость памяти Размер модели . Узкое место Нерегулярное перемещение данных Операции выборки доминируют в обработке разреженных признаков. Профиль Смешанный (разреженный/плотный) Сочетает требующие памяти выборки с требовательными к вычислениям MLP. Системный профиль DLRM: количественные свойства рекомендательного маяка и их системные последствия. Таблицы эмбеддингов на миллиарды записей выводят модель за пределы памяти одного устройства и создают режим, ограниченный емкостью, который железный закон напрямую не описывает.
Как только таблицы эмбеддингов превышают одно устройство, главным системным ограничением становится емкость, а не арифметика. Если ResNet-50 (102,4 МБ) помещается на одном ускорителе, а плотная языковая модель вроде GPT-3 (350 ГБ) — в одном узле с несколькими GPU, то промышленные рекомендательные модели достигают терабайтов параметров эмбеддингов. В терминах железного закона («Железный закон машинного обучения») ни число операций , ни объем передачи не выступают связывающим ограничением; ограничивает систему сырая емкость памяти, что задает режим за пределами основной области действия железного закона.
Выборки эмбеддингов DLRM могут зависеть от векторов, хранящихся вне локального раздела памяти.
Поэтому архитектура разрушает предположение об одном устройстве, которое выполняется для меньших плотных моделей. Системные инженеры преодолевают эту стену емкости тремя различными архитектурными стратегиями:
- Сжать таблицы: сжатие, хеширование или прореживание снижают давление на емкость, хотя эти приемы рискуют потерей информации о редких пользователях и товарах («длинный хвост»).
- Переместить таблицы: эмбеддинги могут размещаться в оперативной памяти хоста (host DRAM) или во внешних хранилищах «ключ — значение», хотя удаленные обращения влекут высокие задержки перемещения данных по PCIe или Ethernet.
- Разделить таблицы: таблицы можно шардировать между несколькими ускорителями, так что ни одно устройство не хранит всю модель, однако выборки тогда требуют обмена данными между устройствами.
Архитектурно DLRM превращает рекомендации в задачу управления емкостью раньше, чем в задачу оптимизации вычислений. Разбиение таблиц при обучении (глава «Обучение моделей») и аппаратно ускоренные межсоединения (глава «Аппаратное ускорение») решают эти распределенные раскладки, но базовая задача определения размера начинается с одной таблицы.
Одна таблица эмбеддингов помещается в A100 с 80 ГБ; вторая переходит порог емкости.
Стена емкости
Задача: рассмотрим рекомендательную систему магазина со 100 млн товаров и размером эмбеддинга 128. Сколько памяти требует одна только таблица товаров?
Расчет:
- Записи таблицы: 100 млн товаров.
- Размер вектора: 128 элементов.
- Точность: FP32 (4 байта на элемент).
- Размер таблицы: 100 млн товаров 128 4 байта ≈ 51,2 ГБ.
- Доля емкости: 51,2 ГБ 80 ГБ = 64 процента емкости устройства.
- Проверка двух таблиц: две таблицы по 64 процента каждая превышают 100 процентов емкости устройства.
Системный вывод: одна таблица эмбеддингов для одного признака (товаров) уже занимает 64 процента GPU A100 с 80 ГБ. Добавление пользовательской таблицы того же размера означает, что таблицы эмбеддингов больше не помещаются на одном ускорителе с 80 ГБ, что мотивирует сжатие таблиц, внешнюю память или разделение между устройствами. DLRM — это ограничение по емкости: главный системный вопрос не в том, сколько FLOP/s может выдать ускоритель, а в том, где физически может находиться состояние эмбеддингов.
Как только таблицы перестают помещаться на одном устройстве, разреженные выборки пересекают границы памяти и сети. Одному запросу могут понадобиться строки, принадлежащие нескольким устройствам, и тогда ускоритель, на котором работает нижестоящий MLP, вынужден ждать, пока система соберет эти строки. Внутри узла этот обмен нагружает межсоединение ускорителей, а между узлами превращается в узкое место коллективной коммуникации типа «все со всеми». Архитектурное следствие в том, что раскладка памяти модели рекомендаций напрямую определяет объем сетевого трафика, создавая налог на координацию как при обучении, так и при обслуживании.
DLRM и разреженные обращения
Системы рекомендаций нагружают другую часть машины, чем CNN или трансформеры.
- Ограничение емкостью: можете ли вы объяснить, почему таблицы эмбеддингов переводят DLRM в режим ограничения по емкости памяти, где «FLOP» не является связывающим ограничением?
- Разреженный доступ: можете ли вы объяснить, почему обращения к эмбеддингам ведут себя как случайные выборки из памяти (низкое переиспользование) и поэтому плохо поддаются кешированию и предвыборке?
- Логика размещения: если одна таблица эмбеддингов не помещается в быструю память устройства, можете ли вы описать, какое состояние нужно переместить, сжать или разделить?
- Узкое место перемещения данных: можете ли вы объяснить, почему обращения к разреженным эмбеддингам могут доминировать, даже когда плотный MLP имеет скромную стоимость в FLOP?
У MLP, CNN, RNN, трансформеров и разреженных моделей в духе DLRM разные вычислительные профили, но все они сходятся к компактному набору общих примитивов. Плотные матричные проекции, слои нормализации, остаточные связи и механизмы гейтинга повторяются во всех пяти семействах. Каждый блок трансформера содержит полносвязный MLP, а гейтинг, первоначально разработанный для рекуррентных ячеек, управляет маршрутизацией в моделях «смеси экспертов». Эти строительные блоки переносимы, потому что численные и оптимизационные задачи, которые они решают, — распространение градиентов, стабильность активаций и динамическая маршрутизация, — сохраняются независимо от индуктивного смещения. Для системных инженеров выявление этих общих примитивов показывает, какие аппаратные ускорители и оптимизации компилятора переносятся между нагрузками, а какие должны оставаться специализированными.
Общие строительные блоки
Блок трансформера повторно использует несколько идей, возникших в других местах: плотные проекции из MLP, остаточные пути из глубоких CNN, нормализацию для стабильности активаций и маршрутизацию в духе гейтинга в более поздних вариантах. Пять семейств архитектур различаются предположениями о данных, но многие их инженерные задачи повторяются, поэтому практический вопрос в том, какие строительные блоки и оптимизации переносятся. «Строительные блоки, общие для архитектур» показывает, как эти примитивы накапливались по мере усложнения архитектур: каждая эпоха унаследовала инструменты предшественников и добавила механизм для следующего узкого места.
| Строительный блок | Впервые появился в | Решаемая задача | Где используется сейчас |
|---|---|---|---|
| GEMM | MLP | Универсальная аппроксимация функций | Все архитектуры (полносвязные слои) |
| Разделение параметров | CNN | Пространственная эффективность | Трансформеры (общие проекции), RNN (переиспользование весов во времени) |
| Остаточные связи | ResNet (CNN) | Поток градиентов на большой глубине | Трансформеры, DenseNet, U-Net, многие современные глубокие сети |
| Нормализация | CNN (батч-нормализация) | Стабильность активаций | Послойная нормализация (трансформеры), RMSNorm (нормализация по среднеквадратичному значению), GroupNorm (группировка каналов) |
| Гейтинг | LSTM (RNN) | Избирательная маршрутизация сигнала | Трансформеры (маршрутизация «смеси экспертов»), GRU, highway-сети |
Строительные блоки, общие для архитектур: инженерные примитивы, возникшие в одном семействе архитектур и повторяющиеся во многих современных конструкциях. Каждый блок решает повторяющуюся задачу (поток градиентов, стабильность активаций, маршрутизация сигналов), хотя не каждая архитектура использует каждый примитив.
На эти переносимые строительные блоки повлияло аппаратное обеспечение, доступное в свое время. LeNet-5 (LeCun et al., 1998) обучался на CPU, а сети были достаточно малы, чтобы уместиться в мегабайтах памяти. AlexNet обучил свою сеть из 60 млн параметров на двух GPU GTX 580, отображая параллельные свертки на графическую аппаратуру (Krizhevsky et al., 2012). ResNet-152 (He et al., 2016) стал обучаемым, потому что остаточные связи и батч-нормализация улучшили оптимизацию на большой глубине, используя доступную инфраструктуру обучения на GPU, а не конкретный порог емкости памяти. Трансформеры (Vaswani et al., 2017) стали практичными на GPU своего времени, а позднее резко масштабировались по мере улучшения пропускной способности памяти GPU/TPU и инфраструктуры распределенного обучения. Эта закономерность сохраняется: каждый строительный блок использует новые вычислительные ресурсы, одновременно упираясь в пределы существующих систем.
Плотные операции: универсальная база
GEMM — единственный примитив, общий для всех архитектур этой главы. Хотя «MLP» рассматривались как процессоры плотных паттернов, системное наследие GEMM выходит далеко за пределы MLP. Это полносвязный слой внутри каждого блока трансформера, поточечная свертка в MobileNet, входные и рекуррентные проекции внутри каждой ячейки RNN и нижний MLP в каждой DLRM.
MLP задали профиль вычислений, в котором доминирует GEMM, и это побудило производителей GPU разработать специализированные матричные блоки (тензорные ядра). Шаблон доступа к памяти алгоритма обратного распространения ошибки23, где чередующиеся прямой и обратный проходы сохраняют промежуточные активации, сформировал иерархии памяти ускорителей. Парадигма пакетной обработки, впервые примененная для обучения MLP, задала оптимизацию пропускной способности, которая определяет современную инфраструктуру машинного обучения: группировка независимых образцов в плотные матрицы превращает произведения матрицы на вектор, ограниченные пропускной способностью памяти, в матрично-матричные умножения, ограниченные вычислениями. Эти базовые шаблоны встречаются во всех архитектурах, рассмотренных в этой главе.
Плотная связность также задала базовую стоимость, с которой сверяется каждая последующая архитектура. При параметрах и операциях для слоев ширины GEMM задает опорную точку, относительно которой специализированные архитектуры демонстрируют выигрыш в эффективности. CNN выполняют пространственную обработку при параметрах на позицию (где — размер ядра), трансформеры обменивают параметрическую эффективность на динамические вычисления со сложностью внимания , а разреженные архитектуры вроде DLRM используют поиск по эмбеддингам, чтобы обрабатывать категориальные измерения, которые взорвали бы размеры плотных слоев. Каждое новшество представляет собой отдельную стратегию выхода за пределы базы плотной связности, но ни одно из них не выходит за пределы самого GEMM: он появляется внутри каждой архитектуры как рабочая лошадка преобразования признаков.
Остаточные связи: решение проблемы глубины
Разделение параметров сделало глубокие сети вычислительно посильными, но одна лишь эффективность не решала численных трудностей глубокого обучения. По мере углубления сетей повторные матричные умножения и производные нелинейных активаций приводили к тому, что сигналы градиента либо затухали до численного исчезновения, либо усиливались до переполнения. Остаточные связи снимают этот барьер оптимизации, вводя аддитивные тождественные обходные пути, которые пропускают преобразования слоев.
Проблема глубины
Обратное распространение ошибки через слоев многократно применяет правило цепочки; «Вычисление градиентов и обратное распространение ошибки» дает формальный вывод обратного распространения ошибки и правила цепочки. Для глубокой сети со слоями градиент функции потерь по весам слоя 1 равен:
где — предактивация, а — постактивационный выход слоя . Градиент становится произведением сомножителей, каждый из которых зависит от производной функции активации .
Затухающие градиенты создают незаметный сбой обучения в глубоких архитектурах. Для сигмоидной функции активации производная равна , а ее максимум . Через слоев величина градиента умножается примерно на . При таком крайнем затухании ранние слои получают бесконечно малые сигналы градиента. Обновления весов становятся пренебрежимо малыми, и эти слои фактически перестают обучаться.
Взрывные градиенты — дестабилизирующая противоположность затухающих. Большие сингулярные значения якобианов слоев могут многократно усиливать направления градиента по глубине сети. Например, если каждый якобиан растягивает общее направление примерно в 1,5 раза, эта компонента растет экспоненциально. Такой рост порождает численное переполнение, значения NaN (not-a-number), экстремальные обновления параметров и расходимость обучения. В отличие от затухающих градиентов, которые незаметно останавливают обучение, взрывные градиенты приводят к катастрофическому численному сбою.
Количественный анализ: простые глубокие сети
Рассмотрим обучение глубокой простой сверточной сети на CIFAR-10 без архитектурных вмешательств. Даже при активациях ReLU, производная которых равна единице для положительных входов, оптимизация ухудшается с ростом глубины. В исходной работе по ResNet сообщалось, что простая сеть из 56 слоев показывала заметно худшую ошибку на тестовой выборке CIFAR-10, чем простая сеть из 20 слоев (около 13,6 процента против 8,8 процента), что демонстрирует: добавление слоев ухудшает оптимизацию, несмотря на большую представительную емкость (He et al., 2016).
Эта проблема деградации — не переобучение: простая сеть из 56 слоев имела более высокую ошибку обучения, чем сеть из 20 слоев, что подтверждает: сбой вызван барьером оптимизации, а не плохой обобщающей способностью.
Почему ReLU помогает, но недостаточен
Функция активации ReLU () имеет производную:
По активным путям производная равна 1, что исключает затухание градиента из-за функции активации. Это улучшение по сравнению с сигмоидой позволило стабильно обучать сети из 10–20 слоев.
Однако ReLU вводит другой режим отказа: «мертвые» нейроны. При градиент равен нулю и блокирует поток градиента через этот элемент. Плохо инициализированный вес или большое обновление может сделать предактивации отрицательными на всем обучающем распределении и навсегда отключить нейрон. Кроме того, ReLU не регулирует спектральные свойства самих матриц весов. Сингулярные значения, заметно отличающиеся от единицы, продолжают ослаблять или усиливать градиенты по глубине сети.
Решение через остаточные связи
Блоки ResNet вводят остаточное обучение через остаточные связи, которые преобразуют поток градиента. «Остаточное соотношение» добавляет тождественный путь к остаточному отображению :
где — остаточная функция (обычно два сверточных слоя с батч-нормализацией и ReLU), а — тождественная остаточная связь.
Обусловленность якобиана остаточного блока
Анализ: представим сеть как композицию функций . По правилу цепочки градиент на входе есть произведение якобианов слоев :
Для простых сетей произволен. Оценка означает, что равномерно меньшие единицы нормы вызывают затухание; верно и обратное: означает, что равномерно большие единицы минимальные сингулярные значения приводят к расширению. Смешанные ненормальные якобианы зависят и от сингулярных векторов, и от собственных значений, поэтому одного спектрального радиуса недостаточно для определения поведения градиента.
Для ResNet функция слоя имеет вид , поэтому якобиан равен: где — единичная матрица. Если , то . Таким образом, блок, у которого якобиан остаточной ветви мал, близок к единичному и локально хорошо обусловлен. При наложении многих блоков эти отклонения все же могут накапливаться, поэтому остаточная связь улучшает поток градиента, но не гарантирует единичного усиления и не предотвращает взаимного погашения.
При обратном распространении градиент проходит через это сложение:
Применяя правило цепочки:
Градиент раскладывается на два аддитивных слагаемых. Даже если преобразование остаточной ветви ослабевает, тождественное слагаемое передает напрямую в более ранний слой. Хотя остаточная ветвь может частично мешать тождественному сигналу, малость гарантирует, что якобиан блока остается близким к единичному и ограничивает число обусловленности. Аддитивный путь дает прямой градиентный обходной путь через сеть, хотя и не гарантирует точного единичного усиления на произвольной глубине.
Поток градиента через несколько блоков
Через остаточных блоков градиент принимает вид:
Каждый множитель содержит тождественное слагаемое, поэтому множитель остается близким к единице, когда якобиан остаточной ветви мал. В отличие от простых сетей, которые перемножают произвольные якобианы слоев, ResNet перемножают эти почти единичные множители. Отклонения все равно могут накапливаться, но такая структура улучшает обусловленность и делает обучаемыми сети из 100 и более слоев.
Эмпирическая проверка на 56 слоях
Эмпирические результаты подтверждают эту теоретическую обусловленность. В исходных экспериментах на CIFAR-10 остаточная сеть из 56 слоев достигла примерно 7,0 процента ошибки на тестовой выборке, обратив деградацию, наблюдавшуюся у простых сетей, и превзойдя свой аналог из 20 слоев (He et al., 2016). Тождественные обходные пути обеспечивают беспрепятственный путь для обратного распространения градиента и уточнения представлений, позволяя более глубоким моделям реализовать свое преимущество по емкости. Не существует единой глубины, начиная с которой остаточные связи внезапно становятся обязательными; обучаемость также зависит от инициализации, нормализации, динамики оптимизатора и архитектуры блока (He et al., 2016).
Хотя остаточные связи решают задачу обусловленности градиента, они накладывают конкретные аппаратные издержки. Вычисление требует, чтобы входной тензор оставался в памяти на протяжении всех операций ветви . Это удлиненное время жизни увеличивает пиковый объем активаций в HBM ускорителя во время прямого прохода и сохраняет для обратного распространения, если не используются контрольные точки активаций. Кроме того, поэлементное сложение ограничено пропускной способностью памяти: оно выполняет одно сложение на каждое загруженное значение (арифметическая интенсивность FLOP/байт), и неслитые операции остаточного слияния превращаются в простои памяти.
Остаточные связи стабилизируют обратный путь градиента, но не ограничивают прямой масштаб промежуточных активаций. Неограниченная дисперсия по глубине по-прежнему может дестабилизировать входы слоев, что требует дополнительного примитива: нормализации.
Нормализация: стабилизация активаций на большой глубине
Нормализация играет роль прямого партнера остаточных связей: если остаточные пути сохраняют поток градиента при обратном проходе, то нормализация стабилизирует распределение промежуточных активаций. Впервые утвержденная как батч-нормализация в CNN (Ioffe and Szegedy, 2015)24, эта операция эволюционировала в послойную нормализацию для моделей последовательностей, а затем упростилась до RMSNorm25 для больших языковых моделей.
Батч-нормализация: определение и формулировка
Батч-нормализация стандартизует активации, используя статистики, вычисленные по мини-батчу для каждого признака или канала во время обучения. Для полносвязных активаций ось редукции — измерение батча. Для сверточных активаций реализации вычисляют поканальные статистики по батчу и пространственным позициям (). Для мини-батча активаций на определенном слое преобразование выполняется в два этапа.
Сначала вычисляем статистики батча:
Затем по батчу выполняем нормализацию и применяем обучаемые масштаб и сдвиг. Шаг нормализации в «нормализации батча» центрирует и масштабирует активации, а «преобразование батча» применяет обучаемые параметры, которые позволяют сети, если это оптимально, восстановить тождественное преобразование:
Параметры (масштаб) и (сдвиг) выучиваются во время обучения, а (обычно ) предотвращает деление на ноль. Аффинное преобразование возвращает гибкость выученных масштаба и сдвига, однако фиксированные и не могут точно обратить меняющиеся статистики для каждого батча. Нормализация допускает большие скорости обучения, не давая промежуточным активациям взрываться в насыщающиеся нелинейные режимы, и ускоряет сходимость по сравнению с ненормализованными сетями.
Обусловленность якобиана нормализации
Анализ: нормализация стабилизирует обучение, обуславливая якобиан слоя. Для текущего батча рассмотрим градиент нормированного выхода по входу: где — символ Кронекера. Этот якобиан связывает примеры внутри батча, а масштаб задается величиной ; последующий аффинный масштаб умножает его. У него есть нулевые направления, связанные с инвариантностью к сдвигу по батчу, поэтому не существует универсальной положительной границы собственных значений вроде .
Батч-нормализация улучшает оптимизацию эмпирически, стандартизируя промежуточные масштабы, но сама по себе не предотвращает затухание или взрыв градиентов во всей сети. Ее количественный эффект зависит от архитектуры, статистик батча, оптимизации и параметризации, а не от универсального диапазона градиентов в два–четыре раза.
Послойная нормализация: независимость от архитектуры
Хотя батч-нормализация позволила обучать гораздо более глубокие CNN, она вводит серьезные ограничения для распределенных систем и моделирования последовательностей. При распределенном обучении вычисление истинных статистик мини-батча требует операции all-reduce между узлами ускорителей по PCIe или NVLink, что добавляет задержку связи к каждому нормализованному слою. Если же статистики вычисляются локально по малым батчам на каждом ускорителе, шумные эмпирические оценки дестабилизируют оптимизацию. Кроме того, батч-нормализация не справляется с последовательностями переменной длины и с авторегрессивной генерацией токен за токеном без сложных масок дополнения и без перекоса обучения и обслуживания. Послойная нормализация снимает эти ограничения, нормируя по измерению признаков, а не по батчу (Ba et al., 2016).
Для входного вектора с признаками:
«Послойная нормализация» задает полную операцию послойной нормализации, где обозначает поэлементное умножение:
Послойная нормализация нормирует каждый токен или образец независимо. Вычисление выполняется локально в SRAM и регистрах ускорителя на кристалле без обмена между образцами или устройствами. Эта независимость делает послойную нормализацию стандартным выбором для трансформеров, где длины последовательностей различаются, а авторегрессивная генерация при выводе вычисляет отдельные токены.
Сравнительный анализ: когда какой вариант использовать
Выбор между вариантами нормализации отражает различные компромиссы в машинном и операционном планах. «Сравнение вариантов нормализации» сводит основные свойства. Батч-нормализация хранит выученные масштаб и сдвиг вместе с невыучиваемыми скользящими буферами среднего и дисперсии; послойная нормализация вычисляет статистики динамически для каждого образца во время выполнения, исключая буферы состояния.
| Характеристика | BatchNorm | LayerNorm | RMSNorm |
|---|---|---|---|
| Ось нормализации | Батч и для CNN пространственные позиции | Измерение признаков | Измерение признаков |
| Зависимость от размера батча | Высокая (шумно для малых батчей) | Нет | Нет |
| Типичное применение | CNN, модели зрения | Трансформеры, RNN | LLaMA, эффективные трансформеры |
| Стоимость вычислений | Выше (среднее + дисперсия) | Выше (среднее + дисперсия) | Ниже (только RMS) |
| Обучение/вывод | Различны (скользящие статистики) | Одинаковы | Одинаковы |
Сравнение вариантов нормализации: разные методы нормализации компромиссно сочетают вычислительную эффективность, чувствительность к размеру батча и совместимость с архитектурой. RMSNorm (Zhang and Sennrich, 2019), который используется в семействе LLaMA и других эффективных трансформерах (Touvron et al., 2023; Touvron et al., 2023), не выполняет центрирование по среднему: .
Вычислительный профиль нормализации определяется ее арифметической интенсивностью. Поскольку нормализация применяет поэлементные операции к большим тензорам активаций, выполнение ограничено пропускной способностью памяти, а не вычислениями. Стандартная послойная нормализация требует два прохода редукции по скрытому измерению в SRAM: один для накопления среднего и второй для вычисления дисперсии . RMSNorm исключает шаг центрирования по среднему, сводя операцию к одной редукции суммы квадратов. Этот единственный проход редукции вдвое сокращает трафик памяти и позволяет более плотное слияние ядер, что дает ускорение на 7–64 процента, о котором сообщалось для нагрузок вывода трансформеров.
С операционной стороны батч-нормализация требует явного переключения режимов: между обучением (где вычисляются статистики мини-батча) и выводом (где применяются скользящие статистики, накопленные при обучении). Несовпадение скользящих статистик и распределения данных при развертывании — частый источник перекоса обучения и обслуживания. Послойная нормализация и RMSNorm выполняют одинаковые вычисления при обучении и выводе, исключая скользящие буферы и обеспечивая согласованность в средах развертывания.
Гейтинг: управление потоком информации
Остаточные связи и нормализация решают проблемы устойчивости, связанные с глубиной: соответственно поток градиента и дисперсию активаций. Гейтинг решает другую задачу: избирательно направлять информацию через сеть в зависимости от контекста входа.
Гейтинг возник в рекуррентных сетях, где простые рекуррентные петли страдали от сильной деградации градиента на длинных временных последовательностях. LSTM26 (Hochreiter and Schmidhuber, 1997) и GRU27 (Cho et al., 2014) решили эту проблему, введя гейты: взвешенные параметрами преобразования, которые действуют как дифференцируемые клапаны, защищающие, обновляющие или отбрасывающие сохраненное состояние.
Гейтинг выходит за рамки рекуррентности как фундаментальный механизм маршрутизации, зависящей от данных. В прямых структурах highway-сети (Highway Networks) использовали гейтинг, чтобы динамически интерполировать между преобразованием и тождественным обходным путем, что непосредственно вдохновило остаточные связи. В обработке последовательностей внимание распространяет гейтинг на весь временной контекст: внимание «кодировщик — декодер» (Bahdanau et al., 2015) вычисляет динамическое распределение маршрутизации по представлениям входа. В трансформерах веса softmax-внимания действуют как коэффициенты маршрутизации, зависящие от данных, определяя, как признаки агрегируются по токенам, тогда как архитектуры «смеси экспертов» распространяют гейтинг на динамическую отправку токенов в специализированные полносвязные подсети.
Синтез: как трансформеры объединяют все
Современные архитектуры трансформеров объединяют все четыре общих примитива в единый блок. Как показано в «Блоке остаточной связи», остаточные пути обрамляют каждый подслой, сохраняя поток градиента через глубокие стеки. Плотные проекции GEMM выполняют преобразования признаков внутри многоголового внимания и полносвязных подсетей. Послойная нормализация (или RMSNorm) стабилизирует активации перед каждой проекцией. Наконец, веса softmax-внимания динамически управляют маршрутизацией информации по позициям токенов.
Блок остаточной связи: остаточная связь реализует , создавая тождественный обходной путь, который пропускает весовые слои перед финальной нелинейностью. При обратном распространении градиенты проходят и по остаточному пути (через ), и по тождественному пути (через перед финальной нелинейностью), помогая градиентам достигать ранних слоев даже в сетях из более чем 100 слоев. Этот архитектурный шаблон позволил строить очень глубокие остаточные CNN и стал центральным в блоках трансформеров и многих других современных архитектурах.
Переход от RNN к трансформерам заменил последовательные зависимости рекуррентных шагов параллельным вниманием «все со всеми», сократив последовательную операционную глубину с шагов до шагов для взаимодействия токенов. Этот архитектурный сдвиг максимизирует загрузку аппаратуры на массивно-параллельных ускорителях, таких как GPU и TPU, где тысячи арифметических блоков простаивают, если их сдерживают последовательные зависимости. Остальные строительные блоки перешли напрямую: GEMM, остаточные связи и нормализация остаются необходимыми во всех семействах.
Эта переносимость распространяется на современные варианты. Визуальные трансформеры (Vision Transformers)28 адаптируют трансформер к изображениям, сохраняя все четыре строительных блока (Dosovitskiy et al., 2021). GPT-3 масштабирует эти шаблоны трансформера, чередуя плотное внимание с разреженным вниманием ленточного типа и оставаясь в рамках того же набора примитивов (Brown et al., 2020). Практические трудности реализации и оптимизации рассматриваются в главе «Сжатие моделей».
«Использование примитивов в архитектурах» сопоставляет, как четыре архитектурных семейства используют эти базовые примитивы. Трансформеры сохраняют плотные операции GEMM, общие для всех архитектур, но вносят зависящие от содержимого редукции типа «все со всеми» через внимание, сочетая операции широковещания MLP с операциями сбора и редукции более динамичных архитектур.
| Тип примитива | MLP | CNN | RNN | Трансформер |
|---|---|---|---|---|
| Вычисления | Плотный GEMM | Свертка | Последовательный GEMM | GEMM + внимание |
| Доступ к памяти | Последовательный | С шагом | Последовательный + состояние | Блочные потоки QKV |
| Перемещение данных | Широковещание | Скользящее окно | Временное широковещание | Сбор + редукция |
| Параллелизм | Высокий | Высокий | Низкий (временные зависимости) | Высокий (по позициям) |
Использование примитивов в архитектурах: все архитектуры используют GEMM, но различаются шаблонами доступа к памяти, перемещением данных (от широковещания к сбору и редукции) и параллелизмом. Трансформеры сочетают плотный блочный доступ QKV с редукциями, специфичными для внимания, поэтому они одновременно нагружают и блоки GEMM, и путь редукции.
Для системных инженеров этот взгляд на строительные блоки отделяет переносимые оптимизации от специфичных для архитектуры. Блочная обработка GEMM и вычисления смешанной точности полезны всем архитектурам. Управление памятью для остаточных связей применимо к любой остаточной сети. Слияние ядер нормализации помогает и CNN, и трансформерам. Оптимизации, специфичные для внимания, остаются связанными с шаблоном памяти внимания, но и они опираются на те же базовые примитивы GEMM и доступа к памяти. Чтобы понять, почему эти оптимизации переносятся, «Вычислительные примитивы» сводит общие слои к примитивам, которые исполняет машина.
Вычислительные примитивы
Фреймворки и компиляторы не исполняют высокоуровневые абстракции слоев напрямую; они понижают нейронные сети до компактного набора вычислительных примитивов. Прямой проход ResNet-50 выполняет миллиарды операций умножения с накоплением; блок внимания трансформера пропускает гигабайты через иерархии памяти на кристалле; рекомендательная модель разбрасывает случайные обращения по таблицам эмбеддингов терабайтного масштаба. Несмотря на эти архитектурные различия, физическая нагрузка на аппаратуру распадается на три области примитивов: плотную арифметику, траектории доступа к памяти и перемещение данных между ядрами или устройствами. Выделение этих примитивов раскрывает физические узкие места — арифметическую интенсивность, пропускную способность памяти и задержку межсоединений, — которые определяют проект ускорителя и оптимизации компилятора, подробно описанные в главе «Аппаратное ускорение».
Базовые вычислительные примитивы
Базовый примитив определяет, какой шаблон исполнения архитектура заставляет аппаратуру оптимизировать: плотную тензорную математику, повторное локальное переиспользование или маршрутизацию, зависящую от входа. Матричное умножение, операции скользящего окна и динамические вычисления повторяются в семействах моделей, потому что каждая сохраняет свой особый профиль исполнения при понижении до кремния. Они являются примитивами в инженерном смысле: дальнейшая декомпозиция стирает характеристики производительности, которые должны оптимизировать аппаратные блоки и компиляторы.
Матричное умножение — путь плотной тензорной математики. Умножение матрицы активаций на матрицу весов вычисляет линейные комбинации по измерениям признаков (напомним эталонный слой MLP из «Алгоритмической структуры»). Этот путь доминирует в современных нагрузках: MLP выполняют его напрямую для полносвязных проекций, CNN сводят свертки к матричным умножениям, а трансформеры опираются на него для проекций «запрос — ключ — значение» и полносвязных сетей. «Преобразование im2col» иллюстрирует, как понижение отображает пространственную локальность скользящего окна в стандартное матричное произведение в порядке строк (row-major).
Преобразование im2col: сводит свертку к GEMM, разворачивая фрагменты изображения в плотную матрицу. Две входные карты признаков дают четыре позиции скользящего окна, представленные здесь строками матрицы ; два фильтра складываются в столбец . Их произведение дает четыре выходные позиции. Понижение может использовать оптимизированные матричные ядра, но расширяет память на величину, зависящую от размера ядра, шага, дополнения и реализации, поэтому выигрыш в производительности зависит от нагрузки.
Техника im2col29 (image to column, «изображение в столбцы») превращает скользящие свертки в плотные GEMM. Разворачивая каждый фрагмент рецептивного поля в строку матрицы и укладывая веса фильтров в столбцы, im2col позволяет сверточным слоям исполняться на зрелых GEMM-библиотеках, настроенных производителями, таких как cuBLAS, MKL и OpenBLAS.
Такое понижение задает явный компромисс «память ради вычислений». Пакетный входной тензор формы распаковывается в развернутую матрицу формы , а сверточные фильтры приводятся к форме . Их произведение дает выходную матрицу формы . Для сверток с шагом 1 и размером ядра входные пиксели, общие для перекрывающихся рецептивных полей, дублируются в памяти до раз, увеличивая объем памяти и трафик DRAM, если только они не объединяются или не разбиваются на блоки непосредственно в SRAM на кристалле.
Структурная и неструктурная разреженность рассматриваются в разделе «Прореживание» главы «Сжатие моделей»; исполнение разреженных вычислений с учетом аппаратуры и совместное проектирование алгоритма и аппаратуры — в главе «Аппаратное ускорение».
Операции скользящего окна представляют путь локального переиспользования. Вместо материализации дублирующих буферов в памяти нативное исполнение скользящего окна проводит компактное ядро фильтра по входным тензорам, вычисляя локальные шаблоны. Ускорители используют эту структуру через специализированную буферизацию потока данных. Например, TPU направляют вычисления через двумерные систолические массивы30, где активации и веса синхронно текут через сетку элементов обработки с умножением и накоплением. Прямая передача данных между соседними регистрами исключает обращения к внешней памяти для каждой арифметической операции.
Динамические вычисления представляют путь адаптивной маршрутизации. В плотном внимании трансформера веса взаимодействий «запрос — ключ» меняются для каждого входного токена, но формы тензоров и матричные операции остаются статичными и регулярными. Напротив, разреженное внимание, гейтинг «смеси экспертов» (MoE) и исполнение динамических графов вносят управляющий поток, зависящий от данных, и размерности тензоров, известные только во время выполнения. Такое динамическое исполнение бросает вызов обычному статическому выделению памяти и диспетчеризации параллельной работы.
Промышленные архитектуры сочетают эти пути исполнения. Блок трансформера использует плотные GEMM формы для проекций признаков, вычисление матрицы оценок внимания и, при необходимости, динамическую маршрутизацию по подсетям-экспертам. Однако пиковая арифметическая пропускная способность на бумаге не гарантирует реальной производительности: блоки исполнения аппаратуры остаются без работы, если подсистема памяти не может подавать им операнды с соответствующей скоростью.
Примитивы доступа к памяти
Скорость и предсказуемость доступа к памяти определяют загрузку ускорителя. Даже матричный движок, способный выдавать сотни терафлопс, простаивает, если данные не могут пройти по иерархии памяти достаточно быстро. Арифметическая операция на кристалле завершается за единицы тактов, тогда как извлечение операнда из внешней DRAM занимает сотни тактов.
Шаблоны доступа к памяти делятся на три категории — последовательный доступ, доступ с шагом и случайный доступ, — которые определяют, насколько эффективно аппаратура может предвыбирать, кешировать и объединять запросы к памяти. Поскольку передача данных через границы корпусов требует гораздо больше энергии, чем операции АЛУ, шаблоны доступа к памяти задают энергетические бюджеты наряду с задержкой исполнения.
Энергетическая цена перемещения данных
Ключевой системный принцип: перемещение данных стоит дороже, чем вычисления над ними. Операция умножения с накоплением в плавающей запятой потребляет примерно 1–5 пДж в зависимости от технологического процесса (например, около 4,6 пДж при 45 нм (Horowitz, 2014)), тогда как извлечение 32-битного операнда из внешней DRAM стоит сотни пДж в той же эталонной модели. Даже консервативные оценки ставят обращение к внешней DRAM в десятки и сотни раз выше арифметики, что объясняет, почему шаблоны доступа к памяти, а не только число FLOP, определяют эффективность на практике.
Рассмотрим предыдущие архитектуры через эту энергетическую призму: у MLP низкое переиспользование данных (каждый вес загружается один раз на образец), поэтому энергию в них доминирует трафик DRAM. CNN переиспользуют веса фильтров по пространственным позициям, амортизируя стоимость загрузки на применений; та же локальность, которая делает их ограниченными вычислениями, делает их и энергетически эффективными. RNN переиспользуют веса по шагам времени (высокое временное переиспользование), но платят за повторное чтение и запись скрытого состояния на каждом шаге. Трансформеры сочетают попарное вычисление оценок с перемещением ключей и значений, из-за чего полное внимание по последовательности имеет квадратичную вычислительную сложность; реализация и блочная обработка определяют вспомогательный трафик памяти и энергию. Эти энергетические профили напрямую повторяют столбец узких мест в «Сравнении маячных моделей».
Этот принцип лежит в основе последующих стратегий оптимизации: в разделе «Квантование и числовая точность» главы «Сжатие моделей» показано, как квантование уменьшает число бит, передаваемых на значение, прореживание устраняет лишнее перемещение данных, а блочная обработка удерживает рабочие наборы в более быстрых и экономичных по энергии кешах.
Последовательный доступ дает наибольшую эффективную пропускную способность. При пакетном матричном умножении MLP аппаратура потоково читает непрерывные строки весов и векторы активаций. Современные архитектуры DRAM используют пакетный режим передачи для непрерывных адресов, насыщая доступную пропускную способность интерфейса (на подсистемах HBM она достигает нескольких терабайт в секунду), а аппаратные предвыборщики предсказывают последующие кеш-линии. Компиляторы оптимизируют этот шаблон, выделяя непрерывные блоки памяти и выравнивая шаги тензоров по кеш-линиям аппаратуры.
Доступ с шагом возникает, когда запросы к памяти перескакивают через непрерывные адреса с равномерными интервалами. В стандартных сверточных слоях без преобразования im2col свертка по пространственным измерениям требует обращений к входам, разделенным шагом строк карты признаков. Доступ с шагом снижает пропускную способность памяти: загружаются целые кеш-линии, а используется лишь часть байтов каждой из них. Компиляторы смягчают этот штраф, переупорядочивая циклы или упаковывая срезы с шагом в непрерывные временные буферы в разделяемой памяти.
Случайный доступ создает самое серьезное узкое место памяти. В таблицах эмбеддингов рекомендательных моделей разреженные идентификаторы признаков индексируют произвольные строки таблиц размером в гигабайты или терабайты. Эти непредсказуемые выборки обесценивают аппаратные предвыборщики, дробят пакетные транзакции DRAM и порождают высокую долю промахов кеша. Плотное внимание трансформера представляет противоположный профиль: хотя веса внимания зависят от содержимого, сами векторы запросов, ключей и значений лежат в непрерывных тензорах. Оптимизированные ядра внимания разбивают эти плотные матрицы на блоки через SRAM на кристалле, полностью избегая случайных адресов DRAM.
«Сложность доступа к памяти» количественно описывает, как эти шаблоны доступа определяют масштабирование хранения параметров и активаций в семействах моделей.
| Архитектура | Зависимость от входа | Хранение параметров | Хранение активаций | Характер масштабирования |
|---|---|---|---|---|
| MLP | Линейная | Предсказуемый | ||
| CNN | Постоянная относительно разрешения | Эффективный | ||
| RNN | Линейная | Сложный | ||
| Трансформер | Квадратичное внимание | на блок | внимание плюс активации | Проблемный |
Сложность доступа к памяти: разные нейросетевые архитектуры демонстрируют разные шаблоны доступа к памяти и требования к хранению, что влияет на производительность и масштабируемость системы. Хранение параметров зависит от размерностей модели, а хранение активаций представляет значительную стоимость во время выполнения. Член у трансформера описывает материализованные оценки внимания в наивной реализации; блочные ядра точного внимания могут избежать хранения всей этой матрицы.
Где:
- : размер входа
- : ширина слоя
- : размер батча
- : размер ядра
- : число каналов
- : число входных и выходных каналов
- : высота входной карты признаков (CNN)
- : ширина входной карты признаков (CNN)
- : размерность скрытого состояния RNN
- : длина последовательности
- : размерность модели трансформера
Эти свойства масштабирования памяти определяют возможности переиспользования данных и поведение кеша. В CNN пространственное переиспользование позволяет каждому входному пикселю участвовать в нескольких перекрывающихся вычислениях фильтра ( раз для ядра ), что дает L1, L2 и разделяемой памяти амортизировать стоимость загрузки из DRAM через блочную обработку циклов. Напротив, MLP без батчирования перезагружает всю свою матрицу весов для одного входного вектора, достигая минимального переиспользования данных и оставляя процессор без пропускной способности.
Размер рабочего набора — объем данных, одновременно необходимых блокам исполнения, — определяет, помещается ли операция в быструю память на кристалле. Рабочий набор слоя MLP часто укладывается в несколько сотен килобайт и целиком находится в SRAM на кристалле. Напротив, полное внимание по последовательности в трансформерах материализует промежуточные карты внимания, которые растут как ; для длинных последовательностей они легко превышают емкость SRAM на кристалле и переливаются в высокоскоростную DRAM, если только не объединяются с помощью блочной обработки онлайнового softmax.
Если «Сложность доступа к памяти» задает масштабирование памяти, то «Сравнение вычислительной сложности» сопоставляет возникающие арифметические требования, структуры распараллеливания и основные аппаратные узкие места для четырех эталонных архитектур.
| Архитектура | Параметры | Прямой проход | Память | Распараллеливание | Узкое место |
|---|---|---|---|---|---|
| MLP | на слой | на слой | весов, активаций | Отлично: матричные операции параллельны | Пропускная способность памяти |
| CNN | на слой | признаков, весов | Хорошо: пространственная независимость | Часто пропускная способность вычислений; для глубинных или малых батчей — пропускная способность памяти | |
| RNN | всего | за шагов времени | рекуррентного состояния (вывод); активаций (обучение) | Плохо: последовательные зависимости | Последовательные зависимости |
| Трансформеры | проекции QKV/O плюс полносвязных слоев | на слой | внимание, последовательности | Отлично (по позициям), но ограничено памятью | Память |
Сравнение вычислительной сложности: характер масштабирования и требования к ресурсам основных архитектур нейронных сетей. Обозначения: — размерность входа, — размерность выхода, — размерность модели трансформера, — размерность скрытого состояния RNN, — размер ядра, — число каналов, — пространственные размеры, — длина последовательности (число шагов времени), — размер батча. Столбец узких мест указывает главный фактор, ограничивающий производительность в типичных развертываниях. Для трансформеров член памяти предполагает материализованные оценки внимания; блочные ядра точного внимания могут избежать хранения всей этой матрицы.
Примитивы доступа к памяти определяют, насколько эффективно одно вычислительное ядро извлекает данные из своей локальной иерархии памяти. Однако исполнение нейронных сетей в масштабе требует согласования потоков данных между несколькими ядрами, кешами на кристалле и отдельными ускорителями.
Примитивы перемещения данных
Примитивы перемещения данных описывают расхождение (fan-out) и схождение (fan-in) значений тензоров между элементами обработки, банками памяти и межсоединениями ускорителей. Как уже отмечалось из-за физического энергетического разрыва между операциями АЛУ и передачами данных, перемещение данных по межсоединениям часто требует большей задержки и энергии, чем сами вычисления.
Шаблоны коммуникации сводятся к четырем базовым коллективным операциям: широковещание (broadcast), рассеивание (scatter), сбор (gather) и редукция (reduction). «Примитивы перемещения данных» сопоставляет их топологии связи.
Примитивы перемещения данных: четыре базовых шаблона управляют потоком информации в вычислениях нейронных сетей. Широковещание (слева вверху) копирует одно значение во все адресаты; оно используется при разделении весов между элементами батча. Рассеивание (справа вверху) распределяет разные элементы по разным адресатам, что позволяет разбивать работу. Сбор (слева внизу) собирает распределенные значения в одно место, как при объединении внимания. Редукция (справа внизу) объединяет несколько значений агрегирующей операцией (сумма, максимум); она встречается при синхронизации градиентов и вычислении оценок внимания. Энергетическая цена перемещения данных (см. раздел «Примитивы доступа к памяти») делает эти шаблоны критичными целями оптимизации.
Операции широковещания распределяют одинаковые данные от одного источника к нескольким параллельным адресатам. При пакетном выполнении GEMM стационарные тайлы весов рассылаются нескольким вычислительным ядрам, каждое из которых вычисляет независимый элемент батча. Ускорители ускоряют широковещание через выделенные коммутаторы на кристалле или многоадресные сетевые структуры, а компиляторы разбивают циклы на тайлы, чтобы максимально переиспользовать каждое широковещаемое значение.
Операции рассеивания разбивают исходный тензор на непересекающиеся сегменты и отправляют разные срезы разным адресатам. При пространственном или модельном параллелизме большой тензор активаций или весов рассеивается по вычислительным тайлам или узлам кластера. В больших языковых моделях архитектуры MoE вводят динамические шаблоны рассеивания, зависящие от входа: сеть гейтинга направляет отдельные токены к конкретным сетям-экспертам, распределенным по устройствам. Поскольку маршрутизация токенов зависит от входных данных во время выполнения, динамическое рассеивание часто порождает неравномерную загрузку: слабо загруженные ускорители простаивают, а перегруженные эксперты становятся узким местом конвейера.
Операции сбора собирают распределенные срезы тензора в один центральный адресат. В разреженных системах рекомендаций сбор извлекает векторы эмбеддингов, соответствующие разреженным индексам признаков, из распределенных узлов памяти. В самовнимании трансформера сбор происходит вдоль измерения последовательности: каждый запрос агрегирует представления «ключ — значение» по всем позициям последовательности.
Операции редукции объединяют несколько входных значений в агрегированный результат с помощью ассоциативных операторов, таких как суммирование или взятие максимума. Редукции повсеместны в нейронных сетях: они встречаются при вычислении послойной нормализации, при расчете нормировочных множителей softmax и при синхронизации градиентов весов между распределенными рабочими процессами параллелизма данных. Аппаратура ускорителей ускоряет редукции через выделенные древовидные сети редукции и регистры перестановки внутри варпа, сокращая задержку завершения с последовательных шагов до параллельных стадий.
В реальных нагрузках эти примитивы выполняются составными стадиями. Например, одна голова внимания трансформера с длиной последовательности и размером батча рассылает векторы запросов широковещанием, собирает пары «ключ — значение» вдоль измерения последовательности и редуцирует получающиеся скалярные произведения через знаменатель softmax. Когда размерности модели превышают пределы памяти одного ускорителя, коллективные коммуникации по каналам масштабирования вверх (например, NVLink или оптические структуры TPU) определяют сквозную пропускную способность, и примитивы перемещения данных становятся главным архитектурным ограничением.
Влияние на проектирование системы
Вычислительные примитивы, примитивы доступа к памяти и примитивы перемещения данных определяют распределение кремниевой площади и устройство компиляторов. Разработчики аппаратуры выделяют площадь кристалла под специализированные блоки только тогда, когда лежащий в основе математический примитив доминирует в типичных нагрузках.
Распространенность плотного матричного умножения и свертки побудила создать специализированные матричные движки, такие как TPU Google31 и тензорные ядра GPU (Tensor Cores). В главе «Аппаратное ускорение» разобрано, как эти блоки исполнения отображают алгоритмические примитивы непосредственно на кремниевые тракты данных, обменивая гибкость универсальных инструкций на плотность операций умножения с накоплением.
Архитектуры памяти аналогично разделились, чтобы учитывать различающиеся профили примитивов. Поддержка предсказуемого потокового доступа наряду со случайным или шаговым доступом привела к появлению высокоскоростной памяти (HBM), в которой кристаллы DRAM укладываются вертикально и дают пропускную способность 2–3 ТБ/с — более чем на порядок выше стандартных каналов DDR. На кристалле ускорители предоставляют иерархии SRAM объемом в несколько мегабайт и явно управляемую скретч-память (scratchpad), давая компиляторам предсказуемый контроль над промежуточным размещением данных рабочего набора.
Архитектуры межсоединений отражают примитивы перемещения данных. Чтобы выдерживать большие объемы широковещания, сбора и редукций, которые требуют модели на нескольких ускорителях, современные платформы включают высокоскоростные двухточечные связи и специализированные маршрутизаторы сети на кристалле, оптимизированные для коллективных шаблонов коммуникации.
«Совместное проектирование примитивов и аппаратуры» сводит это совместное проектирование аппаратуры и программ: каждому вычислительному примитиву, примитиву памяти и коммуникационному примитиву сопоставлены выделенное аппаратное ускорение, оптимизация компилятора и главное физическое узкое место.
| Примитив | Влияние на аппаратуру | Программная оптимизация | Ключевые трудности |
|---|---|---|---|
| Матричное умножение | Тензорные ядра | Батчирование, библиотеки GEMM | Распараллеливание, точность |
| Скользящее окно | Специализированные тракты данных | Оптимизация раскладки данных | Обработка шага |
| Динамические вычисления | Гибкая маршрутизация | Исполнение динамических графов | Балансировка нагрузки |
| Последовательный доступ | Пакетный режим DRAM | Непрерывное выделение | Задержка доступа |
| Случайный доступ | Большие кеши | Планирование с учетом памяти | Промахи кеша |
| Широковещание | Специализированные межсоединения | Слияние операций | Пропускная способность |
| Сбор/рассеивание | Высокоскоростная память | Распределение работы | Балансировка нагрузки |
Совместное проектирование примитивов и аппаратуры: эффективные системы машинного обучения требуют тесной интеграции алгоритмических примитивов и лежащей в основе аппаратуры. Распространенные примитивы сопоставляются с конкретными аппаратными ускорениями и программными оптимизациями, и каждый из них создает отдельные трудности реализации. Специализированная аппаратура, такая как тензорные ядра, решает вычислительные задачи матричного умножения и скользящих окон, а программные приемы, такие как батчирование и исполнение динамических графов, дополнительно повышают производительность.
Эти отображения примитивов определяют энергопотребление системы. Как показано в следующем разборе, физическая энергетическая стоимость переноса операнда через корпус памяти превышает энергию арифметики на порядки.
Перенос 32-битного значения из DRAM стоит гораздо больше энергии, чем одно умножение FP32.
Большие пакетные GEMM в MLP достигают высокой арифметической интенсивности, амортизируя загрузку весов на многие входы. Напротив, вывод MLP с малым батчем показывает минимальное переиспользование и большую часть энергии тратит на перемещение весов из внешней DRAM. Эталонное умножение FP32 стоит примерно 3,7 пДж на FLOP, тогда как извлечение одного 32-битного операнда из DRAM — 640 пДж (Horowitz, 2014); разница в энергии составляет 173 раза. Хотя полная энергия нагрузки зависит от числа операций и коэффициентов переиспользования, операции с низким переиспользованием по-прежнему подавляющим образом определяются энергией пересылок DRAM. Эта физическая реальность заставляет архитекторов ускорителей выделять большие пулы SRAM на кристалле и применять корпуса уровня пластины или с несколькими кристаллами, чтобы удерживать активные рабочие наборы на кристалле.
Операции свертки снижают энергию на выход, переиспользуя веса фильтра по пространственным позициям. Однако реальную энергию определяют детали реализации. Понижение im2col упрощает исполнение, обращаясь к библиотекам GEMM производителей, но полная материализация развернутого тензора может увеличить временный трафик памяти до раз для фильтров с шагом 1. Алгоритмы прямой свертки и слитые ядра скользящего окна обходятся без этого промежуточного буфера, существенно снижая трафик памяти и рассеиваемую корпусом энергию.
Последовательная обработка в RNN демонстрирует временное переиспользование весов между шагами последовательности. Хранение компактного скрытого состояния целиком в SRAM на кристалле исключает повторные обращения к DRAM для рекуррентных активаций. Однако строгие последовательные зависимости не позволяют распараллелить вычисления по шагам времени, из-за чего блоки исполнения простаивают, а энергия на токен растет.
В трансформерах многоголовое внимание создает большие накладные расходы на перемещение данных. В стандартных неслитых реализациях материализация полной матрицы внимания дает квадратичное число циклов чтения и записи в память (узкое место, разобранное в «Системных последствиях» внимания). Блочные реализации вроде FlashAttention снимают эту нагрузку, сливая вычисление softmax в SRAM на кристалле и исключая промежуточные обращения к DRAM, а энергетический профиль внимания приближается к профилю матричных умножений, ограниченных вычислениями.
Архитекторы аппаратуры сталкиваются с фундаментальными инженерными компромиссами при оптимизации под эти примитивы. Выделение кремния под широкие плотные систолические массивы максимизирует пропускную способность и энергоэффективность для регулярных GEMM, но оставляет функциональные блоки недогруженными при разреженных выборках или динамической маршрутизации. И наоборот, расширение SRAM на кристалле для хранения огромных рабочих наборов трансформера увеличивает площадь кристалла и статическую мощность утечки, которые плотные регулярные нагрузки не требуют.
Профилирование вычислительных примитивов задает операционные границы каждого семейства архитектур. В промышленной системной инженерии задача смещается от анализа отдельных операторов к выбору и выделению ресурсов для полной архитектуры при жестких эксплуатационных ограничениях — баланс точности предсказаний против бюджетов платформы, установленных в главе «Системы машинного обучения», и требований жизненного цикла, описанных в главе «Рабочий процесс машинного обучения».
Схема выбора архитектуры
Датчик мониторинга диких животных должен классифицировать снимки фотоловушек в строгом бюджете мощности в милливатты, а промышленный сервис рекомендаций — извлекать эмбеддинги терабайтного масштаба в пределах бюджета задержки хвоста меньше миллисекунды. Такие ограничения развертывания сразу исключают архитектуры, которые выглядят конкурентоспособными на эталонных тестах предсказаний без ограничений. Каждое архитектурное семейство воплощает свои физические предположения о структуре данных и вычислениях: MLP допускают произвольные попарные взаимодействия признаков, CNN используют локальную пространственную корреляцию через переиспользование весов скользящего окна, RNN навязывают строгую последовательную рекуррентность, а трансформеры вычисляют внимание «все со всеми» по контексту токенов. Выбор архитектуры — это дисциплина согласования этих вычислительных топологий с физическими бюджетами развертывания до оптимизации ядер или настройки гиперпараметров.
В таксономии D·A·M выбор архитектуры задает вычислительный граф алгоритма (), который связывает инварианты входных данных () с физическим аппаратным исполнением (). Структурное несоответствие на этой границе невозможно исправить последующими оптимизациями компилятора или настройкой ядер. Схема выбора оценивает кандидатные модели по трем связанным измерениям: статистической структуре входных данных (), алгоритмической сложности и арифметической интенсивности модели () и границам исполнения аппаратуры — емкости памяти, пропускной способности памяти, вычислительной пропускной способности и тепловому бюджету (), — которые заданы в главах «Системы машинного обучения» и «Рабочий процесс машинного обучения». Та же логика выбора управляет отбором данных (глава «Отбор данных») и развертыванием кластера (глава «MLOps»).
Сопоставление данных и архитектуры
Систематический выбор архитектуры начинается с сопоставления данных и архитектуры: согласования структурных симметрий и инвариантов входных данных с шаблонами вычислений и доступа к памяти семейства операторов. Архитектурные семейства, введенные в «Архитектурных принципах», задают эту основу: MLP — для табличных записей с произвольными взаимодействиями признаков, CNN — для данных на сетке с локальной пространственной корреляцией, RNN — для потоковых входов с временной рекуррентностью, трансформеры — для реляционных контекстов, где токены имеют произвольные попарные зависимости, а разреженные архитектуры эмбеддингов вроде DLRM — для потоков категориальных рекомендаций высокой кардинальности.
Такое согласование отражает фундаментальные компромиссы памяти и вычислений. Когда архитектура кодирует инварианты данных прямо в свои вычислительные операторы — например, эквивариантность относительно сдвига через переиспользование сверточных весов, — ей не нужно эмпирически выучивать эти симметрии. Архитектура, которая соответствует симметриям данных, минимизирует число параметров, удерживает промежуточные активации в SRAM на кристалле и максимизирует арифметическую интенсивность. Напротив, развертывание архитектуры без подходящих индуктивных смещений вынуждает модель выучивать структуру через избыточное количество параметров, умножая трафик внешней DRAM и раздувая сложность выборки при обучении.
В промышленных системах эти структурные компромиссы определяют разбиение нагрузки по иерархии памяти:
- MLP обрабатывают плотные табличные признаки (например, телеметрию датчиков или актуарные таблицы), где размерности признаков не имеют геометрических метрик расстояния, что дает операции «матрица — вектор» с детерминированной задержкой.
- CNN обрабатывают пространственные сетки (например, изображения и спектрограммы), где локальные ядра свертки переиспользуют веса фильтров по карте признаков, максимизируя переиспользование регистров и кеша.
- RNN обрабатывают последовательные потоки с ограниченным временным состоянием, удерживая компактный рабочий набор в SRAM ценой последовательной пошаговой оценки.
- Трансформеры обрабатывают последовательности токенов и реляционные графы (Vaswani et al., 2017; Devlin et al., 2019; Wei et al., 2022) через динамическое внимание «все со всеми», что позволяет выразительное взаимодействие между последовательностями ценой квадратичного вычисления оценок и интенсивного трафика памяти активаций.
- Разреженные архитектуры эмбеддингов (DLRM) отделяют таблицы эмбеддингов, ограниченные емкостью памяти, от многослойных перцептронов, ограниченных вычислениями, направляя миллиарды разреженных категориальных идентификаторов через DRAM большой емкости до плотного взаимодействия признаков.
Вычислительная сложность
Согласование данных и архитектуры устанавливает функциональное соответствие, но физическую осуществимость определяет асимптотическое масштабирование при аппаратных ограничениях. Архитектура, чьи вычислительные требования или рабочий набор памяти опережают физические пределы ускорителя, нарушает соглашения об уровне обслуживания по задержке (SLA) или превышает емкость памяти устройства.
Как сведено в «Сложности доступа к памяти» и «Сравнении вычислительной сложности», каждое архитектурное семейство задает характерный профиль арифметической интенсивности, масштабирования рабочего набора и локальности доступа к памяти. Оценка этих профилей определяет главное аппаратное узкое место — пропускную способность памяти, вычислительную пропускную способность или последовательную задержку, — которое управляет промышленным развертыванием.
Масштабируемость и промышленные соображения
Промышленное развертывание оценивает архитектуру по строгим соглашениям об уровне обслуживания: задержка хвоста, емкость памяти, энергия на запрос и накладные расходы на восстановление из контрольных точек. Эти эксплуатационные показатели — прямые физические следствия структурного проекта: плотной связности, пространственной локальности, последовательной зависимости или внимания «все со всеми». Структурные решения, которые определяют представительную емкость, одновременно управляют параллелизмом исполнения, закреплением данных в кеше и потреблением пропускной способности памяти.
MLP и CNN работают в более простом эксплуатационном режиме, поскольку вывод не хранит состояния между входными образцами, что позволяет линейно масштабировать пропускную способность за счет параллелизма данных. Однако их профили доступа к памяти заметно различаются. При размере батча вывод MLP строго ограничен пропускной способностью памяти: потоковая передача больших матриц весов из внешней DRAM ради одного произведения матрицы на вектор дает арифметическую интенсивность около 1 FLOP/байт, хотя задержка остается очень детерминированной. Напротив, исполнение CNN достигает высокого переиспользования весов по пространственным измерениям, но память промежуточных активаций растет с разрешением изображения () и доминирует в пиковой емкости SRAM и DRAM при выводе высокого разрешения и при обратных проходах обучения.
RNN и трансформеры создают трудные эксплуатационные режимы по противоположным физическим причинам. RNN сохраняет компактное рекуррентное скрытое состояние, но соотношение рекурренции сериализует исполнение по временному измерению. Закон Амдала диктует, что добавление параллельных блоков исполнения не может сократить задержку этого критического пути; кроме того, исполнение с состоянием осложняет распределенное сохранение контрольных точек и восстановление конвейера. Трансформеры, напротив, устраняют последовательную рекуррентность, распараллеливая проекции токенов по всему измерению последовательности, чтобы насытить систолические массивы и тензорные ядра. Однако стандартное самовнимание дает квадратичный объем памяти и вычислений относительно длины последовательности («Системные последствия» внимания): материализация матрицы быстро исчерпывает HBM и ограничивает максимальный размер батча обслуживания. Малые батчи обслуживания недогружают матричные блоки исполнения, тогда как большие батчи требуют разбиения памяти по нескольким устройствам. В главе «Обучение моделей» эти распределенные стратегии исполнения формализованы через параллелизм данных, тензоров, конвейера и последовательности.
Отображение на аппаратуру и стратегии оптимизации
Отображение на аппаратуру сопоставляет алгебраическую структуру оператора с физическим трактом исполнения. Плотные матричные операции в MLP напрямую отображаются на систолические массивы и тензорные ядра GPU (глава «Аппаратное ускорение» подробно описывает эти кремниевые реализации). Такие нагрузки выигрывают от трех оптимизаций аппаратного уровня: иерархического тайлинга матриц (например, тайлы для кеша L1, для кеша L2 и микротайлы для тензорных ядер), чтобы обеспечить закрепление данных в регистрах и кешах; исполнения смешанной точности (например, арифметики FP16 или BF16 с накоплением в FP32), чтобы удвоить арифметическую пропускную способность и вдвое сократить трафик памяти; и слияния операторов, которое устраняет промежуточные обращения к DRAM, выполняя поэлементные активации и прибавления смещений целиком в регистровых файлах. В главе «Фреймворки машинного обучения» рассмотрено, как компиляторы генерируют такие слитые запуски ядер на конкретных ускорителях.
CNN выигрывают от специализированных алгоритмов свертки и оптимизаций раскладки данных, которые заметно отличаются от плотных матричных операций. Преобразования im2col сводят свертки к матричному умножению, но могут умножать временное хранилище и трафик памяти — до раз для полностью материализованных фильтров с шагом 1 вдали от границ. Алгоритмы Винограда32 сокращают число умножений в 2,25 раза для сверток , но могут усиливать численную ошибку. Прямая свертка с пользовательскими ядрами позволяет избежать материализации im2col, но требует настройки под конкретную архитектуру.
Поскольку последовательную рекуррентную зависимость нельзя сократить добавлением вычислительной аппаратуры («Системные последствия» RNN), стратегии оптимизации сосредоточены на минимизации накладных расходов исполнения вдоль критического пути. Развертывание циклов устраняет инструкции ветвления и накладные расходы управления на каждом шаге ценой давления на кеш инструкций и хранения активаций. Векторизация состояний объединяет несколько независимых последовательностей по полосам векторных инструкций SIMD, амортизируя стоимость доступа к памяти по последовательностям, но не снижая задержку одной последовательности. Волновое распараллеливание перекрывает независимые прямой и обратный проходы в двунаправленных моделях, повышая насыщенность блоков исполнения там, где это позволяет топология модели. Эти приемы амортизируют накладные расходы исполнения, но оставляют фундаментальное ограничение сериализации нетронутым.
Самовнимание требует оптимизаций иерархии памяти, которые смягчают квадратичное промежуточное состояние. Поскольку вычисление и хранение сырых матриц внимания создает узкие места пропускной способности памяти, доминирующая стратегия оптимизации разбивает вычисление на тайлы внутри быстрой SRAM на кристалле. В разделе «FlashAttention: оптимизация внимания с учетом ввода-вывода» главы «Обучение моделей» FlashAttention33 рассматривается как учитывающий ввод-вывод метод тайлинга, тогда как структурированное разреженное внимание снижает арифметическую сложность, ограничивая внимание фиксированными рецептивными шаблонами.
Эти аппаратные компромиссы задают эксплуатационные границы каждой архитектуры: MLP обеспечивают детерминированное исполнение с низкой задержкой для непространственных векторов признаков; CNN максимизируют переиспользование данных по пространственным сеткам; RNN поддерживают минимальный объем состояния для потоковых последовательностей; а трансформеры обменивают квадратичную пропускную способность памяти на реляционную выразительность. Чтобы перевести эти аппаратные инварианты в промышленное развертывание, нужен структурированный протокол решений.
Схема решений
Инженерные команды часто выбирают архитектуры по популярности, а не по физическим ограничениям: развертывают избыточно параметризованные трансформеры там, где достаточно линейных моделей или легковесных CNN, либо выбирают модели, нарушающие бюджеты задержки вывода. Систематический выбор заменяет эвристики упорядоченным протоколом удовлетворения ограничений, опирающимся на таксономию D·A·M.
Блок-схема решений в «Схеме выбора архитектуры» начинается с определения характеристик входных данных, направляет к кандидатным плотным архитектурам (трансформерам, RNN, CNN или MLP) и оценивает каждого кандидата по физическим аппаратным пределам. Нагрузки рекомендаций высокой кардинальности лежат вне этой плотной блок-схемы: их направляют к семейству разреженных эмбеддингов/DLRM («Разреженные архитектуры»), прежде чем применить те же проверки памяти, вычислений, скорости, точности и развертывания. Если какое-либо ограничение не выполняется, путь решения возвращается к уменьшению емкости модели или к смене архитектурного семейства.
Схема выбора архитектуры: систематическая блок-схема выбора плотных нейросетевых архитектур по характеристикам данных и ограничениям развертывания. Процесс начинается с определения типа данных (текст, последовательности, изображения, табличные данные), чтобы выбрать начальных кандидатов (трансформеры, RNN, CNN, MLP), и затем итеративно оценивает бюджет памяти, вычислительную стоимость, скорость вывода, целевую точность и совместимость с аппаратурой. Нагрузки рекомендаций высокой кардинальности обрабатываются отдельно семейством разреженных эмбеддингов (DLRM) в разделе о разреженных архитектурах и затем возвращаются к тем же проверкам ограничений.
Когда ограничения требуют уменьшения модели, методы сжатия модели из главы «Сжатие моделей» дают систематические подходы к снижению памяти, вычислений и задержки с сохранением точности. Схема выполняется в три упорядоченных этапа:
- Идентификация симметрии данных (): определите структурные симметрии и инвариантности входных данных. Пространственная локальность направляет кандидатов к CNN; временная структура последовательности — к RNN; неограниченная зависимость между токенами — к трансформерам; табличные признаки без пространственной геометрии — к MLP; а категориальные идентификаторы высокой кардинальности — к таблицам разреженных эмбеддингов.
- Последовательная фильтрация по физическим ограничениям (): отсейте кандидатные модели по аппаратным бюджетам: статическое хранение параметров во флеш-памяти или DRAM, пиковый объем динамических активаций в SRAM/HBM, арифметическую интенсивность относительно модели Roofline аппаратуры и крайние сроки задержки хвоста. Нарушение требует уменьшения ширины или глубины модели, квантования и сжатия (глава «Сжатие моделей») либо перехода к семейству архитектур с меньшими накладными расходами.
- Эмпирическая проверка емкости и развертывания: убедитесь, что емкость кандидата обеспечивает целевую точность на репрезентативных распределениях оценки. Если точность предсказаний недостаточна, увеличьте емкость модели и заново оцените физические аппаратные ограничения. Если целевой ускоритель не способен поддерживать требуемую арифметическую пропускную способность или пропускную способность памяти, выберите альтернативную архитектуру, а не полагайтесь на незначительные корректировки гиперпараметров.
Иерархия индуктивных смещений
Схема решений работает на непрерывной шкале структурных ограничений: иерархии индуктивных смещений, введенной в «Архитектурных принципах». В теории машинного обучения индуктивное смещение охватывает предположения, которые модель использует для обобщения за пределы наблюдаемых обучающих примеров. В системной инженерии индуктивное смещение — главный рычаг эффективности: сужение пространства гипотез ограничивает объем параметров, задает границы рабочих наборов промежуточных активаций и открывает иерархиям памяти структурированные шаблоны переиспользования данных.
Архитектурные семейства образуют иерархию убывающих структурных ограничений:
- CNN обладают самым сильным архитектурным смещением благодаря локальной связности, разделению весов и эквивариантности относительно сдвига. Эти ограничения резко сокращают объем параметров и позволяют агрессивно размещать тайлы в регистрах и кеше, но ограничивают модель входами на сетке.
- RNN задают умеренное структурное смещение через временную рекуррентность и общие матрицы перехода, ограничивая объем памяти времени выполнения для произвольных длин последовательностей ценой сериализации исполнения.
- Трансформеры обладают адаптивным индуктивным смещением: вместо фиксированных пространственных или временных топологий они используют динамическое внимание на основе содержимого для всех пар токенов. Такая архитектурная гибкость позволяет обобщать на разные модальности данных, но переносит вычислительную нагрузку на квадратичные матрицы внимания и интенсивное использование пропускной способности памяти.
- MLP сохраняют минимальное индуктивное смещение, не предполагая топологических связей между входными признаками. Без структурных ограничений выучивание пространственных или временных шаблонов требует огромного избытка параметров и чрезмерного объема обучающих данных, что дает низкую арифметическую интенсивность и слабую локальность кеша.
Многие глубокие архитектуры реализуют иерархическое обучение представлений, но разными механизмами операторов: CNN — через постепенное расширение рецептивного поля («CNN»), RNN — через эволюцию скрытого состояния («RNN»), а трансформеры — через многоголовое внимание («Внимание»). Эта иерархическая организация отражает фундаментальный физический принцип: сложные представления складываются из более простых примитивов. В системной инженерии такая композиция напрямую определяет эффективность исполнения. Конвейеры агрегации признаков должны составлять примитивы, не вызывая избыточных обращений к внешней DRAM. Промежуточное размещение в памяти должно соответствовать иерархиям представлений, чтобы максимизировать переиспользование SRAM на кристалле. Кроме того, параллельная диспетчеризация ядер должна подчиняться иерархическим зависимостям между слоями, поддерживая загрузку блоков исполнения на прямом и обратном проходах.
Выбор архитектуры на практике
Развертывание мониторинга диких животных в реальном времени иллюстрирует взаимодействие структуры данных, емкости модели и бюджетов физической аппаратуры. Прежде чем остановиться на кандидатной архитектуре, расчет потолка пропускной способности показывает, может ли целевая аппаратура поддерживать требуемую скорость обработки кадров.
Потолок пропускной способности
Задача: приложению реального времени нужно обрабатывать видео со скоростью 30 кадров в секунду (FPS) с помощью ResNet-50. Какая устойчивая вычислительная пропускная способность требуется?
Расчет:
- Стоимость модели: ResNet-50 требует примерно 8,2 GFLOP на изображение .
- Частота кадров: требуется 30 FPS.
- Устойчивая пропускная способность: 30 FPS 8,2 GFLOP = 246 GFLOP/s.
- Эффективная пропускная способность: пиковые 10 TFLOP/s 50–60 процентов загрузки = 5 TFLOP/s–6 TFLOP/s.
- Запас ResNet-50: 5 TFLOP/s 246 GFLOP/s = в 20,3 раза.
- Проверка модели детекции: 30 FPS 100 GFLOP = 3 TFLOP/s, что оставляет запас в 1,7 раза при нижней оценке эффективной пропускной способности.
Системный вывод: GPU среднего класса с теоретическим пиком 10 TFLOP/s в этом плановом сценарии достигает загрузки примерно 50–60 процентов, давая 5 TFLOP/s–6 TFLOP/s эффективной пропускной способности. Для ResNet-50 при 30 FPS у системы запас в 20,3 раза. Переход к модели детекции объектов со 100 GFLOP на кадр, однако, требует устойчивых 3 TFLOP/s и оставляет запас лишь в 1,7 раза. Ограничения размера батча или многопоточная обработка быстро приближают систему к потолку вычислений. ResNet-50 ограничена вычислениями, но запас зависит от ускорителя и достигнутой загрузки.
Потолок пропускной способности переводит абстрактное вычислительное требование в конкретный процент загрузки аппаратуры. Реальное развертывание добавляет физические ограничения, которые один лишь потолок не учитывает.
Разобранный пример: мониторинг диких животных в реальном времени
Задача проектирования — встроенная система машинного обучения, которая классифицирует виды диких животных по снимкам фотоловушек в изолированном национальном парке. Развертывание должно выполнять вывод полностью на устройстве без сетевого соединения, работать шесть месяцев от батареи, подзаряжаемой от солнечных панелей, и достигать точности 90 процентов по 50 целевым видам животных. Процесс выбора ведут пять этапов оценки: характеризация данных, профилирование ограничений развертывания, оценка кандидатных архитектур, проверка аппаратных бюджетов и оценка операционных рисков.
Входные данные — кадры фотоловушек (исходное разрешение сенсора , для вывода уменьшено до ). Классификация видов опирается на визуальные признаки, которые обладают тремя инвариантными свойствами: пространственной локальностью (различительные шаблоны, такие как текстура шерсти или форма ушей, занимают ограниченные окрестности пикселей), эквивариантностью относительно сдвига (идентичность животного не зависит от его положения в кадре) и иерархической композицией (низкоуровневые границы складываются в текстуры, анатомические части и целые организмы). Эти инварианты прямо указывают на CNN, у которой разделение весов локальных ядер изначально кодирует эти геометрические симметрии, устраняя взрыв параметров, который понес бы неограниченный MLP.
Анализ ограничений переводит условия развертывания в жесткие аппаратные границы. «Ограничения мониторинга диких животных» перечисляет эти физические ограничения вместе с архитектурными требованиями, которые каждое из них накладывает:
| Ограничение | Требование | Следствие |
|---|---|---|
| Связь | Нет (офлайн) | Весь вывод должен выполняться на устройстве |
| Мощность | ~2 Вт в среднем (солнечные панели + батарея) | Исключает GPU; нужен маломощный MCU или периферийный NPU |
| Задержка | <500 мс на обнаружение | Допускает батч 1, без потоковой обработки в реальном времени |
| Память | 512 МБ ОЗУ, 2 ГБ хранилища | Модель, активации и буферы выполнения должны помещаться локально |
| Точность | 90%+ по 50 видам | Требует достаточной емкости модели |
Ограничения мониторинга диких животных: пять ограничений развертывания и их последствия для сценария с фотоловушкой. Отсутствие связи исключает вывод только в облаке, а требования к мощности, задержке, памяти и точности необходимо проверить на целевом устройстве.
После того как физические ограничения определены, кандидатные архитектуры сравниваются с опорными базовыми моделями:
- ResNet-50 (25,6 млн параметров, 8,2 GFLOP): вычисления и тепловой след недопустимы для бюджета 2 Вт. При 102,4 МБ в FP32 одни только веса исчерпывают большую часть выделенных 100 МБ еще до учета буферов активаций и накладных расходов ОС.
- MobileNetV1 (4,2 млн параметров, 1138 MFLOP): приемлемые арифметическая интенсивность и объем. Хранение весов в INT8 сокращает объем модели до 4,2 МБ (16,8 МБ в FP32), а факторизованные раздельные по глубине свертки резко сокращают число арифметических операций.
- KWS DS-CNN (200 тыс. параметров, 20 MFLOP): недостаточная емкость. Рассчитанный на распознавание ключевых слов из 12 классов, его бюджет параметров не позволяет разделить 50 визуальных классов видов.
Хотя MobileNetV1 показывает жизнеспособность раздельных по глубине сверток, MobileNetV2 достигает большей эффективности по параметрам и лучшей локальности памяти благодаря инвертированным остаточным блокам с линейными bottleneck-слоями. При коэффициенте ширины 0,75× модель содержит около 2,6 млн параметров (10,4 МБ в FP32, 2,6 МБ с весами INT8) и требует около 418 MFLOP при входном разрешении . Эта модель без труда помещается в выделенный бюджет памяти, сохраняя представительную емкость для 50 целевых видов.
Аппаратная проверка сверяет выбранную модель с физическими бюджетами платформы. Объем памяти сверяется с доступной ОЗУ устройства:
Вычислительный бюджет проверяется на целевой системе на кристалле (SoC) — ARM Cortex-A53 с частотой 1,2 ГГц и блоком SIMD NEON (около 2 GOPS INT8):
Активная мощность — последний физический барьер. При оценочной активной потребляемой мощности вывода около 200 мВт за 209 мс каждая классификация расходует 41,8 мДж. При частоте срабатываний по триггеру 100 выводов в сутки выполнение модели расходует 4,2 Дж в сутки. Этого хватает с большим запасом батареи на захват изображения сенсором, ток покоя в спящем режиме, журналирование в энергонезависимой памяти и управление периферией.
Пятый этап оценивает эксплуатационные риски в полевых условиях. «Риски развертывания фотоловушек» сопоставляет основные режимы отказа по точности, тепловому режиму и охвату видов с соответствующими системными мерами смягчения:
| Риск | Смягчение |
|---|---|
| Точность 90% не достигнута | Обучение на расширенном наборе данных; при недостатке MobileNet рассмотреть EfficientNet-Lite |
| Тепловое дросселирование в корпусе | Пассивный радиатор; снижение частоты вывода при высокой температуре |
| Новые виды, добавленные после развертывания | Расширить или переобучить выходной слой и предусмотреть механизм обновления по воздуху (OTA) |
Риски развертывания фотоловушек: основные риски по точности, тепловому режиму и охвату видов для развертывания MobileNetV2 с выбранной для каждого из них мерой смягчения.
В итоге развертывание использует MobileNetV2 (коэффициент ширины 0,75×), квантованную до INT8, на SoC ARM Cortex-A53 с 512 МБ ОЗУ. Эта конфигурация укладывается в бюджеты активных вычислений, объема памяти и мощности: каждый кадр обрабатывается примерно за 209 мс, при этом сохраняется значительный запас памяти для системного ПО. Окончательная полевая квалификация требует измерить точность классификации на целевых распределениях снимков камер и проверить долговечность батареи при сезонных колебаниях температуры.
Этот разбор переводит абстрактные архитектурные принципы в конкретное решение о размерах модели. Однако при промышленном выборе архитектуры часто возникают контринтуитивные компромиссы: модели с меньшим числом FLOP могут застревать на аппаратуре, ограниченной пропускной способностью, выразительные архитектуры могут деградировать на наборах данных без подходящей структуры, а лабораторные прототипы могут не выдержать иерархий памяти при развертывании. Привязка этих режимов отказа к аппаратной реальности выявляет главные заблуждения и ловушки системного проектирования.
Заблуждения и ловушки
Выбор архитектуры — это системное решение, а не выбор по таблице лидеров. Типичные ошибки этого раздела возникают, когда команды рассматривают архитектурные семейства как взаимозаменяемые инструменты точности, игнорируя индуктивное смещение, трафик памяти, отображение на аппаратуру и состояние развертывания.
Заблуждение и ловушка
Заблуждение: более сложные архитектуры всегда работают лучше более простых.
Инженеры часто полагают, что трансформеры превосходят более простые архитектуры во всех задачах. В промышленной практике сложность архитектуры должна соответствовать сложности задачи: алгоритм должен подходить и к структуре данных, и к стоимости машины. Сравнение на MNIST в разделе «Разрыв обучаемости» показывает, что пример CNN использует в 47 раз меньше параметров, чем пример MLP, потому что его смещение локальности соответствует структуре изображений. Точность, стоимость обучения и задержку вывода все равно необходимо измерять для конкретной реализации и задачи.
Заблуждение и ловушка
Ловушка: выбор архитектуры только по метрикам точности без анализа вычислительных требований.
Практики выбирают архитектуры по статьям, где приводится точность на верхнем уровне, игнорируя вычислительные последствия. RNN создают последовательный критический путь, который ограничивает параллелизм, а трансформеры сталкиваются с квадратичным вычислением плотных оценок и, в наивных реализациях, с квадратичным хранением оценок. Длина последовательности 2 048 поэтому требует в 16 раз больше памяти под материализованные оценки, чем длина 512. Системы, которые игнорируют эти характеристики, могут не попасть в целевые показатели задержки, превысить бюджеты памяти и показать гораздо меньшую загрузку аппаратуры, чем ожидалось.
Заблуждение и ловушка
Заблуждение: у архитектуры одно доминирующее узкое место в обучении и выводе.
Один и тот же граф вычислений может попадать в разные системные режимы. Обучение трансформера и предзаполнение обрабатывают многие позиции вместе и могут упираться в плотные вычисления внимания; авторегрессивное декодирование с малым батчем многократно передает веса и состояние KV-кеша и может упираться в пропускную способность памяти. Батчирование, длина последовательности, точность и раскладка кеша могут сместить эту границу. Поэтому тест в одном режиме не может определить узкое место другого; измеряйте каждый режим по железному закону.
Заблуждение и ловушка
Ловушка: сочетание архитектурных шаблонов без анализа эффектов взаимодействия на уровне системы.
Инженеры добавляют внимание в CNN или свертки в трансформеры, ожидая аддитивного выигрыша. Каждый шаблон создает свои характеристики доступа к памяти: CNN используют пространственную локальность через скользящие окна, а плотное внимание вводит вычисление оценок «все со всеми». Их сочетание может увеличить промежуточный трафик и нарушить локальность, поэтому пропускную способность гибрида нельзя вывести, суммируя преимущества компонентов. Добавление рекуррентных связей в трансформеры точно так же вновь вводит последовательные зависимости. Успешные гибриды требуют профилирования доступа к памяти и поведения кеша до объединения шаблонов.
Заблуждение и ловушка
Заблуждение: архитектура, успешная на аппаратуре для обучения, напрямую переносится на аппаратуру развертывания.
Команды проектируют под высокопроизводительные кластеры GPU, а затем обнаруживают сбои развертывания на целевой аппаратуре. Архитектура, использующая 8 GPU A100 (всего 640 ГБ памяти), не может быть развернута без изменений на типичном периферийном узле, таком как NVIDIA Jetson Orin NX (16 ГБ системной памяти). Как подчеркивается в разделе «Схема решений», выбор архитектуры должен анализировать весь стек системы, поскольку бюджеты хранения, задержки и мощности различаются для разных целевых платформ.
Заблуждение и ловушка
Ловушка: игнорирование роста KV-кеша при оценке стоимости обслуживания трансформера.
Команды планируют развертывание трансформера, опираясь только на память весов модели, и упускают из виду кеш ключей и значений (KV-кеш), который используется при авторегрессивной генерации (Pope et al., 2023; Kwon et al., 2023). Кеш растет как , где — число одновременных последовательностей, — число слоев, коэффициент 2 соответствует ключам и значениям, — число голов, — длина последовательности, а — размерность головы. При длинных контекстах или высокой параллельности эти накладные расходы могут стать связывающим ограничением обслуживания. «Авторегрессивное декодирование с малым батчем» пошагово разбирает пример главы с 32 слоями и 32 головами. При головах размерности 128, последовательностях по 2 048 токенов и хранении в FP16 каждый одновременный запрос занимает около 1 ГБ KV-кеша. При 2–4 пользователях один кеш занимает 2–4 ГБ еще до накладных расходов аллокатора, активаций и рабочей памяти. Эти значения не исчерпывают устройство на 80 ГБ, но съедают часть запаса после весов и растут линейно с контекстом и параллельностью. Поэтому планирование емкости должно закладывать веса, кеш и буферы выполнения вместе, а затем сокращать параллельность, контекст или объем кеша либо добавлять память, когда суммарный объем приближается к памяти устройства.
Итоги
Архитектура — это инфраструктура. Выбор между MLP, CNN, RNN, трансформерами и рекомендательными моделями (DLRM) фиксирует физические члены в записи железного закона машинного обучения (). Разбор каждой архитектуры через четырехчастный взгляд (потребности в обработке паттернов, алгоритмическая структура, вычислительное отображение и системные последствия) показывает, что математическое индуктивное смещение архитектуры сильно определяет, какой член железного закона ограничивает производительность аппаратуры.
Семейства архитектур и пять маячных моделей, представленных в начале главы, напрямую отображаются на эти физические границы. Пространственное переиспользование весов ResNet-50 повышает арифметическую интенсивность (), переводя исполнение в режим, ограниченный вычислениями (). Авторегрессивная генерация GPT-2 с малым батчем имеет низкую арифметическую интенсивность и привязывает исполнение к пропускной способности памяти (). Временные рекурренции RNN создают непараллелизуемый последовательный критический путь, который поднимает нижнюю границу задержки (). Разреженные эмбеддинги DLRM упираются в стену емкости за пределами железного закона: их таблицы могут превышать память ускорителя раньше, чем какой-либо член исполнения станет первым тестом осуществимости. MobileNetV2 и KWS показывают, что малое число FLOP не гарантирует пропускной способности, если форма операций не насыщает функциональные блоки аппаратуры.
Архитектура — это инфраструктура
- Индуктивное смещение — объединяющее понятие: каждая архитектура кодирует структурные предположения, например локальность для CNN, последовательность для RNN и глобальный контекст для трансформеров. Эти смещения обменивают общность на эффективность выборки и определяют, какие задачи архитектура может решать эффективно.
- Арифметическая интенсивность помогает определить узкое место: сравнение арифметической интенсивности нагрузки с балансом модели Roofline целевой аппаратуры помогает определить, вероятно ли ограничение вычислениями или пропускной способностью памяти.
- Квадратичные затраты — постоянные ограничения: плотное внимание трансформера вычисляет взаимодействий оценок. Наивные реализации также используют квадратичное хранение оценок; точное блочное внимание устраняет эту стоимость хранения, но не плотное вычисление.
- Маячные модели выделяют разные узкие места: ResNet-50 (вычисления), GPT-2 (пропускная способность), DLRM (емкость), MobileNetV2 (задержка), KWS (энергия). Эти архетипы диагностируют, какое физическое ограничение доминирует в данной системе.
- Глубина выигрывает от архитектурной поддержки: остаточные связи и нормализация улучшают оптимизацию в очень глубоких сетях, а не служат универсальным условием сверх фиксированной глубины. Эти строительные блоки, возникшие в CNN, переносятся во многие глубокие архитектуры, включая трансформеры.
- FLOP не равны скорости: MobileNetV2 использует в 13,7 раза меньше FLOP, чем ResNet-50, но может работать медленнее на некоторых дата-центровых GPU, если ее формы операций и арифметическая интенсивность плохо используют доступные вычислительные блоки. Скорость определяет соответствие архитектуры и аппаратуры, а не только число операций.
- Выбор архитектуры — это выбор развертывания: выбор трансформера вместо CNN определяет требования к памяти, нижние границы задержки, загрузку аппаратуры и стоимость инфраструктуры. Архитектура и есть системное ограничение.
Индуктивное смещение и системная стоимость — два взгляда на один и тот же выбор. Предположения, которые помогают модели обобщать по ограниченной выборке, такие как локальность, рекуррентность или неограниченные взаимодействия токенов, также определяют форму, переиспользование и время жизни промежуточных данных. Поэтому алгоритмический выбор распространяется на требования к емкости памяти, пропускной способности и планированию еще до того, как фреймворк выберет ядра.
Выбор архитектуры подписывает физический контракт с аппаратурой. CNN берет обязательство по пространственной локальности и переиспользованию весов; плотное внимание — по вычислению оценок ; а RNN — по последовательным зависимостям между шагами времени. Эти топологические решения фиксируют основные члены нагрузки , и , а значит, определяют объем памяти, потребность в пропускной способности и параллельную эффективность. Приемы времени выполнения могут улучшить то, насколько эффективно выполняется этот контракт, но не могут его отменить: блочное точное внимание устраняет хранение промежуточных оценок, не меняя квадратичной нижней границы арифметики, а конвейерный параллелизм распределяет рекуррентную работу, не устраняя последовательного пути по шагам времени. Поэтому инженеры систем могут предвидеть вероятные сдвиги узких мест до реализации, согласовывая индуктивное смещение модели и геометрию данных с физикой кремния.
От чертежей к конструкции
Сырые вычислительные примитивы («Вычисления в нейронных сетях») в этой главе становятся конкретными архитектурными контрактами. Перевод абстрактного чертежа в исполняемую среду выполнения требует связать математические графы с физической аппаратурой. Архитектура фиксирует, какая работа должна выполняться; фреймворк машинного обучения определяет, как эта работа планируется и диспетчеризуется. В главе «Фреймворки машинного обучения» рассмотрено, как PyTorch, TensorFlow и JAX превращают высокоуровневые архитектурные графы в вычислительные ориентированные ациклические графы (DAG), графы автоматического дифференцирования и оптимизированные ядра устройств, которые исполняются непосредственно на кремнии.
-
Индуктивное смещение: от латинского inducere, «вести за собой». Кодирование структурного предположения «ведет» модель к меньшему пространству решений; именно поэтому понятие объединяет всю главу: каждая архитектура, которую здесь рассматриваем, — многослойный перцептрон (MLP), сверточная нейронная сеть (CNN), рекуррентная нейронная сеть (RNN) и трансформер — определяется своим выбором смещения. Локальное смещение CNN уменьшает число параметров на порядки по сравнению с эквивалентным MLP, напрямую сокращая члены и железного закона, тогда как глобальное внимание обменивает квадратичные вычисления оценок на связность на больших дистанциях. ↩
-
Авторегрессивная генерация: стратегия декодирования, в которой каждый выходной токен зависит от всех ранее сгенерированных токенов и требует полного прямого прохода модели на каждый токен. Для модели на 1,5 млрд параметров в FP16 использованный здесь вариант, учитывающий только веса, при батче из одного примера считывает около 3 ГБ весов на шаг декодирования и дает отношение работы к байтам примерно 1 FLOP/байт. Такая низкая арифметическая интенсивность часто делает декодирование с батчем из одного или малым батчем ограниченным пропускной способностью памяти; большие батчи позволяют амортизировать трафик весов. Во время генерации системы обслуживания также хранят состояние внимания от предыдущих токенов; «Внимание» называет это состояние KV-кешем. ↩
-
Перцептрон: образовано от «perception» (восприятие) и суффикса «-tron», как в циклотроне и клистроне. Термин ввел Фрэнк Розенблатт (Rosenblatt, 1957) для атомарной единицы нейросетевых вычислений: взвешенной суммы с последующей нелинейной активацией; он расширил более раннее понятие нейрона Маккалока — Питтса. MLP полностью состоят из таких блоков, собранных в полносвязные слои, поэтому эффективность этой одной операции — умножения с накоплением — определяет пропускную способность системы. Современные ускорители выполняют более таких операций в секунду, поэтому перцептрон становится вычислительным примитивом, вокруг которого оптимизирована вся экосистема аппаратуры для машинного обучения. ↩
-
Теорема об универсальной аппроксимации (UAT): теорема дает математическую гарантию для индуктивного смещения MLP «без априорной структуры», доказывая, что достаточно широкая сеть может аппроксимировать любую непрерывную функцию. Системная оговорка состоит в том, что «достаточно широкая» может требовать числа нейронов, растущего экспоненциально с размерностью входа, и тогда теоретическая гарантия практически недостижима даже для умеренных входов, например для изображения . ↩
-
Гипотеза многообразия: предположение, что данные высокой размерности лежат на низкоразмерной поверхности, вложенной в полное пространство. Изображение живет в пространстве размерности 65 536, но «правдоподобные изображения кошек» занимают крошечную структурированную область. Глубокие сети постепенно разворачивают это смятое многообразие в линейно разделимые представления. Системное следствие: если бы данные действительно занимали все пространство, никакая архитектура не смогла бы обучиться на реалистичных объемах данных; именно структура многообразия делает конечные бюджеты обучения достаточными. ↩
-
Теорема об отсутствии бесплатного обеда: результат (Wolpert and Macready, 1997) доказывает, что ни один алгоритм оптимизации не превосходит случайный перебор на всех возможных задачах: в среднем по всем мыслимым функциям все алгоритмы эквивалентны. Для системного машинного обучения это означает, что индуктивное смещение (локальность, эквивариантность, внимание) может улучшать результат на задачах, соответствующих этому смещению, и ухудшать его, когда предположения не выполняются; поэтому выбор архитектуры — это инженерное обязательство перед классом задач. ↩
-
MAC (умножение с накоплением): элементарная операция нейронных сетей: перемножить два значения и прибавить результат к текущей сумме. В эталонных оценках Horowitz для техпроцесса 45 нм одно умножение и сложение в FP32 стоит около 4,6 пДж, а обращение к внешней DRAM-памяти по 32 бита — около 640 пДж (Horowitz, 2014). Эти значения, привязанные к конкретной технологии, показывают, почему перемещение данных может доминировать над энергией арифметики; это не универсальные константы для современной аппаратуры. ↩
-
BLAS (базовые подпрограммы линейной алгебры): этот стандартный программный интерфейс для матричных операций позволяет использовать высокооптимизированные библиотеки (например, cuBLAS), чтобы ускорять 784 операции умножения с накоплением на нейрон. Матрица из примера MNIST может использовать аппаратуру менее эффективно, чем большие, хорошо выровненные матрицы трансформера, потому что загрузка зависит от формы матрицы, батчирования, типа данных, библиотеки и ускорителя. ↩
-
Tensor Cores: специализированные блоки в GPU NVIDIA, которые ускоряют тысячи операций умножения с накоплением, объединяя их в одну высокопараллельную матричную инструкцию. Tensor Cores работают наиболее эффективно, когда размеры матриц кратны значениям, специфичным для типа данных и архитектуры; современные cuBLAS/cuDNN могут использовать Tensor Cores и во многих невыровненных случаях, но с меньшей эффективностью или с внутренним дополнением нулями. Архитектурный урок не зависит от производителя: специализированные матричные блоки вознаграждают плотные, выровненные обобщенные матричные умножения (GEMM) и наказывают малые нерегулярные формы, которые не дают полностью загрузить блоки. ↩
-
Свертка: от латинского convolvere («свертывать вместе»), описывает фильтр, который скользит по входу, объединяя локальные элементы в каждой позиции. Это «свертывание вместе» вводит ограничение локальности, из которого берется эффективность операции: одно ядро переиспользует свои 25 весов в каждой пространственной позиции, сокращая один детектор признака для одноканального изображения в 1 мегапиксель примерно с 1 000 000 весов до 25, то есть примерно в 40 000 раз меньше параметров, чем у полносвязного детектора. ↩
-
ImageNet: набор данных, на котором эти два требования обработки пространства были подтверждены в масштабе. Победа AlexNet в 2012 году на соревновании ImageNet Large Scale Visual Recognition Challenge снизила ошибку top-5 с 26,2 процента до 15,3 процента на задаче из 1000 классов с примерно 1,2 млн обучающих изображений (Krizhevsky et al., 2012); исходный выпуск ImageNet содержал 3,2 млн изображений в 5 247 синсетах (Deng et al., 2009). Последующие архитектуры повышали точность за счет изменений архитектуры, оптимизации, данных и вычислительных бюджетов, что иллюстрирует взаимодействие между индуктивным смещением и стоимостью инфраструктуры. ↩
-
Эквивариантность относительно сдвига: присущее операции свертки свойство: сдвиг входа гарантирует соответствующий пространственный сдвиг карты признаков. Это отличается от инвариантности, которую пулинг или последующая агрегация могут приблизить, отбрасывая точные позиционные данные. Например, пулинг с шагом 2 уменьшает число пространственных элементов на 75 процентов. ↩
-
Ян Лекун и LeNet: архитектура Лекуна напрямую решала непрактичное масштабирование плотных сетей на изображениях, навязывая принципы локальной связности и разделения параметров. Эти ограничения сократили число параметров для входного слоя, подобного изображению, более чем на 95 процентов, что позволило LeNet-5 достичь промышленной точности в коммерческих задачах, таких как чтение чеков, всего при примерно 60 000 параметров. ↩
-
Рецептивное поле: область входа, которая влияет на конкретный выходной нейрон. При фильтрах рецептивное поле растет на 2 пикселя на слой, поэтому нейрон третьего слоя «видит» область . Этот темп роста ограничивает глубину архитектуры: чтобы обнаружить объекты размером 100 и более пикселей на изображении , нужны либо глубокие стеки малых фильтров (больше слоев, больше памяти под активации), либо большие ядра (больше параметров в слое) — фундаментальный компромисс глубины и ширины в проектировании CNN. ↩
-
SIMD (одна инструкция — много данных): инструкции CPU, которые применяют одну операцию к нескольким элементам данных одновременно; AVX-512 может обрабатывать 16 значений одинарной точности одной векторной инструкцией. Реальное ускорение по сравнению со скалярным кодом также зависит от пропускной способности инструкций, векторизации и доступа к памяти. Для вывода CNN на периферийных CPU без GPU загрузка SIMD может определять, достигает ли модель целевых показателей задержки в реальном времени. Фреймворки вроде TFLite и ONNX Runtime (Open Neural Network Exchange) используют векторизованные ядра свертки, чтобы задействовать этот параллелизм. ↩
-
Внимание Баданау: этот подход разрушил «узкое место фиксированной длины вектора» у прежних моделей «последовательность в последовательность», позволив декодеру на каждом шаге вывода динамически запрашивать все элементы входа, что и создает описанную адаптивную связность. Структурное ограничение канала фиксированной емкости заменила обучаемая взвешенная схема, основанная на содержимом. Основной компромисс состоял в том, чтобы принять линейную по стоимость памяти за хранение всех состояний входа ради преодоления потери информации, неизбежной для одного вектора. ↩
-
Трансформер: в основополагающей статье «Attention Is All You Need» была явно заявлена системная мысль: параллельный механизм внимания способен полностью заменить последовательную рекуррентную обработку. Этот архитектурный компромисс снимает ограничение RNN на длину пути для параллелизма, но вводит плотное вычисление оценок ; наивные реализации также материализуют хранение оценок . Это квадратичное вычисление продолжает определять инженерию контекстного окна. ↩
-
Запрос — ключ — значение (QKV): терминология заимствована из информационного поиска, что объясняет, почему уравнение использует три различные выученные проекции для вычисления попарных оценок. Создание этих проекций требует трех независимых матриц весов, стоящих параметров на слой. Прямое системное следствие — «KV-кеш» для авторегрессивного вывода: все прежние векторы ключей и значений должны храниться для следующего токена, поэтому память растет линейно () с длиной последовательности и может доминировать в памяти обслуживания при длинных контекстах или высокой параллельности. ↩
-
Softmax: название происходит от «мягкой» (дифференцируемой) версии argmax, а математические корни восходят к статистической механике Больцмана. Softmax нормирует каждую строку запроса по всем оценкам; наивная реализация внимания материализует полную матрицу до нормировки. Онлайновый softmax и блочная обработка, которые использует FlashAttention, вместо этого поддерживают текущие статистики нормировки и вычисляют точное внимание без хранения всей матрицы в HBM. Таким образом, softmax требует редукции по каждой строке, но не вынуждает к квадратичному вспомогательному хранению; плотное вычисление попарных оценок остается квадратичным. ↩
-
Масштабирование внимания : эта нормировка напрямую компенсирует линейный рост дисперсии скалярного произведения «запрос — ключ», не давая softmax насыщаться там, где градиенты иначе исчезли бы. Системное следствие особенно заметно при смешанной точности обучения: когда активации становятся большими, немасштабированные скалярные произведения могут давать логиты, которые выходят за пределы 16-битного диапазона чисел с плавающей запятой, и тогда обучение дестабилизируется или полностью останавливается. ↩
-
Масштабирование памяти KV-кеша: для трансформера на 7 млрд параметров в FP16 веса занимают около 14 ГБ; кеш одного запроса требует 32 слоя × 2 (K и V) × 32 головы × 2 048 позиций × 128 измерений × 2 байта, то есть около 1,07 ГБ. При 8 одновременных пользователях кеш составляет около 8,6 ГБ, что существенно добавляется к весам. Поскольку кеш растет линейно с контекстом и параллельностью, масштабирование пропускной способности заставляет выбирать между групповым вниманием с общими ключами и значениями (grouped-query attention) (Ainslie et al., 2023), более короткими контекстами или страничным выделением и выгрузкой KV-кеша (Kwon et al., 2023). Страничная организация и выгрузка сохраняют выходы модели, тогда как групповое внимание меняет архитектуру, а более короткие контексты обрезают исторический контекст. ↩
-
Эмбеддинг: от математического вложения одного пространства в другое; нейронные эмбеддинги отображают дискретные токены (такие как идентификаторы пользователей или слова словаря) в непрерывные векторные пространства, где геометрическая близость отражает смысловое сходство. Word2vec популяризировал нейронные эмбеддинги слов в 2013 году. Для систем таблицы эмбеддингов создают особый шаблон доступа к памяти: каждое обращение — нерегулярное чтение из таблицы, которая может иметь масштаб в терабайты. Это порождает разреженную рабочую нагрузку, ограниченную пропускной способностью, которая делает DLRM принципиально отличной от архитектур, ограниченных вычислениями, таких как ResNet. ↩
-
Обратное распространение ошибки: Румельхарт, Хинтон и Уильямс показали в 1986 году, как эффективно применять правило цепочки для обучения многослойных сетей; стандартное обучение в обратном режиме сохраняет прямые активации, нужные обратному проходу, поэтому память под активации обычно растет с глубиной сети. Контрольные точки (checkpointing), пересчет и выгрузка могут сократить объем сохраненных активаций ценой дополнительных вычислений или перемещения данных. Поэтому хранение активаций, а не хранение весов, может стать связывающим ограничением памяти, определяющим максимально возможный размер батча на данном ускорителе. ↩
-
Батч-нормализация (BatchNorm): исходный слой нормализации (Ioffe and Szegedy, 2015), который перемасштабирует активации по статистикам каждого мини-батча. В одном эксперименте на ImageNet она достигла целевой точности при числе шагов обучения, меньшем в 14 раз. Ее зависимость от размера батча и перекос обучения и обслуживания (переход от статистик батча к скользящим средним при выводе) — системные ограничения, которые породили альтернативы: LayerNorm избавил трансформеры от зависимости от батча, а RMSNorm убрал центрирование по среднему. ↩
-
RMSNorm (нормализация по среднеквадратичному значению): представленная в (Zhang and Sennrich, 2019) на NeurIPS, RMSNorm упрощает LayerNorm, нормируя только по среднеквадратичному значению и отказываясь от центрирования по среднему. Во всех протестированных в работе моделях и реализациях RMSNorm сократил общее время выполнения на 7–64 процента по сравнению с LayerNorm. Отчеты о моделях семейства LLaMA и трансформерах в стиле Mixtral используют RMSNorm (Touvron et al., 2023; Touvron et al., 2023; Jiang et al., 2024), что показывает, почему один проход редукции может иметь значение для задержки вывода трансформера. ↩
-
LSTM (сеть долгой краткосрочной памяти): предложена Хохрайтером и Шмидхубером в 1997 году. LSTM ввели «карусель постоянной ошибки» — гейтированное состояние ячейки, которое защищает сигналы ошибки от экспоненциального затухания при обратном распространении во времени. Системная цена этого решения: стандартная LSTM вычисляет входной, забывающий и выходной гейты, а также кандидата на обновление ячейки, что дает примерно четыре аффинных преобразования на шаг времени против одного у простой RNN. Эта вычислительная нагрузка объясняет, почему трансформеры, решающие дальние зависимости через распараллеливаемое внимание, во многих крупных языковых нагрузках вытеснили LSTM. ↩
-
GRU (гейтированный рекуррентный блок): (Cho et al., 2014) описывает гейтированный скрытый блок для перевода «кодировщик — декодер», который использует гейты сброса и обновления, чтобы управлять обновлением скрытого состояния. По сравнению с входным, забывающим и выходным гейтами LSTM плюс кандидатом на обновление ячейки это дает более простую гейтированную рекуррентность. Более широкий системный урок: архитектурное упрощение может сократить состояние и матричные операции, если сохраняет качество решения задачи, — принцип, который повторяется в ориентированных на эффективность конструкциях от MobileNet до дистиллированных трансформеров. ↩
-
Визуальные трансформеры (ViT): в статье ViT 2020 года от Google изображения делились на патчи (196 «токенов»), и к ним применялось стандартное внимание трансформера. ViT заменяют локальные свертки CNN глобальным вниманием по токенам патчей. В исходном исследовании крупномасштабное предобучение повышало конкурентоспособность ViT, что иллюстрирует, как данные и вычисления могут компенсировать более слабое пространственное индуктивное смещение (Dosovitskiy et al., 2021). ↩
-
im2col (image to column): не новый алгоритм обучения, а техника реализации, которую используют CNN-фреймворки и библиотеки, такие как Caffe и cuDNN (Jia et al., 2014; Chetlur et al., 2014): свертки превращаются в стандартные вызовы GEMM разворачиванием перекрывающихся фрагментов в столбцы матрицы. Компромисс — память: в простом полностью материализованном преобразовании с шагом 1 внутренние элементы входа могут попасть в до столбцов (9 раз для фильтров ), хотя границы, шаг, дополнение, блочная обработка и прямые алгоритмы свертки уменьшают реальное расширение. Этот обмен памяти на простоту объясняет, почему мобильные фреймворки (TFLite, NNAPI) предпочитают прямую свертку, тогда как дата-центровые GPU с большим объемом HBM могут использовать понижение к GEMM, когда оно повышает пропускную способность. ↩
-
Систолический массив: назван по ритмичному сокращению сердца; синхронный «пульс» данных через сетку процессоров непосредственно реализует эффективное переиспользование данных, необходимое операциям скользящего окна. Передавая входные значения между соседними процессорами, мы избегаем дорогого обращения к внешней DRAM для каждого умножения в свертке. Это критично для эффективности: одно обращение к внешней памяти может стоить более чем в 100 раз больше энергии, чем операция умножения с накоплением в плавающей запятой, а относительно арифметики с низкой разрядностью — еще больше. ↩
-
TPU (тензорный процессор): первый TPU Google отображал матричное умножение на большой систолический массив, обменивая универсальные возможности, такие как кеши и сложный управляющий поток, на эффективность вывода для конкретной области (Jouppi et al., 2017). Архитектурный урок здесь качественный: когда один примитив доминирует в нагрузке, специализированные тракты данных и локальное переиспользование могут превзойти универсальную гибкость. Подробные решения по точности, спецификации аппаратуры и компромиссы производительности разобраны в главе «Аппаратное ускорение». ↩
-
Алгоритм Винограда: для одного выходного тайла с фильтром метод обменивает 36 прямых умножений на 16 поэлементных умножений в области Винограда плюс дополнительные преобразования и сложения. Преобразования могут усиливать ошибку округления, поэтому пригодность для низкой точности зависит от варианта, реализации и требований к точности. ↩
-
FlashAttention: учитывающий ввод-вывод алгоритм (Dao et al., 2022), который не материализует полную матрицу внимания в HBM, объединяя вычисления в одно ядро, разбитое на тайлы, которые помещаются в SRAM. Результат: ускорение по реальному времени в 2–4 раза и снижение памяти с до , что позволяет обучать на последовательностях в 4–16 раз длиннее, чем позволяет стандартное внимание. FlashAttention показывает, что алгоритмическая оптимизация перемещения данных может дать больший выигрыш в скорости, чем наращивание сырых вычислений — конкретное подтверждение члена данных железного закона. ↩
Фреймворки машинного обучения
Назначение
Почему фреймворк незаметно ограничивает каждое решение, которое следует за ним?
Уравнения модели сами себя не выполняют. Фреймворк переводит архитектуру в работу, которую может выполнить аппаратура, и этот перевод не нейтрален. Он определяет, когда выполняются операции, какое промежуточное состояние сохраняет обучение, как выделяется память и какие целевые платформы способны использовать получившийся артефакт. Эти решения влияют не только на скорость: они определяют, что можно отлаживать напрямую, что может оптимизировать компилятор и сохранится ли та же модель на пути от исследовательской среды до производственной среды исполнения. Абстракции, которые делают эксперименты удобными, поэтому создают долгосрочные обязательства. Когда в проекте накапливаются контрольные точки, модули, загрузчики данных, форматы обслуживания и экспертиза команды, связанные с фреймворком, его замена становится миграцией системы, а не заменой библиотеки. Фреймворк, хорошо подходящий для быстрого исследования, может раскрывать слишком мало структуры для эффективного развертывания, а ограниченный путь исполнения может пожертвовать гибкостью, нужной на этапе поиска. Поскольку исполнение, дифференцирование и абстракция встречаются в одном программном слое, локальное удобство может превратиться в последующее ограничение производительности или переносимости. Инженерный вопрос состоит не в том, какой фреймворк универсально лучший, а в том, какие компромиссы могут позволить себе нагрузка, команда и целевая машина, зафиксировав их заранее. Понимание фреймворков поэтому означает рассуждение о системных выборах, а не изучение сиюминутного синтаксиса API. В терминах D·A·M фреймворк опосредует совместное проектирование алгоритма и машины: он превращает алгоритмическое намерение и представление данных в исполняемую работу в рамках ограничений машины.
Цели обучения
- Объяснять, как фреймворки опосредуют совместное проектирование алгоритма и машины через исполнение, дифференцирование и абстракцию аппаратуры
- Сравнивать стратегии исполнения по накладным расходам диспетчеризации, стоимости компиляции и ограничениям развертывания
- Анализировать автоматическое дифференцирование и хранение активаций, чтобы выбрать между пересчетом и контрольными точками
- Реализовывать паттерны абстракции модулей для обнаружения параметров, поведения в разных режимах, сериализации и хуков
- Вычислять FLOP шага обучения, объем трафика памяти и накладные расходы диспетчеризации, чтобы находить узкие места слияния и раскладки
- Выбирать TensorFlow, PyTorch, JAX или периферийные среды исполнения в зависимости от модели, аппаратуры, команды и требований развертывания
Три проблемы фреймворков
Архитектура — это граф обязательств: трансформер обязывает систему к вниманию, матричным умножениям, состоянию активаций и трафику памяти. Фреймворк — это слой, который превращает этот граф в работу, которую может выполнить машина. Несколько вызовов, таких как logits = model(tokens), loss = criterion(logits, targets) и loss.backward(), скрывают миллиарды операций с плавающей запятой в иерархиях памяти, градиенты через миллионы параметров с помощью автоматического дифференцирования, тысячи запусков ядер GPU и гигабайты промежуточного состояния. Интерфейс выглядит простым, потому что фреймворк выступает компилятором для кремниевого контракта.
Архитектуры задают, какие вычисления выполняют нейронные сети, но знание того, что вычислять, совсем не равно знанию того, как вычислять это эффективно. Механизм внимания трансформера требует согласования вычислений по иерархиям памяти и ядрам ускорителя. Наивные реализации в таких шаблонах работают в 100 раз медленнее оптимизированных из-за несгруппированных обращений к памяти и повторных обменов с памятью с высокой пропускной способностью (HBM). Реализация этих операций с нуля для каждой модели сделала бы глубокое обучение экономически неосуществимым. ML-фреймворки существуют, чтобы закрыть этот разрыв: они преобразуют абстрактные графы моделей в согласованные с аппаратурой конвейеры исполнения, которые максимизируют загрузку вычислительных блоков и минимизируют внешний трафик памяти.
Фреймворк для машинного обучения — то же, что компилятор для традиционного программирования. Компилятор C переводит читаемый человеком код в оптимизированные машинные инструкции, управляя распределением регистров, планированием инструкций и раскладкой памяти. ML-фреймворк переводит высокоуровневые определения моделей в аппаратно-специфичные планы исполнения, управляя слиянием операторов, повторным использованием памяти и размещением на устройствах. Соответствие здесь операционное, а не образное: современные фреймворки включают оптимизирующие компиляторы (например, ускоренную линейную алгебру (XLA) или TorchInductor), которые преобразуют графовые представления непосредственно в машинный код целевой аппаратуры.
Каждый ML-фреймворк, независимо от API и философии проектирования, должен решить три основные задачи. Первая — проблема исполнения: решить, когда и как выполняется вычисление. Фреймворк может выполнять операции сразу в том виде, как они записаны (eager-исполнение1), либо построить вычислительный граф2 — структурированное промежуточное представление операций и зависимостей по данным, — чтобы оптимизировать его до запуска ядер на устройстве (исполнение по графу). Этот выбор определяет фундаментальный компромисс между интерактивной отладкой и оптимизацией программы целиком компилятором.
После выбора стратегии исполнения фреймворк должен решить проблему дифференцирования: автоматически вычислять градиенты. Поскольку обучение на основе градиентов требует производных скалярной функции потерь по миллионам или миллиардам параметров («Вычисления в нейронных сетях»), ручное дифференцирование невозможно в масштабе. Фреймворки реализуют автоматическое дифференцирование, регистрируя правила дифференцирования для поддерживаемых композиций операторов и перемножая векторно-якобиановы произведения. При этом они управляют численной точностью и накладными расходами памяти на промежуточные активации, которые сохраняются для обратных проходов.
Третья задача — абстракция аппаратуры: работа с разнообразным железом через единый интерфейс. Одно и то же описание модели должно выражаться на CPU, GPU, тензорных процессорах (TPU) и мобильных ускорителях, хотя у каждой цели свои иерархии памяти, наборы инструкций и пропускные способности межсоединений. В области GPU экосистемы фреймворков все чаще предоставляют языки для пользовательских ядер, такие как Triton (Tillet et al., 2019). Они позволяют разработчикам писать высокопроизводительные ядра на уровне блоков без ручного написания низкоуровневого CUDA или ассемблера устройств.
Эти три задачи тесно связаны: модель исполнения определяет, когда записываются структуры данных для дифференцирования, а уровень абстракции аппаратуры определяет, какие преобразования графа можно понизить до кремния. Объединить исполнение, дифференцирование и абстракцию аппаратуры в рамках физических ограничений машины можно, только оценивая фреймворки через управляющее уравнение производительности машинного обучения.
Компилятор машинного обучения
В контексте железного закона («Железный закон систем машинного обучения») фреймворк — это компилятор для кремниевого контракта.
«Исходный код» — это архитектура модели (член ). Задача фреймворка — взять эту высокоуровневую математическую спецификацию и скомпилировать ее в последовательность аппаратно-специфичных запусков ядер, которые:
- Минимизируют перемещение данных с помощью таких приемов, как слияние ядер.
- Максимизируют загрузку , сопоставляя операции со специализированными блоками аппаратуры, например тензорными ядрами.
- Минимизируют накладные расходы за счет эффективной асинхронной диспетчеризации и захвата графа.
Выбор фреймворка означает выбор компилятора, который определяет аппаратную эффективность. Здесь важна точность: определение, охватывающее все три обязанности, отделяет настоящие фреймворки от численных библиотек, которые решают только одну из них.
Фреймворки машинного обучения
Фреймворки машинного обучения — это программные системы, которые переводят высокоуровневые математические определения моделей в аппаратно-оптимизированные планы исполнения. Они управляют вычислительным графом, автоматическим дифференцированием, диспетчеризацией ядер и распределением памяти по иерархии аппаратуры.
- Значение: фреймворки напрямую определяют член эффективности системы в железном законе. Слияние операторов, выполняемое компилятором, например, может устранить запись и последующее чтение промежуточных значений между совместимыми операциями. Слияние матричного умножения, добавления смещения и выпрямителя ReLU меняет то, как та же математика попадает на аппаратуру, не меняя модели.
- Отличие: в отличие от численной библиотеки вроде NumPy, которая обычно вычисляет каждую операцию по мере вызова, ML-фреймворк может захватывать или откладывать исполнение, чтобы анализировать больший вычислительный граф и применять межоператорные оптимизации: слияние операторов, преобразования раскладки памяти и параллельное планирование. Для этих оптимизаций нужна видимость за пределами отдельно диспетчеризуемых операций.
- Распространенная ловушка: частое заблуждение состоит в том, что фреймворки — взаимозаменяемые обертки над API. Выбор фреймворка определяет, какие пути компиляции доступны. PyTorch может восстановить оптимизацию на уровне графа из eager-кода через
torch.compile(), а TensorFlow и JAX обычно опираются на пути компиляции на основе XLA, которые преобразуют операции в целевую аппаратуру. Переход от eager-исполнения к пути компиляции может заметно изменить пропускную способность, но выигрыш зависит от структуры модели, форм тензоров, поддержки операторов и аппаратуры.
ML-фреймворк переводит логическое намерение в физическое исполнение в рамках ограничений железного закона. Он решает, как разбить вычисление по иерархиям памяти, когда обменять численную точность на пропускную способность и как планировать операции, чтобы доминирующий член — перемещение данных (), арифметическое вычисление или задержка запуска () — был минимальным. Фреймворк — это место, где управляющая физика, развитая в этой книге, становится исполняемым кодом.
Масштаб этого перевода становится очевидным под поверхностью API. Один вызов loss.backward() запускает запись операций, выделение памяти под градиенты, обход графа в обратном порядке и диспетчеризацию ядер, оптимизированных под аппаратуру. Этот механизм потребовал бы существенной ручной бухгалтерии даже для трехслойной сети. Для современной языковой модели фреймворк дополнительно координирует миллиарды операций с плавающей запятой на ускорителях, согласуя иерархии памяти, численную точность и, когда система выходит за пределы одного устройства, библиотеки коммуникации. Построить все это с нуля было бы экономически непосильно для большинства организаций, поэтому история ML-фреймворков — это история постепенной автоматизации этих слоев.
Три задачи — исполнение, дифференцирование и абстракция — возникли не одновременно. Каждая появилась как ответ на ограничения масштабирования предыдущего поколения инструментов. Так сложилась историческая последовательность абстракций: от низкоуровневых подпрограмм линейной алгебры до скомпилированных графовых сред исполнения.
Лестница абстракций
В 1979 году написание умножения матриц на Fortran, которое эффективно использовало бы аппаратуру, требовало глубокого знания строк кэша, планирования регистров и векторных блоков. К 2016 году одна строка Python (torch.matmul(A, W)) могла диспетчеризоваться в высокооптимизированную реализацию без того, чтобы программист знал подробности кремния. Это сжатие усилий не произошло за один шаг. Оно накапливалось на протяжении четырех десятилетий абстракций, и каждый слой решал узкое место, которое делало предыдущее поколение непрактичным для масштабирования. Результат — лестница абстракций, где каждая ступень автоматизирует то, что открывала ступень ниже.
Первая ступень создала повторно используемые аппаратные примитивы (1979–1992). Базовые подпрограммы линейной алгебры (BLAS)3 стандартизировали низкоуровневые операции линейной алгебры (Lawson et al., 1979), а LAPACK4 (Bai et al., 2006) построил на этом фундаменте более высокоуровневые численные факторизации и решатели собственных значений. Наивные вложенные циклы не используют иерархии памяти: без блочной обработки кэша и регистровой блокировки пропускная способность памяти насыщается задолго до того, как арифметические блоки достигают пиковой производительности. BLAS и LAPACK решили эту проблему аппаратных примитивов, установив стабильные интерфейсы. Они позволяют численному программному обеспечению делегировать вычислительно тяжелые операции, такие как умножение матриц (C = A @ B)5, библиотекам поставщиков, настроенным под размеры строк кэша, ширину SIMD (одна инструкция — много данных) и регистровые файлы. Так не требуется писать ассемблер для каждой целевой архитектуры.
Вторая ступень ввела унифицированные абстракции массивов ради скорости разработки (2005–2006). NumPy6 снял барьер производительности низкоуровневых языков, обернув BLAS и LAPACK в высокоуровневый Python (Harris et al., 2020). В модели strided-массивов NumPy Python управляет потоком управления и метаданными тензоров (форма, шаги и тип данных), а нижележащая среда C диспетчеризует векторные и матричные циклы по непрерывным буферам памяти. Этот контракт векторизации, при котором алгоритмическое намерение формулируется в интерпретируемом языке, а внутренние циклы делегируются скомпилированным нативным подпрограммам, стал архитектурным шаблоном для научных и численных вычислений.
Третья ступень автоматизировала вычисление градиентов (2007 — наши дни). Фреймворки глубокого обучения, такие как Theano,7 TensorFlow (Abadi et al., 2016) и PyTorch (Paszke et al., 2019), решили проблему масштабируемости ручного дифференцирования. Численные пакеты требовали, чтобы практики выводили и реализовывали аналитические градиенты обратного распространения вручную, а это процесс, подверженный ошибкам и неуправляемый для глубоких сетей. Современные фреймворки превратили автоматическое дифференцирование по вычислительным графам в базовый примитив среды исполнения. Захватывая операции в направленный ациклический граф во время прямого прохода, они автоматически строят обратный граф для вычисления векторно-якобиановых произведений. Так исчисление цепного правила превращается в автоматизированное исполнение в обратном режиме.
Эта последовательность прослеживает четыре десятилетия абстракций численных вычислений: от подпрограмм, настроенных под ассемблер, до движков исполнения скомпилированных графов («Эволюция вычислительных библиотек»).
Эволюция вычислительных библиотек: временная шкала вех численных вычислений с 1979 по 2018 год. Каждая эпоха автоматизирует то, что открывал нижний слой, — от аппаратных подпрограмм BLAS и LAPACK до векторного синтаксиса NumPy и автоматического дифференцирования на основе графов в современных фреймворках. Ценой становится низкоуровневая прозрачность, зато растет скорость разработки.
Каждое поколение абстрагировало детали, на которые раньше уходили инженерные усилия, но каждая абстракция вводила новые компромиссы. BLAS скрыл оптимизацию на уровне ассемблера, но зафиксировал интерфейс. NumPy скрыл управление памятью, но потребовал ручного дифференцирования. Современные фреймворки скрывают вычисление градиентов, но вводят выбор между моделями исполнения. Более глубокая закономерность в том, что каждая абстракция скрывает детали, сохраняя контракт о форме, типе данных, устройстве и иногда единицах измерения. Когда этот контракт становится неявным, корректные компоненты все еще могут сложиться в неправильную систему.
Интерфейс, который забыл свои единицы (1999)
Контекст: наземное ПО NASA для Mars Climate Orbiter, бортовое ПО аппарата, навигационные команды и интерфейсы подрядчиков должны были согласованно понимать физический смысл передаваемых значений (Mars Climate Orbiter Mishap Investigation Board, 1999).
Механизм: наземное ПО, поставленное Lockheed Martin, вычисляло импульс двигателей в английских единицах (фунт-силы на секунду), тогда как навигационное ПО JPL использовало эти значения, считая их в единицах СИ (ньютон-секундах). Получилось неявное несоответствие единиц в 4,45 раза.
Последствия: 23 сентября 1999 года аппарат был потерян после входа в затмение. Скорректированный перицентр 57 км вместо запланированных 226 км был признан слишком низким для выживания.
Реакция: комиссия рекомендовала проверки согласованности единиц, аудит спецификаций передаваемых данных и более строгую сквозную верификацию наземного ПО.
Системный урок: абстракции фреймворков ценны, потому что несут контракты: форму, тип данных, размещение на устройстве и физические единицы. Если эти контракты неявны, два корректных фрагмента кода все равно могут сложиться в неправильную систему. ML-фреймворки сталкиваются с этим всякий раз, когда раскладки тензоров в памяти (например, NCHW и NHWC), масштабные коэффициенты квантования или физические единицы признаков различаются между этапами конвейера. Тогда возникают правдоподобные выходы, которые незаметно портят последующий вывод.
С учетом этого риска контрактов современные фреймворки сходятся на трех основных задачах: как исполнять вычисления, как их дифференцировать и как абстрагироваться от аппаратуры. Проблема исполнения идет первой, потому что ее решение определяет, какие оптимизации могут использовать две другие задачи.
Проблема исполнения
Представьте двух инженеров, которые пишут одну и ту же нейронную сеть. Первый отлаживает интерактивно: печатает формы тензоров после каждой операции, проверяет промежуточные значения и проходит код по шагам с помощью pdb. Второй ждет 30 секунд компиляции, затем наблюдает, как модель работает в 3 раза быстрее, но теряет прямой построчный взгляд на промежуточное состояние. Оба правы: они сделали разный выбор в отношении проблемы исполнения, то есть вопроса о том, должны ли операции выполняться сразу, как записаны, или записываться для последующего исполнения. Этот выбор порождает каскад инженерных компромиссов, которые определяют каждый аспект поведения фреймворка: от рабочих процессов отладки до вариантов развертывания и пиковой загрузки аппаратуры.
Почему стратегия исполнения важна: стена памяти
Стратегия исполнения ML-фреймворка принципиально ограничена расширяющимся разрывом между вычислительной мощностью и пропускной способностью, который описывает уравнение стены памяти («стена памяти»). Арифметика процессоров масштабируется гораздо быстрее пропускной способности памяти, и возникает стена памяти. Современные ускорители могут выполнять арифметику намного быстрее, чем получают данные. Поэлементные операции, такие как ReLU, используют лишь малую долю пиковой вычислительной мощности не потому, что аппаратура медленная, а потому, что почти все время они ждут данных. Раздел «Модель Roofline» приложения «Основы машины» формализует этот компромисс и показывает, когда операции ограничены памятью, а когда вычислениями.
Стена памяти делит операции на ограниченные вычислениями (ограниченные пропускной способностью арифметики) и ограниченные памятью (ограниченные перемещением данных). Большинство отдельных типов операций нейронной сети (активации, нормализации, поэлементные операции) ограничены памятью, хотя большие матричные умножения, которые доминируют в общем времени вычислений, могут быть ограничены вычислениями.
Ключевая оптимизация для операций, ограниченных памятью, — слияние ядер: объединение нескольких операций в одну функцию GPU (называемую ядром)8, чтобы устранить промежуточный трафик памяти. Слияние последовательности нормализации, dropout и активации в одно ядро может дать существенное ускорение, потому что исключает промежуточные записи между операциями. Ядра внимания9 используют тот же принцип в большем масштабе. Вместо материализации полной матрицы внимания в HBM слитая реализация может держать блоки близко к вычислительным блокам. Так она сокращает обращения к HBM до 9 раз и дает ускорение для конкретных нагрузок от 15 процентов до 3 раз (Dao et al., 2022).
Фреймворки могут сливать только операции, видимые вместе. Отдельно диспетчеризуемые eager-операции скрывают межоператорные возможности, тогда как захват графа может их раскрыть. Отложенный граф позволяет фреймворку оптимизировать захваченные вычисления. Стратегия исполнения, таким образом, определяет, какие оптимизации возможны и каков их охват.
Вычислительный граф
Чтобы открыть компиляторам возможности оптимизации нескольких операций сразу, фреймворки представляют программы в виде вычислительного графа: направленного ациклического графа (DAG), в котором узлы представляют операции, а ребра — зависимости по данным. Этот граф служит внутренней моделью вычисления, которой пользуется фреймворк.
Математические операции можно отделить от физического исполнения через графовые представления. Вычислительный граф («Простой вычислительный граф») обосновывает эту абстракцию: тензорные переменные соответствуют узлам данных, а операции — узлам преобразования.
Простой вычислительный граф: представление в виде направленного ациклического графа отделяет математические зависимости от физического порядка исполнения. Это структурный план, который фреймворкам нужен, чтобы отслеживать градиенты и планировать операции на разных устройствах.
Реальные модели машинного обучения требуют гораздо более сложных графовых структур. «Вычислительный граф и системные взаимодействия» расширяет это представление: он показывает граф вычислений нейронной сети рядом с системными компонентами, которые его анализируют. Левая панель изображает данные, текущие через шесть узлов операций в направленном ациклическом графе, где выход каждого узла становится входом следующего. Правая панель показывает, как среда исполнения взаимодействует с этим графом: она запрашивает времена жизни тензоров, чтобы планировать повторное использование памяти, и назначает операции потокам ускорителя исходя из зависимостей по данным, а не порядка программы. Ключевая мысль в том, что граф существует независимо от исполнения, и это позволяет фреймворку оптимизировать его еще до выполнения арифметики.
Вычислительный граф и системные взаимодействия: DAG нейронной сети (слева) взаимодействует с компонентами среды исполнения фреймворка (справа). Поддерживая явное представление графа, независимое от исполнения, фреймворк может анализировать времена жизни тензоров для повторного использования памяти и назначать операции целевым ускорителям до запуска арифметики.
Это представление графа — не просто визуализация, а структура данных, которая обеспечивает и эффективное исполнение, и автоматическое дифференцирование. Момент его построения задает фундаментальный системный компромисс между отладкой, оптимизацией, развертыванием и гибкостью. Интерактивная отладка требует немедленного исполнения, чтобы разработчики могли проверять промежуточные значения и проходить логику стандартными инструментами. Глобальная оптимизация требует одновременно видеть крупные последовательности операторов, чтобы сливать ядра и планировать повторное использование памяти. Автономное развертывание предпочитает графы, которые работают без интерпретатора хост-программы, а динамические архитектуры требуют управления потоком, которое ветвится в зависимости от вычисленных значений тензоров.
Ни одна модель исполнения не оптимизирует все эти измерения. Фреймворки должны выбрать свою позицию в пространстве этих компромиссов, а практики должны понимать компромиссы, чтобы выбирать подходящие инструменты и писать эффективный код. Три семейства исполнения, которые идут дальше, — это разные ответы на один и тот же системный вопрос: сколько видимости графа фреймворк должен обменять на немедленное исполнение и отладку?
Три стратегии исполнения
Вычислительный граф открывает путь к глобальной оптимизации, но оставляет нерешенным важный проектный вопрос: когда среда исполнения строит граф. Рассмотрим элементарное выражение y = x * 2. Немедленное вычисление умножения сразу дает конкретный тензор в y. Такой императивный поток интуитивен и напрямую отлаживается, но среда видит только одну операцию за раз. Отложенное исполнение записывает операцию символически в граф зависимостей, который выполняется только по запросу. Такое разделение отделяет намерение от вычисления и дает компилятору сквозную видимость, необходимую для слияния операторов и планирования памяти.
Ни один подход не доминирует: каждый воплощает разные компромиссы между гибкостью и потенциалом оптимизации. Современные фреймворки исследовали три основные стратегии исполнения: eager-исполнение с динамическими графами, статические вычислительные графы и гибридные подходы, которые сочетают JIT-компиляцию (just-in-time) с интерактивной разработкой. У каждой стратегии свои системные следствия.
Eager-исполнение с динамическими графами
Eager-исполнение вычисляет каждую операцию сразу, как ее вызывает программа, и строит вычислительный граф динамически во время выполнения. Сравнение бок о бок показывает, как это отличается от исполнения по графу на уровне кода.
Сравнение кода: eager-исполнение и исполнение по графу
PyTorch (eager-исполнение):
import torch x = torch.tensor([1.0, 2.0]) y = x * 2 print(f"Промежуточное значение: {y}") # Работает сразу z = y.sum()TensorFlow 1.x (статический граф):
import tensorflow as tf x = tf.placeholder(tf.float32) y = x * 2 # print(y) -> выводит Tensor("mul:0"...), а не значение! z = tf.reduce_sum(y) with tf.Session() as sess: result = sess.run(z, feed_dict={x: [1.0, 2.0]})Системный вывод: eager-исполнение выводит промежуточные значения как обычное состояние среды, что делает отладку прямой. Статические графы выстраивают вычисления до исполнения, что позволяет оптимизировать граф целиком, но меняет модель отладки.
В этой модели define-by-run, когда хост-код вычисляет y = x * 2, среда сразу диспетчеризует ядро умножения в очередь команд устройства и делает полученный тензор доступным для последующих операций без задержки.
Это дает гибкость обычного программирования: разработчики могут печатать промежуточные значения, использовать условия, основанные на вычисленных результатах, и отлаживать стандартными инструментами. Фреймворк записывает операции по мере их выполнения и строит динамический граф, который отражает фактически пройденный путь исполнения.
Для вычисления градиентов фреймворк записывает историю операций в так называемую ленту autograd10, временную структуру данных, которая строится во время исполнения. Каждая тензорная операция создает узел, который записывает выполненную операцию, ссылки на входные тензоры и способ вычисления градиентов. Эти узлы образуют DAG, который фиксирует фактически пройденный путь прямого прохода, а не граф, заданный заранее. «Пример ленты autograd» показывает, как PyTorch записывает операции по мере их исполнения в своем режиме eager по умолчанию.
Построение ленты autograd: каждая операция выполняется сразу, одновременно записывая обратный узел в ленту autograd для последующего вычисления градиентов.
import torch
x = torch.tensor([1.0], requires_grad=True)
y = x * 2 # Выполняется сразу; записывает узел MulBackward
z = y + 1 # Выполняется сразу; записывает узел AddBackward
# Лента autograd существует уже сейчас, она строится во время исполнения
После этих двух операций фреймворк построил ленту autograd с двумя узлами: один для умножения, другой для сложения. Лента записывает, что z зависит от y, а y зависит от x.
Вызов z.backward() проходит по этой ленте в обратном топологическом порядке, применяя правило цепочки в каждом узле:
- Вычислить (начальный градиент)
- Вызвать
AddBackward0.backward() - Вызвать
MulBackward0.backward() - Накопить градиент в
x.grad
После завершения backward() граф autograd обычно освобождается, и следующий прямой проход строит новый граф. Значения, нужные для градиентов, сохраняются во время прямого прохода и остаются в памяти, пока их не использует обратный проход. Поэтому их стоимость по памяти охватывает обе фазы, а не появляется только во время обратного прохода.
Операции на месте могут сломать градиенты
Сценарий: инженер применяет мутацию на месте (
x += 1) внутри пользовательской функции активации PyTorch, чтобы сократить число выделений памяти.Диагностика: операции на месте перезаписывают память тензора с активациями прямого прохода, которые лента autograd требует для вычисления градиентов обратного прохода. Это вызывает ошибку счетчика версий во время исполнения (PyTorch Contributors, 2026). PyTorch обеспечивает этот инвариант безопасности, поддерживая целочисленный счетчик версий у каждого тензора, который увеличивается при каждой записи на месте. Если версия сохраненного тензора в момент обратного прохода отличается от версии, зафиксированной в прямом проходе, autograd выдает ошибку: активация, нужная правилу дифференцирования, была изменена на месте.
Системный урок: автоматическое дифференцирование фреймворка зависит от неизменяемых записей активаций прямого прохода. Непроверенные мутации памяти на месте ломают зависимости ленты autograd и приводят к остановке исполнения фреймворка.
В фреймворках с eager-исполнением операции выполняются императивно, по мере того как хост-код до них доходит. «Ход исполнения динамического графа» показывает этот цикл исполнения, иллюстрируя последовательность «определить и диспетчеризовать», которая отправляет отдельные операции прямо в очереди потоков устройства.
Ход исполнения динамического графа: при eager-исполнении каждая операция отправляется в тот момент, когда программа до нее доходит. Работа ускорителя может выполняться асинхронно после диспетчеризации. Эта модель define-by-run позволяет естественно отлаживать код и использовать управление потоком, зависящее от данных, но ограничивает оптимизацию между вызовами Python.
Системные следствия: гибкость
Динамическая лента autograd выражает поведение, зависящее от данных, прямо на языке хоста. Условные операторы и циклы могут зависеть от значений тензоров, вычисленных во время исполнения. Это позволяет реализовывать алгоритмы вроде лучевого поиска, рекуррентные модели с динамической длиной или адаптивные вычислительные пути, которые подстраивают исполнение под промежуточные активации. Статические графы тоже могут представлять управление потоком и динамические размерности, зависящие от данных, через операции графа, но eager-исполнение делает такие паттерны естественными для написания и отладки на Python. Поскольку операции отправляются сразу, разработчики могут печатать тензоры, проверять значения и использовать стандартные отладчики (pdb, точки останова), чтобы диагностировать ошибки почти так же, как в любой другой программе на Python.
Системные следствия: накладные расходы
Эта гибкость создает задержки, которые напрямую соотносятся с железным законом («Железный закон систем машинного обучения»). Каждый шаг обучения динамически строит ленту autograd, добавляя к задержку диспетчеризации Python на стороне хоста и выделение памяти под ленту. Поскольку каждая операция проходит через диспетчер фреймворка до запуска ядра на устройстве, накладные расходы хоста быстро начинают доминировать, когда отдельные ядра выполняются за единицы микросекунд. Eager-исполнение также не видит граф целиком, поэтому фреймворк не может сливать цепочки поэлементных операций в один запуск на GPU или заранее выделять статическую область памяти под промежуточные активации (). Лента autograd должна удерживать каждый тензор, запрошенный зарегистрированными правилами обратного прохода, и хранить его в памяти до тех пор, пока обратное распространение ошибки его не использует. Вместе эти издержки задают потолок пропускной способности для мелкозернистых нагрузок, где задержка диспетчеризации затмевает арифметику устройства.
Налог на диспетчеризацию: накладные расходы Python и реальность GPU
Потолок производительности eager-исполнения определяется фундаментальным системным несоответствием: скоростью интерпретатора на стороне хоста и скоростью кремния на стороне устройства. Налог на диспетчеризацию, который определяется как доля времени, потраченная на оркестрацию на стороне хоста (Python), относительно фактического исполнения на устройстве (GPU), количественно выражает это несоответствие.
По мере роста работы полезные вычисления опережают фиксированную стоимость диспетчеризации; налог уменьшается.
В иллюстративной модели eager-исполнения, которая здесь используется, каждая операция платит фиксированный «налог» около 15 мкс за диспетчеризацию на стороне хоста, проверку типов и запуск ядра. Фактические накладные расходы различаются в зависимости от фреймворка, бэкенда и аппаратуры, но их относительный вес все равно зависит от размера операции. Для малой операции, например ReLU на небольшом векторе, ядро может выполняться всего 1 мкс, поэтому смоделированный налог на диспетчеризацию достигает 94 процента, и GPU большую часть времени ждет следующей команды. Для крупной операции, например большого матричного умножения, ядро выполняется 100 мкс, смоделированный налог падает до 13 процентов, и система становится ограниченной вычислениями.
Налог на диспетчеризацию объясняет, почему модели со многими мелкими слоями работают заметно медленнее, чем предсказывает их сырое количество FLOP. Раздел «Диагностика узкого места» приложения «Таксономия D·A·M» помещает этот симптом в таксономию узких мест: нагрузка, которую доминирует диспетчеризация, классифицируется как ограниченная задержкой, а не вычислениями, и показано, какие оптимизации на самом деле ее сдвигают. Чтобы приблизиться к эффективному исполнению, фреймворки должны перейти от диспетчеризации ядро за ядром к исполнению на уровне графа, где налог на диспетчеризацию платится один раз за весь граф, а не за каждую операцию. Гибридные стратегии JIT и компиляции из раздела «Гибридные подходы: JIT-компиляция» нужны именно для снижения этих накладных расходов.
Накладные расходы eager-исполнения мотивируют противоположный проект: захватывать всю вычислительную задачу до исполнения любой ее части. Именно это дают статические вычислительные графы.
Статические вычислительные графы
Исполнение по статическому графу сначала определяет полный вычислительный граф как символическое представление, а затем исполняет его отдельно. Эта модель «сначала определить, потом выполнить» означает, что граф существует до того, как начнется какое-либо вычисление, и это позволяет агрессивно оптимизировать заранее. Когда весь вычислительный процесс виден до запуска ядер на устройстве, фреймворк может анализировать, преобразовывать и оптимизировать граф глобально. Такой видимости нет между отдельными eager-вызовами, если только компилятор их не захватывает. Раздел «Слияние операторов» приложения «Основы алгоритмов» разбирает каноническое глобальное преобразование, которое это дает: для элементов по байт каждый слияние цепочки из поэлементных операций в одно ядро снижает идеализированный трафик чтения и записи с до байт.
Двухфазное исполнение
Статические графы явно разделяют построение графа и его исполнение. «Статический граф TensorFlow» иллюстрирует две фазы на примере TensorFlow 1.x, который был типичным для этого подхода. Пример намеренно выполняет ту же цепочку x * 2, затем + 1, что и eager-режим из «пример ленты autograd». Арифметика остается неизменной, поэтому меняется только то, когда она выполняется: символическое определение создает заполнители и операции без вычислений, а явное исполнение запускает реальную арифметику.
Двухфазное исполнение статического графа: построение графа (символическое определение) отделено от исполнения (реальных вычислений), что позволяет оптимизировать заранее.
# Фаза 1: построение графа (символически, без вычислений)
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
# Определяем граф символически
x = tf.placeholder(tf.float32, shape=[1]) # Просто заполнитель
y = x * 2 # Не выполняется, только записывается
z = y + 1 # Выполнения все еще нет
# На этом этапе ничего не вычислено
# Фаза 2: исполнение графа (реальные вычисления)
with tf.Session() as sess:
result = sess.run(z, feed_dict={x: [1.0]})
# Теперь происходят вычисления: result = [3.0]
Компиляция статического графа отделяет построение графа от исполнения тензоров. Жизненный цикл на «Жизненный цикл исполнения статического графа» иллюстрирует это разделение фаз: символическое определение графа слева предшествует оптимизации заранее и исполнению во время работы справа.
Жизненный цикл исполнения статического графа: отделение символического определения графа (слева) от конкретного исполнения (справа) дает глобальную видимость вычислений и позволяет компиляторам применять оптимизации заранее, например слияние операторов, повторное использование буферов и преобразования раскладки, еще до того, как материализуется хоть один тензор.
Ключевое отличие от eager-исполнения в том, что во время построения x, y и z — это не тензоры со значениями, а символические узлы графа. Операторы * и + добавляют узлы преобразования в определение графа, не запуская арифметику. Вызов print(y) делает это различие видимым: он печатает символические метаданные тензора, а не числовые значения. Только когда хост вызывает sess.run(), среда анализирует, оптимизирует и исполняет захваченный граф на буферах устройства.
Оптимизация заранее
Поскольку фреймворк имеет полный граф до исполнения, он может выполнить оптимизацию заранее, недоступную для незахваченных eager-вызовов. Возможность слияния ядер, описанная в разделе «Почему стратегия исполнения важна», здесь становится действенной: поскольку фреймворк видит y = x * 2 и z = y + 1 вместе в графе, он может слить их в z = x * 2 + 1, исключив промежуточный y и вдвое сократив идеализированный трафик памяти. Когда формы и времена жизни тензоров известны, компилятор может спланировать память до исполнения и повторно использовать буферы, времена жизни которых не пересекаются. Динамические размерности могут требовать границ или выделения во время исполнения. Раскладки тензоров тоже можно преобразовывать глобально (например, из NCHW в NHWC), чтобы соответствовать предпочтениям аппаратуры, хотя физические преобразования раскладки все равно могут требовать копирования. Устранение мертвого кода (DCE)11 удаляет операции, результаты которых не используются, а свертка констант заранее вычисляет операции над константными значениями, когда их входы известны. Эти оптимизации напрямую соответствуют членам железного закона: слияние ядер снижает , избегая промежуточных записей в память; свертка констант уменьшает повторную работу; заранее спланированное выделение памяти может снизить накладные расходы во время исполнения; а устранение мертвого кода убирает работу и связанное с ней перемещение данных, когда присутствуют неиспользуемые вычисления.
Компиляторы, такие как XLA12 (Google, 2025), развивают этот подход: они компилируют захваченные подграфы в слитый машинный код, специализированный для целевой аппаратуры.
Системные следствия
Статические графы могут достигать высокой производительности благодаря оптимизации заранее. Слияние ядер снижает требования к пропускной способности памяти, когда узким местом становится промежуточный трафик, а компиляция под конкретную аппаратуру может приближаться к высокой загрузке, когда формы, операторы и раскладки совпадают с эффективными путями бэкенда.
Ценой этой производительности становится меньшая гибкость. Стандартный поток управления Python (if, for) не может зависеть от вычисленных значений тензоров в статических графах. TensorFlow предоставляет примитивы управления потоком на уровне графа (tf.cond и tf.while_loop), которые поддерживают условия, зависящие от данных. Но для них нужен особый синтаксис, отличающийся от стандартного Python, и код становится труднее писать и понимать. Отладка затруднена, потому что трассировки стека указывают на код построения графа, а не на код исполнения. Сообщения об ошибках часто ссылаются на символические имена узлов, а не на операции, которые действительно завершились неудачей.
Гибридные подходы: JIT-компиляция
JIT-компиляция одновременно обеспечивает и eager-отладку, и оптимизацию графа, захватывая вычисления во время исполнения. Основной компромисс — точность против общности. Трассировка фиксирует путь исполнения во время пробного запуска, точно воспроизводя этот путь, но пропуская ветви, которые не были выполнены. Компиляция из исходного кода (скриптинг) анализирует поддерживаемую структуру программы и сохраняет поддерживаемый поток управления, но требует ограниченного подмножества языка. Оба подхода создают промежуточное представление (IR)13, которое позволяет выполнять оптимизации графа: слияние операторов, свертку констант, устранение мертвого кода и повторное использование буферов.
Компромисс между eager-исполнением и компиляцией имеет прямое следствие для железного закона. JIT-компиляция распределяет (накладные расходы диспетчеризации) по скомпилированной области. Чем длиннее скомпилированная область, тем меньше накладных расходов приходится на одну операцию, поэтому разрывы графа критичны для производительности: каждый разрыв возвращает исполнение к eager-диспетчеризации и обнуляет эту амортизацию.
Исторически TorchScript от PyTorch служил примером обеих стратегий (PyTorch Contributors, 2026). Сейчас TorchScript объявлен устаревшим в пользу более новых путей захвата и экспорта, таких как torch.export (PyTorch Contributors, 2026; PyTorch Contributors, 2026). Тем не менее он полезен здесь как конкретная иллюстрация трассировки и скриптинга из исходного кода. Трассировка выполняет функцию на примерах входов и записывает наблюдаемые на этом пути тензорные операции. «Трассировка TorchScript» показывает, как трассированный модуль можно сериализовать и исполнять независимо от интерпретатора Python.
Трассировка TorchScript: захватывает тензорные операции, выполняя функцию на примерах входов и записывая путь исполнения в статический вычислительный граф.
import torch
def forward(x):
y = x * 2
z = y + 1
return z
# Трассируем функцию, запустив ее один раз
x_example = torch.tensor([1.0])
traced = torch.jit.trace(forward, x_example)
# traced теперь — скомпилированный модуль TorchScript
# Можно сериализовать: torch.jit.save(traced, "model.pt")
# Можно оптимизировать: слияние, свертка констант
# Можно запускать без интерпретатора Python
Критическое ограничение трассировки показывает компромисс между точностью и общностью на практике. Трассировка записывает операции наблюдаемого пути, а не сохраняет произвольный поток управления Python. «Тихий сбой трассировки» показывает возникающий риск корректности.
Трассировка ветви, зависящей от данных: трассировка записывает путь, выбранный входным примером. PyTorch обычно выдает TracerWarning, когда значение тензора преобразуется в условие Python, потому что получившаяся трасса может не обобщаться.
def conditional_forward(x):
if x.sum() > 0: # Условие, зависящее от данных
return x * 2
else:
return x * 3
traced = torch.jit.trace(conditional_forward, torch.tensor([1.0]))
# Трассировка фиксирует ТОЛЬКО ветку x.sum() > 0
# Если позже вход окажется с суммой <= 0, трассированная версия
# все равно выполнит ветку x * 2
Трассировка записывает ветку, выполненную входным примером. В этом примере преобразование условного тензора в логическое значение Python обычно дает TracerWarning, а полученная трасса все равно может следовать за зафиксированной веткой для последующих входов, которым нужна другая ветка. Поэтому, когда в Python есть управление потоком, зависящее от данных, предупреждения трассировки нужно считать ошибками корректности.
Историческая альтернатива TorchScript, скриптинг, анализировала поддерживаемый исходный код Python напрямую и компилировала его в TorchScript IR без трассировки пути на примере (PyTorch Contributors, 2026). Компилятор скриптинга сохранял поддерживаемую структуру ветвления, но принимал только ограниченное подмножество Python. Текущим проектам следует опираться на рекомендации по поддерживаемому torch.export и целевым средам исполнения, а не выбирать между трассировкой и скриптингом TorchScript для новых конвейеров развертывания (PyTorch Contributors, 2026). В исторической схеме TorchScript трассировка подходила для прямых моделей, пути тензоров которых оставались стабильными для поддерживаемых входов, а скриптинг обрабатывал поддерживаемый поток управления, зависящий от данных, без интерпретатора Python. Ключевым преимуществом скриптинга была способность сохранять поддерживаемые условия в IR, как показано в «Условный оператор TorchScript».
Скриптованный поток управления: в отличие от трассировки, скриптинг сохраняет обе ветки условных операторов в IR, что позволяет корректно исполнять код в зависимости от значений входа во время исполнения.
@torch.jit.script
def conditional_forward(x: torch.Tensor) -> torch.Tensor:
if x.sum() > 0:
return x * 2
else:
return x * 3
# Обе ветки сохранены в IR
# Нужная ветка выполняется в зависимости от значений входа во время исполнения
Скриптинг накладывал ограничения, потому что TorchScript должен был анализировать код, который Python обычно интерпретирует динамически. Сигнатурам функций и переменным иногда требовались аннотации типов, а неподдерживаемые объекты Python, вызовы библиотек или метапрограммирование могли вызвать сбой компиляции. «Исторические компромиссы трассировки и скриптинга TorchScript» суммирует этот исторический проектный компромисс, а не действующие рекомендации по развертыванию.
| Аспект | Трассировка | Скриптинг |
|---|---|---|
| Требование ко входу | Нужны примеры входов | Входы не нужны |
| Управление потоком | Не работает с условиями, зависящими от данных | Поддерживает условия, зависящие от данных |
| Простота перевода | Проще (просто запустить функцию) | Сложнее (ограниченный Python) |
| Аннотации типов | Не требуются | Требуются, когда вывод не удается |
| Обнаружение ошибок | Во время исполнения (неверные результаты) | На этапе компиляции (синтаксические ошибки) |
| Лучше всего для | Прямых сетей (feed-forward) | Моделей с условиями |
Исторические компромиссы трассировки и скриптинга TorchScript: трассировка записывала операции по примерам исполнения, а скриптинг сохранял поддерживаемый поток управления ценой ограниченного подмножества Python. TorchScript объявлен устаревшим для новых проектов.
Чтобы понять, что производит компилятор, «IR TorchScript» напрямую показывает сгенерированное промежуточное представление, где одно выражение Python превращено в явные типизированные примитивные операции, которые среда исполнения может выполнять без интерпретатора. IR TorchScript представляет операции с помощью пространства имен aten для основных тензорных операций, пространства имен prim для примитивов и управления потоком, статических типов для каждого значения и формы SSA (статическое однократное присваивание), где каждой переменной присваивается ровно одно значение, что упрощает анализ компилятором. Этот IR позволяет выполнять оптимизации, независимые от Python: слияние операторов объединяет соседние операции в одно ядро, свертка констант вычисляет константные выражения на этапе компиляции, устранение мертвого кода удаляет неиспользуемые операции, а оптимизация памяти повторно использует буферы, когда это возможно.
Инспекция IR TorchScript: сгенерированное промежуточное представление показывает примитивные операции и константы, что полезно для отладки и понимания результатов компиляции.
@torch.jit.script
def example(x: torch.Tensor) -> torch.Tensor:
return x * 2 + 1
# Инспекция сгенерированного IR:
print(example.graph)
# graph(%x : Tensor):
# %1 : int = prim::Constant[value=2]()
# %2 : Tensor = aten::mul(%x, %1)
# %3 : int = prim::Constant[value=1]()
# %4 : Tensor = aten::add(%2, %3, %3)
# return (%4)
Современная компиляция: JIT с захватом графа
Предыдущие подходы заставляют выбирать между гибким eager-исполнением и графами, видимыми компилятору. Современная JIT-компиляция сужает этот компромисс: она автоматически захватывает участки eager-кода в оптимизированные графы при ограниченном участии разработчика.
Системы JIT с захватом графа следуют одному архитектурному шаблону в разных фреймворках. Первое исполнение наблюдает тензорные операции и записывает область графа, защищенную предположениями о формах, типах данных, раскладках и пути управления. Затем эта область понижается до промежуточного представления, к ней применяются слияние и оптимизации раскладки, а исполняемый код кешируется для последующих вызовов, которые удовлетворяют тем же защитам. Неподдерживаемый код Python никуда не исчезает: он образует границу графа, где исполнение возвращается в eager-среду. torch.compile в PyTorch 2.0 (Ansel et al., 2024) — конкретный пример этого шаблона, но системная идея шире API: компиляция окупается, только когда захваченные области достаточно длинны и стабильны, чтобы амортизировать стоимость захвата, понижения, генерации кода и управления кешем.
Это объясняет, когда компиляция может помочь. Накладные расходы диспетчеризации, незаметные для одной операции (несколько микросекунд на запуск ядра), накапливаются на тысячах операций прямого прохода. Физика накладных расходов программного обеспечения в «Физика накладных расходов программного обеспечения» моделирует эту диспетчеризацию и трафик памяти.
Физика накладных расходов программного обеспечения
Связь с железным законом: Член задержки в железном законе определяется накладными расходами программного обеспечения: диспетчеризацией инструкций из Python на GPU. Каждая операция платит стоимость диспетчеризации Python около 10 мкс плюс стоимость запуска ядра около 5 мкс. Вместе они задают накладные расходы на каждый запуск, которые применяются в сценариях ниже.
Сценарий первый: eager-режим («ловушка крошечных операций») Рассмотрим простой блок активации
y = relu(x + bias), в котором каждый тензор содержит элементов по байт каждый.
- Операции: две (сложение, ReLU).
- Исполнение:
- Запуск ядра
Add: накладные расходы 15 мкс.- Чтение и запись памяти: байт.
- Запуск ядра
ReLU: накладные расходы 15 мкс.- Чтение и запись памяти: байт.
- Суммарные накладные расходы: 30 мкс.
- Суммарный трафик памяти: байт.
Сценарий второй: скомпилированный режим (слияние) Компилятор сливает это в одно ядро:
FusedAddRelu.
- Исполнение:
- Запуск слитого ядра
Fused: накладные расходы 15 мкс.- Чтение и запись памяти: байт (промежуточный результат остается на чипе).
- Суммарные накладные расходы: 15 мкс (ускорение в 2 раза).
- Суммарный трафик памяти: байт (эффективность пропускной способности в 2 раза).
Системный вывод: Слияние выигрывает сразу на двух фронтах. Объединение двух запусков в один вдвое сокращает накладные расходы диспетчеризации на операцию в этом сценарии, а удержание промежуточного результата на чипе снижает идеализированный трафик памяти с до байт. Для мелких поэлементных операций избегаемый обмен с внешней памятью может значить больше, чем арифметика.
«Налог Python» делает налог на диспетчеризацию видимым: eager-исполнение создает разрывы, в которых GPU простаивает, пока Python диспетчеризует следующее ядро. Синие области вычислений короткие, красные области диспетчеризации сравнительно длинные. Компиляция сливает эти операции в один запуск ядра, заменяя множество разрывов диспетчеризации одним блоком диспетчеризации и одним блоком слитых вычислений.
Налог Python: временные шкалы показывают, как eager-режим несет повторные накладные расходы диспетчеризации хоста () между короткими ядрами GPU, оставляя ускоритель периодически простаивающим. Компиляция сливает эти операции в один запуск ядра, устраняя промежуточные разрывы диспетчеризации и повышая загрузку аппаратуры.
Автоматизация этого слияния — цель проектирования компиляторов с захватом графа, таких как torch.compile в PyTorch 2.0.14 Они захватывают области тензорных операций eager-кода и компилируют их в слитые ядра, не требуя от инженеров писать собственный CUDA.15
Основные инженерные вопросы поэтому концептуальные, а не привязанные к конкретному API. Компилятору захвата нужен фронтенд, который находит области графа в eager-программе, промежуточное представление, которое отделяет захваченное вычисление от Python, и бэкенд, который понижает область до машинного кода конкретной аппаратуры. Ему также нужна система защит: скомпилированный артефакт остается действительным, только пока предположения о ранге тензоров, типе данных, раскладке и пути управления остаются истинными. Когда защита срабатывает, среда исполнения должна перекомпилировать код или вернуться к eager-исполнению.
Разрывы графа отмечают границу, за которой компиляция перестает применяться. Управление потоком Python, зависящее от данных, неподдерживаемые вызовы библиотек, ввод-вывод, пользовательские объекты Python и сильно меняющиеся формы укорачивают скомпилированные области. Каждый разрыв заново вводит накладные расходы диспетчеризации и может требовать перемещения тензоров между скомпилированным кодом и eager-средой. Механически разрыв графа заставляет движок захвата разбить программу на непересекающиеся скомпилированные подграфы, разделенные стандартным исполнением Python. На каждой границе промежуточные тензоры устройства нужно распаковать в объекты среды исполнения Python, и это стоит материализации памяти и накладных расходов интерпретатора, прежде чем можно войти в следующий скомпилированный подграф. Поэтому анализ разрывов графа относится к инженерии производительности: важна не сама включенность компиляции, а то, какая доля горячего пути остается внутри длинных и стабильных скомпилированных областей.
Бэкенды занимают разные точки на спектре «гибкость — производительность». JIT-компилятор трассирует выполнение модели во время работы, чтобы динамически генерировать оптимизированные ядра, и несет начальную задержку прогрева при первом проходе. Опережающий (ahead-of-time, AOT) компилятор, напротив, компилирует захваченное вычисление до развертывания, выводя компиляцию из горячего пути и позволяя автономную среду исполнения, если целевой экспорт ее поддерживает. Общий JIT-бэкенд оптимизирует обычные обучающие и обслуживающие нагрузки при умеренной стоимости компиляции. Специализированный бэкенд для вывода может применять более глубокое слияние, понижение точности и автонастройку, когда целевая платформа фиксирована. AOT-среда для мобильных или встраиваемых систем жертвует еще большей гибкостью ради объема и предсказуемости. Одно правило управляет всеми ними: чем уже цель и чем стабильнее граф, тем больше оптимизаций компилятор может безопасно выполнить.
Итоговый рабочий процесс — это системное решение. Быстрое прототипирование выигрывает от eager-исполнения, потому что изменения архитектуры и срабатывания защит делают стоимость перекомпиляции заметной. Длинные обучающие прогоны и вывод большого объема амортизируют стоимость компиляции на многих исполнениях, при условии стабильных форм и небольшого числа разрывов графа. Отладка обычно начинается в eager-режиме, потому что ошибки напрямую соответствуют исходному коду. Компиляцию вводят обратно, когда поведение модели уже корректно и узкое место производительности измеримо.
Сравнение моделей исполнения
«Компромиссы моделей исполнения» сопоставляет три модели исполнения по шести измерениям и показывает, как гибридная JIT-компиляция может вернуть оптимизацию графа внутри захваченных областей, сохраняя eager-переход за их пределами.
| Аспект | Eager + лента autograd (по умолчанию в PyTorch) | Статический граф (TensorFlow 1.x) | JIT-компиляция (torch.compile) |
|---|---|---|---|
| Модель исполнения | Немедленная | Отложенная | Гибридная |
| Построение графа | Во время прямого прохода | До исполнения | При первом исполнении (кешируется) |
| Оптимизация | Ядра для каждой операции | Заранее | JIT-компиляция |
| Динамическое управление потоком | Управление потоком Python | Управление потоком графа | Захваченные области или разрывы |
| Отладка | Легко (стандартный Python) | Сложно (символическая) | Средне (смешанная) |
| Производительность | Базовая | Высокая (оптимизированная) | Высокая (скомпилированные области) |
Компромиссы моделей исполнения: каждая модель исполнения занимает свое место в пространстве компромиссов между гибкостью и оптимизацией. Eager-исполнение максимизирует гибкость отладки, но ограничивает оптимизацию между операциями. Статические графы максимизируют оптимизацию, но требуют представлять управление потоком в графе. Гибридная JIT-компиляция компилирует захваченные области и переходит к eager-исполнению для неподдерживаемых паттернов.
Основная ценность eager-режима — в цикле итераций, который количественно описан в разделе «Жизненный цикл ML» главы «Рабочий процесс машинного обучения»: он позволяет использовать стандартные отладчики Python (например, pdb), чтобы проверять переменные во время исполнения, тогда как отладка графового режима часто требует специальных инструментов фреймворка. Эта немедленная обратная связь ускоряет этап прототипирования в жизненном цикле ML.
Помимо этих основных компромиссов исполнения, «Дополнительные компромиссы графов» выделяет дополнительные системные различия между статическим и динамическим подходами.
| Аспект | Статические графы | Динамические графы |
|---|---|---|
| Управление памятью | Точное планирование выделения, оптимизированное использование памяти | Гибко, но потенциально менее эффективно |
| Использование аппаратуры | Может генерировать сильно оптимизированный код под конкретную аппаратуру | Может жертвовать оптимизациями под конкретную аппаратуру |
| Скорость исследований | Медленнее итерации из-за требования «сначала определить, потом выполнить» | Быстрее прототипирование и эксперименты с моделями |
| Интеграция с унаследованным кодом | Больше разделения между определением и исполнением | Естественная интеграция с императивным кодом |
Дополнительные компромиссы графов: системные различия между статическими и динамическими графами, которые дополняют «Компромиссы моделей исполнения». Эти компромиссы снова появляются при выборе фреймворка в разделе «Выбор фреймворка».
Эти компромиссы не сводятся к бинарному выбору. Современные фреймворки предлагают спектр вариантов исполнения, что порождает количественный вопрос: в какой точке этого спектра должен работать данный проект.
Количественные принципы исполнения
Эти модели исполнения образуют спектр, и два количественных принципа делают выбор измеримым на практике. Принцип непрерывности компиляции спрашивает, когда выигрыш от компиляции оправдывает стоимость разработки, сравнивая производственные исполнения с итерациями разработки. Закон накладных расходов диспетчеризации показывает, почему eager-исполнение может тратить на диспетчеризацию мелких операций больше времени, чем на их вычисление.
Принцип непрерывности компиляции
Проблема исполнения требует количественного принципа: когда проекту стоит компилироваться. Модели исполнения образуют непрерывность от максимальной гибкости до максимальной оптимизации. «Непрерывность исполнения» задает четыре позиции на этой оси, а каждая стрелка с подписью называет механизм, который переносит проект на один шаг вправо, к аппаратуре.
Каждый шаг вправо жертвует гибкостью ради производительности. Практический вопрос в том, где на этой непрерывности должен находиться проект. Оптимальная стратегия компиляции зависит от производственных исполнений, повторных компиляций при разработке и их времени, которые объединяются в уравнении («Польза компиляции»):
где:
- = число производственных исполнений (безразмерный счетчик: запросы вывода, шаги обучения)
- = число итераций разработки, требующих перекомпиляции (безразмерный счетчик)
- = время одного исполнения в eager-режиме (секунды)
- = время одного исполнения в скомпилированном режиме (секунды)
- = время одной компиляции или перекомпиляции (секунды; считается постоянным)
Эта модель предполагает, что скомпилированный артефакт остается действительным между изменениями при разработке и что первичная компиляция и каждая перекомпиляция имеют одинаковую стоимость. При этих допущениях правило решения такое: компилировать, когда . Отношение безразмерно.
«Иллюстративная пропускная способность обучения и вывода» приводит гипотетический сценарий пропускной способности для разных режимов исполнения и архитектур моделей:
| Модель | Eager (примеров/с) | torch.compile (примеров/с) | TensorRT (примеров/с) | Время компиляции (с) |
|---|---|---|---|---|
| ResNet-50 | 1 450 | 2 150 | 3 800 | 15–30 |
| BERT-Base | 380 | 520 | 890 | 30–60 |
| ViT-B/16 | 620 | 950 | 1 650 | 25–45 |
| GPT-2 (124M) | 180 | 260 | 420 | 45–90 |
Иллюстративная пропускная способность обучения и вывода: гипотетические значения пропускной способности и времени компиляции для сравнения режимов исполнения на GPU NVIDIA A100 с размером батча 32. Эти значения — допущения, а не результаты измерений. В рамках этого сценария таблица подразумевает ускорение torch.compile в 1,4–1,5 раза относительно eager-режима, тогда как TensorRT — в 2,3–2,7 раза, но требует более долгой компиляции и применим только к выводу.
Эти различия пропускной способности между режимами исполнения ставят практический вопрос: какая стратегия исполнения фреймворка лучше всего обслуживает каждый архетип нагрузки. Подходящая стратегия зависит от нагрузки, бэкенда и доминирующего члена железного закона. «Стратегия исполнения фреймворка по типу нагрузки» сопоставляет каждый повторяющийся архетип с кандидатной стратегией исполнения.
| Архетип | Доминирующий член железного закона | Кандидатная стратегия фреймворка | Обоснование |
|---|---|---|---|
| ResNet-50 («вычислительный зверь») | (вычисления) | Скомпилированные плотные ядра | Регулярные плотные ядра выигрывают от выбора раскладки, снижения точности и специализации под бэкенд; слияние полезнее всего в окружающих областях, ограниченных памятью или запуском |
| GPT-2 («пожиратель полосы пропускания») | (пропускная способность памяти) | Слитое внимание + компиляция графа | Слитое внимание и компиляция сокращают обмены с HBM и улучшают повторное использование кеша |
| DLRM («разреженный разброс») | Eager-исполнение со специализированными ядрами | Поиски по таблице эмбеддингов по природе нерегулярны и динамичны; выигрыш от компиляции мал | |
| DS-CNN («жесткое ограничение») | (накладные расходы) | AOT-среда исполнения для микроконтроллера | Вывод менее 1 мс; каждая микросекунда накладных расходов Python недопустима |
Стратегия исполнения фреймворка по типу нагрузки: кандидатные стратегии исполнения для каждого архетипа нагрузки, согласованные с доминирующим членом железного закона.
Стратегия фреймворка по архетипам
Четыре повторяющихся архетипа в «Стратегия исполнения фреймворка по типу нагрузки» выражают один принцип для всего фреймворка: выгода от компиляции растет вместе с тем, какая доля нагрузки поддается оптимизации.
Системный вывод: в иллюстративном сценарии вычислительные звери, такие как строка ResNet-50 в «Иллюстративная пропускная способность обучения и вывода», выигрывают, потому что их плотные ядра открывают большой простор для выбора раскладки, снижения точности и слияния. Нагрузки с разреженной выборкой, такие как DLRM, могут выиграть меньше, когда нерегулярные поиски по таблице эмбеддингов оставляют компилятору ограниченную область для работы.
Из этого принципа следуют конкретные выводы для трех режимов. В исследовательском прототипировании () командам стоит оставаться в eager-режиме. Если архитектура меняется каждые несколько минут, накладные расходы компиляции могут доминировать. При допущении сценария о 30-секундной компиляции десять компиляций в час съедают пять минут.
Для длинных обучающих прогонов () компиляция может окупиться, потому что ее разовая стоимость амортизируется на многих шагах. В гипотетическом сценарии ResNet-50 из «Иллюстративная пропускная способность обучения и вывода» torch.compile дает на 48,3 процента большую пропускную способность (2 150 изображений в секунду против 1 450). При стоимости компиляции 30 с из сценария это окупается в точке безубыточности по уравнению («точка окупаемости компиляции»):
Подставив гипотетические значения ResNet-50 в «точка окупаемости компиляции», получаем около 134 000 изображений. Это укладывается в один обучающий прогон любой реалистичной длины.
Для промышленного вывода (, ) командам стоит максимизировать компиляцию. Без итераций разработки и при потенциально миллионах запросов важна каждая оптимизация. Агрессивная автонастройка может оказаться выгодной, даже когда компиляция занимает гораздо больше времени, потому что стоимость амортизируется на протяжении жизни развертывания.
Эти три режима создают отдельные области в пространстве решений о компиляции. «Непрерывность компиляции» показывает эти области, чтобы инженеры могли определить, где выигрывает каждая стратегия. Точки пересечения отмечают, где каждая стратегия становится оптимальной: крутую кривую eager-режима (самая высокая стоимость на исполнение) обгоняет умеренный наклон JIT, а пологая траектория скомпилированного режима (самая низкая стоимость на исполнение, но самые большие первоначальные вложения) доминирует при больших объемах исполнений. Наклоны показывают стоимость на исполнение; вертикальные смещения показывают накладные расходы компиляции. Объем исполнений проекта и измеренные стоимости определяют, какая стратегия минимизирует общее время.
Непрерывность компиляции: иллюстративная модель стоимости показывает, как разовая стоимость компиляции и стоимость на исполнение создают области пересечения eager-, JIT- и AOT-режимов по мере роста числа производственных исполнений. Положение точек пересечения зависит от предполагаемых стоимостей компиляции и скоростей на исполнение.
Закон накладных расходов диспетчеризации
Второй принцип, закон накладных расходов диспетчеризации, следует из «накладные расходы диспетчеризации». Он определяет режим, в котором накладные расходы фреймворка, а не вычисления или память, доминируют во времени исполнения. Пусть — число операций (счетчик), — накладные расходы диспетчеризации на операцию (секунды), а и — полное время вычислений и памяти (секунды). Отношение использует аддитивное приближение без перекрытия . Когда исполнение перекрывает эти затраты, вместо их суммы следует подставлять измеренное аппаратное время. Накладные расходы фреймворка доминируют, когда операции малы относительно стоимости диспетчеризации:
Когда коэффициент накладных расходов , модель ограничена накладными расходами. Компиляция может дать наибольший выигрыш для нагрузок, ограниченных накладными расходами, потому что слияние сокращает число диспетчеризаций. Трасса шага обучения в разделе «Анатомия шага обучения» разбирает этот эффект от начала до конца, предваряя его числами, которые приведены ниже.
Суммарно по операциям стоимость диспетчеризации на операцию накапливается в налог на каждый вызов, который платится при исполнении. Доминирует ли этот налог, зависит от того, как время исполнения аппаратуры соотносится с программными накладными расходами (оба в секундах). Режимы резко разделяются по размеру модели. Нагрузки из мелких операций непропорционально выигрывают от компиляции, когда диспетчеризация доминирует над исполнением. Одно лишь число параметров модели выигрыш не определяет. В разборе «Налог на диспетчеризацию» сравниваются малый многослойный перцептрон и большой слой трансформера, чтобы количественно определить, когда систему ограничивают накладные расходы хоста, а когда арифметика устройства.
Налог на диспетчеризацию
Задача: когда накладные расходы Python губят производительность?
Сценарий первый: малый многослойный перцептрон (MLP) (ограничен накладными расходами)
- Вычисления: 6 операций над малыми матрицами и поэлементными операциями.
- Время аппаратуры: 2,6 мкс (в основном задержка памяти).
- Программные накладные расходы: 6 операций 15 мкс на операцию = 90 мкс.
- Отношение: 90 мкс / 2,6 мкс ≈ 34,6.
- Итог для малой модели: система тратит 97 процентов времени на накладные расходы диспетчеризации хоста и запуска ядер. Устранение всех смоделированных накладных расходов диспетчеризации дало бы верхнюю оценку ускорения в 35,6 раза.
Сценарий второй: слой GPT-3 (ограничен вычислениями)
- Вычисления: огромные матричные умножения.
- Время аппаратуры: 100 мс = 100 000 мкс.
- Программные накладные расходы: .
- Отношение: 50 мкс / 100 000 мкс ≈ 0,0005.
- Итог для большой модели: смоделированные накладные расходы Python ничтожны. Компиляция может все равно улучшить слияние, раскладку или специализацию бэкенда, но устранение диспетчеризации дает мало.
Системный вывод: накладные расходы диспетчеризации зависят от режима. Компиляция может снизить накладные расходы на стороне хоста для нагрузок из мелких операций, сливая их в меньшее число запусков, тогда как большие модели выигрывают в основном от слитых ядер и сокращения перемещения данных.
Анализ налога на диспетчеризацию показывает, что мелкие операции становятся ограниченными накладными расходами, когда задержка диспетчеризации превышает время исполнения на устройстве. Это системное ограничение достигает логического предела на краю спектра развертывания, где объем памяти и задержка среды исполнения Python превышают физическую емкость целевой аппаратуры.
Фреймворки для периферии: TinyML и микросреды исполнения
Непрерывность компиляции достигает крайней точки на дальней периферии. Облачные фреймворки, такие как PyTorch и TensorFlow 2.x, отдают приоритет гибкости через eager-исполнение. Системы TinyML16 на МК с килобайтами памяти не могут позволить себе накладные расходы интерпретатора Python или полностью динамической среды исполнения.
Маячный пример: KWS на TinyML
Сценарий: развертывание модели распознавания ключевых слов (KWS) для «умного дверного звонка», маячной модели DS-CNN с «жестким ограничением», на ARM Cortex-M4 с 256 КБ ОЗУ и 1 МБ флэш-памяти.
Ограничение: полный стек PyTorch и Python превышает бюджет памяти устройства на порядки.
Решение фреймворка: Микрофреймворки, такие как TensorFlow Lite Micro (TFLM) (David et al., 2021), решают эту задачу с помощью крошечной среды исполнения на основе интерпретатора с жесткой дисциплиной памяти:
- Фиксированная арена памяти: приложение предоставляет непрерывную арену тензоров. Фреймворк планирует буферы в этой арене и повторно их использует, не полагаясь на динамическое выделение памяти во время вывода.
- Выбор ядер: в среду исполнения нужно связать или зарегистрировать только те конкретные ядра, которые использует модель (например, Conv2D, DepthwiseConv).
- Компактное исполнение интерпретатором: МК исполняет небольшой интерпретатор на C/C++ над плоским представлением модели. Модель и арена связываются при инициализации, а не собираются динамически во время работы.
Кремниевый контракт: на устройствах TinyML контракт строго ограничен памятью. Главная задача фреймворка — убедиться, что промежуточные активации модели («рабочий набор») помещаются в крошечную SRAM микроконтроллера.
Эти микросреды жертвуют динамической гибкостью ради меньшего объема и предсказуемой памяти. При компактных моделях, маломощном железе и циклическом включении эта дисциплина позволяет вывод на уровне милливатт с преимущественно внутрикристальным перемещением данных.
Спектр стратегий исполнения, от динамического eager-исполнения через статическую компиляцию графа до специализированных микросред, требует от разработчиков осознанных компромиссов. Ключевые решения о режиме исполнения подытоживают эти архитектурные выборы:
Модели исполнения
Выбор режима исполнения определяет и скорость разработки, и производительность модели.
Отладка против скорости
- Eager-режим (сначала Python): почему выполнение операций по одной делает отладку легкой, а оптимизацию трудной?
- Графовый режим (сначала компилятор): почему построение статического графа позволяет сливать ядра?
Современный компромисс
- JIT-компиляция: как
torch.compileзакрывает разрыв?- Оценка накладных расходов диспетчеризации: если шесть операций несут каждая налог на диспетчеризацию из главы, 15 мкс на операцию, а работа аппаратуры занимает 2,6 мкс, какой член доминирует?
Проблема исполнения определяет, когда происходит вычисление и какие оптимизации возможны. Однако обучение нейронных сетей требует возможности, которую не даст никакое умное планирование: способности вычислять градиенты автоматически.
Посмотрим, что на самом деле требуется для обучения: для каждого из миллионов параметров нужно вычислить, как крошечное изменение повлияло бы на функцию потерь. Делать это вручную даже для простой трехслойной сети означает вывести и реализовать десятки частных производных. Для современного трансформера с миллиардами параметров ручное дифференцирование экономически невозможно. Фреймворк, который эффективно исполняет вычисления, но не умеет дифференцировать, может выполнять вывод, но не может учиться.
Проблема дифференцирования
Проблема дифференцирования — это задача автоматического вычисления градиентов17. Обучение нейронной сети требует производных скалярной функции потерь по миллионам или миллиардам параметров. При исполнении прямого прохода среда записывает ленту исполнения и сохраняет буферы промежуточных активаций для последующих вычислений производных. Поскольку одна скалярная функция потерь зависит от многих параметров, автоматическое дифференцирование (AD) в обратном режиме18 эффективно: один обратный проход вычисляет все нужные градиенты по параметрам, тогда как восстановление того же полного градиента прямым режимом требует одного направления касательной на каждый параметр. Поэтому основные ML-фреймворки для обычного обучения с одной скалярной функцией потерь используют AD в обратном режиме (Baydin et al., 2018).
Опираясь на алгоритм обратного распространения ошибки, введенный в разделе «Вычисления в нейронных сетях», системная инженерия дифференцирования отвечает на вопрос, как фреймворки представляют вычислительные графы, управляют памятью промежуточных значений и эффективно организуют обратный проход на ускорителях. Фреймворк механизирует правило цепочки как крупномасштабную системную бухгалтерию: он отслеживает зависимости операторов, подготавливает буферы активаций и диспетчеризует ядра обратного прохода для алгоритмов обучения, подробно описанных в главе «Обучение моделей». «Пример автоматического дифференцирования» иллюстрирует основную идею на простой функции из трех операций.
Автоматическое дифференцирование: AD раскладывает сложные функции на элементарные операции с известными локальными производными, что позволяет фреймворкам применять правило цепочки к записанному графу операций.
def f(x):
a = x * x # Квадрат
b = sin(x) # Синус
c = a * b # Произведение
return c
Фреймворки раскладывают эту функцию на элементарные операции, у каждой из которых есть известная локальная производная, а затем комбинируют эти локальные производные по правилу цепочки, чтобы вычислить градиенты через поддерживаемые композиции. Системная задача — выполнить это преобразование в условиях физических ограничений аппаратуры. Фреймворк должен записывать граф вычислений во время прямого исполнения, сохранять нужные промежуточные тензоры в памяти устройства и планировать ядра обратного прохода, не исчерпав HBM ускорителя. Промышленные среды исполнения решают эти задачи структурированной записью графа, кешируемыми аллокаторами и обходом в обратном режиме.
Прямой и обратный режимы автоматического дифференцирования
Автоматическое дифференцирование работает в двух различных направлениях обхода: прямом и обратном режимах. Выбор между ними определяет, масштабируется ли стоимость вычисления градиента с числом входных или выходных измерений. Поскольку функции потерь в глубоком обучении вычисляют одну скалярную величину по отношению к миллионам или миллиардам параметров, эта математическая асимметрия задает объем памяти и расписание исполнения фреймворка.
Прямой режим
Автоматическое дифференцирование в прямом режиме вычисляет направленные производные одновременно с самой функцией (первичным значением). Для каждой промежуточной переменной среда вычисляет и первичное значение , и его направленную производную (касательную) . Поскольку касательные текут вниз по графу вместе с первичными значениями, прямой режим не требует ленты исполнения и никогда не сохраняет прямые активации для последующего обратного прохода.
Чтобы увидеть механизм конкретно, рассмотрим вычисление значения и производной . «Пример прямого режима AD» показывает, как прямой режим вычисляет локальные правила дифференцирования вместе с каждой элементарной операцией, применяя правила цепочки и произведения на каждом шаге:
Прямой режим AD: распространяет производные вперед по вычислительному графу, вычисляя одну направленную производную на каждый засеянный прямой проход.
def f(x): # Вычисляем одновременно значение и производную
# Шаг 1: x -> x²
a = x * x # Значение: x²
da = 2 * x # Производная: 2x
# Шаг 2: x -> sin(x)
b = sin(x) # Значение: sin(x)
db = cos(x) # Производная: cos(x)
# Шаг 3: комбинируем по правилу произведения
result = a * b # Значение: x² * sin(x)
dresult = a * db + b * da # Производная: x²*cos(x) + sin(x)*2x
return result, dresult
Прямой режим реализует эту парную трассировку через дуальные числа: значения вида , где . Вычисление арифметического оператора или элементарной функции над дуальными числами автоматически дает обновленные первичное значение и касательную без хранения графа. «Пример трассировки дуальных чисел» демонстрирует эту трассировку, вычисленную при с затравкой :
Трассировка дуальных чисел: функция прямого режима из «пример прямого режима AD», вычисленная при . Каждая строка хранит значение и его производную, поэтому один проход дает и , и .
x, dx = 2.0, 1.0 # затравка: отслеживаем производную по x
a = x * x # значение: 4.0
da = 2 * x # производная: 4.0
b = sin(x) # значение: 0.9093
db = cos(x) # производная: -0.4161
c = a * b # значение: 3.637
dc = a * db + b * da # производная: 1.973
Один прямой проход с засеянным вектором касательной вычисляет произведение Якобиана на вектор (JVP), , где — матрица Якобиана. Когда целевая функция отображает входных параметров в одну скалярную функцию потерь (), для восстановления полного градиента нужно поочередно задавать равным каждому из стандартных базисных векторов. Поэтому восстановление градиентов прямым режимом требует различных прямых вычислений (или распространения -мерных пучков касательных), и стоимость вычислений и трафик памяти масштабируются как по числу параметров. Для сетей с миллионами или миллиардами параметров такое масштабирование делает вычисление градиента прямым режимом неразрешимым. Прямые JVP остаются очень полезными, когда входных измерений мало, или для вычисления направленных производных и произведений гессиана на вектор.
Обратный режим
Автоматическое дифференцирование в обратном режиме меняет порядок обхода, чтобы использовать геометрию «многие к одному», характерную для обучения нейронных сетей. Вместо распространения касательных вниз от входов обратный режим распространяет сопряженные величины вверх от скалярной функции потерь ко всем параметрам. Математически прямой режим вычисляет произведения Якобиана на вектор (), а обратный режим вычисляет векторно-якобиановы произведения (VJP), . Если затравить обратный проход значением , за один обратный проход получается полный вектор градиента параметров , независимо от того, содержит ли модель десять параметров или десять миллиардов.
Обратный режим работает с той же функцией из трех операций из «пример автоматического дифференцирования», где достигает выхода по двум различным вычислительным путям: через квадрат и через синус. «Алгоритм обратного режима» задает алгоритм обхода в обратном режиме над ориентированным ациклическим графом, прежде чем проследить это конкретное вычисление.
Алгоритм. Автоматическое дифференцирование в обратном режиме
Вход: ориентированный ациклический граф со скалярным выходом y; узлы v_1, …, v_n в топологическом порядке; локальное правило производной для каждого узла
Выход: сопряженные величины adj[v_i] = ∂y/∂v_i для запрошенных входных или параметрических узлов
для i = 1 … n:
вычислить v_i, записать зависимости и сохранить значения, которые нужны его правилу производной ▷ прямой проход
конец для
adj[v_i] ← 0 для всех i; adj[y] ← 1
для i = n … 1:
для каждого родителя u узла v_i:
adj[u] ← adj[u] + adj[v_i] · ∂v_i/∂u ▷ накопление по правилу цепочки
конец для
освободить сохраненные значения, как только выполнены все правила, которые в них нуждаются
конец для
вернуть сопряженные величины для запрошенных узлов
Алгоритмическая структура «Алгоритма обратного режима» раскрывает его системную цену. Прямой проход записывает зависимости операторов и буферизует промежуточные значения, которые нужны правилам обратного прохода, пока обратный обход их не использует. Обратный режим обменивает хранение активаций и бухгалтерию графа на проходы градиента, число которых не зависит от числа параметров: .
Для конкретной функции из «пример автоматического дифференцирования» при прямой проход записывает , и . Затравив , правило произведения дает сопряженные величины и . Ветвь квадрата вносит в вклад , а ветвь синуса — вклад . Сложив оба пути, получаем точную производную .
Этот единственный обратный обход вычисляет независимо от того, сколько путей ветвления соединяют с . В глубокой нейронной сети каждый тензор весов влияет на скалярную функцию потерь через тысячи расходящихся путей через последовательные слои. Обратный режим собирает все входящие сопряженные величины за один обратный проход. Именно эта эффективность делает вычислимым обучение модели с 175 млрд параметров, такой как GPT-3: обратному режиму нужно обратных проходов относительно числа параметров.
Выполнение этого обхода в аппаратуре раскрывает физическое ограничение: вычисление локальных производных в обратном проходе требует рабочей точки, установленной во время прямого исполнения. Поэтому фреймворк должен решать, какие прямые тензоры сохранять в памяти устройства, когда их выделять и когда освобождать. Современные фреймворки управляют этим жизненным циклом через динамические вычислительные графы и накопление градиентов.19
«Пример обратного режима в нейронной сети» иллюстрирует эти требования на двухслойной сети: прямой проход сохраняет промежуточные активации, а обратный проход их потребляет, чтобы вычислить градиенты параметров.
Обратный режим в нейронной сети: прямой проход вычисляет и сохраняет промежуточные значения; обратный проход проходит вычисление в обратном порядке, чтобы получить градиенты для каждого параметра.
def simple_network(x, w1, w2):
hidden = x * w1 # Первый слой
activated = max(0, hidden) # Активация ReLU
output = activated * w2 # Второй слой
return output
# --- Прямой проход сохраняет промежуточные значения ---
x, w1, w2 = 1.0, 2.0, 3.0
hidden = x * w1
activated = max(0, hidden)
output = activated * w2
# --- Обратный проход их использует ---
d_output = 1.0 # Затравочный градиент
d_w2 = activated # = 2.0
d_activated = w2 # = 3.0
d_hidden = d_activated * (1 if hidden > 0 else 0) # Затвор ReLU: 3.0
d_w1 = x * d_hidden # = 3.0
d_x = w1 * d_hidden # = 6.0
Из этого примера следуют три требования к реализации. Во-первых, фреймворк должен отслеживать зависимости между операциями, чтобы определить правильный порядок обратного обхода. Во-вторых, промежуточные значения (hidden, activated) должны сохраняться в памяти устройства, пока обратный проход их не использует. Математически это сохранение необходимо, потому что правило цепочки вычисляет локальные производные в рабочей точке прямого прохода: например, для вычисления нужна предактивация , а для вычисления градиента весов плотного слоя нужен тензор входных активаций прямого прохода. В-третьих, каждая операция нуждается и в прямой реализации, и в соответствующем правиле обратного прохода. Эти требования задают инженерную поверхность автоматического дифференцирования, где сохранение памяти активаций составляет главное ограничение масштабирования.
Стратегии управления памятью
Модель с 175 млрд параметров в FP16 требует 350 ГБ только под веса, что превышает физическую память любого отдельного ускорителя. Автоматическое дифференцирование в обратном режиме усиливает это давление на память, сохраняя зависящие от операций прямые активации для правил обратного прохода. В иллюстративной сети из 100 слоев, обучаемой с размером батча 64, сохраненные активации добавляют 8–12 ГБ наряду с весами, градиентами и состояниями оптимизатора. Объем памяти, а не сырая производительность с плавающей запятой, часто определяет границу осуществимости обучения.
Этот объем сохраненных активаций накапливается по последовательным слоям. «Пример сохранения активаций по слоям» показывает, как каждый прямой слой добавляет тензор активации, который должен сохраняться до тех пор, пока обратный проход не дойдет до этого слоя.
Сохранение активаций по слоям: отмеченные промежуточные значения — это значения, сохраняемые для обратного прохода. Пиковый объем памяти сохраненных активаций зависит от их числа и размеров.
def deep_network(x, w1, w2, w3):
# Прямой проход: нужно сохранять промежуточные значения
hidden1 = x * w1
activated1 = max(0, hidden1) # Сохранить для обратного прохода
hidden2 = activated1 * w2
activated2 = max(0, hidden2) # Сохранить для обратного прохода
output = activated2 * w3
return output
Фреймворки смягчают эту стену памяти двумя основными архитектурными стратегиями. Первая — пересчет активаций, или контрольные точки активаций (gradient checkpointing): вместо буферизации каждой промежуточной активации среда сохраняет только выбранные тензоры на границах сегментов и пересчитывает отброшенные промежуточные значения по требованию во время обратного прохода. Основной системный механизм — контракт среды исполнения: фреймворк помечает граничные активации как постоянные и регенерирует промежуточные значения, когда обратное исполнение доходит до этого сегмента. Раздел «Механика накопления градиентов и контрольных точек» главы «Обучение моделей» описывает политики размещения, которыми разбиваются сети. «Пересчет при контрольных точках» иллюстрирует этот контракт: прямой проход сохраняет только границы сегментов, а обратный проход заново исполняет сегмент прямого прохода, чтобы регенерировать активации вместо их загрузки из глобальной памяти.
Контрольные точки активаций: прямой проход сохраняет только границы сегментов; обратный проход заново запускает каждый сегмент, чтобы регенерировать отброшенные активации, обменивая пересчет на память.
# Стандартный обратный проход: каждая активация прямого прохода остается в памяти
h1 = layer1(x) # сохраняется для обратного прохода
h2 = layer2(h1) # сохраняется для обратного прохода
out = layer3(h2) # сохраняется для обратного прохода
# С контрольными точками: сохраняем только границу h1, h2 отбрасываем. Обратный
# проход заново запускает обернутый сегмент, чтобы по требованию регенерировать
# h2, вместо того чтобы держать его в памяти.
h1 = layer1(x) # граница: сохраняется
out = checkpoint(
lambda a: layer3(layer2(a)), h1
) # h2 пересчитывается в обратном проходе
Вторая стратегия — слияние операций.20 Вместо того чтобы исполнять умножение матриц, добавление смещения и функции активации отдельными ядрами, которые записывают промежуточные тензоры в глобальную память ускорителя (HBM), компиляторы сливают совместимые операторы в одно ядро. Оно передает промежуточные значения через регистры или разделяемую память на чипе.
Сам обратный проход опирается на специализированные ядра, оптимизированные под аппаратуру. Вместо того чтобы синтезировать обратные проходы из наивных элементарных операций, фреймворки вызывают настроенные ядра обратного прохода (например, примитивы cuDNN), которые оптимизируют шаги доступа к памяти и использование регистров на аппаратуре ускорителя (Chetlur et al., 2014). Сочетание контрольных точек, слияния ядер и специализированных ядер обратного прохода позволяет обучать большие архитектуры в пределах физических ограничений памяти ускорителя, не вызывая сбоев из-за нехватки памяти.
Реализация автоматического дифференцирования во фреймворке
Контрольные точки, слияние и специализированные ядра решают физические узкие места автоматического дифференцирования, но промышленные фреймворки скрывают эти механизмы за высокоуровневыми циклами обучения. Стандартный шаг PyTorch — optimizer.zero_grad(), прямой проход, loss.backward() и optimizer.step() — выглядит как четыре последовательных вызова. За этим интерфейсом среда строит и обходит динамические вычислительные графы, выделяет и освобождает промежуточные буферы, планирует обратные ядра по потокам CUDA и управляет численной точностью. Та же машинерия графа поддерживает производные второго порядка через вложенные вызовы torch.autograd.grad и автоматическую смешанную точность через autocast, который диспетчеризует ядра пониженной точности, сохраняя мастер-веса FP32.
Внутреннее устройство autograd в PyTorch
Система autograd — это движок, который решает проблему дифференцирования, введенную в разделе «Три проблемы фреймворков». Три системных принципа определяют ее устройство: структура данных, которая позволяет эффективно вычислять градиенты, стоимость памяти для поддержания этой структуры и механизмы управления, которые нужны производственным рабочим процессам. Разбор этих принципов проясняет, почему память обучения существенно превышает память вывода для одинаковых архитектур, и как фреймворки управляют этими накладными расходами.
Структура графа с обратными ссылками
Во время прямого прохода autograd динамически строит направленный ациклический граф объектов Node (или Function). Каждый узел инкапсулирует логику обратного дифференцирования оператора и хранит ссылки на тензоры, необходимые для вычисления его векторно-якобиановых произведений. Поскольку ребра указывают назад, от выходов ко входам, движок начинает топологический обход сразу после получения сопряженной величины скалярной функции потерь.
Каждый тензор, созданный дифференцируемой операцией, содержит атрибут grad_fn, который ссылается на Function, вычислившую его. Каждая Function связана с предшествующими узлами через список next_functions, образуя цепочку от скалярной функции потерь к листовым тензорам параметров. «Цепочка grad_fn» проверяет эту цепочку указателей для простого составного вычисления:
Граф с обратными связями: grad_fn каждого тензора ссылается на Function, которая его создала. Так образуется обратная цепочка от выхода до листовых параметров, что позволяет выполнять обратные проходы за .
import torch
x = torch.tensor([2.0], requires_grad=True)
y = x * 3
z = y.pow(2)
# Обходим граф с обратными связями
print(z.grad_fn) # PowBackward0
print(z.grad_fn.next_functions) # -> MulBackward0
print(
z.grad_fn.next_functions[0][0].next_functions
) # -> AccumulateGrad (листовой)
Проверка показывает путь обхода: PowBackward0 (от z = y.pow(2)) ссылается на MulBackward0 (от y = x * 3), который завершается на AccumulateGrad для листового тензора параметра x. Листовые тензоры — это стоки графа, куда накопленные градиенты записываются прямо в буфер .grad, а не распространяются дальше. Формат кортежа (Function, index) отслеживает конкретный индекс выхода для операций с несколькими выходами.
Эта структура с обратными ссылками накладывает фундаментальное ограничение на память: топология графа и все ссылающиеся на него тензоры прямого прохода должны оставаться в памяти устройства, пока обратный обход не выполнит соответствующие узлы. Метаданные графа (указатели и описатели узлов) занимают минимум памяти, но буферы тензоров, на которые они ссылаются, могут потреблять гигабайты емкости ускорителя, масштабируясь напрямую с глубиной модели и размером батча.
Компромисс между памятью и вычислениями
Каждая прямая активация, сохраненная для обратного прохода, остается закрепленной в памяти устройства до тех пор, пока не исполнится соответствующее правило дифференцирования. Эти сохраненные активации — главный источник накладных расходов памяти при обучении: они умножают объем весов, градиентов и состояний оптимизатора. Поскольку разные операции требуют разных прямых тензоров (например, умножение матриц требует входных активаций, а поэлементный ReLU — только знака предактивации), точный профиль памяти зависит от семантики оператора.
Иллюстративный пик обучения многократно превышает одно лишь хранение весов.
Рассмотрим иллюстративный сценарий обучения ResNet-50 с 25,6 млн параметров (около 102,4 МБ весов FP32), размером батча 64 и изображениями . При 8–12 ГБ сохраненных активаций градиенты добавляют около 102,4 МБ, а два буфера моментов оптимизатора Adam (Adaptive Moment Estimation) в FP32 добавляют около 204,8 МБ. Сложив эти четыре компонента, получаем сценарий обучения в 8,4–12,4 ГБ, что примерно в 82,1–121,2 раза превышает объем одних весов FP32. Эта метрика отражает пиковую память обучения, в отличие от памяти вывода, которой не нужны состояния оптимизатора, градиенты и буферы активаций обратного прохода.
Это расхождение показывает, почему емкость обучения ускорителя нельзя вывести только из числа параметров. Полная память обучения подчиняется четырехкомпонентной формуле () плюс накладные расходы аллокатора, как выведено в разделе «Истинная стоимость памяти обучения» приложения «Основы алгоритмов».
Фреймворки предоставляют три управляющих механизма на уровне графа для этого компромисса. Градиентные контрольные точки (Chen et al., 2016) меняют то, что граф сохраняет: движок хранит только грубые границы сегментов и регенерирует промежуточные активации во время обратного прохода. В терминах железного закона контрольные точки увеличивают число арифметических операций (), чтобы сократить объем памяти и объем переносов (). Отсоединение тензоров — дополнительная оптимизация: вызов .detach() убирает тензор из отслеживания autograd, не давая движку сохранять активации на восходящих путях графа. Это важно при переносе обучения, где замороженные экстракторы признаков не требуют вычисления градиентов, что исключает ненужное хранение активаций (). Смешанная точность обучения дает третий рычаг: представление активаций и весов в 16-битных форматах напрямую вдвое сокращает объем тензоров (), одновременно ускоряя арифметику на тензорных ядрах (). Глава «Обучение моделей» переводит эти механизмы графа в решения о размере кластера.
Расширяемость и управление
Промышленные системы обучения требуют детального контроля над распространением градиентов сверх стандартных обратных проходов. На практике нагрузки требуют трех основных возможностей: избирательного вычисления градиентов для заморозки слоев при переносе обучения через requires_grad=False или .detach(); инспекции и изменения градиентов для обрезки, отладки или логирования промежуточных сопряженных величин через хуки времени исполнения; и пользовательских правил дифференцирования для нестандартных операций, таких как специализированные ядра CUDA или новые функции активации.
Эти точки расширения работают через обратные вызовы, которые вызываются во время построения графа и обратного обхода, сохраняя путь исполнения ядра. В PyTorch эти возможности соответствуют конкретным механизмам среды исполнения: удерживаемым графам, буферам накопления градиентов, пользовательским реализациям autograd.Function, тензорным хукам и границам отсоединения. «Механизмы управления autograd» сводит эти механизмы, их системную функцию и их компромиссы по памяти или корректности.
| Механизм | Что контролирует | Цена или опасность |
|---|---|---|
retain_graph=True | Сохраняет состояние графа доступным для еще одного обратного обхода | Удерживает память, которая иначе была бы освобождена; объем зависит от графа и сохраненных значений |
| Накопление градиентов | Последовательные обратные проходы суммируются в .grad, пока zero_grad() их не сбросит, что позволяет получать большие эффективные батчи | Забытый сброс незаметно смешивает градиенты разных шагов оптимизации |
Пользовательская autograd.Function | Определяемые пользователем правила прямого и обратного прохода для операций вне встроенной библиотеки | Переносит контракт дифференцирования (что сохранять, как дифференцировать) на разработчика |
| Хуки градиентов | Инспекция или изменение градиентов в процессе обхода (обрезка, логирование, отладка) | Выполняет произвольный код Python для каждого зарегистрированного тензора на каждом обратном проходе |
.detach() | Обрывает поток градиента на выбранной границе (замороженные слои, выходы вывода) | Устаревший атрибут .data обходит autograd и незаметно портит градиенты; клонируйте перед мутацией на месте |
Механизмы управления autograd: повторяющиеся точки расширения, которые движок autograd открывает во время обхода графа. Указано, что каждая из них контролирует и какую цену по памяти или корректности несет.
Пользовательские функции autograd открывают контракт дифференцирования напрямую, перенося ответственность за сохранение состояния с движка на программиста: реализация явно задает, какие прямые тензоры сохранять в ctx.save_for_backward(), и вычисляет соответствующие векторно-якобиановы произведения в backward(). «Пользовательская функция autograd» демонстрирует этот интерфейс для пользовательской операции умножения со сложением:
Пользовательская функция autograd: реализуйте методы прямого и обратного прохода, чтобы определить пользовательские дифференцируемые операции, явно указывая тензоры для сохранения при вычислении градиентов.
class MultiplyAdd(torch.autograd.Function):
@staticmethod
def forward(ctx, x, y, z):
# Сохраняем тензоры, нужные для обратного прохода
ctx.save_for_backward(x, y)
return x * y + z
@staticmethod
def backward(ctx, grad_output):
# Извлекаем сохраненные тензоры
x, y = ctx.saved_tensors
# Вычисляем градиенты по правилу цепочки
grad_x = grad_output * y # dL/dx = dL/dout * dout/dx
grad_y = grad_output * x # dL/dy = dL/dout * dout/dy
grad_z = grad_output # dL/dz = dL/dout * 1
return grad_x, grad_y, grad_z
# Использование
x = torch.tensor([2.0], requires_grad=True)
y = torch.tensor([3.0], requires_grad=True)
z = torch.tensor([1.0], requires_grad=True)
output = MultiplyAdd.apply(x, y, z)
output.backward()
print(
x.grad, y.grad, z.grad
) # tensor([3.]), tensor([2.]), tensor([1.])
Эти механизмы autograd напрямую связаны с кремниевым контрактом. Граф с обратными связями определяет последовательность обратных ядер, которую должно выполнить устройство (член ). Компромисс между памятью и вычислениями управляет временем пребывания промежуточных тензоров и трафиком памяти по иерархии памяти (член ). Точки расширения позволяют инженерам обрезать ненужные пути графа и перехватывать поток данных. Взаимодействие между удержанием графа и пропускной способностью памяти ведет прямо к обучению в смешанной точности, которое сокращает объем памяти и одновременно повышает эффективность исполнения на аппаратуре.
Поддержка обучения в смешанной точности
Смешанная точность использует специализацию аппаратуры, чтобы одновременно улучшить два члена железного закона. Тензорные ядра выполняют 16-битные умножения матриц с более высокой пропускной способностью, чем арифметические блоки FP32 (повышая и снижая ), а 16-битные активации вдвое сокращают трафик глобальной памяти (снижая ). Одновременное улучшение обоих членов встречается редко: большинство системных оптимизаций улучшают эффективность вычислений за счет объема памяти или наоборот.
Автоматические API смешанной точности динамически назначают численные точности на основе чувствительности оператора и возможностей аппаратуры. Вычислительно интенсивные операции, такие как свертки и линейные проекции, выполняются в FP16 или BF16, а численно чувствительные операции, такие как softmax, редукции и вычисление функции потерь, выполняются в FP32. Поскольку FP16 имеет узкий динамический диапазон (5 битов экспоненты, а нормальные значения снизу ограничены величиной ), значения градиентов в ходе обратного распространения могут обнуляться из-за антипереполнения (underflow). Масштабирование функции потерь борется с антипереполнением: скалярная функция потерь умножается на коэффициент масштаба перед обратным обходом, что переносит градиенты в представимый диапазон FP16, а градиенты параметров делятся на перед обновлениями оптимизатора.
Фреймворки поддерживают три основных формата пониженной точности: IEEE FP16, BF1621 и TF32 (внутренний формат NVIDIA начиная с Ampere, который сочетает 8-битную экспоненту FP32 с 10-битной мантиссой FP16 для умножения матриц). BF16 совпадает с динамическим диапазоном FP32 по 8 битам экспоненты ценой точности мантиссы (7 битов). Это предотвращает антипереполнение градиентов и во многих нагрузках устраняет необходимость динамического масштабирования функции потерь. Раздел «Обучение в смешанной точности» главы «Обучение моделей» подробно описывает численную устойчивость и характеристики памяти этих форматов. «Пример autocast» показывает API смешанной точности PyTorch: контекстный менеджер autocast в паре с GradScaler предотвращает антипереполнение.
API смешанной точности: современные фреймворки предоставляют поддержку автоматической смешанной точности через контекстные менеджеры, которые управляют выбором точности и численной устойчивостью.
import torch
from torch.amp import autocast, GradScaler
model = MyModel().cuda()
optimizer = torch.optim.Adam(model.parameters())
scaler = GradScaler("cuda")
for inputs, targets in dataloader:
inputs, targets = inputs.cuda(), targets.cuda()
optimizer.zero_grad()
# Фреймворк автоматически выбирает точность для каждой операции
with autocast(device_type="cuda", dtype=torch.float16):
outputs = model(inputs)
loss = criterion(outputs, targets)
# GradScaler масштабирует градиенты для численной устойчивости
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
Обучение в BF16 полностью обходится без механизма масштабирования функции потерь. Как показано в «обучение в BF16» в сравнении с «пример autocast», удаление GradScaler упрощает цикл обучения: динамический диапазон BF16 устраняет риск антипереполнения, позволяя напрямую выполнять обратный проход.
Обучение в BF16: BF16 сохраняет динамический диапазон FP32, часто избавляя от масштабирования функции потерь, которое нужно при обучении в FP16.
# Обучение в BF16, как правило, не требует масштабирования функции потерь
with torch.autocast(device_type="cuda", dtype=torch.bfloat16):
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward() # GradScaler не нужен
optimizer.step()
Состояние оптимизатора и контрольные точки
Возобновление обучения после прерывания или сбоя аппаратуры требует восстановить веса модели и состояния оптимизатора синхронно: векторы первых моментов, оценки дисперсии вторых моментов и счетчики шагов. Для Adam хранение двух состояний FP32 на параметр добавляет к памяти весов FP16 еще в 4 раза больше памяти, так что совокупный объем в 5 раз превышает базовый объем весов. Для модели с 7 млрд параметров веса и состояния оптимизатора требуют примерно 70 ГБ (14 ГБ весов и 56 ГБ состояний оптимизатора). Объем контрольных точек напрямую определяет задержку восстановления в распределенном хранилище, связывая отказоустойчивость с членом железного закона.
Глава «Обучение моделей» разбирает стратегии оптимизации памяти оптимизатора в распределенном обучении. На уровне фреймворка оптимизаторы открывают внутренние словари состояний через state_dict() для сериализации. «Интерфейс state_dict» показывает доступ к словарям состояний оптимизатора, а «сохранение и загрузка контрольной точки» — сохранение и восстановление параметров модели и состояний оптимизатора, чтобы сохранить непрерывность траектории обучения.
Словарь состояний: оптимизаторы открывают внутреннее состояние через state_dict(), что позволяет сериализовать буферы моментов и оценки адаптивной скорости обучения для контрольных точек.
import torch
import torch.nn as nn
import torch.optim as optim
model = nn.Linear(10, 5)
optimizer = optim.Adam(model.parameters(), lr=0.001)
# После шагов обучения оптимизатор накапливает состояние
loss = model(torch.randn(3, 10)).sum()
loss.backward()
optimizer.step()
# Доступ к состоянию для контрольной точки
state = optimizer.state_dict()
# Содержит: {'state': {...}, 'param_groups': [{'lr': 0.001, ...}]}
Сохранение и загрузка контрольной точки: сохраните и параметры модели, и состояние оптимизатора, чтобы корректно возобновить обучение с правильными значениями моментов и адаптивной скорости обучения.
# Сохранение контрольной точки
checkpoint = {
"epoch": epoch,
"model_state_dict": model.state_dict(),
"optimizer_state_dict": optimizer.state_dict(),
}
torch.save(checkpoint, "checkpoint.pt")
# Возобновление обучения
checkpoint = torch.load("checkpoint.pt")
model.load_state_dict(checkpoint["model_state_dict"])
optimizer.load_state_dict(checkpoint["optimizer_state_dict"])
Математические основы автоматического дифференцирования существовали задолго до возрождения глубокого обучения; инженерная задача состояла в том, чтобы механизировать эти принципы в высокопроизводительную программную инфраструктуру. Вручную вывести и записать обратные ядра для одного слоя означает отслеживать промежуточные переменные, реализовывать локальные правила цепочки и управлять жизненным циклом буферов устройства. Для современных трансформерных архитектур с многоголовым самовниманием, слоевыми нормализациями и остаточными проекциями на сотнях слоев ручное дифференцирование по тысячам тензорных зависимостей невыполнимо. Движки autograd механизируют этот вывод для произвольных топологий, режимов точности и бэкендов ускорителей, превращая неразрешимую аналитическую задачу в автоматизированное исполнение графа.
Управление памятью при вычислении градиентов
Стратегии управления памятью, разобранные в «Стратегии управления памятью» (контрольные точки, накопление градиентов), существуют потому, что автоматическому дифференцированию в обратном режиме нужно сохранять историю вычислений. Как показал «пример сохранения активаций по слоям», каждый прямой слой добавляет тензор активации, который должен сохраняться, пока обратный обход его не использует. Так возникает волна памяти: она достигает пика на старте обратного распространения и спадает по мере накопления градиентов и освобождения промежуточных буферов. Современные среды исполнения отслеживают счетчики ссылок на тензоры, чтобы освободить активации в тот момент, когда их потребители обратного прохода завершают исполнение.
Помимо времен жизни тензоров, фреймворки сталкиваются с более низкоуровневым узким местом системы: задержкой выделения памяти на уровне драйвера. Синхронные выделения памяти устройства (например, cudaMalloc) несут значительные накладные расходы ОС и драйвера, вынуждая синхронизации хоста и устройства, которые опустошают очереди команд ускорителя. Чтобы устранить эту задержку, современные фреймворки перехватывают выделения с помощью кеширующих аллокаторов, которые поддерживают пулы заранее зарезервированных блоков памяти устройства между итерациями обучения. Суб-выделение из этих пулов амортизирует стоимость выделения на устройстве и снижает задержку запуска ядер, хотя меняющиеся времена жизни тензоров все равно могут вызывать фрагментацию памяти.
Кеширующий аллокатор и утилизация
Кеширующие аллокаторы в первую очередь снижают накладные расходы выделения и улучшают повторное использование блоков. Остаются два соображения:
- Задержка выделения: повторное использование кешированного блока избавляет от повторных вызовов выделения памяти устройства, стоимость и поведение синхронизации которых зависят от аллокатора и среды исполнения.
- Фрагментация: классы размеров и разбиение блоков улучшают повторное использование, но могут оставлять свободную емкость в блоках, которые не удовлетворяют запрос. Поскольку тензорам нужны непрерывные физические адреса, внешняя фрагментация возникает, когда меняющиеся времена жизни тензоров оставляют в пуле маленькие несмежные свободные блоки. Большое выделение может вызвать ошибку нехватки памяти (OOM), даже когда суммарная свободная память во всех блоках превышает запрошенный размер.
Ошибка нехватки памяти может отражать живые выделения, блоки, зарезервированные аллокатором, фрагментацию или другой процесс.
nvidia-smiпоказывает использование на уровне устройства и сама по себе недостаточна для диагностики аллокатора фреймворка: нужна статистика памяти, специфичная для аллокатора.
Проблемы интеграции производственной системы
Итерация обучения в производственной среде может работать медленнее, чем в изолированном профиле, потому что полный шаг координируется с аллокатором памяти, менеджером устройств, планировщиком операций, конвейером данных и оптимизатором. Полная стоимость системы включает работу, которую не измеряет микротест отдельного оператора или профиль изолированного ядра. Вычисление градиентов запускает ядра ускорителя и может требовать выделения памяти, синхронизации или переноса данных в зависимости от графа и реализации. Эти взаимодействия могут доминировать в нагрузках из мелких операций и остаются измеримыми в масштабе. Разрыв между тем, что пишет программист (цикл обучения из пяти строк), и тем, что исполняет система (выделения памяти, запуски ядер и точки синхронизации), — центральное напряжение проектирования системы AD.
Серьезность этих накладных расходов зависит от более глубокого архитектурного выбора: как система AD вообще записывает и воспроизводит вычисления. Фреймворк, который строит динамическую трассу во время исполнения, платит за учет каждой операции на каждом прямом проходе, а его кеширующему аллокатору приходится учитывать шаблоны выделения, которые могут меняться вместе с исполнением. Фреймворк, который захватывает стабильное вычисление, напротив, может заранее планировать буферы и переиспользовать память между прямым и обратным графами, потому что способен рассуждать о временах жизни до исполнения. Выигрыш зависит от полноты захвата, времен жизни тензоров, форм и поддержки бэкенда.
Ленточное и преобразовательное автоматическое дифференцирование
PyTorch (на основе ленты): записывает операции на динамической «ленте» во время прямого прохода. Это гибко и легко отлаживается, но затрудняет для компилятора одновременное видение всего графа ради глобальной оптимизации.
JAX (на основе преобразований): рассматривает автоматическое дифференцирование как функциональное преобразование высокого уровня (
grad(f)). JAX трассирует чистую функцию для абстрактных сигнатур входов, позволяя совместимым преобразованиям, таким какjit(grad(f))илиvmap(grad(f)), комбинироваться до понижения. Это открывает компиляторам ускорителей более крупную преобразованную программу, не гарантируя одного ядра или универсального преимущества в скорости.
Система AD отслеживает зависимости, чтобы обходить независимые ветви графа в допустимом порядке и корректно накапливать градиенты. Хотя независимые потоки хоста или явные потоки CUDA могут открыть одновременность на устройстве, стандартная диспетчеризация autograd сериализует исполнение узлов на основном вычислительном потоке, если не указано иное. Одновременность ограничена зависимостями между потоками и пределами аппаратного планирования.
Как разные фреймворки реализуют AD
Модели исполнения, разобранные в «Проблема исполнения», — eager, статический граф и гибридная, — напрямую определяют, как фреймворки реализуют автоматическое дифференцирование. PyTorch (Paszke et al., 2019) строит ленту autograd динамически во время прямого исполнения. Его механизм цепочки grad_fn, разобранный в «Внутреннее устройство autograd в PyTorch», дает неограниченный поток управления Python и прозрачную отладку с точками останова, но заставляет движок удерживать метаданные ленты и сохраненные тензоры до завершения обратного обхода. Напротив, ранний TensorFlow (Abadi et al., 2016) выполнял символическое дифференцирование заранее, во время построения графа, генерируя неизменяемый подграф обратного прохода. Такой подграф пригоден для устранения мертвого кода по всему графу и повторного использования памяти до исполнения. Современный TensorFlow 2.x принимает eager-исполнение как интерфейс по умолчанию, одновременно предоставляя tf.function для компиляции статических графов дифференцирования, когда этого требует пропускная способность (TensorFlow Developers, 2024). JAX22 (Frostig et al., 2018) полностью отказывается от отслеживания ленты и рассматривает дифференцирование как преобразование чистой функции: jax.grad() принимает функцию и возвращает функцию производной, что позволяет бесшовно комбинировать ее с векторизацией (jax.vmap()) и компиляцией XLA (jax.jit()). Хотя эта функциональная парадигма требует строгой ссылочной прозрачности, она открывает компилятору чистое IR всей программы без побочных эффектов императивных лент.
Различия в реализации автоматического дифференцирования определяют, какой видимости при отладке, оптимизации компилятором и переносимости развертывания может ожидать команда от каждого фреймворка. Через каждое решение о проектировании AD проходит повторяющееся напряжение: математическая корректность требует хранить вычислительную историю, а аппаратура накладывает строгие лимиты памяти. Каждый фреймворк разрешает это напряжение по-своему, выбирая, какие активации сохранять в контрольных точках, какие операции сливать и насколько агрессивно обменивать пересчет на память. Эти выборы определяют, какие модели могут обучаться на каком железе, что делает проектирование системы AD одним из самых значимых инженерных решений в любом фреймворке.
Системная цена градиентов
Обучение по своей природе дороже вывода из-за автоматического дифференцирования.
Вычислительная реальность
- Обратный режим AD: почему он эффективен для скалярной функции потерь со многими параметрами?
- Налог на активации: можете ли вы объяснить, как память сохраненных значений зависит от глубины графа, форм тензоров и контрольных точек?
Механика оптимизации
- Градиентные контрольные точки: как пересчет активаций экономит память?
Задачи исполнения и дифференцирования вместе обеспечивают цикл обучения: модель исполнения определяет, когда происходят вычисления, а автоматическое дифференцирование вычисляет градиенты, которые движут обучением. Однако обе задачи незаметно предполагают то, что нельзя принимать как данность: что один и тот же код может выполняться на разнообразной аппаратуре. Модель, обученная на NVIDIA A100, должна обслуживать вывод на ARM-процессоре мобильного телефона, на тензорном процессоре Google (TPU) или на микроконтроллере с килобайтами памяти. Один и тот же вызов torch.matmul должен диспетчеризоваться в cuBLAS на одном устройстве и во вручную настроенное ядро ARM NEON на другом. Это разнообразие аппаратуры порождает третью задачу.
Проблема абстракции
Это разнообразие аппаратуры архитектурно фундаментально. GPU предоставляют обильный параллелизм, ориентированный на пропускную способность, но имеют иную семантику памяти и исполнения, чем CPU. TPU отдают предпочтение регулярным тензорным программам и формам, видимым компилятору. В микроконтроллере килобайты там, где в сервере гигабайты. Поэтому проблема абстракции требует, чтобы фреймворки скрывали эту сложность за единым программным интерфейсом, но при этом позволяли эффективно использовать уникальные возможности каждой цели.
Проблема раскладывается на два взаимодействующих измерения. Первое — представление данных: как фреймворки кодируют тензоры, параметры и вычислительное состояние в формах, которые работают на разной аппаратуре. Второе — отображение исполнения: как высокоуровневые операции переводятся в аппаратно-специфичные реализации. Эти измерения не являются независимыми. Способ представления данных (раскладка в памяти, точность, размещение на устройстве) напрямую влияет на то, какие стратегии исполнения возможны. Тензор, хранящийся в построчном формате на GPU, требует иных ядер, чем тензор в поколоночном формате на CPU. Модель, квантованная в INT8, открывает совершенно иные пути исполнения, чем FP32.
Решение задачи абстракции требует сложной программной инфраструктуры: представлений тензоров, которые кодируют и математическую семантику, и аппаратные ограничения; промежуточных представлений, которые позволяют аппаратно-специфичную компиляцию; и систем времени исполнения, которые управляют переносами данных по иерархии памяти. Чтобы сделать это конкретным, проследим, что должно произойти, когда программист пишет model(input). Фреймворк должен быстро разрешить пять решений: представление данных (форма тензора, раскладка в памяти, численная точность), размещение на устройстве (иерархия пропускной способности, соединяющая память CPU, GPU и ускорителя), доставка входа (конвейеры данных, поддерживающие сотни МБ/с, чтобы ускоритель не простаивал), организация модели (параметры, буферы и подмодули, которые должны перемещаться вместе) и исполнение ядер (диспетчеризация, планирование и оптимизация ресурсов). Эти решения строятся от контейнера данных вверх к слою исполнения на аппаратуре. Распределенное размещение демонстрирует ту же границу абстракции: фреймворки открывают области размещения, чтобы системные компоненты могли управлять границами устройств. Глава «Обучение моделей» разбирает алгоритмы масштабирования и затраты на коммуникацию, которые делают эти области эффективными.
Структуры данных и абстракции тензоров
Прямой проход ResNet-50 задействует 25,6 млн параметров, порождает промежуточные активации на каждом слое и должен координировать память между адресными пространствами CPU и GPU. Фреймворки организуют все эти данные так, чтобы единственный вызов model(input) выполнял миллионы операций без того, чтобы программист управлял хотя бы одним указателем. Для этого они последовательно решают четыре задачи: определяют универсальный контейнер данных (тензоры), размещают его на нужном устройстве (управление памятью), подают данные достаточно быстро (конвейеры данных) и диспетчеризуют нужное аппаратное ядро (базовые операции). Путь ведет от представления данных к исполнению на аппаратуре.
Вычислительные графы задают логический поток операций, а структуры данных определяют, как эти операции обращаются к данным и изменяют их в физической памяти. Это различие важно, потому что одна и та же математическая операция может отличаться по пропускной способности на порядок в зависимости от того, лежат ли данные непрерывно в кеше, закреплены ли они для прямого доступа к памяти (DMA) или разбросаны по страницам.
Первый шаг — сам контейнер данных. Структуры данных фреймворка должны поддерживать пропускную способность памяти (сотни ГБ/с на современных GPU), вмещать архитектуры от одномерных последовательностей до пятимерных видеотензоров и скрывать управление устройствами за понятными API. Ответ на все это — тензоры.
Тензоры
В основе представления данных любого фреймворка лежит единая абстракция: тензор, n-мерный массив, который объединяет числовые значения с информацией, необходимой для их интерпретации и размещения.
Каждое вычисление в нейронной сети оперирует тензорами.23 Обучающие батчи, карты активаций, градиенты параметров и состояния оптимизатора — все это тензоры. Такое единое представление позволяет фреймворкам оптимизировать одну структуру данных под аппаратуру, а не управлять отдельными контейнерами для каждой роли.
Тензор
Тензоры — это -мерные массивы с метаданными формы, типа данных, шагов и устройства. Среды исполнения фреймворка используют эту информацию, чтобы выбирать совместимые операции и аппаратные ядра.
- Значение: непрерывный тензор FP32 формы занимает байта (около 4,2 МБ). Представление без непрерывной раскладки может приниматься напрямую ядром с шагами или требовать материализации, когда операция требует поддерживаемой непрерывной раскладки.
- Отличие: массивы NumPy тоже несут метаданные формы, типа и шагов. Тензоры фреймворков дополнительно интегрируют размещение на устройстве, автоматическое дифференцирование и диспетчеризацию на ускорители.
- Распространенная ловушка: операции с тензорами могут возвращать новое выделение, представление, разделяющее существующее хранилище, или обновление на месте, в зависимости от операции и варианта API. Учет памяти должен различать эти случаи.
Абстракция тензора потребляет памяти гораздо больше, чем подсказывает один лишь объем весов модели. Инженеры, которые оценивают память по числу параметров, выделяют ее соответственно и сталкиваются с ошибками нехватки памяти, которые кажутся необъяснимыми. Быстрый учет памяти делает скрытую цену конкретной: градиенты, моменты оптимизатора и сохраненные активации сопровождают каждый тензор весов.
Административный налог
Иллюстративная разбивка ResNet-50 в «Внутреннее устройство autograd в PyTorch» была в 82,1–121,2 раза больше одного лишь объема весов FP32. Следующий сценарий расширяет учет до градиентов, состояния оптимизатора и сохраненных активаций в масштабе миллиардов параметров.
Задача: сколько памяти добавляет состояние обучения сверх весов FP16 в этом сценарии с миллиардами параметров?
Расчет:
- Веса модели: 2 ГБ.
- Градиенты: 2 ГБ (тот же размер, что у весов).
- Состояния оптимизатора (Adam): 8 ГБ ( память весов FP16 под моменты и скорости, которые хранятся в FP32).
- Активации: для размера батча 32 и сети из 100 слоев обратный режим AD сохраняет зависящие от операций значения, которые нужны правилам производной. Контрольные точки активаций могут опускать выбранные значения и пересчитывать их во время обратного прохода. Для последовательности из 1024 токенов, скрытого состояния шириной 1024 и 1 сохраненного тензора на слой: . Материализованные члены внимания могут добавлять отдельную компоненту , поэтому важны эффективные по памяти ядра внимания.
Системный вывод: модель в 2 ГБ несет постоянное состояние обучения еще до обработки первого батча (2 ГБ градиентов и 8 ГБ состояния оптимизатора). Во время шага обучения зависящие от батча активации добавляют еще 6,7 ГБ, поднимая пиковый «административный налог» до примерно 16,7 ГБ сверх весов. Во время обучения перемещение данных включает сохранение и извлечение этих активаций.
Структура тензора и размерности
Тензоры структурируют числовые данные, добавляя организационные оси к линейным раскладкам памяти. Проследите расширение ранга слева направо на «Иерархия рангов тензора»: видно, как скаляры ранга 0 превращаются в объемные тензоры ранга 3.
Иерархия рангов тензора: возрастающие ранги тензоров (от 0 до 3) обобщают многомерную индексацию от скаляров до объемных тензоров. Каждый дополнительный ранг добавляет организационную ось, которую фреймворк должен линеаризовать в физические адреса памяти через шаги.
В задачах компьютерного зрения сырые входные изображения напрямую отображаются на многомерные раскладки тензоров. Посмотрите на структуру тензора ранга 3 на «Изображение как RGB-тензор»: видно, как красный, зеленый и синий каналы складываются по канальному измерению.
Изображение как RGB-тензор: разложение двумерного цветного изображения на сложенные измерения высоты, ширины и каналов образует тензор ранга 3. В ML-системах порядок этих измерений (например, сначала каналы или последними каналы) определяет локальность доступа к памяти и эффективность кеша в операциях свертки.
Тензоры фреймворка несут больше, чем сырые числа. Каждый тензор хранит метаданные тензора, то есть информацию времени исполнения, которая используется для проверки операций и выбора быстрых путей исполнения: кортеж формы (например, [64, 3, 224, 224] для батча изображений), тип данных (литералы фреймворка вроде float32, float16 или int8) и метку устройства (CPU, cuda:0). Умножение матриц, например, проверяет совместимость форм во время диспетчеризации и использует тип данных, чтобы направить вычисление к нужному аппаратному ядру: стандартному GEMM в FP32 или пути FP16 на тензорных ядрах.
Реализация раскладки в памяти порождает особые трудности в конструкции тензоров. Хотя тензоры дают абстракцию многомерных данных, физическая память компьютера остается линейной. Шаблоны шагов (stride) устраняют это расхождение, создавая отображения между многомерными индексами тензора и линейными адресами памяти. Эти шаблоны существенно влияют на производительность, определяя шаблоны доступа к памяти во время тензорных операций. «Раскладка тензора в памяти» делает это конкретным на тензоре : проследите, как одни и те же шесть значений отображаются в два разных линейных порядка, построчный (row-major) и поколоночный (column-major), и обратите внимание, как при этом меняются значения шагов, чтобы компенсировать различие.
Раскладка тензора в памяти: тензор можно хранить в линейной памяти в порядке «по строкам» (в стиле C) или «по столбцам» (в стиле Fortran). Шаги задают, сколько элементов пропустить по каждому измерению при движении по памяти, что позволяет фреймворкам вычислять адрес элемента tensor[i,j] как base_address + i stride[0] + j stride[1]. Выбор раскладки памяти существенно влияет на производительность кеша и вычислений.
Выбор шагов — это выбор производительности. Построчная раскладка (используется NumPy и PyTorch) хранит элементы строка за строкой, что делает операции по строкам дружелюбнее к кешу. Поколоночная раскладка (используется в некоторых библиотеках BLAS) хранит элементы столбец за столбцом и оптимизирует шаблоны доступа по столбцам. Значения шагов кодируют эту информацию о раскладке: в построчной раскладке тензора переход к следующей строке требует пропустить три элемента (stride[0] = 3), а переход к следующему столбцу — пропустить один элемент (stride[1] = 1).
Эти детали раскладки памяти напрямую влияют на производительность, но ни один порядок не является универсально лучшим. Эффективный доступ зависит от того, по какому измерению проходит операция, от раскладок, которые поддерживает ядро, от векторизации и от целевой иерархии памяти. Несовпадающая раскладка может потребовать доступа с шагом или преобразования, тогда как ядро, спроектированное под эту раскладку, обращается к ней эффективно. Важно, что геометрические операции вроде .transpose() работают без копирования: они лишь меняют метаданные шагов, создавая несмежное «представление» (non-contiguous view) поверх существующей памяти. Когда последующей операции (например, .view()) нужно, чтобы элементы лежали в памяти последовательно, вызов .contiguous() заставляет среду исполнения выделить новый буфер и физически скопировать элементы в последовательном порядке.
Тип данных — это уровень тензора, на котором численный диапазон обменивается на перенос данных. Стандартным выбором в машинном обучении долгое время была точность FP32, которая во фреймворках доступна через литералы типов вроде float32 и дает баланс точности и эффективности. Современные фреймворки расширяют это несколькими численными типами для разных задач. Целочисленные типы поддерживают операции индексации и эмбеддингов. Типы пониженной точности, такие как FP16, позволяют эффективно развертывать модели на мобильных устройствах. Точность INT8 дает быстрый вывод на специализированной аппаратуре. Выбор численного типа влияет и на поведение модели, и на вычислительную эффективность: обучение нейронных сетей обычно требует точности FP32 для критичных накоплений, чтобы сохранить стабильность вычисления градиентов, тогда как вывод часто может использовать пониженную точность (литералы типов фреймворка вроде int8 или даже int4, соответствующие INT8 и INT4), что сокращает использование памяти и повышает скорость обработки. Подходы смешанной точности обучения объединяют эти выгоды: FP32 используется для критичных накоплений, а большая часть вычислений выполняется в пониженной точности.
Преобразования типов — еще одна точка, где абстракция встречает физику. Операции с тензорами разных типов требуют явных правил преобразования, чтобы сохранить численную корректность. Эти преобразования вносят вычислительные затраты и рискуют потерей точности. Фреймворки предоставляют приведение типов, но полагаются на разработчика в вопросе сохранения численной точности между операциями.
Тензоры решают задачу представления данных, объединяя форму, раскладку и точность в одной абстракции. Однако идеально оформленный тензор на неверном устройстве или тот, которому нужно пересечь разрыв пропускной способности PCIe–HBM, чтобы добраться до GPU, может свести на нет любую оптимизацию раскладки. Следующая задача — размещение: где живут данные и как они перемещаются.
Управление устройствами и памятью
Тензоры и их раскладки в памяти определяют, с чем работает фреймворк. Где физически находятся эти данные и как они перемещаются между местами, определяет, идут ли вычисления на полной скорости или ползут.
Фреймворк как интерфейс операционной системы
Пока высокоуровневый API сосредоточен на математике, бэкенд фреймворка выполняет роль операционной системы одноузловой конфигурации. Он управляет двумя критическими ресурсами одного узла: планированием вычислений и перемещением данных.
Среда выполнения CUDA (CUDA Runtime) служит этим слоем ОС, предоставляя низкоуровневые примитивы для запуска ядер и управления памятью устройства. Фреймворк координируется с этой средой, чтобы реализовать DMA через шину PCIe. Разрыв пропускной способности между хостом (CPU) и устройством (GPU) — главное «узкое место загрузки данных». Раздел «Пропускная способность и задержка» приложения «Основы машины» моделирует эту передачу, разделяя два ограничения, , которые определяют, ограничена ли стратегия загрузки данных задержкой отдельной передачи или устойчивой пропускной способностью. Фреймворки смягчают это через закрепленную память хоста (page-locked host memory), которая позволяет выполнять передачи DMA без промежуточного копирования через выгружаемую память. Этот интерфейс «аппаратура — ОС» и делает возможными высокопроизводительные циклы обучения на одной машине.
Каждый тензор находится на конкретном устройстве, и операции между устройствами несут затраты на перенос, которые могут доминировать во времени исполнения. PCIe 4.0 обеспечивает 32 ГБ/с между CPU и GPU, а HBM2e дает 2,04 ТБ/с внутри GPU. Разрыв в 63,7 раза означает, что один неверно размещенный перенос тензора может свести на нет весь выигрыш от ускорения на GPU.
Пропускная способность межсоединений различается примерно в 64 раза: HBM значительно выше NVLink, а NVLink значительно выше PCIe.
Размещение на устройстве важно для проектирования фреймворка, потому что фреймворк должен отслеживать, где находится каждый тензор, и обеспечивать, чтобы операции объединяли тензоры только с одного устройства. Когда данные нужно переместить, фреймворк должен решить, блокировать ли исполнение или перекрыть перенос с другой работой. Эти решения, невидимые большинству пользователей, могут перевести цикл обучения из режима, ограниченного переносами, к существенно более высокой загрузке аппаратуры.
Три системных принципа определяют эффективное управление устройствами и памятью: понимание иерархии пропускной способности, которая ограничивает перенос данных; перекрытие вычислений с коммуникацией, чтобы скрыть задержку переноса; и тонкая синхронизация, которая поддерживает корректность, не жертвуя параллелизмом. Все это подкреплено количественным анализом на основе члена переноса данных железного закона. Иерархия пропускной способности задает первое ограничение.
Стоимость переноса данных между устройствами различается на порядки в зависимости от межсоединения.24 «Накладные расходы передачи между устройствами» показывает времена переноса для тензора float32 размером (4 МБ), примерно соответствующего типичному тензору активаций умеренной модели. Эти числа показывают, почему небрежное размещение на устройстве может свести на нет любое ускорение от GPU.
| Межсоединение | Пропускная способность | Время передачи | Путь |
|---|---|---|---|
| PCIe 3.0 x16 | 15,8 ГБ/с | 0,254 мс | от хоста к устройству |
| PCIe 4.0 x16 | 32 ГБ/с | 0,125 мс | от хоста к устройству |
| NVLink 3.0 | 300 ГБ/с в каждую сторону (600 ГБ/с двунаправленно) | 0,013 мс | от GPU к GPU |
| Память GPU | 2039 ГБ/с | 0,002 мс | внутри устройства |
Накладные расходы передачи между устройствами: время передачи тензора 4 МБ через разные межсоединения. Показана однонаправленная пропускная способность PCIe (типичная для передач на GPU); полнодуплексная работа дает в 2 раза больше суммарной пропускной способности. Пропускная способность NVLink двунаправленная (300 ГБ/с в каждую сторону). Эти затраты на перенос могут доминировать в легковесных операциях, поэтому размещение на устройстве критично.
Эти числа напрямую связаны с железным законом производительности. Каждый перенос между устройствами вносит вклад в при доле пропускной способности внутри устройства. Деление 1 ГБ на заявленный пиковый показатель PCIe 4.0 дает 31,2 мс — нижнюю границу только по пропускной способности, которая не учитывает накладные расходы протокола, запуска, синхронизации, топологии и конкуренции. Переносы могут доминировать в легковесных нагрузках или нагрузках с малым батчем, поэтому реальную задержку нужно измерять, а не выводить только из пиковой пропускной способности.
Дисциплина размещения на устройстве защищает иерархию пропускной способности от случайного трафика PCIe. Каждый тензор несет атрибут устройства, и фреймворк соблюдает строгий инвариант: операции могут объединять только тензоры с одного устройства. Смешивание тензоров cuda:0 и cuda:1 вызывает RuntimeError, что не дает проходить скрытым переносам между устройствами.
Механизм переноса явный. Вызов .to() у тензора возвращает исходный тензор, если его тип данных и устройство уже совпадают с запрошенными. В противном случае возвращается преобразованная копия, если только copy=True не заставляет делать копию. Напротив, nn.Module.to() изменяет зарегистрированные параметры и буферы на месте и возвращает модуль.
Дисциплина производительности прямо следует из этого разрыва пропускной способности: выделять тензоры на целевом устройстве с самого начала, а не создавать их на хосте и переносить; переиспользовать память GPU между итерациями, а не выделять заново; размещать входы, метки и параметры модели на одном устройстве, чтобы исключить неявные переносы. При 32 ГБ/с нарушение любого из этих принципов вставляет переносы PCIe в критический путь, который может доминировать в итерации обучения, иначе работающей на 2,04 ТБ/с внутри устройства.
Перекрытие вычислений и коммуникации
Когда переносы неизбежны, следующая оптимизация — скрыть их задержку, выполняя их одновременно с вычислениями. Современные GPU содержат независимые аппаратные блоки для вычислений (кластеры SM) и переноса данных (копирующие движки), что позволяет по-настоящему одновременное исполнение. Абстракция фреймворка, которая открывает этот аппаратный параллелизм, — поток CUDA: независимая очередь исполнения, в которой операции выполняются последовательно внутри потока, но параллельно между потоками.
Без явного контроля параллелизма GPU сериализует все операции в одном потоке по умолчанию, оставляя блоки исполнения простаивающими, пока переносы данных завершаются. Если разместить переносы данных в одном потоке, а вычисления в другом, эффективная задержка приближается к теоретическому минимуму , а не их сумме. Перекрытие на основе потоков эффективно скрывает штраф , когда вычисление — более долгая операция (см. «пример перекрытия вычислений и переноса»).
Перекрытие копирования и вычисления стоит max(копирование, вычисление), а не их сумму.
Флаг non_blocking=True запрашивает асинхронное копирование относительно хоста, когда бэкенд это поддерживает. Для копирований с хоста на устройство закрепленная память обычно требуется, чтобы перекрыть перенос с другой работой устройства. Выгружаемая память может промежуточно копироваться внутри, а поведение блокировки хоста при вызове зависит от реализации. Корректное перекрытие также требует совместимого оборудования, отдельных ресурсов исполнения и явного управления зависимостями.
Та же схема синхронизации возникает, когда стадии модели перекрываются между микробатчами. «Пример конвейерного параллелизма на потоках» показывает, что каждая стадия работает на собственном потоке, а события обеспечивают только те зависимости «производитель — потребитель», которые нужны для корректности.
Перекрытие вычислений и переноса: отдельные потоки могут перекрывать подходящие копирования и вычисления, когда зависимости правильно синхронизированы. Закрепленная память хоста обычно позволяет переносам с хоста на устройство перекрываться с другой работой устройства.
compute_stream = torch.cuda.Stream()
transfer_stream = torch.cuda.Stream()
# Переносим следующий батч, пока вычисляем текущий
# батч
with torch.cuda.stream(transfer_stream):
next_batch = next_batch_cpu.to("cuda", non_blocking=True)
with torch.cuda.stream(compute_stream):
output = model(current_batch)
loss = criterion(output, labels)
# Закрепленная память хоста может включить перекрытие переноса
x_pinned = torch.randn(1000, 1000).pin_memory()
x_gpu = x_pinned.to("cuda", non_blocking=True) # Асинхронно
# Выгружаемый источник может требовать промежуточного копирования,
# поэтому перекрытие на него нельзя считать гарантированным
y_regular = torch.randn(1000, 1000)
y_gpu = y_regular.to("cuda", non_blocking=True)
Перекрытие стадий на потоках: перекрывайте несколько стадий модели по микробатчам, используя потоки и события для синхронизации между стадиями.
# Конвейерный параллелизм: размещаем стадии на разных GPU
devices = [torch.device(f"cuda:{i}") for i in range(3)]
stages = [
Stage1().to(devices[0]),
Stage2().to(devices[1]),
Stage3().to(devices[2]),
]
streams = [torch.cuda.Stream(device=device) for device in devices]
events = [
[torch.cuda.Event() for _ in range(num_microbatches)]
for _ in stages
]
outputs = [[None] * num_microbatches for _ in stages]
for mb in range(num_microbatches):
for stage_idx, (stage, stream, device) in enumerate(
zip(stages, streams, devices)
):
with torch.cuda.device(device), torch.cuda.stream(stream):
if stage_idx > 0:
# Ждем, пока предыдущая стадия
# завершит этот микробатч
events[stage_idx - 1][mb].wait()
stage_input = outputs[stage_idx - 1][mb].to(
device, non_blocking=True
)
else:
stage_input = inputs[mb].to(device, non_blocking=True)
outputs[stage_idx][mb] = stage(stage_input)
events[stage_idx][mb].record()
Этот принцип перекрытия естественно распространяется на перекрытие стадий модели внутри одного узла. Разные стадии модели на отдельных GPU могут одновременно обрабатывать разные микробатчи, и вычисление каждой стадии перекрывается с приемом данных следующей (см. «пример конвейерного параллелизма на потоках»). Глава «Обучение моделей» позже называет и разбирает стратегии распределенного обучения, построенные на этой схеме планирования. Здесь одноузловой реализации достаточно, чтобы показать принцип синхронизации, который сохраняется и в большем масштабе. Когда вычисления и коммуникация перекрыты, остается задача обеспечить корректность, когда операции завершаются в произвольном порядке.
Синхронизация и корректность
Параллельное исполнение создает ограничения порядка. Когда выход одного потока становится входом другого, система должна обеспечить отношение «happens-before» (предшествует), не сериализуя без нужды независимую работу. Существуют два механизма синхронизации с очень разными последствиями для производительности.
Полная синхронизация устройства (torch.cuda.synchronize()) блокирует все потоки и CPU до завершения каждой поставленной в очередь операции. Это создает глобальную точку сериализации, которая сводит на нет все выгоды перекрытия. Альтернатива — события CUDA: тонкая синхронизация, которая блокирует только зависимый поток, позволяя другим потокам и CPU продолжать исполнение (см. «пример событий CUDA»).
События CUDA для синхронизации: события обеспечивают тонкие шаблоны «производитель — потребитель» между потоками без блокировки всего устройства.
# Создаем потоки и событие
stream1 = torch.cuda.Stream()
stream2 = torch.cuda.Stream()
event = torch.cuda.Event()
# Поток 1: производитель
with torch.cuda.stream(stream1):
result1 = expensive_computation(data1)
event.record() # Отмечаем точку завершения
# Поток 2: потребитель (ждет только событие потока 1)
with torch.cuda.stream(stream2):
event.wait() # Блокируем поток 2, пока событие не записано
result2 = dependent_computation(result1) # Безопасно использовать result1
Разница в производительности между этими подходами категориальна. Полная синхронизация после каждой операции превращает параллельный конвейер в последовательный и полностью сводит на нет аппаратный параллелизм, который открывают потоки. Синхронизация на основе событий сохраняет параллельную модель исполнения и обеспечивает только те зависимости, которые нужны для корректности.
Эта дисциплина синхронизации имеет одну эксплуатационную ловушку: отладочный код часто оставляет torch.cuda.synchronize() в горячем пути, превращая перекрытый конвейер в последовательный. Когда перекрытие остается слабым, профилирование должно отделить простои планирования от неэффективности ядер. NVIDIA Nsight Systems (nsys profile) показывает активность CPU, ядра GPU и переносы памяти на одной временной шкале. NVIDIA Nsight Compute (ncu) затем объясняет поведение ядер с помощью аппаратных счетчиков.
«Метрики Nsight Compute» — диагностическая карта для второго шага. SM — потоковый мультипроцессор (streaming multiprocessor), блок GPU, который планирует группы потоков; варп (warp) — одна запланированная группа потоков.
| Метрика | Значение | Цель оптимизации |
|---|---|---|
| Заполнение SM | Активные варпы / максимум варпов | Увеличьте параллелизм, если низко |
| Пропускная способность памяти | Достигнутая / пиковая пропускная способность | Оптимизируйте шаблоны доступа к памяти |
| Пропускная способность вычислений | Достигнутые / пиковые FLOP/s | Уменьшите узкие места памяти |
| Активность тензорных ядер | Время в операциях тензорных ядер | Проверьте загрузку смешанной точности |
Метрики Nsight Compute: ключевые метрики для диагностики ядер ML. Интерпретируйте каждое значение с учетом пригодности нагрузки и назначения ядра: Nsight Systems определяет, какие ядра доминируют во времени исполнения, а Nsight Compute показывает, почему эти ядра работают недостаточно эффективно.
Конвейеры данных и загрузка
Каждая ручка DataLoader снимает конкретное узкое место входа.
Потоки и события решают задачи размещения и перемещения, перекрывая переносы с вычислениями, так что GPU редко простаивает из-за одного тензора. Однако одно лишь планирование не поможет, если данные вообще приходят слишком медленно. Следующее ограничение — доставка входа: данные должны поступать достаточно быстро, чтобы поддерживать пропускную способность. Основной системный принцип прост: конвейер данных должен поддерживать скорость потребления ускорителя. GPU, обрабатывающий 1 000 изображений в секунду при разрешении 224 на 224, требует около 150,5 МБ/с устойчивой пропускной способности сырых изображений uint8. Если конвейер не может поддерживать эту скорость, ускоритель простаивает, и член эффективной загрузки железного закона падает ниже 1.
Фреймворки решают эту задачу пропускной способности тремя механизмами. Первый — параллельные рабочие процессы: DataLoader порождает несколько процессов CPU, каждый из которых независимо загружает и предобрабатывает образцы. Когда доступ к хранилищу, декодирование, аугментация или нормализация делают один процесс загрузки слишком медленным, чтобы кормить ускоритель, несколько рабочих процессов могут перекрыть ожидание ввода-вывода с предобработкой. Когда конвейер входа удовлетворяет спрос, дополнительные рабочие процессы добавляют накладные расходы, а не пропускную способность. При num_workers > 0 DataLoader распределяет индексы образцов между рабочими процессами через общую очередь, а рабочие процессы передают готовые образцы в очередь данных, из которой главный процесс собирает батчи.
Второй механизм — предвыборка. Когда многопроцессорность включена, prefetch_factor управляет тем, сколько батчей каждый рабочий процесс готовит заранее. Четыре рабочих процесса с prefetch_factor=2 могут поддерживать до восьми предвыбранных батчей, повышая шанс, что работа с входом перекроется с вычислением ускорителя. Предвыборка не гарантирует, что ускоритель никогда не простаивает: хранилище, декодирование, аугментация и конкуренция все еще могут сделать производство медленнее потребления. Цена — дополнительная память хоста, пропорциональная объему данных в очереди.
Третий механизм — закрепленная память для DMA-переносов. Опция pin_memory=True размещает батчи в закрепленной (page-locked) памяти хоста. Это позволяет обойти промежуточное копирование через выгружаемую память и выполнять копирования с хоста на устройство параллельно с работой устройства. Для батча из 64 изображений FP32 размером (38,5 МБ) деление на заявленный пиковый показатель PCIe 4.0 x16 дает 1,2 мс. Это нижняя граница только по пропускной способности, а не измеренная задержка переноса через закрепленную память. Реальная выгода по сравнению с выгружаемой памятью зависит от платформы, размера батча, конвейера и перекрытия. Закрепленные страницы также уменьшают объем выгружаемой системной памяти.
Конфигурация DataLoader полезна, только когда каждый параметр привязан к узкому месту. В этой конфигурации num_workers включает параллельную загрузку, prefetch_factor управляет глубиной конвейера, а pin_memory включает DMA-переносы. Число рабочих процессов — это компромисс между пропускной способностью и памятью, а не универсальная константа. Практическая отправная точка — установить num_workers равным числу доступных ядер CPU, а затем корректировать в зависимости от того, ограничена ли загрузка вводом-выводом или CPU. Для нагрузок, ограниченных вводом-выводом, например чтения изображений из сетевого хранилища, больше рабочих процессов перекрывают задержку диска и повышают пропускную способность. Для нагрузок, ограниченных CPU, с тяжелой аугментацией выгода насыщается, когда заняты все ядра. Слишком много рабочих процессов тратит память, поскольку каждый хранит копию объекта Dataset.
Когда пропускная способность достаточно высока, управление рабочими процессами становится ограничением корректности. PyTorch назначает каждому рабочему процессу отдельный seed PyTorch. Функция worker_init_fn все равно полезна, когда код датасета или аугментации также использует NumPy или модуль random Python, как демонстрирует «пример настройки пропускной способности DataLoader». Разделяемое состояние Python обычно локально для процесса, поэтому изменения в одном рабочем процессе не распространяются автоматически на другие или главный процесс. Явно разделяемое или отображаемое в память хранилище нужно, когда рабочим процессам требуется общее изменяемое состояние.
Выбор Dataset — еще одно решение о пропускной способности, поскольку он определяет, как можно планировать образцы. PyTorch поддерживает две парадигмы датасетов. Датасеты в стиле отображения (map-style) реализуют __len__ и __getitem__, обеспечивая случайный доступ к образцам по индексу. Этот шаблон хорошо работает для датасетов, которые помещаются в память, или для дисков, поддерживающих эффективный случайный доступ. Датасеты итерируемого стиля (iterable-style) реализуют __iter__ и выдают образцы последовательно, что подходит для потоковых источников данных, где случайный доступ непрактичен. Датасеты в стиле отображения поддерживают перемешивание через сэмплер, тогда как итерируемые датасеты должны реализовывать любое упорядочение или буферизованное перемешивание внутри итератора или источника данных.
Конфигурация пропускной способности DataLoader: каждый параметр решает конкретное узкое место пропускной способности. num_workers распараллеливает ввод-вывод и предобработку по ядрам CPU, prefetch_factor управляет глубиной конвейера, а pin_memory включает DMA-переносы в GPU.
import random
import numpy as np
import torch
from torch.utils.data import DataLoader
def seed_worker(worker_id):
worker_seed = torch.initial_seed() % 2**32
np.random.seed(worker_seed)
random.seed(worker_seed)
loader = DataLoader(
dataset,
batch_size=64,
shuffle=True,
num_workers=4, # Параллельные рабочие процессы (механизм 1)
prefetch_factor=2, # Батчи, подготовленные заранее на каждый процесс (механизм 2)
pin_memory=True, # Закрепленная память для DMA (механизм 3)
worker_init_fn=seed_worker, # Воспроизводимая аугментация в каждом процессе
)
# Эффект конвейера: пока GPU обрабатывает батч N,
# 4 рабочих процесса загружают батчи N+1..N+8 в закрепленную память,
# готовые к DMA-переносу, когда GPU закончит.
Сборка батча (collation) — последний этап, на котором выбор представления определяет пропускную способность. Параметр collate_fn определяет, как отдельные образцы объединяются в батчи. По умолчанию тензоры складываются вдоль нового измерения батча, что работает, когда все образцы имеют одинаковую форму. Для данных переменной длины, таких как текстовые последовательности, пользовательская сборка выполняет дополнение (padding), сортировку по длине или создание масок внимания, что напрямую влияет и на использование памяти, и на пропускную способность обучения.
DataLoader, датасеты и функции сборки решают задачу доставки входа, поддерживая пропускную способность на уровне ускорителя за счет параллелизма, предвыборки и DMA. Однако эти структуры обрабатывают только эфемерные данные: образцы проходят через конвейер один раз за эпоху и отбрасываются. Следующая обязанность фреймворка — постоянное состояние, прежде всего собственные веса модели, когда они превышают память любого отдельного устройства.
Структуры параметров
Модель масштаба GPT-3 хранит 175 млрд параметров, занимающих 350 ГБ в FP16. Управление этими параметрами на устройствах, синхронизация градиентов и поддержание состояния оптимизатора (одно лишь состояние Adam может добавлять память, примерно в 4 раза превышающую веса FP16, как показал разбор «Административный налог») — основная обязанность фреймворка. Поскольку параметры сохраняются на протяжении всего обучения и вывода, фреймворки организуют их в компактные структуры, которые минимизируют память и одновременно обеспечивают быстрый доступ на чтение и запись. При обучении на нескольких GPU фреймворки могут реплицировать параметры между устройствами для параллельных вычислений, поддерживая синхронизированную мастер-копию. Серверы параметров — одна из коммуникационно эффективных схем, в которой рабочие процессы читают и записывают глобально общие параметры (Li et al., 2014). Синхронизация моделей с миллиардами параметров может требовать передачи десятков ГБ градиентов на шаг, поэтому фреймворки предоставляют коммуникационные бэкенды, которые эффективно синхронизируют тензоры. Глава «Обучение моделей» позже называет конкретные коллективные операции и стратегии масштабирования.
Структуры параметров также должны адаптироваться к различным требованиям точности. Обучение обычно использует FP32 для устойчивости градиентов, но вывод и крупномасштабное обучение все чаще используют FP16 или INT8. Фреймворки реализуют приведение типов и управление смешанной точностью, чтобы включать эти оптимизации без потери численной точности.
Контексты распределенного исполнения
Вычислительный граф определяет, что вычислять, но где и как это вычисление выполняется на устройствах, решают контексты исполнения. На одном узле контексты исполнения управляют потоками и событиями CUDA (введенными в «Управление устройствами и памятью»), чтобы перекрывать вычисления и перенос данных между GPU.
Когда обучение масштабируется за пределы одной машины, эти же абстракции распространяются на именованные группы устройств. Фреймворки используют такие конструкции, как ProcessGroup (PyTorch) или Mesh (JAX), чтобы описывать, какие тензоры и операции принадлежат друг другу. Они полагаются на библиотеки коммуникации, такие как NCCL, чтобы выполнять коллективные примитивы: например, ring-AllReduce для агрегации градиентов и AllGather для сбора параметров. Среда исполнения управляет этими примитивами, чтобы максимизировать загрузку межсоединений. Внутриузловые линки NVLink обеспечивают до двунаправленной пропускной способности на GPU, тогда как межузловые сети InfiniBand или Ethernet падают до (). Поэтому эффективность коллективной коммуникации становится главным узким местом масштабирования распределенного обучения. Важная идея для фреймворка — граница абстракции: пользовательский код называет отношения размещения, а фреймворк сохраняет эти отношения, пока аппаратный путь меняется под ними.
Эти понятия появляются здесь, потому что они формируют проектирование API фреймворка еще до того, как книга попросит читателя рассуждать об алгоритмах распределенного обучения. Детали синхронизации градиентов, коммуникационных топологий и отказоустойчивости строятся на этих основах позже. Сейчас нужен только один момент: выразительность размещения. Когда модели превышают память одного устройства, фреймворки должны дать системе обучения больше одного способа разместить работу. Модель масштаба GPT-3, например, не помещается на одном GPU: одни ее 175 млрд параметров требуют 350 ГБ в FP16, что намного превышает память любого GPU. «Измерения размещения на устройствах» предваряет идею размещения в фреймворке, не требуя пока всей машинерии распределенного обучения: система может разделить работу между группами слоев, между реплицированными батчами или внутри очень больших тензоров. Раздел «Масштабирование систем обучения» главы «Обучение моделей» позже формализует эти измерения как стратегии обучения и разбирает их коммуникационные затраты.
Измерения размещения на устройствах: сетка из восьми кластеров ускорителей в две строки и четыре столбца, каждый из которых содержит сложенные вычислительные блоки. Фигурные скобки предваряют три способа, которыми фреймворк может разместить работу, когда модель больше не помещается в одно устройство: между группами слоев, между реплицированными батчами и внутри очень больших тензоров.
Структуры данных, рассмотренные до сих пор, — тензоры, менеджеры устройств, конвейеры данных, структуры параметров и контексты распределенного исполнения, — определяют, какие данные фреймворк управляет и где они находятся. Оставшаяся задача абстракции — исполнение: что на самом деле выполняется на аппаратуре.
Базовые операции
Когда инженер пишет y = torch.matmul(x, w), расстояние между синтаксисом Python и исполнением на кремнии велико. Чтобы перекинуть мост от одного высокоуровневого вызова к тысячам параллельных потоков GPU, нужны три уровня операций, работающих согласованно. «Стек базовых операций» иллюстрирует этот стек. Операции абстракции аппаратуры управляют диспетчеризацией ядер под конкретную платформу и переносами памяти, базовые численные операции выполняют математические подпрограммы, а системные операции координируют планирование, времена жизни памяти и ресурсы ускорителей по всему вычислительному графу. Дальнейшее изложение разбирает это построение от аппаратно-специфичного пути ядра к оркестрации системы.
Стек базовых операций: три функциональных уровня связывают высокоуровневый код Python с физическим исполнением. Аппаратные операции управляют низкоуровневой диспетчеризацией ядер и переносами памяти, базовые численные операции выполняют плотные GEMM и поэлементные подпрограммы, а системные операции координируют планирование графа и времена жизни памяти на ускорителях.
Операции абстракции аппаратуры
Слой абстракции аппаратуры изолирует код фреймворка от деталей конкретной платформы. Он решает три конкретные задачи: выбор подходящего вычислительного ядра, перемещение данных по иерархии памяти и координацию исполнения между блоками обработки.
Управление вычислительными ядрами
Менеджер ядер диспетчеризует каждую поддерживаемую операцию на реализацию для текущего бэкенда. Для умножения матриц это может быть бэкенд BLAS на CPU, например Intel oneMKL или OpenBLAS (Intel Corporation, 2026; OpenBLAS Project, 2026), cuBLAS на GPU NVIDIA (NVIDIA, 2024) или специфичные для ускорителя тензорные инструкции. Выбор зависит от размерностей, типа данных, раскладки, бэкенда и эвристик библиотеки. GEMM FP16 размером на A100 может использовать путь тензорных ядер, опубликованный пиковый показатель которого здесь представлен величиной 312 TFLOP/s (Choquette et al., 2021; NVIDIA Corporation, 2020). Если бэкенд не имеет реализации для оператора, исполнение может откатиться, быть разбито на части или завершиться ошибкой, в зависимости от фреймворка и среды исполнения.
Абстракция системы памяти
Слой абстракции памяти перемещает тензоры между выгружаемой или закрепленной памятью хоста, памятью устройства и унифицированной памятью, а также преобразует раскладки данных под предпочтения аппаратуры. Например, сверточный слой может хранить активации в формате NCHW (батч, каналы, высота, ширина) на GPU NVIDIA, но преобразовывать их в NHWC для бэкенда Metal от Apple. Требования к выравниванию варьируются от 4 байт на CPU до 128 байт на некоторых ускорителях, а невыровненный доступ может вдвое снизить эффективную пропускную способность памяти. Среда исполнения также сохраняет порядок зависимостей, когда несколько блоков исполнения обращаются к одному тензору, предотвращая гонки во время параллельных операций.
Управление исполнением
Контроллер исполнения координирует работу между несколькими блоками обработки и пространствами памяти. На современном GPU графовые среды исполнения или явное использование потоков могут перекрывать независимые ядра, когда анализ зависимостей доказывает их готовность, а ядра оставляют достаточно неиспользованных ресурсов, чтобы работать одновременно. Eager-исполнение в потоке по умолчанию часто вместо этого сериализует эту работу. Контроллер вставляет барьеры синхронизации там, где зависимости по данным этого требуют, отслеживает завершение событий, чтобы запускать зависимые операции, и направляет аппаратные ошибки (сбои ECC, сторожевые таймеры таймаута) в путь обработки ошибок фреймворка.
Базовые численные операции
Когда абстракция аппаратуры управляет деталями конкретной платформы, фреймворки строят поверх нее слой математических операций. GEMM доминирует в вычислениях ML. Раздел «Обобщенное матричное умножение (GEMM)» приложения «Основы алгоритмов» выводит, как арифметическая интенсивность GEMM масштабируется с размерностью матрицы, и предсказывает, ограничен ли данный слой вычислениями или памятью, еще до запуска профилировщика. Операция составляет подавляющую часть арифметики нейронных сетей: один прямой проход ResNet-50 выполняет около 8,2 GFLOP, почти все из которых сводятся к GEMM. Фреймворки оптимизируют GEMM с помощью учитывающей кеш блочной обработки (tiling; разбиения матриц на блоки, которые помещаются в кеш L1/L2), разворачивания циклов для параллелизма на уровне инструкций и ядер, специфичных для формы. Полносвязные слои используют стандартный плотный GEMM, а сверточные слои — преобразования im2col, которые переформируют патчи входа в столбцы матрицы и превращают свертку в GEMM.
Помимо GEMM, фреймворки реализуют операции BLAS (AXPY для сложения векторов, GEMV для произведения матрицы на вектор) и поэлементные операции (функции активации, нормализацию). Поэлементные операции по отдельности дешевы, но в совокупности дороги из-за пропускной способности памяти. Каждая операция читает и записывает весь тензор, поэтому последовательность из пяти поэлементных операций над тензором в 100 МБ переносит 1 ГБ данных. Слияние этих пяти операций в одно ядро сокращает трафик памяти до 200 МБ. Экономия пропускной способности в 5 раз напрямую переводится в более быстрое исполнение.
Численная точность добавляет еще одно измерение. Обучение в FP32 использует 4 байта на параметр; квантование в INT8 сокращает это до 1 байта, снижая память в 4 раза и давая прирост пропускной способности в 2–4 раза на аппаратуре с ускорением INT8. Обучение обычно сохраняет численно чувствительные накопления в более высокой точности, тогда как вывод часто может выполнять многие операции в FP16 или INT8 с небольшой потерей качества. Фреймворки поддерживают отдельные реализации ядер для каждого формата точности и обрабатывают сценарии, в которых разные слои работают с разной разрядностью в одном прямом проходе.
Системные операции
Абстракция аппаратуры и численные операции дают строительные блоки, а системные операции их оркестрируют. Системный слой связывает планирование, управление памятью и оптимизацию ресурсов в связную среду исполнения.
Планировщик операций использует зависимости графа, чтобы найти допустимые порядки исполнения и возможную одновременность. Статический захват может раскрыть больше структуры зависимостей до исполнения, тогда как eager-среды обнаруживают работу постепенно. Ни одна из этих возможностей не гарантирует оптимального расписания или одновременного исполнения: перекрытие зависит от потоков, решений компилятора и среды исполнения, доступности ресурсов и самих операций.
Менеджер памяти выделяет и возвращает память GPU на протяжении жизни вычислительного графа. Параметры модели (модель с 7 млрд параметров занимает около 14 ГБ в FP16) сохраняются на весь прогон обучения, тогда как тензоры активаций живут только до тех пор, пока обратный проход их не использует. Кеширующий аллокатор PyTorch поддерживает пул памяти: он делит и переиспользует освобожденные блоки, не возвращая их CUDA. Это избавляет от повторных вызовов cudaMalloc, которые могут стоить десятков микросекунд и бывают еще хуже, когда синхронизируют устройство. Для моделей, превышающих память GPU, менеджер может применить контрольные точки, отбрасывая выбранные активации во время прямого прохода и пересчитывая их во время обратного. Вопрос политики (какие активации сохранять и сколько пересчета допустимо) относится к конвейеру обучения. Абстракция фреймворка делает эту политику исполнимой.
Абстракция аппаратуры
Проблема абстракции — мост между переносимым кодом и эффективным исполнением.
- Два измерения: можете ли вы различать представление данных (раскладка, тип данных, размещение) и отображение исполнения (выбор ядра, планирование) и объяснить, как они ограничивают друг друга?
- Диспетчеризация ядер: можете ли вы объяснить, почему одной и той же высокоуровневой операции (например, GEMM) нужны несколько реализаций (векторный путь CPU и путь тензорных ядер GPU) и как формы и типы данных влияют на выбор?
- Абстракция памяти: можете ли вы объяснить, почему фреймворки используют кеширующие аллокаторы и преобразования раскладки (NCHW↔NHWC), а не вызывают аллокаторы устройства для каждого тензора?
- Управление исполнением: можете ли вы описать, что делает среда исполнения, когда перекрывает независимую работу (потоки) и вставляет синхронизацию только там, где этого требуют зависимости?
Оптимизатор ресурсов интегрирует решения о планировании и памяти с выбором ядер бэкенда. Библиотеки умножения матриц выбирают между реализациями GEMM с блочной обработкой в зависимости от форм, типа данных, раскладки, рабочей памяти и аппаратуры. Winograd, напротив, — преобразование, специфичное для свертки, а алгоритм Штрассена не является обычной альтернативой, которую выбирает основная диспетчеризация GEMM в ML. Плохое расписание может оставлять ресурсы простаивающими, а фрагментация пула памяти или избыточное живое состояние могут вызвать ошибку нехватки памяти, даже когда общая емкость устройства кажется достаточной.
Тензоры, потоки и диспетчеризация ядер работают на уровне отдельных буферов и операций. Хотя эти примитивы обеспечивают высокую эффективность исполнения на аппаратуре, масштабирование разработки моделей требует организационной абстракции: компоновки тысяч низкоуровневых операций в переиспользуемые вложенные строительные блоки, называемые модулями.
Абстракция nn.Module
Механизмы, обращенные к аппаратуре (тензоры, ядра, потоки и менеджеры памяти), гарантируют, что отдельные операции исполняются на кремнии эффективно. Однако сеть вроде ResNet-50, содержащая 25,6 млн параметров в пятидесяти слоях, требует обширной координации: регистрации весов в оптимизаторах, отслеживания размещения на устройствах, переключения режимов обучения и оценки, сериализации контрольных точек. Делать это вручную утопило бы разработку модели в подверженной ошибкам работе с тензорами. Организационный слой фреймворка решает эту задачу через иерархическую композицию.
Каждый крупный фреймворк реализует это через абстракцию модуля, которая связывает тензоры параметров, прямое вычисление и хуки жизненного цикла в единый интерфейс. nn.Module в PyTorch25 — поучительный пример, потому что его шаблоны проектирования повторяются в других фреймворках: Keras использует похожие абстракции слоев (Chollet, 2018), Flax в JAX применяет аналогичные структуры модулей, а функциональный API TensorFlow имеет концептуальные параллели. Три устойчивых принципа проектирования повторяются независимо от синтаксиса и парадигмы программирования.
Автоматическое обнаружение параметров
Современная нейронная сеть может содержать миллионы обучаемых параметров, распределенных по десяткам слоев. Без автоматизации программисту пришлось бы перечислять каждый тензор параметра и передавать его оптимизатору вручную. Это процесс, подверженный ошибкам и плохо масштабирующийся со сложностью модели. Фреймворки решают эту задачу через автоматическое обнаружение параметров: система обходит дерево модулей, собирая каждый тензор параметра, чтобы оптимизатор мог обновить их одним вызовом.
В основе это задача обхода дерева. Module.__setattr__ в PyTorch регистрирует назначенный nn.Parameter или дочерний nn.Module во внутренних отображениях модуля. Вызов .parameters() рекурсивно обходит зарегистрированные подмодули и выдает зарегистрированные параметры. Другие фреймворки предоставляют аналогичные деревья или коллекции параметров, хотя их механизмы различаются.
Системное следствие значительно. Автоматическое обнаружение параметров дает оптимизатору полный набор параметров или группы параметров, что позволяет использовать сгруппированные, foreach- или слитые пути обновления, когда фреймворк и бэкенд их поддерживают. Немедленный выигрыш — корректность и компонуемость: вновь подключенные подмодули участвуют в переносах на устройства, сериализации и построении оптимизатора без отдельного ручного реестра. Это также позволяет оптимизированным путям обновления работать над коллекциями параметров без пользовательского кода для каждого параметра. «Пример регистрации параметров» демонстрирует основной механизм: присваивание атрибута запускает регистрацию, а .parameters() возвращает все обнаруженные тензоры.
Различие между параметрами и буферами иллюстрирует тонкость обнаружения. Зарегистрированные параметры появляются в .parameters() независимо от того, обучаемы они или заморожены; requires_grad отдельно управляет тем, накапливает ли autograd для них градиент. Зарегистрированные буферы перемещаются вместе с модулем и могут появляться в его словаре состояния, но исключаются из .parameters() и обычного обнаружения оптимизатором. Скользящие статистики batch normalization — распространенный пример использования буфера.
Регистрация параметров: автоматическое отслеживание параметров через присваивание атрибутов дает оптимизатору доступ ко всем обучаемым весам без ручного перечисления.
import torch
import torch.nn as nn
class CustomLayer(nn.Module):
def __init__(self, input_size, output_size):
super().__init__()
self.weight = nn.Parameter(
torch.randn(output_size, input_size)
)
self.bias = nn.Parameter(torch.randn(output_size))
self.register_buffer("running_mean", torch.zeros(output_size))
def forward(self, x):
return torch.matmul(x, self.weight.t()) + self.bias
layer = CustomLayer(10, 20)
# Фреймворк сам обнаруживает оба параметра:
for name, param in layer.named_parameters():
print(f"{name}: форма {param.shape}")
«API обнаружения параметров в разных фреймворках» показывает, как один и тот же принцип проявляется в разных фреймворках. Несмотря на синтаксические различия, все фреймворки решают одну задачу: позволить оптимизаторам находить и обновлять обучаемые параметры, сохраняя необучаемое состояние между прямыми проходами.
| Фреймворк | Доступ к параметрам | Необучаемое состояние |
|---|---|---|
| PyTorch | model.parameters() | register_buffer() |
| Keras | layer.trainable_weights | layer.non_trainable_weights |
| JAX/Flax | variables["params"] после variables = model.init(key, x) | Отдельные коллекции переменных (например, batch_stats) |
| TensorFlow | module.trainable_variables | module.non_trainable_variables |
API обнаружения параметров в разных фреймворках: каждый фреймворк открывает свой интерфейс для отличения обучаемых параметров от необучаемых буферов, но все четыре решают одну базовую задачу: позволить оптимизаторам находить веса для обновления, сохраняя состояние (скользящие статистики, замороженные тензоры) между прямыми проходами. Во всех четырех строках устойчивый шаблон состоит из аксессора обучаемых параметров для оптимизатора и отдельного канала необучаемого состояния для значений, которые должны сохраняться, но не должны получать градиенты.
Поведение, зависящее от режима
Обучение и вывод требуют разного вычислительного поведения от одного и того же графа модели. Во время обучения слои dropout случайно обнуляют элементы с вероятностью для регуляризации сети, тогда как при выводе эти же слои должны выполнять тождественное отображение, чтобы получать детерминированные выходы. Batch normalization использует статистики текущего батча во время обучения, но переключается на накопленные скользящие статистики при выводе. Если эти изменения поведения оставить программисту, пропущенное переключение режима приводит к незаметно неверным предсказаниям в продакшене.
Фреймворки решают это с помощью флага состояния, который распространяется по иерархии модулей. Один вызов .eval() у корневого модуля рекурсивно устанавливает self.training = False у каждого потомка, и каждый слой читает этот флаг, чтобы выбрать свое поведение. Это пример более широкого системного принципа: один и тот же вычислительный граф должен давать разное поведение исполнения в зависимости от контекста. Компиляторы сталкиваются с той же задачей, когда один и тот же исходный код должен давать отладочные сборки (с проверкой границ и таблицами символов) или выпускные сборки (с агрессивной оптимизацией). Шаблон распространения флага обеспечивает корректность, централизуя решение о режиме в корне, а не требуя координации в каждом слое.
Этот принцип распространяется и на заморозку параметров при переносе обучения. Установка requires_grad=False не позволяет autograd накапливать градиенты в этих параметрах и убирает хранилище их градиентов. Однако это не обязательно убирает обратное вычисление слоя, потому что градиенты все еще могут проходить через его операции, чтобы достичь обучаемых входов или более ранних параметров. Экономия поэтому зависит от того, где находится замороженная область и какие тензоры требуют градиентов.
Иерархическая композиция и сериализация
Сложные модели собираются из переиспользуемых подмодулей, образуя древовидную структуру. ResNet реализуется не как монолитный блок операций, а как иерархия: корневой модуль содержит последовательность остаточных блоков, каждый блок содержит сверточные слои и слои нормализации, а каждый слой содержит тензоры параметров. Эта иерархическая композиция должна поддерживать две критические операции, показанные на «примере вложенной композиции модулей»: рекурсивный сбор параметров для обучения и сериализацию состояния для контрольных точек и развертывания.
Вложенная композиция модулей: иерархическая композиция модулей обеспечивает рекурсивный сбор параметров и плоское отображение состояния по всему дереву модулей.
import torch
import torch.nn as nn
class ResidualBlock(nn.Module):
def __init__(self, channels):
super().__init__()
self.conv1 = nn.Conv2d(channels, channels, 3, padding=1)
self.bn1 = nn.BatchNorm2d(channels)
self.conv2 = nn.Conv2d(channels, channels, 3, padding=1)
self.bn2 = nn.BatchNorm2d(channels)
def forward(self, x):
residual = x
x = torch.relu(self.bn1(self.conv1(x)))
x = self.bn2(self.conv2(x))
return torch.relu(x + residual)
class ResNet(nn.Module):
def __init__(self, num_blocks, channels=64):
super().__init__()
self.conv_in = nn.Conv2d(3, channels, 7, padding=3)
self.blocks = nn.ModuleList(
[ResidualBlock(channels) for _ in range(num_blocks)]
)
self.fc = nn.Linear(channels, 10)
def forward(self, x):
x = self.conv_in(x)
for block in self.blocks:
x = block(x)
x = x.mean(dim=[2, 3]) # Глобальное усреднение по пространству
return self.fc(x)
model = ResNet(num_blocks=4)
total = sum(p.numel() for p in model.parameters())
print(f"Всего параметров: {total}")
# state_dict() разворачивает дерево в плоские ключи: 'blocks.0.conv1.weight' и т. д.
print(list(model.state_dict().keys())[:4])
Иерархическая композиция повторяет иерархию памяти аппаратуры в важном для системы смысле: параметры каждого подмодуля можно загружать независимо, что позволяет размещать их на разных устройствах. Когда модель слишком велика для одного GPU, фреймворк может назначить разные поддеревья иерархии модулей разным устройствам, а структура дерева задает естественные границы разбиения.
Метод state_dict() возвращает упорядоченное отображение, точечные ключи которого (например, blocks.0.conv1.weight) кодируют положение в иерархии модулей. Контрольная точка для 7 млрд параметров FP16 содержит около 14 ГБ полезной нагрузки весов до метаданных и дополнительного состояния, но формат файла и путь хранения определяют, как именно эти байты сериализуются. load_state_dict() копирует совпадающие значения параметров и буферов в уже построенный модуль и сообщает о пропущенных или лишних ключах в зависимости от настройки строгости. Он не восстанавливает иерархию модулей. Обмен между фреймворками требует совместимого представления графа и операторов в дополнение к весам.
Иерархическая структура также позволяет обходить модули систематически. Методы вроде .named_modules() перебирают все дерево, поддерживая массовые преобразования, такие как замена всех слоев BatchNorm на GroupNorm или применение инициализации Xavier ко всем слоям Linear. Эти операции обхода опираются на ту же структуру дерева, что и обнаружение параметров, и показывают, как одно проектное решение распространяет выгоды на несколько сценариев использования.
Эти три принципа (автоматическое обнаружение параметров, поведение, зависящее от режима, и иерархическая композиция с сериализацией) не специфичны для PyTorch. Каждый фреймворк должен их решать. Слои Keras, модули Flax в JAX и даже функциональные подходы решают те же задачи управления параметрами, отслеживания состояния и композиционного проектирования. Различия состоят не в том, какие задачи они решают, а в том, как они расставляют приоритеты между конкурирующими решениями. Два практических шаблона показывают, как эти принципы становятся системными средствами управления: избирательная заморозка параметров уменьшает ненужную работу с градиентами при переносе обучения («пример заморозки параметров»), а хуки модулей обеспечивают неинвазивную инспекцию («пример хуков модуля»).
Заморозка параметров: демонстрирует избирательную заморозку параметров при переносе обучения, когда предобученные слои остаются фиксированными, а новые слои обучаются.
from torchvision.models import ResNet18_Weights, resnet18
# Замораживаем все параметры предобученной
# модели
pretrained_model = resnet18(weights=ResNet18_Weights.DEFAULT)
for param in pretrained_model.parameters():
param.requires_grad = False
# Заменяем последний слой обучаемыми параметрами
pretrained_model.fc = nn.Linear(512, 10) # Новый слой обучаем
# Только fc.parameters() получат градиенты
# во время обучения
optimizer = torch.optim.Adam(
filter(lambda p: p.requires_grad, pretrained_model.parameters()),
lr=0.001,
)
Хуки модулей — инспекционный аналог заморозки параметров: они перехватывают промежуточные вычисления без изменения кода модели и позволяют диагностировать поток градиентов и отслеживать активации. «Пример хуков модуля» показывает оба типа хуков.
Вместе эти шаблоны (обнаружение параметров, заморозка и хуки) показывают, как три принципа превращаются в практические API. Эти шаблоны nn.Module иллюстрируют подход PyTorch к проблеме абстракции. Однако PyTorch — лишь один из нескольких крупных фреймворков, и его решения (изменяемое состояние, наследование классов, eager-исполнение по умолчанию) не единственно возможные точки проектирования. TensorFlow иначе централизует состояние, а JAX вовсе избегает изменяемого состояния. Это не поверхностные различия API: они отражают принципиально разные ответы на три задачи, с которых начинается глава.
Хуки модуля: показывает forward- и backward-хуки для инспекции активаций и градиентов во время обучения.
import torch
import torch.nn as nn
model = nn.Sequential(nn.Linear(10, 20), nn.ReLU(), nn.Linear(20, 5))
# Forward-хук для инспекции активаций
def forward_hook(module, input, output):
print(
f"Слой: {module.__class__.__name__}, "
f"форма выхода: {output.shape}, "
f"mean={output.mean():.3f}, "
f"std={output.std():.3f}"
)
# Backward-хук для инспекции градиентов
def backward_hook(module, grad_input, grad_output):
print(f"Норма градиента: {grad_output[0].norm():.3f}")
# Регистрируем хуки на конкретном слое
handle_fwd = model[0].register_forward_hook(forward_hook)
handle_bwd = model[0].register_full_backward_hook(backward_hook)
# Выполняем прямой и обратный проход
x = torch.randn(32, 10)
y = model(x)
loss = y.sum()
loss.backward()
# Удаляем хуки по завершении
handle_fwd.remove()
handle_bwd.remove()
Анализ фреймворков-платформ
Команда, которая быстро прототипирует, но не может развернуть полученную модель, или которая надежно развертывает, но не может отлаживать сбои обучения, столкнулась с компромиссом проектирования фреймворка, а не с отсутствующим вызовом API. Каждый крупный фреймворк решает все три основные задачи, но делает акцент на разном пути через них. TensorFlow связывает eager-разработку с захватом графа и широкой экосистемой развертывания. PyTorch начинает с eager-исполнения и добавляет пути захвата, компиляции и экспорта. JAX организует дифференцирование, векторизацию и компиляцию как компонуемые преобразования функций. Это архитектурные акценты, а не исключительные возможности, и их ценность зависит от нагрузки и целевой платформы развертывания.
Каждый фреймворк оптимизирован под свое системное узкое место.
TensorFlow: eager-разработка с развертыванием по графу
Архитектура TensorFlow охватывает eager-разработку и оптимизацию на основе графов на аппаратуре от облачных TPU до микроконтроллеров. TensorFlow 2 исполняется в eager-режиме по умолчанию. Чувствительные к производительности функции можно захватить через tf.function, а форматы развертывания направляют захваченные вычисления на серверные, мобильные и браузерные среды исполнения. Этот двойной путь сохраняет возможности производственного графа, унаследованные от TensorFlow 1.x, не требуя, чтобы каждая программа TensorFlow 2 строила полный граф перед запуском.
Внутри захваченной tf.function TensorFlow может применять оптимизации графа, такие как свертка констант, слияние операторов и планирование раскладки. «Конвейер от обучения до развертывания в TensorFlow» показывает более широкий конвейер от обучения до развертывания: от предобработки данных и распределенного обучения до экспорта SavedModel, TensorFlow Serving, TensorFlow Lite, TensorFlow.js и языковых привязок.
Конвейер от обучения до развертывания в TensorFlow: формат SavedModel служит центральной границей развязки между обучением и развертыванием. Он захватывает структуру графа, веса и сигнатуры из разнородных установок обучения (слева) и экспортирует их напрямую в среды исполнения для целевых платформ (справа), включая TF Serving, TF Lite и TF.js, без необходимости Python в продакшене.
Хотя TensorFlow 2.0 ввел eager-исполнение, чтобы соединить исследования и продакшен, TensorFlow 2.x все еще предоставляет tf.function как путь преобразования в граф для чувствительного к производительности кода (TensorFlow Developers, 2024). Его ключевая сила остается в надежном, скомпилированном пути от исследований до развертывания в глобальном масштабе. Глава «Обучение моделей» и глава «Обслуживание моделей» позже разбирают инфраструктуру масштабирования и продакшена, которая использует эти пути экспорта.
PyTorch: стандарт eager-исследований
Там, где графовый подход TensorFlow ставит на первое место оптимизацию продакшена, PyTorch делает противоположный выбор: он ставит на первое место опыт разработчика. Архитектура PyTorch представляет принципиально иной ответ на проблему исполнения, построенный на динамических графах («определение через исполнение», Define-by-Run). Вместо того чтобы строить план до исполнения, PyTorch строит вычислительный граф на лету, по мере выполнения кода. Facebook AI Research (FAIR) принял этот дизайн, потому что исследователям нужна немедленная обратная связь при экспериментах с новыми архитектурами. Цикл «сначала определить, потом выполнить» у статических графов вводил задержку на компиляцию, которая замедляла быстрое прототипирование, необходимое для исследовательских рабочих процессов.
Подход PyTorch подходит для исследовательского поиска по той же причине: он рассматривает глубокое обучение как обычное программирование на Python. Разработчики могут использовать циклы, условия и отладчики Python (например, pdb) прямо внутри прямого прохода модели, без особого синтаксиса, без отдельного шага компиляции и без ожидания, чтобы понять, работает ли код. Eager-исполнение обеспечивает быструю итерацию и интуитивное проектирование моделей, что важно, когда архитектуры и цели обучения еще меняются.
Ответ PyTorch на проблему дифференцирования — autograd на основе ленты («Внутреннее устройство autograd в PyTorch»): гибкий и удобный для отладки, но труднее оптимизируемый глобально, потому что лента перестраивается на каждой итерации. Его ответ на проблему абстракции скорее прагматичный, чем всеобъемлющий: сильная поддержка GPU через cuBLAS и cuDNN, с путями развертывания, включающими torch.export, ориентированный на периферию ExecuTorch, открытый формат обмена нейронными сетями (ONNX) и специализированные среды исполнения.
Поэтому компромисс состоит в более фрагментированном пути развертывания. Поскольку граф динамический, фреймворк не может легко выполнять глобальные оптимизации до исполнения. Модель, которая отлично работает в разработке, может упереться в стены производительности в продакшене, когда накладные расходы диспетчеризации доминируют над мелкими операциями. Чтобы преодолеть этот разрыв между исследованием и продакшеном, PyTorch ввел пути захвата графа и компиляции, от исторического TorchScript до torch.compile и рабочих процессов экспорта. Они позволяют разработчикам захватить динамическую модель и превратить ее в оптимизированное представление для развертывания. Эта эволюция показывает, как eager-фреймворк может двигаться к продакшен-концу непрерывности компиляции, сохраняя интерактивный опыт, ради которого был создан.
JAX: движок функциональных преобразований
Eager-исполнение PyTorch и графовая компиляция TensorFlow представляют две точки на спектре, но оба имеют императивное программистское наследие, где вычисление идет как последовательность операций с состоянием. JAX представляет принципиально иной пользовательский подход, построенный на принципах функционального программирования и компонуемых преобразованиях программ, а не на объектных лентах или графовых API, которые пишет пользователь (Bradbury et al., 2018). Разработанный в Google Research, JAX особенно полезен для задач, требующих пользовательского дифференцирования, передовых исследований оптимизации и крупномасштабного распределенного обучения.
Архитектура JAX рассматривает дифференцирование, векторизацию и компиляцию как преобразования функций. Функция jax.grad возвращает функцию, которая вычисляет градиенты, и ее затем можно снова преобразовать, когда интерфейсы совместимы. Например, vmap(grad(f)) может вычислить поэкземплярные градиенты, а jit(vmap(grad(f))) может скомпилировать это батчевое вычисление. Порядок преобразований имеет семантический смысл, а не выбирается произвольно.
Функциональная парадигма JAX меняет модель программирования с «отслеживания состояния через объекты» на «преобразование чистых функций». Тогда как PyTorch и TensorFlow открывают autograd в основном через динамические ленты или пути компиляции графов, JAX просит пользователей написать чистые функции Python и затем применяет к ним преобразования. Автоматическое дифференцирование, векторизация и JIT-компиляция — все это преобразования программ, которые могут компоноваться. «Пример трансформаций JAX» демонстрирует этот подход.
Трансформации функций JAX: JAX рассматривает дифференцирование, векторизацию и компиляцию как компонуемые преобразования функций, а не как операции графа, которые пишет пользователь.
import jax
import jax.numpy as jnp
def loss_fn(params, x, y):
pred = jnp.dot(x, params["w"]) + params["b"]
return jnp.mean((pred - y) ** 2)
# Преобразование: вычисляем градиенты
grad_fn = jax.grad(loss_fn)
# Преобразование: векторизуем по измерению батча
batched_grad = jax.vmap(grad_fn, in_axes=(None, 0, 0))
# Преобразование: компилируем в XLA
fast_batched_grad = jax.jit(batched_grad)
# Комбинируем все три: быстрое батчевое вычисление градиентов
Такой функциональный подход требует чистых функций (без побочных эффектов) и неизменяемых данных (массивы нельзя менять на месте). Эти ограничения могут казаться жесткими тем, кто пришел из изменяемой объектной модели PyTorch, но они дают формальные гарантии: компилятор может безопасно переупорядочивать, сливать и распараллеливать операции, потому что выходы функции зависят только от входов. Ограничение и есть свойство: именно чистота делает возможной композицию преобразований.
Мощь JAX возникает из композиции. jax.grad возвращает функцию градиента; jax.vmap может векторизовать совместимую функцию по отображаемым осям; а jax.jit может трассировать и компилировать устойчивую преобразованную функцию для конкретной сигнатуры аргументов. В отличие от итеративного цикла Python, который последовательно выдает отдельные операции с повторной диспетчеризацией, jax.vmap переносит измерение батча прямо в базовые примитивы. Так поэкземплярные матрично-векторные операции превращаются в батчевые умножения матриц (GEMM), исполняемые в одном параллельном запуске ядра. jax.pmap отображает функцию на устройства, но синхронизацию или агрегацию градиентов нужно выражать через коллективные операции, такие как lax.psum или lax.pmean. Эти преобразования компонуются согласно своим типам и семантике, и разный порядок может вычислять разные величины.
Тот же минималистичный ядровой слой делегирует абстракции нейронных сетей сопутствующим библиотекам (Flax, Haiku, Equinox), а оптимизацию — Optax. Такое разделение отражает функциональную философию: ядро предоставляет преобразования, а библиотеки строят над ними привычные абстракции. Компромисс в том, что готовность к продакшену зависит не только от модели преобразований, но и от зрелости окружающих библиотек, путей экспорта и инструментов эксплуатации для целевой среды.
Функциональные ограничения, которые накладывает JAX, становятся преимуществами в отдельных областях. Пользовательское дифференцирование (градиенты высших порядков, пользовательские правила векторно-якобиановых произведений (VJP) и произведений Якобиана на вектор (JVP)) компонуется чисто, потому что чистые функции делают правила дифференцирования предсказуемыми. Исследования алгоритмов оптимизации выигрывают от преобразований, которые позволяют исследователям манипулировать вычислением градиента так же естественно, как данными. Вычислительно тяжелые нагрузки на ускорителях используют XLA, чтобы извлечь больше загрузки, когда программу можно выразить в этом функциональном стиле. Научные вычисления с требованиями AD выигрывают от функциональной чистоты, которая позволяет математически рассуждать о коде. JAX требует больших первоначальных вложений, чем PyTorch: у функциональной парадигмы есть кривая обучения, управление состоянием требует явных шаблонов, а отладка скомпилированного кода труднее, чем eager-исполнение. Командам стоит выбирать JAX, когда его сильные стороны совпадают с требованиями проекта, а не по умолчанию.
Компромиссы фреймворков при измерении
В предыдущих разделах философия проектирования каждого фреймворка описывалась качественно: граф в первую очередь или eager в первую очередь, с состоянием или функционально. Полезное сравнение — не то, какой фреймворк самый быстрый в абстракции, потому что ответ меняется в зависимости от формы модели, размера батча, бэкенда аппаратуры и конфигурации компилятора. Полезно то, что каждый дизайн позволяет системе увидеть и оптимизировать. «Компромиссы проектирования фреймворков» поэтому сопоставляет TensorFlow, PyTorch и JAX с тремя задачами фреймворка: видимостью исполнения, моделью дифференцирования и путем абстракции аппаратуры.
| Аспект | TensorFlow | PyTorch | JAX |
|---|---|---|---|
| Тип графа | Статический корень, динамический фронтенд в 2.x | Динамический | Функциональные преобразования |
| Модель программирования | Императивный фронтенд, путь захвата графа | Императивная | Функциональная |
| Основная структура данных | Тензор с управляемым фреймворком состоянием | Тензор с управляемым фреймворком состоянием | Неизменяемый массив |
| Режим исполнения | По умолчанию eager, граф для оптимизации | По умолчанию eager | Трассировка и JIT-компиляция |
| Автоматическое дифференцирование | Обратный режим над захваченными вычислениями | Обратный режим над eager-лентой | Преобразования прямого и обратного режимов |
| Абстракция аппаратуры | Широкие среды развертывания и пути XLA | Нативный путь GPU плюс среды экспорта и компиляции | Компиляция ускорителей, центрированная на XLA |
| Риск оптимизации | Захват графа и покрытие операторов | Разрывы графа после eager-разработки | Чистота, стабильность форм и трассировка |
Компромиссы проектирования фреймворков: каждый столбец отражает отдельный ответ на три основные задачи. TensorFlow делает центральными развертывание и захват графа, PyTorch — eager-исполнение и отладку, а JAX — функциональные преобразования и видимость для компилятора. Таблица — диагностическая карта, а не рейтинг по производительности.
Следствие для измерений прямое: профилируйте ограничение, которое каждый фреймворк делает наиболее видимым. В PyTorch проверьте, доминируют ли eager-диспетчеризация или разрывы графа. В TensorFlow проверьте, покрывает ли захваченный граф нужные операторы и целевую платформу развертывания. В JAX проверьте, позволяют ли формы и чистота XLA скомпилировать программу, которая реально исполняется. Сравнение фреймворков или таблица лидеров могут сориентировать решение, но не заменяют профилирование конкретной нагрузки на целевой аппаратуре.
Одна и та же простая сеть показывает, как каждая философия проектирования формирует код. «Пример: привет, мир фреймворков» реализует одну нейронную сеть, один линейный слой, отображающий десять входов в один выход, во всех трех фреймворках.
Эти три реализации решают одну и ту же математическую задачу, но показывают разные ответы на три задачи. Различия не косметические: они формируют рабочие процессы отладки, варианты развертывания и потенциал оптимизации.
PyTorch связывает состояние и вычисление через наследование классов (nn.Module), решая проблему исполнения через eager-вычисление: граф строится по мере выполнения Python, так что стандартные отладчики и поток управления работают естественно. Без захвата графа оптимизатор не видит полного вычисления до начала исполнения.
TensorFlow/Keras также исполняется eager по умолчанию в TensorFlow 2, но структурированные модели можно захватить через tf.function и экспортировать в поддерживаемые среды развертывания. Переносимость все равно зависит от покрытия операторов и конвертации для каждой цели.
JAX рассматривает модель как чистую функцию26 с неизменяемыми данными и без внутреннего состояния. В этой модели grad, vmap (автоматическая векторизация) и jit (JIT-компиляция27) — компонуемые преобразования функций без состояния, а не методы, прикрепленные к изменяемой объектной системе. Цена — явное управление параметрами и модель программирования, которая может быть непривычна инженерам, пришедшим из фреймворков с состоянием.
Сравнение фреймворков: привет, мир: одна и та же простая нейронная сеть, реализованная в PyTorch (объектно-ориентированно), TensorFlow/Keras (декларативно) и JAX (функционально), иллюстрирует отличающуюся философию каждого фреймворка.
# PyTorch — динамический, «питонический»
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(10, 1)
def forward(self, x):
return self.fc(x)
# TensorFlow/Keras — высокоуровневый API
import tensorflow as tf
model = tf.keras.Sequential(
[tf.keras.layers.Dense(1, input_shape=(10,))]
)
# JAX — функциональный подход
import jax.numpy as jnp
from jax import random
def simple_net(params, x):
return jnp.dot(x, params["w"]) + params["b"]
key = random.PRNGKey(0)
key_w, key_b = random.split(key)
params = {
"w": random.normal(key_w, (10, 1)),
"b": random.normal(key_b, (1,)),
}
Ни один фреймворк не максимизирует все три цели одновременно. Программа на десять строк делает компромисс видимым в исходном коде, а не скрытым во внутренностях компилятора: где живет состояние, когда существует граф и что компилятору разрешено видеть. Базовая валюта — видимость для компилятора против задержки человеческой итерации. Захват графа и опережающая компиляция могут снизить накладные расходы исполнения и перенос промежуточных данных. Eager-вычисление сокращает цикл итераций человека (этот выигрыш лежит вне уравнения времени исполнения из железного закона), но ценой видимости для компилятора, пока не используется путь захвата графа. Функциональная чистота дает XLA больше свободы в преобразовании стабильной трассированной программы. Каждая философия формирует также синтаксис кода, командные рабочие процессы, практики отладки и конвейеры развертывания, поэтому стоимость миграции растет вместе с проектно-специфичными интеграциями и допущениями.
Карта ограничений сред исполнения
Тот же принцип распространяется за пределы трех универсальных фреймворков. Семейства сред исполнения различаются тем, что они убирают разную степень гибкости в обмен на видимость для компилятора, меньшие бинарные файлы или исполнение для конкретной аппаратуры. «Карта ограничений сред исполнения» поэтому является картой ограничений: каждая строка показывает, чем жертвует среда исполнения, какой путь оптимизации это открывает и какой режим отказа стоит проверить до выбора.
| Семейство сред исполнения | Где применяется | Якорь ограничения | Путь оптимизации | Ограничение для проверки |
|---|---|---|---|---|
| PyTorch eager | Исследования и итерации | Базовая задержка; полный объем Python и среды исполнения | Динамические графы, отладка в eager-режиме | Накладные расходы диспетчеризации и отсутствие видимости графа |
| Скомпилированные PyTorch/TensorFlow | Обучение и обслуживание на серверах | Зависящий от нагрузки выигрыш, когда захват графа чистый | Захват графа, слияние, планирование раскладки | Покрытие операторов и разрывы графа |
| TensorFlow Lite/Core ML | Мобильный и периферийный вывод | Задержка на конкретной мобильной платформе и бюджеты размера пакета | Квантование, статические графы, делегаты NPU | Ограничения конвертации для конкретной платформы |
| TF Lite Micro/microTVM | Вывод на микроконтроллерах | Бюджеты ОЗУ и флэш-памяти конкретного микроконтроллера | Статическое выделение, ядра INT8 | Выбранные операторы и ограниченная память |
| ONNX Runtime | Кроссфреймворковое обслуживание | Зависит от бэкенда; может совпадать с нативными средами для поддерживаемых графов | Стандартный формат графа, провайдеры исполнения | Пробелы экспорта и откаты для пользовательских операторов |
| TensorRT/TVM | Вывод, специализированный под аппаратуру | Зависящий от цели выигрыш относительно неподстроенных eager-базовых вариантов | Слияние ядер, понижение точности, автонастройка | Более узкие допущения о цели и конвертации |
Карта ограничений сред исполнения: читайте каждую строку слева направо как одну сделку: семейство жертвует гибкостью, получает путь оптимизации и приобретает новый способ отказа. Средний столбец фиксирует, где семейство находится относительно неподстроенной eager-базы, а не измеренный результат. Поэтому задержку, потребление памяти, энергию и загрузку все равно нужно измерять для конкретной модели, аппаратуры, точности, размера батча и конфигурации компилятора.
Карта показывает один системный паттерн, а не рейтинг продуктов. Каждый шаг к более узкой среде исполнения обменивает гибкость на более предсказуемый план исполнения. Специализированные среды вывода, такие как TensorRT и Apache TVM, могут дать существенное снижение задержки, когда модель конвертируется чисто и целевая платформа известна. Мобильные и микроконтроллерные среды уменьшают объем, убирая машинерию обучения и полагаясь на статические графы, квантование, делегаты платформы или фиксированные арены памяти. Делегат — подключаемый модуль среды исполнения, который направляет поддерживаемые операторы на целевой ускоритель и откатывается, когда оператор не поддерживается. Инженерный вопрос всегда в том, что было удалено, чтобы оптимизация стала возможной, потому что неподдерживаемые операторы, динамические формы или разрывы графа могут свести на нет ожидаемое преимущество.
Эти разрывы в эффективности становятся жесткими ограничениями за пределами серверной. Кратный разрыв в задержке между eager-исполнением и специализированным движком вывода — это возможность оптимизации на облачном GPU. На микроконтроллере фреймворк, который превышает объем памяти устройства, не может работать вовсе. Критерий выбора смещается от сырой задержки к вопросу, помещается ли фреймворк в рамки памяти и среды исполнения.
Целевые платформы развертывания
Вдоль спектра от облака до периферии выбор фреймворка перевешивает три основные задачи в зависимости от аппаратных границ. Разрывы производительности, измеренные в «Компромиссы фреймворков при измерении», определяют пропускную способность обучения и операционные затраты в дата-центре. Развертывание в периферийных средах превращает эффективность среды исполнения в бинарный тест осуществимости. Задача исполнения смещается от компромисса между отлаживаемостью и оптимизацией графа к жесткому размещению вычисления в рамках задержки и памяти. Задача дифференцирования исчезает для нагрузок, где выполняется только вывод, устраняя накладные расходы хранения стеков активаций и обратных графов. Тем временем задача абстракции обостряется, потому что программные цели гетерогенны: серверные CPU x86 и ARM, мобильные NPU, периферийные TPU и микроконтроллеры с десятками килобайт SRAM.
«Карта ограничений целевых платформ развертывания» сопоставляет эти допущения сред исполнения вдоль спектра от облака до периферии, детализируя рычаги оптимизации и обязательные физические ограничения, которые определяют каждый уровень аппаратуры.
| Среда | Допущения среды исполнения, которые обычно подходят | Рычаг оптимизации | Обязательное ограничение |
|---|---|---|---|
| Облако/сервер | Полные фреймворки обучения и обслуживания | Компиляция графов, батчинг, пониженная точность | Пропускная способность, стоимость |
| Периферия | Статический граф или переносимая среда обслуживания | Статические графы, ядра пониженной точности | Специфичные для нагрузки задержка и память |
| Мобильные устройства | Среда, интегрированная в приложение, с делегатами | Делегаты ускорителей, компактные форматы моделей | Ограничения батареи, теплового режима и размера приложения |
| Микроконтроллер (TinyML) | Миниатюрная среда с фиксированным выделением | Статическое выделение, малые целочисленные ядра | Жесткая ОЗУ, отсутствие динамической памяти |
Карта ограничений целевых платформ развертывания: допущения среды исполнения, рычаги оптимизации и обязательные ограничения для каждого уровня развертывания, от серверов в облаке до микроконтроллеров.
Эти границы показывают, почему выбор целевой платформы работает как жесткий фильтр архитектуры фреймворка, а не как поздняя деталь упаковки. Например, модель KWS «умного дверного звонка» из раздела «Фреймворки для периферии» иллюстрирует уровень микроконтроллера. Работа в пределах килобайт памяти требует среды исполнения с фиксированной предвыделенной ареной и компактным ядром на C/C++, полностью исключая динамическое выделение памяти и накладные расходы среды Python. Это физическое ограничение задает практическое разделение: инженерные команды обучают модели в выразительных динамических средах на облачных GPU, но должны развертывать их в средах с гораздо более узкими допущениями исполнения.
Формат ONNX28 решает эту фрагментацию, стандартизируя обмен моделями между средами исполнения (ONNX Contributors, 2019). Конвейер может обучить архитектуру в PyTorch, экспортировать граф вычислений в промежуточное представление ONNX и исполнить сериализованный граф в ONNX Runtime или скомпилировать его для целевого ускорителя. В отличие от этого, TensorFlow Lite опирается на собственный путь конвертации, переводя SavedModel TensorFlow во FlatBuffers, а не через ONNX. Хотя стандартные форматы обмена сокращают ручную конвертацию моделей между средами разработки и продакшена, они не устраняют проверку совместимости, пробелы в покрытии операторов и накладные расходы откатов на пользовательские ядра. Стратегии сжатия и обслуживания моделей, разобранные в главах «Сжатие моделей» и «Обслуживание моделей», строятся непосредственно на этой границе экспорта.
«Взаимодействие фреймворков» иллюстрирует эту топологию взаимодействия по схеме «звезда». Фреймворки обучения экспортируют графы вычислений в единое промежуточное представление, а нижестоящие среды исполнения и аппаратные бэкенды загружают это представление, чтобы исполнять его на гетерогенных целях.
Взаимодействие фреймворков: входящие спицы представляют экспорт в общий формат ONNX, а исходящие — загрузку в совместимые инструменты и среды исполнения. Переносимость требует поддержки с обеих сторон этой границы.
Форматы обмена смягчают фрагментацию фреймворков, но граница экспорта не может спасти архитектуру, которая нарушает физические пределы цели. Конвертация графа в ONNX или во встраиваемую среду после завершения разработки не устранит чрезмерный объем памяти, отсутствующие аппаратные операторы или неподдерживаемый динамический поток управления. Если откладывать мысли о развертывании на потом, дорогостоящие переписывания неизбежны, поэтому систематическая оценка компромиссов аппаратуры и среды исполнения необходима еще до написания первой строки кода модели.
Выбор фреймворка
Выбор фреймворка — это задача оптимизации с ограничениями по измерениям исполнения, дифференцирования и абстракции аппаратуры, введенным в этой главе. Вопрос не в том, какой фреймворк «лучший». Вопрос в том, какая модель исполнения, какая система дифференцирования и какой путь абстракции выдержат ограничения проекта.
Пространство компромиссов при выборе фреймворка
Выбор фреймворка включает три взаимосвязанных противоречия. Первое — между скоростью разработки и производительностью в продакшене: eager-исполнение ставит на первое место скорость итераций, тогда как компиляция графа ставит на первое место оптимизацию во время исполнения. Исследовательским командам, которым нужно проверять десять вариантов архитектуры в день, нельзя позволить себе минуты компиляции между экспериментами. Продакшен-командам, которые развертывают одну модель месяцами, нельзя позволить себе штраф пропускной способности от eager-диспетчеризации. Оптимальная точка сдвигается по мере того, как проект проходит свой жизненный цикл.
Это противоречие скорости и производительности ведет прямо ко второму: гибкость против глубины оптимизации. Eager-исполнение делает управление потоком на языке хоста естественным, но ограничивает область компилятора, пока не будет захвачена более крупная область. Статические графы могут представлять управление потоком, зависящее от данных, через специальные операторы графа. Они открывают более крупные подграфы для слияния ядер между операторами, которое устраняет промежуточные обмены с HBM и держит промежуточные активации в SRAM на чипе. Как показывает таблица «Дополнительные компромиссы графов», этот компромисс каскадом распространяется через управление памятью, использование аппаратуры и рабочие процессы отладки. Это архитектурное ограничение, которое управляет всем конвейером исполнения.
Противоречие гибкости и оптимизации, в свою очередь, открывает третье: широту экосистемы против специализации. Фреймворки общего назначения покрывают широкие каталоги операторов, но часто уступают специализированным средам исполнения на нагрузках, которые те могут глубоко оптимизировать. Такие системы, как TensorRT и TVM, оптимизируют под более узкие целевые платформы развертывания через агрессивное слияние ядер, выбор точности и планирование раскладки памяти, специфичной для аппаратуры (NVIDIA, 2024; Chen et al., 2018). Форматы обмена, такие как ONNX, перекрывают часть этого разрыва (ONNX Contributors, 2019). Но специализация среды исполнения вводит собственные режимы отказа: когда экспортированная модель встречает неподдерживаемый оператор, исполнение должно откатиться на неоптимизированные ядра или вызвать дорогие синхронизации хоста и устройства.
Ограничения выбора фреймворка
Вместо поиска «лучшего» фреймворка эффективный выбор сначала отсеивает кандидатов, которые не могут выполнить жесткие ограничения: целевую платформу развертывания, нужные операции, путь компиляции и экспертизу команды. Только затем мягкие предпочтения, такие как производительность, скорость разработки и экосистема, ранжируют оставшихся.
Экосистема TensorFlow наглядно показывает, как эти оси взаимодействуют. Ее три варианта (TensorFlow, TensorFlow Lite и TensorFlow Lite Micro) прослеживают одну философию проектирования через все более жесткие физические ограничения. «Поддержка моделей вариантами TensorFlow» показывает получающиеся компромиссы в выразительности моделей.
| TensorFlow | TensorFlow Lite | TensorFlow Lite для микроконтроллеров | |
|---|---|---|---|
| Обучение | Да | Ограниченное | Нет |
| Вывод | Да | Да | Да |
| Покрытие операторов | Широкое | Ориентировано на вывод | Подмножество, выбранное моделью |
| Собственные средства пониженной точности | Да | Да | Да |
Поддержка моделей вариантами TensorFlow: четыре строки показывают, что может выразить каждый вариант, а не насколько он велик. Возможность обучения исчезает по мере снижения уровня, тогда как вывод и средства пониженной точности сохраняются полностью. Поэтому различающей строкой остается покрытие операторов: широкое в TensorFlow, ориентированное на вывод в TensorFlow Lite и сведенное к операторам, которые выбрала одна модель, в TensorFlow Lite Micro. Размер бинарного файла и объем памяти приведены в «Аппаратные цели TensorFlow».
Эта прогрессия показывает, что эффективность среды исполнения покупается ценой общности: меньшее число поддерживаемых операций позволяет получить меньшие бинарные файлы, детерминированные раскладки памяти и агрессивную оптимизацию в пониженной точности.
Критерии выбора фреймворка
Три измерения структурируют систематическую оценку фреймворка: что требует модель (поддерживаемые операции и семантику графа), что предоставляет программная среда (службы операционной системы, аллокаторы памяти и делегирование ускорителям) и что физически позволяет аппаратура (вычислительная пропускная способность, объем памяти и тепловые пределы мощности). Каждое измерение работает как фильтр: жесткие ограничения отсеивают нежизнеспособных кандидатов, а мягкие предпочтения ранжируют оставшихся.
Требования модели
Главное ограничение — может ли фреймворк выразить операции и семантику исполнения, которые нужны модели. Как показано в «Поддержка моделей вариантами TensorFlow», покрытие операторов сужается от широкого каталога TensorFlow общего назначения до набора TensorFlow Lite, ориентированного на вывод, и наконец до минимального подмножества, выбранного моделью и подключенного в TensorFlow Lite Micro. Каждое сужение убирает динамические операторы и машинерию обучения, концентрируя ресурсы компилятора на статических ядрах. Лежащий в основе системный принцип: алгоритмическая выразительность напрямую обменивается на машинную эффективность. Ограничение набора поддерживаемых операторов позволяет компиляторам убирать мертвый код, генерировать плотные внутренние циклы, держащие данные в регистрах, и устранять накладные расходы динамической диспетчеризации. Помимо покрытия операторов, требования модели также задают семантику графа: должно ли вычисление исполняться динамически или его можно захватить заранее.
Динамические и статические вычислительные графы
Различие статических и динамических графов (разобранное в «Проблема исполнения») имеет прямые последствия для анализа требований модели. Статические графы требуют, чтобы управление потоком и динамическое поведение были представлены в формах, понятных среде исполнения графа, что позволяет оптимизацию заранее для развертывания. Eager-исполнение следует обычному потоку управления Python напрямую, тогда как пути захвата графа, такие как
torch.compileиtf.function, возвращают возможности оптимизации, когда могут представить исполняемую программу.
Программные зависимости
Когда выразительность модели подтверждена, фреймворк должен интегрироваться с целевой программной средой. «Сравнение возможностей вариантов TensorFlow» показывает, как зависимости от операционной системы, механизмы загрузки моделей и делегирование ускорителям различаются между уровнями развертывания.
| TensorFlow | TensorFlow Lite | TensorFlow Lite для микроконтроллеров | |
|---|---|---|---|
| Нужна ОС | Да | Да | Нет |
| Доступ к модели | Файловая система или сервис | Отображение хранилища, специфичное для платформы | Скомпилированное или отображенное хранилище, специфичное для платформы |
| Поддержка ускорителей | Да | Делегаты | Оптимизированные ядра и интеграции |
Сравнение возможностей вариантов TensorFlow: возможности TensorFlow, TensorFlow Lite и TensorFlow Lite Micro в отношении зависимости от операционной системы, управления памятью и аппаратного ускорения. Последовательное ужесточение ограничений между вариантами позволяет выбирать по контексту развертывания: от полномасштабных серверов до периферийных устройств с ограниченными ресурсами.
Эти различия показывают, как отказ от программных абстракций расширяет область развертывания. Стандартный TensorFlow опирается на полные службы POSIX-совместимой операционной системы, динамические разделяемые библиотеки и виртуальные аллокаторы памяти. TensorFlow Lite смягчает эти требования для мобильных платформ: он обращается к моделям через отображаемые в память файлы и делегирует операции аппаратным ускорителям через API среды исполнения от производителя. TensorFlow Lite Micro полностью убирает зависимость от операционной системы, позволяя исполнение без ОС (bare metal) на микроконтроллерах без файловой системы POSIX и динамической кучи (хотя он может работать вместе с RTOS, такой как FreeRTOS или Zephyr). Файл модели FlatBuffer компилируется прямо в константный массив байтов, размещенный во флэш-памяти только для чтения. Аппаратное ускорение опирается на статически связанные ядра CMSIS-NN или DSP-ассемблер, а не на динамические драйверные делегаты. Каждая отброшенная программная зависимость открывает более ограниченный уровень физической аппаратуры.
Аппаратные ограничения
Одной программной совместимости недостаточно для исполнения: среда исполнения фреймворка должна поместиться в физические пределы объема памяти, хранилища и вычислительной пропускной способности. Как сведено в «Аппаратные цели TensorFlow», архитектуры целевых процессоров меняются по уровням развертывания: от серверных x86 CPU, GPU и TPU в дата-центрах через прикладные процессоры Arm Cortex-A на мобильной периферии до маломощных микроконтроллеров Arm Cortex-M и DSP.
| TensorFlow | TensorFlow Lite | TensorFlow Lite для микроконтроллеров | |
|---|---|---|---|
| Базовый размер бинарного файла | Зависит от сборки и упаковки | Зависит от сборки и делегатов | Зависит от выбора модели и операторов |
| Базовый объем памяти | Зависит от модели, среды и аллокатора | Зависит от модели, делегатов и аллокатора | Фиксированная арена плюс состояние среды |
| Оптимизированные архитектуры | x86, TPU, GPU | Arm Cortex-A, x86 | Arm Cortex-M, DSP, MCU |
Аппаратные цели TensorFlow: варианты TensorFlow нацелены на все более ограниченное железо, переходя от x86, GPU и TPU к Arm Cortex-A, а затем к Arm Cortex-M, DSP и микроконтроллерам. Фактический размер бинарного файла и объем памяти зависят от сборки, выбранных операторов, делегатов, модели и конфигурации среды исполнения.
Эти аппаратные границы отражают фундаментальные физические ограничения, такие как барьер скорости света, энергетическая стена и стена памяти, которые делят спектр развертывания на отдельные эксплуатационные режимы («Физические ограничения: почему существуют парадигмы»). В дата-центре многомегабайтные бинарные файлы среды исполнения и накладные расходы динамического управления памятью ничтожны по сравнению с гигабайтами высокоскоростной памяти устройства. На микроконтроллере с 256 КБ SRAM и 1 МБ флэш-памяти универсальную среду исполнения даже нельзя загрузить. Фреймворк должен заменить динамические аллокаторы кучи единой предвыделенной ареной памяти, размер которой задан заранее, чтобы вместить активации тензоров и буферы скретчпада.
Факторы оценки готовности к продакшену
Удовлетворение требований модели, программных зависимостей и аппаратных ограничений устанавливает техническую осуществимость, но жизнеспособность в продакшене требует оценки операционной надежности при устойчивых серверных нагрузках. Среды исполнения, которые опираются на динамическое выделение памяти или интерпретаторы языка хоста, вносят разброс хвостовой задержки (p99) из-за пауз сборки мусора и фрагментации кучи. Напротив, ориентированные на продакшен среды исполнения обеспечивают статические арены тензоров и опережающее понижение графа, чтобы гарантировать детерминированное время исполнения.
Оптимизация точности — центральный операционный рычаг. Понижение численной точности с FP32 до FP8 или INT8 вдвое сокращает потребление пропускной способности памяти и повышает арифметическую пропускную способность тензорных ядер ускорителя, но требует собственного инструментария квантования. Продакшен-фреймворк должен поддерживать как квантование после обучения (PTQ) с репрезентативными калибровочными наборами данных, так и квантование с учетом обучения (QAT), чтобы восстановить запас точности до развертывания. Помимо исполнения на отдельном устройстве, жизнеспособность в продакшене зависит от стабильности инструментов: сохраняют ли контрольные точки модели обратную совместимость при обновлениях среды исполнения, предоставляет ли фреймворк телеметрические хуки для профилирования исполнения ядер и может ли инфраструктура обслуживания развертывать обновленные определения графов без простоя.
Поддержка разработки и оценка долгосрочной жизнеспособности
Жизнеспособность фреймворка на протяжении многолетнего жизненного цикла в продакшене зависит от того, поддерживает ли окружающая экосистема выбранные пути исполнения, дифференцирования и абстракции в сопровождаемом состоянии. Состав сообщества напрямую формирует инженерные приоритеты: исследовательские экосистемы ставят на первое место скорость экспериментов, интерактивную отладку и быстрое прототипирование моделей; продакшен-ориентированные экосистемы инвестируют в среды обслуживания, обратную совместимость и интеграции с производителями аппаратуры; а ориентированные на компилятор экосистемы развивают математические преобразования и генерацию кода для новых ускорителей.
Операционная стоимость фреймворка часто зависит от окружающей инфраструктуры экосистемы больше, чем от базового API тензоров. Интеграция с реестрами моделей, системами обслуживания, оркестраторами кластеров и инструментами профилирования ускорителей ускоряет развертывание, но каждый слой вводит восходящую зависимость. Пользовательские реализации ядер на C++ или CUDA, специфичные форматы сериализации и вендорные проходы компиляции делают миграцию фреймворка непомерно дорогой, как только организация стандартизирует свой конвейер. Сохранение архитектурного пути выхода требует осознанной развязки: стандартизации промежуточных представлений через открытые форматы вроде ONNX, изоляции конвейеров загрузки данных от классов тензоров, специфичных для фреймворка, и поддержания модульных границ операторов.
Предыдущие разделы оценивали исполнение, дифференцирование и абстракцию аппаратуры как отдельные архитектурные выборы. Однако в работающей модели эти три системы действуют одновременно. Одиночный шаг обучения — место, где они сталкиваются: eager-диспетчеризация или планирование графа определяет, когда работа попадает на кремний, автоматическое дифференцирование в обратном режиме строит обратный проход, сохраняя промежуточные активации, а абстракции аппаратуры координируют раскладки тензоров и запуски ядер. Трассировка одного полного шага обучения от входного батча до обновления параметров показывает, как эти механизмы интегрируются при физических ограничениях машины.
Анатомия шага обучения
Исполнение, дифференцирование и абстракция аппаратуры работают одновременно во время обучения модели. В примере «Анатомия шага обучения» минимальный двухслойный многослойный перцептрон иллюстрирует эту конвергенцию на восьми исполняемых операторах. Трассировка каждого оператора через стек среды исполнения связывает количественные принципы, развитые в «Три проблемы фреймворков», с физическим исполнением: выделением тензоров, диспетчеризацией ядер, записью динамического графа, вычислением градиентов и обновлением параметров.
Анатомия шага обучения: минимальная итерация обучения для двухслойного MLP, использующая выделение тензоров, диспетчеризацию ядер, запись autograd, вычисление градиентов и обновление параметров.
# Одиночный шаг обучения для двухслойного MLP
x = torch.randn(32, 784, device="cuda") # Входной батч
y = torch.randint(0, 10, (32,), device="cuda") # Метки
# Прямой проход
optimizer.zero_grad()
h = torch.relu(x @ W1 + b1) # Скрытый слой
logits = h @ W2 + b2 # Выходной слой
loss = F.cross_entropy(logits, y)
# Обратный проход
loss.backward()
# Обновление параметров
optimizer.step()
Фаза 1: прямой проход (решаем проблему исполнения)
Во время прямого прохода выполнение h = torch.relu(x @ W1 + b1) запускает последовательность eager-исполнения:
- Диспетчеризация Python: интерпретатор Python вызывает
torch.matmul, который через C++-диспетчер PyTorch выбирает бэкенд CUDA. Это несет несколько микросекунд накладных расходов CPU хоста, прежде чем работа будет отправлена на устройство. - Выбор ядра: cuBLAS выбирает ядро GEMM, настроенное для размеров 32 × 784 × 256, разбивая вычисление на блоки потоков, размер которых соответствует разделяемой памяти потокового мультипроцессора и блокам кеша L2.
- Запуск ядра: поток хоста ставит дескриптор запуска в очередь команд GPU, расходуя задержку запуска драйвера, тогда как асинхронное исполнение позволяет хосту продолжать работу, не блокируясь на завершении.
- Исполнение на GPU: потоковые мультипроцессоры передают
W1из HBM29 через кеш L2 в регистры и тензорные ядра, вычисляют матричное произведение и записывают выходные активации обратно в HBM. - Запись autograd: параллельно на хосте движок autograd PyTorch создает узел
MmBackwardна динамической ленте, сохраняя ссылки на входные тензорыxиW1в памяти устройства для дифференцирования в обратном режиме.
Последующее добавление смещения (+ b1) и активация (torch.relu) идут по тому же eager-пути: каждая операция диспетчеризует отдельное ядро, выполняет обмены с HBM и добавляет узел в ленту.
Фаза 2: обратный проход (решаем проблему дифференцирования)
Вызов loss.backward() выполняет автоматическое дифференцирование в обратном режиме в четыре этапа:
- Обход ленты: движок autograd обходит записанный вычислительный граф в обратном топологическом порядке, начиная с узла скалярной функции потерь.
- Вычисление градиентов: движок исполняет обратное ядро, зарегистрированное для каждого узла. Двигаясь назад,
CrossEntropyBackwardвычисляет с помощью производной softmax;MmBackwardдля вычисляет и ;ReluBackwardвычисляет маску активации, обнуляя градиенты там, где прямые активации удовлетворяют ; аMmBackwardдля вычисляет . Поскольку входной батчxне задаетrequires_grad=True, обход завершается, не вычисляя . - Накопление градиентов: вычисленные градиенты параметров накапливаются на месте в полях
.gradлистовых тензоров (, , , ). - Освобождение памяти: по мере завершения каждого узла обратного прохода фреймворк освобождает его сохраненные прямые активации (такие как и ), позволяя кеширующему аллокатору переиспользовать эти области памяти для последующих операций.
Фаза 3: анализ трафика памяти (физика в действии)
Применяя «накладные расходы диспетчеризации» к этому шагу, «Покомпонентный анализ модели Roofline» разбирает FLOP, трафик памяти и арифметическую интенсивность для каждой операции:
| Компонент | Модельная работа | Трафик памяти | Арифметическая интенсивность |
|---|---|---|---|
| MatMul (x @ W1) | 2 × 32 × 784×256 = 12,8 MFLOP | 0,9 МБ | 13,7 FLOP/байт |
| ReLU | 32×256 = 8,2 KFLOP | 65,5 КБ | 0,125 FLOP/байт |
| MatMul (h @ W2) | 2 × 32 × 256×10 = 163,8 KFLOP | 44,3 КБ | 3,7 FLOP/байт |
| Перекрестная энтропия (упрощенно) | ~0,96 KFLOP | 2,6 КБ | 0,4 FLOP/байт |
| Обратный проход (принят вдвое больше прямого) | ~26 MFLOP | 3,1 МБ | 8,3 FLOP/байт |
Покомпонентный анализ модели Roofline: аналитические оценки работы и трафика памяти для шага обучения двухслойного MLP. Строка перекрестной энтропии приписывает по одной эквивалентной операции возведению в степень, накоплению и нормализации на каждый логит, а строка обратного прохода предполагает вдвое большую работу, чем прямой, и втрое больший трафик памяти. Это допущения моделирования, а не измеренные числа инструкций. Матричные умножения имеют гораздо более высокую арифметическую интенсивность, чем поэлементные операции, тогда как упрощенные модели ReLU и перекрестной энтропии остаются чувствительными к памяти.
Столбец арифметической интенсивности показывает рабочий режим каждого слоя. Матричные умножения демонстрируют повторное использование операндов, которое толкает интенсивность к крыше вычислительной производительности. Напротив, поэлементный ReLU и редукция в перекрестной энтропии выполняют ничтожное вычисление на переносимый байт (от 0,125 до 0,375 FLOP/байт) и остаются строго ограниченными пропускной способностью памяти и задержкой запуска. При неслитом eager-исполнении каждая поэлементная операция влечет отдельную диспетчеризацию ядра и обмены промежуточных тензоров с HBM, не насыщая вычислительные блоки.
Аналитическая модель дает около 39,1 MFLOP общей арифметической работы и около 4,2 МБ трафика памяти. Деление этих величин на пиковые показатели аппаратуры A100 определяет идеализированные нижние границы:
- 39,1 MFLOP / 19,5 TFLOP/s (FP32) ≈ 2,0 мкс
- 4,2 МБ / 2,04 ТБ/с ≈ 2,1 мкс
- При 12 запусках ядер (операций) 12 × 15 мкс ≈ 180 мкс
Поскольку превышает и более чем на порядок, шаг ограничен накладными расходами. Исполнительные блоки ускорителя простаивают, пока CPU хоста последовательно диспетчеризует работу. Системная инженерия в этом режиме направлена на налог на запуск, а не на эффективность арифметики:
- Слияние ядер (
torch.compile): слияние последовательных ограниченных памятью операций в одно ядро устраняет промежуточные обмены с HBM и сворачивает границы запусков. - Масштабирование размера батча: увеличение размера батча линейно наращивает арифметическую нагрузку, сохраняя накладные расходы диспетчеризации постоянными, и амортизирует фиксированную задержку запуска на большее число вычислительных операций.
- Захват графа: статическая компиляция или CUDA Graphs захватывают граф зависимостей однажды и воспроизводят исполнение через один вызов драйвера, полностью устраняя накладные расходы интерпретатора хоста.
Фаза 4: абстракция аппаратуры (решаем проблему абстракции)
Тот же самый скрипт Python исполняется на гетерогенных архитектурах аппаратуры через слои абстракции бэкендов, как сводит «Аппаратные бэкенды за единым путем кода».
Каждый бэкенд отображает общую семантику тензоров на примитивы конкретного кремния. Единственный вызов loss.backward() направляется по разным конвейерам исполнения в зависимости от размещения на устройстве. Различия в порядке суммирования с плавающей запятой, деревьях редукции и недетерминированных атомарных операциях вносят численные расхождения между бэкендами, поэтому эквивалентность нужно проверять по явным численным допускам, а не по побитовому совпадению.
| Аппаратура | Библиотека бэкенда | Механизм исполнения |
|---|---|---|
| CUDA GPU | cuBLAS (NVIDIA, 2024; Choquette et al., 2021) | Ядра GEMM и потоки CUDA для асинхронного исполнения |
| CPU | Intel oneMKL или OpenBLAS (Intel Corporation, 2026; OpenBLAS Project, 2026) | Параллелизм на уровне потоков вокруг оптимизированных ядер |
| TPU | XLA (Google, 2025) | Компиляция в операции оптимизатора высокого уровня (HLO), специфичные для TPU |
| Apple Silicon | Metal Performance Shaders | Бэкенд MPS |
Аппаратные бэкенды за единым путем кода: каждый бэкенд реализует одни и те же тензорные операции через разную библиотеку и механизм исполнения, поэтому одинаковый Python отображается на разный кремний.
Решения о реализации (размещение на устройстве, размер батча, режим компиляции) каскадно проходят через слои исполнения, дифференцирования и абстракции одновременно. Когда системы рассматривают фреймворк как непрозрачный математический интерпретатор, а не как планировщик, учитывающий аппаратуру, эти взаимодействия вызывают голод запусков, фрагментацию памяти и обвал пропускной способности.
Три проблемы в действии
В терминах D·A·M один шаг обучения показывает, как фреймворк балансирует алгоритм и машину:
- Исполнение (планирование машины): eager-режим сохраняет императивную отладку построчно ценой задержки запуска и диспетчеризации для каждого ядра.
- Дифференцирование (алгоритмический граф): автоматическое дифференцирование в обратном режиме удерживает промежуточные прямые активации в HBM, чтобы вычислять точные векторно-якобиановы произведения в обратном топологическом порядке.
- Абстракция (переносимость аппаратуры): унифицированные тензорные API отделяют код модели от разнородного кремния, диспетчеризуя одинаковые операции на ядра cuBLAS, oneMKL или XLA HLO.
Устранение трения между этими измерениями требует согласовать гранулярность операторов с крышами Roofline аппаратуры: сливать операции, чтобы убрать обмены с памятью, масштабировать батчи, чтобы амортизировать задержку запуска, и структурировать тензоры так, чтобы насыщать конвейеры исполнения ускорителя.
Заблуждения и ловушки
Выбор фреймворка включает тонкие компромиссы, где интуиция из традиционной разработки ПО не работает. Стена памяти, ограничения слияния ядер и разнообразие целевых платформ развертывания создают ловушки, которые тратят инженерные усилия и заставляют продакшен-системы не попадать в целевые показатели задержки.
Заблуждение и ловушка
Заблуждение: «Все фреймворки дают эквивалентную производительность для одной и той же архитектуры модели.»
Инженеры считают, что ResNet-50 дает одинаковую производительность во всех фреймворках, поскольку математика одна и та же, забывая, что производительность — эмерджентное свойство совместного проектирования алгоритма и машины. В продакшене реализация имеет значение. Скомпилированное исполнение может улучшить поддерживаемые eager-нагрузки, а специализированные движки вывода, такие как TensorRT или TVM, могут снизить задержку относительно неподстроенных eager-базовых вариантов, когда конвертация проходит чисто. Разница возникает из-за глубины слияния ядер, стратегий оптимизации графа, паттернов доступа к памяти, поддержки точности и библиотек бэкендов, которые различаются между фреймворками. Организации, которые предполагают эквивалентность, могут не выполнить соглашения об уровне обслуживания по задержке и вынуждены делать дорогостоящие миграции фреймворка в последний момент.
Заблуждение и ловушка
Ловушка: выбор фреймворка на основе популярности, а не требований проекта.
Инженеры считают, что самый популярный фреймворк подходит для любого проекта. На деле доминируют ограничения развертывания. Мобильная среда, такая как ExecuTorch или TensorFlow Lite, и микроконтроллерная среда, такая как TensorFlow Lite Micro, по-разному предполагают распределение памяти, покрытие операторов и аппаратные делегаты: первые ориентированы на телефоны с памятью порядка гигабайт, а вторые часто нацелены на устройства с сотнями КБ ОЗУ, обычно меньше 256 КБ для небольших развертываний TinyML. Команды, которые прототипируют периферийные приложения, не проверив итоговую среду исполнения, могут столкнуться с раздуванием памяти сверх емкости устройства или с поздней миграцией фреймворка после завершения разработки. Оцените целевые платформы развертывания согласно разделу «Целевые платформы развертывания» до выбора фреймворка обучения.
Заблуждение и ловушка
Заблуждение: «Абстракции фреймворка устраняют необходимость системных знаний.»
Инженеры считают, что высокоуровневые API сами выполняют всю оптимизацию. Модель Roofline (раздел «Модель Roofline» приложения «Основы машины») доказывает обратное. Поэлементные операции, такие как ReLU, выполняют мало арифметики на байт перемещенных данных, поэтому трафик памяти и накладные расходы запуска могут доминировать даже на ускорителях с обильными вычислениями. «Почему стратегия исполнения важна» объясняет, как этот дисбаланс может оставлять вычислительные ресурсы простаивающими. Инженеры должны определить лимитирующий ресурс, прежде чем выбирать оптимизации слияния, батчинга, раскладки или точности.
Заблуждение и ловушка
Ловушка: игнорирование привязки к поставщику из-за форматов, специфичных для фреймворка.
Инженеры считают, что миграция фреймворка проста, потому что модели — это «просто математика». Конвертация SavedModel TensorFlow в PyTorch может потребовать переписывания пользовательских операций, проверки численной эквивалентности на больших наборах тестов и переобучения, когда операции не имеют точных эквивалентов. ONNX («Целевые платформы развертывания») повышает переносимость, но пользовательские операторы, динамические формы и оптимизации, специфичные для бэкенда, все равно могут требовать ручной работы. Организации, которые игнорируют это при первоначальном выборе фреймворка, сталкиваются с дорогостоящими миграциями, когда требования развертывания меняются или появляются лучшие фреймворки.
Заблуждение и ловушка
Заблуждение: выбор фреймворка для обучения не зависит от продакшен-инфраструктуры.
Инженеры считают, что выбор фреймворка обучения не зависит от инфраструктуры развертывания. На практике несоответствия между фреймворком и инфраструктурой могут создавать существенные операционные накладные расходы. Некоторые стеки обслуживания поддерживают атомарную замену моделей, а другие требуют перезапуска процесса или контейнера, если архитектура развертывания не добавляет маршрутизацию версий поверх них. Некоторые фреймворки и среды исполнения открывают хуки мониторинга напрямую, другие требуют собственной инструментации. Это последствия слоев обслуживания и эксплуатации, которые разбираются в главах «Обслуживание моделей» и «MLOps». Локальный урок в том, чтобы оценивать полный стек развертывания при выборе фреймворка, включая инфраструктуру обслуживания, мониторинг и инструменты эксплуатации.
Заблуждение и ловушка
Ловушка: увеличение размера батча без моделирования памяти активаций.
Инженеры считают, что если память доступна, большие батчи всегда повышают пропускную способность. Большие мини-батчи действительно могут амортизировать фиксированные накладные расходы диспетчеризации, но они также масштабируют память активаций, которая должна оставаться живой во время обучения. Модель с 7 млрд параметров в FP16 занимает 14 ГБ, оставляя 71,9 ГБ на A100 с 80 ГБ до учета прочего состояния обучения. Увеличение размера батча с 8 до 32 учетверяет зависящий от батча объем активаций. Внимание трансформера добавляет большой член по длине последовательности, который делает каждый пример дорогим. Получившееся давление на память может запустить стратегии пересчета, чья дополнительная работа снижает пропускную способность, несмотря на больший батч. Команды, которые слепо максимизируют размер батча, могут получить меньшую пропускную способность, чем у меньших батчей, которые обходят эти пути управления памятью. Раздел «Методы оптимизации на основе градиента» главы «Обучение моделей» формализует целевую пропускную способность.
Заблуждение и ловушка
Заблуждение: накладные расходы компиляции пренебрежимо малы.
Инженеры считают, что накладные расходы компиляции — разовая стоимость, которая быстро окупается. Гипотетические значения в «Иллюстративная пропускная способность обучения и вывода» приписывают ResNet-50 более высокую пропускную способность в скомпилированном режиме и окно компиляции от 15 до 30 с на каждое изменение графа. При этих допущениях эксперимент на 10 000 изображений с 10 изменениями кода завершается за 6,9 с в eager-режиме и за 304,7 с в скомпилированном режиме, с учетом накладных расходов перекомпиляции. Поэтому скомпилированный рабочий процесс примерно в 44,2 раза медленнее в этом иллюстративном сценарии быстрого прототипирования. Команды, которые включают компиляцию во время быстрого прототипирования, могут терять время на ожидание перекомпиляций, которые сводят на нет выигрыш в пропускной способности.
Заблуждение и ловушка
Ловушка: использование одной политики исполнения для исследования и продакшена.
Правильный режим фреймворка зависит от цикла. Во время исследования eager-исполнение и небольшие тесты сокращают обратную связь, избегая повторных захватов графа и перекомпиляций. Во время продакшен-обслуживания или длинных прогонов обучения компиляция может амортизировать настройку на многие запросы или образцы. Решающие факторы — длительность нагрузки и стабильность: компиляция окупается, когда структура графа и формы повторяются, тогда как изменение потока управления или форм входа может сделать закешированные артефакты недействительными и перезапустить амортизацию. Командам стоит выбирать политику по измеренной задержке итераций и устойчивой пропускной способности. Одна политика для обеих фаз либо замедляет исследовательские итерации, либо оставляет производственную пропускную способность неиспользованной.
Итоги
Фреймворки машинного обучения решают три основные системные задачи, которые делают глубокое обучение осуществимым на современном железе. Первая — исполнение: решить, когда и как выполняются операции. Фреймворки балансируют компромисс между eager-вычислением для интерактивной отладки и исполнением по графу для компиляции программы целиком. Современные гибридные подходы, такие как torch.compile, захватывают графы динамически, не жертвуя управляющим циклом Python. Вторая — дифференцирование: автоматическое вычисление градиентов. Фреймворки реализуют автоматическое дифференцирование в обратном режиме, которое применяет правило цепочки к композициям операций, строит ленту autograd или обратный граф векторно-якобиановых произведений и сохраняет промежуточные активации в памяти. Этот примитив делает обучение больших моделей осуществимым через единственный вызов loss.backward(). Третья — абстракция: нацеливание на гетерогенную аппаратуру через единый интерфейс. Фреймворки предоставляют многомерные абстракции тензоров, промежуточные представления и системы диспетчеризации времени исполнения, которые связывают высокоуровневые определения моделей с оптимизированными ядрами устройств на CPU, GPU, TPU и специализированных ускорителях.
Эти задачи связаны через железный закон систем машинного обучения («Железный закон систем машинного обучения»): стратегия исполнения определяет задержку диспетчеризации , дифференцирование определяет трафик памяти , а абстракция определяет эффективность загрузки аппаратуры . Поскольку вычислительная пропускная способность ускорителей выросла гораздо быстрее пропускной способности памяти, исполнение часто ограничено пропускной способностью памяти (), а не вычислениями. Фреймворки смягчают эту стену памяти через оптимизации компилятора. Слияние ядер объединяет соседние поэлементные операции, чтобы держать промежуточные значения в регистрах или во внутренней SRAM вместо обмена с глобальной памятью. Избирательный пересчет обменивает избыточные операции с плавающей запятой на снижение пикового давления на память активаций.
Слой между математикой и аппаратурой
- Каждый фреймворк решает три задачи: исполнение определяет диспетчеризацию во время работы, дифференцирование вычисляет градиенты, а абстракция нацеливается на гетерогенную аппаратуру. TensorFlow, PyTorch и JAX делают разные инфраструктурные ставки по этим осям, от захвата статического графа до динамической трассировки и функциональных преобразований. Эти архитектурные обязательства переживают синтаксис API.
- Стена памяти управляет оптимизацией: вычислительные мощности ускорителей десятилетиями опережали пропускную способность памяти, поэтому перемещение данных за пределы чипа стало главным узким местом исполнения. Слияние ядер, избирательный пересчет и раскладки данных пониженной точности напрямую воздействуют на член трафика памяти () железного закона систем машинного обучения, а не просто уменьшают число операций.
- Компиляция должна амортизировать стоимость настройки: принцип непрерывности компиляции в «Польза компиляции» количественно определяет, когда ускорение во время исполнения перевешивает накладные расходы компиляции. Пока динамические нагрузки выигрывают от eager-исполнения, многократно выполняемые графы выигрывают от JIT или опережающей компиляции. Закон накладных расходов диспетчеризации («накладные расходы диспетчеризации») показывает, что мелкие операции выигрывают непропорционально, как только накладные расходы запуска на стороне хоста () устранены.
- Абстракции модулей автоматизируют управление состоянием: автоматическая регистрация параметров, исполнение, зависящее от режима (обучение или вывод), и иерархическая сериализация состояния позволяют обновлять модели с миллиардами параметров за один шаг оптимизатора на разных аппаратных бэкендах.
- Ограничения развертывания должны определять выбор: специализированные среды исполнения обменивают покрытие операторов, статическое выделение памяти и задержку компиляции на жесткие бюджеты аппаратуры. Разрыв между памятью серверных ускорителей и SRAM микроконтроллеров требует оценить целевую платформу развертывания до выбора фреймворка для разработки.
Фреймворк выглядит как эргономичный программный интерфейс, но его истинная роль — перевод математических графов в физические операции аппаратуры. Этот перевод никогда не устраняет аппаратных затрат. Он лишь перераспределяет их между членами железного закона систем машинного обучения (принцип «Железный закон систем машинного обучения»). Eager-исполнение ставит на первое место скорость итераций разработчика ценой задержки диспетчеризации на стороне хоста (). Компиляция графа обменивает время предварительной оптимизации на устранение трафика глобальной памяти () за счет слитых ядер. Автоматическое дифференцирование обменивает память активаций () на пересчитанную арифметику (). То, что кажется удобством API, оказывается постоянным системным обязательством: фреймворк не может уменьшить фундаментальную физическую нагрузку, которую навязывает железный закон, а только определить, какой член ее несет.
От диспетчерской к электростанции
Фреймворки — программная основа, которая переводит абстрактные архитектуры в исполняемые ядра. Вычислительные графы, ленты autograd и конвейеры диспетчеризации ядер — это приборы диспетчерской: они дают инженеру видимость процесса обучения и контроль над ним. Машинерия построена, но каждое бюджетное решение, которое она выставляет на поверхность, остается не принятым: какие активации сохранять в контрольных точках, когда памяти не хватает, какой батч допускает аппаратура и в какой момент одного устройства перестает хватать. Глава «Обучение моделей» — место, где эти счета приходят к оплате: там машинерия исполнения, дифференцирования и управления памятью фреймворка масштабируется в распределенные системы, которые обучают модели в больших масштабах.
-
Eager-исполнение: этот режим выполняет каждую операцию сразу, что позволяет напрямую отлаживать код стандартными инструментами, но жертвует общим взглядом, нужным для оптимизаций на уровне графа. Без захвата более крупной области вычислений eager-среда не может сливать операции через эту область или заранее планировать ее память. Поэтому возможности оптимизации, зависящие от нагрузки, остаются компиляторам вроде
torch.compile. ↩ -
Вычислительный граф: различие «оптимизировать до исполнения», упомянутое выше, — ключевое проектное решение. Представление программы в виде структуры данных позволяет фреймворку объединять совместимые операции в меньшее число ядер GPU до исполнения, сокращая накладные расходы на запуск и трафик промежуточной памяти. Инженерная цена этой прозрачности в том, что исполняемая программа отличается от исходного кода и отладка становится труднее. Каждый фреймворк на основе графов должен оправдать этот компромисс выигрышем в производительности. ↩
-
BLAS (базовые подпрограммы линейной алгебры): спецификация API 1979 года, которая образует нижнюю ступень описанной здесь лестницы. Она стандартизировала фиксированный набор векторных операций, вызываемых из Fortran, отделив публичные имена подпрограмм от решений о реализации, специфичных для машины. Каждый фреймворк выше наследует более общую версию этой договоренности: вызвать стандартный примитив линейной алгебры из любого языка и позволить настроенной библиотеке поставщика работать с кремнием. Для современного обобщенного умножения матриц (GEMM) на GPU NVIDIA такой настроенной цепочкой служит cuBLAS, а не сама спецификация BLAS 1979 года (NVIDIA, 2024). ↩
-
LAPACK (пакет линейной алгебры): расширяет BLAS, предоставляя стандартный API для высокоуровневых подпрограмм (SVD, разложение на собственные значения, наименьшие квадраты). Поставщики реализуют их специфичным для чипа кодом поверх быстрых ядер GEMM. Эта слоистая конструкция — архитектурный шаблон, который наследует каждый ML-фреймворк: высокоуровневые операции делегируются вниз, к вручную настроенным примитивам. Поэтому вызов LAPACK, оптимизированный поставщиком, может выполняться более чем в 10 раз быстрее наивной реализации, и автору фреймворка не нужно писать ни одной строки аппаратно-специфичного кода. ↩
-
GEMM: примитив «матрица на матрицу» за
C = A @ B. Производители аппаратуры вручную настраивают GEMM под свои чипы, потому что плотные слои, проекции внимания и преобразование сверток к матричному умножению опираются на него. Поэтому эта подпрограмма становится нижней границей производительности для многих фреймворков на лестнице. Высокая арифметическая интенсивность делает GEMM операцией, которая лучше всего приближается к пиковой вычислительной пропускной способности, тогда как малые или невыровненные формы часто работают с гораздо меньшей загрузкой. ↩ -
NumPy (численный Python): в 2005 году Трэвис Олифант (Travis Oliphant) объединил две конкурирующие библиотеки Python-массивов (Numeric и Numarray) в один пакет. Так научное сообщество получило единый стандарт массивов на основе BLAS в тот момент, когда ему нужно было масштабироваться. Созданный этим контракт «векторизации» (писать логику на Python, выполнять циклы на C и Fortran через BLAS) стал шаблоном проектирования для каждого последующего ML-фреймворка. Тензоры PyTorch и массивы TensorFlow — прямые потомки, которые распространяют ту же абстракцию -мерного массива на GPU. Роль Python в ML-инфраструктуре во многом сформирована этим решением о консолидации. ↩
-
Theano: разработанный в Монреальском институте алгоритмов обучения (MILA) под руководством Йошуа Бенжио (Yoshua Bengio) начиная с 2007 года, Theano был ранним и влиятельным Python-фреймворком. Он компилировал символьные математические выражения в оптимизированный код CPU и GPU через вычислительные графы (Bergstra et al., 2010; Team et al., 2016). Он показал, что граф вычислений, определенный на Python, можно скомпилировать для исполнения на GPU без того, чтобы исследователь писал код CUDA. MILA прекратила активную разработку Theano в 2017 году (Mila, 2026). ↩
-
Ядро (GPU): в программировании GPU ядро — это функция, которая диспетчеризуется для параллельного выполнения в тысячах потоков. Каждый запуск ядра создает 5–20 мкс накладных расходов на стороне CPU на сборку параметров и сигнализацию GPU. Поэтому мелкие неслитые операции тратят на запуск больше времени , чем на полезную арифметику. Уменьшение числа ядер слиянием — это прямая атака на член накладных расходов железного закона. ↩
-
Слитое ядро внимания: такое ядро объединяет произведение , softmax и взвешивание значений выхода в блочную реализацию. Она держит промежуточные значения во внутренней памяти чипа, а не материализует полную матрицу внимания в HBM. Каноническим именованным примером служит FlashAttention, введенный в разделе «Архитектуры нейронных сетей». Он сообщает о сокращении обращений к HBM до 9 раз и об ускорении для конкретных нагрузок от 15 процентов до 3 раз (Dao et al., 2022). Урок для фреймворков шире конкретного алгоритма: слияние может сдвинуть операцию на модели Roofline от исполнения, ограниченного пропускной способностью, к исполнению, ограниченному вычислительной мощностью, сокращая обмены с внешней памятью. ↩
-
Лента autograd: временная структура данных, которая строится во время прямого исполнения. Узлы записывают операции, зависимости и обратные функции для вычисления по правилу цепочки. Ее память растет с глубиной модели и длиной последовательности, потому что сохраненные активации накапливаются до освобождения при обратном распространении ошибки. Для глубоких моделей фреймворки сохраняют часть активаций, а остальные пересчитывают через контрольные точки активаций, чтобы избежать сбоев из-за нехватки памяти (OOM). ↩
-
Устранение мертвого кода (DCE): удаляет узлы графа, результаты которых не влияют на наблюдаемые выходы или побочные эффекты. В ML-графах мертвый код возникает из неиспользуемых ветвей или артефактов после преобразований. Анализ побочных эффектов обеспечивает безопасное удаление, предотвращая исполнение мертвых операций и снижая накладные расходы на запуск ядер. ↩
-
XLA (ускоренная линейная алгебра): «оптимизированный машинный код» из предложения выше означает, что XLA может сливать подграфы, специализировать раскладки и понижать высокоуровневые операции до кода, специфичного для бэкенда. Слияние атакует одновременно накладные расходы на запуск и записи в промежуточную память . Но реальное ускорение зависит от того, содержит ли граф достаточно сливаемой работы, ограниченной памятью, чтобы компилятор мог ее убрать. Большие области, насыщенные GEMM, могут уже быть ограничены вычислениями, а цепочки мелких поэлементных операций могут выиграть больше, потому что слияние убирает повторные обращения к внешней памяти. Выигрыш не является фиксированным множителем: XLA помогает, когда может сливать операции, специализировать раскладки и формы и снижать накладные расходы на запуск или память. Поэтому выигрыш зависит от структуры графа, поддержки бэкендом и стабильности форм входа. ↩
-
Промежуточное представление (IR): «промежуточное» отражает архитектурную роль этого формата. Это независимый от языка слой, который отделяет фронтенд (захват из Python) от бэкенда (генерация кода для аппаратуры), точно так же, как LLVM IR отделяет фронтенды C, Rust и Swift от бэкендов x86 и ARM. ML-фреймворки переняли этот паттерн компилятора, потому что он снижает стоимость поддержки фронтендов и бэкендов с до : единый механизм захвата графа (TorchDynamo, tf2xla) может выводить код для нескольких аппаратных бэкендов, не переписывая логику захвата. ↩
-
torch.compile: реализация JIT-компиляции с захватом графа в PyTorch, появившаяся в 2020-х годах. Перехват байт-кода выделяет области тензорных операций из eager-программ, промежуточное представление передает эти области бэкендам компилятора, а сгенерированный код кешируется и переиспользуется, пока остаются в силе условия защит. ↩ -
CUDA (compute unified device architecture): платформа параллельных вычислений NVIDIA (2007), которая служит базовым слоем между высокоуровневыми операциями Python и кремнием GPU. Когда PyTorch выполняет
torch.matmul(A, W), вызов проходит через диспетчер фреймворка, выбирает ядро cuBLAS и запускает его на GPU. Каждый запуск создает 5–20 мкс накладных расходов на стороне CPU. Для малых операций эти накладные расходы диспетчеризации превышают полезное время вычислений. Поэтому компиляция (слияние операций в один запуск ядра) дает ускорение, пропорциональное сокращению числа запусков, а не сокращению арифметики. ↩ -
TinyML: системы, созданные для МК, не могут позволить себе интерпретатор Python. Вместо этого микросреды исполнения используют небольшие среды на C/C++, фиксированное планирование памяти и специфичные для модели операторы. TensorFlow Lite Micro по-прежнему основан на интерпретаторе: приложение предоставляет арену тензоров, буферы которой планируются и повторно используются без выделения кучи после настройки. Предсказуемая память обязательна, потому что превышение бюджета устройства в 256 КБ может помешать инициализации или выводу. ↩
-
Автоматическое дифференцирование (AD): слово «автоматически» в предложении выше — ключевое. AD механизирует правило цепочки как обход графа и устраняет ручное вычисление производных, которое делало масштабирование за пределы игрушечных сетей непрактичным. Системный компромисс, который делает это осуществимым, — выбор обратного режима. Он использует топологию «многие к одному» обучения (много параметров, одна скалярная функция потерь), чтобы вычислить все градиенты за один обратный проход. Прямой режим потребовал бы один проход на параметр, что сделало бы обучение с миллиардами параметров вычислительно невозможным. ↩
-
AD в обратном режиме: асимметрия против у обратного режима имеет конкретную цену. Обратный режим сохраняет значения, зависящие от операций, которые нужны правилам дифференцирования во время обратного обхода. Контрольные точки активаций меняют этот набор сохраненных значений: они опускают выбранные значения и пересчитывают их во время обратного прохода. ↩
-
Накопление градиентов: фреймворк обрабатывает большой логический батч как меньшие мини-батчи, освобождая сохраненные активации каждого мини-батча после обратного прохода и одновременно накапливая градиенты размера параметров. Обработка 4 096 примеров мини-батчами по 64 может сократить зависящий от батча пик активаций до 64 раз там, где память активаций растет линейно с размером батча. Веса, градиенты, состояние оптимизатора и прочие фиксированные затраты при этом не уменьшаются. Цена — больше последовательной работы перед каждым шагом оптимизатора. ↩
-
Слияние операций: когда совместимые операции исполняются как отдельные ядра, промежуточные результаты могут записываться в HBM и читаться обратно следующим ядром. Слияние может держать эти значения на чипе и избегать соответствующих переносов. Реальная выгода зависит от операций, форм, компилятора и аппаратуры. ↩
-
Обоснование дизайна BF16: BF16 разработан в Google Brain примерно в 2018 году специально для стабильности обучения на TPU. Он сохраняет 8-битную экспоненту FP32 и вдвое сокращает объем памяти. Это явный компромисс: точность мантиссы (7 битов против 10 у FP16) ради динамического диапазона. Наименьшее положительное нормальное значение FP16 составляет около , но субнормальные значения простираются примерно до . Масштабирование функции потерь особенно важно на аппаратуре или в режимах, которые обнуляют эти субнормальные значения. Экспонента BF16, совпадающая с FP32, в значительной мере избавляет от этого класса антипереполнения градиентов и во многих нагрузках устраняет необходимость масштабирования функции потерь. Поэтому BF16 и FP16 не взаимозаменяемы: BF16 предпочтителен, когда важна стабильность обучения, а FP16 — когда численная точность важнее устойчивости градиентов. ↩
-
JAX: JAX предоставляет
grad,jitиvmapкак преобразования функций. Их можно комбинировать, когда контракты входа и выхода согласованы, но порядок важен: векторизация градиентов в общем случае не то же самое, что дифференцирование результата с векторным значением. Компиляция может давать слитые области, вызовы библиотек и несколько ядер, а не одно универсальное ядро. Преобразованные функции должны быть чистыми: побочные эффекты Python могут происходить во время трассировки, но не представлены в скомпилированной программе, тогда как поддерживаемые обратные вызовы выражают намеренные эффекты времени исполнения. ↩ -
Тензор: в математике тензоры подчиняются законам преобразования координат. В ML-фреймворках этот термин шире обозначает многомерные массивы, которые несут форму, тип данных, шаги, размещение на устройстве и часто метаданные автоматического дифференцирования. Транспонирование обычно создает представление с шагами (strided view), а reshape может вернуть либо представление, либо копию в зависимости от раскладки. Эта семантика хранения делает раскладку важной для выбора ядра и переноса данных. ↩
-
NVLink: высокоскоростное соединение GPU с GPU от NVIDIA (см. главу «Аппаратное ускорение»). Оно обеспечивает 600 ГБ/с двунаправленной пропускной способности (NVLink 3.0 на A100) против 64 ГБ/с у PCIe 4.0 x16. Это преимущество примерно в 10 раз по пропускной способности решает, практичен ли тензорный параллелизм, то есть разбиение вычисления одного большого тензора между несколькими GPU, для данного размера модели. GPU, связанные только через PCIe, могут сделать член коммуникации доминирующим во времени обучения и свести на нет выигрыш от дополнительных вычислений. ↩
-
nn.Module: утверждение «шаблоны повторяются» верно, потому что
nn.Moduleрешает универсальную организационную задачу. Он автоматически регистрирует любой назначенный подмодуль или параметр в иерархическом дереве, позволяя одному вызову.to('cuda')рекурсивно разместить миллионы параметров на GPU. Слои Keras, модули JAX Flax иtf.Moduleв TensorFlow реализуют тот же шаблон обхода дерева. Без него управление состоянием модели требовало бы ручной бухгалтерии, которая растет линейно с глубиной архитектуры. Для моделей с сотнями слоев эта стоимость становится непомерной. ↩ -
Чистая функция: возвращает выходы, определяемые только входами, без опоры на неотслеживаемые побочные эффекты. Преобразования JAX рассчитаны на чистые функции. Обычные эффекты Python могут выполниться во время трассировки, но не представлены в скомпилированном вычислении, а нечистый код может сломаться или вести себя неожиданно. Печать во время исполнения или внешние эффекты требуют поддерживаемых механизмов, таких как
jax.debug.printили обратные вызовы; случайные выборки требуют явно управляемых ключей. ↩ -
JIT-компиляция (just-in-time): трассирует функцию для сигнатуры аргументов и понижает ее до исполняемого кода, специфичного для бэкенда. Первый вызов несет затраты на трассировку и компиляцию, а совместимые последующие вызовы могут переиспользовать закешированный исполняемый файл. Новые формы, типы данных, устройства или статические аргументы могут вызвать еще одну компиляцию. И время компиляции, и накладные расходы закешированных вызовов зависят от программы, бэкенда и аппаратуры. ↩
-
ONNX: «фрагментация», которую решает ONNX, состоит в том, что фреймворк для разработки модели может не совпадать со средой исполнения, наиболее подходящей для целевой платформы развертывания. ONNX определяет независимое от аппаратуры представление графа, которое разделяет эти два выбора и сокращает месяцы инженерного труда на ручную конвертацию моделей, которая иначе требовалась бы при каждой смене целевой платформы. Принятый компромисс: экспорт в ONNX может терять оптимизации, специфичные для фреймворка, или пользовательские операторы, требующие откатов на альтернативные реализации. ↩
-
HBM (high bandwidth memory): обеспечивает 2–3 ТБ/с пропускной способности на современных GPU, что делает ее уровнем памяти, который напрямую питает арифметику ускорителя. Пропускная способность HBM определяет, ограничена ли операция памятью или вычислениями. Ее емкость 80 ГБ на A100 задает жесткий потолок общего живого состояния обучения. Веса, активации, градиенты, состояние оптимизатора и временная рабочая память должны помещаться во время исполнения. Когда они не помещаются, фреймворк вынужден прибегать к выгрузке, избирательному пересчету или размещению на нескольких устройствах, и каждый из этих приемов добавляет сложности к тому, что программист воспринимает как единственный вызов
loss.backward(). ↩
Обучение моделей
Назначение
Почему обучение модели может стоить на порядки дороже одного вывода?
Вывод вычисляет прямой проход по мере того, как данные проходят через сеть, и на выходе появляется предсказание. Обучение добавляет обратный проход и шаг оптимизатора, сохраняет промежуточное состояние и повторяет эту работу для множества примеров и шагов оптимизации. Оптимизаторы также могут хранить оценки импульса и дисперсии, объем которых превышает объем весов модели. Соотношение зависит от модели, нагрузки, длительности обучения и объема вывода, но один прогон обучения обычно стоит на порядки дороже одного вывода. Лаборатория, которая обучает модель за три дня, может проверить больше вариантов, чем та, которой на это нужен месяц. Более быстрый шаг не означает более быстрого обучения, если он замедляет сходимость, поэтому пропускная способность важна только относительно времени до достижения целевого качества. В серии повторных экспериментов даже небольшие изменения сходимости или загрузки накапливаются в заметную разницу в сроках и стоимости. Центральная системная задача состоит в том, чтобы снабжать ускорители данными и полезной арифметикой, не исчерпывая память и не теряя время на синхронизацию. Какое вмешательство поможет, зависит от доминирующего ограничения по вычислениям, памяти, данным или коммуникации, поэтому профилирование должно предшествовать масштабированию или оптимизации. Размер батча, численная точность, контрольные точки, загрузка данных и параллелизм, следовательно, нужно рассматривать как связанные решения, а не как независимые ручки настройки. Для инженера систем обучение — это место, где аппаратура и параллелизм определяют, укладывается ли прогон в память, график и бюджет и ускоряет ли повторяющийся цикл оптимизации работу или останавливает ее. В терминах D·A·M каждое решение о точности и параллелизме согласует математику оптимизации с физикой исполнения.
Цели обучения
- Объяснять асимметрию стоимости обучения через затраты на прямой проход, обратный проход, состояние оптимизатора, данные и итерации
- Вычислять FLOP, объем памяти под активации, состояние оптимизатора и денежную стоимость обучения нейронной сети
- Сравнивать SGD, Adam и AdamW по поведению сходимости, накладным расходам памяти и вычислительной стоимости
- Диагностировать узкие места обучения, ограниченного вычислениями, памятью или данными, с помощью анализа Roofline и данных профилирования
- Применять смешанную точность, контрольные точки, накопление градиентов и FlashAttention, чтобы уложиться в ограничения памяти и пропускной способности ускорителя
- Проектировать конвейеры обучения на одной машине с предвыборкой, перекрытием, батчингом и систематическим повторным профилированием
- Оценивать, когда стоит выходить за пределы одной машины, с учетом ограничений памяти, длительности, коммуникации, энергии и стоимости
Основы систем обучения
Запуск модели один раз и обучение ее с нуля находятся на противоположных концах кривой стоимости систем. Фреймворки предоставляют исполнительную основу: вычислительные графы планируют операции, автоматическое дифференцирование вычисляет градиенты, а аппаратные абстракции обеспечивают работу на разных ускорителях. Эти механизмы делают возможным один шаг обучения; системы обучения делают его воспроизводимым в масштабе. Тот же цикл «прямой проход, обратный проход, обновление» может выполняться многие тысячи или миллионы раз, сохраняя активации, питая ускорители и оставаясь в практических пределах памяти, времени и бюджета.
Стоимость обучения остается плоской при росте масштаба, а затем резко растет после крупномасштабного излома.
В этой главе используется внешняя оценка порядка величины примерно в $50 000 для обучения уровня GPT-2 и публичная оценка около $100 млн для прогона обучения класса GPT-4.1 Ни одна из этих цифр не была раскрыта как проверенный счет за обучение. Эта асимметрия стоимости обучения отражает разницу между оценкой обученной модели для заданного запроса и многократным выполнением прямого прохода, обратного прохода и обновления по всему корпусу обучения.
Для GPT-2 в главе используется примерно 3,00 × 10⁹ операций с плавающей точкой на токен при прямом проходе по параметрическому учету, связанному с архитектурой из технического отчета GPT-2 (Radford et al., 2019). Общий бюджет 1,50 × 10²¹ FLOP соответствует примерно 167 млрд позиций токенов, если прямой и обратный проходы оценивать как работу, втрое большую прямого прохода. Эта оценка не означает, что GPT-2 выполнил столько полных вывод-запросов. Масштаб делает инженерию систем обучения отдельной дисциплиной и показывает, как доступ к инфраструктуре обучения может ограничивать участие в разработке ИИ.
Системы обучения
Системы обучения — это программно-аппаратные системы, которые выполняют итеративный цикл оптимизации (прямой проход, вычисление функции потерь, обратный проход и обновление параметров), минимизируя функцию потерь на наборе данных для обучения.
- Значение: стоимость памяти обучения в 8 раз превышает стоимость памяти вывода на параметр в стандартной настройке адаптивной оценки моментов (Adam) со смешанной точностью: модели из 7 млрд параметров требуется 14 ГБ (веса FP16) + 14 ГБ (градиенты FP16) + 28 ГБ (мастер-веса FP32) + 56 ГБ (первый и второй моменты Adam в FP32) = не менее 112 ГБ без учета хранения активаций. Этот множитель — одна из главных причин, по которой модель, работающая на выводе на одном GPU, для обучения требует нескольких GPU.
- Отличие: в отличие от систем вывода, которые выполняют один прямой проход и отбрасывают промежуточные активации, стандартное обратное распространение ошибки сохраняет тензоры, нужные обратному проходу, и поэтому объем памяти растет с глубиной модели и размером батча.
- Типичная ошибка: частое заблуждение состоит в том, что сбои обучения — это проблемы вычислений. Типичный сбой — ошибка нехватки памяти (out-of-memory, OOM), то есть проблема управления памятью: тензоры, сохраненные для обратного распространения, накапливаются во время прямого прохода и могут исчерпать память до вычисления первого градиента.
Три свойства отличают нагрузки обучения от вычислений общего назначения:
- Вычислительная интенсивность: бюджет 1,50 × 10²¹ FLOP, распределенный на дни календарного времени, требует устойчивой пропускной способности масштаба PFLOP/s от аппаратуры, реальная пропускная способность которой для крупных моделей часто значительно ниже теоретического пика (Narayanan et al., 2021; Chowdhery et al., 2022).
- Давление на память: хранение весов модели на 1,5 млрд параметров требует 6 ГБ в FP32; оптимизатор Adam добавляет два тензора состояния на параметр, занимая еще 12 ГБ. Память под активации добавляет зависящий от нагрузки объем, который определяют архитектура, длина последовательности, размер батча, точность и контрольные точки, и совокупное состояние может превысить емкость одного ускорителя.
- Зависимости по данным: каждое обновление градиента зависит от результата предыдущего, создавая последовательные узкие места, которые ограничивают объем параллелизма, который система может использовать.
Каждая проблема указывает на свой тип решения. Вычислительная интенсивность подталкивает систему к более высокой загрузке ускорителя и арифметике с меньшей точностью. Давление на память требует таких приемов, как контрольные точки градиентов,2 — частный случай ре-материализации (отбрасывания и пересчета промежуточных значений ради экономии памяти), который обменивает пересчет на сокращение хранения активаций, — и смешанной точности обучения,3 которая уменьшает объем памяти под веса и активации. Зависимости по данным мотивируют конвейерные схемы, которые перекрывают вычисления с перемещением данных, опираясь непосредственно на пропускную способность загрузки данных, оптимизированную в главе «Инженерия данных», чтобы ускоритель никогда не простаивал в ожидании следующего батча. Анализ здесь задает базовый уровень исполнения на одной машине и на одном узле с несколькими GPU; масштабирование через границы распределенной сети вводит многоузловые коммуникационные структуры и протоколы отказоустойчивости, которые рассматриваются в продвинутых распределенных системах.
Поэтапный системный конвейер: выявление «пузырей ускорителя»
Система обучения — это не один цикл, а поэтапный системный конвейер. Чтобы добиться высокой загрузки ускорителя, обучение нужно рассматривать как производственный цех, где четыре различных этапа согласуются друг с другом, чтобы держать АЛУ занятыми:
- Загрузка и предобработка данных (CPU/хранилище): извлечение сырых данных из энергонезависимой памяти NVMe (Non-Volatile Memory Express), декодирование и аугментация на ядрах CPU.
- Передача с хоста на устройство (PCIe): перемещение подготовленного батча по шине PCIe в память GPU через прямой доступ к памяти.
- Прямой и обратный проход (ускоритель): распространение активаций и градиентов по слоям на GPU.
- Синхронизация параметров (межсоединение): обмен градиентами между ускорителями по доступной структуре. NVLink обеспечивает до 900 ГБ/с в конфигурации H100, которая используется ниже, тогда как другие системы могут использовать PCIe или сетевое межсоединение.
Любое несоответствие в пропускной способности этих этапов создает пузыри ускорителя — интервалы, в которые часть ресурсов ускорителя простаивает или недоиспользуется, ожидая другого этапа. Инженер систем уменьшает эти пузыри с помощью таких приемов, как асинхронная предвыборка и перекрытие конвейера, стремясь сделать следующий батч доступным до того, как он понадобится текущему шагу. «Выявление узких мест» разрабатывает количественные инструменты для измерения и уменьшения этих пузырей.
Эта цепочка архитектурных зависимостей задает операционную иерархию системы. Железный закон обучения («Железный закон систем машинного обучения») разделяет общее число операций, пиковую пропускную способность и загрузку аппаратуры и задает учетную основу для нагрузок нейронных сетей, динамики оптимизаторов, механики обратного распространения ошибки и арифметической интенсивности. В пределах конвейера исполнения загрузка данных, прямой проход, обратный проход и обновление параметров образуют последовательные зависимости, в которых каждый этап ограничивает пропускную способность последующих. Целевые меры воздействуют на конкретные члены уравнения пропускной способности: арифметику смешанной точности, блочные (тайловые) ядра внимания, накопление градиентов, контрольные точки активаций и асинхронную предвыборку. Когда пропускная способность одного ускорителя достигает насыщения, масштабирование на несколько устройств выводит на первый план пропускную способность межчипового межсоединения как определяющее ограничение.
Эти физические ограничения накапливаются при крупномасштабном исполнении: один неустраненный численный взрыв может обесценить тысячи часов работы ускорителей.
Всплески функции потерь PaLM (2022)
Контекст: прогон PaLM с 540 млрд параметров использовал 6 144 чипа Tensor Processing Unit (TPU) v4, распределенных по двум подам по 3 072 чипа, соединенным сетью дата-центра Google, и испытывал сильные всплески нестабильности обучения, которых не было у меньших прогонов (Chowdhery et al., 2022).
Режим отказа: функция потерь обучения резко подскакивала примерно в 20 раз, несмотря на отсечение градиентов. Всплески происходили через очень неравномерные промежутки, иногда ближе к концу обучения, никогда не появлялись у меньших моделей и не имели установленного принципиального способа устранения.
Последствия: каждое восстановление отбрасывало недавний прогресс дорогостоящего прогона на 6 144 чипах, поэтому воспроизводимые контрольные точки и повторяемый порядок данных были условием для воспроизведения.
Реакция: инженеры перезапускали обучение с неповрежденной контрольной точки примерно за 100 шагов до каждого всплеска и пропускали около 200–500 батчей данных в окне вокруг сбоя.
Системный урок: отказоустойчивость на уровне эксплуатации напрямую определяет коэффициент загрузки в железном законе обучения («железный закон обучения»). Автоматическое обнаружение всплесков потерь, частота контрольных точек и пропуск батчей — это основные системные механизмы, необходимые для защиты эффективности вычислительного кластера.
Железный закон производительности обучения
Всплески функции потерь у PaLM показывают, что нестабильность на переднем крае масштаба — предсказуемое физическое следствие одновременного роста вычислительной интенсивности, давления на память и зависимостей по данным. Каждое из этих трех свойств по отдельности поддается управлению, однако их взаимодействие порождает режимы отказа, которых одного лишь операционного восстановления недостаточно, чтобы избежать. Чтобы диагностировать, какой фактор доминирует в данном сбое, и оценить стоимость каждого из них, нужна формальная декомпозиция времени обучения на физические составляющие.
Железный закон как раз и дает эту организующую рамку: он раскладывает время обучения так, что каждый метод оптимизации соотносится с конкретным членом уравнения. Это специализированное применение общего железного закона систем машинного обучения, введенного в «Железный закон систем машинного обучения», сфокусированное на максимизации вычислительной пропускной способности.
Железный закон производительности обучения
Железный закон производительности обучения выражает время обучения через число операций нагрузки и ее эффективную достигнутую пропускную способность:
Здесь — эффективный сквозной коэффициент загрузки: достигнутая скорость модельных операций, деленная на пик аппаратуры. Простои данных, коммуникация, синхронизация, накладные расходы на запуск и неэффективные ядра снижают этот коэффициент. Предвыборка и перекрытие могут скрыть часть этих издержек, но не гарантируют их устранения.
- Значение: в таксономии D·A·M эти члены соответствуют разным рычагам оптимизации: определяется Данными (число токенов обучения) и Алгоритмом (архитектура модели или методы сжатия, такие как прунинг и дистилляция), определяется Машиной (исполнительные блоки аппаратуры при выбранной численной точности), а — эффективный системный коэффициент загрузки и главная инженерная цель (Narayanan et al. (2021) измерили 44–52 процента теоретического пика пропускной способности для моделей GPT, обученных на кластерах A100). Методы сжатия описаны в главе «Сжатие моделей»; здесь они нужны только для того, чтобы показать, где такие методы входят в этот учет.
- Отличие: общий железный закон раскрывает потери на перемещение данных, вычисления и задержку по отдельности. Эта форма обучения сводит все источники потерь пропускной способности к , что полезно для бюджетного учета, но недостаточно для диагностики того, какой базовый член за них отвечает.
- Типичная ошибка: частое заблуждение состоит в том, что фиксирован аппаратурой. Эффективность системы — свойство конвейера: насыщение пропускной способности памяти, накладные расходы на запуск ядер и барьеры синхронизации независимо снижают , и выяснить, какой фактор доминирует, можно только профилированием, а не чтением спецификаций аппаратуры.
«Железный закон обучения» показывает три рычага улучшения: сократить общее число операций через алгоритмические инновации, повысить пиковую пропускную способность через выбор аппаратуры и форматов точности или улучшить загрузку через организацию конвейера. Основные методы оптимизации обучения воздействуют на один или несколько из этих рычагов, как показано в «Соответствие методов оптимизации членам железного закона».
| Метод | Затрагиваемый член | Механизм |
|---|---|---|
| Смешанная точность (FP16/BF16) | Пиковая пропускная способность ↑ | Использует поддерживаемые пути вычислений с пониженной точностью |
| Предвыборка данных | Загрузка ↑ | Сокращает простой ускорителя в ожидании данных |
| Контрольные точки активаций | Память ↓, операции ↑ | Сокращает сохраненные активации, пересчитывая выбранные значения |
| Накопление градиентов | Память ↓, синхронизация ↓ | Формирует эффективный батч из последовательных микробатчей |
| Слияние операторов | Трафик памяти ↓, накладные ↓ | Избегает промежуточных передач и сокращает число запусков ядер |
| FlashAttention | Трафик памяти ↓, загрузка ↑ | Те же асимптотические FLOP, но гораздо меньше обращений к HBM; обратный пересчет может добавлять FLOP |
Соответствие методов оптимизации членам железного закона. Понимание того, какой член уравнения затрагивает метод, помогает выбрать стратегию оптимизации.
Железный закон касается эффективности исполнения — того, насколько быстро аппаратура обрабатывает заданную нагрузку. Он не учитывает факторы со стороны данных, такие как качество данных, размер набора или дизайн учебной программы, которые влияют на то, сколько всего операций нужно для достижения целевой точности. Более чистый набор или лучший состав данных может уменьшить число нужных эпох и тем самым сократить , не трогая аппаратуру вовсе. При фиксированной нагрузке вопрос в том, как выполнить ее как можно быстрее.
Реальная пропускная способность обучения остается ниже арифметического пика всякий раз, когда ядра, подача данных или коммуникация оставляют ресурсы незанятыми. Масштабирование на несколько ускорителей добавляет накладные расходы на коммуникацию — компромисс, который количественно оценен в разделе «Масштабирование систем обучения».
Физика обучения
Скорость обучения определяется загрузкой пиковых значений аппаратуры.
Разрыв загрузки
- Пиковая и реальная: почему устойчивая сквозная загрузка остается ниже арифметического пика?
- Потери загрузки: какие простои конвейера, описанные выше, снижают и какие из них может скрыть предвыборка или перекрытие?
- Порядок величины: прогону на переднем крае нужно порядка FLOP при загрузке , заметно меньшей 1. Оцените, какой рычаг сократит календарное время сильнее: удвоение или удвоение , и почему железный закон показывает, что на практике эти два варианта не взаимозаменяемы.
Железный закон дает статическую рамку для рассуждений о производительности обучения, но история глубокого обучения показывает, как сдвигалось решающее ограничение по мере совместного развития аппаратуры и алгоритмов. В 1986 году Румельхарт с коллегами популяризовал обратное распространение ошибки для многослойных нейронных сетей (Rumelhart et al., 1986). В 2012 году AlexNet обучил классификатор ImageNet за пять–шесть дней на двух GPU (Krizhevsky et al., 2012), показав, насколько хорошо параллелизм нейронных сетей ложится на графическую аппаратуру. К 2017 году трансформеры (Vaswani et al., 2017) сместили внимание к масштабному моделированию последовательностей и высокопроизводительным ядрам ускорителей. GPT-3 в 2020 году потребовал около FLOP (Brown et al., 2020), что сделало загрузку критически важной. К 2023 году эффективность обучения выросла благодаря целевым системным оптимизациям: FlashAttention сокращает трафик памяти и одновременно повышает ; контрольные точки градиентов обменивают дополнительное на объем памяти; смешанная точность повышает . Каждое нововведение устраняет конкретное узкое место железного закона.
Сквозной пример: обучение GPT-2
В выводе GPT-2 служит маячной моделью «Пожиратель полосы». Здесь она возвращается как стабильная нагрузка главы, на которой проверяется стоимость каждой части обучения и каждая оптимизация.
Маячный пример: обучение GPT-2
Контекст: GPT-2 (1,5 млрд параметров) служит основным примером, потому что она достаточно велика, чтобы выявить значимые ограничения по вычислениям, активациям и состоянию оптимизатора, и при этом проще для анализа, чем модели масштаба переднего края. Нужно ли ей распределенное обучение, зависит от точности, состояния оптимизатора, памяти активаций, емкости аппаратуры и целевого времени обучения. «Характеристики маячной модели GPT-2 (1,5 млрд параметров)» сопоставляет каждое свойство модели с системным ограничением, которое оно создает:
Свойство Спецификация Системное следствие Параметры 1,5 млрд (XL) Для одних только весов требуется примерно 3 ГБ (FP16) или примерно 6 ГБ (FP32). Архитектура 48 слоев, размерность 1600 Глубокий конвейер создает сильное давление на память активаций. Набор данных WebText (40 ГБ) Предобработка, перемешивание и подача данных должны поддерживать выбранную конфигурацию обучения. Вычисления ~ 1,50 × 10²¹ FLOP Длительность обучения зависит от достигнутой пропускной способности и числа ускорителей. Характеристики маячной модели GPT-2 (1,5 млрд параметров): число параметров, глубина архитектуры, размер набора данных и полный объем вычислений, сопоставленные с системными следствиями. Каждая строка связывает свойство модели с инженерным ограничением, которое оно создает: объем памяти под веса, давление активаций от глубины конвейера, требования к пропускной способности ввода-вывода и потребность в параллелизации.
Механизм: обучение GPT-2 связывает общее число операций , или 1,50 × 10²¹ FLOP, со строгим объемом памяти . Балансировка времени исполнения требует согласования загрузки данных, памяти активаций и пропускной способности вычислений в пределах емкости высокоскоростной памяти ускорителя (High Bandwidth Memory, HBM).
Не все нагрузки обучения ограничены вычислениями. Рекомендательные модели вроде DLRM определяются огромными таблицами эмбеддингов (от 100 млрд до 10 трлн параметров, в основном эмбеддинги), которые делают их ограниченными пропускной способностью памяти, а не вычислениями. Для таких нагрузок первая проблема масштабирования часто связана с емкостью: таблицы эмбеддингов нужно разбить по устройствам, чтобы модель вообще поместилась. Напротив, плотное, интенсивное по вычислениям обучение, примером которого служит маячная модель GPT-2, рассмотренная ниже, выявляет ограничения по вычислениям и памяти активаций, а не разбиение по емкости.
В рамках сквозного жизненного цикла ML системы обучения получают подготовленные данные из предшествующих конвейеров («Инженерия данных») и выдают контрольные точки модели для развертывания. Качество данных напрямую определяет устойчивость обучения, а пропускная способность обучения задает скорость итераций. Это системное давление проявляется на трех разных масштабах. На уровне данных большие корпуса требуют конвейеров ввода-вывода высокой пропускной способности и распределенного хранилища, чтобы ускорители не простаивали. На уровне модели архитектуры с миллиардами параметров заставляют систему балансировать емкость памяти и коммуникацию, выбирая между репликацией весов на устройствах с параллелизмом данных4 и разбиением слоев по устройствам с параллелизмом моделей.5 На уровне инфраструктуры координация нескольких ускорителей вводит накладные расходы на синхронизацию, которые могут определять время обучения. Эти физические компромиссы делают контракты рабочего процесса из «Рабочий процесс машинного обучения» необходимыми на этапе обучения: решения об оркестрации определяют и скорость итераций, и эффективность аппаратуры.
Корпус WebText для GPT-2 объемом 40 ГБ находится в нижней части этого спектра масштабов данных. Более крупные корпуса качественно меняют путь данных.
Масштабный фактор от 10 ГБ до 10 ТБ
В режиме, где данные помещаются в памяти, корпус может уместиться в системной оперативной памяти и избежать повторных чтений из хранилища после кэширования, хотя затраты на предобработку и передачу сохраняются. В потоковом режиме корпус превышает локальную память, и системе приходится организовывать чтение из хранилища, предобработку, кэширование и подачу данных на протяжении всего обучения. Подходящая конструкция может включать несколько рабочих процессов, предвыборку, локальные кэши или распределенное хранилище, в зависимости от того, какой этап ограничивает пропускную способность.
Таким образом, масштаб меняет не только объем данных: он преобразует физику системы.
Эти ограничения масштабирования переводятся в конкретные требования к рабочему процессу. Процессы обучения состоят из взаимозависимых этапов — предобработки данных, прямого и обратного проходов и обновления параметров, — и это продолжает понятия нейронных сетей из главы «Вычисления в нейронных сетях». Системные ограничения задают пределы исполнения: современные ускорители имеют арифметическую интенсивность, которая легко превышает пропускную способность HBM, и ядра, ограниченные памятью, остаются без операндов (Hennessy and Patterson, 2017). В конфигурациях с несколькими ускорителями синхронизация между устройствами вносит штрафы задержки, а пропускная способность межсоединения (PCIe, NVLink, InfiniBand) определяет соотношение коммуникации и вычислений.6
Та же граница между аппаратурой и программным обеспечением, которую фреймворки раскрыли в главе «Фреймворки машинного обучения», здесь центральна. Смешанная точность обучения возникла из осознания того, что аппаратура тензорных ядер способна ускорять арифметику пониженной точности. Контрольные точки градиентов появились из-за ограничений емкости памяти. Инженерия систем обучения — это работа по согласованию этих алгоритмических решений с физическими пределами машины.
Каждое узкое место обучения в конечном счете восходит к стоимости исполнения конкретных математических операций. Плотное матричное умножение ограничено вычислениями и определяется пиковой арифметической пропускной способностью (Goto and Geijn, 2008), тогда как поэлементные функции активации и слои нормализации ограничены пропускной способностью памяти. Между тем состояние оптимизатора раздувает занимаемую память независимо от арифметической активности. Проектирование систем, которые выполняют эти операции эффективно, начинается с учета каждой категории стоимости отдельно.
Математические основы
Линейная алгебра компактно записывает матричное умножение как . В аппаратуре обучение такой модели, как GPT-2, многократно выполняет эту операцию над тензорами, которые намного превышают десятки мегабайт доступной SRAM на кристалле, поэтому матричные блоки (тайлы) нужно непрерывно подавать из высокоскоростной памяти (High Bandwidth Memory, HBM). Плотные матричные умножения обладают высокой арифметической интенсивностью, что позволяет специализированным исполнительным блокам, таким как тензорные ядра, достигать высокой загрузки вычислений. Напротив, окружающие поэлементные операции, такие как активации, нормализации и остаточные сложения, имеют низкую арифметическую интенсивность и остаются ограниченными пропускной способностью памяти, поэтому здесь возникают возможности для слияния ядер, устраняющего избыточный трафик памяти. В «Вычислениях в нейронных сетях» было установлено, что вычисляют операции нейронных сетей и почему они позволяют обучаться; системный вопрос состоит в том, чего они стоят в FLOP, памяти и пропускной способности, когда эти операции выполняются в масштабе.
Четыре измерения структурируют этот анализ стоимости:
- Число FLOP матричных операций, которые доминируют в плотном обучении нейронных сетей.
- Требования к памяти для одновременного хранения активаций и состояний оптимизатора.
- Требования к пропускной способности, которые определяют, ограничена ли операция вычислениями или памятью.
- Классы арифметической интенсивности, которые направляют выбор стратегии оптимизации.
Вместе эти измерения задают словарь для анализа вычислительной интенсивности, давления на память и зависимостей по данным, введенных в разделе «Основы систем обучения».
Вычисления в нейронных сетях
Обучение нейронной сети состоит из повторяющихся матричных операций и нелинейных преобразований. Эти операции концептуально просты, но порождают системные задачи, которые определяют современную инфраструктуру обучения. Введение обратного распространения ошибки7 Rumelhart et al. (1986) и развитие эффективных библиотек матричных вычислений, таких как Basic Linear Algebra Subprograms (BLAS)8 (Dongarra et al., 1988), заложили основу современных архитектур обучения.
Математические операции в нейронных сетях
Прямое распространение в простейшем случае включает две операции: матричное умножение и применение функции активации. Матричное умножение реализует линейное преобразование на каждом слое. На слое вычисление можно описать так (в соответствии с соглашением о векторах-строках, введенным в «Вычислениях в нейронных сетях»):
где:
- — активации предыдущего слоя (или входного слоя для первого слоя), причем каждая строка — это образец в батче;
- — матрица весов слоя , которая содержит параметры, выученные сетью;
- — вектор смещения слоя ;
- — функция активации, применяемая поэлементно (например, ReLU или сигмоида) для введения нелинейности.
Матричные операции
«Матричная формулировка умножения» показала, что прямое распространение сводится к цепочкам матричных умножений, а «Базовые вычислительные примитивы» перечислила вычислительные примитивы — общее матричное умножение, свертку и динамическое внимание, — которые разделяет каждая архитектура. Обучение усиливает эти паттерны: каждая операция выполняется не один раз, а миллиарды раз, и каждому прямому проходу соответствует обратный проход, который примерно удваивает вычислительную стоимость. Понимание того, какие матричные операции доминируют и как меняются их формы между прямым и обратным проходами, показывает, почему для обучения появились именно такие системные конструкции и оптимизации.
Доминирование матричного умножения определило и алгоритмические, и аппаратные инновации. Ранние реализации нейронных сетей опирались на стандартные библиотеки линейной алгебры для CPU, но масштаб современного обучения потребовал специализированных оптимизаций. Алгоритм Штрассена9 снизил наивную сложность примерно до (Strassen, 1969), а современные аппаратно ускоренные библиотеки, такие как cuBLAS (NVIDIA, 2024), продолжают сдвигать пределы вычислительной эффективности.
Такое доминирование вычислений породило системные оптимизации: блочные матричные вычисления, которые распараллеливаются по нескольким блокам, и иерархии памяти, спроектированные под паттерны доступа прямого и обратного проходов. С ростом нейронных архитектур матрицы весов и активаций должны были оставаться доступными для обратного распространения ошибки, и аппаратура развивалась так, чтобы обслуживать эти плотные паттерны умножения в растущих бюджетах памяти. Чтобы конкретно показать масштаб этих операций, рассмотрим вычисления слоя внимания в маячной модели GPT-2.
Один слой GPT-2 делает масштаб этих вычислений конкретным.
Вычисление слоя внимания GPT-2
Каждый слой GPT-2 выполняет вычисления внимания, которые иллюстрируют требования к плотному матричному умножению. Для одного трансформерного слоя GPT-2 (все головы вместе) при размере батча = 32, длине последовательности = 1024 и размерности скрытого состояния = 1600:
Проекции запроса, ключа и значения (Q, K, V) (три линейных преобразования, которые создают входы внимания, то есть 3 отдельных матричных умножения): Матричные умножения внимания ( и ): Выходная проекция (выход внимания скрытое состояние): Сеть прямого распространения (два линейных преобразования с коэффициентом расширения 4): Масштаб вычислений
- Суммарный прямой проход на слой (QKV 503 + внимание 214,8 + выходная проекция 168 + FFN): примерно 2 228,01 GFLOP
- При 48 слоях GPT-2: примерно 320,8 TFLOP на шаг обучения
- В этом иллюстративном сценарии на 50 000 шагов: примерно 16 041,7 PFLOP
Системный вывод: GPU V100 (пиковые 125 TFLOP/s с тензорными ядрами и 15,7 TFLOP/s без них) потребовал бы 2,6 с для смоделированной оценки шага обучения с вниманием и FFN при загрузке 100 процентов (теоретический пик; практическая пропускная способность будет ниже). Поэтому уложиться в шаг обучения длительностью 180–220 мс уже является задачей нижней границы для нескольких ускорителей: одна только идеальная арифметика требует примерно 12–15 V100, а практическим системам нужен дополнительный запас на потери загрузки, коммуникацию и накладные расходы конвейера.
Эти подсчеты FLOP — не академический учет. Они представляют собой вычислительный член железного закона, воплощенный в конкретных числах, и объясняют, почему стоимость обучения масштабируется как предсказуемая функция архитектуры модели и длины последовательности, а не как непредсказуемое эмерджентное свойство.
Матрично-векторные и батчевые операции
Не все операции в нейронных сетях связаны с большими матрично-матричными умножениями. Слои нормализации, сложение смещений и некоторые рекуррентные вычисления выполняют матрично-векторные операции. Хотя вычислительно они проще матрично-матричного умножения, у них есть отдельные системные задачи: из-за ограниченного потенциала распараллеливания они дают меньшую загрузку аппаратуры. Одного вектора недостаточно, чтобы одновременно занять тысячи вычислительных ядер ускорителя. Эта особенность влияет и на проектирование аппаратуры, и на решения об архитектуре модели, особенно в сетях, которые обрабатывают последовательные входы или вычисляют статистики слоев.
Учитывая ограничения матрично-векторных операций, введение батчинга изменило матричные вычисления в нейронных сетях. Обрабатывая несколько входов одновременно, системы обучения превращают матрично-векторные операции в более эффективные матрично-матричные. Этот подход повышает загрузку аппаратуры, но увеличивает требования к памяти для хранения промежуточных результатов. Современные реализации должны балансировать размеры батчей с доступной памятью, что приводит к специфическим оптимизациям управления памятью и планирования вычислений.
Переход от матрично-векторных к батчевым матрично-матричным операциям помогает понять выбор проектных решений в современных ускорителях. Первый TPU от Google, разработанный для вывода, включал специализированный матричный блок и иерархию памяти для плотных операций (Jouppi et al., 2017). В другом масштабе обучение GPT-3 использовало распределенные ускорители, чтобы выполнять паттерны матричного умножения, которые открывают большие батчи (Brown et al., 2020).
Почему GPU доминируют в обучении
Матричные операции, описанные в «Матричных операциях», напрямую объясняют архитектуру аппаратуры для обучения в дата-центрах. GPU стали центральными для обучения в большом масштабе по трем причинам:
- Независимые вычисления элементов при умножении матриц хорошо отображаются на тысячи ядер GPU (у NVIDIA A100 6 912 ядер CUDA).
- Специализированные блоки вроде тензорных ядер дают заметно более высокую пиковую пропускную способность для поддерживаемых матричных операций пониженной точности.
- Блочные паттерны матричных вычислений позволяют эффективно использовать иерархию памяти GPU (кэши L1/L2, разделяемую память, глобальную память).
Когда в одном из последующих иллюстративных сценариев GPT-2 предполагается ускорение смешанной точностью на V100 в 2,4 раза, одним из источников выигрыша становится ускорение подходящих матричных умножений на тензорных ядрах. Реальное сквозное соотношение зависит также от операций, не являющихся матричными, трафика памяти и накладных расходов на ввод и коммуникацию.
Матричные умножения доминируют в вычислениях обучения, но нейронным сетям нужно больше, чем линейные преобразования. Между матричными операциями каждого слоя функции активации вводят нелинейность, которая позволяет сетям выучивать сложные закономерности. По сравнению с матричным умножением эти функции выглядят вычислительно тривиальными, однако особенности их реализации влияют на эффективность обучения так, что на масштабе это важно.
Функции активации
Функции активации, такие как sigmoid, tanh, ReLU и softmax, вводят нелинейность, но особенности их реализации также определяют производительность системы обучения. С точки зрения системы выбор функции активации определяет вычислительную стоимость, загрузку аппаратуры и паттерны доступа к памяти при обратном распространении ошибки.
Критический вопрос для инженеров ML-систем — не то, что эти функции делают математически, а то, как их стоимость ведет себя на масштабе. Бенчмарки и компромиссы, которые следуют дальше, подводят к одному системному тезису. Поскольку поэлементные активации перемещают гораздо больше байтов, чем вычисляют, их ядра часто ограничены пропускной способностью памяти, а не арифметикой, поэтому различия в стоимости одной операции важны меньше, чем кажется по их величинам.
Стоимость активаций может накапливаться по многим элементам и слоям, но ее вклад в сквозное время зависит от формы тензора, слияния, реализации, точности и аппаратуры. «Иллюстративный снимок времени активаций» сохраняет один иллюстративный снимок времени на Apple M2 из истории разработки главы. Конфигурация его бенчмарка не была записана, поэтому значения не следует трактовать как воспроизводимое доказательство или переносить на другие системы. На ускорителях ядра активаций часто ограничены трафиком памяти, границами слияния и пропускной способностью специальных функций, а не задержкой скалярных инструкций CPU. Одна и та же активация может выполняться как отдельное ядро, сливаться с соседним оператором или использовать аппроксимацию, выбранную компилятором. Поэтому нанесенное на график скалярное время не может предсказать ее стоимость внутри скомпилированного шага обучения.
Иллюстративный снимок времени активаций: старый снимок времени на Apple M2 сравнивает четыре реализации активаций при неучтенной конфигурации бенчмарка. График сохраняет исходную относительную иллюстрацию, но не устанавливает переносимых соотношений производительности. Ось y обрезана и начинается с 0,40 с, поэтому высоты столбцов преувеличивают различия.
Современные ускорители могут реализовывать эти функции через нативные инструкции, полиномиальные аппроксимации, табличные методы или слитые ядра. ReLU требует простой пороговой операции, тогда как формулировки sigmoid, tanh и точной функции GELU (Gaussian Error Linear Unit) требуют больше арифметики или поддержки специальных функций. Реальная разница в задержке все равно зависит от того, что является ограничивающим фактором: арифметика, трафик памяти или накладные расходы на запуск. ReLU может давать нули, которые последующая система способна использовать, но доля разреженности зависит от распределения активаций и обученной модели. Softmax10 добавляет редукцию и нормировку по выбранной оси. Эти зависимости требуют координации, хотя оптимизированные реализации остаются высокопараллельными.
«Сравнение функций активации с точки зрения систем» кратко показывает, как эти особенности переводятся в системные ограничения.
| Функция | Ключевые преимущества | Ключевые недостатки | Системные следствия |
|---|---|---|---|
| Sigmoid | Гладкая; ограниченный выход в . | Градиенты насыщаются при больших по модулю значениях; выход не центрирован в нуле. | Использует экспоненциальные или аппроксимирующие ядра, стоимость которых зависит от цели. |
| Tanh | Гладкая; выход, центрированный в нуле, в . | Градиенты насыщаются при больших по модулю значениях. | Использует ядра специальных функций или аппроксимаций, похожие по структуре на sigmoid. |
| ReLU | Простая пороговая операция; не насыщается для положительных входов. | Может давать постоянно неактивные нейроны. | Часто дешева и допускает слияние; пригодность разреженности зависит от поддержки на последующих этапах. |
| Softmax | Дает нормированное распределение по оси. | Требует редукций и координации между элементами. | Параллельные реализации координируют этапы максимума, суммы и нормировки. |
Сравнение функций активации с точки зрения систем. Функции активации различаются математическим поведением, стоимостью ядер, возможностями слияния и паттернами доступа к памяти.
ReLU остается распространенной, потому что она проста и эффективна, а softmax необходим, когда модели нужно нормировать оценки в вероятности. GPT-2 иллюстрирует другой выбор — функцию GELU (Gaussian Error Linear Unit).
Выбор активации GELU
Помимо базовых функций активации, описанных в «Вычислениях в нейронных сетях» (Sigmoid, Tanh, ReLU), современные архитектуры все чаще используют более гладкие альтернативы. GPT-2 использует активацию GELU (Radford et al., 2019), Gaussian Error Linear Unit, введенную Hendrycks and Gimpel (2016) и часто реализуемую через распространенную аппроксимацию на основе tanh из той же формулировки. Ее точное определение: где — функция распределения стандартного нормального распределения.
GELU применяет гладкое масштабирование, зависящее от входа, а не жесткий порог ReLU. Несмотря на формулировку через гауссову функцию распределения, она детерминирована. Улучшает ли она качество модели по сравнению с другой активацией, — эмпирическое свойство архитектуры и рецепта обучения, а не универсальная гарантия.
Точный GELU использует
erf, тогда как распространенные реализации используют аппроксимацию на основе tanh, например «Аппроксимация GELU». Аппроксимация меняет стоимость арифметики и вносит небольшое численное отличие от точной функции. Сквозное влияние зависит от слияния, размера тензора, точности, реализации ядра и доли времени исполнения, которая приходится на ядра активаций, поэтому фиксированного соотношения GELU к ReLU для всех систем не существует.
Аппроксимация GELU: быстрая аппроксимация избегает дорогого вычисления erf() и сохраняет свойства активации.
# Быстрая аппроксимация GELU, используемая в промышленных системах
# Избегает дорогого вычисления erf() и сохраняет
# свойства активации
gelu_approx = (
0.5 * x * (1 + tanh(sqrt(2 / pi) * (x + 0.044715 * x**3)))
)
Аппроксимация GELU подчеркивает более общий принцип: стоимость вычислений не всегда является главной проблемой. Для функций активации реальным узким местом часто оказывается пропускная способность памяти, а не арифметические операции. Это различие между операциями, ограниченными вычислениями, и операциями, ограниченными памятью, напрямую влияет на приоритеты оптимизации и повторяется на протяжении всего анализа узких мест обучения.
Плотное матричное умножение может повторно использовать операнды в огромном числе операций умножения с накоплением, тогда как неслитая поэлементная активация обычно выполняет мало работы на каждое прочитанное и записанное значение. Этот разрыв арифметической интенсивности часто делает отдельные ядра активаций чувствительными к памяти. Слияние может устранить промежуточный трафик памяти, а пропускная способность специальных функций все еще может иметь значение для ядер, арифметика которых не полностью скрыта. Поэтому замена одной активации другой не дает фиксированного эффекта на реальное время.
Узкие места пропускной способности памяти
Функции активации раскрывают важный системный принцип: не все операции ограничены вычислениями. Матричные умножения насыщают вычислительные блоки ускорителя, тогда как функции активации часто становятся ограниченными пропускной способностью памяти по трем причинам:
- Поэлементные операции выполняют мало вычислений на одно обращение к памяти; ReLU выполняет одну операцию на одну загрузку.
- Простые операции завершаются быстрее, чем время передачи из памяти, что ограничивает выгоду от параллелизма.
- Вычислительные возможности ускорителей выросли быстрее пропускной способности внешней памяти, что усиливает давление на повторное использование данных рядом с вычислительными блоками.
Именно поэтому одно лишь число скалярных операций не предсказывает задержку ядра активации. Чтобы определить, ограничена ли пропускная способность памятью, прямой проход нужно анализировать с учетом слияния и хранения активаций, а не только стоимости вычисления самой функции.
Матричные умножения прямого прохода доминируют по числу операций с плавающей точкой, тогда как функции активации нагружают пропускную способность памяти. Чтобы эти прямые активации превратились в сходимость модели, ошибку нужно распространить назад по графу, чтобы обновить тензоры параметров. Этот шаг оптимизации вводит ограничения на хранение состояния, планирование обновлений и численную устойчивость, которые определяют эффективность обучения.
Алгоритмы оптимизации
Алгоритмы оптимизации переводят градиенты ошибки в обновления параметров, которые направляют модель к сходимости. Хотя математически они записываются как шаги по абстрактной поверхности потерь, каждый шаг оптимизатора вводит конкретные физические ограничения на исполнение ускорителя: постоянные тензоры состояния, которые занимают высокоскоростную память (High Bandwidth Memory, HBM), поэлементные обновления, ограниченные пропускной способностью памяти, и барьеры синхронизации. В таксономии D·A·M выбор алгоритма оптимизации связывает математическую траекторию (Алгоритм) напрямую с рабочим набором и трафиком памяти (Машина).
Методы оптимизации на основе градиента
«Алгоритмы обновления параметров» вводит градиентный спуск как фундаментальный алгоритм оптимизации: итеративная корректировка параметров в направлении наискорейшего спуска. Эта концептуальная формулировка предполагает скромные сети на одном устройстве. В масштабе аппаратуры градиентный спуск и его варианты сталкиваются с физическими узкими местами: емкость памяти ограничивает, сколько активаций и состояний оптимизатора может оставаться в памяти, а пропускная способность памяти ограничивает, как быстро обновляются параметры.
Градиентный спуск
Градиентный спуск — математическая основа обучения нейронных сетей: итеративная корректировка параметров для минимизации функции потерь. В системах обучения эта математическая операция превращается в конкретные вычислительные паттерны. На каждой итерации система должна выполнить четыре зависимые операции:
- Вычислить активации прямого прохода
- Вычислить значение функции потерь
- Вычислить градиенты через обратное распространение ошибки
- Обновить параметры по значениям градиентов
Вычислительные требования градиентного спуска растут с размером модели и размером набора данных. Вычисление градиентов требует хранения промежуточных активаций прямого прохода для обратного распространения ошибки. Эти активации занимают память пропорционально глубине сети и числу обрабатываемых примеров.
Традиционный градиентный спуск обрабатывает весь набор данных перед каждым обновлением параметров. Для обучающего набора из миллиона примеров система должна вычислить совокупный градиент по всем примерам, прежде чем сделать один шаг. Пусть обозначает число примеров в обучающем наборе, — число примеров, находящихся в памяти для одного прямого и обратного прохода, а — амортизированное время прямого и обратного прохода на один пример при выбранном режиме микробатчей. Накопление градиентов объединяет несколько микробатчей в один больший эффективный батч. Соотношения для пиковой памяти в «память градиентного спуска» и для времени шага в «время шага градиентного спуска» фиксируют различие между реализациями:
Раздел «Истинная стоимость памяти обучения» приложения «Основы алгоритмов» формализует эту декомпозицию, выводя полное уравнение памяти обучения, включая накладные расходы на состояние оптимизатора. Обучение на полном батче не требует хранить активации всех примеров одновременно, если набор данных потоковый или разбит на микробатчи: пиковая память определяется примерами, которые одновременно находятся в памяти. Системная проблема при этом остается серьезной: обработка примеров перед каждым обновлением создает итерации длиной в миллион примеров, в которых параметры остаются замороженными, снижая скорость, с которой модель учится на данных.
Варианты, более дружественные к аппаратуре, снимают требование точного градиента по всему набору на каждом обновлении. Стохастический градиентный спуск (SGD)11 оценивает градиенты по выбранным примерам или мини-батчам, а не по всему набору данных. Это меняет частоту обновлений и дисперсию градиента, позволяя каждому обновлению работать с ограниченным рабочим набором.
Однако вычисление по одному примеру () разрушает эффективность ускорителя. Современные ускорители достигают пиковой пропускной способности, отображая крупные операции общего матричного умножения (GEMM) на систолические массивы и блоки SIMD (single instruction, multiple data). При операции слоя вырождаются в матрично-векторные произведения (GEMV), снижая арифметическую интенсивность до операций на байт, переданный из памяти устройства. Вычислительные блоки простаивают, ожидая передач из DRAM или HBM. Одновременно обновления по одному примеру после каждого образца требуют читать тензоры параметров из памяти устройства, применять градиенты и записывать обновленные веса обратно, насыщая пропускную способность памяти без амортизации доступа к параметрам по нескольким входам.
Мини-батчевая обработка
Мини-батчевый градиентный спуск возникает как практический компромисс между полным батчем и стохастическими методами — совместное проектирование алгоритма и машины, которое вычисляет градиенты по небольшим батчам примеров, согласованным с архитектурой современных ускорителей (Dean et al., 2012). Размер батча становится ключевым системным параметром, влияющим и на вычислительную эффективность, и на требования к памяти.
Батчевая обработка
Батчевая обработка объединяет несколько обучающих примеров в тензорные операции, которые распределяют фиксированные накладные расходы на шаг между примерами и могут открывать больше параллельной работы. Увеличение может повысить загрузку и арифметическую интенсивность, но не гарантирует, что каждая операция станет ограниченной вычислениями.
- Значение: пропускная способность часто растет с размером батча, пока целевая аппаратура не будет достаточно загружена, тогда как число и качество обновлений, необходимых для сходимости, следуют отдельной кривой, зависящей от нагрузки. Goyal et al. продемонстрировали рецепт ResNet-50 на ImageNet при с линейным масштабированием скорости обучения и прогревом (Goyal et al., 2017). Этот результат — демонстрация для конкретной конфигурации, а не универсальный критический размер батча.
- Отличие: обновление мини-батча усредняет градиенты по примерам. При независимых одинаково распределенных выборках стандартное отклонение этого среднего убывает примерно как . Обновление обрабатывает больше данных, чем обновление по одному примеру, поэтому чистый объем перемещения данных и время зависят от повторного использования, реализации и того, как размер батча меняет число необходимых обновлений.
- Типичная ошибка: частое заблуждение состоит в том, что линейное масштабирование скорости обучения (умножение на ) работает при любом размере батча. Это рецепт обучения, который обычно требует прогрева и эмпирической проверки, а его полезный диапазон зависит от модели, данных, оптимизатора и целевой точности.
Выбор размера батча напрямую определяет распределение памяти ускорителя. Декомпозиция в «декомпозиция памяти батча» отделяет фиксированное хранение параметров и градиентов от рабочего набора активаций, зависящего от батча:
Поскольку член с активациями масштабируется с , а память параметров и градиентов остается фиксированной, удвоение батча удваивает рабочий набор активаций, и модель, которая спокойно помещается при малом батче, может исчерпать 40–80 ГБ HBM на мощном ускорителе для обучения, когда батч вырастает. «Управление памятью» разбирает этот бюджет послойно для ResNet-50.
Увеличение размера батча превращает операции над векторами, ограниченные памятью, в матричные умножения, ограниченные вычислениями. В плотных проекциях прямого распространения и внимания параметры, загруженные из HBM в SRAM на кристалле, повторно используются для всех образцов батча. Арифметическая интенсивность растет пропорционально , насыщая конвейеры тензорных ядер и амортизируя накладные расходы на чтение параметров. Правила линейного масштабирования позволяют менять скорость обучения вместе с размером батча, чтобы сохранять темп сходимости до эмпирического предела (Goyal et al., 2017).
Поскольку память активаций растет линейно с , емкость HBM ускорителя ограничивает максимальный размер батча, который может выполниться за один прямой и обратный проход. Когда размер батча, нужный для высокой загрузки аппаратуры или устойчивой сходимости, превышает память устройства, системы разделяют размер батча исполнения и размер батча оптимизации с помощью накопления градиентов. Система выполняет несколько меньших микробатчей (), последовательно обрабатывая их, чтобы держать пиковую память активаций ограниченной, как описано в «память градиентного спуска», накапливает полученные градиенты на месте и запускает обновление оптимизатора только тогда, когда совокупный эффективный батч завершен.
Адаптивные оптимизаторы и оптимизаторы с импульсом
Базовый SGD применяет одну скалярную скорость обучения ко всем тензорам параметров, что может остановить обучение, когда кривизна функции потерь различается на порядки по разным измерениям. Импульс сглаживает обновления с помощью истории направлений градиента, RMSprop адаптирует размер отдельных шагов по величинам квадратов градиентов, а Adam сочетает отслеживание первого момента с адаптивным масштабированием второго момента (Kingma and Ba, 2015). Эти алгоритмические улучшения могут сокращать общее число шагов оптимизации, нужных для сходимости, но делают это, вводя постоянное вспомогательное состояние, которое напрямую повышает давление на память ускорителя и трафик шины памяти.
Методы с импульсом
Методы с импульсом12 решают проблему колебаний SGD, накапливая вектор скорости по итерациям и гася высокочастотные колебания вдоль крутых оврагов. В аппаратуре это сглаживание требует выделения и поддержания постоянного тензора скорости, точно совпадающего по форме и точности с параметрами модели. Параметры и это вспомогательное состояние вместе занимают вдвое больше памяти, чем одни параметры, еще до учета градиентов и активаций.
Адаптивные методы скорости обучения
Пока импульс сглаживает направление градиента, он не решает проблему разного масштаба градиентов у разных параметров. RMSprop13 решает ее, поддерживая скользящее среднее квадратов градиентов для каждого параметра и автоматически уменьшая шаги для параметров с исторически большими градиентами. Адаптация размера шага для каждого параметра требует хранить текущее среднее квадратов градиентов , что, как и импульс, удваивает статический объем памяти относительно параметров. Кроме того, вычисление этого скользящего среднего вводит поэлементные ядра возведения в квадрат и извлечения квадратного корня на каждом обновлении параметров.
Оптимизация Adam
Adam14 сочетает преимущества импульса и RMSprop: сглаживание градиента из импульса решает проблему шумных обновлений, а адаптивное масштабирование из RMSprop учитывает размеры шагов, специфичные для параметра. Эта комбинация поддерживает два скользящих среднего для каждого параметра. Здесь и — буферы первого и второго моментов, и — их коэффициенты затухания, а — константа численной устойчивости в знаменателе:
Поддержание обоих буферов моментов утраивает объем параметров вместе с состоянием оптимизатора: система обучения должна выделить два постоянных тензора состояния ( и ) рядом с тензорами параметров. Для модели на 100 млн параметров одни только эти вспомогательные векторы добавляют 800 МБ к объему хранения весов.
Системные следствия выбора оптимизатора
Объем вспомогательного состояния растет последовательно: от SGD (без вспомогательного состояния) через Momentum и RMSprop (по одному вектору состояния на параметр) к Adam (два вектора состояния на параметр), как количественно показано в «Занимаемая память оптимизатора». Эти объемы памяти задают фундаментальный компромисс со скоростью сходимости:15 хотя Adam часто достигает целевой потери за меньшее число шагов оптимизации, его статический объем памяти ограничивает размер батча, который помещается в HBM ускорителя, и увеличивает трафик шины памяти на каждом обновлении. На масштабе GPT-2 эти накладные расходы становятся главным ограничением памяти первого порядка.
| Свойство | SGD | Momentum | RMSprop | Adam |
|---|---|---|---|---|
| Накладные расходы памяти | Нет | Члены скорости | Квадраты градиентов | И скорость, и квадраты градиентов |
| Параметры + состояние оптимизатора | 1× | 2× | 2× | 3× |
| Плотный доступ к состоянию | Параметры и градиенты | Добавляет скорость | Добавляет состояние квадратов градиентов | Добавляет состояние первого и второго моментов |
| Работа обновления | Наименьшая вспомогательная работа | Добавляет обновление импульса | Добавляет адаптивное масштабирование | Добавляет обновления моментов и коррекцию смещения |
| Эффективность аппаратуры | Зависит от нагрузки | Зависит от нагрузки | Зависит от нагрузки | Зависит от нагрузки |
| Поведение сходимости | Зависит от нагрузки | Зависит от нагрузки | Зависит от нагрузки | Зависит от нагрузки |
Занимаемая память оптимизатора. Разные алгоритмы оптимизации несут разную стоимость вспомогательного состояния из-за хранения промежуточных значений, таких как скорости и квадраты градиентов. Строка множителя считает параметры плюс вспомогательное состояние оптимизатора и не учитывает градиенты и активации; полная память обучения должна добавлять эти члены явно. Эти компромиссы определяют ограничения развертываний с ограниченными ресурсами и обучения крупных моделей.
Затраты, количественно оцененные в «Занимаемая память оптимизатора», создают проектное противоречие. Два буфера моментов Adam могут улучшать оптимизацию для данной нагрузки, но их память может уменьшить размер модели или батча, который помещается на ускоритель. AdamW16 (Loshchilov and Hutter, 2019) отделяет затухание весов от адаптивного обновления градиента Adam, не добавляя еще одного тензора состояния на параметр.
Требования к памяти оптимизатора GPT-2
Типичная конфигурация обучения GPT-2 XL использует оптимизатор Adam с пятью гиперпараметрами:
- β₁ = 0,9 (затухание импульса)
- β₂ = 0,999 (затухание второго момента)
- Скорость обучения: прогрев от 0 до 2,5e-4 за первые 500 шагов, затем косинусное затухание
- Затухание весов: 0,01
- Отсечение градиентов: отсечение по глобальной норме на уровне 1,0
Расчет:
Для 1,5 млрд параметров GPT-2 в FP32 (по 4 байта каждый) память распределяется по четырем компонентам:
- Параметры: 1,5 млрд 4 байта = 6 ГБ
- Градиенты: 1,5 млрд 4 байта = 6 ГБ
- Состояние Adam (m, v): 1,5 млрд 8 байт = 12 ГБ
- Итого статическая память: 24 ГБ
Это объясняет, почему одно только статическое состояние обучения GPT-2 объемом 24 ГБ почти достигает емкости V100 в 32 ГБ, еще до учета хранения активаций.
Системные решения, которые определяет оптимизатор
- Смешанная точность обучения (FP16) понижает точность операций, но требует хранить мастер-веса FP32, поэтому статический объем памяти остается около 24 ГБ.
- Накопление градиентов (разбиение эффективных батчей на меньшие микробатчи) позволяет получить эффективный размер батча несмотря на ограничения памяти.
Системный вывод: эта иллюстративная конфигурация показывает, как буферы моментов Adam ограничивают емкость. Любой выигрыш в сходимости относительно SGD или импульса нужно измерять при одинаковых модели, данных, расписании, размере батча и критерии остановки.
Интерфейс оптимизатора фреймворка и планирование
После того как память оптимизатора количественно оценена, важен интерфейс фреймворка, потому что он определяет, когда это состояние читается, записывается, очищается и сохраняется между шагами. Цикл обучения отделяет вычисление градиентов от обновления параметров, чтобы система могла накапливать градиенты, синхронизировать их или откладывать обновления без изменения уравнений оптимизатора. «Цикл обучения Adam» показывает, где оптимизация Adam входит в этот цикл.
Цикл обучения Adam: стандартный четырехшаговый цикл оптимизации с очисткой градиентов, прямым проходом, обратным проходом и обновлением параметров.
import torch
import torch.nn as nn
import torch.optim as optim
# Инициализируем оптимизатор Adam с параметрами модели и скоростью обучения
optimizer = optim.Adam(
model.parameters(), lr=0.001, betas=(0.9, 0.999)
)
loss_function = nn.CrossEntropyLoss()
# Стандартный цикл обучения, реализующий четырехшаговый цикл оптимизации
for epoch in range(num_epochs):
for batch_idx, (data, targets) in enumerate(dataloader):
# Шаг 1: очищаем накопленные градиенты с предыдущей итерации
optimizer.zero_grad()
# Шаг 2: прямой проход — вычисляем предсказания модели
predictions = model(data)
loss = loss_function(predictions, targets)
# Шаг 3: обратный проход — вычисляем градиенты через автодифференцирование
loss.backward()
# Шаг 4: обновление параметров — применяем уравнения Adam
optimizer.step()
Вызов optimizer.zero_grad() отмечает границу между одним обновлением и следующим. Градиенты накапливаются между вызовами backward(), поэтому явная очистка не дает устаревшим градиентам загрязнить следующий батч. То же накопление позже окажется полезным для больших эффективных размеров батча, но только тогда, когда цикл обучения намеренно управляет этой границей.
Метод optimizer.step() — это другая граница: он потребляет текущие градиенты и изменяет постоянное состояние оптимизатора. Для оптимизации Adam этот вызов реализует оценку импульса, отслеживание квадратов градиентов, коррекцию смещения и обновление параметров. Алгоритм ниже делает скрытое состояние явным, чтобы стоимость памяти оставалась видимой, а не пряталась за вызовом API.
В этом упрощенном представлении статического состояния два буфера моментов Adam занимают вдвое больше места, чем параметры.
Алгоритм: обновление параметров Adam (один шаг оптимизатора)
Вход: градиент g_t = ∇L(θ_t); шаг t; скорость η; затухания β₁, β₂; константа ε
Выход: обновленный параметр θ_{t+1}; буферы моментов m_t, v_t для следующего шага
m_t ← β₁ m_{t-1} + (1 − β₁) g_t ▷ первый момент (импульс)
v_t ← β₂ v_{t-1} + (1 − β₂) g_t² ▷ нецентрированный второй момент
m̂_t ← m_t / (1 − β₁^t); v̂_t ← v_t / (1 − β₂^t) ▷ коррекция смещения
θ_{t+1} ← θ_t − η m̂_t / (√v̂_t + ε) ▷ обновление параметра
Первые два шага алгоритма поддерживают два постоянных буфера моментов на параметр, поэтому параметры вместе с состоянием оптимизатора достигают примерно 3-кратного объема памяти параметров еще до учета градиентов, активаций и мастер-весов FP32. Помимо емкости, шаг оптимизатора создает жесткое узкое место пропускной способности памяти. С математической точки зрения обновление состоит из поэлементных операций с арифметической интенсивностью ниже : в FP32 обновление каждого параметра читает четыре тензора () и записывает три (), передавая 28 байт по шине памяти ради примерно десятка арифметических операций. Поскольку матричные исполнительные блоки (например, тензорные ядра) простаивают в этой фазе, ограниченной памятью, высокопроизводительные системы обучения используют слитые ядра оптимизатора: они объединяют обновления моментов, коррекцию смещения и запись весов в один запуск ядра на группу параметров, минимизируя обращения к памяти устройства.
Интеграция планирования скорости обучения
Хук планирования скорости обучения фреймворка меняет траекторию оптимизатора, не добавляя состояния на параметр. Он корректирует скорость обучения во время обучения, позволяя системе формировать поведение сходимости, оставляя при этом уравнения самого оптимизатора неизменными.
Расписания, такие как косинусное затухание, экспоненциальный спад или ступенчатое снижение, реализуют эту траекторию, меняя размер шага во времени. Планировщик отслеживает легковесное скалярное состояние (текущий шаг, эпоху, фазу прогрева), которое нужно сериализовать в контрольные точки вместе с состояниями оптимизатора, чтобы гарантировать возобновление с точным совпадением битов. «Фреймворки машинного обучения» описывает интерфейс планировщика фреймворка, который координирует эти шаги. Такое разделение позволяет инженеру систем сочетать базовые алгоритмы оптимизации (SGD, Adam) со стратегиями планирования (косинусное затухание, линейный прогрев), не меняя правил обновления тензоров.
Правила обновления параметров задают траектории по заданным векторам градиентов, но предполагают, что эти градиенты уже вычислены. Для сетей с миллиардами параметров вычисление градиентов составляет главную вычислительную нагрузку и нагрузку на память цикла обучения. Механика порождения градиентов, а не сам шаг оптимизатора определяет бюджеты памяти и время исполнения обучения.
Механика обратного распространения ошибки
Обратное распространение ошибки вычисляет градиенты параметров, обходя вычислительный граф сети в обратном топологическом порядке. При прямом выводе ускоритель освобождает каждый тензор активации, как только следующий слой его использует. Обучение нарушает этот эфемерный жизненный цикл: вычисление градиента по параметрам слоя требует точного тензора активации, который предыдущий слой создал во время прямого прохода. Поэтому каждая прямая активация должна оставаться в HBM до тех пор, пока обратный обход не вернется к этому слою, и хранение активаций становится главным ограничением памяти в крупномасштабном обучении.
«Вычисление градиентов и обратное распространение ошибки» задает математическую основу: правило цепочки раскладывает вычисление градиентов на послойные произведения вектора на якобиан, протягивая сигналы ошибки назад от скалярной функции потерь к параметрам входных слоев. В системном масштабе центральный вопрос состоит не в том, что вычисляет обратное распространение ошибки, а в том, чего оно стоит по емкости памяти и пропускной способности вычислений. Операции слоев из «Математических операций в нейронных сетях» создают прямые активации, которые нужно сохранить для обратного прохода. Вычисление требует прямого доступа к этим сохраненным активациям, и именно так возникает уравнение памяти обучения, которое позже использует контрольная точка градиентов.
Вычислительно обратное распространение ошибки через линейный слой требует двух различных матричных умножений той же размерности, что и прямой проход: одно вычисляет градиент активации для передачи сигнала ошибки вверх по сети, а другое вычисляет градиент параметров для обновления весов. Поскольку обратный проход выполняет два матричных умножения той же размерности на каждое прямое матричное умножение, обратное распространение требует вдвое больше арифметической работы, чем прямой проход. Отсюда возникает стандартное системное соглашение: один полный шаг обучения требует примерно втрое больше FLOP, чем прямой проход (одна единица работы на прямой проход плюс две на обратный).
Простая трехслойная сеть, обрабатывающая MNIST, требует килобайтов хранения активаций. Напротив, GPT-2, обрабатывающая один батч, требует более 35,9 ГБ — больше общей емкости высокоскоростной памяти стандартного ускорителя. В разделе «Истинная стоимость памяти обучения» приложения «Основы алгоритмов» выводится, как обратное распространение ошибки порождает эти затраты памяти, и формализуется полное уравнение памяти обучения (). Современные фреймворки автоматизируют вычисление градиентов через автоматическое дифференцирование («Фреймворки машинного обучения»), но управление получающимся объемом памяти и расписанием вычислений остается неизбежной обязанностью инженера систем.
Объем активаций простирается от игрушечного MNIST до обучения масштаба GPT.
Требования к памяти активаций
Память обучения делится на четыре различные категории состояния:
- сохраненные прямые активации, которые нужны правилам производных обратного прохода,
- параметры модели,
- градиенты параметров, и
- состояние оптимизатора и мастер-веса повышенной точности.
Рассмотрим батч обучающих примеров, проходящий через сеть. Прямой проход вычисляет и сохраняет:
Чтобы вычислить градиент параметров , правило обратного прохода должно прочитать входные активации слоя . Чтобы передать сигнал ошибки вверх по сети через нелинейную функцию активации по формуле , ядру нужен либо тензор до активации (как в GELU), либо выход после активации (когда можно вычислить по выходу, как в sigmoid, или через булеву маску в один бит для ReLU). Слитые ядра и выборочный пересчет могут сжимать этот сохраненный объем. Тем не менее, поскольку активации масштабируются с размером батча и длиной последовательности , их хранение растет с размерностью данных, тогда как память параметров и оптимизатора фиксирована архитектурой модели. Расчет для GPT-2 в «Разборе памяти активаций GPT-2» раскладывает это давление памяти по блокам внимания, подслоям прямого распространения и состояниям оптимизатора.
Разбор памяти активаций GPT-2
Для GPT-2 с размером батча = 4, длиной последовательности = 1024, размерностью скрытого состояния = 1600 и 48 слоями:
Расчет:
- Активации внимания: (Q, K, V, выход) = 4 × 1024 × 1600 × байта (FP16) = 52,4 МБ
- Активации FFN: (расширение промежуточного слоя) = 4 × 1024 × 6400 × 2 байта = 52,4 МБ
- Оценки внимания: байт для буферов оценок, softmax и dropout. При 25 головах этот член достигает 524,3 МБ на слой — доминирующий член, квадратичный по длине последовательности и именно тот, который отбрасывает выборочный пересчет
- Статистики слоя нормализации: минимальные (около 10 МБ на слой)
- Итого на слой: примерно 639,1 МБ (внимание + FFN + оценки внимания + статистики нормализации)
Результат:
- Общий объем активаций (оценка по библиотеке, включает буферы остаточного потока и фреймворка сверх перечисленных статей): 35,9 ГБ
- Параметры (FP16): 3 ГБ
- Градиенты: 3 ГБ
- Мастер-веса (FP32): 6 ГБ
- Момент Adam (FP32): 12 ГБ
- Пиковая память во время обучения: примерно 59,9 ГБ
Это превышает емкость одного V100 в 32 ГБ.
Решения:
- Выборочный пересчет активаций: отбросить промежуточные результаты внимания и пересчитать их при обратном проходе, снизив этот член моделируемых активаций на 70,2 процента до примерно 10,7 ГБ; дополнительная работа зависит от реализации
- Выгрузка активаций в CPU: хранить часть активаций в оперативной памяти CPU и передавать их во время обратного прохода
- Смешанная точность: активации FP16 (уже применено) против FP32 (дали бы 71,7 ГБ)
- Уменьшение микробатча и накопление градиентов: собрать больший эффективный батч из нескольких проходов вперед и назад, помещающихся в память
Системный вывод: даже после выборочного пересчета смоделированные активации вместе со статическим состоянием составляют около 34,7 ГБ, что немного выше сырой емкости V100 в 32 ГБ до учета рабочей памяти и накладных расходов аллокатора. Поэтому для данного представления по-прежнему необходимы полный пересчет, шардирование, выгрузка или меньший микробатч.
Этот разбор иллюстрирует практические инженерные решения, которые требуются, когда памяти ускорителя не хватает. Тот же компромисс между сохраненными активациями, пересчетом и размером батча задает и анализ памяти и вычислений, который следует дальше.
Компромисс между памятью и вычислениями
Обучение больших моделей требует управления стеной памяти (узким местом пропускной способности, введенным в «Вычислениях в нейронных сетях» и вновь рассмотренным в «Почему стратегия исполнения важна: стена памяти»).
Узкое место
- Память активаций: понимаете ли вы, почему активации, сохраненные для обратного распространения ошибки, могут доминировать в использовании памяти и для некоторых форм моделей и рецептов обучения превышать размер параметров более чем в 10 раз?
- Стратегия оптимизации: можете ли вы объяснить, как контрольные точки градиентов обменивают вычисления (пересчет активаций) на емкость памяти?
- Оценка памяти: для GPT-2 (1,5 млрд параметров) в смешанной точности назовите одну значащую цифру для каждого члена в «уравнении полной памяти обучения»: веса, градиенты, состояние оптимизатора и активации при размере батча 32. Какой член самый большой и поместится ли итог в ускоритель на 32 ГБ?
Ограничения масштабирования
- Ограничения размера батча: почему емкость памяти ограничивает максимальный размер батча и как накопление градиентов решает эту проблему без увеличения памяти?
Компромиссы между памятью и вычислениями
Системы обучения должны балансировать использование памяти и вычислительную эффективность. Каждый прямой проход порождает значения, которые правила обратного прохода могут запросить. Для упрощенной модели сети с слоями пусть обозначает байты сохраненного промежуточного состояния на пример на слое , а — байты сохраненных выходов активаций на пример. При этом соглашении об объеме на пример их хранение растет линейно с размером батча и приближается уравнением:
Эта потребность в памяти складывается с памятью весов, градиентов и оптимизатора, рассмотренной в разделе «Системные следствия выбора оптимизатора». «Полная память обучения» задает концептуальную декомпозицию состояния обучения:
Пиковое значение во время исполнения может превышать эту сумму, потому что рабочие буферы, буферы коммуникации, поведение аллокатора и служебные структуры фреймворка тоже занимают память. Чтобы уменьшить член активаций, системы обучения могут стратегически пересчитывать промежуточные значения во время обратного прохода, а не хранить их. Это увеличивает вычислительную работу, но позволяет использовать более глубокие сети или большие батчи на аппаратуре с ограниченной памятью (Chen et al., 2016). Алгоритм ниже делает компромисс явным: прямой проход хранит активации только в разреженном наборе контрольных точек, а обратный проход пересчитывает остальные по требованию.
Алгоритм: контрольные точки градиентов (пересчет активаций)
Вход: сеть из N_L слоев; набор контрольных точек 𝒞 ⊆ {1, …, N_L} (например, каждые √N_L слоев)
Выход: градиенты параметров при сниженном пиковом объеме памяти активаций
для ℓ = 1 до N_L:
выполнить прямой проход слоя ℓ; сохранить его активацию, только если ℓ ∈ 𝒞 ▷ остальные отбрасываются
для ℓ = N_L до 1:
если активация слоя ℓ была отброшена:
пересчитать прямой сегмент от ближайшей сохраненной контрольной точки до слоя ℓ
вычислить градиент слоя; освободить активацию
вернуть накопленные градиенты
Расстановка контрольных точек равномерно через каждые слоев снижает пиковый объем активаций с до ценой одного дополнительного прямого прохода арифметики на шаг обучения (Chen et al., 2016). Это увеличивает полную вычислительную работу шага примерно с трехкратной до четырехкратной величины FLOP прямого прохода, обменивая дополнительные арифметические операции на заметно меньший объем активаций, который помещается в физическую память ускорителя.
Емкость — лишь одно из двух физических ограничений памяти; второе — пропускная способность. Ускорители дают огромную пропускную способность матричных вычислений, но перемещение тензоров промежуточных активаций между внешней HBM (High Bandwidth Memory) и SRAM на кристалле часто насыщает шину памяти (Jouppi et al., 2017). Даже когда активации помещаются в емкость HBM, время на их чтение и запись может намного превышать время арифметического исполнения. Чтобы снять давление на шину памяти, современные движки обучения сливают поэлементные операции непосредственно с предшествующими матричными умножениями и организуют вычисление градиентов через тайлы SRAM на кристалле, а не через глобальную память. На уровне среды выполнения кэширующие аллокаторы фреймворков отслеживают время жизни тензоров по вычислительному графу и переиспользуют блоки памяти, как только завершается последний обратный потребитель активации (Paszke et al., 2019).
Прямое распространение, вычисление градиентов и обновление параметров определяют, что системы обучения должны вычислить. Однако само название операции не показывает, где система простаивает. Форма матриц, слияние операторов, численная точность и иерархия памяти определяют, что ограничивает исполнение: арифметическая пропускная способность или перемещение данных. Арифметическая интенсивность дает аналитический инструмент, чтобы количественно оценить этот баланс.
Арифметическая интенсивность
Арифметическая интенсивность фиксирует это различие — отношение вычислений к перемещению данных, которое показывает, ограничена ли операция пропускной способностью вычислений или пропускной способностью памяти:
Операции с высокой арифметической интенсивностью ограничены вычислениями: их производительность упирается в вычислительную пропускную способность процессора. Операции с низкой арифметической интенсивностью ограничены памятью: они тратят больше времени на перемещение данных, чем на вычисления. Раздел «Модель Roofline» приложения «Основы машины» дает формальное определение модели Roofline и показывает, как вычислить точку перехода аппаратуры.17
«Условия классификации операций обучения» описывает типичные тенденции, а не фиксированные измерения. Плотное матричное умножение может повторно использовать операнды достаточно, чтобы достичь высокой арифметической интенсивности, тогда как отдельные поэлементные и редукционные ядра часто выполняют меньше работы на байт перемещенных данных. Точка перехода целевой аппаратуры определяет получающийся режим.
| Операция | Тенденция арифметической интенсивности | Условие классификации |
|---|---|---|
| Плотное MatMul (большое) | Высокая, когда формы и тайлинг дают значительное повторное использование операндов | Ограничено вычислениями, только если интенсивность превышает точку перехода |
| Функции активации | Обычно низкая для отдельных поэлементных ядер | Часто чувствительны к памяти, если слияние не устраняет трафик |
| LayerNorm/BatchNorm | Редукционная и поэлементная работа с несколькими проходами по тензорам | Зависит от слияния, формы и целевой точки перехода |
| Softmax внимания | Редукция и нормировка по оси внимания | Зависит от материализации, тайлинга и слияния |
Условия классификации операций обучения. Семейства операций демонстрируют общие тенденции арифметической интенсивности, но классификация требует сравнить измеренную реализацию с точкой перехода целевой аппаратуры. Ядра, чувствительные к памяти, могут выиграть от сокращения трафика или усиления слияния, тогда как ядра, ограниченные вычислениями, выигрывают от дополнительной арифметической пропускной способности.
Загрузка аппаратуры при обучении модели напрямую зависит от арифметической интенсивности ядер. Найдите точки операций на «Иллюстративной диаграмме Roofline для обучения» по логарифмической оси арифметической интенсивности, сравнивая операторы, ограниченные пропускной способностью памяти и лежащие на наклонном потолке, с операторами, ограниченными вычислениями и лежащими на плоском пике.
Иллюстративная диаграмма Roofline для обучения: профиль A100 с предполагаемыми координатами операций показывает, как арифметическая интенсивность меняет потолок достижимой производительности. Точки не являются профилем одного исполнения GPT-2. FlashAttention показан смещенным вправо, потому что сокращает трафик HBM; пересекает ли реальное ядро внимания точку перехода, зависит от формы, точности, аппаратуры и реализации.
Чтобы выработать интуицию для этих связей, изучите диаграмму Roofline на «Иллюстративной диаграмме Roofline для обучения». Точка перехода отмечает «излом», где наклонная область, ограниченная памятью, встречается с плоским потолком, ограниченным вычислениями. Реализация, нанесенная левее этой точки, ограничена пропускной способностью при допущениях модели Roofline; нанесенная правее — ограничена вычислениями. Точки операций на этой диаграмме — иллюстративные размещения, которые показывают, как интерпретировать модель, а не измеренные координаты GPT-2.
Рассмотрим слой внимания GPT-2, который материализует матрицу оценок внимания . Для каждой головы произведение стоит примерно FLOP, тогда как запись матрицы оценок в FP16 и ее последующее чтение перемещают около байт. Если учитывать только этот трафик матрицы оценок, получается приближение . Для GPT-2 Small ( при 12 головах, так что ) такой ограниченный учет дает 32 FLOP/байт. Полный анализ ядра должен учитывать также трафик Q и K, работу softmax, дополнительные чтения и записи, повторное использование кэша и слияние. Трафик материализованной матрицы оценок остается тем членом, на который нацелен FlashAttention.
У ускорителей есть характерные аппаратные точки перехода, в которых операции переходят из ограниченных памятью в ограниченные вычислениями. У типичного ускорителя для дата-центра точка перехода достаточно высока, чтобы операции с низкой интенсивностью, например материализованный softmax внимания, оставались ограниченными памятью, даже когда большие матричные умножения ограничены вычислениями. Операции ниже точки перехода ограничены памятью; выше нее — вычислениями.
Пиковая FLOP/s против устойчивой производительности
Пиковая TFLOP/s — это арифметический потолок, а не прогноз устойчивой производительности приложения. Для реализации, строго ограниченной пропускной способностью памяти, повышение только арифметического потолка не улучшает границу Roofline. Смешанная точность обучения может одновременно открывать более быстрые арифметические пути и сокращать трафик для тензоров, которые действительно хранятся и передаются в пониженной точности. Реальный выигрыш зависит от поддержки ядрами, накладных расходов на преобразование, численных требований и того, какой ресурс является ограничивающим. Поэтому оптимизация, направляемая Roofline, сначала измеряет реализацию, а потом выбирает слияние, изменение точности или дополнительные вычисления.
Размер батча может влиять на арифметическую интенсивность и загрузку, меняя формы матриц и объем повторного использования, доступного ядру. Универсальной границы на батче 32, которая отделяла бы выполнение, ограниченное памятью, от выполнения, ограниченного вычислениями, не существует: переход зависит от операции, размерностей, реализации, точности и аппаратуры.
Этот анализ направляет выбор стратегии оптимизации. Для операций, ограниченных памятью, наибольший выигрыш дает сокращение перемещения данных через слияние операторов, снижение точности или алгоритмические улучшения вроде FlashAttention. Для операций, ограниченных вычислениями, важнее повышать пропускную способность через тензорные ядра и параллельное исполнение. Различие практическое: в первом случае вопрос в том, как переместить меньше байт, во втором — как занять больше арифметических блоков.
На «Иллюстративной диаграмме Roofline для обучения» FlashAttention18 воплощает основную идею алгоритмического проектирования с учетом ввода-вывода. Никогда не материализуя всю матрицу внимания в HBM и обрабатывая вместо этого тайлы, которые помещаются в быструю SRAM, FlashAttention сокращает вспомогательную память внимания с до и резко снижает трафик HBM. В оригинальной работе сообщается об ускорении до 3 раз на исследованных нагрузках (Dao et al., 2022), причем выигрыш зависит от формы тензоров, аппаратуры и базовой реализации. Алгоритм и условия его применимости подробно разобраны в разделе «FlashAttention: оптимизация внимания с учетом ввода-вывода».
Анализ арифметической интенсивности определяет, какой физический ресурс ограничивает конкретную реализацию. Плотное матричное умножение достигает режима, ограниченного вычислениями, когда формы тензоров обеспечивают достаточное повторное использование данных, тогда как отдельные ядра нормализации и поэлементных активаций остаются ограниченными пропускной способностью памяти. FlashAttention показывает, как тайлинг сокращает перемещение данных вне кристалла и повышает эффективную арифметическую интенсивность, сдвигая ограниченное памятью внимание к насыщению вычислений.
Оптимизация отдельных операций необходима, но недостаточна. Идеально настроенное матричное умножение не даст ничего, если ускоритель простаивает в ожидании следующего батча данных. Изолированные стоимости операций — FLOP плотного матричного умножения, активации, ограниченные памятью, и выделение под состояние оптимизатора — складываются внутри цикла исполнения. Устойчивая пропускная способность требует организовать эти дискретные операции в сбалансированный конвейер, где подача данных на входе и обновление параметров на выходе не дают ускорителю голодать.
Архитектура конвейера
Шаг обучения — это не одна операция, а последовательность зависимых этапов: данные нужно загрузить до начала вычислений, прямые проходы должны завершиться до начала обратных, а градиенты должны вычислиться до обновления параметров. Скорость самого медленного этапа определяет скорость всей системы. Без конвейеризации эти этапы выполняются последовательно, и ускоритель простаивает, пока хост готовит данные или передает батчи по шине.
Пока графы исполнения моделей («Фреймворки машинного обучения») управляют арифметикой на ускорителе, устойчивое обучение требует подавать эти ядра через границы физических машин. Хост-CPU загружают сырые записи из хранилища и применяют предобработку в DRAM хоста, тогда как ускорители выполняют матричные умножения в HBM. Данные должны пересекать межсоединение — обычно линию PCIe, пропускная способность которой на порядок ниже пропускной способности памяти устройства. Когда подготовка данных на входе или передача по шине превышает длительность прямого и обратного проходов, вычислительные движки ускорителя голодают, снижая коэффициент загрузки аппаратуры в железном законе производительности обучения.
Управление этими физическими границами делит систему обучения на три взаимосвязанные подсистемы, каждая из которых предъявляет свои требования к аппаратным ресурсам. Конвейер данных выполняет загрузку, преобразование и батчинг на хосте; цикл обучения координирует прямые проходы, обратные проходы и обновления параметров на ускорителе; а конвейер оценки периодически проверяет качество модели на отложенных данных. «Обзор системы обучения» показывает, как эти подсистемы взаимодействуют на протяжении жизненного цикла обучения. Интерфейсы между ними образуют критические границы синхронизации, где задержки ввода-вывода, передачи по межсоединению или синхронные паузы валидации могут сдерживать загрузку ускорителя.
Обзор системы обучения: жизненный цикл обучения координирует подготовку данных, основное прямое и обратное вычисление и оценку на валидации. Интерфейсы между этими тремя конвейерами являются критическими границами синхронизации, где задержки ввода-вывода или паузы оценки могут сдерживать загрузку ускорителя.
Архитектурный обзор
Сквозная система обучения координирует три различные подсистемы: конвейер данных на стороне хоста, который готовит входные батчи, цикл исполнения на ускорителе, который выполняет математический шаг оптимизации, и периодический конвейер оценки, который отслеживает качество модели на валидационных данных. Эти подсистемы исполняются в разных аппаратных областях. Конвейер данных потребляет ядра CPU хоста и пропускную способность хранилища; цикл исполнения занимает вычислительные ядра ускорителя и память устройства; а оценка периодически вытесняет обучение, чтобы проверить обобщающую способность. Любой дисбаланс задержек между этими компонентами напрямую превращается в простаивающие такты ускорителя.
На границе ввода конвейер данных переносит сырые записи из постоянного хранилища в память хоста, применяет преобразования вроде аугментации и нормализации (LeCun et al., 2012) и упаковывает тензоры в плотные батчи. Эти батчи передаются по межсоединению хост–ускоритель (например, PCIe) в память ускорителя. На границе валидации конвейер оценки периодически пропускает отложенные данные через модель без вычисления градиентов. Поскольку валидация занимает те же ядра ускорителя, что нужны для обучения, частота ее запуска представляет прямой компромисс между разрешением мониторинга и общей пропускной способностью обучения.
Внутри ускорителя итерация обучения образует замкнутую петлю обратной связи, управляемую жесткими зависимостями по данным и памяти. Циклический путь данных на «Итеративном цикле обучения» отображает эти последовательные операции: прямой проход, вычисление градиентов через обратное распространение ошибки и обновление параметров.
Итеративный цикл обучения: каждая итерация последовательно выполняет прямое предсказание, вычисление градиентов обратным распространением ошибки и обновление оптимизатора. Обновленные параметры возвращаются в следующий прямой проход, а следующий батч остается отдельным входом. Зависимости по данным и резидентность памяти задают минимальное время шага и нижнюю границу памяти.
Хотя «Математические основы» формализует численные операторы этого цикла, физическое исполнение на аппаратуре определяют резидентность памяти и зависимости по данным. Во время прямого прохода промежуточные тензоры активаций должны оставаться в HBM ускорителя, потому что обратный проход требует их для вычисления производных по правилу цепочки. Когда градиенты вычислены, оптимизатор читает и параметры, и накопленные градиенты, чтобы применить правило обновления, и порождает новые веса для следующей итерации. Емкость памяти, необходимая для хранения активаций, весов и состояний оптимизатора, задает нижнюю границу памяти для всего шага обучения.
Этот цикл исполнения повторяется по батчам и эпохам, пока оптимизация не сойдется. Максимизация арифметической эффективности ускорителя требует перекрывать эти этапы конвейера на всей иерархии системы. Потоки CPU хоста заранее загружают и готовят батч в закрепленную память, пока ускоритель выполняет батч , скрывая задержку хранилища и время передачи по PCIe за вычислениями матричного умножения. Когда эта конкурентность нарушается — будь то конвейер данных, ограниченный вводом-выводом, который лишает устройство входных тензоров, или частая оценка, останавливающая цикл обновления, — ускоритель простаивает и эффективная пропускная способность падает.
Конвейер данных
Чтобы арифметические блоки ускорителя оставались загруженными, обучающие примеры нужно потоково передавать из постоянного хранилища в память устройства со скоростью не ниже скорости потребления модели. Пока восходящая инженерия данных («Инженерия данных») готовит и разбивает наборы данных на носителях хранения, конвейер данных времени исполнения работает одновременно с вычислениями модели на CPU хоста.
Конвейер данных связывает сырое хранилище и исполнение на ускорителе через границу машины. «Поток данных от CPU к GPU» иллюстрирует это перемещение через три физические зоны.
Поток данных от CPU к GPU: обучающие данные проходят через зоны хранилища, предобработки на CPU и исполнения на GPU. Каждый этап — потенциальный ограничитель пропускной способности: скорость чтения с диска, задержка преобразований и передачи с хоста на устройство по PCIe должны вместе поддерживать скорость потребления GPU, чтобы ускорители работали на пиковой загрузке.
В зоне хранилища сырые записи находятся на локальных дисках NVMe или в сетевых системах хранения. В зоне предобработки на CPU рабочие потоки хоста декодируют сырые байты, применяют преобразования вроде токенизации или аугментации данных и собирают отдельные записи в плотные тензоры мини-батчей. В зоне обучения на GPU ускорители передают эти тензоры по шине PCIe и выполняют прямой и обратный проходы. Поскольку три зоны образуют строгий конвейер, самый медленный этап определяет сквозную пропускную способность обучения.
Основные компоненты
Пропускная способность конвейера данных начинается с подсистемы хранения. Решения о размещении данных на предыдущих этапах из «Инженерии данных», например последовательное разбиение на части в колоночных или контейнерных форматах (Parquet, TFRecord, Arrow), определяют физические паттерны ввода-вывода, которые получает операционная система.
Пропускная способность хранения ограничена более медленным из двух аппаратных ограничений, что выражается в формуле «пропускная способность хранения»:
Здесь — физическая пропускная способность диска, а — пропускная способность сети для распределенных систем хранения. На практике обучающие нагрузки редко достигают этого теоретического максимума, потому что перемешивание данных может превращать большие последовательные чтения в более мелкие и менее эффективные обращения. Эффективную пропускную способность хранения можно моделировать как , где зависит от размера записи, раскладки файлов, кэширования и аппаратуры хранения. Когда небуферизованные случайные чтения снижают , пропускная способность хранения падает на порядок, превращая систему ввода-вывода, которая на бумаге выглядит достаточной, в главное узкое место обучения.
Предобработка
После извлечения из хранилища сырые байты нужно преобразовать CPU в тензоры, готовые для модели. Статическое извлечение признаков может выполняться офлайн («Инженерия данных»), а динамические преобразования, такие как токенизация на лету и аугментация изображений, выполняются во время обучения. В идеальной модели независимых рабочих пропускная способность предобработки растет с числом рабочих, как выражено в формуле «пропускная способность предобработки»:
Здесь параллельных потоков обработки выполняют преобразования, каждое из которых требует секунд. Архитектуры обучения используют несколько рабочих, чтобы предобработка поспевала за скоростью потребления ускорителя: один поток, выполняющий аугментацию изображений за 30 мс на батч, не может питать ускоритель, который выполняет прямой проход за 10 мс.
Предобработанные данные затем должны передаться на ускоритель, прежде чем начнутся вычисления. Общая пропускная способность обучения поэтому ограничена самым медленным из трех этапов, что явно показывает «Узкое место обучения»:
Здесь — входные байты на батч, а — работа прямого и обратного прохода на батч в FLOP. Все члены поэтому выражаются в батчах в секунду до взятия минимума.
Конвейер данных языковой модели GPT-2
Сценарий: количественная оценка доступа к хранилищу, токенизации на CPU и передач с хоста на устройство по PCIe, которые снабжают кластер из 32 GPU V100, обучающий GPT-2.
Трассировка этапов:
- Хранение сырого текста: корпус WebText содержит примерно 40 ГБ сырого текста. Последовательное чтение с NVMe SSD достигает 7 ГБ/с. При выборке документов с коэффициентом доступа 0,1 пропускная способность случайного доступа падает до 0,70 ГБ/с, что дает .
- Токенизация: BPE-токенизатор (словарь из 50 257 токенов) превращает текст в идентификаторы токенов. При размере батча и длине последовательности (всего 32,8 тыс. токенов) одно CPU-ядро, обрабатывающее 500 тыс. токенов в секунду, тратит 65,5 мс на батч.
- Батчинг и паддинг: паддинг и упаковка формируют тензор типа int64 формы 32 последовательности 1 024 токена, то есть 262,1 КБ на батч.
- Передача по PCIe: перенос тензора по шине PCIe Gen3 x16 (пропускная способность 15,75 ГБ/с) занимает 0,017 мс, поэтому передача по шине пренебрежимо мала.
Системный вывод: подготовка на одном ядре CPU ( 65,6 мс) занимает большую часть бюджета шага ускорителя ( 84,4 мс), так что последовательный конвейер платит обе стоимости на каждом шаге, и падает примерно до 56 процентов. Если подготовка станет хоть немного медленнее, ускоритель начнет полностью простаивать. Масштабирование до 8 параллельных рабочих процессов снижает задержку токенизации до 8,2 мс, а предвыборка перекрывает с , восстанавливая загрузку аппаратуры до 95 процентов и давая 379 глобальных образцов в секунду на 32 GPU V100.
Это соотношение «минимума из трех» определяет проектирование конвейера обучения, потому что пропускная способность системы равна пропускной способности узкого места. Ускоритель с вычислительной мощностью 312 TFLOP/s не выполняет полезной работы, пока ждет данных. И наоборот, идеально оптимизированный конвейер данных не дает выигрыша, если ускоритель уже насыщен вычислениями. Сбалансированный проект конвейера согласует мощность предобработки, пропускную способность передачи и пропускную способность вычислений так, чтобы ни один этап не доминировал во времени итерации. Пример GPT-2 показывает, что токенизация на CPU, а не получение из хранилища или передача по шине, формирует главный барьер пропускной способности, пока параллельные рабочие и предвыборка не скрывают задержку подготовки на хосте.
Пропускная способность конвейера данных — не единственный поток, который может заморить ускоритель голодом. Обучение на нескольких GPU добавляет второй поток трафика: синхронизацию градиентов, необходимую после каждого шага. Как только время синхронизации превышает время вычислений, коммуникация становится ограничивающим фактором. «Масштабирование за пределы одного узла» количественно описывает эту сетевую стену в точке, где обучение выходит за границу узла.
Системные следствия
Конвейер данных и вычислительный движок образуют связанную систему, пропускная способность которой равна пропускной способности более медленного из них, как задает «системная пропускная способность»:
Когда , ускоритель простаивает в ожидании данных, и загрузка ускорителя падает пропорционально, как показывает «загрузка GPU»:
Модель ResNet-50 на современной аппаратуре ускорителя может обрабатывать 1 000 изображений в секунду, но если конвейер данных подает всего 200 изображений в секунду, загрузка ускорителя падает до 20 процентов: ускоритель простаивает 80 процентов времени. Переход на более быстрое железо здесь не помогает: ускоритель, способный на 2 000 изображений в секунду, при том же конвейере дал бы загрузку всего 10 процентов. Сбалансированный проект системы стремится обеспечить ускоритель данными, а не заставлять его ждать более раннего этапа.
Потоки данных
Обучающие данные проходят три уровня памяти на пути от диска к ускорителю, и разрыв пропускной способности между этими уровнями, достигающий трех порядков величины, — центральная задача проектирования конвейера данных. Эффективная скорость передачи через иерархию ограничена ее самым медленным звеном, как показывает «пропускная способность иерархии памяти»:
Пропускная способность растет по иерархии: от хранилища к DRAM и затем к HBM.
Локальное хранилище NVMe дает 7 ГБ/с, системная память — 50 ГБ/с, а HBM ускорителя — 900 ГБ/с или больше. Каждый уровень примерно на порядок быстрее нижележащего, поэтому данные, которые свободно текут внутри памяти ускорителя, создают жесткое узкое место, когда их нужно получить с диска. Эта каскадная иерархия пропускной способности объясняет, почему время итерации хорошо конвейеризованной системы определяется максимумом ее компонентных задержек, а не их суммой, как показывает «время итерации»:
Когда этапы конвейера перекрываются правильно (выборка следующего батча из хранилища во время предобработки текущего и передача предыдущего ускорителю), время итерации равно длительности самого медленного этапа, а не сумме всех этапов. Именно это перекрытие и обеспечивает предвыборка: она превращает последовательное узкое место в параллельный конвейер, где каждый уровень работает одновременно над разными батчами.
Практические архитектуры
Устройство NVMe с номинальной скоростью 7 ГБ/с обеспечит 3,50 ГБ/с, если нагрузка достигает половины пика. Мелкие случайные чтения и перемешивание могут снизить пропускную способность еще сильнее; штраф зависит от размера обращения, глубины очереди, раскладки файлов и кэширования.
Чтобы ускорители оставались питаемыми несмотря на это снижение пропускной способности, архитектуры конвейера одновременно держат несколько буферов данных: буферы предвыборки, которые загружают будущие батчи, буферы обработки, где данные преобразуются, и буферы передачи, которые подготавливают данные для потребления ускорителем. Общая память хоста растет пропорционально объему памяти на батч в соответствии с «памятью буферов»:
Чтобы не дать ускорителю голодать, среднее время обслуживания предобработки на батч должно удовлетворять «условию конвейера»:
Если предобработка занимает 40 мс на батч на одном рабочем, а ускоритель потребляет по одному батчу каждые 10 мс, при идеальном масштабировании нужно не менее четырех рабочих. Реальные требования зависят от хранилища, конкуренции за CPU и стоимости преобразований; «Предвыборка данных и перекрытие» рассматривает предвыборку и параллельных рабочих.
Прямой проход
Подготовленные батчи входят в цикл обучения через прямой проход, где входные данные распространяются через модель, чтобы получить предсказания. Концептуальный поток следует послойному преобразованию , но физическая реализация должна планировать вычислительные ядра, пропускать активации через иерархию памяти и сохранять промежуточные тензоры для обратного распространения ошибки.
Вычислительные операции
Прямой проход отображает слои нейронной сети на ядра матричного умножения, разобранные в «Матричных операциях». Для каждого плотного слоя ускоритель выполняет операций умножения с накоплением. Например, слой размером , обрабатывающий батч из 64 образцов, выполняет примерно 33,6 млн операций умножения с накоплением (MAC), или примерно 67,1 MFLOP при соглашении о двух FLOP на одну операцию MAC.
Квантование волн и эффекты хвоста
Частая ошибка в ML-системах — игнорировать фиксированную гранулярность исполнения ядер GPU. Исполнение GPU квантуется в волны работы, но релевантная единица — отображение потоков или тайлов ядра, а не обязательно один образец на поток.
NVIDIA GPU выполняет работу варпами по 32 потока. В иллюстративном частном случае, когда один независимый элемент работы отображается на один поток, 32 элемента заполняют один варп, а 33 элемента требуют второго, почти пустого варпа. Ядра нейронных сетей обычно отображают каждый образец на много потоков, поэтому один лишь размер батча не определяет эту загрузку.
На крупном GPU, таком как NVIDIA H100 с 132 потоковыми мультипроцессорами (SM), где каждый SM планирует группы варпов, аппаратура обрабатывает тысячи потоков в одной волне. Если общая нагрузка немного превышает границу волны (например, 1,01 волны), аппаратура должна довести до конца вторую, почти пустую волну, прежде чем начнется следующая задача.
«Иллюстративная арифметика хвоста варпа» количественно оценивает эту иллюстрацию с одним элементом на поток. Это не общая модель производительности по размеру батча.
Независимые элементы работы Требуется варпов Загрузка полос Относительное время 32 1 100% 1× 33 2 51,6% ~2× 64 2 100% 1× 65 3 67,7% ~1,5× Иллюстративная арифметика хвоста варпа: при отображении «один элемент работы на поток» количество, чуть превышающее границу в 32 потока, запускает частично заполненный варп, поэтому 33 элемента используют два варпа, тогда как 64 заполняют те же два варпа. Реальные ядра обучения отображают тензоры на потоки и тайлы специфичными для реализации способами, часто назначая много потоков на каждый образец, поэтому эти значения нельзя вывести только из размера батча. Профилирование должно определить реальное отображение ядра и границы волн.
Системный вывод: выравнивайте размерности тензоров и тайлов с аппаратным отображением ядра, а затем проверяйте бенчмарком кандидатные размеры батча. Профилирование выявляет частично заполненные варпы и волны; один лишь размер батча этого не покажет.
Помимо плотного матричного умножения, разные архитектуры нейронных сетей вводят специализированные вычислительные паттерны. Сверточные сети, например, скользят пространственными фильтрами по многоканальным входным тензорам. Рассмотрим входной тензор размерности (размер батча высота ширина каналы), обрабатываемый ядрами . Каждая позиция требует 147 операций умножения с накоплением, а при 64 фильтрах, работающих по пространственным размерностям , вычислительная работа масштабируется до миллионов операций умножения с накоплением на изображение. Ускорители выполняют эти пространственные свертки либо приводя их к плотным GEMM через развертывание столбцов (im2col), либо применяя минимальную фильтрацию Винограда, которая обменивает трафик внешней памяти на хранение в scratchpad.
Архитектуры трансформеров вводят механизмы внимания («Архитектуры нейронных сетей»), которые вычисляют оценки сходства по последовательностям. Внимание сочетает пакетные матричные умножения ( и ) с построчными редукциями. Поскольку промежуточные матрицы оценок внимания растут квадратично с длиной последовательности, материализация этих активаций в глобальной памяти создает узкое место пропускной способности, если ядра не сливают матричные умножения и нормализацию внутри SRAM на кристалле.
Во всех этих сетях поэлементные операции имеют низкую арифметическую интенсивность. Отдельные реализации функций активации, таких как ReLU и sigmoid, преобразуют элементы тензора независимо, и потому их ограничивает пропускная способность памяти, а не производительность вычислений («Арифметическая интенсивность»). Пакетная нормализация усиливает этот трафик памяти, вычисляя статистики по батчу и пространственным измерениям, что требует глобальных барьеров синхронизации и нескольких проходов чтения и записи по памяти активаций.
Ускорители выполняют эти параллельные нагрузки, группируя потоки исполнения в единицы фиксированного размера: варпы19 по 32 потока на архитектурах NVIDIA или волновые фронты (wavefronts) по 64 потока на архитектурах AMD. Эффективность исполнения на аппаратуре зависит от согласования размерностей тензоров и форм тайлов с геометрией блоков потоков и размерностями операндных матриц, которых требуют специализированные блоки вроде тензорных ядер.
Оптимизированные библиотеки операторов, такие как cuDNN (Chetlur et al., 2014), реализуют несколько вычислительных алгоритмов для каждого типа слоя и динамически выбирают между ними по размерностям тензоров, ограничениям памяти scratchpad и возможностям аппаратуры. Например, cuDNN выбирает между прямой сверткой, приведением к GEMM, сверткой через быстрое преобразование Фурье (FFT) и преобразованиями Винограда, оценивая компромисс между накладными расходами рабочей памяти и арифметическими операциями (NVIDIA Corporation, 2023). Эти паттерны загрузки аппаратуры усиливают связь между размером батча и эффективностью аппаратуры, установленную в разделе «Методы оптимизации на основе градиента»: большие размеры батча насыщают вычислительные блоки ускорителя и амортизируют передачи памяти, но увеличивают хранение промежуточных активаций.
Управление памятью
Управление памятью проявляется в прямом проходе, когда промежуточные активации должны сохраняться в высокоскоростной памяти для вычисления градиентов при обратном распространении ошибки. Чтобы понять, как емкость памяти ограничивает обучение, рассмотрим занимаемую память при обучении модели на 7 млрд параметров на ускорителе с 24 ГБ с учетом весов, градиентов, состояния оптимизатора и сохраненных активаций.
Оценка требований к VRAM
Задача: поместится ли модель на 7 млрд параметров в GPU на 24 ГБ для обучения?
Дано: 7 млрд параметров, веса и градиенты FP16, мастер-веса FP32 и состояния Adam, а также 24 ГБ памяти GPU.
Расчет:
- Веса (FP16): 7 млрд 2 байта = 14 ГБ.
- Градиенты (FP16): тот же размер, что и веса = 14 ГБ.
- Состояние обучения FP32: мастер-веса требуют 28 ГБ; моменты Adam (импульс и дисперсия) требуют еще 56 ГБ.
- Промежуточный итог (до активаций): 14 ГБ + 14 ГБ + 28 ГБ + 56 ГБ = 112 ГБ, что уже превышает GPU на 24 ГБ.
- Активации: упрощенная оценка для трансформера — размер батча длина последовательности скрытая размерность число слоев байты коэффициент активаций для сохраненных промежуточных результатов внимания, многослойного перцептрона и нормализации. При размере батча 1, длине последовательности 2048, скрытой размерности 4096, 32 слоях и коэффициенте (множителе) активаций около 57 сохраненные активации добавляют 30,6 ГБ.
Системный вывод: обучение с полным набором параметров требует разбиения или выгрузки состояния через такие системы, как полностью шардированный параллелизм данных (FSDP) или ZeRO. Квантованные базовые веса снижают память для дообучения с эффективным использованием параметров, но не воспроизводят этот рецепт обучения полными параметрами в смешанной точности.
Только память активаций растет примерно линейно с размером батча («память активаций на батч»); параметры модели и состояние оптимизатора остаются фиксированными. Практическая сложность в том, как эти затраты взаимодействуют между слоями.
Рассмотрим ResNet-50, обрабатывающую изображения разрешением 224 224 при размере батча 32. Первый сверточный слой выдает карты активаций размером 112 112 64; на одно изображение при одинарной точности (4 байта) это требует примерно 3,2 МБ. По 50 слоям промежуточная память активаций накапливается: полные активации прямого прохода в сумме составляют примерно 8 ГБ, обратный проход добавляет еще 4 ГБ рабочего набора активаций (эмпирическая рабочая память, отличная от хранимых градиентов параметров), а параметры модели занимают 102,4 МБ. Этот итог в 12,1 ГБ составляет около 15,1 процента емкости памяти GPU A100 объемом 80 ГБ для одного батча.
Удвоение размера батча до 64 удваивает хранение активаций: активации прямого прохода достигают 16 ГБ, рабочий набор активаций обратного прохода — 8 ГБ, а полная память — 24,1 ГБ. В моделях зрения с большим пространственным разрешением активации доминируют в занимаемой памяти, а хранение параметров (102,4 МБ) пренебрежимо мало. Для больших языковых моделей баланс меняется на противоположный: GPT-3 (175 млрд параметров) требует примерно 700 ГБ только для параметров в FP32 (350 ГБ в FP16), что превышает емкость одного ускорителя еще до выделения памяти под активации или состояние оптимизатора.
Поскольку память ускорителя (40–80 ГБ на современной аппаратуре) должна одновременно хранить активации, параметры, градиенты и состояния оптимизатора, емкость памяти, а не вычислительная пропускная способность, часто ограничивает допустимый размер батча. Две системные техники снимают это узкое место емкости: контрольные точки активаций отбрасывают промежуточные активации во время прямого прохода и пересчитывают их во время обратного, обменивая избыточную арифметику на меньший объем хранения; смешанная точность обучения вдвое сокращает трафик памяти и хранение на значение, переходя к 16-битным форматам с плавающей точкой. Обе техники подробно разобраны в разделе «Оптимизации конвейера».
Во время обратного распространения ошибки («Механика обратного распространения ошибки») обратный проход обходит сеть в обратном порядке, потребляя сохраненные прямые активации, чтобы вычислить градиенты параметров и активаций примерно вдвое большей арифметической стоимостью, чем у прямого прохода. Требования к памяти меняются по слоям динамически. В ResNet-50 промежуточные слои расширяются до 256 фильтров с исходных 64, где уменьшенные пространственные размеры карт частично компенсируют большую глубину каналов. По 50 слоям рабочий набор активаций обратного прохода достигает примерно 3,2 ГБ до учета градиентов параметров и состояния оптимизатора. Пиковый объем памяти отражает сохраненные прямые активации, активные буферы градиентов, временные рабочие области и расписание выделения памяти во время исполнения, а не только ширину одного слоя.
Обновление параметров и оптимизаторы
Когда обратный проход заполняет буферы градиентов, система выполняет шаг оптимизатора, чтобы обновить параметры модели. Выбор оптимизатора определяет и математическую траекторию к минимуму функции потерь, и аппаратные ресурсы, которые требует каждая итерация. В стандартных фреймворках глубокого обучения эта фаза связывает вычисление градиентов с обновлением параметров («Обновление параметров»): loss.backward() обходит вычислительный граф в обратном порядке, заполняя тензоры градиентов, а optimizer.step() применяет правило обновления ко всем зарегистрированным параметрам.
Обновление параметров: вычисляет градиенты и применяет шаг оптимизатора к параметрам модели. Повторение этого цикла стремится минимизировать целевую функцию обучения, хотя улучшение не гарантировано на каждом шаге или эпохе.
loss.backward() # Вычисляем градиенты
optimizer.step() # Обновляем параметры
Хотя optimizer.step() выглядит как один вызов фреймворка, он запускает нагрузку, ограниченную памятью, по всей памяти ускорителя. В отличие от прямого и обратного проходов, где GEMM дают высокую арифметическую интенсивность за счет многократного повторного использования тайлованных данных в регистрах и разделяемой памяти, шаг оптимизатора состоит из низкоинтенсивной поэлементной арифметики. Для каждого параметра ускоритель должен передать веса, градиенты и вспомогательные состояния оптимизатора из HBM в регистры на кристалле, вычислить правило обновления и записать изменившиеся значения обратно в HBM. Поскольку каждый переданный байт участвует лишь в нескольких операциях с плавающей точкой, арифметическая интенсивность остается заметно ниже одного FLOP на байт, и время исполнения определяется пропускной способностью памяти, а не вычислительной пропускной способностью.
Память оптимизатора в цикле обучения
Это узкое место пропускной способности памяти усиливается требованиями к вспомогательному состоянию, количественно оцененными в «Занимаемой памяти оптимизатора». Стохастический градиентный спуск не требует постоянного состояния помимо весов и градиентов, тогда как адаптивные оптимизаторы требуют значительного вспомогательного хранения. Для Adam поддержание скользящих оценок первого момента (импульса) и второго момента (нецентрированной дисперсии) требует двух дополнительных тензоров состояния FP32 на каждый параметр. При каждом обновлении ускоритель должен читать и записывать эти буферы состояния по шине памяти, что умножает трафик памяти и занимает емкость, которая иначе могла бы вместить батчи большего размера или более длинные последовательности.
На масштабе миллиардов параметров состояние оптимизатора доминирует в бюджете памяти. Как количественно показано в разборе GPT-2 («Системные следствия выбора оптимизатора»), модели на 1,5 млрд параметров требуется 12 ГБ только для состояния оптимизатора Adam в FP32, помимо параметров и градиентов, до учета активаций. Эта задача мотивировала экономные по памяти варианты оптимизаторов: Adafactor факторизует состояние второго момента (Shazeer and Stern, 2018), 8-битные оптимизаторы квантуют статистики оптимизатора (Dettmers et al., 2022), а GaLore вычисляет обновления в низкоранговом пространстве (Zhao et al., 2024). «Иллюстративная разбивка занимаемой памяти» сравнивает выделение памяти для модели на 7 млрд параметров в четырех конфигурациях оптимизатора и показывает, как низкоранговая проекция сокращает состояние оптимизатора до доли стандартного объема.
Иллюстративная разбивка занимаемой памяти: объем памяти модели LLaMA на 7 млрд параметров в четырех конфигурациях экономных оптимизаторов (Adam в BF16, Adafactor, 8-битный Adam и 8-битный GaLore), разложенный на веса, активации, состояние оптимизатора, градиенты весов и прочие компоненты. Пунктирная красная линия отмечает предел памяти RTX 4090 в 24 ГБ. Стандартный Adam в FP32 (на столбцах не показан; для этой модели он требует заметно больше 70 ГБ) не помещается на один GPU на 24 ГБ; столбцы сравнивают относительное сокращение памяти, но даже наименьший показанный итог остается выше линии 24 ГБ, а 8-битный GaLore сокращает состояние оптимизатора наиболее сильно.
BF16 Adam дальше всего выходит за пределы бюджета 24 ГБ одного ускорителя, тогда как Adafactor, 8-битный Adam и 8-битный GaLore постепенно сжимают вспомогательное состояние. Однако даже самая компактная конфигурация превышает 24 ГБ, что показывает: одного сжатия оптимизатора недостаточно, чтобы обойтись без управления активациями или разбиения модели при размещении больших моделей на фиксированных ускорителях.
Размер батча и обновления параметров
Увеличение размера батча повышает загрузку ускорителя, поднимая арифметическую интенсивность матричных умножений и снижая частоту синхронизации. Однако изменение размера батча меняет динамику оптимизации. Масштабирование батча без перенастройки расписания скорости обучения может ухудшить сходимость и создать разрыв оптимизации, при котором эффективность аппаратуры достигается ценой качества модели. «Иллюстративный сценарий линейного масштабирования» иллюстрирует этот компромисс: при фиксированной скорости обучения и росте батча снижение функции потерь замедляется, тогда как масштабирование скорости обучения восстанавливает сходимость.
Иллюстративный сценарий линейного масштабирования: синтетические кривые функции потерь обучения (условные единицы) сравнивают базовый батч 32 с батчем 256 при фиксированной или линейно масштабированной скорости обучения. Кривые иллюстрируют, почему увеличение размера батча может требовать перенастройки; они не являются измеренными трассами и не гарантируют, что линейное масштабирование сохраняет сходимость.
При фиксированном бюджете токенов удвоение глобального размера батча вдвое сокращает число обновлений параметров за эпоху. Чтобы пройти сопоставимое расстояние в пространстве параметров меньшим числом обновлений, правило линейного масштабирования пропорционально масштабирует скорость обучения вместе с размером батча (). Хотя оно эффективно в умеренном диапазоне размеров батча в сочетании с прогревом скорости обучения, линейное масштабирование не гарантирует эквивалентной сходимости или обобщения. За критическим размером батча шум градиента в основном устраняется, и дальнейшее расширение батча дает убывающую отдачу на каждый обучающий образец, а давление на память при этом продолжает расти.
Помимо динамики сходимости, размер батча определяет частоту коммуникации в распределенных системах. Больший глобальный батч уменьшает число шагов оптимизатора и синхронизаций градиентов за эпоху. Поскольку объем коммуникации при плотной синхронизации all-reduce зависит от числа параметров, а не от размера батча, большие батчи амортизируют задержку межсоединения на большем числе FLOP вычислений. В распределенных условиях локальный размер микробатча и глобальный размер батча совместно определяют максимальную степень параллелизма данных. Когда емкость памяти ограничивает локальный микробатч, накопление градиентов («Накопление градиентов и контрольные точки») отделяет эффективный размер батча от памяти активаций на устройстве, накапливая градиенты по нескольким проходам вперед и назад перед запуском шага оптимизатора.
Каждое архитектурное решение в обучении — размер батча, точность, управление памятью и частота синхронизации — в конечном счете нацелено на минимизацию календарного времени на дорогих парках ускорителей. На переднем крае масштаба это время напрямую выражается в деньгах. Затраты на вычисления становятся жестким физическим и экономическим ограничением, которое определяет закупку аппаратуры и размер кластера. Блок «Счет за вычисления» переводит эти расчеты пропускной способности в экономику аренды и покупки для языковой модели на 70 млрд параметров, обучаемой на кластере из 1 024 ускорителей.
Счет за вычисления
Задача: при следующих упрощенных допущениях дешевле арендовать или купить кластер из 1 024 H100 для одного прогона обучения Llama 2 на 70 млрд параметров?
Расчет:
- Нагрузка: модель Llama 2 70B (70 млрд параметров, 2 трлн токенов).
- Требуемые вычисления: FLOP. Ведущий множитель 6 следует из учета главы: примерно 2 FLOP на параметр на токен в прямом проходе (два FLOP на операцию умножения с накоплением), утроенные с учетом обратного прохода, который стоит примерно вдвое дороже прямого.
- Аппаратура: NVIDIA H100 (пик: 989 TFLOP/s FP16). Предполагаемая загрузка: 50 процентов (494,5 TFLOP/s).
- Время: с ≈ 53,8 года (на одном GPU).
- Кластер: на 1 024 GPU — 19,2 дня.
Экономика:
- Аренда ($3/ч): 1 024 GPU 24 ч 19,2 дня $3/ч ≈ $1,42 млн.
- Покупка ($30 000 за GPU): 1 024 GPU $30 000 = $30,7 млн.
Системный вывод: в этом упрощенном сценарии загрузки и цены стоимость покупки равна примерно 21,7 арендным прогонам. Реальное сравнение владения должно также учитывать сетевую инфраструктуру кластера, хост-системы, помещения, электропитание, персонал, амортизацию, финансирование и загрузку между прогонами.
Декомпозиция конвейера обучения раскрывает структурную механику загрузки данных, прямого исполнения, обратного распространения ошибки и обновления параметров, а «Математические основы» количественно описывают FLOP, объем памяти и пропускную способность, которые требует каждая фаза. Однако знание того, как исполняются этапы, не показывает, где останавливается конкретная нагрузка обучения. Конвейер не быстрее своего самого медленного этапа: если загрузка данных занимает 50 мс, а вычисления — 100 мс, ускорение вычислений на 20 процентов сэкономит 20 мс, но если узкое место сместится на прием данных, те же усилия по оптимизации не дадут выигрыша в календарном времени. Прежде чем применять методы оптимизации, инженеры систем должны профилировать временную шкалу исполнения, чтобы определить, какой ресурс ограничивает производительность: вычисления, пропускная способность памяти, ввод-вывод хранилища или синхронизация по сети.
Выявление узких мест
Знание архитектуры — это еще не диагноз. Знание того, что операции внимания потребляют 50 процентов FLOP, а загрузка данных занимает 25 процентов календарного времени, не показывает, какое ограничение атаковать первым; это зависит от того, какой ресурс реально насыщен во время исполнения.
Методика диагностики, которая превращает знание архитектуры в действенные решения по оптимизации, начинается с содержательной меры эффективности обучения. Сырые проценты загрузки ускорителя могут вводить в заблуждение, потому что ускоритель может оставаться активным, выполняя пересчет, паддинг или другую работу вне учета FLOP модели. Утилизация FLOP модели (MFU)20 дает такое сравнение.
Утилизация FLOP модели (MFU)
Утилизация FLOP модели (MFU) — метрика эффективности , где — полезное число FLOP модели на шаг (прямой плюс обратный проход, без учета пересчета), а — измеренное календарное время одного шага обучения; она выражает, какая доля пиковой пропускной способности аппаратуры идет на полезные вычисления модели.
- Значение: MFU делает конкретным член эффективной пропускной способности в железном законе. Для трансформера на 7 млрд параметров, обрабатывающего 1 024 токена за шаг на A100 (пик тензорных ядер 312 TFLOP/s FP16/BF16), шаг длительностью 1,2 с дает отношение FLOP модели к доступному бюджету пиковой скорости примерно 0,11 (11,5 процента). Остальные 88,5 процента не засчитываются как FLOP модели и могут отражать трафик памяти, коммуникацию, пузыри, немодельные операции или простой. Хорошо ли это значение, зависит от модели, аппаратуры, точности и стратегии распараллеливания; диагностика требует профиля, а не универсального порога.
- Отличие: загрузка аппаратуры показывает, активны ли вычислительные движки устройства, тогда как MFU засчитывает аналитическую оценку FLOP модели, используемую в числителе. Поэтому он может исключать пересчет и паддинг, даже когда эти операции занимают устройство. Сравнения между ускорителями по-прежнему зависят от выбранной спецификации пиковой пропускной способности и соглашения о подсчете FLOP.
- Типичная ошибка: частое заблуждение состоит в том, что MFU 100 процентов — реалистичная устойчивая цель. Трафик памяти, коммуникация и работа, не относящаяся к матричным операциям, держат сквозные прогоны ниже пика, но универсального потолка 55–65 процентов не существует. Сообщаемые значения зависят от модели, точности, формы батча, аппаратуры и определения MFU и могут улучшаться с FlashAttention и тщательной настройкой.
Узкие места обучения можно исследовать через три категории, согласованные с таксономией D·A·M (Данные, Алгоритм, Машина; полную диагностическую рамку, матрицу устранения неполадок и карточку D·A·M см. в приложении «Таксономия D·A·M»). «Таксономия D·A·M, примененная к узким местам обучения» связывает каждую ось с распространенным узким местом обучения, его наблюдаемыми симптомами и релевантными методами оптимизации. Это отправные точки диагностики, а не исключительные соответствия.
| Ось D·A·M | Узкое место | Симптомы | Основные решения |
|---|---|---|---|
| Алгоритм | Ограничено вычислениями | Высокая активность арифметических блоков; дополнительная пропускная способность не повышает производительность; ограничивает арифметическая пропускная способность | Пониженная точность, более эффективные алгоритмы, более быстрое вычислительное железо |
| Машина | Ограничено памятью | Высокое использование пропускной способности памяти относительно арифметики; ядра простаивают из-за перемещения данных | Слияние операторов, экономное по памяти внимание, форматы пониженной точности |
| Данные | Ограничено данными | Периодическая загрузка ускорителя падает почти до нуля; CPU полностью занят в паузах; конвейер не успевает подавать GPU | Предвыборка, перекрытие конвейера, более быстрое хранилище, параллелизм DataLoader |
Таксономия D·A·M, примененная к узким местам обучения: каждая строка связывает ось D·A·M с одним распространенным узким местом и его характерными симптомами. Профилирование выявляет ограничивающий фактор нагрузки и направляет практиков к подходящему методу оптимизации.
Среди этих трех режимов режим, ограниченный данными, чаще всего диагностируется неверно, потому что на ускорителе он проявляется как пустоты, а не как насыщенные вычислительные блоки. Когда прием, декодирование или предобработка на стороне хоста не могут поддерживать пропускную способность, которую требуют шины памяти устройства, ускоритель голодает.
GPU, заблокированный GIL
Сценарий: инженерная команда строит конвейер загрузки данных PyTorch на стандартном Python
threadingдля предобработки изображений, ограниченной CPU, которая удерживает глобальную блокировку интерпретатора (GIL).Диагностика: GIL сериализует эти потоки предобработки на уровне Python, поэтому время подготовки на хосте () сильно превышает время исполнения на GPU (), и загрузка аппаратуры падает до .
Системный урок: работа Python на CPU, которая удерживает GIL, может сериализовать потоки и заморить GPU голодом; нативные операции могут его освобождать. Рабочие процессы (
num_workers > 0) позволяют избежать сериализации интерпретатора, а NVIDIA DALI может переносить подходящую работу с хоста.
Инструменты профилирования показывают, какое узкое место доминирует в конкретной нагрузке. «Трасса профилировщика при ограничении данными» фиксирует патологию ограничения данными из врезки: белые промежутки между повторяющимися вычислительными блоками отмечают интервалы, в которых на временной шкале устройства не видно ядер GPU.
Трасса профилировщика при ограничении данными: на этой временной шкале изолированные вычислительные блоки GPU разделены заметными белыми промежутками. Эти простои отмечают периоды, когда потоки ускорителя останавливаются, ожидая подготовки батчей на CPU и передач с хоста на устройство, — характерный признак конвейера, ограниченного вводом.
Четыре инструмента, встроенные в фреймворки машинного обучения, дают подробный анализ узких мест. «Инструменты профилирования узких мест обучения» разделяет инструменты временной шкалы на уровне фреймворка и инструменты исполнения на уровне GPU, потому что каждый показывает свою сигнатуру сбоя.
| Инструмент | Охват | Лучший сигнал |
|---|---|---|
PyTorch Profiler (torch.profiler) | Трасса операций на уровне фреймворка | Время в каждой операции, паттерны выделения памяти и исполнение ядер GPU |
| TensorFlow Profiler | Временная шкала обучения на уровне фреймворка | Узкие места входного конвейера и размещение на устройствах |
| NVIDIA Nsight Systems | Трасса GPU на уровне системы | Исполнение ядер, передачи памяти и точки синхронизации |
| NVIDIA Nsight Compute | Анализ ядер GPU | Арифметическая интенсивность, пропускная способность памяти и заполненность |
Инструменты профилирования узких мест обучения: инструменты профилирования фреймворков показывают временные шкалы операций и простои входного конвейера, тогда как инструменты NVIDIA Nsight показывают исполнение GPU на уровне системы и поведение памяти на уровне ядер.
Дисциплинированный процесс профилирования идет сверху вниз: от временных шкал системы к счетчикам производительности ядер, сопоставляя наблюдаемые трассы профилировщика с таксономией D·A·M из «Таксономии D·A·M, примененной к узким местам обучения». Сначала визуализация временной шкалы выявляет голод по входным данным: простои между запусками ядер указывают, что подготовка на хосте или задержка передачи по PCIe лишает очереди устройства работы. Чтобы снять это ограничение, связанное с данными, нужны асинхронная предвыборка, многопроцессорные рабочие или перенос предобработки на ускоритель, чтобы перекрыть перемещение данных с вычислениями. Во-вторых, когда ядра исполняются подряд без простоев, вызванных хостом, пропускная способность памяти относительно пика различает исполнение, ограниченное памятью, и исполнение, ограниченное вычислениями. Если трафик HBM насыщен, а арифметические блоки простаивают, нагрузка ограничена памятью; слияние операторов и экономное по памяти внимание снимают это ограничение, сохраняя промежуточные тензоры в SRAM на кристалле, а не записывая их обратно в глобальную память. Наконец, если тензорные ядра работают близко к теоретической мощности, а шины памяти имеют запас пропускной способности, нагрузка ограничена вычислениями, и рост производительности требует более низкой численной точности, такой как BF16 или FP8, чтобы повысить пиковую арифметическую пропускную способность.
Оптимизации конвейера
Трассы профилирования определяют, какой ресурс насыщается во время исполнения, а таксономия D·A·M (приложение «Таксономия D·A·M») выделяет физическое ограничение, которым определяется ситуация: перемещение данных, арифметическая пропускная способность или емкость памяти. Чтобы сократить разрыв между реальной и теоретической пропускной способностью, нужно сопоставить целевые системные вмешательства каждому выявленному режиму сбоя.
Даже хорошо спроектированные архитектуры конвейера редко достигают пиковой пропускной способности аппаратуры без целевой оптимизации. Чтобы показать масштаб разрыва, применение утилизации FLOP модели в 30–50 процентов к пику A100 в 312 TFLOP/s дает 93,6–156 TFLOP/s пропускной способности FLOP модели. Это производные сценарные значения, а не измерения, сообщенные для одной нагрузки на A100. Опубликованные системы крупных моделей сообщают о похожих разрывах между пиковой и реализованной пропускной способностью (Narayanan et al., 2021; Chowdhery et al., 2022). Системы вроде SuperNeurons показывают одну версию этой проблемы: узкие места управления памятью могут не давать крупным сетям эффективно обучаться, если среда исполнения активно не оптимизирует хранение и передачу активаций (Wang et al., 2018). «Дорожная карта методов оптимизации» расширяет классификацию узких мест на основе D·A·M из «Таксономии D·A·M, примененной к узким местам обучения», сопоставляя каждое узкое место конкретному методу оптимизации, который его решает.
| Узкое место | Основное решение |
|---|---|
| Задержка перемещения данных | Предвыборка и перекрытие конвейера |
| Пропускная способность вычислений | Обучение в смешанной точности |
| Емкость памяти | Накопление градиентов и контрольные точки активаций |
| Пропускная способность памяти (внимание) | FlashAttention (тайлинг с учетом ввода-вывода) |
Дорожная карта методов оптимизации: каждая основная категория узких мест имеет целевые решения, которые устраняют конкретные ограничения производительности; методы сопоставлены с результатами профилирования для систематической оптимизации.
Хотя ограничивающий фактор меняется с масштабом системы — модель на 100 ГБ сталкивается с ограничениями емкости и межсоединения, которые никогда не связывают модель на 1 ГБ, — выявление и смягчение каждого узкого места следует последовательным физическим принципам. Задержка перемещения данных возникает, когда ввод-вывод хранилища на хосте и передачи по PCIe не могут подготавливать батчи достаточно быстро, чтобы держать вычислительные блоки ускорителя насыщенными. Вычислительная пропускная способность падает ниже пиковых аппаратных значений, когда операции выполняются в FP32 вместо использования более низкоточных тензорных ядер или когда неслитые ядра многократно передают промежуточные активации по шине памяти. Ограничения емкости памяти связывают исполнение, потому что HBM ускорителя должна одновременно хранить параметры модели, состояния оптимизатора, градиенты и прямые активации. Исчерпание этой памяти ограничивает и глубину модели, и размер батча на устройство.
Поскольку системные ресурсы тесно связаны, облегчение одного ограничения часто выявляет другое, что иллюстрирует эвристику сохранения сложности, введенную ранее в этой книге. Например, устранение простоев ввода-вывода на хосте агрессивной предвыборкой батчей расходует дополнительную память ускорителя на очереди входных данных. И наоборот, уменьшение размера батча на устройство, чтобы уложиться в лимиты HBM, снижает арифметическую интенсивность матричных умножений и переводит исполнение из матричной математики, ограниченной вычислениями, в простои из-за пропускной способности памяти. Рассмотрим типичный профиль GPT-2, где внимание занимает 50 процентов времени шага, загрузка данных — 25 процентов, а остальные операции, ограниченные вычислениями, — 25 процентов. Эта разбивка задает порядок оптимизации: тайлинг внимания с учетом ввода-вывода (FlashAttention) нацелен на доминирующее узкое место пропускной способности памяти во внимании, асинхронная предвыборка скрывает прием данных за вычислениями, а смешанная точность ускоряет тензорные операции, вдвое сокращая объем активаций. Задача оптимизации — по профилям исполнения определить ограничивающее узкое место и применить целевые вмешательства, не создав более серьезного ограничения в другом месте.
Систематическая рамка оптимизации
Поскольку вычислительные движки ускорителя, подсистемы памяти и межсоединения хоста работают в условиях жесткой физической связи, оптимизация без эмпирической телеметрии рискует сдвинуть критический путь или растратить инженерные усилия на ресурсы, которые не являются ограничивающими. Принципиальная системная методология следует трем связанным этапам: профилирование, чтобы выявить ограничивающее физическое ограничение, выбор механизмов, специально спроектированных под этот предел ресурса, и композиция вмешательств так, чтобы вторичные потребности в ресурсах не сталкивались друг с другом.
На этапе профилирования используются инструменты инструментирования, такие как PyTorch Profiler, TensorFlow Profiler или NVIDIA Nsight Systems, которые записывают временные метки и аппаратные счетчики на каждой итерации. Трассы фиксируют время исполнения ядер на блоках ускорителя, прямой доступ к памяти (DMA) при передачах по шинам PCIe или NVLink и планирование потоков CPU хоста. Измерение затраченного времени выделяет подсистему, которая определяет критический путь. Например, трасса, показывающая, что 40 процентов времени шага уходит на загрузку данных, 35 процентов — на вычисления и 25 процентов — на операции с памятью, диагностирует голод данных на стороне хоста как главное ограничение. В таких условиях ускорение ядер матричного умножения дает пренебрежимо малый выигрыш в календарном времени, пока не решена проблема подачи данных.
На этапе выбора выявленное узкое место сопоставляется с архитектурным механизмом, нацеленным на это физическое ограничение. Когда профилирование показывает исполнение, ограниченное вводом, где ускоритель простаивает в ожидании батчей, асинхронная предвыборка и двойная буферизация через PCIe перекрывают прием данных на хосте с вычислениями на устройстве. Когда время ядер ограничено пропускной способностью памяти и определяется обращениями к HBM, а не арифметикой, слияние операторов и алгоритмы тайлинга, такие как FlashAttention, размещают промежуточные активации в SRAM на кристалле. Когда емкость памяти ограничивает модель, контрольные точки активаций отбрасывают активации во время обратного прохода и пересчитывают их, либо накопление градиентов делит батчи на несколько последовательных подшагов, чтобы ограничить пиковое выделение. Наконец, когда потоковые мультипроцессоры насыщаются плотной матричной математикой, форматы чисел пониженной точности (такие как FP16 или BF16) используют специализированные тензорные ядра, чтобы удвоить вычислительную пропускную способность, одновременно вдвое сократив трафик памяти.
На этапе композиции оценивается, как несколько вмешательств взаимодействуют на общих аппаратных ресурсах. Поскольку системные ресурсы тесно связаны, оптимизация, которая снимает одно узкое место, часто создает потребности в другом месте. Асинхронная предвыборка скрывает задержку перемещения данных за вычислениями, но поддержание очередей батчей с двойной буферизацией расходует закрепленную память хоста и HBM устройства. Напротив, синергетические сочетания усиливают друг друга: сочетание смешанной точности на 16 бит с контрольными точками активаций сокращает использование памяти настолько, что допускает больший размер батча на устройство и возвращает высокую арифметическую интенсивность недозагруженным тензорным ядрам. Успешная композиция поэтому требует проверить, что накладные расходы вторичных ресурсов не порождают новое ограничивающее условие.
«Блок-схема выбора оптимизации обучения» превращает эту рамку в структурированное дерево решений. Ветви сопоставляют сигналы профилирования с кандидатными вмешательствами напрямую, гарантируя, что инженерные усилия направлены на ограничивающее физическое узкое место, а не на побочные накладные расходы.
Блок-схема выбора оптимизации обучения: эвристический путь от сигналов профилирования к кандидатным оптимизациям. Начните с загрузки ускорителя, затем отличите давление памяти от насыщения вычислений, прежде чем выбирать вмешательство. Пороги 70 процентов загрузки и 90 процентов памяти — иллюстративные значения для первичной оценки, а не универсальные определения исполнения, ограниченного данными, памятью или вычислениями.
Поскольку устранение одного узкого места открывает следующее ограничение на пути исполнения, системная оптимизация — это итеративный процесс, управляемый законом Амдала. Например, устранение голода по входным данным асинхронной предвыборкой поднимает загрузку ускорителя, пока пропускная способность памяти или насыщение вычислений не начнут ограничивать время шага. Каждое вмешательство требует повторного профилирования, чтобы выявить новый критический путь, и цикл продолжается, пока блоки исполнения ускорителя не начнут работать близко к теоретическому пику или не будут достигнуты целевые показатели производительности приложения.
Предвыборка данных и перекрытие
Методы предвыборки и перекрытия иллюстрируют систематическую рамку в действии: они нацелены на узкое место задержки перемещения данных, координируя передачу данных с вычислениями. Эта оптимизация оказывается наиболее эффективной, когда профилирование показывает, что вычислительные блоки простаивают, ожидая завершения передач данных.
Обучение моделей машинного обучения включает значительное перемещение данных между хранилищем, памятью и вычислительными блоками. Конвейер данных состоит из последовательных передач: с дискового хранилища в память CPU, из памяти CPU в память GPU и затем через вычислительные блоки GPU. В ML-обучении операция «чтения» редко сводится к простой выборке с диска: для задач с изображениями она включает декодирование JPEG, случайные обрезки и цветовое дрожание, которые применяются на ядрах CPU, прежде чем тензор готов к передаче; для языковых задач она включает токенизацию, субсловное кодирование и паддинг последовательностей. «Иллюстративная последовательная выборка данных» показывает неэффективность последовательной передачи данных: GPU простаивает во время файловых операций (Open 1, Open 2), а шаги обучения не могут начаться, пока не завершатся эти операции чтения и предобработки, оставляя дорогие вычислительные ресурсы недозагруженными на значительной части каждой эпохи.
Предвыборка устраняет эту неэффективность, загружая данные в память до назначенного времени вычисления. Во время обработки текущего батча конвейеры данных фреймворков, такие как tf.data, загружают и готовят последующие батчи, поддерживая устойчивый запас готовых данных (Murray et al., 2021).
Иллюстративная последовательная выборка данных: при принятых длительностях этапов открытие файла, чтение и обучение выполняются последовательно, а GPU простаивает во время файловых операций. Расписание занимает примерно 95 мин и служит схематичной базой для сравнения перекрытия.
Перекрытие расширяет предвыборку, координируя несколько этапов конвейера для одновременного выполнения. Система обрабатывает текущий батч и одновременно готовит будущие батчи через загрузку и предобработку. Сравните иллюстративные расписания на «Иллюстративной последовательной выборке данных» и «Иллюстративной перекрывающейся предвыборке данных». При их принятых длительностях этапов перекрытие сокращает время завершения примерно с 95 мин до 65 мин, то есть на 31,6 процента. Реальный выигрыш зависит от баланса этапов и доступной конкурентности.
Иллюстративная перекрывающаяся предвыборка данных: открытие файла и чтение перекрываются с обучением на ускорителе при сохранении тех же длительностей отдельных этапов, что и в последовательном расписании. Схематичное расписание занимает примерно 65 мин против 95 мин у последовательного.
Механика предвыборки
Предвыборка окупается только тогда, когда профиль показывает перемещение данных на критическом пути. Обучающие данные по-прежнему проходят извлечение, преобразование и выполнение модели; оптимизация меняет момент, когда выполняются эти этапы. Неоптимизированный конвейер выполняет их последовательно, оставляя GPU простаивать во время выборки и предобработки. Загрузчики данных избегают этой остановки, готовя следующий батч в отдельных потоках или процессах, пока текущий батч обучается.
Перекрытие распространяет ту же идею на весь конвейер. Пока GPU обрабатывает один батч, предобработка начинается для следующего, а выборка данных стартует для последующего. Цель — постоянная активность на каждом этапе, чтобы самый медленный этап больше не заставлял остальные ждать.
Фреймворки машинного обучения (введенные в разделе «Фреймворки машинного обучения») открывают управляющие переменные для этого компромисса. «Конфигурация DataLoader» показывает конфигурацию DataLoader в PyTorch, где num_workers = 4 задает параллелизм предобработки, а prefetch_factor = 2 поддерживает буфер из 8 батчей, готовых к потреблению ускорителем.
Конфигурация предвыборки DataLoader: четыре рабочих процесса с коэффициентом предвыборки два поддерживают до восьми батчей в окне предвыборки на стороне хоста.
loader = DataLoader(
dataset, batch_size=32, num_workers=4, prefetch_factor=2
)
Параметры num_workers и prefetch_factor — не общие переключатели производительности. Они определяют параллелизм CPU и глубину буфера, а значит, переносят нагрузку с простоя ускорителя на память хоста и планирование CPU. Помимо параллелизма рабочих, высокая пропускная способность передачи с хоста на устройство требует закрепленной (page-locked) памяти хоста. Обычная виртуальная память может выгружаться операционной системой, поэтому драйверу GPU приходится пропускать передачи через промежуточный буфер хоста перед копированием по PCIe; установка pin_memory=True в загрузчике данных выделяет тензоры в закрепленной физической оперативной памяти, позволяя GPU инициировать асинхронные передачи DMA (tensor.to(device, non_blocking=True)), которые перекрываются непосредственно с исполнением на ускорителе.
Управление буфером — главный компромисс. Слишком маленький буфер заставляет GPU ждать подготовки данных, возвращая простой, который предвыборка должна была устранить. Слишком большой буфер расходует память, которая иначе могла бы хранить параметры модели или более крупные батчи. Правильная конфигурация координирует подготовку на CPU, ввод-вывод хранилища и вычисления на GPU, так чтобы у каждого ресурса работа была готова в момент, когда он может ее использовать. Эти методы дают наибольшую выгоду, когда доступ к хранилищу медленный, предобработка сложна или наборы данных велики.
Практические соображения
Буферы предвыборки и глубина перекрытия настраиваемы, поэтому один и тот же механизм адаптируется к тому, какой этап ограничивает: медленное хранилище, ограниченная сетевая пропускная способность или вычислительная производительность. Предвыборка и перекрытие дают наибольший выигрыш, когда предобработка лежит на критическом пути, но может выполняться одновременно с вычислениями модели. В иллюстративном конвейере изображений случайная обрезка (10 мс), цветовое дрожание (15 мс) и нормализация (5 мс) в сумме дают 30 мс на батч. Перекрытие может скрыть не больше, чем длятся одновременные вычисления на ускорителе; любой избыток остается на критическом пути. Языковые нагрузки так же выигрывают, когда токенизация и субсловная обработка иначе блокировали бы цикл обучения.
Основной компромисс — память: буферы предвыборки занимают память хоста или, если используется отдельная очередь на стороне устройства, память устройства, пропорционально глубине буфера и размеру батча. Для батча из 256 изображений высокого разрешения ( пикселя) один буферизованный батч требует примерно 3,2 ГБ. При num_workers = 4 и prefetch_factor = 2 окно предвыборки из 8 батчей может занимать около 25,8 ГБ. Настройка этих параметров требует эмпирической проверки, потому что избыточные рабочие конкурируют за CPU, хранилище и память, а недостаточная буферизация возвращает задержки данных. Начните со скромного числа рабочих, увеличивайте его, измеряя пропускную способность и память, и остановитесь, когда дополнительные рабочие перестают сокращать простой ускорителя. Когда входной конвейер уже превышает потребность вычислений, более глубокая предвыборка добавляет сложность без повышения пропускной способности.
Обучение в смешанной точности
Пока предвыборка оптимизирует перемещение данных, обучение в смешанной точности устраняет и ограничения вычислительной пропускной способности, и ограничения емкости памяти. Оно использует формат пониженной точности там, где это уместно, сохраняя более высокую точность для выбранных накоплений или обновлений. Раздел «Численные представления» приложения «Основы машины» сравнивает компромиссы диапазона и точности FP32, FP16, BF16, FP8 и INT8. Рецепт обучения обычно сочетает FP32 с FP16 или BF16; в одном и том же пути обычно не используют FP16 и BF16 взаимозаменяемо. Итоговые эффекты для скорости, памяти и точности зависят от нагрузки и аппаратуры (Micikevicius et al., 2017; Wang and Kanwar, 2019; Kalamkar et al., 2019).
Хранимые веса FP32 нейронной сети требуют 4 байта на параметр, тогда как веса FP16 и BF16 используют 2 байта. Для модели с параметров тензор весов уменьшается с 4 ГБ до 2 ГБ. Полная память обучения сокращается меньше, если рецепт сохраняет мастер-веса FP32, состояния оптимизатора или выборочные активации.
Численные различия между этими форматами определяют сферы их применения. «Сравнение форматов точности» показывает, что 8-битная экспонента BF16 дает ему примерно тот же диапазон нормальных экспонент, что и у FP32, тогда как 5-битная экспонента FP16 дает минимальное положительное нормальное значение около и максимальное конечное значение . Субнормальные значения FP16 простираются к , хотя их обработка зависит от операции и аппаратного режима. FP32 дает около семи десятичных знаков точности, FP16 — около трех, а BF16 — около двух-трех. Поэтому BF16 обменивает точность мантиссы на диапазон экспоненты, который часто упрощает обучение глубоких сетей.
| Свойство | FP32 | FP16 | BF16 |
|---|---|---|---|
| Биты экспоненты | 8 | 5 | 8 |
| Биты мантиссы | 23 | 10 | 7 |
| Минимальное нормальное значение | |||
| Отношение пиковой пропускной способности A100 | 1× | 16× | 16× |
Сравнение форматов точности. Выбор между FP16 и BF16 зависит от того, важнее ли для конкретной нагрузки динамический диапазон (сильная сторона BF16) или точность (преимущество FP16). Показанные минимальные нормальные значения — практические пороги для обучения, поскольку субнормальные значения на многих GPU могут обнуляться. На A100 тензорные ядра FP16 и BF16 достигают пика, в 16 раз превышающего пик CUDA-ядер FP32.
Выбор формата зависит от характеристик модели и поддержки аппаратуры. Более широкий диапазон экспоненты BF16 снижает проблемы переполнения и антипереполнения, тогда как FP16 дает больше битов мантиссы, но часто требует масштабирования функции потерь. Политики автокаста фреймворков и слитые ядра выбирают накопление с повышенной точностью для численно чувствительных операций, когда это нужно; сокращение функции потерь, softmax, нормализация и обновления оптимизатора — типичные кандидаты, но их точный тип исполнения зависит от реализации.
«Традиционное обучение FP16 со смешанной точностью» показывает традиционный рецепт смешанной точности FP16. Мастер-веса FP32 приводятся к более низкой точности для вычислений, функция потерь масштабируется перед обратным распространением ошибки, а градиенты размасштабируются перед обновлением в FP32. Современные реализации фреймворков могут по-разному хранить или накапливать отдельные тензоры, а рецепты BF16 обычно обходятся без масштабирования функции потерь из-за более широкого диапазона экспоненты.
Традиционное обучение FP16 со смешанной точностью: схематичный рецепт из шести шагов приводит мастер-веса FP32 к более низкой точности для вычислений, масштабирует функцию потерь, вычисляет масштабированные градиенты, а затем размасштабирует их для обновления в FP32. Реализации фреймворков могут различаться, а BF16 обычно не требует этого пути масштабирования функции потерь.
Современные архитектуры ускорителей сочетают блоки плотного матричного исполнения с форматами чисел пониженной точности, чтобы максимизировать арифметическую пропускную способность. NVIDIA ввела тензорные ядра для операций FP16 в архитектуре Volta (NVIDIA, 2017) и добавила нативное исполнение BF16 в Ampere (NVIDIA Corporation, 2020), повторив нативную поддержку BF16, которую Google разработала для Tensor Processing Units (Wang and Kanwar, 2019). Эти специализированные функциональные блоки выполняют матричные операции умножения с накоплением в пониженной точности в четыре–шестнадцать раз быстрее стандартных 32-битных АЛУ с плавающей точкой.
Обучение в смешанной точности превращает эти аппаратные возможности в разделенный численный контракт. Подходящие матричные умножения и свертки выполняются в FP16 или BF16 на тензорных блоках, тогда как редукции, накопления и обновления параметров сохраняют более высокую точность. Выигрыш в производительности дает и арифметическая пропускная способность, и перемещение данных: функциональные блоки пониженной точности работают с более высокой плотностью тактов, а более узкие тензоры вдвое сокращают объемы передачи через кэши и HBM. Высокая точность остается необходимой там, где широкие редукции, малые обновления параметров или чувствительные нормализации могут накапливать ошибки округления. Политики автокаста фреймворков обеспечивают это разделение динамически, выбирая исполнение пониженной точности для вычислительно интенсивных матричных умножений и сохраняя FP32 для численно хрупких операций.
Масштабирование функции потерь
Ограниченный 5-битной экспонентой динамический диапазон FP16 создает серьезную опасность антипереполнения при обратном распространении ошибки.21 При вычислении градиентов в глубоких сетях последовательные умножения по правилу цепочки часто дают величины градиентов меньше минимального положительного нормального значения FP16 (). Хотя IEEE 754 FP16 определяет субнормальные числа до , аппаратные ускорители часто обнуляют субнормальные входы и выходы, чтобы не допустить остановок конвейера. Когда градиенты антипереполняются до нуля, обновления весов останавливаются, и обучение не сходится.
Масштабирование функции потерь борется с антипереполнением, используя линейность дифференцирования: . Умножение скалярной функции потерь на большой коэффициент масштабирования (например, или ) перед обратным распространением ошибки сдвигает распределение градиентов вправо, в диапазон нормальных значений, представимых в FP16. По завершении обратного распространения накопленные градиенты делятся на (размасштабируются) перед применением обновления оптимизатора.
Фреймворки глубокого обучения автоматизируют этот процесс через динамическое масштабирование функции потерь (GradScaler). Поскольку нормы градиентов колеблются в ходе обучения, статический коэффициент масштабирования рискует либо антипереполнением (если слишком мал), либо численным переполнением за максимальное конечное значение FP16, равное (если слишком велик). Перед выполнением обновления параметров GradScaler размасштабирует градиенты в FP32 и проверяет буферы тензоров на нефинитные значения (inf или NaN). Если обнаружено переполнение, масштабировщик пропускает шаг оптимизатора, чтобы защитить мастер-веса FP32 от повреждения, и уменьшает коэффициент масштабирования (обычно вдвое). Если обучение продолжается без переполнения в течение настраиваемого окна роста (например, 2 000 последовательных шагов), масштабировщик удваивает , чтобы держать градиенты у верхнего края динамического диапазона, не насыщая его.
Выгоды смешанной точности
Обучение в смешанной точности дает выигрыш по трем взаимодействующим системным измерениям: занимаемой памяти, арифметической пропускной способности и объему коммуникации. Сокращение ширины операндов вдвое уменьшает хранение весов на 50 процентов: модель на один миллиард параметров переходит с 4 ГБ в FP32 до 2 ГБ в FP16 или BF16 (хотя чистая экономия зависит от точности, сохраняемой для состояния оптимизатора и мастер-весов). С вычислительной стороны пониженная точность направляет ядра плотного матричного умножения на высокопроизводительные конвейеры тензорных ядер («Аппаратная поддержка смешанной точности»). В распределенных топологиях передача градиентов на 16 битах вместо 32 вдвое сокращает трафик коллективной AllReduce-синхронизации по межсоединению. Эти эффекты усиливают друг друга: освободившийся запас памяти позволяет брать большие микробатчи, тензорные ядра ускоряют исполнение ядер, а более узкие тензоры сокращают задержку обмена градиентами. Следующий разбор оценивает эту взаимодействующую экономию памяти на GPT-2 XL и показывает, как смешанная точность и выборочный пересчет помещают модель, которая в FP32 не умещается в память устройства, в емкость одного ускорителя.
Экономия памяти при смешанной точности GPT-2
Задача: можно ли обучить GPT-2 XL (1,5 млрд параметров) на одном GPU V100 и сколько памяти экономят смешанная точность и контрольные точки градиентов?
Базовый уровень FP32:
- Параметры и градиенты (FP32): 12 ГБ (6 ГБ параметров + 6 ГБ градиентов)
- Активации (батч = 4): примерно 71,7 ГБ
- Состояния оптимизатора (Adam m, v в FP32): 12 ГБ
- Итого: примерно 95,7 ГБ (превышает любой отдельный GPU)
Смешанная точность FP16:
- Параметры (FP16): 1,5 млрд параметров по 2 байта каждый = 3 ГБ
- Активации (FP16): примерно 35,9 ГБ
- Градиенты (FP16): 3 ГБ
- Мастер-веса FP32: 6 ГБ (для точных обновлений оптимизатора)
- Состояния оптимизатора (Adam m, v в FP32): 12 ГБ
- Итого: примерно 59,9 ГБ (все еще впритык, но управляемо с оптимизациями)
Смешанная точность + иллюстративное четырехкратное сокращение активаций:
- Активации сокращены примерно до 9 ГБ выборочным пересчетом
- Оценка суммарных тензоров: примерно 33 ГБ при емкости V100 в 32 ГБ, до учета временных рабочих областей и накладных расходов аллокатора
Системный вывод: смешанная точность в этом рецепте вдвое сокращает тензоры параметров и градиентов; контрольные точки затем обменивают пересчет на меньшее хранение активаций. При размере батча 4 упрощенная оценка тензоров приближается к емкости V100, поэтому реальному прогону может понадобиться дополнительное сокращение памяти с учетом рабочих областей и поведения аллокатора. При батче 32 та же оценка требует примерно 95,7 ГБ, что обосновывает техники масштабирования на несколько устройств.
Одной экономии памяти недостаточно для устойчивого обучения. При обучении в FP16 мастер-веса FP32 необходимы, потому что обновления параметров обычно на порядки меньше значений весов . В FP16, где 10-битная мантисса дает примерно три десятичных знака точности, добавление обновления, которое более чем в раз меньше по модулю веса, приводит к арифметическому поглощению: обновление полностью выходит за пределы битов мантиссы и округляется до нуля. Хранение мастер-весов в FP32 сохраняет эти инкрементальные обновления на протяжении тысяч шагов оптимизатора, приводя веса к 16 битам только при подготовке к прямому проходу. Политики автокаста аналогично держат широкие редукции, слои нормализации и softmax в FP32, чтобы предотвратить катастрофическое вычитание.
Когда численная устойчивость обеспечена, арифметика пониженной точности и сокращение трафика памяти напрямую переходят в ускорение календарного времени и снижение стоимости кластера. Следующий сценарий моделирует эти совокупные выгоды в пропускной способности, расписании и стоимости инфраструктуры для распределенного прогона GPT-2 XL.
Пропускная способность и стоимость смешанной точности GPT-2
Задача: при следующих иллюстративных допущениях о пропускной способности и тарификации для задания GPT-2 XL какие различия в скорости и стоимости дает смешанная точность FP16?
Принятая пропускная способность V100:
- Пропускная способность FP32: примерно 90 образцов/с
- Пропускная способность FP16: примерно 220 образцов/с
- Ускорение: 220 образцов/с ÷ 90 образцов/с ≈ 2,4 раза быстрее
Влияние на стоимость для кластера из 32 GPU:
- Принятая стоимость FP32: $50 000 за 2 недели
- Принятая стоимость FP16: $28 000 за 1,2 недели
- Выигрыш в календарном времени: 2 недели ÷ 1,2 недели ≈ 1,7 раза, что ниже ускорения пропускной способности в 2,4 раза, поскольку принятое расписание включает работу, которую ядра FP16 не ускоряют
- Сэкономленное время: 2 недели − 1,2 недели = 0,8 недели (5,6 дня)
- Сэкономленная стоимость: $50 000 − $28 000 = $22 000
Контрольный барьер: сравнение стоимости корректно только при условии, что контрольный прогон валидации показывает, что рецепт FP16 удовлетворяет тем же критериям приемки, что и базовый уровень FP32. Сценарий не предполагает конкретной разницы перплексии.
Системный вывод: при этих допущениях тот же кластер из 32 GPU переходит от 2 недель и $50 000 к 1,2 недели и $28 000. Это арифметика сценария, а не заявление о бенчмарке; реальное решение требует измеренной пропускной способности, стоимости и валидации качества для целевой нагрузки.
Получить эти ускорения можно только эмпирическим профилированием, а не допущением об автоматическом ускорении. Для небольших моделей или нагрузок, ограниченных памятью и в которых большие матричные умножения не доминируют, приведение типов данных и накладные расходы запуска ядер могут свести на нет преимущество арифметической пропускной способности. Кроме того, поддерживает ли ускоритель нативный BF16 или требует масштабирования функции потерь для FP16, зависит от нижележащей микроархитектуры.
Аппаратная поддержка смешанной точности
Специализированные блоки матричного исполнения дают ускорение смешанной точности, обменивая численную точность и динамический диапазон на плотность арифметики.22 Ускорители сочетают эти блоки умножения пониженной точности с регистрами накопления повышенной точности, чтобы сохранять численную устойчивость при плотных матричных редукциях.
NVIDIA ввела тензорные ядра (Tensor Cores) в архитектуре Volta (2017) как выделенные блоки матричного умножения, оптимизированные для нагрузок смешанной точности. В отличие от стандартных CUDA-ядер, которые обрабатывают скалярные или малые векторные операции, тензорные ядра выполняют матричные операции умножения с накоплением за один такт. Для входов FP16 одно тензорное ядро выполняет:
где и — входы FP16, а и могут использовать накопление FP32. Накопление повышенной точности уменьшает ошибку округления, хотя не устраняет численную ошибку и вычитание полностью.
Спецификации пиковой аппаратной мощности задают теоретический потолок этого ускорения. GPU NVIDIA A100 дает 19,5 TFLOP/s FP32 на стандартных CUDA-ядрах и 312 TFLOP/s пропускной способности тензорных ядер в FP16 или BF16, то есть пиковое отношение составляет 16 раз. Ускорители класса H100 добавляют тензорные ядра FP8 с 1 979 TFLOP/s без разреженности, примерно в 2 раза больше скорости тензорных ядер FP16/BF16 на H100. Эти цифры представляют аппаратные потолки, а не гарантии сквозного обучения: матричные умножения напрямую отображаются на тензорные ядра, но остаются перемещение данных, ядра вне тензорных ядер, коммуникация, масштабирование функции потерь и обновления оптимизатора. Хотя пакетное матричное умножение в самовнимании трансформера ( FLOP) напрямую отображается на эти тензорные блоки, закон Амдала показывает, что оставшиеся поэлементные операции, ограниченные памятью, коллективная коммуникация и обновления оптимизатора ограничивают реализованное сквозное ускорение.
BF16 (Brain Float 16) сохраняет 8-битную экспоненту FP32, сокращая мантиссу до 7 битов. Такой выбор ставит сохранение динамического диапазона выше точности, что важно для обучения на градиентах, где значения охватывают много порядков величины. TPU от Google нативно поддерживают BF16, а архитектура NVIDIA Ampere (A100) и более новые обеспечивают полную аппаратную поддержку.
Преимущество BF16 по диапазону над FP16 проявляется, когда градиенты или промежуточные значения выходят за нормальный диапазон FP16. Наименьшее положительное нормальное значение FP16 равно , а нижняя граница субнормальных чисел примерно .23 Наименьшее положительное нормальное значение BF16 составляет примерно , совпадая с диапазоном экспоненты FP32. Поэтому BF16 обычно обходится без масштабирования функции потерь, которое нужно FP16, хотя точность накопления и округление по-прежнему важны.
Архитектура NVIDIA Hopper (H100) вводит поддержку FP8 в двух форматах. E4M3 использует четыре бита экспоненты и три бита мантиссы (отдавая предпочтение точности для весов и активаций прямого прохода), а E5M2 использует пять битов экспоненты и два бита мантиссы (отдавая предпочтение динамическому диапазону для градиентов обратного прохода).
Обучение в FP8 еще раз удваивает пропускную способность тензорных ядер (1,98 PFLOP/s на H100 для плотных вычислений против 0,99 PFLOP/s для FP16 плотных, без разреженности). Однако крайне ограниченная точность FP8 требует коэффициентов масштабирования для каждого тензора, которые хранятся в более высокой точности, что добавляет алгоритмическую сложность. «Руководство по выбору точности» кратко показывает, когда уместен каждый формат:
| Точность | Когда использовать | Требование к аппаратуре |
|---|---|---|
| FP8 | Обучение, ориентированное на пропускную способность, с проверенным масштабированием | Поддерживаемая аппаратура FP8 |
| BF16 | Широкий диапазон экспоненты без масштабирования функции потерь FP16 | Поддерживаемый ускоритель BF16 |
| FP16 | Большая точность мантиссы при управляемом масштабировании функции потерь | Поддерживаемый ускоритель FP16 |
| FP32 | Повышенная точность или путь пониженной точности не поддерживается | GPU |
Руководство по выбору точности. Выбор формата зависит от поддержки аппаратуры, покрытия ядрами, численного поведения и результатов валидации. FP8 требует явной стратегии масштабирования; BF16 дает более широкий диапазон экспоненты, чем FP16; FP16 часто использует масштабирование функции потерь; а FP32 остается доступным для чувствительных операций или неподдерживаемых путей пониженной точности.
Выбор между этими форматами требует баланса между арифметической пропускной способностью, сложностью реализации и численной устойчивостью.
Помимо ускорения вычислительно интенсивных матричных операций, пониженная точность снимает узкие места пропускной способности памяти, меняя операционную арифметическую интенсивность. На современных ускорителях большие матричные умножения находятся в режиме, ограниченном вычислениями, по модели Roofline, тогда как поэлементные операции (такие как добавление смещений, нормализация слоя и остаточные связи) прочно находятся в режиме, ограниченном памятью. GPU NVIDIA A100 иллюстрирует физический дисбаланс между арифметической способностью и пропускной способностью памяти:
- Пропускная способность HBM2e: 2 039 ГБ/с
- Производительность FP32 (19,5 TFLOP/s): худший случай — 78 ТБ/с, если каждому FLOP нужны новые данные
- Реальная потребность (с учетом повторного использования данных): значительно ниже, но ограничена пропускной способностью для операций с низкой арифметической интенсивностью
Для ядер, ограниченных памятью, время исполнения определяется байтами, переданными по шине памяти, а не тактами арифметики. Перевод 32-битных операндов в 16-битные FP16 или BF16 вдвое сокращает объем байтов, передаваемых по шине HBM, и теоретически вдвое повышает пропускную способность операций, ограниченных памятью, даже без задействования тензорных ядер. Реальный выигрыш по пропускной способности зависит от доли попаданий в кэш, слияния ядер и накладных расходов на преобразование формата.
Современные фреймворки скрывают эти микроархитектурные механизмы за автоматической маршрутизацией точности («Фреймворки машинного обучения»). Как показано в «Обучении в смешанной точности», автоматическая смешанная точность PyTorch (torch.amp) оборачивает исполнение модели в контекст autocast, который назначает типы данных пониженной точности подходящим вычислительно интенсивным ядрам, а редукции и нормализации направляет в FP32. В пути FP16 GradScaler перехватывает вычисление функции потерь и обратное распространение ошибки, чтобы предотвратить антипереполнение, тогда как путь BF16 масштабирование градиентов опускает.
Обучение в смешанной точности: автокаст выбирает подходящие операции пониженной точности, а масштабирование градиентов включено для пути FP16 и опущено для BF16.
import torch
model = TransformerModel().cuda()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
amp_dtype = (
torch.float16
) # torch.bfloat16 обычно не требует масштабирования функции потерь
scaler = torch.amp.GradScaler(
"cuda", enabled=(amp_dtype == torch.float16)
)
for inputs, targets in dataloader:
optimizer.zero_grad()
# Автоматический выбор точности для каждой операции
with torch.amp.autocast("cuda", dtype=amp_dtype):
output = model(inputs)
loss = criterion(output, targets)
# Масштабируем функцию потерь, чтобы не допустить антипереполнения градиентов
scaler.scale(loss).backward()
# Размасштабируем градиенты перед шагом оптимизатора
scaler.step(optimizer)
scaler.update() # Динамически корректируем коэффициент масштабирования
Поскольку поддержка низкоточных форматов в аппаратуре менялась от поколения к поколению ускорителей, оптимальный рецепт смешанной точности зависит от целевой архитектуры. «Стратегия точности по архитектуре GPU» описывает компромиссы точности для трех поколений GPU NVIDIA.
| Архитектура | Рекомендуемая точность | Ключевые соображения |
|---|---|---|
| V100 (Volta) | FP16 с масштабированием функции потерь | Нет нативного пути BF16 на тензорных ядрах; отсечение зависит от рецепта обучения |
| A100 (Ampere) | BF16 или FP16 | BF16 обходится без масштабирования функции потерь FP16; TF32 может ускорять подходящие матричные операции FP32 |
| H100 (Hopper) | BF16, FP16 или проверенный FP8 | FP8 требует рецепта с учетом FP8; 1 979 TFLOP/s — пиковый потолок |
Стратегия точности по архитектуре GPU: V100 поддерживает обучение FP16 на тензорных ядрах, A100 добавляет нативный BF16, а H100 добавляет пути FP8, использование которых требует валидации, специфичной для рецепта.
Иллюстративный сценарий для одного GPU с GPT-2 (1,5 млрд параметров) показывает, как архитектурные блоки исполнения и численные форматы усиливают друг друга: 18 образцов/с для V100 FP32, 45 образцов/с для V100 FP16, 165 образцов/с для A100 BF16 и 380 образцов/с для H100 FP8. Эти цифры — проекции сценария, а не изолированные бенчмарки, поскольку программные стеки, реализации ядер и размерности батчей тоже менялись от поколения к поколению. Системный принцип ясен: максимизация пропускной способности обучения требует совместного проектирования численного формата точности с нативными конвейерами матричного исполнения ускорителя.
FlashAttention: оптимизация внимания с учетом ввода-вывода
Обучение в смешанной точности решает два узких места: вычислительную пропускную способность, потому что тензорные ядра работают быстрее на FP16, и емкость памяти, потому что каждое значение занимает меньше байтов. Однако для трансформеров в процессе обучения часто доминирует третье узкое место — пропускная способность памяти. Промежуточные квадратичные матрицы механизма внимания приходится многократно загружать и сохранять во время прямого прохода и снова обращаться к ним при обратном распространении ошибки. Даже при пониженной точности сам объем трафика памяти может оставлять вычислительные блоки простаивающими, пока процессор ждет данных.
FlashAttention24 (Dao et al., 2022) решает эту проблему пропускной способности, оптимизируя то, как данные движутся между уровнями памяти. Обработка внимания тайлами размером с SRAM позволяет не материализовать полную матрицу в HBM и сокращает трафик без изменения математического результата. В оригинальной работе сообщается об ускорении до 3 раз на исследованных нагрузках; выигрыш зависит от формы тензоров, аппаратуры и базовой реализации.
Узкое место памяти стандартного внимания
Стандартное самовнимание («Архитектуры нейронных сетей») вычисляет связи между всеми позициями последовательности. Для входной последовательности длины механизм вычисляет матрицу внимания согласно («формуле внимания»):
Здесь , и — матрицы запросов, ключей и значений для последовательности, а — размерность вектора ключа, которой масштабируются скалярные произведения перед softmax. Член порождает матрицу оценок , поэтому внимание становится задачей ввода-вывода, даже когда сама арифметика хорошо отображается на тензорные ядра.
Узкое место памяти возникает из материализации промежуточных матриц для оценок и вероятностей. Для длины последовательности 4096 и размерности вложения 64 (типично для одной головы внимания) одна только матрица оценок внимания требует байта = 67,1 МБ в FP32. При 16 головах это вырастает до 1,1 ГБ только для промежуточных матриц внимания, без учета ключей, запросов, значений или выходных тензоров.
Иерархия памяти GPU создает возможность для внимания, учитывающего ввод-вывод. HBM дает большую внешнюю емкость, тогда как гораздо меньшая SRAM на кристалле имеет существенно более высокую пропускную способность и меньшую задержку. Реализации внимания, которые материализуют квадратичные промежуточные данные в HBM, должны записывать их и позже читать при обратном распространении ошибки. Доля времени, которую занимают эти передачи, зависит от длины последовательности, размерности головы, типа данных, аппаратуры и реализации ядра; это не фиксированное свойство моделей уровня GPT-2.
Обратный проход требует информации, которую представляют вероятности внимания, но реализация может либо сохранить эти промежуточные данные, либо пересчитать их. Для и одно выражение градиента имеет вид:
где обозначает произведение якобиана softmax на вектор. Традиционная реализация может сохранять матрицу вероятностей для этого вычисления; сохранять одновременно и вероятности, и сырые оценки математически не обязательно. FlashAttention вместо этого сохраняет компактные статистики нормировки и пересчитывает тайловые блоки оценок и вероятностей во время обратного распространения ошибки, избегая полных квадратичных промежуточных данных в HBM.
Внимание с учетом ввода-вывода через тайлинг
FlashAttention устраняет необходимость материализовать полные матрицы внимания в HBM, вычисляя внимание инкрементально через тайлинг. Вместо того чтобы вычислять всю матрицу внимания сразу, алгоритм разбивает , и на тайлы, достаточно малые, чтобы поместиться в быструю SRAM, вычисляет оценки внимания для этих тайлов и инкрементально накапливает результаты.
Ключевая алгоритмическая идея опирается на математическую структуру softmax-внимания. Стандартное внимание вычисляет:
Алгоритм ниже раскладывает это вычисление, разбивая запросы и ключи/значения на тайлы, достаточно малые для SRAM, и затем проходя по тайлам ключей и значений, поддерживая скользящие статистики softmax, необходимые для сборки каждого выходного тайла, и никогда не формируя полную матрицу оценок.
FlashAttention заменяет полную матрицу внимания небольшими тайлами SRAM.
В HBM не записывается никакой полной матрицы оценок или вероятностей . Тайл оценок FP32 размером , например, занимает 65,5 КБ, тогда как матрица — 67,1 МБ. Остальные входы, выходы и скользящие статистики сохраняются, поэтому тайл не обязательно является самым большим тензором во всем ядре.
Алгоритм: FlashAttention — тайловое внимание с онлайн-softmax
Вход: запросы Q, ключи K, значения V для последовательности длины S; размер тайла b
Выход: выход внимания Y без материализации матрицы оценок S × S
для каждого тайла запросов Q_i:
в SRAM: Y_i^acc ← 0, m_i ← −∞, l_i ← 0
для каждого тайла ключей и значений (K_j, V_j):
загрузить Q_i, K_j, V_j в SRAM; Z_ij ← Q_i K_j^T / √d_k
m_i' ← max(m_i, rowmax(Z_ij)) ▷ новый устойчивый максимум
Y_i^acc ← Y_i^acc ⊙ e^{m_i − m_i'} + e^{Z_ij − m_i'} V_j
l_i ← l_i ⊙ e^{m_i − m_i'} + rowsum(e^{Z_ij − m_i'}); m_i ← m_i'
отбросить Z_ij ▷ никогда не записывается в HBM
Y_i ← Y_i^acc / l_i; записать Y_i в HBM
Алгоритм онлайн-softmax делает это разложение возможным. Традиционный softmax требует знать все входы до вычисления любого выхода: . FlashAttention использует инкрементальную формулировку, которая обновляет статистики softmax по мере поступления новых блоков, отслеживая скользящий максимум (для численной устойчивости) и знаменатель по мере обработки каждого блока, а затем соответствующим образом перемасштабируя накопленные выходы.
Анализ сложности памяти и ввода-вывода
FlashAttention улучшает и память активаций, и ввод-вывод памяти, которые являются ограничивающими издержками во внимании, ограниченном пропускной способностью. Стандартному вниманию нужна память для хранения матриц оценок и матриц вероятностей внимания по всем позициям последовательности. FlashAttention сокращает занимаемый объем сохраненных активаций до , сохраняя только входные и выходные тензоры плюс небольшой буфер SRAM для текущего тайла.
Для , : стандартному вниманию нужно байта = 67,1 МБ на голову. FlashAttention требует только байта ≈ 3,1 МБ на голову, то есть сокращение в 21,3 раза.
Паттерн ввода-вывода меняется по той же причине. Стандартное внимание читает , и из HBM, записывает матрицы оценок, вероятностей и выходов во время прямого прохода, а затем перечитывает эти сохраненные матрицы при обратном проходе, прежде чем записать , и . Результирующий трафик HBM включает тот же член , из-за которого объем активаций велик. FlashAttention формирует блоки оценок и вероятностей в SRAM и никогда не записывает полные тензоры в HBM. При обратном проходе он пересчитывает нужные блоки, а не читает сохраненные полные матрицы. Точная сложность ввода-вывода HBM зависит от размера тайла и доступной SRAM, потому что блоки ключей и значений многократно передаются по блокам запросов, поэтому граница не сводится просто к .
При больших длинах последовательности FlashAttention сокращает трафик HBM, избегая записи и повторного чтения матриц оценок и вероятностей . При и занимаемая память активаций падает с сотен мегабайт на голову для сохраненных матриц внимания до нескольких мегабайт для тайловых входов и выходов, а точное сокращение пропускной способности зависит от аппаратуры и тайлинга ядра.
Оба подхода требуют асимптотически FLOP для плотного внимания. Обратный проход FlashAttention пересчитывает тайловые промежуточные данные внимания из сохраненных входов и статистик нормировки, а не хранит полные матрицы оценок и вероятностей. Получающееся сокращение трафика HBM может сдвинуть ядро к исполнению, ограниченному вычислениями, и дать чистое ускорение, но окончательное узкое место по-прежнему зависит от формы и аппаратуры.
Реализация и загрузка аппаратуры
Выигрыш производительности FlashAttention проявляется через внимательное использование иерархии памяти GPU. Современные фреймворки могут направлять подходящие операции внимания на слитые или резервные реализации в зависимости от аппаратуры, входов и раскладок; профилирование показывает, какой путь сработал и помог ли он. «Сравнение реализаций внимания» сопоставляет стандартную и оптимизированную реализации внимания.
Сравнение реализаций внимания: стандартное внимание материализует полную матрицу в HBM, тогда как FlashAttention использует оптимизированную реализацию PyTorch или выделенную библиотеку flash-attn.
import torch
import torch.nn.functional as F
# Стандартное внимание (материализует матрицу n на n)
def standard_attention(q, k, v):
# q, k, v: [batch, heads, seq_len, head_dim]
scores = torch.matmul(q, k.transpose(-2, -1)) / (
q.size(-1) ** 0.5
)
attn = F.softmax(scores, dim=-1) # матрица n на n в HBM
output = torch.matmul(attn, v)
return output
# FlashAttention (без материализации матрицы n на n)
def flash_attention(q, k, v):
# FlashAttention можно использовать, когда входы и аппаратура подходят
output = F.scaled_dot_product_attention(q, k, v)
return output
# Явный FlashAttention 2 (библиотека flash-attn)
from flash_attn import flash_attn_func
def flash_attn_2(q, k, v):
# q, k, v: [batch, seq_len, heads, head_dim]
# Другая раскладка для оптимизированного доступа к памяти
output = flash_attn_func(q, k, v)
return output
Результаты бенчмарков
Преимущества FlashAttention становятся конкретными при измерении на реальной аппаратуре. Dao et al. (2022) сообщают об ускорении сквозного обучения в стиле GPT и отдельных бенчмарках ядер внимания, показывающих, что внимание с учетом ввода-вывода сокращает трафик памяти и улучшает время исполнения. «Сравнение FlashAttention на бенчмарке» использует иллюстративный сценарий в стиле A100, чтобы показать тот же системный паттерн; его времена исполнения и значения памяти — иллюстративные числа главы, а не значения, приведенные Dao et al. (2022) дословно.
| Длина последовательности | Стандартный прямой | Flash прямой | Стандартный обратный | Flash обратный | Память (стандарт) | Память (Flash) |
|---|---|---|---|---|---|---|
| 512 | 12 мс | 8 мс | 35 мс | 18 мс | 4,2 ГБ | 2,8 ГБ |
| 2048 | 45 мс | 15 мс | 120 мс | 35 мс | 18 ГБ | 6 ГБ |
| 4096 | OOM | 32 мс | OOM | 85 мс | ГБ | 12 ГБ |
| 8192 | OOM | 68 мс | OOM | 180 мс | ГБ | 24 ГБ |
Сравнение FlashAttention на бенчмарке: иллюстративное время одного вызова и пиковая память для стандартного внимания и FlashAttention в конфигурации в стиле A100 с 40 ГБ при разных длинах последовательности. OOM отмечает конфигурации, где стандартное внимание превышает бюджет памяти 40 ГБ; строка для 8192 токенов также показывает, что стандартное внимание превысило бы 80 ГБ.
В этом иллюстративном сценарии в стиле A100 с 40 ГБ стандартное внимание исчерпывает память начиная с 2048 токенов, тогда как FlashAttention помещает последовательности до 8192 токенов. Даже при 2048 токенах, где помещаются оба варианта, FlashAttention дает ускорение прямого прохода в 3 раза и обратного — в 3,4 раза.
Последующие версии продолжили улучшать производительность: FlashAttention-2 (Dao, 2023) добавил еще примерно в 1,5–2 раза ускорения за счет лучшего параллелизма и распределения регистров, тогда как FlashAttention-3 (Shah et al., 2024) использует тензорные ядра FP8 и асинхронные операции с памятью на GPU Hopper и, как сообщается, достигает примерно 740 TFLOP/s на H100, около 75 процентов теоретического пика.
Когда использовать FlashAttention
Для обучения трансформеров на длинных последовательностях FlashAttention — обычно первая реализация внимания, которую стоит проверить. Она становится необходимой, когда длина последовательности переводит стандартное внимание в узкое место емкости или пропускной способности HBM, особенно в диапазоне в несколько тысяч токенов, где матрицы внимания доминируют в памяти. Больше всего выигрывают GPU класса A100 и H100 с быстрой SRAM на кристалле. Отдача снижается для коротких последовательностей, где накладные расходы тайлинга не окупаются, на старых архитектурах GPU без сопоставимой пропускной способности SRAM и для архитектур без внимания, таких как сверточные сети и многослойные перцептроны.
На практике фреймворки глубокого обучения берут на себя большую часть интеграции FlashAttention, но решение по-прежнему зависит от раскладки, точности и бюджета памяти. Функция scaled_dot_product_attention в PyTorch может перенаправиться на FlashAttention, когда аппаратура, входы и ограничения бэкенда это позволяют; самописное внимание должно использовать подходящий примитив. Три практические проверки определяют, уместен ли FlashAttention:
- Убедитесь, что раскладки тензоров соответствуют ожиданиям библиотеки (непрерывная память, правильный порядок измерений).
- Используйте FP16 или BF16 для максимального ускорения (FlashAttention оптимизирован для смешанной точности).
- Комбинируйте с контрольными точками градиентов, когда нужна дополнительная экономия памяти активаций.
Интеграция часто сводится к изменению одной строки: ручной вызов внимания заменяется на F.scaled_dot_product_attention (см. «Сравнение реализаций внимания»). Инженерное решение остается тем же, что установлено анализом Roofline: использовать оптимизированный примитив, когда узкое место — трафик HBM, и позволить библиотеке управлять тайлингом и планированием SRAM, необходимыми для его устранения.
Системные следствия и общие принципы
FlashAttention служит примером фундаментального принципа системной инженерии: проектирование алгоритмов с учетом ввода-вывода. Многие ускорители располагают избытком вычислительной мощности относительно пропускной способности памяти. Для ядра, ограниченного пропускной способностью, трафик может определять время исполнения, даже когда число FLOP не меняется.
Этот принцип выходит за пределы внимания. В матричном умножении с учетом ввода-вывода алгоритмы тайлинга, подобные используемым в CUTLASS, сокращают трафик DRAM, максимизируя повторное использование данных в быстрых кэшах. Наивное умножение матриц выполняет FLOP при трафике памяти, тогда как блочные алгоритмы сохраняют FLOP, но уменьшают число промахов кэша за счет оптимизации локальности.
Тот же принцип перемещения байтов возникает в эффективном по коммуникации распределенном обучении, где сжатие градиентов обменивает дополнительные вычисления (сжатие и распаковку) на сокращение потребления сетевой пропускной способности. Периферийные устройства с низким энергопотреблением и ограниченной пропускной способностью памяти выигрывают от алгоритмов с учетом ввода-вывода еще сильнее. Обмен 10 процентов дополнительной арифметики на вдвое меньший трафик памяти приближается к двукратному снижению энергии в пределе, когда перемещение данных составляет весь бюджет, и не достигает этого предела, если арифметика имеет заметную долю, поскольку сокращение одного слагаемого суммы вдвое не может уменьшить всю сумму более чем вдвое. Этот раздел вводит эвристику учета ввода-вывода; распределенные и периферийные развертывания используют ту же логику перемещения байтов.
Исключение матриц внимания размера из HBM освобождает память ускорителя и открывает три архитектурные возможности. Во-первых, оно позволяет использовать более длинные контексты последовательностей на фиксированной аппаратуре, сдвигая границу рабочего контекста с 2 тыс. до 8 тыс. токенов в иллюстрированной конфигурации A100. Во-вторых, освобожденная память активаций позволяет брать большие размеры микробатчей, что улучшает насыщение арифметики аппаратуры, при условии что динамика градиентов остается стабильной. В-третьих, сжатый объем активаций допускает более глубокие стеки трансформеров в заданном бюджете памяти, хотя осуществимость многомиллиардных моделей от начала до конца по-прежнему зависит от шардирования параметров, состояний оптимизатора и оставшихся активаций слоев.
Метод показывает, что системные алгоритмы могут использовать иерархию памяти для больших сокращений памяти активаций и ускорений, зависящих от нагрузки, сверх того, что дает одно только масштабирование аппаратуры. Рассмотрение пропускной способности памяти как главного ограничения, а вычислений как избыточного ресурса — повторяющийся паттерн в оптимизации производительности ML.
FlashAttention решает проблемы пропускной способности памяти во время вычислений, но существует другой класс ограничений памяти: сама емкость, нужная для одновременного хранения активаций и состояний оптимизатора. Когда модели или размеры батчей превышают емкость памяти GPU, два взаимодополняющих приема обменивают вычисления на память.
Накопление градиентов и контрольные точки
Обучение больших моделей требует значительной памяти для активаций, градиентов и параметров. Когда память ограничивает размер батча или сложность модели, накопление градиентов25 формирует больший эффективный батч из последовательных микробатчей, тогда как контрольные точки отбрасывают и пересчитывают выбранные активации. Эти приемы становятся стандартными инструментами, когда память — связывающее ограничение.
Механика накопления градиентов и контрольных точек
Накопление градиентов и контрольные точки активаций работают на разных принципах, но оба стремятся оптимизировать использование памяти при обучении, меняя способ обработки прямого и обратного вычислений. Накопление градиентов меняет то, сколько примеров вносят вклад в одно обновление; контрольные точки меняют то, какие активации остаются резидентными между прямым и обратным проходами.
Накопление градиентов
Чтобы выполнять обучение с большими батчами на ускорителях с ограниченной памятью, системы делят эффективные батчи на меньшие последовательные микробатчи. На «Накоплении градиентов» видно, как градиенты микробатчей накапливаются в один общий тензор градиента до запуска обновления оптимизатора.
Накопление градиентов: три микробатча каждый вычисляют независимые потери и градиенты, которые суммируются в один объединенный градиент для одного обновления параметров. Это имитирует обучение с батчем втрое большего размера без необходимости держать в памяти все образцы одновременно.
В PyTorch накопление градиентов обычно реализуется делением потери каждого микробатча на число шагов накопления и вызовом optimizer.step() только после обработки всего эффективного батча. При таком соглашении об усреднении корректировка скорости обучения из-за одного лишь накопления не нужна. Реализация проходит пять шагов:
- Выполнить прямой проход для микробатча.
- Вычислить градиенты при обратном проходе.
- Накопить градиенты в буфере без обновления параметров модели.
- Повторить шаги 1–3 для всех микробатчей эффективного батча.
- Обновить параметры модели накопленными градиентами после обработки всех микробатчей.
Накопление градиентов может воспроизвести градиент большего батча при контролируемых допущениях. Для эффективного размера батча , где — число шагов накопления, а — размер микробатча, «равенство накопления градиентов» подтверждает, что накопленный градиент равен истинному градиенту батча:
Это равенство выполняется, когда вычисление для каждого примера одинаково и потеря усредняется согласованно. Правая часть показывает, что усреднение градиентов микробатчей (каждый вычислен по примерам) дает тот же результат, что и вычисление градиента по всем примерам сразу. Состояние-зависимые слои, такие как BatchNorm, стохастические операции, такие как dropout и аугментация данных, порядок накопления при конечной точности и расписания, индексированные по шагам, могут нарушить точное равенство, поэтому накопление на больших батчах все равно требует валидации.
Накопление градиентов обменивает память на время вычислений. «Компромиссы накопления градиентов» отделяет выигрыш по памяти от вычислительных и планировочных издержек, которые остаются.
| Измерение | Эффект |
|---|---|
| Память | вместо , что дает сокращение памяти активаций в раз |
| Вычисления | Общее число FLOP не меняется, так как все примеров по-прежнему обрабатываются |
| Время | проходов вперед и назад по микробатчам предшествуют каждому шагу оптимизатора; меньшие микробатчи могут снижать загрузку и добавлять накладные расходы на запуск |
Компромиссы накопления градиентов. Накопление снижает резидентный объем памяти активаций и сохраняет общую арифметику на уровне примеров. Стоимость по времени зависит от эффективности микробатчей, накладных расходов на запуск ядер и того, откладывается ли распределенная синхронизация до накопленного обновления.
Накопление сохраняет общую арифметику на уровне примеров, но может менять эффективность, потому что меньшие микробатчи иначе используют ускоритель и чаще запускают ядра. При распределенном накоплении с no_sync() одна синхронизация градиентов происходит после локальных микробатчей, а не после каждого. Модель из «накладных расходов накопления градиентов» задает время на одно обновление:
Здесь — измеренное время прямого и обратного проходов для микробатча , — время синхронизации, уплачиваемое за накопленное обновление, а — время шага оптимизатора. При распределенном обучении с параллелизмом данных стандартные обертки фреймворков автоматически запускают асинхронные хуки синхронизации градиентов на каждом обратном проходе. Если накапливать градиенты по микробатчам, оставленные активными хуки вызовут избыточные операции AllReduce на каждом микробатче; обертывание первых микробатчей в контекст model.no_sync() подавляет эту коммуникацию, и единственная коллективная операция AllReduce выполняется только на последнем, -м шаге.
Потеря времени относительно обработки эффективного батча сразу зависит от нагрузки. Ее нужно измерять, а не выводить из коэффициента сокращения памяти.
Когда накопление градиентов сочетается с распределенным параллелизмом данных на нескольких машинах, возникают дополнительные соображения по времени синхронизации градиентов и расчету эффективного размера батча на всем кластере. Продвинутые тексты по распределенным системам разбирают эти паттерны подробно.
Контрольные точки активаций
Контрольные точки активаций снижают использование памяти при обратном проходе, отбрасывая и выборочно пересчитывая активации. В стандартном обучении активации прямого прохода хранятся в памяти для вычисления градиентов при обратном распространении ошибки. Однако эти активации могут занимать гигабайты памяти, особенно в глубоких сетях.
Память активаций можно сократить, обменивая FLOP на пропускную способность памяти при обратном распространении ошибки. Сравните прямой проход в верхней строке «Контрольных точек активаций» с обратным проходом в нижней строке: видно, как промежуточные активации отбрасываются и пересчитываются по требованию из сплошных зеленых тензоров контрольных точек.
Контрольные точки активаций: обмен памяти на пересчет при обратном распространении ошибки позволяет обучать более глубокие нейронные сети. Сохраняя только часть активаций прямого прохода и пересчитывая остальные по требованию, метод снижает пиковые требования к памяти ценой увеличения времени обучения.
Реализация делает компромисс по емкости явным. Система делит модель на сегменты, сохраняет активации только на границах сегментов во время прямого прохода и пересчитывает промежуточные активации при обратном проходе, когда это нужно.
Фреймворки вроде PyTorch предоставляют инструменты, такие как torch.utils.checkpoint, чтобы упростить этот процесс, но стоимость пересчета остается. Контрольные точки наиболее эффективны для глубоких архитектур с десятками или сотнями слоев, таких как трансформеры или большие сверточные сети, где хранение активаций превышает емкость GPU раньше, чем исчерпывается арифметическая пропускная способность.
Синергия накопления градиентов и контрольных точек позволяет обучать более крупные и сложные модели. Накопление градиентов управляет ограничениями памяти, связанными с размером батча, тогда как контрольные точки оптимизируют использование памяти под промежуточные активации. Вместе эти приемы расширяют круг моделей, которые можно обучать на имеющейся аппаратуре.
Оптимальная стратегия размещения контрольных точек
Для сети с слоями, каждый из которых хранит байтов активаций, «Компромиссы памяти и вычислений контрольных точек» количественно показывает, как число и расположение контрольных точек определяет компромисс памяти и вычислений. Сублинейные стратегии контрольных точек могут снизить потребление памяти с до при лишь частичном росте полного времени вычислений, что позволяет обучать гораздо более глубокие модели на имеющейся аппаратуре.
| Стратегия | Стоимость памяти | Стоимость пересчета |
|---|---|---|
| Без контрольных точек | 0 прямых операций | |
| Сохранить одну границу | прямых операций | |
| k контрольных точек | прямых операций |
Компромиссы памяти и вычислений контрольных точек. Разные стратегии контрольных точек обменивают экономию памяти на накладные расходы пересчета. Оптимальное число контрольных точек балансирует эти факторы.
Приравнивая производную полной стоимости памяти по к нулю, получаем аналитический оптимум при . В стандартной схеме контрольных точек с это дает примерно треть дополнительных прямых вычислений в обмен на минимизацию объема активаций в рамках этой аналитической модели. Для GPT-2 с сорока восемью слоями трансформера операционная разница значительна: обучение без контрольных точек требует полного хранения активаций, тогда как равномерные контрольные точки ( контрольных точек) требуют , экономя 71 процент памяти активаций ценой примерно 33 процентов дополнительных вычислений шага (пересчетом одного прямого прохода по слоям без контрольных точек при обратном распространении ошибки).
Не все операции одинаково дороги для пересчета, что мотивирует выборочные контрольные точки. «Выборочное размещение контрольных точек» сравнивает, где объем памяти активаций достаточно велик, чтобы оправдать пересчет.
| Тип слоя | Стоимость памяти | Стоимость пересчета | Стратегия контрольных точек |
|---|---|---|---|
| Блоки внимания | Зависит от формы; материализованное внимание может добавить квадратичные промежуточные данные | Высокая и зависящая от длины последовательности | Контрольные точки на границах блоков, когда сохраненное состояние оправдывает пересчет |
| Блоки прямого распространения | Часто определяется расширенными скрытыми активациями | Высокая и зависящая от ширины | Контрольные точки, когда расширенные активации доминируют в памяти |
| Нормализация | Малые самостоятельные выходы | Низкая | Обычно обрабатывается внутри более крупного блока с контрольной точкой |
Выборочное размещение контрольных точек. Размещение сравнивает состояние, сохраненное на границе блока, с работой, нужной для его восстановления. Стоимость внимания и прямого распространения зависит от длины последовательности, ширины, реализации ядра и от того, используется ли уже экономное по памяти внимание.
Практическое правило — тратить пересчет на слои с высоким потреблением памяти, а не на операции, активации которых уже дешево сохранять.
Память и вычислительные выгоды
Накопление градиентов создает эффективный батч, больший резидентного микробатча, не храня одновременно все его активации. Больший эффективный батч снижает дисперсию выборки, но не гарантирует более быстрой сходимости или лучшего обобщения. Прием особенно ценен, когда нужный эффективный батч не умещается в памяти целиком.
Контрольные точки активаций значительно сокращают объем памяти промежуточных активаций при прямом проходе, позволяя обучать более глубокие модели. Отбрасывая и пересчитывая активации по мере необходимости, контрольные точки освобождают память для более крупных моделей, дополнительных слоев или данных более высокого разрешения. Этот компромисс критичен в архитектурах вроде трансформеров, которым нужна значительная память для промежуточных вычислений.
Оба приема повышают масштабируемость, сокращая память, необходимую до добавления аппаратуры. Возвращаясь к «Маячному примеру: обучение GPT-2», накопление градиентов необходимо, чтобы достичь целевого размера батча в рамках ограничений памяти V100.
Стратегия накопления градиентов GPT-2
Этот иллюстративный сценарий уровня GPT-2 использует принятые цены и длительности, чтобы показать накопление градиентов; он не воссоздает историческую стоимость обучения GPT-2.
Ограничения памяти
- По упрощенному рецепту памяти главы V100 с 32 ГБ вмещает микробатч на GPU .
- Резидентный эффективный батч потребовал бы 512 ÷ 4 = 128 GPU.
Конфигурация накопления
- Используем 8 GPU и накапливаем 16 микробатчей по 4 примера каждый.
- Каждый ускоритель обрабатывает 4 × 16 = 64 примера за обновление, давая глобальный эффективный батч 8 GPU × 64 = 512.
Контекст
no_sync()в распределенном обучении может отложить AllReduce до последнего микробатча.Анализ компромиссов
- Идеализированное календарное время: в 16 раз дольше, потому что меньше ускорителей выполняют ту же арифметическую работу
- Накладные расходы памяти: накопление обычно переиспользует буферы градиентов параметров, хотя служебные данные и временное хранение остаются
- Коммуникация: обе конфигурации синхронизируются один раз на обновление из 512 образцов, но число участников и топология различаются
- Стоимость при равной работе: $688 тыс. в любом случае, до учета эффектов загрузки и коммуникации
Почему это работает: при условиях эквивалентности, сформулированных выше, усредненные градиенты по примерам аддитивны. Каждый ускоритель сначала накапливает локальный градиент по своим 64 примерам:
Затем AllReduce усредняет эти локальные градиенты по 8 GPU, давая глобальный эффективный батч:
Операционное сравнение
Резидентная конфигурация:
- 128 GPU × 4 примера = 512 резидентных примеров за обновление
- Синхронизация градиентов охватывает 128 GPU
- Почасовая стоимость: 128 GPU × $16/час = $2 048/час
Конфигурация с накоплением:
- 8 GPU × (4 примера × 16 микробатчей) = 512 примеров за обновление
- Синхронизация градиентов происходит один раз за обновление на 8 GPU
- Почасовая стоимость: 8 GPU × $16/час = $128/час
- Снижение почасовой стоимости: $1 920/час, или 93,8 процента
Контрольный барьер
- Сохраните примеры и их порядок, нормировку потерь, состояние оптимизатора и расписание шагов, а также поведение стохастических слоев.
- Сравнивайте потерю или перплексию на отложенных данных и траекторию оптимизации по повторным прогонам, а не предполагайте, что один лишь эффективный батч гарантирует эквивалентное качество.
- Ожидайте малых ошибок округления из-за измененного порядка суммирования; требуйте сходимости в заранее заданном допуске, а не побитовой идентичности. Результат по перплексии здесь не предполагается.
Системный вывод: накопление снижает число ускорителей и почасовой расход, но идеальное масштабирование сохраняет объем машино-часов ускорителей; реальная стоимость зависит от загрузки и коммуникации.
«Цикл обучения с накоплением градиентов» ставит одну операцию AllReduce после шестнадцати локальных микробатчей, делая границу синхронизации явной.
Цикл обучения с накоплением градиентов: шестнадцать локальных микробатчей накапливаются перед одним AllReduce и обновлением оптимизатора.
optimizer.zero_grad()
for step in range(16): # Шаги накопления
micro_batch = next(dataloader) # 4 образца
loss = model(micro_batch) / 16 # Усредняем потерю эффективного батча
loss.backward() # Накапливаем градиенты
# Теперь градиенты соответствуют 64 локальным образцам
all_reduce(gradients, op=SUM) # Суммируем по 8 GPU
gradients /= 8 # Переводим сумму в глобальное среднее
optimizer.step() # Обновляем с эффективным батчем 512
Практические соображения
Накопление градиентов наиболее ценно, когда оптимальные размеры батча превышают емкость памяти GPU. Языковые модели на трансформерах часто используют эффективные батчи из сотен тысяч или миллионов токенов; если память позволяет разместить на устройстве лишь небольшое число последовательностей, накопление закрывает разрыв без дополнительной аппаратуры. Контрольные точки активаций дополняют это, позволяя строить более глубокие архитектуры, и обычно используются при обучении в масштабе трансформеров, а также в двойных сетевых конфигурациях с большой долей активаций, таких как генеративно-состязательные сети.
Оба приема вводят явные компромиссы. Контрольные точки активаций пересчитывают отброшенные активации при обратном распространении ошибки; при обычном сегментном контрольном сохранении каждая отброшенная активация обычно восстанавливается один раз, тогда как рекурсивные расписания могут вести себя иначе. Накопление градиентов снижает частоту обновления параметров, потому что каждое обновление следует за микробатчами. Когда потеря каждого микробатча делится на , накопленный градиент следует соглашению о среднем по эффективному батчу. Если же потери суммируются, градиенты нужно перемасштабировать перед шагом оптимизатора или соответственно изменить соглашение о скорости обучения. Соглашения фреймворков и кодовых баз различаются, поэтому нормировка — частый источник тонких ошибок.
Сравнение методов оптимизации обучения
Каждая оптимизация обучения нацелена на отдельное физическое узкое место внутри иерархии памяти и вычислений ускорителя. Асинхронная предвыборка выстраивает передачи с хоста на устройство по шине PCIe в конвейер с исполнением на ускорителе, не давая вычислительным движкам простаивать из-за голода по входным данным. Обучение в смешанной точности вдвое сокращает объем передач тензоров по шине HBM для весов и активаций, одновременно направляя матричную арифметику на специализированные тензорные блоки пониженной точности. FlashAttention дополняет эти системные вмешательства, устраняя квадратичное узкое место пропускной способности памяти самовнимания: тайлируя запросы, ключи и значения в SRAM на кристалле, он сокращает вспомогательную память внимания с до и сообщает об ускорении до 3 раз на исследованных нагрузках. Наконец, контрольные точки активаций и накопление градиентов управляют емкостью памяти устройства: контрольные точки отбрасывают промежуточные активации, чтобы восстановить их пересчетом при обратном проходе, а накопление градиентов делит большой логический батч на временные микробатчи, ограничивая пиковую резидентную память.
Поскольку пропускная способность обучения определяется связывающим ограничением системы, применение оптимизации к несвязывающей подсистеме не дает сквозного ускорения. Ускорение тензорной арифметики пониженной точностью или FlashAttention не сократит время шага, если конвейеры вычислений простаивают в ожидании батчей с хоста. И наоборот, расширение буферов предвыборки не дает выигрыша, когда исполнение ограничено емкостью HBM или пересчетом при обратном проходе. Поэтому профилирование должно определить, ограничена ли нагрузка вводом данных, емкостью памяти, пропускной способностью памяти или арифметической пропускной способностью, прежде чем выбирать вмешательство.
«Стратегии оптимизации» сравнивает три из этих базовых стратегий по механизмам, требованиям к аппаратуре и операционным компромиссам; FlashAttention выступает алгоритмическим дополнением внутри самого ядра внимания.
| Аспект | Предвыборка и перекрытие | Обучение в смешанной точности | Накопление градиентов и контрольные точки |
|---|---|---|---|
| Основная цель | Минимизировать задержки передачи данных и максимизировать загрузку ускорителя | Сократить хранение тензоров и ускорить подходящие операции пониженной точности | Преодолеть ограничения памяти при обратном распространении ошибки и обновлении параметров |
| Ключевой механизм | Асинхронная загрузка данных и параллельная обработка | Сочетание вычислений пониженной и повышенной точности | Имитация больших размеров батча и выборочное хранение активаций |
| Влияние на память | Увеличивает память под буфер предвыборки | Может сократить веса, активации и передаваемые тензоры | Сокращает резидентные активации; размер градиентов параметров не меняется |
| Скорость вычислений | Растет за счет сокращения простоя | Может ускорять подходящие операции FP16/BF16 на поддерживаемой аппаратуре | Может замедлиться из-за пересчета в контрольных точках |
| Масштабируемость | Высокая, особенно для больших наборов данных | Позволяет обучать более крупные модели | Позволяет обучать более глубокие модели на ограниченной аппаратуре |
| Требования к аппаратуре | Выигрывает от быстрого хранилища и многоядерных CPU | Поддерживаемые пути ускорителя пониженной точности | Работает на стандартной аппаратуре |
| Сложность реализации | Средняя (нужна настройка параметров предвыборки) | Низкая или средняя (при поддержке фреймворка) | Средняя (нужны аккуратная сегментация и накопление) |
| Основные выгоды | Сокращает время обучения, повышает загрузку аппаратуры | Более быстрое обучение, более крупные модели, меньше памяти | Позволяет брать большие батчи и более глубокие модели |
| Основные трудности | Настройка размеров буферов, рост потребления памяти | Возможна численная нестабильность; FP16 может требовать масштабирования функции потерь | Рост вычислительных накладных расходов, более медленные обновления параметров |
| Идеальные сценарии | Большие наборы данных, сложная предобработка | Крупные модели, особенно в NLP и компьютерном зрении | Батчи с ограничением памяти или модели с большой долей активаций |
Стратегии оптимизации. Таблица сравнивает предвыборку, смешанную точность и совместное использование накопления градиентов и контрольных точек. Первая нацелена на простои входа, вторая меняет хранение и подходящую арифметику, а третья обменивает меньшие резидентные наборы активаций на накладные расходы микробатчей или пересчета.
Таблица сравнивает приемы по отдельности; разбор GPT-2 показывает, как эти приемы сочетаются, когда одна модель должна уместиться в памяти, работать достаточно быстро и оставаться в реалистичном бюджете стоимости.
Разбор оптимизации GPT-2
Обучение GPT-2 (1,5 млрд параметров) на одном GPU V100 выявляет физические границы, которые определяют оптимизацию больших моделей: размещение тензоров сразу превышает емкость памяти ускорителя, а наивные входные конвейеры оставляют вычислительные движки без данных. Проследив этот диагностический путь на одном устройстве, мы устанавливаем осуществимость по памяти и насыщение вычислений до масштабирования на кластер из нескольких ускорителей.
Оптимизация GPT-2 на V100
Шаг 1: установить исходный объем памяти.
Трасса начинается с GPT-2 XL с 1,5 млрд параметров, размером батча 4, длиной последовательности 1024, тензорами FP32 везде и синхронным загрузчиком данных в один поток. Это намеренно ограниченная конфигурация: достаточно маленькая, чтобы обсуждать ее на одном V100, но достаточно большая, чтобы первый сбой был немедленным и однозначным. Этот разбор использует батч 4, ту же конфигурацию, что и в врезке о смешанной точности (прикидочный расчет: «Экономия памяти при смешанной точности GPT-2»); «Иллюстративный сценарий обучения GPT-2» приводит эквиваленты для батча 32 (базовый уровень FP32 — 597,8 ГБ, оптимизированный — 95,7 ГБ), которые превышают один GPU даже после оптимизации. При размере батча 4 базовый уровень FP32 требует 95,7 ГБ, поэтому прогон не проходит ограничение машины на V100 с 32 ГБ еще до того, как важна пропускная способность.
Шаг 2: применить смешанную точность.
Первое вмешательство нацелено на осуществимость по памяти, а не на скорость. Автоматическая смешанная точность (AMP) выполняет прямой и обратный проходы в 16-битной точности, вдвое сокращая динамический объем активаций. Поскольку численная устойчивость требует хранить 32-битные мастер-веса и моменты Adam в FP32, статическое хранение параметров и оптимизатора не меняется и остается 16 байтов на параметр. Сокращение объема активаций вдвое снижает пиковую память до 59,9 ГБ, то есть на 37,5 процента, но выделение все еще превышает физическую емкость ускорителя на 32 ГБ.
Шаг 3: добавить контрольные точки градиентов.
Поскольку статическое состояние не может уменьшиться дальше, не меняя динамику оптимизатора, контрольные точки градиентов атакуют оставшийся объем активаций. Вместо того чтобы сохранять активации прямого прохода на каждом слое для обратного распространения ошибки, среда исполнения отбрасывает промежуточные состояния и пересчитывает их по требованию при обратном проходе. Контрольная точка на каждом четвертом слое дает четырехкратное сокращение памяти активаций, доводя общий объем тензоров до 33 ГБ и наконец помещаясь в физическую емкость устройства. При модели пересчета по равным слоям это сокращение памяти требует примерно на 33 процента больше прямых арифметических операций; рабочий прогон должен проверить, что временные выделения рабочей памяти и фрагментация аллокатора остаются в пределах доступного запаса.
Шаг 4: изучить иллюстративный профиль пропускной способности.
Размещение модели в памяти устройства решает проблему емкости, но не гарантирует эффективного исполнения. Профилирование уже исполнимой модели показывает разбивку времени итерации по подсистемам:
- Загрузка ускорителя: 45 процентов
- Загрузка данных: 40 процентов времени итерации
- Вычисления: 35 процентов времени итерации
- Передачи памяти: 25 процентов времени итерации
Эти измерения профиля сдвигают диагностический фокус с емкости памяти машины (M) на конвейер данных (D) в терминах D·A·M. Поскольку 40 процентов времени итерации уходят на ожидание батчей, подготовленных на хосте, дальнейшие оптимизации памяти ускорителя не улучшат календарную пропускную способность обучения, пока не будет решен голод данных.
Шаг 5: применить предвыборку и оптимизацию конвейера данных.
Устранение голода входных данных требует перекрытия подготовки данных на хосте с вычислениями на ускорителе. В этом сценарии настройка загрузчика данных на восемь рабочих процессов распараллеливает декодирование образцов на стороне CPU, закрепленная (page-locked) память хоста позволяет асинхронные передачи DMA по шине PCIe, а коэффициент предвыборки 2 удваивает буферизацию предстоящих батчей в очередях хоста и устройства. Скрытие задержек предобработки и передачи на хосте за выполнением ядер повышает загрузку ускорителя с 45 до 85 процентов, превращая нагрузку, голодающую по входным данным, в прогон с насыщенными вычислениями.
«Иллюстративный профиль оптимизации GPT-2» сопоставляет неисполнимый наивный базовый уровень с оптимизированной конфигурацией на одном GPU.
Показатель Наивный Оптимизированный Улучшение Память 95,7 ГБ 33 ГБ снижение в 2,9 раза Загрузка ускорителя Н/Д 85% Станет обучаемым Пропускная способность Н/Д 1 200 токенов/с — Время на эпоху Н/Д 8,3 часа — Иллюстративный профиль оптимизации GPT-2: значения памяти для батча 4 вычислены в разборе; загрузка, пропускная способность и время эпохи — принятые значения сценария, а не результаты бенчмарков. «Иллюстративный сценарий обучения GPT-2» приводит итоги сценария для батча 32.
Системный вывод: оптимизация обучения следует строгой цепочке диагностических зависимостей: сначала решить вопрос осуществимости по памяти, затем пропускной способности, а голод данных устранить раньше, чем настраивать ядра. Когда емкость и простои входа перестают ограничивать исполнение, повторное профилирование определяет, ограничена ли производительность ядер пропускной способностью памяти или арифметической пропускной способностью, прежде чем менять размер батча или архитектуру модели.
Этот разбор показывает, почему оптимизация обучения — последовательная диагностическая дисциплина, а не произвольный набор приемов. Каждое вмешательство напрямую устраняет связывающее физическое ограничение, выявленное предыдущим измерением: смешанная точность вдвое сокращает хранение активаций, контрольные точки градиентов принимают 33 процента дополнительных вычислений ради сокращения памяти в 2,9 раза, которое укладывается в физическую емкость устройства, а асинхронная предвыборка устраняет остановки передач по PCIe, как только исполнение начинается. Когда осуществимость на одном ускорителе и насыщение вычислений установлены, следующая задача — оценить, как эти накапливающиеся оптимизации масштабируются на кластер из нескольких ускорителей по времени исполнения, энергопотреблению и общей стоимости обучения.
Сводка влияния оптимизаций
Пример GPT-2 показывает, как целевые приемы могут сочетаться. Его значения памяти следуют модели тензоров главы, тогда как входные данные о времени, мощности, цене электроэнергии и углеродоемкости сети задают иллюстративный сценарий работы, а не измеренный прогон GPT-2.
«Иллюстративный сценарий обучения GPT-2» собирает результаты, вытекающие из этих допущений по уровню кластера.
| Показатель | Базовый FP32 | Оптимизированный | Примененный метод |
|---|---|---|---|
| Параметры | 6 ГБ | 3 ГБ | Смешанная точность (FP16) |
| Градиенты | 6 ГБ | 3 ГБ | Смешанная точность (FP16) |
| Мастер-веса | 0 ГБ | 6 ГБ | Накладные расходы AMP |
| Состояние оптимизатора (Adam) | 12 ГБ | 12 ГБ | Без изменений (моменты FP32) |
| Активации (батч=32) | 573,8 ГБ | 71,7 ГБ | Контрольные точки градиентов + FP16 |
| Итого память | 597,8 ГБ | 95,7 ГБ | — |
| Время обучения (32 V100) | 14 дней | 8,4 дня | Предвыборка данных + загрузка |
| Энергопотребление | 3 914 кВт·ч | 2 348 кВт·ч | Принятая постоянная мощность кластера на протяжении каждого прогона |
| Стоимость электроэнергии ($0,10/кВт·ч) | $391,4 | $234,8 | — |
| Углеродный след | 1,7 т | 1,0 т | Средняя по региону сеть (0,43 кг/кВт·ч) |
Иллюстративный сценарий обучения GPT-2: модель тензоров дает заявленные итоги по памяти. Длительность обучения, постоянная мощность кластера, PUE, цена электроэнергии и углеродоемкость сети — допущения сценария; при этих допущениях сокращение времени работы пропорционально снижает энергопотребление и выбросы, привязанные к местоположению.
Как показано в «Иллюстративном сценарии обучения GPT-2», принятые входные данные дают сокращение памяти в 6 раз, сокращение календарного времени в 1,7 раза и снижение энергопотребления на 40 процентов при постоянной смоделированной мощности. На практике энергию и стоимость нужно считать по измеренному времени работы и мощности, поскольку более высокая загрузка может менять потребляемую мощность кластера.
Оптимизации одного ускорителя накапливаются, насыщая устройство: смешанная точность максимизирует пропускную способность тензорных ядер, FlashAttention устраняет трафик промежуточного внимания за пределами кристалла, контрольные точки градиентов сжимают объем активаций, а асинхронная предвыборка скрывает задержку ввода-вывода хоста. Однако даже полностью оптимизированные нагрузки с бюджетами в сотни экзафлоп остаются ограниченными арифметической пропускной способностью отдельного чипа.
Масштабирование за пределы емкости вычислений или памяти одного устройства требует распределения вычислений по нескольким ускорителям. Этот архитектурный переход вводит накладные расходы межустройственной коммуникации, барьеры коллективной синхронизации и ограничения отказоустойчивости, которые становятся главными факторами эффективности масштабирования кластера.
Масштабирование систем обучения
Разбор GPT-2 моделирует, как смешанная точность и контрольные точки сводят бюджет тензоров батча 4 к 33 ГБ, близко к емкости V100 в 32 ГБ до учета рабочих областей и накладных расходов аллокатора. При батче 32 смоделированный итог снижается с 597,8 ГБ до 95,7 ГБ, но все еще превышает этот V100. Ускорители с большей памятью могут сдвинуть границу. Однако модель на 70 млрд параметров требует около 140 ГБ только для весов в FP16 и существенно больше для состояния полного обучения с полным набором параметров, что обосновывает шардирование, выгрузку или несколько устройств.
Некоторые модели превышают память одного GPU раньше, чем что-либо еще становится важным.
Когда выбранная нагрузка все еще превышает память или расписание одного устройства, распределение по устройствам дает совокупную память и вычислительную мощность. Другие ответы включают сокращение модели, батча, длины последовательности или объема обучения; выгрузку состояния; и эффективную по параметрам адаптацию. Масштабирование за пределы одного устройства начинается с конфигураций из нескольких GPU внутри одной машины и может распространяться на несколько узлов. Основные стратегии параллелизма имеют разные компромиссы по коммуникации; полное изложение реализации распределенного обучения выходит за рамки этой главы.
Не все нагрузки одинаково выигрывают от добавления GPU. Соотношение полезных вычислений, коммуникации, дисбаланса и синхронизации определяет эффективность масштабирования. «Налог на коммуникацию» моделирует этот компромисс формулировкой в духе закона Амдала, где немасштабируемые накладные расходы создают связывающий потолок пропускной способности. Расширяющийся разрыв между идеальным линейным ускорением и достигнутым ускорением наглядно показывает налог на коммуникацию, уплачиваемый при масштабе.
Налог на коммуникацию: модель в духе закона Амдала сравнивает идеальное линейное масштабирование с нагрузками, имеющими разные доли немасштабируемой коммуникации и синхронизации. Реальные накладные расходы коммуникации динамически растут с числом устройств, топологией сети, размером сообщений и эффективностью перекрытия.
Расширяющийся разрыв красной кривой от пунктирной идеальной линии — это налог на коммуникацию, сделанный видимым; сокращение этого разрыва именно и призваны обеспечивать распределенные стратегии из раздела «Обучение на одном узле с несколькими GPU».
Обучение на одном узле с несколькими GPU
Обучение на нескольких GPU внутри одного узла закладывает базовые архитектурные паттерны распределенного исполнения. AlexNet26 (Krizhevsky et al., 2012) разделила свои сверточные слои между двумя GPU GTX 580, потому что ограничение памяти устройства в 3 ГБ не позволяло выполнить модель на одном чипе, и связность между GPU стала немедленным архитектурным ограничением. Ограничение многоускорительных топологий межсоединениями внутри одного узла (такими как PCIe или NVLink) позволяет выделить базовые стратегии параллелизма до введения сетевых структур между стойками.
Две базовые стратегии — параллелизм данных и параллелизм моделей — представляют принципиально разные выборы разбиения: параллелизм данных реплицирует модель и делит данные, тогда как параллелизм моделей делит состояние или вычисления модели. Это различие определяет требования к памяти, паттерны коммуникации и поведение масштабирования.
Параллелизм данных
Параллелизм данных реплицирует всю модель на каждом GPU, причем каждый обрабатывает разные батчи. После локального вычисления градиентов GPU синхронизируются усреднением градиентов. «Параллелизм данных» показывает поток данных: входные данные делятся на непересекающиеся батчи, каждый ускоритель независимо выполняет прямой и обратный проходы, затем градиенты агрегируются перед обновлением общей модели.
Параллелизм данных: каждый GPU держит полную копию модели, обрабатывает свой шард данных и синхронизирует градиенты. Пропускная способность может приближаться к линейному масштабированию, только пока вычисления доминируют над издержками синхронизации, ввода и дисбаланса.
Когда модель и ее состояние оптимизатора комфортно умещаются в памяти одного устройства, параллелизм данных служит основным базисом масштабирования, потому что локальные ядра прямого и обратного проходов работают на нативной пропускной способности памяти без синхронизации между устройствами. Коммуникация происходит исключительно при агрегации градиентов. Исторически фреймворки поддерживали исполнение на нескольких GPU внутри одного узла с помощью многопоточных оберток вроде DataParallel (DP) в PyTorch. Однако этот однопроцессный дизайн страдает от двух серьезных архитектурных узких мест: среда исполнения Python остается ограниченной глобальной блокировкой интерпретатора (GIL), а главный координатор (GPU 0) последовательно раздает мини-батчи и собирает выходы по PCIe, насыщая пропускную способность межсоединения хост–устройство и создавая сильные дисбалансы вычислений и памяти. Современные системы заменяют его многопроцессными архитектурами, такими как DistributedDataParallel (DDP) в PyTorch и MirroredStrategy в TensorFlow. Запуская независимый процесс Python на каждый ускоритель, DDP полностью устраняет конкуренцию за GIL; каждый процесс держит собственную реплику модели и локальный оптимизатор, полагаясь на децентрализованные коллективные операции AllReduce, которые группируют градиенты в непрерывные буферы и перекрывают синхронизацию непосредственно с вычислением обратного прохода.
У неразделенного параллелизма данных есть жесткое ограничение: каждый GPU держит полную реплику модели и, как правило, свое локальное состояние оптимизатора. Модель на 7 млрд параметров занимает 14 ГБ только под веса в FP16, до учета градиентов, состояний оптимизатора или активаций. Шардированный параллелизм данных (например, Zero Redundancy Optimizer, или ZeRO) распределяет это состояние по устройствам: ZeRO-1 шардирует состояние оптимизатора, ZeRO-2 — градиенты, а ZeRO-3 (или FSDP) — параметры модели; иначе модель, которая превышает локальную память, требует конвейерного или тензорного разбиения.
Параллелизм моделей
Параллелизм моделей разбивает саму модель между GPU, что становится необходимым, когда модель превышает память одного GPU. AlexNet применила раннюю форму этой стратегии: определенные сверточные слои выполнялись на GPU 1, а другие — на GPU 2, и активации передавались по PCIe только на границах слоев. «Параллелизм моделей» показывает пути прямого и обратного проходов: данные движутся через разделы модели на разных устройствах, а градиенты во время обучения текут назад.
Параллелизм моделей: модель разбита по устройствам, а промежуточные активации передаются между ними. Это позволяет обучать модели больше памяти одного GPU ценой последовательных зависимостей.
Параллелизм данных и параллелизм моделей
Когда выбранная нагрузка распределяется по устройствам, разбиение может делить примеры, состояние модели, слои или тензорные операции. Для модели с параметрами и размером батча параллелизм данных и параллелизм моделей дают две отправные точки.
Параллелизм данных (делим батч): при фиксированном глобальном батче каждый из рабочих обрабатывает примерно примеров, но каждый рабочий держит реплику модели и, как правило, связанное с ней состояние обучения. Плотная коммуникация градиентов пропорциональна на каждое обновление. Масштабирование отходит от идеала по мере уменьшения локальных батчей или роста затрат на синхронизацию и ввод.
Параллелизм моделей (делим вычисления модели): каждый ускоритель хранит и вычисляет часть модели. Равное разбиение может давать около параметров на рабочего, но эмбеддинги, буферы, дисбаланс и реплицированное состояние меняют эту оценку. Коммуникация зависит от разбиения: поэтапный конвейерный параллелизм обменивается активациями на границах стадий, тогда как тензорный параллелизм выполняет коллективные операции внутри разбитых слоев.
Системный вывод: параллелизм данных — самый простой кандидат, когда полное состояние обучения помещается у каждого рабочего и нужна большая пропускная способность. Разбиение состояния модели, конвейерное или тензорное становится необходимым, когда не помещается, часто в сочетании с параллелизмом данных.
Когда модель превышает память одного ускорителя, ее глубину можно разбить по последовательным устройствам. «Послойное разбиение модели» иллюстрирует такое назначение стадий, отображая непрерывные группы блоков трансформера на разные устройства по цепочке исполнения.
Послойное разбиение модели: распределение последовательных слоев трансформера по последовательным устройствам ограничивает сетевую коммуникацию промежуточными активациями (прямой проход) и граничными градиентами (обратный проход). Однако последовательные зависимости слоев оставляют последующие устройства простаивающими во время прямого прохода, если микробатчи не конвейеризованы.
Фундаментальное узкое место наивного послойного разбиения — сериализация устройств. Поскольку вычисление слоев строго последовательно, Устройство 1 считает слои 1–6, пока Устройства 2–4 простаивают в ожидании прямых активаций. При обратном проходе зависимость меняется на обратную: Устройство 4 считает первым, а вышестоящие устройства ждут возвращающихся градиентов. Эта длительность простоя составляет пузырь конвейера, который ограничивает теоретическую загрузку аппаратуры величиной при наивном последовательном исполнении. Чтобы смягчить этот простой, нужно либо конвейеризовать микробатчи по стадиям, либо разбивать размерности тензоров внутри слоев, чтобы все устройства вычисляли одновременно.
Внутри узла GPU могут обмениваться данными через высокоскоростные каналы, такие как NVLink27 (до 900 ГБ/с совокупной двунаправленной пропускной способности для представленной конфигурации H100). Эффективная коллективная пропускная способность зависит от топологии и конкуренции и ниже необработанной совокупной спецификации канала. Параллелизм данных передает градиенты коллективными операциями AllReduce, тогда как послойный параллелизм моделей передает активации точка-точка на границах разделов. Выбор стратегии требует балансировать эти паттерны коммуникации и объемы памяти с физической пропускной способностью межсоединения топологии узла.
Масштабирование за пределы одного узла
Когда объем параметров модели, состояние оптимизатора или длительность обучения превышают емкость узла из 8 ускорителей, распределенное обучение распространяется на несколько машин. Этот шаг вводит фундаментальную иерархию пропускной способности: ускорители внутри узла обмениваются данными по плотным высокоскоростным структурам, таким как NVLink, тогда как распределенные рабочие должны синхронизироваться через внешние сетевые структуры (такие как Ethernet или InfiniBand), которые предлагают заметно меньшую пропускную способность, большую задержку и конкуренцию за коммутаторы. Получающийся разрыв пропускной способности превращает синхронную редукцию градиентов в параллелизме данных в повторяющееся узкое место перемещения данных на критическом пути.
Физика синхронизации
Вспомните инвариант энергии перемещения из раздела «Инженерия данных»: перемещение данных стоит заметно больше энергии и времени, чем соседняя арифметика. В распределенном обучении эта асимметрия задает налог на коммуникацию.
Синхронизация градиентов между ускорителями перемещает мегабайты и гигабайты по межсоединению на каждом шаге обучения. Непокрытое коммуникацией время напрямую снижает загрузку аппаратуры, а мощность приемопередатчиков и коммутаторов раздувает энергетический бюджет кластера; это разные системные издержки. Исполнение в смешанной точности («Обучение в смешанной точности») и сжатие градиентов сокращают объемы передач за счет более узких численных форматов, разреженности, квантования или дельта-кодирования, снимая оба ограничения.
Внутри узла высокоскоростные межсоединения позволяют перекрывать синхронизацию градиентов с вычислением обратного прохода. Однако переход через границы узлов переводит коммуникацию в сетевую структуру, где доступная пропускная способность на один-два порядка ниже. При синхронном параллелизме данных AllReduce28 агрегирует градиенты между рабочими; когда пропускная способность сети не соответствует пропускной способности вычислений ускорителя, непокрытое коммуникационное время доминирует в шаге и останавливает арифметическое исполнение.
Сетевая стена
Задача: команда масштабирует обучение на 8 GPU, по одному на узел, соединенные сетью 100 Гбит/с. Является ли сеть узким местом?
Механизм: для модели на 7 млрд параметров с градиентами FP16:
- Размер градиента (FP16): 14 ГБ за шаг.
- Стоимость AllReduce: кольцевой AllReduce передает шарды градиента по логическому кольцу, поэтому каждый рабочий в итоге отправляет почти две полные копии градиента: , что для 8 GPU равно 1,75. Это дает 1,75 × 14 ГБ = 24,5 ГБ суммарно.
- Нижняя граница только по пропускной способности: при 12,5 ГБ/с на рабочего в сети 100 Гбит/с задержка синхронизации составляет 24,5 ГБ / 12,5 ГБ/с 1,96 с.
- Сравнение с вычислениями: если неперекрытая работа прямого и обратного проходов занимает 1 с, задержка коммуникации 1,96 с доминирует.
Системный вывод: сеть становится стеной, когда , и эффективность ускорителя падает примерно до 33,8 процента. Меры смягчения включают сжатие градиентов (сокращающее ), примитивы кольцевого AllReduce (Sergeev and Balso, 2018) и иерархические топологии, которые ограничивают частые передачи быстрыми внутриузловыми каналами (NVLink на 900 ГБ/с против 12,5 ГБ/с между узлами).
Поскольку межузловые структуры ограничивают частую синхронизацию, масштабирование требует соотнести каждый паттерн коммуникации с подходящим уровнем пропускной способности. Конвейерный параллелизм разбивает слои модели между последовательными устройствами и решает проблему простаивающих пузырей конвейера наивного параллелизма моделей через микробатчи. Вместо последовательной обработки целого батча глобальный батч делится на меньшие микробатчи, которые проходят через стадии конвейера потоком. Пока последующая стадия выполняет прямой проход над ранним микробатчем, предыдущие стадии одновременно обрабатывают следующие. Расписание конвейера управляет этой конкурентностью: хранение большего числа микробатчей в полете сокращает простой ускорителя, но требует от каждой стадии держать активации в памяти до завершения соответствующего обратного прохода. GPipe29 выполняет все прямые микробатчи, прежде чем опустошить обратные проходы, тогда как PipeDream чередует один прямой проход с одним обратным (1F1B), ограничивая резидентный объем активаций (Huang et al., 2019; Narayanan et al., 2019).
Тензорный параллелизм работает на более мелкой гранулярности: вместо назначения целых слоев разным устройствам он шардирует отдельные матричные операции между устройствами внутри слоя. (Параллелизм последовательностей развивает этот принцип, шардируя тензоры активаций по измерению последовательности при обучении трансформеров с длинным контекстом.) В блоке прямого распространения трансформера Megatron-LM делит первую проекцию весов по столбцам, а вторую — по строкам (Shoeybi et al., 2019). Каждый ускоритель вычисляет на срезе скрытого измерения без промежуточной коммуникации; в конце блока требуется лишь одна операция AllReduce по группе тензорного параллелизма, чтобы сложить частичные выходы. Поскольку этот паттерн требует коллективной синхронизации на каждой операции прямого и обратного прохода, тензорный параллелизм накладывает экстремальную частоту коммуникации, что строго ограничивает его развертывание быстрыми внутриузловыми каналами, такими как NVLink.
Гибридные стратегии сочетают тензорный, конвейерный и параллелизм данных (3D-параллелизм), чтобы масштабировать большие модели на физических кластерах. «Размещение гибридного параллелизма» кратко показывает получающуюся эвристику размещения: отображать самую частую коллективную коммуникацию на самые быстрые физические каналы, оставляя более медленные уровни для более грубых границ синхронизации.
| Стратегия | Типичное размещение | Паттерн коммуникации |
|---|---|---|
| Тензорный параллелизм | Внутри узла | Частая коммуникация, использующая высокую пропускную способность NVLink |
| Конвейерный параллелизм | Между узлами в стойке | Умеренная коммуникация на границах слоев |
| Параллелизм данных | Между стойками | Синхронизация градиентов один раз за итерацию |
Размещение гибридного параллелизма. Распространенная эвристика размещает тензорный параллелизм внутри узлов, конвейерный — внутри стоек, а параллелизм данных — между стойками. Фактическое размещение зависит от модели и топологии.
Разбиение вычислений по кластеру в итоге превращает обучение из чисто арифметической задачи в многоуровневую иерархию перемещения данных. Хотя коллективные алгоритмы коммуникации, серверы параметров и отказоустойчивое планирование позволяют моделям масштабироваться на тысячи ускорителей, их устойчивая эффективность остается ограниченной отношением пропускной способности вычислений ко времени сетевых передач. Чтобы понять, как современные платформы обучения балансируют эти ограничения, нужно рассмотреть историческое сближение высокопроизводительных научных вычислений и инфраструктуры масштаба складов, которое породило сегодняшние аппаратные структуры для ИИ.
Эволюция инфраструктуры обучения
Стратегии параллелизма в разделах «Обучение на одном узле с несколькими GPU» и «Масштабирование за пределы одного узла» представляют сближение разных архитектурных традиций. Современные платформы обучения объединяют парадигмы, сложившиеся в четырех эпохах вычислений, каждая из которых сформирована физическими ограничениями и доминирующими нагрузками своего времени.
Обучение нейронных сетей сочетает требования, одновременно пришедшие из высокопроизводительных вычислений (HPC) и систем масштаба складов. От HPC обучение наследует ядра плотного матричного умножения (GEMM), работающие вблизи пределов вычислений ускорителя и требующие тесно синхронизированного параллельного исполнения между устройствами. От вычислений масштаба складов многодневные задания обучения наследуют необходимость оркестрации всего кластера, асинхронного приема данных и автоматического восстановления после сбоев на склонных к отказам узлах. Стандартное синхронное обучение с параллелизмом данных выполняет глобальную коллективную операцию AllReduce на каждом шаге оптимизатора. Чтобы ускорители получали арифметическую работу без простоев из-за коммуникации, нужны высокоскоростные межсоединения (такие как NVLink и InfiniBand) и среды исполнения прямого доступа к памяти, которые обходят накладные расходы операционной системы хоста. «Эволюция систем вычислений» прослеживает хронологическое развитие через эти эпохи вычислений.
Эволюция систем вычислений: четыре перекрывающиеся эпохи размещают представительные вехи систем на временной шкале. Перекрытие важно: AI-гиперкомпьютинг опирается на параллельные численные методы HPC и распределенную координацию вычислений масштаба складов, а не заменяет их.
Этот переход к AI-гиперкомпьютингу отражает структурное расхождение в паттернах доступа к памяти и семантике синхронизации. Научные HPC-симуляции обычно проходят по регулярным пространственным сеткам с умеренным рабочим состоянием на степень свободы, тогда как сервисы масштаба складов обрабатывают независимые, слабо связанные запросы по стандартному Ethernet. Напротив, обучение нейронной сети сталкивается с огромным объемом состояния: ускоритель должен держать веса модели, градиенты, состояния оптимизатора (такие как буферы импульса и дисперсии) и промежуточные активации, сохраненные для обратного прохода. Когда это совокупное состояние превышает емкость High Bandwidth Memory (HBM) одного устройства, модель нужно разбить по нескольким ускорителям, меняя локальное давление на память на накладные расходы межустройственной коммуникации. «Характеристики эпох вычислений» сопоставляет требования к нагрузке, иерархии памяти и модели исполнения в этих четырех архитектурных эпохах.
| Эпоха | Основная нагрузка | Паттерны памяти | Модель обработки |
|---|---|---|---|
| Мейнфрейм | Последовательная пакетная обработка | Простая иерархия памяти | Один поток инструкций |
| HPC | Научное моделирование | Регулярный доступ к массивам | Синхронизированный параллелизм |
| Масштаб складов | Интернет-сервисы | Разреженный, нерегулярный доступ | Независимые параллельные задачи |
| AI-гиперкомпьютинг | Обучение нейронных сетей | Тяжелые по параметрам, смешанный доступ | Гибридный параллелизм, распределенный |
Характеристики эпох вычислений. Каждая эпоха была оптимизирована под свои паттерны нагрузки, и современные системы обучения наследуют требования от нескольких предшественников. AI-гиперкомпьютинг уникально сочетает параллельные численные вычисления HPC с распределенной обработкой масштаба складов, добавляя специализированную поддержку градиентной оптимизации и управления большим состоянием параметров, центральных для обучения нейронных сетей.
Когда масштабировать: физический потолок
Знать, как разбить вычисления по устройствам, — это не то же самое, что знать, когда распределенное исполнение оправдано. Распределение состояния вводит накладные расходы коммуникации, барьеры синхронизации и эксплуатационные режимы сбоев. Сначала исчерпав оптимизации одного узла, можно понять, является ли узкое место принципиально алгоритмическим или вызвано емкостью. Настройка по профилю должна оценить пути исполнения с пониженной точностью («Обучение в смешанной точности»), когда позволяет численная устойчивость, накопление градиентов («Накопление градиентов и контрольные точки»), чтобы синтезировать целевые размеры батчей без взрыва активаций, контрольные точки активаций («Механика накопления градиентов и контрольных точек»), чтобы обменять избыточные прямые вычисления на запас памяти, и перекрывающуюся предвыборку данных («Предвыборка данных и перекрытие»), когда прием на хосте ограничивает критический путь.
«Рекомендации по выбору масштаба» выстраивает эту последовательность как поиск ресурса, привязанный к измеренным аппаратным узким местам, а не к произвольным пороговым значениям параметров.
| Наблюдаемое ограничение | Кандидатный подход | Обоснование |
|---|---|---|
| Состояние обучения помещается в одно устройство, и время приемлемо | Один GPU | Минимизирует коммуникацию и операционную сложность |
| Состояние или пропускная способность превышает одно устройство, но помещается в один узел | Один узел с несколькими GPU | Использует быстрые локальные межсоединения до выхода в сеть |
| Требуемое состояние или расписание превышает один узел | Многоузловой кластер | Добавляет совокупную память или вычисления ценой коммуникации |
| Скорость подачи входа ниже потребности ускорителя | Параллельный или распределенный входной конвейер | Добавляет входную пропускную способность там, где профилирование показывает необходимость |
Рекомендации по выбору масштаба. Выбирайте наименее распределенную конфигурацию, которая удовлетворяет измеренным требованиям памяти, пропускной способности и расписания. Архитектура модели, состояние обучения, входной конвейер, аппаратура и топология — все влияют на границу.
Только когда профилирование выявляет стойкие узкие места вопреки этим оптимизациям, стоит рассматривать многоустройственные подходы. У каждого аппаратного устройства есть физический потолок: нагрузка, требующая FLOP, не может быть выполнена на одном ускорителе в практическом графике обучения, как бы тщательно он ни был настроен. Переход к обучению на нескольких устройствах становится необходимым, когда достигнут один из трех жестких пределов:
- Исчерпание памяти: веса модели, градиенты, состояния оптимизатора и активации превышают VRAM одного GPU. Для модели на 70 млрд параметров одни только веса в FP16 требуют примерно 140 ГБ, что превышает конфигурации 80 ГБ ускорителей A100 и H100 SXM и оставляет мало запаса или не оставляет его вовсе на более емких вариантах вроде H100 NVL (94 ГБ) и H200 (141 ГБ), как только учтено состояние обучения.
- Календарное время обучения: оценка времени на одном устройстве превышает фактический срок проекта. При устойчивых FLOP/s нагрузка, требующая FLOP, заняла бы около 32 лет.
- Пропускная способность входа: входной конвейер не может поддерживать совокупную скорость потребления ускорителями. Один лишь размер набора данных не определяет этот предел; важны повторное использование, сжатие, локальность, стоимость преобразований и пропускная способность хранилища.
Эти три предела технические, но масштабирование несет стоимость, выходящую за рамки сложности и емкости. Добавление устройств усиливает энергопотребление и воздействие обучения на окружающую среду, поэтому оптимизация эффективности становится экологической задачей не меньше, чем задачей производительности.
Углеродный след обучения
Контекст: обучение больших моделей требует значительной энергии и вычислений. Физический потолок проявляется в энергетическом следствии железного закона (), которое количественно выражает экологический масштаб:
- Нагрузка: обучение модели на 7 млрд параметров на 1 трлн токенов.
- Вычисления: .
- Эффективность: устойчивые 156 TFLOP/s на A100 (расчетная тепловая мощность 400 Вт).
- Время исполнения: 3,04 дня на 1 024 GPU.
- Энергетический след: дает (1 024 GPU 400 Вт + 128 хостов 200 Вт) 73 ч 31 784,2 кВт·ч.
Последствия: потребленная энергия равна 35,3 месяца среднего бытового потребления электроэнергии.
Системный урок: удвоение пропускной способности аппаратуры при постоянной мощности кластера вдвое сокращает время исполнения и полную энергию . При средней углеродоемкости сети удвоение эффективности экономит примерно 15 892,1 кВт·ч электроэнергии и предотвращает 6,8 т выбросов. Экологические аудиты должны измерять , а не полагаться только на метрики загрузки GPU.
Масштабирование меняет связывающее ограничение, а не убирает его: параллелизм данных покупает пропускную способность, параллелизм моделей — емкость памяти, конвейерный параллелизм — загрузку, а тензорный параллелизм — осуществимость на масштабе слоя, но каждый добавляет стоимость коммуникации и координации. Детали реализации распределенного обучения на нескольких узлах, включая примитивы коллективной коммуникации, механизмы отказоустойчивости и эластичное планирование, прямо опираются на принципы одной машины, рассмотренные во всей этой главе, и подробно разбираются в продвинутых текстах по распределенным системам.
Решения о масштабировании
Масштабирование меняет вычислительные узкие места на коммуникационные.
- Жесткие пределы: можете ли вы определить, какой предел связывает конкретный прогон обучения: емкость памяти, календарное время или скорость подачи входа?
- Сначала один узел: можете ли вы объяснить, почему смешанную точность, накопление, контрольные точки и предвыборку нужно исчерпать, прежде чем добавлять устройства?
- Параллелизм данных или моделей: для модели, которая не помещается на один GPU, можете ли вы обосновать, почему параллелизм данных не работает и что должен разбивать параллелизм моделей?
- Налог на коммуникацию: можете ли вы объяснить, почему эффективность масштабирования падает с ростом числа GPU и какая величина (доля синхронизации) управляет потолком?
- Потолок масштабирования: если синхронизация, которая не параллелизуется, составляет 10 процентов каждого шага, оцените потолок ускорения при большом числе GPU и примерный момент, когда удвоение устройств перестает окупаться.
Заблуждения и ловушки
Путь от оптимизации одного GPU через параллелизм на нескольких устройствах показывает, что каждый метод вводит компромиссы и новые ограничения. Подход, развитый во всей этой главе, количественно оценивает издержки через железный закон, диагностирует узкие места профилированием, применяет целевые оптимизации и масштабируется только тогда, когда это необходимо. Следующие заблуждения и ловушки фиксируют распространенные ошибки, которые впустую расходуют вычислительные ресурсы, задерживают исследовательский прогресс или вызывают сбои обучения в промышленной эксплуатации.
Заблуждение и ловушка
Заблуждение: большие модели всегда дают лучшую производительность.
Команды иногда рассматривают масштаб как монотонный рычаг: если модель на 7 млрд параметров хорошо работает, модель на 20 млрд параметров должна работать лучше. Модели на 20 млрд параметров требуется примерно 320 ГБ состояния обучения без учета активаций в описанном рецепте смешанной точности Adam (40 ГБ параметров FP16 + 40 ГБ градиентов FP16 + 80 ГБ мастер-весов FP32 + 160 ГБ состояний Adam). Превзойдет ли она модель на 7 млрд параметров, зависит от объема и качества данных, вычислений на обучение, оптимизации и оценки. Из одного лишь числа параметров не следует ни универсального порога по числу примеров, ни штрафа в точности.
Заблуждение и ловушка
Ловушка: считать, что распределенное обучение автоматически ускоряет разработку.
Больше ускорителей не гарантируют более быстрого обучения, потому что коммуникация, меньшие локальные батчи, ограничения входа и дисбаланс могут съесть выигрыш. В иллюстративном сценарии с 8 GPU синхронизация занимает 30–50 процентов времени шага, и ускорение достигает лишь 4–6 раз вместо идеальных 8. Значения гипотетические; решение требует измеренного сквозного времени и эффективности масштабирования.
Заблуждение и ловушка
Заблуждение: гиперпараметры переносятся с экспериментов малого масштаба на обучение большого масштаба напрямую.
Скорость обучения, которая работает при размере батча 512, может не переноситься на размер батча 4 096. Правило линейного масштабирования (Goyal et al., 2017) для такого восьмикратного изменения повысило бы скорость с 0,1 до 0,8, часто вместе с прогревом, но это эмпирический рецепт, а не требование или гарантия сходимости. Прогоны большого масштаба должны совместно проверять скорость обучения, расписание, состояние оптимизатора и эффективный батч.
Заблуждение и ловушка
Ловушка: рассматривать обучение в смешанной точности как простой переключатель без валидации.
Иллюстративные входные данные для V100 в главе подразумевают ускорение в 2,4 раза, но это не бенчмарк. FP16 обычно требует масштабирования функции потерь (Micikevicius et al., 2017), тогда как BF16 обычно не требует (Wang and Kanwar, 2019; Kalamkar et al., 2019) (см. «Обучение в смешанной точности»). Любой из рецептов может изменить численное поведение, поэтому пропускная способность и сходимость должны проверяться на целевой нагрузке.
Заблуждение и ловушка
Заблуждение: память и вычисления можно оптимизировать независимо.
Память и вычисления связаны: в этом иллюстративном профиле загрузка ускорителя падает с 90 процентов при батче 256 до 60–70 процентов при батче 16. Накопление градиентов (эффективный батч 512, физический батч 64) обменивает 5 процентов эффективности на сокращение памяти в 8 раз. Настройка этих параметров независимо друг от друга удлиняет время обучения на 20–40 процентов (см. «Накопление градиентов и контрольные точки»).
Заблуждение и ловушка
Ловушка: планировать память обучения так, будто в ней есть только веса модели.
Оценка памяти обучения по одним весам пропускает градиенты, состояние оптимизатора, мастер-веса, когда они используются, активации, временные рабочие области и накладные расходы аллокатора. В описанном в главе рецепте Adam в смешанной точности веса FP16 (2 байта), градиенты FP16 (2), мастер-веса FP32 (4) и два момента FP32 (8) дают в сумме 16 байтов на параметр до учета активаций. Другие оптимизаторы и стратегии шардирования меняют этот бюджет. Память активаций затем зависит от размера батча, длины последовательности, архитектуры, ядер и контрольных точек; универсального кратного от объема весов не существует.
Заблуждение и ловушка
Заблуждение: ускоритель всегда является узким местом обучения.
Загрузка данных часто создает простой, однако команды сначала оптимизируют вычисления. В этом иллюстративном профиле предвыборка с перекрытием конвейера сокращает календарное время на 47,6 процента (с 105 мин до 55 мин), перекрывая загрузку данных с вычислениями (см. «Предвыборка данных и перекрытие»). Профилируйте, прежде чем считать, что GPU — узкое место.
Заблуждение и ловушка
Ловушка: оптимизировать ядра до профилирования входного конвейера.
Настройка на уровне ядер привлекательна, потому что загрузку GPU легко посмотреть, но голодающий ускоритель может выглядеть как неэффективный ускоритель. Прежде чем менять точность, переписывать ядра или добавлять GPU, измерьте пропускную способность загрузчика данных, время предобработки на хосте, ожидание хранилища и перекрытие передачи с хоста на устройство. Если ускоритель ждет батчей, самая быстрая оптимизация — надежно подавать ему данные, а не делать его ядра чуть быстрее.
Итоги
Обучение объединяет алгоритмы, управление памятью и аппаратное ускорение, чтобы превратить данные в параметры модели. В масштабе прямое и обратное распространение согласуют матричные операции, выделения памяти и градиенты в рамках аппаратных и производительных ограничений.
Предвыборка, смешанная точность, FlashAttention, накопление градиентов и контрольные точки решают разные ограничения пропускной способности, памяти и численные ограничения. Подбирайте прием под связывающее ограничение; когда одна машина исчерпана, параллелизм данных, моделей, конвейерный и тензорный обменивают больший масштаб на большую сложность.
Это совместное проектирование формирует крупномасштабное обучение: матричные паттерны породили тензорные ядра GPU, фреймворки открыли их через API смешанной точности, а такие приемы, как обучение FP16, повлияли на последующую аппаратуру. Учет FLOP и памяти затем поддерживает сравнение оптимизаторов, оценку стоимости и решения о том, поможет ли больше аппаратуры или лишь переместит узкое место.
Почему обучение стоит миллионы
- Стоимость обучения — это бюджет железного закона: делает каждую оптимизацию подотчетной: сократить работу, повысить эффективную пропускную способность или улучшить загрузку. Изменение, которое не затрагивает доминирующий член, лишь перемещает стоимость внутри цикла обучения.
- Память определяет, помещается ли оптимизатор: стандартный Adam в смешанной точности в описанном представлении использует в 8 раз больше памяти, чем веса FP16 для вывода, до учета активаций. Состояние оптимизатора и активации, зависящие от батча, — а не только веса — определяют, помещается ли обучение.
- Профили выбирают средство: профилируйте, диагностируйте, исправляйте и профилируйте снова. Задачи, ограниченные вычислениями, нуждаются в лучшей арифметике или алгоритмах; ограниченные памятью — в меньшем состоянии или трафике; ограниченные данными и коммуникацией — в изменениях конвейера или параллелизма.
- Точность и ядра с учетом ввода-вывода сдвигают узкие места: FP16 с накоплением в FP32 может повышать пропускную способность и экономию памяти, а FlashAttention избегает материализации полной матрицы в HBM; реальный выигрыш зависит от нагрузки и аппаратуры.
- Контрольные точки покупают память пересчетом: хранение меньшего числа активаций и их пересчет при обратном распространении сокращают память активаций в разборе в 3–4 раза, с 35,9 ГБ до 9 ГБ при батче 4. Применяйте, когда ограничивает память, а не вычисления.
- Сочетание оптимизаций может отложить масштабирование: смешанная точность и контрольные точки превращают 95,7 ГБ в смоделированные 33 ГБ для GPT-2 при батче 4, до учета временных рабочих областей. Используйте подходящие локальные рычаги, прежде чем принимать распределенную коммуникацию и операционные издержки.
Железный закон относит медленную задачу к одной из категорий: ограниченная вычислениями (улучшить арифметику или алгоритмы), ограниченная памятью (сократить состояние или трафик), ограниченная данными (исправить входной конвейер) или ограниченная коммуникацией (настроить накопление или параллелизм). Увеличивать батч стоит, только когда аппаратура недогружена. Эта дисциплина не дает лечить симптомы добавлением аппаратуры и сохраняет практичность итераций по мере роста стоимости.
Обучение — место, где железный закон становится ежедневным инструментом. Смешанная точность меняет эффективную пропускную способность и трафик памяти; контрольные точки обменивают память на пересчет; масштабирование добавляет коммуникацию. Инженерная задача — определить доминирующий член и применить наименее затратное вмешательство, которое его меняет.
От обучения к отбору данных
Обучение порождает выученные параметры, тратя вычисления на каждый пример; оптимизированный прогон главы все равно требует 33 ГБ памяти. Когда цикл обучения становится эффективным, следующий вопрос — оправдывает ли каждый пример эту стоимость. Повторяющиеся или малоинформативные образцы потребляют тот же прямой проход, обратный проход, обновление оптимизатора и коммуникацию, что и примеры, которые добавляют охват или исправляют слабость.
Глава «Отбор данных» поэтому переводит внимание с исполнения на состав нагрузки. Она рассматривает, как избыточность, репрезентативность, неопределенность и покрытие классов определяют, какие примеры должны войти в конечный бюджет обучения. Полезное подмножество должно сокращать работу, не стирая редкие случаи и не сдвигая эффективное распределение обучения. Когда этот баланс соблюдается, тщательно отобранное подмножество может приблизиться к точности полного набора данных, снижая стоимость каждой эпохи и делая дополнительные эксперименты доступными. Цель оптимизации больше не только в том, насколько эффективно система обрабатывает пример, но и в том, какие примеры вообще стоит обрабатывать.
-
Масштабирование стоимости обучения: отношение примерно в 2 000 раз между двумя стоимостными ориентирами этой главы иллюстрирует, как число параметров, бюджеты токенов обучения, поколения аппаратуры и парки ускорителей могут накапливаться в эффекте; это не контролируемое сравнение раскрытых счетов за обучение. OpenAI в отчете о GPT-2 описывает модель и настройку обучения, но не раскрывает стоимость обучения (Radford et al., 2019). Точные детали обучения GPT-4 также не раскрывались, поэтому цифра для класса GPT-4 явно является отраслевой оценкой, опирающейся на публичные сообщения и независимый анализ инфраструктуры (Knight, 2023; Patel and Wong, 2023). ↩
-
Контрольные точки активаций (gradient checkpointing): обратное распространение ошибки сохраняет прямые значения, необходимые каждому правилу обратного прохода. Контрольные точки сохраняют выбранные значения и пересчитывают остальные во время обратного прохода, обменивая дополнительную работу на меньший объем памяти под активации. Размещение контрольных точек и связанная с ним стоимость пересчета описывают классическое расписание, проанализированное Chen et al. (2016), а не каждую реализацию контрольных точек. «Оптимальная стратегия размещения контрольных точек» разбирает это расписание для числа слоев GPT-2. ↩
-
Смешанная точность обучения: использует более низкую точность для выбранных вычислений и хранения, сохраняя более высокую точность там, где этого требуют накопление или диапазон чисел. Типичный рецепт FP16 хранит мастер-веса FP32 и применяет масштабирование функции потерь, чтобы уменьшить потерю градиентов из-за антипереполнения (Micikevicius et al., 2017). BF16 («Brain Floating Point», из Google Brain (Wang and Kanwar, 2019)) совпадает с 8-битным порядком FP32 по диапазону и поэтому обычно обходится без динамического масштабирования функции потерь, хотя точная точность состояния и накопления зависит от оптимизатора и реализации. ↩
-
Параллелизм данных: реплицирует полную модель на каждом устройстве, разделяя только данные. Каждое устройство вычисляет градиенты независимо, затем операция AllReduce их синхронизирует, добавляя на каждом шаге объем коммуникации, пропорциональный размеру модели. Этот налог на синхронизацию ограничивает эффективность масштабирования: удвоение числа ускорителей редко вдвое сокращает время обучения, когда коммуникация становится узким местом. ↩
-
Параллелизм моделей: разбивает слои модели между устройствами, когда она не помещается в память одного устройства. Активации должны передаваться между устройствами на каждой границе раздела, а наивное разбиение создает «пузыри конвейера», в которых последующие устройства простаивают в ожидании. Микробатчевый конвейер, как в GPipe и PipeDream, возвращает значительную часть этой потерянной эффективности (Huang et al., 2019; Narayanan et al., 2019). ↩
-
Чувствительность обучения трансформеров к межсоединению: масштабирование памяти и вычислений самовнимания по увеличивает размер активаций с длиной последовательности. При конвейерном параллелизме активации пересекают устройства на границах разделов модели, тогда как параллелизм данных синхронизирует градиенты, объем которых растет с числом параметров. Итоговая стоимость коммуникации зависит от стратегии параллелизма, топологии, размера сообщений и степени перекрытия, поэтому выбор межсоединения — решение системы обучения первого порядка. ↩
-
Происхождение обратного распространения ошибки: алгоритм независимо вывели Linnainmaa (1970) для автоматического дифференцирования компьютерных программ и Werbos (1974) в докторской диссертации Гарвардского университета по экономическому моделированию — более чем за десятилетие до того, как Rumelhart et al. (1986) популяризовали его для нейронных сетей. Такая задержка между выводом и широким применением повторяется в истории систем машинного обучения: механизмы внимания появились за десятилетия до трансформеров, но трансформер 2017 года показал, что модели с большой долей внимания могут эффективно обучаться на современных GPU-системах; позже кластеры TPU и GPU позволили развертывать гораздо большие модели. Обратный проход фреймворка обходит вычислительный граф в обратном топологическом порядке и применяет правило цепочки; независимые подграфы могут открывать параллельную работу во время этого обхода. ↩
-
BLAS (базовые подпрограммы линейной алгебры): исходная спецификация BLAS стандартизировала пригодные для повторного использования векторные операции, вызываемые из Fortran (Lawson et al., 1979); позже расширения BLAS добавили процедуры матрично-векторных и матрично-матричных операций, дав знакомую иерархию Level 1, Level 2 и Level 3 (Dongarra et al., 1988). В обучении доминируют операции Level 3, потому что их высокая арифметическая интенсивность — FLOP/байт — позволяет поддерживать высокую загрузку вычислений. Фреймворки обычно направляют плотное матричное умножение в оптимизированные библиотеки, такие как cuBLAS и oneDNN, или в ядра, сгенерированные компилятором. ↩
-
Алгоритм Штрассена: достигает , заменяя одно из восьми подматричных умножений сложениями, но системы обучения редко от этого выигрывают. Рекурсия нарушает регулярные паттерны доступа к памяти, которые используют тензорные ядра, а накопленные ошибки округления за миллиарды итераций обучения могут дестабилизировать сходимость. На практике основные библиотеки общего матричного умножения, такие как cuBLAS, оставляют доминирующие матричные умножения обучения высокооптимизированным блочным ядрам с асимптотикой и лучшей загрузкой аппаратуры, а не рекурсивным вариантам Штрассена. ↩
-
Softmax: вычисление численно устойчивого softmax требует редукции максимума, экспоненцирования, редукции суммы и нормировки по выбранной оси. Параллельные ядра реализуют эти этапы через согласованные редукции. FlashAttention перестраивает большое вычисление внимания так, что статистики softmax можно поддерживать, пока тайлы остаются рядом с вычислительными блоками. ↩
-
Стохастический градиентный спуск: «stochastic» происходит от греческого stochastikos («способный угадывать»); вместо ожидания точного градиента по всему набору данных SGD обновляется по выбранным примерам или мини-батчам. Полные батчи и стохастические методы могут одинаково пропускать данные через ограниченные микробатчи, поэтому их пиковая память активаций определяется резидентным микробатчем, а не только размером набора данных. Их ключевое различие — сколько выбранных градиентов вносят вклад в каждое обновление параметров. ↩
-
Импульс: заимствован из физики, где импульс (масса скорость) описывает склонность тела продолжать движение. Метафора объясняет конструкцию: накопленная скорость сглаживает шумные градиенты и может сокращать число итераций, необходимых для сходимости. Системная цена — одно дополнительное значение скорости на параметр, тогда как Adam хранит два значения момента на параметр. ↩
-
RMSprop: предложен Джеффри Хинтоном в лекции 6e его курса на Coursera в 2012 году; никогда не публиковался в рецензируемой статье, что делает его, пожалуй, самым влиятельным оптимизатором, распространявшимся через слайды. RMSprop делит скорость обучения на скользящее среднее недавних величин градиентов, адаптируя размер шага для каждого параметра. Эту адаптацию по параметрам Adam унаследует как второй момент , что напрямую вносит вклад в трехкратный множитель памяти Adam, описанные в разделе «Системные следствия выбора оптимизатора». ↩
-
Adam (адаптивная оценка моментов): два скользящих среднего — это первый момент (импульс) и второй момент (нецентрированная дисперсия) градиентов, которые хранятся для каждого параметра модели. Для модели на 7 млрд параметров одни только тензоры моментов Adam в FP32 занимают 56 ГБ; полное стандартное состояние обучения со смешанной точностью до учета активаций составляет 112 ГБ, если учесть вместе веса FP16, градиенты FP16, мастер-веса FP32 и моменты Adam. ↩
-
Сходимость: прогон достигает критерия остановки, когда выбранная метрика обучения или валидации перестает улучшаться настолько, чтобы оправдывать дополнительную работу. Необходимое число шагов зависит от модели, данных, оптимизатора, расписания, размера батча и целевого качества. Меньше шагов может сократить календарное время и стоимость, но адаптивные оптимизаторы добавляют состояние, память и трафик которого нужно учитывать в системном бюджете. ↩
-
AdamW (Adam с раздельным затуханием весов): стандартная -регуляризация входит в градиент и поэтому перемасштабируется адаптивным обновлением Adam. AdamW применяет затухание весов как отдельное обновление параметров, восстанавливая задуманное различие между адаптивным масштабированием градиента и затуханием (Loshchilov and Hutter, 2019). Он использует ту же структуру буферов моментов, что и Adam, хотя его влияние на качество модели зависит от нагрузки. ↩
-
Точка перехода и точность: точка перехода Roofline — порог арифметической интенсивности, отделяющий операции, ограниченные памятью, от операций, ограниченных вычислениями, — сдвигается вместе с численной точностью. На том же ускорителе путь через тензорные ядра с пониженной точностью может открывать гораздо большую арифметическую пропускную способность примерно при той же пропускной способности памяти, заметно поднимая точку перехода. Переход от исполнения в стиле TF32 к смешанной точности BF16 поэтому может изменить то, какой метод оптимизации даст отдачу, и делает выбор точности неотделимым от анализа Roofline. ↩
-
FlashAttention: основной механизм обрабатывает внимание небольшими тайлами, которые помещаются в быструю SRAM ускорителя на кристалле, избегая записи полной промежуточной матрицы в более медленную HBM. Точная граница ввода-вывода HBM зависит от размера тайла и емкости SRAM, но практический эффект — большое сокращение трафика памяти и вспомогательного хранения активаций. В оригинальной работе сообщаются ускорения до 3 раз, зависящие от нагрузки. ↩
-
Варп (warp): термин из ткачества, где «warp» — это нити основы, натянутые на станке, между которыми проходит челнок. NVIDIA заимствовала его, потому что потоки GPU внутри варпа выполняют одну и ту же инструкцию синхронно, подобно параллельным нитям, движущимся вместе на станке. Варп NVIDIA содержит 32 потока. ↩
-
Утилизация FLOP модели (MFU): в статье PaLM (Chowdhery et al., 2022) MFU определяется как наблюдаемая пропускная способность, деленная на теоретический максимум пропускной способности при пиковых FLOP. Ее прогон на 540 млрд параметров показал MFU 46,2 процента на 6 144 чипах TPU v4. Остаток не засчитывается числителем FLOP модели, но сам по себе MFU не показывает, сколько приходится на трафик памяти, коммуникацию, пузыри конвейера, пересчет или другую работу. ↩
-
FP16 (половинная точность с плавающей точкой): сниженный диапазон нормальных значений вызван использованием 5 битов экспоненты против 8 у FP32; наименьшее положительное нормальное значение составляет около , но субнормальные значения простираются примерно до . Поведение при антипереполнении зависит от операции и режима аппаратуры. Масштабирование функции потерь снижает вероятность того, что малые градиенты будут округлены или обнулены. ↩
-
Тензорное ядро (Tensor Core): специализированный блок умножения матриц с накоплением, который принимает входы пониженной точности и накапливает результат с повышенной точностью. Поддерживаемые формы тайлов, ограничения выравнивания и соотношения пиковой пропускной способности различаются по архитектуре, типу данных, режиму разреженности и библиотечному ядру. ↩
-
Обработка субнормальных чисел FP16: IEEE FP16 представляет субнормальные числа ниже вплоть до примерно , но некоторые операции или режимы ускорителей обнуляют субнормальные входы или результаты. Поведение нужно проверять для целевой аппаратуры и ядра. ↩
-
FlashAttention: представлен Dao et al. (2022); он сохраняет точное внимание, сокращая трафик HBM за счет тайлинга размером с SRAM. Ключевая идея — рассматривать внимание как задачу ввода-вывода: не материализовать полную матрицу оценок в HBM, сохраняя при этом плотное вычисление оценок . Производительность зависит от формы, аппаратуры и базовой реализации. FlashAttention-2 (Dao, 2023) дополнительно улучшил параллелизм и распределение работы, сообщая о 50–73 процентах теоретического пика на A100. ↩
-
Накопление градиентов: суммирует или усредняет градиенты по микробатчам перед одним шагом оптимизатора. Оно сокращает резидентный объем памяти активаций по сравнению с обработкой того же эффективного батча сразу, сохраняя общую арифметику на уровне примеров. Эквивалентность по времени исполнения и численная эквивалентность зависят от эффективности микробатчей, синхронизации, состояние-зависимых слоев, стохастических операций, точности и нормировки потерь. ↩
-
AlexNet (2012): статья сообщает 60 млн параметров и потолок в 3 ГБ на один GPU, но не относит ограничение к одному компоненту памяти. Ее архитектура модельного параллелизма разместила примерно половину ядер на каждом GPU и разрешала коммуникацию только в отдельных слоях, явно обменивая емкость памяти на коммуникацию. ↩
-
NVLink: высокоскоростное межсоединение GPU от NVIDIA. Его топология и поколение определяют пропускную способность между конкретной парой GPU и для коллективных операций. Стратегия параллелизма помогает, только когда стоимость ее коммуникации и синхронизации меньше полезного времени, которое она экономит. ↩
-
AllReduce: коллективный примитив коммуникации, который суммирует данные по всем устройствам и возвращает результат каждому устройству. Кольцевой AllReduce — одна распространенная реализация: устройства передают шарды градиента по логическому кольцу, так что каждый участник отправляет и получает ограниченные фрагменты, а не полную копию каждого тензора градиента сразу. Это примитив коммуникации, который делает практичным крупномасштабный параллелизм данных, но его подробная модель стоимости относится к распределенному обучению. ↩
-
GPipe (2019): GPipe реализует описанную стратегию микробатчей, сдвигая исполнение так, чтобы заполнить простаивающие «пузыри» в наивном параллелизме моделей и тем самым повысить загрузку (Huang et al., 2019). Ключевой компромисс, которым он управляет, — рост памяти для хранения активаций нескольких микробатчей в полете. Он сохраняет динамику обучения на больших батчах, накапливая градиенты перед обновлением весов; в статье сообщается почти линейное масштабирование пропускной способности трансформера, когда число микробатчей не меньше чем в четыре раза больше числа разделов. ↩
Принципы оптимизации
Рабочая модель редко бывает эффективной. Часть II показала, как строить ML-системы, уважающие физические ограничения; часть III отвечает на реальные требования по времени, памяти и энергии. Каждая оптимизация предполагает навигацию по фронту: улучшение одной метрики (точности, задержки, энергии) при управлении ценой для других. Каждая оптимизация в части III воплощает совместное проектирование алгоритма и машины, обменивая математическую структуру на физическую осуществимость. Принципы здесь определяют физику эффективности — законы, которые объясняют, почему одни модели быстрые и доступные, а другие медленные и непомерно дорогие.
Фронт Парето
Инвариант: после нормализации направлений целевых функций допустимая точка лежит на фронте Парето тогда и только тогда, когда никакая другая точка не лучше или равна по всем целям и строго лучше хотя бы по одной.
- Квантование обменивает численную точность на меньший объем памяти.
- Прореживание обменивает емкость модели на меньшие представления и может ускорить работу, если получившиеся разреженность или удаленные структуры поддерживаются целевой аппаратурой.
- Дистилляция обменивает вычисления обучения на эффективность вывода.
Следствие: инженеры систем ориентируются на этот фронт, чтобы найти рабочую точку, подходящую для конкретной среды развертывания. Универсального оптимума не существует.
Ориентироваться по фронту Парето — значит знать, какой ресурс оптимизировать. Прежде чем выбрать технику, инженеры должны определить, ограничена ли нагрузка вычислениями, перемещением памяти или задержкой диспетчеризации. Первым тестом служит арифметическая интенсивность.
Закон арифметической интенсивности
Инвариант: достижимая пропускная способность () не превышает минимума из пиковых вычислений () и произведения пропускной способности DRAM () на операционную интенсивность на границе кэш–DRAM () (Williams et al., 2009):
Операционную интенсивность и пропускную способность DRAM нужно измерять на границе кэш–DRAM; эта идеальная граница исключает запуск, синхронизацию и другие фиксированные накладные расходы.
Следствие: добавление пиковых вычислений не поднимает идеальную границу Roofline для ядра, ограниченного пропускной способностью. Инженеры должны определить, является ли узкое место вычислениями, пропускной способностью или другим членом системы, прежде чем выбирать оптимизацию.
Многие важные ядра ML лежат на стороне, ограниченной памятью, относительно точки перехода, особенно операции с низким повторным использованием, такие как поиск по таблице вложений, нормализация, softmax, раздельная по глубине свертка и пути вывода при малом батче. Плотные матричные умножения и свертки могут, напротив, быть ограничены вычислениями, когда батчинг и загрузка аппаратуры высоки. Это разделение — следствие стены памяти: скорость процессоров исторически опережала пропускную способность памяти, и совокупный разрыв расширялся на протяжении трех десятилетий (Wulf and McKee, 1995; Gholami et al., 2024). Нейронные сети с их массивными тензорами весов и неравномерной временной локальностью особенно уязвимы. Закон арифметической интенсивности диагностирует, где нагрузка находится относительно этой стены. Стоимость перемещения данных объясняет, почему стена так жестока. «Диагностика узких мест» сопоставляет каждый тип узкого места с оптимизациями, которые его устраняют, и с изменениями, которые не затрагивают доминирующий член.
| Если нагрузка… | Доминирующий член | Оптимизация, которая работает | Оптимизация, которая бесполезна |
|---|---|---|---|
| Ограничена памятью | Квантование, прореживание, батчинг | Более быстрый ускоритель (больше FLOP/s) | |
| Ограничена вычислениями | Лучшие ядра, тензорные ядра, более быстрый ускоритель | Больше пропускной способности памяти | |
| Ограничена задержкой | Слияние ядер, асинхронная диспетчеризация, ограниченный микробатчинг в рамках SLO задержки | Только больше FLOP/s или пропускной способности |
Диагностика узких мест: перед оптимизацией определите, какой член железного закона доминирует. Оптимизация неверного члена оставляет доминирующее узкое место нетронутым и обычно дает малое или нулевое сквозное улучшение.
Производительность — лишь одна цена перемещения памяти; энергия показывает второе ограничение.
Инвариант энергии перемещения
Инвариант: полная энергия нагрузки зависит совместно от энергии отдельного события и числа событий. В цитируемом эталоне для техпроцесса 45 нм перенос 32-битного значения из DRAM может стоить примерно в 100–1000 раз больше энергии на событие, чем 32-битная операция с плавающей запятой, в зависимости от типа операции (Horowitz, 2014).
Здесь обозначает энергию одного 32-битного обращения к DRAM, а — энергию одного 32-битного арифметического события с плавающей запятой в цитируемой технологии 45 нм.
Следствие: когда перемещение памяти доминирует в энергии нагрузки, стратегии оптимизации должны отдавать приоритет слиянию ядер (избеганию промежуточного трафика за пределами кристалла) и квантованию (уменьшению размера данных); когда доминируют вычисления, центральными остаются сокращение числа операций и улучшение арифметических ядер.
Даже при идеальной локальности данных и оптимальном выборе узкого места финальное ограничение задает потолок того, сколько ускорения может дать любая оптимизация.
Закон Амдала
Инвариант: максимальное ускорение системы ограничено долей нагрузки, которую невозможно ускорить (Amdahl, 1967). Здесь — доля базового времени исполнения, которая ускоряется, а — ускорение этой доли; модель фиксированной работы предполагает, что оставшаяся доля не меняется, а ускорение не вводит дополнительных накладных расходов.
Следствие: если 95 процентов модели работает в 100 раз быстрее на GPU, общее системное ускорение ограничено примерно 16,8 раза. Это объясняет, почему загрузка данных и предобработка часто становятся главными узкими местами в сильно оптимизированных системах.
Часть III применяет эти принципы систематически через таксономию D·A·M — данные, алгоритм, машина, — сначала спрашивая, нужна ли работа вообще, затем можно ли ее упростить, и наконец как выполнить ее быстрее (полную диагностическую схему см. в приложении «Таксономия D·A·M»). Бенчмаркинг замыкает цикл, проверяя, сохраняются ли эти теоретические выигрыши при сквозном исполнении без нарушения ограничений качества.
Отбор данных
Назначение
Как тщательно отобранное подмножество может сохранить большую часть ценности гораздо большего набора данных?
Обучение оплачивает получение, разметку, оценку, перемещение и обработку примеров, хотя их ценность для обучения различается. Большие наборы данных содержат избыточные, зашумленные или не соответствующие цели примеры, а редкие области могут не содержать тех случаев, которые нужны модели. Отбор данных превращает эту неоднородность в задачу системной оптимизации. Он может убрать излишнюю работу до обучения, направить разметку и шаги обучения на информативные случаи по мере того, как модель учится, либо создать недостающие примеры, когда главным ограничением становится дефицит. Он также может один раз инвестировать в обучение переиспользуемых представлений, если эта стоимость окупается на нескольких последующих задачах. Поэтому цель состоит не в самом маленьком наборе данных, а в наименьшей сквозной стоимости достижения целевого качества без потери редких случаев, недопредставленных групп и покрытия, важного для эксплуатации. Каждая стратегия добавляет собственные накладные расходы: примеры нужно оценить, сгенерировать, перемешать, сохранить или проверить, и эти затраты могут свести на нет обещанную экономию. Решение должно приниматься сквозным образом, потому что выигрыш в разметке или обучении может быть съеден задержкой отбора, доступом к хранилищу или координацией в распределенной системе. Метод оправдан только тогда, когда сохраненное или созданное им обучение превышает работу, необходимую для его применения. Это различие важно в серии повторных экспериментов, где полезные сокращения накапливаются, и при адаптации, где ценность примера меняется вместе с моделью и целевым распределением. Инженерия данных показала, что данные — исходный код систем машинного обучения; отбор данных спрашивает, какие свидетельства полезны сейчас и каких еще не хватает. В терминах D·A·M это совместное проектирование данных и алгоритма: нужно сформировать обучающий сигнал так, чтобы каждая единица машинной работы приносила больше полезного обучения.
Цели обучения
- Объяснять отбор данных как совместное проектирование данных и алгоритма, которое сокращает общее число операций до начала обучения
- Вычислять отношение информации к вычислениям, чтобы решить, улучшают ли дополнительные примеры обучение в расчете на FLOP
- Сравнивать дедупликацию, отбор коресетов и прореживание по качеству для сокращения избыточных данных предобучения
- Проектировать стратегии учебного плана, активного обучения или синтетических данных для данных, ценность которых меняется во время обучения
- Применять неравенство отбора, чтобы проверить, окупаются ли накладные расходы отбора по сравнению с затратами на обучение на полном наборе данных
- Оценивать распределенные конвейеры отбора с учетом локальности хранения, согласованности и загрузки GPU
- Выбирать инвестиции в отбор данных, используя ROI, амортизацию и диагностику по границе, оптимальной по вычислениям
Основы отбора данных
Обучение оплачивает стоимость по железному закону за каждый обработанный пример, но не каждый пример приносит сигнал обучения, который стоит этой цены. Отбор данных ставит перед хорошо подготовленным набором данных системную задачу: сохранить примеры, которые дают наибольший вклад в обучение на единицу вычислений. Инженерия данных делает набор надежным благодаря корректным меткам, согласованным схемам и контролируемым записям. Отбор данных повышает ценность набора, извлекая максимум обучения из минимального числа примеров, и напрямую сокращает член общего числа операций в железном законе (принцип «Железный закон систем машинного обучения»). Различие важно: качество спрашивает, правильны ли данные, а ценность — стоит ли правильные данные тех вычислений, которые на них тратятся.
Поставки вычислений могут опережать поставки качественных данных.
Увеличение объема обучающих данных давно считается стандартным способом улучшить модели. Законы масштабирования1 (Kaplan et al., 2020; Hoffmann et al., 2022) количественно описывают, как качество модели может расти вместе с размером набора данных, и команды отвечали на это сбором и генерацией все большего числа примеров. Парки ускорителей, однако, могут наращивать пригодные для использования вычисления быстрее, чем растет поток новых качественных текстов и изображений, созданных людьми. Большая часть легкодоступного публичного веба уже включена в крупные обучающие корпуса, а способность экспертов к разметке растет медленно. Этот перекос и есть стена данных,2 и внимание смещается от сбора новых данных к извлечению большей ценности из уже имеющихся. Следующие разделы описывают методы отбора и модели стоимости, необходимые для такого выбора.
«Асимметрия масштабирования ресурсов ML» использует иллюстративный сценарий роста, в котором вычислительные мощности GPU растут в 10 раз каждые 3 года, а доступные качественные данные растут медленнее. Это входные данные сценария, а не измеренные универсальные темпы.
| Ресурс | Темп роста | Следствие |
|---|---|---|
| Вычислительные мощности GPU | ~10× / 3 года | Производительность аппаратуры может быстро расти в данную эпоху |
| Обучающие данные (веб) | ~2× / 5 лет | Качественный веб-текст ограничен; значительная часть уже собрана |
| Размеченные данные | ~1,5× / 5 лет | Пропускная способность человеческой разметки ограничена по своей природе |
| Синтетические данные | Потенциально большой | Ограничен качеством генератора (модели, обученные на данных, сгенерированных моделями, могут деградировать) |
Асимметрия масштабирования ресурсов ML: в иллюстративном режиме масштабирования вычисления растут быстрее, чем поставки качественных данных, что создает дисбаланс вычислений и данных и делает отбор данных ценным.
Масштабирование набора данных рано или поздно упирается в конечный запас качественной человеческой речи и текста. Проследите логарифмическую траекторию на «Рост наборов данных у предела»: видно, как требования обучения фундаментальных моделей приближаются к оцененной верхней границе доступных публичных данных.
Разрыв между тем, что могут обработать вычисления, и тем, что способны поддержать доступные качественные данные, — это системная переменная, а не фиксированный закон. В режиме, иллюстрированном «Асимметрия масштабирования ресурсов ML», вычислительные ресурсы растут быстрее доступных качественных данных, поэтому бюджеты ускорителей могут опередить корпус и оставить систему богатой вычислениями, но ограниченной данными. Поддержание актуальности модели требует регулярного обновления обучающего корпуса по мере изменения мира, а разумный отбор данных становится критичным, когда ограничением является качество данных, а не машинное время ускорителя.
Рост наборов данных у предела: несколько наборов данных фундаментальных моделей выросли до оценок общего запаса качественного публичного текста. Прогноз стоит читать как датированный сценарий ограничения, а не как фиксированный прогноз: отбор данных, синтетическая генерация, мультимодальное обучение, лицензирование и политика фильтрации меняют доступный объем.
Асимметрия вычислений и данных может обратить приоритеты оптимизации. Когда данных много, а вычислений мало, алгоритмическая эффективность может выжать больше точности из ограниченных циклов GPU. Когда вычислений много, а качественных данных мало, отбор данных может, наоборот, извлечь больше обучения из каждого примера. Отбор данных работает выше по потоку, чем оптимизации модели и машины. Устраняя избыточность и выбирая примеры с высокой ценностью, мы уменьшаем нагрузку до того, как она попадет в модель или аппаратуру, и тем самым напрямую сокращаем член общего числа операций в железном законе. Поэтому системный подход рассматривает отбор как сокращение работы на входе, а не как эвристику моделирования. Для команд, у которых бюджет ускорителей превышает их отобранный корпус, узкое место смещается от доступа к GPU к качеству, законности и разнообразию обучающих данных.
Инструментарий отбора данных следует осознанному порядку оптимизации: сначала спрашиваем, стоит ли вообще обрабатывать пример, а затем — как эффективно обработать оставшуюся нагрузку. Отбор данных воплощает принцип «сначала самая большая отдача», ища излишнюю работу до того, как упрощать или ускорять то, что остается. Статическое прореживание убирает примеры с низкой ценностью до вычисления первого градиента. Динамический отбор адаптирует рацион данных во время обучения с помощью учебного плана и активного обучения. Синтетическая генерация создает примеры высокой ценности через аугментацию, симуляцию или примеры, сгенерированные учителем, когда реальных данных не хватает.
Каждый этап может повышать информационную плотность данных, которые поступают в модель, если измеренный прирост качества оправдывает накладные расходы; вместе они образуют взаимодополняющий инструментарий: прореживание сокращает то, что содержит конвейер, отбор определяет, как конвейер его использует, а синтез расширяет то, до чего конвейер может добраться. Сравнение этих методов требует системного определения отбора данных и измеримой оценки его эффективности.
Определение отбора данных
Трехэтапному конвейеру нужна величина, которая позволяет инженерам сравнивать примеры до того, как они потратят на них машинное время ускорителя. Дублированное изображение, ошибочно размеченная запись и редкий пограничный случай могут стоить одинаковых прямого и обратного проходов, но вклад в сигнал обучения у них разный. Поэтому отбор данных начинается с явного определения ценности примера относительно стоимости вычислений. Отношение информации к вычислениям измеряет эту ценность как полученный сигнал обучения на единицу вычислений для обучения; формально оно введено в разделе «Отношение информации к вычислениям».
Отбор данных
Отбор данных — это процесс максимизации отношения информации к вычислениям (ICR) обучающего набора данных.
- Значение: отбор определяет данные, которые стоит сохранить, приоритизировать или сгенерировать для целевой задачи, сокращая общее число операций , когда избыточные или зашумленные примеры можно исключить без потери необходимого покрытия.
- Отличие: в отличие от инженерии данных, которая занимается чистотой и согласованностью данных, отбор данных занимается информативностью и разнообразием примеров.
- Типичная ошибка: распространенное заблуждение состоит в том, что больше данных всегда лучше. Дополнительные данные низкого качества могут дать меньший прирост, чем гораздо меньший тщательно отобранный набор, поэтому объем сохраненных данных нужно оценивать вместе с покрытием и целевым качеством.
Чтобы сделать это конкретным, рассмотрим обучение авторегрессионной языковой модели из семейства маячных моделей GPT-2/Llama, описанного в разделе «Состав маячных моделей: биографии моделей». Сценарий использует модель с 70 миллиардами параметров, чтобы сделать разрыв между вычислениями и данными заметным в большом масштабе.
Бюджет вычислений (10 000 GPU H100 за 3 месяца) соответствует примерно $86,4 млн по ценовому ориентиру облачного обучения, принятому в главе, и позволяет обработать около 73,2 трлн токенов при устойчивой утилизации FLOP модели 40 процентов. Оценки качественного публичного текста, созданного людьми, с учетом качества и повторяемости составляют порядка 300 трлн токенов, что заметно больше одного отобранного веб-корпуса. Практическое ограничение уже: насколько велика часть этого запаса доступна, законно пригодна, качественна, дедуплицирована и полезна для целевого распределения. Если у команды готов отфильтрованный корпус всего в 5 трлн токенов, то бюджета вычислений хватит, чтобы пройти этот корпус примерно 14,6 раза. Тогда кластер опережает доступный уникальный сигнал. Команда может повторять эпохи на одном и том же корпусе, но градиентные шаги по знакомым токенам дают все меньшее снижение потерь. Она может снизить пороги качества и взять необработанный веб-текст, но зашумленные и не соответствующие задаче токены ухудшают оценку на последующих задачах. Либо она может инвестировать в отбор данных — уточнять фильтры качества, строить учебные планы по сложности и синтезировать недостающие пограничные случаи — чтобы поднять отдачу обучения на FLOP. Когда вычислительные мощности опережают данные с высоким сигналом, отбор приносит большую отдачу на вложенный капитал, чем покупка дополнительных ускорителей.
Возможность применима к разным архитектурам моделей, хотя узкие места и безопасное сокращение различаются. В отличие от маячной модели ResNet-50, которая ограничена вычислениями, модели GPT-2/Llama могут упираться в пропускную способность памяти при выводе и в вычисления при обучении. Когда проверенный метод отбора удаляет примеры или токены без добавления компенсирующих шагов, меньшее число выборок означает меньше FLOP обучения. Поэтому правильная рамка — системная, а не чисто статистическая.
Системная перспектива
Стена данных задает физические пределы масштабирования необработанных наборов данных; системная перспектива определяет, как управлять этим ограничением на всем аппаратном стеке. Традиционная ML-рамка оценивает отбор данных через статистическую сложность выборки и теорию обобщения, спрашивая, сколько примеров нужно, чтобы получить заданную тестовую ошибку. Такая формулировка считает каждый пример математической абстракцией без стоимости, игнорируя физические ресурсы на загрузку, передачу и исполнение данных.
Системная рамка отбора данных спрашивает иначе: как минимизировать полную стоимость ресурсов для достижения целевой точности на всем жизненном цикле ML. Эта рамка переносит внимание с теоретической эффективности выборки на конкретное потребление ресурсов, как показано в «ML- и системные перспективы отбора данных».
| ML-рамка | Системная рамка |
|---|---|
| «Меньше примеров для той же точности» | «Меньше FLOP для той же точности» |
| «Лучшее обобщение» | «Ниже стоимость обучения (время, деньги, энергия)» |
| «Границы сложности выборки» | «Сквозная эффективность ресурсов» |
| «Теория обучения» | «Инженерия стоимости» |
ML- и системные перспективы отбора данных: ML-рамка оптимизирует сложность выборки; системная рамка оптимизирует полную стоимость ресурсов по всему конвейеру.
В таксономии D·A·M отбор данных работает на уровне данных: он устраняет физическую работу до того, как ее выполнят алгоритмические и аппаратные оптимизации, что формализовано железным законом ML-систем («Железный закон систем машинного обучения»).
Отбор данных и железный закон
В железном законе ML-систем отбор данных сокращает число примеров или токенов, которые попадают в нагрузку. Последующие оптимизации на уровне модели уменьшают число операций на проход вперед и назад, а оптимизации на уровне машины повышают (пиковую пропускную способность) и (утилизацию). Отбор убирает работу до того, как ее выполнят последующие оптимизации.
Поэтому отбор данных мультипликативно ценен в железном законе: когда все три уровня оптимизации действуют на одно и то же узкое место, сокращение набора данных в 2 раза, снижение числа операций на пример в 2 раза и рост эффективной пропускной способности в 2 раза дают общее сокращение стоимости в 8 раз, а не в 6.
При фиксированном числе эпох, размере батча и работе на пример сокращение набора данных на 50 процентов вдвое уменьшает число прямых проходов, обратных проходов и обновлений градиента. Для сценария со стоимостью $100 млн это дает $50 млн прямой экономии на вычислениях при условии, что график обучения не компенсирует ее добавлением шагов оптимизации.
Эта экономия распространяется по всей иерархии аппаратуры. Уменьшая общий объем данных (), дедупликация и отбор коресетов снижают нагрузку на пропускную способность хранилища, ввод сетевой фабрики и передачи между хостом и ускорителем по PCIe, из-за которых иначе простаивают тензорные ядра в ожидании ввода-вывода. На более раннем этапе активное обучение сокращает бюджеты разметки, направляя труд разметчиков только на примеры с высокой энтропией или высоким градиентом.
Однако отбор не бесплатен: каждая стратегия отбора несет собственные накладные расходы на оценку, фильтрацию, перемешивание или координацию примеров. Онлайн-алгоритм отбора, который выполняет дополнительные прямые проходы для ранжирования сложности примеров, легко может потратить больше циклов ускорителя, чем сэкономит, если накладные расходы на отбор превысят сокращение времени обучения. Конвейер отбора данных оправдан только тогда, когда сквозная стоимость фильтрации плюс обучения на отобранном подмножестве строго меньше стоимости обучения на полном необработанном наборе.
Отношение информации к вычислениям
Системная рамка, введенная в разделе «Системная перспектива», требует количественной метрики. Отбор данных балансирует на границе эффективности между точностью и стоимостью: сохранение каждого примера обеспечивает покрытие, но тратит вычисления на избыточный сигнал, а слишком агрессивное прореживание экономит FLOP ценой полноты редких срезов. Чтобы управлять этим компромиссом, нужно измерить предельный сигнал обучения, который приносит каждый пример на единицу работы аппаратуры. Эта метрика — отношение информации к вычислениям (ICR).
«Таксономия D·A·M как карта оптимизации» переосмысляет таксономию D·A·M как карту оптимизации, где отбор данных играет роль оптимизации входа: сокращает общую нагрузку до того, как она попадет в модель или аппаратуру. Со стороны модели вопрос в том, сколько математики требует каждый пример. Со стороны машины — как быстро аппаратура может выполнить эту математику. Со стороны данных — стоит ли вообще обрабатывать пример. Три вершины треугольника отражают доминирующие узкие места: ограничение вычислениями описывает системы, ограниченные арифметической пропускной способностью, ограничение вводом-выводом — системы, ограниченные перемещением данных, а эффективность выборки — системы, ограниченные информативностью обучающих данных.
Таксономия D·A·M как карта оптимизации: производительность ML организована вокруг алгоритмов (модель), отбора данных и машины (аппаратура). Стороны треугольника отмечают связи «ограничение вычислениями», «ограничение вводом-выводом» и «эффективность выборки», а отбор данных сокращает нагрузку до выполнения на модели или аппаратуре.
Формально отношение связывает предельную информационную ценность с предельными вычислениями:
Большее значение ICR означает, что каждый FLOP обучения покупает больший сигнал обучения. Поскольку числитель нельзя напрямую наблюдать во время промышленных запусков, системные конвейеры опираются на операционные прокси: улучшение валидации на единицу вычислений, площадь под кривой обучения, снижение потерь на отложенных оценочных выборках, оценки примеров по неопределенности или градиенту и метрики покрытия на критичных для эксплуатации срезах. Эти прокси переводят абстрактную информационно-теоретическую цель в конкретные сигналы отбора до того, как запуск обучения исчерпает бюджет вычислений.
Граница ICR: когда данные становятся налогом
За границей данные становятся налогом: вычисления растут, обучение останавливается.
Отношение информации к вычислениям не постоянно: оно подчиняется закону убывающей отдачи. Граница ICR — это точка, в которой предельный сигнал обучения от дополнительных данных стремится к нулю.
Чтобы проиллюстрировать убывающую отдачу, пусть — информационное содержание набора данных размера , и предположим, что . Это упрощенная аналитическая модель, а не универсальный закон. Если стоимость вычислений линейно растет с числом операций на пример , то , и получающееся ICR следует из формулы («Убывание ICR»):
В рамках этой иллюстративной модели убывание создает стену данных. За границей, зависящей от рабочей нагрузки, дополнительные данные могут дать мало обучения, но по-прежнему добавляют вычисления. В этом режиме данные становятся налогом на данные, который раздувает член железного закона без соответствующего улучшения числителя точности в RoC (отдача от вычислений, см. «Отдача от вычислений (RoC) как экономическая линза»). Колено кривой — это практический компромисс между целевым качеством и предельной стоимостью, а не математический максимум ICR в этой модели.
Отбор данных превращает член общего числа операций железного закона из фиксированной константы в переменную. Улучшение измеренного ICR в 2 раза вдвое сокращает FLOP, необходимые для достижения того же измеренного прироста. Оно дает то же идеальное сокращение времени, что и рост пропускной способности в 2 раза, только если нагрузка ограничена вычислениями и сэкономленная работа лежит на критическом пути. ICR сосредоточен именно на вычислениях; модель стоимости в разделе «Модель стоимости» распространяет то же рассуждение на затраты на получение, разметку и хранение.
Случайный пакет исходных данных может иметь низкое ICR, если содержит избыточные, зашумленные или уже освоенные примеры. Конвейеры данных высокой эффективности («Конвейер отбора данных») могут повышать ICR в три этапа: статическое прореживание до обучения, динамический отбор во время обучения и синтетическая генерация по требованию. Для иллюстрации рассмотрим вычисление ICR на конкретной задаче отбора коресетов: специально отобранном подмножестве, которое должно сохранить сигнал обучения полного набора данных. В разделе «Алгоритмы отбора коресетов» определены методы оценки EL2N и GraNd, которыми строятся такие подмножества, а раздел «Система измерений» содержит полную систему измерений для оценки этих выигрышей в эффективности, включая диагностику границы, оптимальной по вычислениям, которая может показать, ограничено ли обучение данными или вычислениями.
Конвейер отбора данных: структурированный подход к повышению ценности данных. Сначала необработанные данные прореживаются (статическое прореживание), затем отбираются во время обучения (динамический отбор) и наконец синтезируются (синтетическая генерация). Каждый этап может повысить отношение информации к вычислениям (ICR), если прирост качества оправдывает его вычислительную стоимость.
Контрольная точка: эффективность отбора данных
Цель отбора данных — максимизировать ICR.
Проверка метрик:
- Применение ICR: даны два прогона обучения с одинаковым приростом точности, но разными бюджетами вычислений. Можете ли вы определить, у какого из них ICR выше?
- Эффективность данных: при фиксированном протоколе оценки можете ли вы объяснить, когда набор данных на 50 процентов меньше с ICR в 2 раза выше дает тот же измеренный прирост при половине FLOP обучения?
Проверка конвейера:
- Три этапа: можете ли вы сопоставить статическое прореживание, динамический отбор и синтетическую генерацию с жизненным циклом обучения?
Практический вопрос — насколько большим может стать разрыв в эффективности на нагрузке, где размер набора данных, стоимость модели и стратегия отбора взаимодействуют с конкретными бюджетами FLOP. Приведенный ниже сценарий ResNet-50 масштаба ImageNet использует предполагаемые приросты точности для иллюстрации расчета; это не сообщенный результат EL2N.
Пример: вычисление ICR для коресетов
Задача: Обучение маячной модели ResNet-50 из «Состав маячных моделей: биографии моделей» на ImageNet за одну эпоху стоит 3,15 × 10¹⁶ FLOP. При заявленных в сценарии приростах точности, как изменится отношение информации к вычислениям, если сохранить 50 процентов данных? Расчет фиксирует работу на пример и не учитывает накладные расходы на отбор.
Дано:
- Набор данных: ImageNet (1,28 млн изображений)
- Модель: маячная ResNet-50 (примерно 8,2 GFLOP на прямой проход, около 24,6 GFLOP на шаг обучения с прямым и обратным проходом в зависимости от реализации)
- Одна эпоха: 1,28 млн × 24,6 GFLOP = 3,15 × 10¹⁶ FLOP
- Предполагаемый прирост точности за эпоху (раннее обучение): 5 процентных пунктов
Случайный отбор (базовый вариант):
- Обработать все 1,28 млн примеров равномерно
- Прирост точности: 5 процентных пунктов
- = 5 процентных пунктов / (3,15 × 10¹⁶ FLOP) = на FLOP
Коресет EL2N (Error L2-Norm, оценка по динамике обучения, разработанная в «Алгоритмы отбора коресетов»; 50 процентов данных):
- Обработать 640,6 тыс. отобранных примеров
- Предполагаемый прирост точности: 4,5 процентного пункта (90 процентов прироста на полных данных)
- Вычисления: 640,6 тыс. × 24,6 GFLOP = 1,6 × 10¹⁶ FLOP
- = 4,5 процентного пункта / (1,6 × 10¹⁶ FLOP) = на FLOP
Системный вывод: при этих предположениях отобранное подмножество дает ICR, в 1,8 раза выше, при приросте точности, меньшем на 0,5 процентного пункта. Реальное решение требует измеренных приростов, учета накладных расходов на отбор и проверок покрытия.
Повышение отношения информации к вычислениям следует поэтапному порядку оптимизации: сначала убрать статические потери, затем направлять динамические батчи во время исполнения и синтезировать недостающее покрытие по требованию. Первый рычаг действует полностью до начала выполнения модели.
Статическое прореживание
Статическое прореживание и фильтрация перед предобучением устраняют неинформативные примеры выше по потоку от цикла обучения. Удаляя избыточные и поврежденные записи до вычисления первого градиента, статическая фильтрация сокращает число операций , не меняя архитектуры моделей и ядра исполнения.
Довод в пользу меньших наборов данных
Эмпирические исследования масштабирования показывают, что один лишь объем данных не определяет точность модели: крупные корпуса содержат существенную избыточность. Во многих режимах заметная доля обучающих примеров почти не дает сигнала для градиента, но при этом потребляет полные вычисления прямого и обратного проходов.
На CIFAR-10 прореживание по EL2N убрало половину обучающих данных без снижения точности (Paul et al., 2021). На ImageNet-1K прототипная метрика самоконтролируемого обучения отбросила 20 процентов данных без потери качества (Sorscher et al., 2022). Закономерность распространяется на языковое моделирование, где веб-корпуса вроде The Pile3 и C44 содержат достаточно дубликатов и шаблонного текста, чтобы дедупликация стала системной задачей. В наборах данных, изученных в работе (Lee et al., 2022), приблизительное удаление почти дубликатов затронуло 3,04 процента C4 и 13,63 процента RealNews, а дедуплицированное обучение снизило запоминание, сохранив или улучшив перплексию.
Сообщенные выигрыши специфичны для бенчмарков. Эффективность прореживания зависит от внутренней избыточности набора данных, алгоритма отбора и емкости целевой модели; промышленные развертывания требуют проверки на конкретной задаче, прежде чем принимать агрессивную фильтрацию.
Отдельные точки данных не обязаны приносить одинаковую пользу для обучения. Эта неоднородность отчасти следует из того, как классификаторы учатся проводить границы решений. Многие примеры лежат далеко от границы: изображение собаки при хорошем освещении может стать легким, как только модель выучит его доминирующие признаки, тогда как неоднозначные и недопредставленные случаи могут оставаться информативными. Качество меток тоже влияет на требования к данным. В упрощенной модели симметричного бинарного шума доля перевернутых меток снижает коэффициент эффективного размера выборки до ; при для достижения границы, соответствующей чистым данным, требуется примерно в раза больше примеров. Сопутствующий блокнот использует отдельную игрушечную модель кривой обучения для иллюстрации еще одного множителя качества данных; ни один из этих множителей не универсален.
Пример: множитель качества данных
Задача: Сколько больше зашумленных данных нужно, чтобы достичь той же целевой ошибки, что и на чистых данных?
Расчет: В этой иллюстративной модели ошибка на чистых данных масштабируется как , поэтому . Ошибка на зашумленных данных масштабируется как , поэтому . Для целевой ошибки (1 процент):
- ≈ 100
- ≈ 10 000
Результат: при этих предположениях зашумленные данные требуют в 100 раз больше примеров для той же целевой ошибки.
Системный вывод: здесь очистка данных работает как ускоритель вычислений в 100 раз; реальный множитель зависит от нагрузки.
Алгоритмы отбора коресетов
Определение того, какие примеры сохранить, требует систематических критериев отбора. Отбор коресетов5 превращает решение о статическом прореживании в задачу покрытия: сохранить наименьшее подмножество, которое сохраняет статистические свойства всего набора данных.
Решение о системных затратах состоит в том, куда направить бюджет отбора: на дешевые метрики покрытия, которые сохраняют структуру распределения, или на более дорогие оценки динамики обучения, которые точнее попадают в границу решения. Решение также нуждается в защитном барьере до применения любой оценки: классы, демографические группы, временные окна и редкие режимы отказа, важные при эксплуатации, требуют минимального представительства, потому что подмножество с наибольшим средним ICR все равно может удалить примеры, определяющие производственный риск.
Методы на основе геометрии отбирают примеры, которые покрывают выбранное представление, не требуя обучения целевой модели. Алгоритм -центров6, целевая функция в духе задачи размещения объектов, выбирает примеры, которые уменьшают максимальное расстояние от любой точки до ближайшего выбранного центра в заданном эмбеддинге и метрике.
Herding идет иным путем. Исходная процедура Welling строит итеративно представительные псевдообразцы, статистики признаков которых приближают наблюдаемые моменты (Welling, 2009). Родственные целевые функции сопоставления моментов могут направлять отбор подмножества из фиксированного пула. Эти методы вычислительно привлекательны, поскольку работают с признаковыми представлениями, но их оценки по своей природе не учитывают метки.
Методы динамики обучения используют прокси-модель, чтобы найти примеры, которые могут быть важными. GraNd (Gradient Normed) и EL2N (error L2-norm)7 оценивают примеры по величине градиента или ошибке предсказания на раннем этапе обучения (Paul et al., 2021). Теоретически ценность примера можно сформулировать через функции влияния, которые измеряют, как удаление примера меняет потери на валидации, с помощью обратного эмпирического гессиана (); однако вычисление вычислительно неразрешимо ( — ) для современных значений числа параметров . GraNd обходит это, оценивая примеры по ожидаемой норме градиента (), а EL2N учитывает, что на раннем этапе обучения норма градиента по линейным слоям сильно коррелирует с ошибкой выхода (). Это позволяет находить пограничные примеры с высокой неопределенностью за один прямой проход без вычисления градиентов обратного прохода. Высокие оценки указывают на примеры, которые прокси считает трудными, но они могут указывать и на шум или нерепрезентативные примеры, поэтому нужны проверки покрытия и качества. Та же работа сообщает о полезном переносе оценок между несколькими архитектурами, что делает отбор на основе прокси менее дорогим. События забывания8 отслеживают, как часто пример сначала классифицируется верно, а затем ошибочно — в ходе обучения (Toneva et al., 2019).
Каждый алгоритм в «Сравнение алгоритмов отбора коресетов» балансирует вычисления на предварительную оценку против сокращения последующего обучения. Поскольку методы на основе геометрии и методы динамики обучения оптимизируют разные прокси, их относительный рейтинг зависит от масштаба набора данных, признаковых представлений, емкости целевой модели и бюджета на оценку; оценка вычислительно оправдана, только если сэкономленное обучение превышает накладные расходы на оценку.
| Метод | Вычислительная стоимость | Требует обучения | Лучше всего для | Ограничение |
|---|---|---|---|---|
| k-Center | или | Нет | Покрытие, исследование | Не учитывает информацию о метках |
| Herding | Нет | Сопоставление распределений | Предполагает гауссово-подобное распределение | |
| GraNd | Да (несколько эпох) | Границы решений | Требует обучения прокси | |
| Forgetting | Да (полное) | Трудные примеры | Дорого вычислять | |
| EL2N | Да (несколько эпох) | Выборка по неопределенности | Лучше всего с прокси-моделью |
Сравнение алгоритмов отбора коресетов: размер набора данных, размер коресета. Методы на основе геометрии и методы динамики обучения оптимизируют разные прокси, поэтому их рейтинг по качеству зависит от набора данных, представления, целевой модели и бюджета оценки.
Хотя методы на основе геометрии ставят во главу угла равномерное покрытие признаковых представлений, методы динамики обучения сосредотачивают емкость модели на неоднозначных пограничных примерах. «Иллюстративный отбор на основе неопределенности» показывает стратегию на основе неопределенности рядом с равномерной случайной выборкой: тогда как случайный отбор рассеивает примеры по пространству признаков, выборка по неопределенности концентрирует бюджет отбора в пограничной области, где предсказания модели остаются неустойчивыми.
Иллюстративный отбор на основе неопределенности: обе панели отбирают по пять примеров, поэтому сравнивается распределение выбора, а не бюджет. Случайная выборка распределяет эти выборы по пространству признаков; иллюстративная стратегия неопределенности концентрирует их в затененной полосе вокруг текущей границы решений.
EL2N с малой прокси-моделью дает один практичный баланс между стоимостью оценки и качеством отбора. Подход обучает облегченную модель несколько эпох, вычисляет оценки EL2N и выбирает подмножество с учетом проверок покрытия и качества. Прокси должна выдавать ранжирование, которое переносится на целевую модель, и вложения окупаются, только если сокращение обучения превышает накладные расходы на отбор. Конкретный сценарий иллюстрирует этот процесс, не утверждая, что его подмножество в 10 процентов сохраняет точность.
Пример: отбор коресетов на практике
Сценарий: Инженерная команда хочет выбрать коресет на 100 000 примеров (10 процентов) из 1 млн обучающих изображений для более быстрой итерации модели.
Диагностика: Наивное случайное подвыборочное прореживание теряет редкие классы и пограничные примеры. Обучение облегченной прокси-модели за 5 эпох вычисляет оценки ошибок EL2N и сохраняет примеры с высокой неопределенностью около границы решений.
Системный урок: отбор коресетов на основе прокси заменяет часть проходов по полным данным целевым вычислением оценок. Он ускоряет обучение полной модели, только если ранжирование прокси переносится, а проверки покрытия сохраняют редкие классы и пограничные случаи.
«Отбор коресета на основе EL2N» показывает, как вычислить оценки EL2N и отобрать коресет с помощью облегченной прокси-модели. Механизм тратит небольшой объем вычислений на зондирование, чтобы найти примеры с высокой неопределенностью около границы решений, а затем обучает полную модель на сохраненном подмножестве, а не на избыточных легких примерах. Для примера нужен загрузчик без перемешивания, чтобы позиция каждой оценки оставалась согласованной с индексом примера в наборе данных.
Оценка на основе прокси превращает неопределенность в переиспользуемые индексы отбора: compute_el2n_scores измеряет, какие примеры все еще путают кратко обученную модель, а select_coreset сохраняет эти информативные примеры для полного прогона обучения.
Отбор коресета на основе EL2N: функция compute_el2n_scores обучает прокси-модель несколько эпох, а затем измеряет ошибку предсказания через L2-расстояние от one-hot меток. Высокие оценки указывают на примеры, которые прокси считает трудными, в том числе потенциально зашумленные. Функция select_coreset иллюстрирует ранжирование по этой оценке; промышленное использование также требует проверки покрытия, шума и целевого качества.
def compute_el2n_scores(model, dataloader, num_epochs=5):
"""Вычисляет оценки EL2N.
Возвращает L2-норму (предсказание - one_hot_label).
"""
# Обучаем прокси-модель несколько эпох, чтобы получить осмысленные предсказания
train_proxy(model, dataloader, num_epochs)
scores = []
model.eval()
for x, y in dataloader:
logits = model(x)
probs = softmax(logits, dim=1)
# One-hot кодирование меток
one_hot = zeros_like(probs).scatter_(1, y.unsqueeze(1), 1)
# Оценка EL2N = L2-расстояние от уверенного предсказания
el2n = (probs - one_hot).norm(dim=1) # Высокое значение = неуверенность
scores.extend(el2n.tolist())
return scores
def select_coreset(scores, dataset, fraction=0.1):
"""Выбирает top-k примеров с наибольшей оценкой (наиболее неопределенные)."""
k = int(len(dataset) * fraction)
# Сортировка по убыванию оценки (сначала наибольшая неопределенность)
indices = argsort(scores, descending=True)[:k]
return Subset(dataset, indices)
# Иллюстративное подмножество 10%; перед использованием проверьте точность и покрытие
scores = compute_el2n_scores(proxy_model, full_loader)
coreset = select_coreset(scores, full_dataset, fraction=0.1)
train_full_model(model, coreset)
Дедупликация данных
Пока отбор коресетов определяет, какие примеры сохранить по их информативности, дополняющий подход нацелен на дубликаты, которые добавляют вычисления без добавления сигнала обучения. Дедупликация может дать немедленный выигрыш в эффективности, особенно для точных и почти точных дубликатов, и не требует обучения модели. Поэтому это одна из самых доступных оптимизаций в отборе данных, однако пороги почти дубликатов нужно проверять, чтобы конвейер не удалил полезный сигнал распределения.
Простейшая форма дедупликации (введенная как этап конвейера инженерии данных в разделе «Систематическая обработка данных» и здесь поднятая до уровня рычага оптимизации) использует хеширование для точных совпадений. Вычисляя криптографический хеш (MD5 или SHA-256) для каждого примера и удаляя примеры с одинаковыми хешами, можно устранить побайтовые дубликаты, которые неизбежно накапливаются в больших корпусах, собранных из веба. Этот процесс вычислительно дешев, растет линейно с размером набора данных и тривиально распараллеливается.
Обнаружение почти дубликатов решает задачу для содержимого, которое отличается на уровне байтов, но сохраняет значительное перекрытие токенов или символьных шинглов. Для текста MinHash9 с локально-чувствительным хешированием10 (LSH) эффективно приближает сходство Жаккара11. На практике конвейер превращает каждый документ в множество перекрывающихся символьных или словесных -шинглов, сжимает эти множества в MinHash-сигнатуры фиксированной длины, где вероятность коллизии хешей равна сходству Жаккара, и разбивает сигнатуры на полос по строк с помощью LSH. Документы, совпадающие во всех строках одной полосы, попадают в один бакет, что ограничивает дорогую проверку сходства вероятными кандидатами и позволяет избежать невозможного попарного сравнения для миллиардов веб-документов. Метод находит слабо отредактированный контент с большим перекрытием, но не доказывает семантической эквивалентности перефразирований.
Для изображений перцептивное хеширование дает сигнатуры, устойчивые к мелким преобразованиям вроде изменения размера и сжатия, и находит визуально похожих кандидатов, которые хранятся в разных форматах. Сходство на основе эмбеддингов может находить семантически близких соседей, вычисляя плотные представления (CLIP12 (Radford et al., 2021) для изображений, sentence transformers для текста). Однако близость сама по себе не доказывает дублирования, а подход требует больших вычислительных накладных расходов.
Дедупликация может уменьшать запоминание повторяющегося содержимого и не тратить FLOP на точные или почти точные дубликаты. Однако она может изменять намеренное эмпирическое взвешивание корпуса, поэтому пороги и последующее качество нужно проверять, а не исходить из того, что каждый дубликат вреден.
Системное влияние дедупликации меняется, когда входные примеры индексируют постоянное состояние модели, а не проходят через вычислительные слои без сохранения состояния.
DLRM и дедупликация эмбеддингов
Маячная модель DLRM из «Состав маячных моделей: биографии моделей» ограничена емкостью памяти: таблицы эмбеддингов занимают терабайты для миллиардов пользовательских и товарных идентификаторов. Значительная часть этой емкости тратится на холодные эмбеддинги, то есть идентификаторы, которые редко встречаются в обучающих данных.
Отбор данных для DLRM может включать дедупликацию взаимодействий и прореживание эмбеддингов для холодных идентификаторов. Удаление повторяющихся взаимодействий сокращает число обучающих примеров, но уменьшает таблицу эмбеддингов только тогда, когда идентификаторы исчезают или меняется политика размещения, хеширования или совместного использования.
Прореживание данных по качеству
Дедупликация удаляет избыточные примеры, но остается третья категория проблемных данных: примеры, которые активно вредят обучению. Прореживание по качеству устраняет примеры, которые либо не дают значимого сигнала, либо вносят противоречивую информацию, сбивающую оптимизацию.
Обнаружение ошибок в метках может быть прореживанием по качеству с наибольшим эффектом. Инструменты вроде Cleanlab находят примеры, для которых назначенная метка может быть неверной, исходя из паттернов уверенности модели в ходе обучения. Пример, который модель стабильно предсказывает как класс A, но который помечен как класс B, может быть трудным пограничным случаем, сдвигом распределения, слепым пятном модели или ошибкой разметки. Оценка должна запускать проверку, а не автоматическое удаление; подтвержденные ошибки затем можно исправить или удалить.
Удаление выбросов решает другую проблему: примеры, далекие от любого центра кластера в пространстве признаков. Такие точки могут указывать на шум, ошибки разметки или повреждение, но они также могут быть редкими пограничными случаями, которые определяют риск развертывания. Ключ — отличить информативные выбросы от недействительных примеров: нужны консервативные пороги и проверка срезов до удаления.
Фильтрация малоинформативных примеров применяет эвристики, специфичные для домена, чтобы удалить примеры, в которых недостаточно сигнала для обучения. Для текстовых корпусов это часто означает удаление искаженного текста с высокой перплексией (перплексия — мера того, насколько неожиданным для языковой модели является текст, поэтому высокие значения отмечают бессвязные строки) и, в некоторых конвейерах, шаблонного или повторяющегося текста с низкой перплексией. Для наборов изображений фильтрация нацелена на размытые, поврежденные или почти однородные примеры, которые дают мало визуальной информации.
Помимо эвристик и перплексии, промышленные конвейеры предобучения сильно опираются на фильтрацию на основе классификатора: обучается облегченный линейный классификатор с высокой пропускной способностью (например, fastText), в котором качественные эталонные тексты (например, Википедия, книги и научные статьи) служат положительными примерами, а необработанные веб-дампы — отрицательными. Классификатор присваивает каждому собранному документу непрерывную оценку качества, что позволяет конвейерам отфильтровать миллионы низкокачественных веб-страниц при скорости приема в гигабайты в секунду, без тяжелых вычислительных затрат на оценку полноценной нейронной языковой модели.
Вместе эти три техники статического прореживания — отбор коресетов, дедупликация и фильтрация по качеству — могут сократить объем работы до обучения. При фиксированном числе эпох, размере батча и работе на пример сокращение набора данных на 50 процентов означает на 50 процентов меньше прямых проходов, обратных проходов и обновлений градиента. Графики обучения, которые добавляют компенсирующие эпохи или шаги, уменьшают эту экономию.
Статическое прореживание отвечает на вопрос о том, что сохранить, но считает ответ фиксированным. Как только прореженный набор данных определен, каждая эпоха обучается на одном и том же подмножестве. Однако полезность примера может меняться по мере обучения модели: примеры, которые бросают вызов недообученной модели, могут стать легкими после достаточного числа градиентных шагов. Методы динамического отбора устраняют это ограничение, адаптируя обучающие данные на каждом этапе с учетом того, что модель уже освоила.
Динамический отбор
Предельный сигнал обучения примера нестационарен в ходе обучения. В начале оптимизации широкое покрытие дает устойчивые градиенты, которые формируют общие представления признаков. По мере сходимости параметров нормы градиентов освоенных примеров стремятся к нулю. Прямые и обратные проходы на этих примерах продолжают тратить циклы ускорителя и передачи через высокоскоростную память (HBM), почти не обновляя параметры, и их эффективное ICR стремится к нулю. Динамический отбор снижает эти потери, адаптируя состав батча к текущему состоянию модели. Так отбор переходит из автономного этапа предобработки в активный цикл исполнения: он меняет число операций () во время работы, а загрузчикам данных приходится балансировать накладные расходы на оценку и пропускную способность ускорителя ().
Учебный план: от простого к сложному
Первый метод динамического отбора, учебный план13 (Bengio et al., 2009; Soviany et al., 2022), задает порядок, в котором данные предъявляются модели. Вместо случайного перемешивания он начинает с более простых примеров и постепенно вводит более сложные, как люди, которые сначала осваивают основы и лишь потом переходят к трудному материалу.
Учебный план может менять траекторию оптимизации, управляя тем, какие градиенты доминируют на каждом этапе. Простые примеры могут давать устойчивые ранние сигналы, а примеры с высокой оценкой сложности могут содержать полезную информацию о границе, шум меток или выбросы. Расписание от простого к сложному может сгладить обучение на некоторых нагрузках, но его польза зависит от оценки сложности, правила темпа, модели и данных; поэтому «Иллюстративное сокращение эпох для учебного плана» рассматривает экономию как иллюстративную, а не гарантированную.
Реализация учебного плана требует двух компонентов: оценщика сложности, который ранжирует примеры, и функции темпа, которая задает, насколько быстро вводятся трудные примеры. Распространенный выбор — линейный темп: где — текущая эпоха, — общий размер набора данных, а — число эпох разогрева, по истечении которых полный набор данных становится доступным. В ранние эпохи обучение идет на самой простой доле ; после разогрева обучение идет на полном наборе данных. С системной точки зрения пересортировка многотерабайтных наборов данных от эпохи к эпохе разрушает последовательное упреждающее чтение и заставляет ускорители простаивать из-за задержки хранилища. Промышленные загрузчики данных реализуют учебные планы, предварительно сортируя данные офлайн по дискретным шардам или корзинам с уровнями сложности. Во время обучения воркеры последовательно читают шарды из хранилища, сохраняя локальные буферы перемешивания внутри каждого уровня; так сохраняется высокая пропускная способность последовательного чтения при разнообразии батчей и устойчивости градиентов.
Выбор оценщика сложности — системное решение, поскольку он обменивает накладные расходы на зондирование на качество упорядочивания, как показано в «Стратегии оценки сложности для учебного плана». Оценка по потерям и уверенности дает лучший порядок ценой дополнительного вывода, эвристики не требуют вычислений, но требуют знания предметной области, а самостоятельный темп переносит адаптацию в сам цикл обучения.
| Стратегия | Оценка сложности | Лучше всего для |
|---|---|---|
| На основе потерь | Потери прокси-модели (низкие = простые) | Универсальный вариант; требует обучения прокси |
| На основе уверенности | Уверенность модели-учителя (высокая = простые) | Когда есть учитель; схемы дистилляции |
| Эвристики домена | Длина предложения, сложность изображения | Без дополнительных вычислений; нужны знания домена |
| Самостоятельный темп | Потери текущей модели (обновляются каждую эпоху) | Адаптивный; прокси не нужна |
Стратегии оценки сложности для учебного плана: строки сравнивают источник сигнала каждого оценщика с системным требованием или компромиссом, который он вносит.
«Иллюстративное сокращение эпох для учебного плана» использует гипотетические числа эпох, чтобы показать, как экономия от учебного плана вычислялась бы для разных нагрузок. Значения не являются измерениями из цитируемых исследований учебного плана.
| Набор данных | Модель | Стратегия темпа | Эпохи до целевой точности | Сокращение эпох |
|---|---|---|---|---|
| CIFAR-10 | ResNet-18 | Линейный разогрев | 115 против 150 в базовом варианте | 23,3% меньше эпох |
| CIFAR-100 | ResNet-32 | Самостоятельный темп | 180 против 220 в базовом варианте | 18,2% меньше эпох |
| ImageNet | ResNet-50 | На основе потерь | 80 против 90 в базовом варианте | 11,1% меньше эпох |
| ImageNet | ResNet-50 | Обученный (зашумленные метки) | 70 против 90 в базовом варианте | 22,2% меньше эпох |
Иллюстративное сокращение эпох для учебного плана: таблица применяет одно правило целевой точности к гипотетическим базовым и учебным числам эпох. Она демонстрирует арифметику, но не устанавливает рейтинг наборов данных или методов.
Сценарий показывает, что полезный прирост от учебного плана нужно измерять при фиксированной целевой метрике. Порядок зависит от задачи: антиучебный план предъявляет сначала трудные примеры, а самостоятельное обучение (self-paced learning) подстраивает сложность под текущие потери модели. Ни один из этих порядков не является универсально лучшим.
Активное обучение: человек в контуре
Учебный план оптимизирует порядок, в котором предъявляются примеры, но предполагает, что все примеры уже размечены. Это допущение ломается в специализированных областях, где разметка требует существенной экспертизы, времени или денег. Вместо того чтобы размечать все заранее, активное обучение14 (Settles, 2012; Ren et al., 2021) переносит цель оптимизации с выбора размеченных примеров для обучения на выбор неразмеченных примеров, которые стоит разметить.
Активное обучение превращает сбор данных из статического в итеративный процесс запросов. Проследите круговой путь на «Замкнутом цикле активного обучения»: как метрики неопределенности модели выбирают неразмеченные примеры высокой ценности для экспертной разметки.
Эффективность активного обучения существенно зависит от стратегии запросов, которая выбирает примеры для разметки (Settles, 2009; Settles, 2012; Ren et al., 2021). Простейший подход — выборка по неопределенности: выбираются примеры, на которых модель наименее уверена, например предсказания с вероятностью около 0,5 для бинарной классификации. Оценивать такой критерий дешево, если есть одна модель, но он может чрезмерно концентрировать запросы в одной неоднозначной области. Запрос по комитету развивает эту идею, обучая несколько моделей и выбирая примеры, на которых они расходятся сильнее всего; так учитывается эпистемическая неопределенность, которую одна модель может упустить.
Практикам, готовым вложить больше вычислений, подходит ожидаемое изменение модели: выбираются примеры, которые при разметке вызвали бы наибольшее обновление градиента. Этот подход теоретически обоснован, но дорог. Выборка по разнообразию дополняет методы на основе неопределенности: она выбирает примеры, непохожие на уже размеченные, и улучшает покрытие, не концентрируя все запросы вокруг одной неоднозначной области.
Активное обучение особенно ценно в областях, где разметка требует экспертизы. Например, в медицинской визуализации система ИИ, которая ставит диагноз по рентгеновским снимкам, может уверенно распознавать частые состояния, но быть неуверенной в редких случаях. Направляя разметку экспертов на такие неоднозначные случаи, активное обучение оптимизирует использование дорогого времени специалистов и ускоряет улучшение модели.
Замкнутый цикл активного обучения: цикл отбора обменивает вычисления на оценку прокси на запросы, выбранные из неразмеченного пула для разметки оракулом. Критерии неопределенности, разнообразия и покрытия ищут больше полезной информации на одну разметку, чем ненаправленная выборка.
Экономические последствия могут быть существенными в узкоспециализированных областях, где стоимость разметки и сроки выполнения могут доминировать над вычислениями для оценки кандидатов. Эти стратегии запросов задают каждую итерацию цикла активного обучения на «Замкнутом цикле активного обучения», а простое сравнение бюджетов показывает, как активное обучение может сократить стоимость разметки и объем работы при обучении в заданных предположениях.
Пример: рентабельность активного обучения
Задача: Команда больницы располагает 1 млн неразмеченных снимков, стоимостью разметки у специалиста $5 за метку, бюджетом $500 000 и сроком 1 месяц. Как выборка по неопределенности меняет стоимость разметки и объем работы обучения за эпоху по сравнению со случайным базовым вариантом того же бюджета?
Сценарий A: наивная разметка
- Стоимость: разметка всех 1 млн снимков стоила бы $5,000,000 (в 10 раз больше бюджета).
- Базовый вариант того же бюджета: $500,000 ÷ $5 за метку = 100 000 случайных снимков.
- Итог наивной разметки: случайный отбор не гарантирует покрытия редкой патологии.
Сценарий B: активное обучение
- Стратегия: выборка по неопределенности выбирает 50 000 снимков для разметки специалистом.
- Стоимость: 50 000 × $5 за метку = $250,000 (на 50 процентов ниже бюджета).
- Объем работы обучения: 100 000 ÷ 50 000 = в 2 раза меньше примеров за эпоху, чем в базовом варианте того же бюджета.
- Итог активного обучения: сопоставимость со 100 000 случайными снимками требует эмпирической проверки.
Системный вывод: относительно базового варианта того же бюджета отбор экономит $500,000 − $250,000 = $250,000; точность все равно требует эмпирической проверки.
Целенаправленный отбор примеров может сократить объем разметки, необходимый для достижения целевой метрики. Сравните две иллюстративные траектории точности на «Множитель активного обучения», отмечая горизонтальный разрыв между активной выборкой по неопределенности и базовым случайным отбором по мере роста числа примеров.
Множитель активного обучения: точность модели отложена против числа размеченных примеров на логарифмической оси. В этом иллюстративном сценарии активное обучение (сплошная зеленая линия) достигает той же точности меньшим числом меток, чем случайный отбор (серый пунктир); стрелка отмечает примерно четырехкратный разрыв в эффективности меток около 90 процентов точности.
Рисунок отслеживает иную ось, чем прикидочный расчет в «Пример: рентабельность активного обучения». Он иллюстрирует эффективность меток, а врезка считает деньги на разметку при отдельных предположениях. Активное обучение также несет расходы на оценку, получение данных и повторное переобучение, поэтому сквозная экономия может быть меньше разрыва в числе меток.
Активное обучение может делать больше, чем экономить на разметке: подходящее правило запросов концентрирует проверку на неуверенных, разнообразных или связанных с отказами примерах.
Пример: майнинг трудных негативов (hard negative mining) в умном дверном звонке
Сценарий: детектор зрения умного дверного звонка получает непрерывные видеопотоки, в которых преобладают пустые фоны (легкие негативы) и обычные позы пешеходов.
Диагностика: случайная выборка кадров может пропустить редкие ложные срабатывания, например статуи, кучи белья и тени в форме человека. Активное обучение направляет неуверенные предсказания («Человек: 51%») и выборочные ошибки из эксплуатации проверяющим людям для целевой разметки.
Системный урок: майнинг трудных негативов может повысить эффективность разметки, направляя усилия проверки на подозреваемые ложные срабатывания и другие трудные негативы. Поток запросов по-прежнему нуждается в проверках разнообразия и покрытия, чтобы не исключить уверенные, но систематически неверные случаи.
Полуконтролируемое обучение: использование неразмеченных данных
Рассмотрим иллюстративный сценарий медицинской визуализации: 50 000 рентгенограмм грудной клетки, из которых 500 просмотрены и размечены радиологами15, то есть доля разметки составляет 1 процент. Достаточно ли такого исходного набора, зависит от задачи и распределения. Полуконтролируемое обучение может использовать оставшиеся 49 500 изображений, если неразмеченный пул соответствует целевому распределению, а метод проверен на размеченных данных.
Активное обучение оптимизирует, какие примеры размечать, но все равно требует человеческой разметки для каждого выбранного примера. Полуконтролируемое обучение переносит инженерный компромисс с человеческой разметки на вычисления ускорителя: оно использует небольшое размеченное подмножество, чтобы закрепить оптимизацию на большом неразмеченном пуле, извлекая сигналы контроля напрямую из неаннотированных входов. Это позволяет моделям приблизиться к точности полностью контролируемого обучения при значительно меньшем числе ручных меток, если неразмеченный пул отражает целевое распределение.
Основная идея полуконтролируемого обучения состоит в том, что неразмеченные данные, хотя не могут напрямую научить отображению входов в выходы, содержат структурную информацию о распределении входов , которая может ограничивать пространство гипотез. При допущениях гладкости и кластерности граница решения, которая проходит через плотную область, назначает разные метки близким входам и менее правдоподобна, чем граница в области низкой плотности. Полуконтролируемые методы опираются на эти допущения, которые нужно проверять на целевой задаче.
Три техники реализуют эту идею регуляризации распределения. Псевдоразметка16 обучается на размеченном подмножестве, получает предсказания модели на неразмеченном пуле и включает примеры, превышающие порог уверенности, как синтетическую эталонную истину для последующего переобучения. Порог уверенности задает критический системный компромисс: слишком низкий порог пропускает шум меток, который ухудшает обучение, а слишком высокий отбрасывает информативные примеры и тратит неразмеченный пул впустую.
Регуляризация согласованности17 требует, чтобы модель выдавала инвариантные предсказания для возмущенных версий одного и того же входа. Поскольку семантика классов инвариантна к реалистичным преобразованиям, таким как обрезка, поворот или сдвиг цвета, функция потерь штрафует расхождение предсказаний между двумя стохастическими представлениями неразмеченного примера. Гибридные подходы вроде FixMatch18 объединяют оба механизма: они генерируют псевдометку по слабо аугментированному представлению, когда уверенность предсказания превышает порог, а затем обучают модель предсказывать эту метку для сильно аугментированного варианта того же входа.
Распространение меток трактует полуконтролируемое обучение как диффузию по графу: строится граф сходства по представлениям примеров, и метки распространяются от размеченных узлов к неразмеченным соседям. Подход хорошо работает, когда представления образуют хорошо разделенные кластеры, хотя построение и обход графа сходства на больших наборах данных требуют существенной памяти и накладных расходов на поиск ближайших соседей.
Пример: FixMatch на CIFAR-10
Сценарий: конвейер полуконтролируемой классификации изображений обучается на CIFAR-10 всего с 250 размеченными примерами (по 25 на класс) и неразмеченными данными (Sohn et al., 2020).
Диагностика: полностью размеченный обучающий набор CIFAR-10 содержит 50 000 меток. FixMatch генерирует псевдометки с высокой уверенностью (порог > 0,95) на слабо аугментированных неразмеченных изображениях и обеспечивает согласованность на сильно аугментированных вариантах, достигая точности 94,9 процента в цитируемом эксперименте.
Системный урок: полуконтролируемое обучение обменивает дополнительные вычисления обучения на меньшее число ручных меток. При допущениях о стоимости разметки из главы сценарий FixMatch снижает затраты на подготовку набора данных в 8,1 раза; сквозная экономия зависит от стоимости неразмеченных данных и вычислений.
Системный компромисс полуконтролируемого обучения обменивает усилия по разметке на дополнительные вычисления над размеченными и неразмеченными примерами. Он может приблизиться к точности полностью контролируемого обучения при меньшем числе меток, но ни сокращение меток, ни рост вычислений не универсальны. Сравнение на CIFAR-10 делает один такой компромисс конкретным («Эффективность меток FixMatch на CIFAR-10»).
| Бюджет меток | Метод | Точность | Эффективность меток |
|---|---|---|---|
| 50 000 (100%) | Полный обучающий набор | — | Эталон по числу меток |
| 4 000 (8%) | FixMatch | 95,7% | в 12,5 раза эффективнее |
| 250 (0,5%) | FixMatch | 94,9% | в 200 раз эффективнее |
| 40 (0,08%) | FixMatch | 88,6% | в 1250 раз эффективнее |
Эффективность меток FixMatch на CIFAR-10: при 250 метках (0,5 процента набора данных) FixMatch достигает точности 94,9 процента, используя в 200 раз меньше меток, чем содержит полный обучающий набор.
Эти выигрыши в эффективности зависят от благоприятных допущений о распределении. Полуконтролируемое обучение предполагает, что неразмеченные данные взяты из того же распределения, что и размеченные, и оно испытывает трудности, когда неразмеченные данные содержат примеры вне распределения (модель уверенно их неверно размечает), когда дисбаланс классов сильный (псевдометки усиливают смещение к мажоритарному классу) или когда размеченное множество покрывает не все классы (что мешает распространению меток на невиденные классы). Всегда проверяйте на отложенной выборке с истинными метками, чтобы выявлять несоответствие распределений.
Несмотря на эти ограничения, полуконтролируемое обучение может снижать требования к меткам, сохраняя точность на подходящих задачах. Среди рассмотренных техник отбор коресетов и дедупликация прореживают малоценные примеры перед обучением; учебный план меняет порядок предъявления; активное обучение выбирает, какие примеры получат ручную разметку; а полуконтролируемое обучение извлекает дополнительный сигнал из неразмеченного пула. Каждая техника может снижать зависимость от меток, специфичных для задачи, но ни одна не устраняет необходимость в размеченной оценке. Этот ряд ведет к родственной возможности: метки, специфичные для задачи, возможно, не нужны для предобучения. Сама структура данных (то, что изображения кошек похожи на другие изображения кошек, а связные предложения следуют грамматическим закономерностям) может давать сигнал контроля, но качество на последующих задачах все равно требует проверки, согласованной с задачей.
Самоконтролируемое обучение
GPT обучали предсказывать следующий токен в последовательности. BERT обучали восстанавливать замаскированные токены. Ни одна из этих целей предобучения не требовала специфичных для задачи человеческих меток. Самоконтролируемое обучение19 (SSL) обобщает эту идею: проектируя претекстовые задачи, которые выводят контроль из структуры данных, модели могут выучивать переиспользуемые представления из неразмеченных данных в масштабе. Если активное и полуконтролируемое обучение снижают спрос на метки, то SSL меняет учет, делая неразмеченную структуру сигналом предобучения. На трехэтапной схеме это скорее расширение доступного пула, чем четвертый этап отбора: вопрос смещается от того, на каких размеченных примерах обучать, к тому, как неразмеченные примеры могут поддерживать предобучение. Это отвечает одному аспекту стены данных из раздела «Граница ICR: когда данные становятся налогом», расширяя понятие обучающего сигнала, но не отменяя требований к качеству корпуса, лицензированию, покрытию и размеченной оценке.
Метки — лишь одна форма контроля; претекстовая задача может также извлекать сигнал обучения из структуры данных, как обобщено в «Самоконтролируемые претекстовые задачи по модальностям».
| Модальность | Самоконтролируемая задача | Сигнал контроля |
|---|---|---|
| Текст | Маскированное языковое моделирование | Предсказать [MASK] по контексту |
| Текст | Предсказание следующего токена | Предсказать следующий токен в последовательности |
| Изображения | Контрастивное обучение | То же изображение (с аугментацией) против других изображений |
| Изображения | Маскированное автокодирование | Восстановить замаскированные фрагменты |
| Мультимодальность | Выравнивание в духе CLIP | Сопоставить пары «изображение — текст» |
Самоконтролируемые претекстовые задачи по модальностям: каждая задача извлекает контроль из структуры данных, а не из человеческих меток, что позволяет предобучаться на крупных неразмеченных корпусах.
Претекстовые задачи генерируют сигналы контроля автоматически. Цели с маскированными токенами могут побуждать модели выучивать грамматическую и семантическую структуру; предсказание следующего токена учит структуре продолжения; а контрастивные цели для изображений поощряют признаки, инвариантные к выбранным преобразованиям. Эти подходы опираются на семейства сверточных сетей и трансформеров из раздела «Архитектуры нейронных сетей», но системный учет важен: самоконтроль убирает аннотирование конкретной задачи со входа в предобучение, но не убирает стоимость данных. Предобучение может начинаться на неразмеченных корпусах без ожидания меток на уровне примеров, но сбор, фильтрация, лицензирование, хранение и обработка остаются. Отделение предобучения от разметки под конкретную задачу меняет экономику машинного обучения, когда представление переносится между задачами; адаптация под задачу и оценка все равно несут собственные требования к данным.
Экономика амортизации
Центральная роль самоконтролируемого обучения в рабочих процессах фундаментальных моделей напрямую следует из амортизации стоимости. Фундаментальная модель — это широко предобученная переиспользуемая базовая модель, которая адаптируется к последующим задачам через дообучение. Такая архитектура делит стоимость на две фазы: дорогие предварительные инвестиции в предобучение, которое выполняется один раз на неразмеченных данных, и облегченные адаптации под конкретные задачи, переиспользуемые во многих приложениях («Иллюстративная амортизация фундаментальной модели»).
| Подход | Метки на задачу | Вычисления на задачу | Получение данных |
|---|---|---|---|
| Обучение с нуля | 100 тыс.–1 млн размеченных | 100% полного обучения | Сбор под конкретную задачу |
| Дообучение фундаментальной модели | 100–1 тыс. размеченных | 1–5% полного обучения | Переиспользование корпуса предобучения |
Иллюстративная амортизация фундаментальной модели: диапазоны меток и вычислений — это предположения сценария. Они показывают, почему переиспользование может снижать предельную стоимость задачи, когда представления переносятся, но это не универсальное соотношение для дообучения.
Чтобы проиллюстрировать эту экономическую перемену, рассмотрим компанию, которая строит 10 специализированных классификаторов. При предположениях сценария каждая задача, обученная с нуля, требует 100 000 меток по $1 за метку, то есть $1 млн на все задачи. Смоделированная нагрузка на вычисления составляет 10 000 GPU-часов.
Сценарий дообучения один раз тратит 10 000 GPU-часов, а затем назначает каждой задаче 1 000 меток и 50 GPU-часов вычислений. По всем 10 задачам смоделированная стоимость меток для дообучения составляет $10 тыс.
При этих входных данных стоимость разметки падает в 100 раз, а предельные вычисления на задачу — в 20 раз. Это следствия выбранных значений сценария, тогда как суммарные вычисления становятся выгодными только тогда, когда достаточное число последующих задач амортизирует предобучение.
Дообучение становится экономичным, когда представления эффективно переносятся, а число последующих задач превышает порог безубыточности. Сравнение стоимости бок о бок на «Амортизация стоимости в фундаментальных моделях» противопоставляет повторяющееся обучение с нуля слева и предобучение с последующим дешевым дообучением справа.
Амортизация стоимости в фундаментальных моделях: обучение с нуля (слева) требует 1 000 GPU-часов на задачу (всего 10 000 GPU-часов на 10 задач). Подход с фундаментальной моделью (справа) платит 10 000 GPU-часов заранее за предобучение, но сокращает каждую последующую задачу до 50 GPU-часов. При 10 задачах итоги сопоставимы (10 000 GPU-часов против 10 500 GPU-часов), но предельная стоимость задачи падает в 20 раз, а точка перехода в пользу фундаментальной модели находится примерно при 10,5 задачах. Нарисованный снимок для 10 задач поэтому остается чуть ниже этой точки безубыточности.
Парадигма фундаментальной модели
Экономика амортизации различается между самоконтролируемыми методами, поскольку каждая цель нагружает разные аппаратные узкие места на границе эффективности по стоимости. Контрастивное обучение требует больших пулов негативных примеров, чтобы предотвратить коллапс представлений. SimCLR (Chen et al., 2020) берет негативы непосредственно из образцов, присутствующих в одном мини-батче, что требует размеров батча до 4 096; распределение их по ускорителям означает существенное выделение памяти под промежуточные активации и частую коллективную коммуникацию (all-gather) по межпроцессорному соединению. MoCo (He et al., 2020) отделяет пул негативов от размера мини-батча, кэшируя представления в динамической очереди, которая обновляется через усредненный по моменту кодировщик; это позволяет использовать большие наборы негативов на скромных конфигурациях ускорителей, не насыщая память и пропускную способность соединения. Маскированное моделирование по-разному меняет память и арифметическую интенсивность: маскированные автокодировщики (MAE) отбрасывают до 75 процентов визуальных фрагментов до кодировщика, резко сокращая квадратичные накладные расходы памяти у самовнимания, тогда как маскированное языковое моделирование обрабатывает полные последовательности токенов с двунаправленным вниманием. Авторегрессионное генеративное предобучение обменивает сырые вычисления на широкий перенос на задачи, следуя эмпирическому степенному масштабированию по токенам, параметрам и вычислениям. Эти методы опираются на архитектуры из раздела «Архитектуры нейронных сетей»; для отбора данных самоконтролируемое предобучение умножает полезность дефицитных размеченных данных, извлекая переиспользуемые представления непосредственно из структуры сырых данных.
Когда стоимость предобучения переиспользуется между задачами, SSL поддерживает парадигму фундаментальной модели20 (Bommasani et al., 2021). Основные принципы отбора данных (отбор коресетов, учебный план и активное обучение) остаются необходимыми и в этой парадигме. Кураторство корпуса предобучения применяет дедупликацию и фильтрацию по качеству в веб-масштабе, а последующий отбор определяет, какие примеры дообучения максимизируют перенос на конкретную задачу.
Один дефект корпуса предобучения распространяется на множество последующих задач.
Самоконтролируемое обучение решает проблему узкого места меток, извлекая обучение из структуры данных, а не из человеческой аннотации, но саму нехватку данных оно решить не может. Редким классам может не хватать примеров, пограничные случаи могут никогда не встретиться в природе, а ограничения приватности могут мешать собирать реальные образцы. Третий этап конвейера отбора данных решает этот разрыв, создавая новые данные по требованию, а не отбирая или курируя существующие.
Генерация синтетических данных
Сбор реальных данных упирается в физические и юридические границы: автономные парки не могут безопасно разбивать автомобили, чтобы получить траектории катастрофических столкновений, системы здравоохранения не могут передавать защищенную телеметрию пациентов через межведомственные барьеры, а периферийные устройства сталкиваются с акустическими условиями задолго до массового выпуска продукта. Когда целевые распределения обладают экстремальным дефицитом или нулевым эмпирическим покрытием, ни статическая фильтрация, ни динамическая приоритизация образцов не могут извлечь сигнал, которого нет в исходном корпусе. Синтетическая генерация данных решает это фундаментальное узкое место, создавая обучающие распределения напрямую. Инженерная стратегия переходит от кураторства (фильтрации и взвешивания существующих записей) к созданию: генерации новых входов, доменных возмущений или целевых меток контроля, чтобы удовлетворить ограничения статистического покрытия.
Аугментация данных: синтез на основе преобразований
Аугментация данных — самая дешевая по накладным расходам форма синтетической генерации: она расширяет эффективное обучающее распределение, динамически преобразуя существующие образцы при загрузке. Поскольку преобразования, сохраняющие метку, порождают новые входы без расширения постоянного хранилища, аугментация умножает разнообразие набора данных без дополнительной стоимости получения данных. Однако в конвейере обучения на ускорителях аугментация смещает вычислительное узкое место между центральным процессором хоста и ускорителем. При выполнении в рабочих потоках CPU хоста интенсивные декодирование и пространственные преобразования могут насытить ядра хоста и оставить ускоритель без данных по шине PCIe. Перенос преобразований в ядра ускорителя устраняет пузыри передачи «хост — устройство», но потребляет высокоскоростную память (HBM) и такты вычислений, которые иначе выполняли бы обновления градиентов.
Для данных изображений конвейеры преобразований обеспечивают инвариантности, нужные на этапе развертывания (Shorten and Khoshgoftaar, 2019). Геометрические операции (поворот, горизонтальное отражение, случайная обрезка и масштабирование) обеспечивают инвариантность к точке наблюдения, а фотометрические корректировки (яркость, контраст и цветовое дрожание) имитируют шум сенсора и изменчивое освещение. Более агрессивные стратегии напрямую меняют топологию входа: Cutout21 накладывает случайные прямоугольные нулевые маски, чтобы не допустить зависимости от локальных признаков; MixUp (Zhang et al., 2018) строит виртуальные образцы линейными комбинациями пар изображений и их one-hot меток (); а CutMix22 вставляет прямоугольный фрагмент одного изображения в другое, смешивая метки пропорционально площади фрагмента. Поскольку CutMix и MixUp работают через линейные комбинации тензоров и блочные копирования памяти прямо в памяти устройства, они дают сильную регуляризацию в пространстве данных с ничтожными накладными расходами FLOP.
Текстовая аугментация имеет другие ограничения, потому что дискретные словари токенов не образуют гладких геометрических многообразий. Обратный перевод23 дает семантическое перефразирование для задач «последовательность в последовательность», пропуская одноязычные корпуса целевого языка через промежуточную модель, чтобы сгенерировать синтетические пары с исходным языком. Более простые эвристические преобразования (например, замена синонимов через WordNet, случайная вставка или удаление токенов) вносят локальные возмущения, но рискуют испортить семантические метки, если их применять без проверки на конкретной задаче.
Вместо ручной настройки расписаний преобразований автоматический поиск политик оптимизирует комбинации аугментаций напрямую. AutoAugment24 использует обучение с подкреплением по дискретным пространствам операций, но несет чрезмерные вычислительные накладные расходы. RandAugment25 устраняет эту стоимость поиска, параметризуя политику всего двумя значениями: числом преобразований и общей величиной искажения .
MobileNetV2 и агрессивная аугментация
Маячная модель MobileNetV2 из «Состав маячных моделей: биографии моделей» показывает, как аугментация данных дополняет архитектуру с ограниченными ресурсами. Ее раздельные по глубине свертки заменяют стандартные пространственные свертки пространственными фильтрами по глубине с последующими поточечными проекциями , существенно сокращая число параметров и арифметическую интенсивность.
Поскольку компактные архитектуры обладают ограниченной емкостью представлений, агрессивная аугментация регуляризирует представления признаков, не раздувая память параметров вывода и бюджеты задержки. Однако величину аугментации нужно тщательно балансировать: чрезмерное искажение может превысить емкость компактной сети и привести к недообучению на исходном распределении задачи.
Генеративный синтез: создание новых образцов
Аугментация возмущает существующие обучающие точки в их локальных окрестностях. Генеративный синтез конструирует совершенно новые кортежи координат , выбирая образцы из параметрических генеративных моделей или движков физической симуляции. Системный компромисс между генеративными парадигмами охватывает спектр «стоимость — точность»:
- Генеративно-состязательные сети (GAN) обучают генератор против дискриминатора. После обучения вывод прямого генератора требует одного прямого прохода, что дает низкую задержку и высокую пропускную способность выборок. Однако обучение GAN уязвимо для коллапса мод, который подавляет хвостовое разнообразие, необходимое для надежного покрытия пограничных случаев.
- Диффузионные модели формулируют синтез как итеративное шумоподавление по параметризованной цепи Маркова или непрерывному процессу на основе оценки градиента. Латентные диффузионные системы, такие как Stable Diffusion26, обеспечивают точное семантическое управление текстовыми подсказками, работая в сжатом латентном пространстве. Однако генерация каждого батча требует развертывания от 20 до 50 последовательных прямых проходов через большую основу, что создает серьезные затраты арифметической интенсивности и пропускной способности памяти, исключающие генерацию на лету в активных циклах обучения.
- Движки физической симуляции (например, CARLA для автономного вождения или Isaac Sim и Unity для робототехники) полностью отделяют генерацию данных от нейросетевого вывода, исполняя конвейеры моделирования твердых тел, кинематики и рендеринга графики. Симуляторы выдают точные эталонные аннотации (включая трехмерные ограничивающие рамки, карты глубины и векторы скорости) из внутреннего состояния без стоимости человеческой разметки. Узкое место смещается на вычисления физики на CPU хоста и на пропускную способность растеризации графики или трассировки лучей на GPU.
Вне зависимости от генеративного движка синтетические образцы неизбежно расходятся со статистическими распределениями реальных сред развертывания. Это расхождение и определяет доменный разрыв.
Преодоление доменного разрыва
Доменный разрыв27 — это статистическое расхождение между синтетическими обучающими распределениями и данными промышленного развертывания. Когда модели оптимизируются исключительно на синтетических распределениях, границы решений подстраиваются под артефакты симулятора или генеративной модели, а не под физическую реальность. Как показано на «Проблеме доменного разрыва», классификатор, обученный на смещенном синтетическом распределении, может достичь почти нулевой ошибки на синтетическом обучении, но незаметно отказывать при оценке на реальных кластерах.
Проблема доменного разрыва: синтетические данные (синие) и реальные данные (оранжевые) занимают смещенные распределения признаков. Штриховая красная граница синтетических данных и пунктирная зеленая граница реальных данных иллюстрируют, как граница, выученная для одного распределения, может не совпадать с границей для другого.
Два взаимодополняющих подхода решают это несоответствие распределений. Рандомизация домена28 занимает агрессивную позицию: вместо точного воспроизведения реального мира она обучается на разнообразных синтетических данных, рандомизируя освещение, текстуры, фоны и параметры камеры во время генерации.
Цель состоит в том, чтобы условия развертывания попадали в диапазон вариаций, встреченных при обучении, но покрытие никогда не гарантируется одной лишь рандомизацией. Метод может быть эффективен в робототехнике и автономном вождении, когда симулятор охватывает нужные физические и визуальные факторы, а результат проверен на реальных данных.
Адаптация домена идет противоположным путем, явно выравнивая синтетическое и реальное распределения. Методы выравнивания признаков обучаются на синтетических данных и одновременно минимизируют расстояние между распределениями признаков синтетических и реальных данных, часто используя состязательное обучение для выучивания доменно-инвариантных представлений. Дообучение предлагает более простой путь: предобучить на обильных синтетических данных, чтобы выучить общие признаки, а затем дообучить на небольшом реальном наборе данных для адаптации к условиям развертывания. Самообучение объединяет эти идеи, используя модель, обученную на синтетике, для псевдоразметки реальных неразмеченных данных, а затем переобучая ее на объединенном размеченном наборе.
На практике смешивание синтетических и реальных данных дает якорь из реальных данных, сохраняя часть синтетического покрытия, но наилучшее соотношение зависит от нагрузки. «Соотношения смешивания синтетических и реальных данных» обобщает компромисс для разных соотношений смешивания.
| Доля синтетических данных | Типичный результат |
|---|---|
| 100% синтетических | Нет якоря из реальных данных; проверьте доменный разрыв |
| 80% синтетических + 20% реальных | Меньше спрос на реальные данные; проверка на данных развертывания |
| 50% синтетических + 50% реальных | Больше привязки к реальным данным; выше стоимость сбора |
| 100% реальных | Нет разрыва «синтетика — реальность»; самая высокая стоимость сбора |
Соотношения смешивания синтетических и реальных данных: чисто синтетические данные могут страдать от сдвига распределения; чисто реальные данные дороги. Оптимальное соотношение зависит от домена, точности симулятора, семейства модели и протокола валидации, поэтому таблицу стоит читать как каркас сценария, а не как универсальный рецепт.
Пример: отбор данных для KWS
Сценарий: встраиваемая система распознавания ключевых слов (KWS) нацелена на развертывание на микроконтроллере с SRAM 256 КБ и требованием более 10 000 аудиообразцов.
Диагностика: ручная запись 10 000 реальных высказываний разных дикторов и акустических условий стоит $20–50 тыс. Поэтапный конвейер из пяти уровней (исходные записи → аугментация → внедрение шума → майнинг трудных негативов → TTS-симуляция) наращивает масштаб набора данных от 500 исходных образцов.
Системный урок: многоуровневые стратегии данных могут снизить стоимость получения данных для периферийных развертываний ML с ограниченными ресурсами. В этом сценарии аугментация и внедрение шума снижают физическую стоимость сбора до 5 процентов от оценки полной записи; целевая точность и акустическое покрытие все равно требуют проверки.
Сценарий распознавания ключевых слов показывает, как аугментация, внедрение шума и симуляция могут расширять малый исходный набор, но та же стратегия создания становится рискованнее, когда образцы поступают из обученных генераторов. При рекурсивном обучении коллапс модели29 может усиливать ошибки и снижать разнообразие от поколения к поколению. Поэтому синтетические данные требуют отслеживания происхождения, контроля смеси и проверки на реальных данных развертывания, а не непроверенного предположения, что больше сгенерированных образцов всегда помогает.
Дистилляция знаний: сжатие информации
В то время как аугментация данных («Аугментация данных: синтез на основе преобразований») и генеративный синтез («Генеративный синтез: создание новых образцов») создают новые входные образцы, дистилляция знаний30 (Hinton et al., 2015; Gou et al., 2021) синтезирует целевые метки контроля. Вместо обучения исключительно на разреженных эталонных метках (таких как one-hot вектор ) компактная сеть-ученик обучается на непрерывном распределении вероятностей, которое выдает большая модель-учитель (например, ). Мягкое целевое распределение, масштабированное параметром температуры , раскрывает корреляции между классами, то есть «темное знание», которое отражает метрические сходства, выученные в пространстве представлений учителя.
Дистилляция выявляет фундаментальный системный компромисс между емкостью высокоскоростной памяти ускорителя (HBM) и пропускной способностью ввода-вывода вторичного хранилища:
- При онлайн-дистилляции модель-учитель находится прямо в памяти ускорителя вместе с моделью-учеником во время обучения. Система вычисляет прямые проходы учителя параллельно с исполнением ученика, что устраняет постоянные расходы хранилища на мягкие цели. Однако размещение избыточно параметризованного учителя рядом занимает память ускорителя и пропускную способность тензорных ядер, ограничивая максимальный размер батча ученика на один ускоритель и увеличивая задержку шага.
- При офлайн-дистилляции учитель генерирует предсказания по всему корпусу на этапе предвычисления и сохраняет плотные векторы логитов на диск. Это полностью освобождает память ускорителя для обучения ученика, но резко увеличивает объем хранилища набора данных и пропускную способность входного конвейера. Для словаря классификации из классов хранение несжатых логитов float32 увеличивает объем метки на один образец с одного целочисленного индекса ( бит) до байт, то есть в тысячи раз для больших словарей.
Вместе аугментация на основе преобразований («Аугментация данных: синтез на основе преобразований»), генеративный синтез («Генеративный синтез: создание новых образцов») и дистилляция меток контроля завершают третий этап отбора данных. Если статическая фильтрация устраняет избыточные входные образцы, а динамический отбор оптимизирует порядок образцов во время обучения, то синтетическая генерация создает недостающие сигналы, когда эмпирический сбор упирается в физические, юридические или экономические ограничения. Согласование этих техник по измерениям данных, алгоритма и машины требует балансировки объема хранения данных, пропускной способности предобработки и утилизации ускорителя в едином системном бюджете.
Схема решения
Когда бюджет разметки, избыточность, редкие классы, приватность и скорость сходимости важны одновременно, практику нужно прежде всего определить, какое ограничение является связывающим. Каждый этап может повысить отношение информации к вычислениям, если измеренный прирост качества оправдывает его накладные расходы: прореживание убирает малоценные примеры до обучения, динамический отбор направляет вычисления на ценные примеры во время обучения, а синтез создает новые ценные примеры по требованию («Трехэтапный конвейер отбора данных»).
| Этап | Когда применяется | Техники | Иллюстративный результат |
|---|---|---|---|
| Статическое прореживание | До обучения | Отбор коресетов, дедупликация, фильтрация по качеству | Сокращение набора данных на 30–50% |
| Динамический отбор | Во время обучения | Учебный план, активное обучение, полуконтролируемое обучение | Учебные планы на 10–30% быстрее; в 2–100 раз меньше меток |
| Синтетическая генерация | По требованию | Аугментация, генеративные модели, дистилляция | Расширение эффективных данных в 2–10 раз |
Трехэтапный конвейер отбора данных: диапазоны иллюстрируют возможные результаты, а не переносимые ожидания. Фактический выигрыш зависит от набора данных, модели, метода отбора и целевой метрики.
Когда доминирующее ограничение названо, «Руководство по выбору техники по основному ограничению» сравнивает, какая техника меняет это ограничение и почему.
| Ограничение | Кандидатная техника | Почему |
|---|---|---|
| Ограниченный бюджет разметки | Активное обучение | Максимизирует рентабельность меток, выбирая информативные примеры |
| Высокая избыточность данных | Дедупликация + коресет | Устраняет отходы до начала обучения |
| Редкие классы или пограничные случаи | Синтетическая генерация | Создает образцы, которых нет в сырых данных |
| Медленная сходимость | Учебный план | Улучшает качество градиентов на раннем этапе обучения |
| Требования приватности | Синтез с аудитом приватности | Снижает прямое использование реальных записей; проверяет утечки |
| Большая модель, малый набор данных | Дистилляция знаний | Использовать знания модели-учителя как «данные» |
Руководство по выбору техники по основному ограничению: кандидатные техники отбора данных сопоставлены с доминирующим ресурсным ограничением конвейера ML. Таблица начинает диагностику; предпосылки и измеренная рентабельность определяют окончательный выбор.
«Руководство по выбору техники по основному ограничению» сопоставляет отдельные ограничения с техниками, но реальные проекты сталкиваются с несколькими ограничениями одновременно. Дерево решений на «Дереве решений отбора данных» структурирует процесс выбора иерархически: сначала определяется основное узкое место, затем по ветвям сужается круг вариантов.
Дерево решений отбора данных: дерево начинается с основного узкого места (стоимость разметки, стоимость вычислений или дефицит данных) и сужает каждую ветвь, используя доступные пулы, оракулы, избыточность, учителей или симуляторы. Листья указывают кандидатные техники; проекты с несколькими связывающими ограничениями могут требовать более одной ветви.
Процесс решения
Каждый путь требует структурированной оценки, потому что один и тот же симптом в данных может указывать на разные узкие места. Выбор техники начинается с назначения связывающего ограничения, затем проверяется, существуют ли данные, метки и инфраструктура, которые нужны выбранному методу.
Шаг 1: оценить узкое место
Определите, какое ресурсное ограничение сильнее всего ограничивает конвейер обучения:
- Стоимость разметки: техники эффективности меток, такие как активное обучение, полуконтролируемое обучение и самоконтролируемое обучение, максимизируют ценность, извлекаемую из каждой человеческой аннотации.
- Стоимость вычислений: отбор коресетов и дедупликация могут сократить число обрабатываемых образцов, а проверенный учебный план может уменьшить число шагов, нужных для достижения целевой метрики.
- Дефицит данных: создание данных через аугментацию, синтез и дистилляцию расширяет эффективный обучающий набор за пределы того, что дает сырой сбор.
Этот диагностический шаг привязывает выбор техники к связывающему ресурсному ограничению, а не к самому знакомому алгоритму.
Шаг 2: проверить предпосылки
Когда узкое место определено, проверьте, осуществимы ли соответствующие техники при имеющихся инфраструктуре и данных. У каждого подхода есть конкретные требования, которые нужно выполнить до начала внедрения («Предпосылки техник»).
| Техника | Предпосылки |
|---|---|
| Активное обучение | Доступ к оракулу, неразмеченный пул, инфраструктура переобучения |
| Отбор коресетов | Прокси-модель или экстрактор эмбеддингов, доступ к полному набору данных |
| Учебный план | Метод оценки сложности, график темпа |
| Полуконтролируемое обучение | Некоторые размеченные данные, неразмеченные данные из того же распределения |
| Самоконтролируемое обучение | Большой неразмеченный корпус, бюджет вычислений на предобучение |
| Аугментация | Знание доменных инвариантностей, библиотека аугментаций |
| Синтетическая генерация | Генеративная модель или симулятор, устранение доменного разрыва |
Предпосылки техник: каждая техника требует специфичных инфраструктуры и данных, которые нужно проверить до внедрения. Техника с отличным теоретическим выигрышем, но невыполненными предпосылками, на практике провалится, поэтому этот перечень — первый шаг выбора техники.
Шаг 3: оценить рентабельность
Прежде чем вкладывать инженерные ресурсы, оцените рентабельность инвестиций каждой кандидатной техники:
Техника с высоким теоретическим выигрышем, но высокой стоимостью внедрения, может дать меньшую рентабельность, чем более простой подход. Точная дедупликация часто служит недорогим первым кандидатом, потому что хеширование просто, а повторяющиеся байты легко обнаружить, хотя последующая выгода по-прежнему зависит от избыточности корпуса и намеренного взвешивания образцов. Активное обучение требует доступа к оракулу, инфраструктуры переобучения и разработки алгоритма отбора, поэтому его рентабельность сильно зависит от того, сколько циклов разметки амортизируют эти вложения.
Шаг 4: комбинировать техники
Техники отбора данных не исключают друг друга, но их сочетание не гарантирует аддитивного выигрыша. Типичный рабочий процесс дедуплицирует сырой корпус, применяет коресетный фильтр с учетом покрытия, упорядочивает сохраненные батчи через эмпирический учебный план и применяет аугментации во время сборки батчей. Предобученные представления дополнительно меняют базовую траекторию. Каждый дополнительный этап должен оправдывать свои вычислительные накладные расходы, потому что каскадные фильтры часто отбрасывают перекрывающиеся подмножества, в то время как их задержки оценки накапливаются.
Этапы могут усиливать выигрыш в эффективности, когда их эффекты не перекрываются, а накладные расходы остаются малыми; сквозную экономию нужно измерять, а не предполагать.
Алгоритмическая фильтрация превращается в системное ускорение, только если накладные расходы на отбор остаются строго ограниченными. Проход коресета, на который уходит десять часов зондирующего вывода ради сокращения двухчасового обучения, дает чистый проигрыш по календарному времени и облачным расходам. Аналогично адаптивный учебный план, который сканирует весь корпус для оценки сложности на каждой эпохе, может остановить ускорители из-за узких мест центрального процессора хоста. Получение выигрыша в эффективности данных в промышленной эксплуатации требует инженерного чутья к физическому стеку: амортизации проходов оценки, потоковой передачи несеквенциальных батчей без срыва механизмов предвыборки и синхронизации состояний распределенного отбора без сериализационных простоев.
Инженерия отбора
Наивный цикл активного обучения, который каждую эпоху сканирует весь набор данных, чтобы выбрать «лучшие» образцы, может превратить задание обучения, ограниченное вычислениями, в узкое место ввода-вывода. Инженерия отбора начинается там, где заканчивается схема решения: после выбора алгоритмов инженерия должна обеспечить, чтобы они давали обещанное ускорение на реальном оборудовании и реальных конвейерах данных. Перевод алгоритмической фильтрации в фактическую пропускную способность требует архитектурных шаблонов, которые ограничивают задержку оценки, сохраняют последовательный доступ к хранилищу и предотвращают голодание ускорителя.
Узкое место отбора
Динамический отбор данных создает новое узкое место: задержку отбора. Обычный загрузчик следует заранее заданному плану выборки, тогда как активное обучение или адаптивные учебные планы могут оценивать функцию отбора по большому пулу кандидатов, прежде чем формировать последующие батчи. Конкретно, оценка набора из 1 млн примеров большой моделью может занять 2,8 часа и свести на нет выигрыш от коресета в 10 процентов, если ее не выполнить с меньшей прокси-моделью. Системный компромисс требует, чтобы стоимость отбора оставалась ниже объема обучения, который подмножество экономит; иначе число образцов падает, а сквозная стоимость растет.
При фиксированной целевой метрике отбор плюс обучение на подмножестве должны стоить меньше, чем обучение на полном наборе данных. Пусть — календарное время, затраченное на оценку пула, — время обучения на наборе размера , а и — число сохраненных и полных образцов. «Неравенство отбора» выражает это условие безубыточности — неравенство отбора.
Эквивалентно, выделяя допустимые накладные расходы на отбор, получаем . Верхняя граница задержки отбора строго зависит от того, сколько времени обучения исключает подмножество; произвольная доля накладных расходов для всех нагрузок не применима. Когда многократно оценивает пул кандидатов с помощью основной архитектуры модели, повторяющиеся проходы оценки и распределенная координация могут поглотить сэкономленные такты обучения и превратить отбор данных в чистый штраф пропускной способности.
Пример: неравенство отбора на практике
Сценарий: команда компьютерного зрения выбирает коресет на 100 тыс. примеров (10 процентов) из 1 млн изображений, чтобы сократить время обучения на кластере ускорителей.
Диагностика: оценка полной моделью (вариант A: целевая ResNet-50) добавляет 2,8 ч накладных расходов на отбор, снижая чистую экономию до 247,2 ч. Оценка прокси-моделью (вариант B: ResNet-18) снижает накладные расходы на отбор до 0,6 ч и сохраняет 249,4 ч общего календарного времени.
Системный урок: отбор коресета уменьшает задержку обучения, только если накладные расходы на отбор меньше экономии на обучении на полном наборе данных. Оценка прокси сохраняет чистую экономию FLOP, удерживая стоимость оценки образцов заметно ниже стоимости прямого прохода полной модели.
Сквозное календарное время делится на накладные расходы отбора и обучение на подмножестве. На «Неравенство отбора» столбчатые диаграммы времени сравнивают базовое обучение на полном наборе данных с эффективным и дорогим режимами отбора.
Неравенство отбора: отбор данных улучшает сквозную эффективность, только если накладные расходы на отбор плюс обучение на подмножестве меньше обучения на полном наборе данных. Легкая функция отбора (прокси-модель, кэшированные эмбеддинги) держит накладные расходы низкими; дорогая функция отбора (прямой проход полной модели) может свести экономию на нет.
Эти накладные расходы накапливаются, когда отбор выполняется динамически по эпохам, а не один раз офлайн. Если повторная оценка на каждой эпохе приближается к объему обучения, сэкономленному обрезанным подмножеством, чистое системное преимущество исчезает.
Инженерные конвейеры управляют накладными расходами отбора с помощью прокси-моделей, кэшированных эмбеддингов и индексированного поиска. Меньшая прокси-модель сокращает задержку оценки, если ее ранжирование образцов точно переносится на целевую архитектуру. Выполнение прохода оценки в пониженной численной точности дополнительно уменьшает арифметическую работу и трафик памяти, когда точность ранжирования это допускает. Для отбора на основе сходства или разнообразия векторные индексы вроде FAISS31 заменяют дорогие сканирования всего корпуса приближенным поиском ближайших соседей по предвычисленным эмбеддингам. Эти приемы отделяют оценку отбора от обучения основной модели и ограничивают , так что неравенство выполняется.
Понимание аппаратуры: штраф за произвольный доступ
Неравенство отбора касается накладных расходов на вычисления, но алгоритмы отбора также меняют физические шаблоны ввода-вывода. Выборка, управляемая индексом, превращает крупные последовательные передачи шардов в разрозненные несеквенциальные чтения и теряет выгоду аппаратного упреждающего чтения, кэширования страниц операционной системы и массовой предвыборки контроллера. Поскольку головки диска физически должны перемещаться, а контроллеры флеш-памяти — выполнять поиск случайных блоков, подмножества одинакового размера могут давать резко разное время обучения в зависимости от локальности доступа. «Иллюстративный штраф за мелкие чтения» количественно оценивает этот штраф для разных уровней хранения при передачах по 4 КБ.
| Уровень хранения | Последовательная пропускная способность | Произвольный ввод-вывод (IOPS) | Произвольная пропускная способность (прибл.) | Штраф за произвольный доступ |
|---|---|---|---|---|
| HDD (7.2k) | ~150 МБ/с | ~100 IOPS | ~0,4 МБ/с | 375× |
| SATA SSD | ~550 МБ/с | ~10 тыс. IOPS | ~40 МБ/с | 13,8× |
| NVMe SSD | ~3 500 МБ/с | ~500 тыс. IOPS | ~2 000 МБ/с | 1,75× |
| Облако (S3) | Зависит от конфигурации | Не сравнимо по IOPS | Зависит от конфигурации | Потенциально чрезмерный |
Иллюстративный штраф за мелкие чтения: эталонные устройства сравнивают последовательную пропускную способность с произвольными чтениями по 4 КБ при упрощенном пересчете IOPS. Реальная пропускная способность зависит от размера запроса, глубины очереди, параллелизма, кэширования и конфигурации сервиса; строка про облако — лишь качественный сценарий.
Загрузчики данных разрешают этот конфликт через совместное проектирование данных и машины. Форматы шардированных наборов данных, такие как WebDataset и FFCV, упаковывают тысячи отдельных примеров в непрерывные, последовательно читаемые фрагменты архива. Вместо выборки разрозненных отдельных образцов с диска загрузчик потоково передает крупные последовательные шарды в память хоста и заполняет буфер перемешивания. Цикл обучения псевдослучайно выбирает примеры из этого буфера в памяти, сохраняя пиковую пропускную способность чтения из хранилища и удовлетворяя статистическому требованию рандомизированных мини-батчей. При распределенном обучении на нескольких ускорителях каждый воркер ведет независимый буфер перемешивания над непересекающимся шардом. Поскольку рандомизация локальна для памяти воркера, а не глобальна по корпусу, редкие классы или пограничные случаи, сосредоточенные в определенных шардах, получают неравномерное представление у разных воркеров, если набор данных не стратифицирован и шарды не сбалансированы до распределения.
Контрольная точка: неравенство отбора
Отбор данных не бесплатен. Он добавляет новый член в железный закон и новую стоимость ввода-вывода.
Проверки уравнения:
- Стоимость отбора: можете ли вы объяснить, почему должно быть меньше , чтобы техника сокращала сквозное время обучения?
- Управление накладными расходами: как прокси-модели и кэшированные эмбеддинги удерживают на низком уровне?
Системные следствия:
- Шаблоны ввода-вывода: почему несеквенциальный доступ при динамическом отборе может снижать пропускную способность загрузчика данных по сравнению с последовательным чтением?
Эхо данных: амортизация затрат ввода-вывода
Даже когда пропускная способность хранилища сохранена, конвейеры динамического отбора часто переносят системное ограничение выше по потоку, на вычисления центрального процессора хоста. Тяжелые преобразования данных, такие как 3D-повороты, MixUp, декодирование JPEG или генеративный синтез на лету, требуют существенной обработки на хосте для каждого образца. Когда конвейер хоста выдает батчи медленнее, чем ускоритель выполняет прямые и обратные проходы, вычислительные ядра GPU простаивают без входных данных. Результирующее падение утилизации ускорителя увеличивает время обучения и нивелирует выигрыш в эффективности, полученный от прореживания набора данных.
Эхо данных32 (Choi et al., 2019) многократно использует данные, прежде чем получать новые образцы, обменивая свежесть на утилизацию ускорителя, когда входной конвейер медленнее обучения. Эхо перед рандомизированной аугментацией может давать разные преобразованные входы при каждом повторе, тогда как эхо в конце конвейера может повторять идентичные тензоры.
Оптимальный коэффициент эха зависит от отношения времени обработки на входе ко времени обучения на ускорителе:
Когда , конвейер данных становится узким местом обучения: коэффициент эха частично возвращает простаивавшие такты GPU, а насыщает мощность ускорителя при условии, что повторяющиеся образцы остаются статистически продуктивными. Увеличение сверх не дает дополнительного прироста утилизации и рискует снизить разнообразие градиентов. Наоборот, при ускоритель уже ограничен вычислениями, и эхо данных не дает пользы.
Утилизация конвейера насыщается около порогового отношения; статистическая ценность остается зависящей от нагрузки.
Пример расчета: рентабельность эха данных
Сценарий: обучение ResNet-50 на ImageNet с сильной аугментацией (RandAugment + MixUp).
Измерения:
- Пропускная способность конвейера данных: 300 изображений/с (чтение, декодирование и аугментация на CPU)
- Пропускная способность обучения на GPU: 800 изображений/с (прямой и обратный проход)
- Отношение = (1/300 изображений/с) / (1/800 изображений/с) = 800 изображений/с / 300 изображений/с ≈ 2,67 (GPU ждет 62,5 процента времени)
Без эха:
- Эффективная пропускная способность: 300 изображений/с (ограничена конвейером данных)
- Время обучения на 90 эпох: / 300 изображений/с = 384 350 секунд (106,8 часа)
- Утилизация GPU: 37,5 процента
С коэффициентом эха: .
- Каждый батч обрабатывается дважды с разными аугментациями
- Эффективная пропускная способность: 600 изображений/с (все еще ниже мощности GPU)
- Уникальных изображений в секунду: 300 (без изменений)
- Время обучения: / 600 изображений/с = 192 175 секунд (53,4 часа), если повторно использованные данные столь же ценны
Компромисс: повторные образцы не гарантированно так же полезны, как свежие; статья об эхе данных оценивает коэффициент эха, точку вставки и перемешивание, потому что эти выборы определяют, сохраняет ли повторное использование предсказательную эффективность. В одной конфигурации ResNet-50/ImageNet с подачей данных по сети Choi et al. (2019) сообщают о сокращении календарного времени до целевой метрики в 3,25 раза.
Системный вывод: эхо данных может обменивать разнообразие образцов на утилизацию ускорителя, когда узкое место — входной конвейер. Полезный коэффициент эха нужно измерять для конкретной нагрузки, поскольку он зависит от размера батча, точки вставки, аугментации, перемешивания и целевой метрики.
Эхо может вносить корреляции, когда один и тот же пример встречается внутри близких батчей или между ними, поэтому реализации должны сохранять достаточное перемешивание и проверять целевую метрику. Choi et al. (2019) не наблюдали негативного взаимодействия с батч-нормализацией в экспериментах с ResNet-50 и Single Shot MultiBox Detector (SSD), однако этот результат не гарантирует такого же поведения для каждой нагрузки.
Эти шаблоны реализации определяют, дает ли отбор данных чистую системную пропускную способность. Отбор на основе прокси сокращает зондирующие вычисления, когда ранжирование оценок переносится на целевые архитектуры. Шардированные файловые форматы и буферы перемешивания согласуют псевдослучайное создание батчей с аппаратной последовательной потоковой передачей, а эхо данных возвращает простаивавшие такты ускорителя, когда пропускная способность ингеста ограничивает цикл обучения.
Однако операционная осуществимость не гарантирует экономической целесообразности. Инфраструктура дедупликации, которая стоит $50 тыс. на разработку, но экономит лишь $10 тыс. за всю кампанию обучения, дает чистый убыток. Внедрение техник отбора требует строгого финансового учета бюджетов на капитал, вычисления и человеческую разметку.
Модель стоимости
Систематическое моделирование стоимости определяет инвестиции в отбор данных. Инженерные команды сталкиваются с конкретными компромиссами распределения капитала: покупать ли еще 100 000 человеческих аннотаций или резервировать дополнительные кластеры GPU, когда конвейеры активного обучения достигают точки безубыточности и сколько запусков обучения нужно, чтобы амортизировать собственные инструменты кураторства.
Количественная оценка стоимости данных и ROI
Полная стоимость обучающих данных складывается из получения, разметки, хранения и вычислений на ускорителе и выходит далеко за пределы счетов за объектное хранилище:
Разметка () — это расход, на который отбор данных нацелен наиболее прямо, тогда как хранение () и обработка () масштабируются механически с объемом сохраненных байтов и числом проходов ускорителя. «Полная стоимость обучающих данных» перечисляет эти четыре компонента вместе с их операционными драйверами.
| Компонент | Формула | Иллюстративный диапазон |
|---|---|---|
| $0,001–$10 за образец (веб-сбор против лицензированного) | ||
| $0,01–$200 за образец (краудсорсинг против эксперта) | ||
| $0,02–$0,10 за ГБ в месяц | ||
| Пропорционально FLOP обучения |
Полная стоимость обучающих данных: четыре компонента стоимости охватывают весь жизненный цикл данных. Здесь — полное число образцов, — размеченное подмножество, — объем сохраненных байтов, — время хранения, — число проходов обучения, а — работа обучения на образец. Диапазоны служат ориентирами сценария, а не универсальными рыночными ценами.
Взаимодействие этих четырех членов стоимости становится конкретным при оценке кампании обучения модели компьютерного зрения масштаба ImageNet.
Пример: разбор стоимости обучения масштаба ImageNet
«Иллюстративная разбивка стоимости масштаба ImageNet» разбирает один иллюстративный сценарий получения, разметки, хранения и вычислений в масштабе ImageNet. Итоговое соотношение следует из заданных предположений о лицензировании, аннотации, хранении, времени работы и стоимости вычислений; это не типичное соотношение для каждой контролируемой нагрузки.
Компонент стоимости Расчет Сумма Исходные данные (1,2 млн изображений) Лицензированный набор данных, фиксированная плата $50 000 Разметка (краудсорсинговая аннотация) 1,2 млн $0,05 за метку $60 000 Хранение (облачное объектное хранилище) 150 ГБ $0,02 за ГБ в месяц 12 месяцев $36 Кампания обучения (30 запусков, каждый по 100 эпох за 24 ч на 8 A100) 5 760 GPU-часов $4 за GPU-час $23 040 Итого $133 076 Соотношение данных и вычислений 82,7% данные, 17,3% вычисления Иллюстративная разбивка стоимости масштаба ImageNet: пункты стоимости получения, разметки, хранения и вычислений при заданных предположениях сценария. Каждая сумма следует из указанной рядом ставки по опубликованным в книге ставкам краудсорсинговой разметки, объектного хранилища и облачных GPU. Стоимость данных доминирует в этом расчете, потому что включены лицензирование и аннотация, а сама кампания обучения короткая.
Системный вывод: получение и разметка могут намного превышать стоимость вычислений в контролируемых нагрузках компьютерного зрения, как и в этих предположениях. Вычислительная цифра оценивает всю кампанию обучения, а не один запуск: опубликованная модель — это результат множества переборов, перезапусков и абляций, и расчет стоимости одного запуска занизил бы вычисления примерно в тридцать раз. Тем не менее получение и разметка остаются большей долей. Число запусков — такое же предположение, как и любое другое, поэтому полный расчет рентабельности должен его указывать и учитывать обе категории, а не предполагать, какая из них доминирует.
Модель окупаемости техник отбора данных
Техники отбора данных вставляют алгоритмическую фильтрацию в конвейер обучения, чтобы снизить последующие расходы. Однако оценка важности примеров не бесплатна: оценка расходует такты ускорителя, создает трафик памяти между хостом и устройством или требует разработки специальных этапов конвейера. Оценить, экономически ли оправдана стратегия отбора, можно, сопоставив эти первоначальные накладные расходы с последующей экономией через рентабельность инвестиций (ROI):
Соотношение между инвестициями и экономией различается у разных стратегий отбора. «Профили ROI техник отбора данных» показывает основные драйверы затрат и механизмы выгоды для четырех стандартных техник; их чистая отдача зависит от объема корпуса, масштаба модели и существующей инфраструктуры конвейера.
| Техника | Инвестиции (затраты) | Экономия (выгода) |
|---|---|---|
| Дедупликация | Разовые вычисления на хеширование + инфраструктура | Меньше хранилища и обработки повторяющихся образцов |
| Отбор коресетов | Обучение прокси-модели + вычисления отбора | Меньше сохраненных образцов, если сохраняются целевое качество и покрытие |
| Активное обучение | Вывод на неразмеченном пуле + задержка человека в контуре | Меньший спрос на разметку, если ранжирование запросов переносится |
| Аугментация данных | Такты CPU/GPU на преобразования | Рост эффективного размера набора данных без получения новых данных |
Профили ROI техник отбора данных: таблица показывает затраты и возможную экономию. Ни одна техника не гарантирует положительного ROI; каждая должна удовлетворять неравенству отбора при измеренных условиях нагрузки.
Анализ безубыточности
Алгоритмы отбора тратят вычисления и задержку конвейера, чтобы сократить последующую работу по разметке или обучению. Точка безубыточности отмечает рабочую границу, на которой финансовая экономия от пропущенных образцов в точности равна вычислительным и операционным накладным расходам на их отбор. Если оценка кандидатов требует много вычислений или пулы кандидатов огромны, политика отбора легко может израсходовать больше ресурсов, чем вернет.
Предположим, что разметка стоит $10 за образец, активное обучение начинается с 1 000 размеченных образцов ($10 000), выполняет 100 запросов за раунд при стоимости вывода $50 за раунд, а базовая случайная разметка требует 5 000 образцов для целевой точности. Если активное обучение достигает целевой точности всего на 2 000 размеченных образцах, ROI получается сравнением стоимости разметки и вычислений:
\begin{gather*} \text{Стоимость случайной разметки} = 5,000 \times $10 = $50,000 \ \text{Стоимость активного обучения} = 2,000 \times $10 + 10 \times $50 = $20,500 \ \text{ROI} = \frac{$50,000 - $20,500}{$20,500} = 143{,}9% \end{gather*}
Безубыточность наступает, когда предотвращенные расходы на разметку равны накладным расходам отбора. Снижение разметки на 20 процентов все еще может дать отрицательный ROI, если оценка кандидатов и переобучение прокси-моделей требуют существенных часов работы ускорителей.
Амортизация по запускам обучения
Статические техники отбора данных отделяют кураторство набора данных от цикла обучения модели. Вычислительные фильтры, такие как дедупликация MinHash, точное индексирование -грамм или кластеризация эмбеддингов, требуют существенной первоначальной инженерной работы и вычислений на предобработку. Однако разработка промышленных моделей по своей природе итеративна: поиск гиперпараметров, поиск архитектуры нейронной сети, абляционные исследования и перебор затравок многократно обучаются на одном и том же отобранном корпусе. Оценка этих техник по одному изолированному запуску искажает их экономику. Амортизированная рентабельность инвестиций (ROI) учитывает, как первоначальные инвестиции в кураторство распределяются по всей кампании обучения:
«Компоненты стоимости инфраструктуры дедупликации» перечисляет первоначальные капитальные и вычислительные затраты в сопоставлении с экономией на запуск для иллюстративного конвейера дедупликации MinHash.
| Компонент | Стоимость |
|---|---|
| Построение конвейера дедупликации | $50 000 (инженерное время) |
| Вычисление сигнатур MinHash (разово) | $5 000 |
| Экономия на запуск | $10 000/запуск |
Компоненты стоимости инфраструктуры дедупликации: разовые инвестиции покрывают инженерные усилия и первоначальные вычисления; экономия на запуск возникает при каждом последующем запуске обучения на дедуплицированных данных.
Поскольку первоначальные затраты на инфраструктуру и генерацию сигнатур фиксированы, каждый последующий запуск обучения увеличивает чистую финансовую отдачу. Три операционных фактора определяют, достигает ли инфраструктура кураторства безубыточности:
- Повторные запуски обучения: поиск гиперпараметров, итерации модели и плановое переобучение многократно используют одну и ту же инфраструктуру отбора.
- Общие наборы данных: очищенный или дедуплицированный корпус может обслуживать несколько команд или архитектур моделей.
- Широко переиспользуемые техники: такие методы, как дедупликация, переносятся между моделями, тогда как коресеты для конкретной задачи могут не перенестись.
«Амортизированный ROI по нескольким запускам обучения» показывает, как амортизированная отдача растет с числом запусков кампании при этих параметрах стоимости.
| Число запусков | Амортизированный ROI |
|---|---|
| 1 запуск | −81,8% (чистый убыток) |
| 5 запусков | −9,1% (близко к безубыточности) |
| 10 запусков | +81,8% (положительный) |
| 50 запусков | +809,1% (высокодоходный) |
Амортизированный ROI по нескольким запускам обучения: при этих стоимостях и экономии конвейер дедупликации, который теряет деньги при первом использовании, становится прибыльным при переиспользовании в достаточном числе запусков. Инвестиции в инфраструктуру стоит оценивать за ожидаемый срок службы, а не за одно использование.
Дедупликация обладает высоким инвестиционным рычагом, потому что устранение избыточных последовательностей уменьшает объем хранилища на хосте и исключает потраченные впустую обновления градиентов для каждой последующей архитектуры. Напротив, методы отбора, основанные на градиентах прокси-модели или оценках неопределенности, плохо переносятся между разными архитектурами, поэтому окно их амортизации ограничено узкими переборами в фиксированном семействе моделей. Для исследовательских или разовых запусков обучения методы с низкими накладными расходами, такие как равномерная случайная выборка или базовая аугментация, дают лучший ROI, поскольку не требуют тяжелой инфраструктуры.
Стандартные модели стоимости предполагают централизованный конвейер данных, в котором один процесс хоста оценивает метрики важности по единому набору данных. Масштабирование до высокопроизводительного обучения на нескольких ускорителях разбивает наборы данных на шарды по независимым томам хранения и распределенным рангам воркеров, создавая узкие места связи и синхронизации, которые могут разрушить эту идеализированную экономику одного узла.
Распределенный отбор
Шардирование данных разрушает абстракцию одного процесса. В централизованном конвейере алгоритмы коресетов сортируют единое глобальное ранжирование, учебные планы задают единую последовательность, а циклы активного обучения оценивают общий пул кандидатов. Распределенное исполнение разносит хранилище по независимым узлам, вычисляет оценки на несинхронизированных контрольных точках модели и изолирует видимость данных для воркеров. Масштабирование отбора данных на кластеры вводит два физических ограничения: синтез представительных глобальных подмножеств из изолированных взглядов отдельных шардов и поддержание согласованных ранжирований примеров, когда состояния воркеров расходятся.
Остается ли распределенный отбор верным глобальному набору данных или вырождается в локальные эвристики шарда, зависит от того, сколько координации между воркерами требует каждая техника, относительно пропускной способности, которая для этого доступна. Поэтому задачу отбора нужно оценивать на границе, где статистическая ценность встречается с шардированием и локальностью.
Это независимые требования. Коресет может оставаться представительным, но стоить слишком дорого для координации, тогда как дешевый метод, работающий внутри шарда, может масштабироваться, но систематически пропускать редкие группы, видимые только во всем корпусе. Поэтому распределенный дизайн требует двух приемочных проверок: сравнить качество отобранных данных с централизованной или иначе проверяемой эталонной выборкой и сравнить накладные расходы отбора с временем сквозного обучения, которое он экономит. Прохождение только одной проверки недостаточно.
Стратегии распределенного отбора
В базовой схеме параллелизма по данным каждый воркер обрабатывает свой шард, а синхронизация модели выполняется отдельно. Отбор данных может добавлять зависимости между шардами («Зависимости отбора в распределенном обучении»).
Зависимости отбора допускают несколько архитектурных решений, каждое из которых занимает свою точку на пространстве компромисса между согласованностью и масштабируемостью. Самый прямой подход централизует отбор, распределяя при этом обучение. Координирующий узел выполняет отбор по полному набору данных, а затем рассылает выбранные индексы воркерам. Это сохраняет качество отбора, но вводит единое узкое место:
Координатор: score_all_samples() → selected_indices
Рассылка: selected_indices → всем воркерам
Воркеры: обучение на subset(local_shard, selected_indices)
| Техника | Допущение для одного узла | Проблема распределенного режима |
|---|---|---|
| Отбор коресетов | Глобальный взгляд на набор данных | Каждый воркер видит только свой шард |
| Активное обучение | Централизованная оценка неопределенности | Оценка требует синхронизации модели |
| Учебный план | Глобальный порядок сложности | У воркеров могут быть разные «самые трудные» примеры |
| Дедупликация | Хеш-таблица помещается в памяти | Распределенные хеш-таблицы добавляют задержку |
Зависимости отбора в распределенном обучении: таблица исходит из общей централизованной постановки каждой техники и указывает проблему координации, которую вводит шардирование. Распределенные варианты могут ослаблять результат централизованной версии, а не воспроизводить его точно.
Семантика остается чистой, но координатор становится единой точкой отказа и возможным узким местом пропускной способности. Приемлемы ли эти накладные расходы, зависит от объема полезной нагрузки отбора, частоты обновления, сетевого пути и размера кластера.
Иерархический отбор решает это ограничение масштабируемости, распределяя саму вычислительную работу отбора. Каждый воркер выполняет локальный отбор на своем шарде, а затем координатор объединяет результаты:
Воркеры: local_selected = select_top_k(local_shard)
Координатор: global_selected = merge_and_rerank(all local_selected)
Рассылка: final_indices → всем воркерам
Локальный отбор внутри шарда снижает нагрузку на координатора, но вносит компромисс по качеству: локальные квоты и распределения оценок могут не сохранить глобальное ранжирование или редкие группы, неравномерно распределенные по шардам. Поэтому на шаге слияния нужны нормализация, ограничения покрытия или второй глобальный проход.
Когда даже иерархические подходы оказываются слишком дорогими, запасным вариантом становится приближенный глобальный отбор. Эти методы обменивают точность на масштабируемость с помощью распределенных приближенных алгоритмов. Распределенный MinHash позволяет дедуплицировать, когда каждый воркер вычисляет сигнатуры MinHash независимо; затем сигнатуры агрегируются, чтобы найти почти дубликаты между шардами без того, чтобы какой-либо один узел видел все данные. Аналогично распределенная выборка по неопределенности позволяет воркерам вычислять локальные оценки неопределенности, а глобальный порог определяется статистикой распределения оценок, а не точным ранжированием.
Проблемы согласованности в активном обучении
Приближенные стратегии отбора предполагают статические критерии отбора, но активное обучение добавляет осложнение: модель меняется во время отбора. Рассмотрим, что происходит, когда воркер A оценивает образцы моделью на шаге , а воркер B одновременно обновляет модель до шага . Оценки воркера A теперь устарели и могут выбрать образцы, которые обновленная модель ранжировала бы иначе.
Расписание оценки, таким образом, определяет смысл запроса, а не только его стоимость. Воспроизводимая система версионирует вместе контрольную точку модели, снимок пула кандидатов, правило оценки и выбранные индексы. Затем она может измерить, насколько согласованность ранжирований убывает с возрастом контрольной точки, и выбрать интервал обновления по этим данным, а не по произвольному числу шагов.
Несколько стратегий смягчают проблему устаревания, каждая со своими накладными расходами:
- Синхронная оценка: все воркеры приостанавливают обучение и оценивают одновременно, что гарантирует согласованность, но существенно снижает утилизацию GPU.
- Периодическое обновление оценок: воркеры переоценивают каждые эпох, а не каждый батч, обменивая свежесть на сниженные накладные расходы.
- Отбор, устойчивый к контрольным точкам: система выбирает образцы, которые демонстрируют высокую неопределенность при нескольких контрольных точках модели, сохраняя валидность решений отбора по мере эволюции модели.
Иллюстративный сценарий кластера из 8 узлов с GPU показывает, как эти стратегии обновления взаимодействуют с пропускной способностью хранилища и вычислительной эффективностью.
Пример: распределенный отбор коресетов
Сценарий: кластер из 8 узлов A100 выбирает коресет в 10 процентов из ImageNet (1,3 млн изображений) на распределенных воркерах.
Диагностика: централизованная оценка коресета на одном узле создает узкие места памяти и вычислений. Поэтапный распределенный конвейер (эмбеддинги внутри шарда → параллельная дедупликация → локальная оценка EL2N → централизованное слияние top-) выполняет отбор набора данных за 67 минут.
Системный урок: распределенный отбор коресетов может убрать ограничение памяти одного узла как предел оценки, как показано на «Архитектуре распределенного отбора коресетов». Шардирование эмбеддингов и оценки распределяет работу по кластеру, тогда как централизованное слияние остается стоимостью координации, которая должна удовлетворять неравенству отбора.
Архитектура распределенного отбора коресетов: параллельная оценка внутри шардов уменьшает работу, которая достается централизованному координатору слияния рангов. Воркеры передают локальные оценки EL2N наверх; координатор сливает их и рассылает итоговые индексы коресета. Такой дизайн выгоден, только если накладные расходы координации остаются меньше времени обучения, сэкономленного коресетом.
Положительный ROI может быстро разрушиться, если воркеры часто координируются во время обучения. Распределенный отбор вводит налог на координацию, размер которого зависит от того, что синхронизируется и как часто. Этот налог должен оставаться меньше сэкономленного времени обучения; если он приближается к пределу, нужно упростить стратегию или увеличить интервал обновления.
Дополнительное ограничение возникает из топологии сети кластера. Синхронизация градиентов может использовать коллективные операции ускорителей по выделенным каналам, тогда как векторы эмбеддингов, массивы оценок и индексы коресетов могут идти по путям хоста или хранилища. Фактический маршрут зависит от архитектуры системы. Трафик отбора может поэтому выявить узкие места CPU, сетевого интерфейса, хранилища или коллективной сети, которые профиль одного только обучения не показывает.
Реальные системы ML одновременно сочетают отбор данных с эффективностью на уровне модели, пропускной способностью на уровне машины и распределенным обучением. Эти оптимизации взаимодействуют так, что могут усиливать или подрывать друг друга, и понимание этих взаимодействий необходимо для проектирования эффективных сквозных конвейеров.
Межуровневые взаимодействия
В таксономии D·A·M (данные · алгоритм · машина) отбор данных работает по измерению данных, сокращая нагрузку обучения до начала вычислений. Однако время исполнения по железному закону ML-систем зависит от того, как сокращение входа меняет алгоритм (представления модели, ландшафт функции потерь и сжимаемость) и машину (пропускную способность памяти, арифметическую интенсивность ядер и межускорительные коммуникации). Эти межуровневые взаимодействия могут усиливать выигрыш по всему стеку или создавать неожиданные узкие места, которые обнуляют экономию выше по потоку. Системная эффективность требует совместного проектирования курирования данных вместе со сжатием модели и планированием аппаратуры, а не оптимизации каждого компонента в изоляции.
Эффективность на уровне модели
Эффективность на уровне модели уменьшает число параметров и арифметическую стоимость обученной модели с помощью таких приемов, как прореживание, представление с меньшей точностью и дистилляция. Состав обучающего корпуса формирует внутренние представления и тем самым определяет, насколько сеть поддается сжатию после обучения. Однако подсчет устраненных операций упускает то, как физические подложки исполнения реагируют на разреженные структуры («Ловушка задержки разреженности»). Архитектурные основы сжатия моделей и аппаратного ускорения подробно рассмотрены в главах «Сжатие моделей» и «Аппаратное ускорение».
Ловушка задержки разреженности
Контекст: преимущество сжимаемости от отбора данных считают в арифметических операциях, но исследования сжатия моделей показывают, что прореживание уменьшает эти счетчики легче, чем сокращает измеренную по часам задержку.
Режим отказа: FLOP могут резко снизиться, тогда как задержка вывода остается прежней или растет. Аппаратура плотного матричного умножения выигрывает от регулярной раскладки и повторного использования, а разреженные матрицы требуют нерегулярного доступа к памяти, проверок метаданных и скачков адресов. Пока шаблон разреженности не соответствует подложке исполнения, накладные расходы на управление разреженностью могут перевесить сокращение арифметики.
Системный вывод: FLOP — это не задержка. Сокращение операций на 99 процентов может дать 0 процентов сокращения времени, если оставшиеся операции ограничены памятью или неэффективны для кэша. Оптимизацию нужно направлять на связывающее узкое место аппаратуры, а не только на абстрактную метрику (Hoefler et al., 2021).
Это взаимодействие отбора данных и сжатия модели восходит к тому, как сети кодируют представления в ходе обучения. Модель, обученная на повторяющихся данных, часто распределяет емкость между избыточными признаками, которые последующее прореживание отбрасывает, теряя вычисления, затраченные на их выучивание. И наоборот, модель, обученная на отобранном корпусе информативных и разнообразных примеров, часто с самого начала получает более компактные представления. Такая начальная эффективность может упростить последующее прореживание или квантование, однако это остается эмпирической гипотезой, которую нужно измерить, а не инвариантным свойством любого отобранного набора данных. Отбор данных и сжатие модели — взаимодополняющие рычаги в таксономии D·A·M; их взаимодействие нужно оценивать совместно, измеряя сквозную задержку обслуживания и качество на задаче, а не предполагая, что сокращение набора данных на входе автоматически гарантирует сжимаемость на выходе.
Пропускная способность на уровне машины
Если эффективность на уровне модели определяет вычислительную работу, оставшуюся после обучения, то пропускная способность на уровне машины определяет, насколько эффективно аппаратура исполняет сам цикл обучения. По железному закону ML-систем время обучения зависит от того, ограничено ли исполнение передачей входных данных (), арифметическим исполнением () или задержкой планирования (). Прореживание образцов сокращает общее число операций с плавающей точкой, но неравномерная выборка и динамическая фильтрация меняют шаблоны доступа загрузчика данных и открывают новые аппаратные пределы. Таблица «Диагностика узких мест после отбора данных» показывает, как стратегии отбора сдвигают доминирующее системное узкое место.
| Наблюдаемое условие | Возможное узкое место | Вероятный ответ |
|---|---|---|
| Входная скорость ниже потребности ускорителя | Хранилище, декодирование или канал хоста | Шардирование, предвыборка, параллельное декодирование |
| Ядра обучения с низкой интенсивностью | Пропускная способность памяти ускорителя | Слияние, снижение трафика, более низкая точность |
| Динамическая оценка доминирует в итерации | Вычисления отбора или ввод-вывод индекса | Прокси-модели, кэшированные оценки или эмбеддинги |
Диагностика узких мест после отбора данных: изменения набора данных и шаблонов доступа могут выявить другое узкое место, но один лишь размер набора данных не определяет лимитирующий ресурс. Заново профилируйте конвейер и сопоставьте ответ с измеренным условием.
Поэтому отбор данных может сместить режим исполнения аппаратуры. Техника, которая сокращает число образцов на 80 процентов, может снять нагрузку на вычисления тензорных ядер, но открыть задержку случайного доступа к хранилищу, пропускную способность PCIe от хоста к устройству или накладные расходы оценки как новый критический путь. Чтобы устранить это последующее узкое место, инженерный ответ должен соответствовать активному ограничению: кэшировать оценки отбора, объединять операции, ограниченные памятью, или заранее размещать непрерывные шарды в памяти хоста до передачи ускорителю. Прежде чем применять агрессивное сокращение данных, инженеры должны профилировать весь конвейер и проверить, какое узкое место действительно связывает исполнение.
Распределенное обучение
Анализ узких мест аппаратуры в разделе «Пропускная способность на уровне машины» сосредоточен на исполнении на одном ускорителе. При масштабировании на обучение на нескольких ускорителях, например на одном узле с двумя–восемью устройствами, отбор данных меняет и объем коммуникаций, и синхронизацию памяти.
При параллелизме по данным между ускорителями каждое устройство вычисляет прямой и обратный проходы на локальном микробатче, а затем синхронизирует градиенты параметров коллективной операцией all-reduce. При фиксированных размере батча на устройство и числе эпох прореживание обучающего корпуса сокращает общее число обновлений параметров за запуск, напрямую устраняя раунды коллективной коммуникации по соединениям PCIe или NVLink. Кроме того, меньшие шарды на воркер могут увеличивать долю набора данных, которая помещается в локальную оперативную память хоста или кэш ускорителя, сокращая повторную потоковую передачу из хранилища.
Эту экономию на коммуникациях нужно сопоставить с накладными расходами на координацию, разобранными в разделе «Распределенный отбор». Синхронизация градиентов использует выделенные высокоскоростные соединения, тогда как динамическая оценка образцов и обмен индексами часто идут через память хоста и потоки диспетчеризации CPU. Политика отбора, которая эффективно масштабируется на одном ускорителе, может создать узкие места сериализации или несбалансированную нагрузку шардов при разделении на восемь параллельных воркеров, останавливая устройства на барьерах синхронизации и съедая вычислительное время, сэкономленное прореживанием.
Стек оптимизации
Попарные взаимодействия выявляют локальные узкие места, но промышленные развертывания выполняют эти оптимизации как интегрированный конвейер. Как показано на схеме полного стека оптимизации («Стек оптимизации»), каждый этап от приема данных до исполнения на аппаратуре усиливает или ослабляет последующую эффективность.
Стек оптимизации: артефакты данных проходят через отбор и обучение, прежде чем получившаяся модель попадает в сжатие и развертывание. Изменения на входе распространяют эффекты качества и стоимости вниз по потоку, но сокращение обучающих данных не упрощает модель и аппаратуру развертывания автоматически.
Конвейер на «Стеке оптимизации» показывает, почему отбор данных занимает стратегическое положение в голове стека оптимизации. При фиксированном графике обучения сокращение объема данных вдвое может вдвое сократить работу обучения на уровне образцов. Однако прореживание набора данных само по себе не уменьшает объем параметров, не улучшает запас для квантования и не ослабляет ограничения задержки обслуживания. Каждый следующий уровень наследует и вычислительную экономию, и любые представительные дефициты, созданные выше по потоку: агрессивный фильтр, который отбрасывает редкие, но критичные пограничные случаи, может заставить инженеров ниже по потоку дольше обучать модель или отказаться от агрессивного квантования, чтобы сохранить точность на задаче.
Чтобы количественно оценить эти совокупные компромиссы, нужно определить, переводится ли номинальное сокращение числа образцов в настоящую сквозную эффективность и не ухудшает ли оно обобщение незаметно. Ответ на этот вопрос требует дисциплинированной системы измерений: количественных метрик, которые балансируют арифметическую экономию, накладные расходы на перемещение данных и эмпирическое качество на задаче по всему конвейеру.
Система измерений
Стек межуровневых взаимодействий делает систему измерений неизбежной: каждая техника отбора данных заявляет о повышении эффективности, но только строгие измерения отделяют реальную экономию от перенесенных затрат или скрытой потери качества. Ключевые метрики в разделе «Основные метрики» связывают сокращение образцов с точностью, стоимостью и покрытием развертывания, так что меньший набор данных оценивается по тому, что он сохраняет, а не только по тому, что он удаляет.
Основные метрики
Основные метрики связывают сокращение образцов с качеством модели, а не сообщают только точность. Они измеряют прирост точности на образец (производительность на данные), совокупную эффективность обучения по масштабам набора данных (площадь под кривой обучения) и сокращение набора данных при целевой точности (коэффициент сжатия данных).
Производительность на данные
Самая прямая метрика, производительность на данные (PPD), измеряет прирост точности на образец:
где — число обучающих образцов. Более высокое значение PPD означает больший средний прирост на образец на заданном интервале. Его форму нужно измерять, поскольку убывающая отдача и момент ее начала зависят от нагрузки.
Площадь под кривой обучения
Вместо сравнения в одной точке площадь под кривой обучения (AULC) интегрирует качество по всем размерам набора данных:
где — размер набора данных, а — полный размер набора данных.
Для одной и той же метрики и диапазона интегрирования более высокий AULC означает, что стратегия достигает более сильного качества на меньшем числе образцов. Сравнения должны использовать один и тот же верхний предел или нормировать интеграл.
Коэффициент сжатия данных
Для методов коресетов коэффициент сжатия данных (DCR) измеряет, какое сокращение данных достигается при целевой точности:
DCR, равный 5, означает, что коресет достигает целевой точности на 20 процентах данных.
Граница, оптимальная по вычислениям
Хотя основные метрики в разделе «Основные метрики» измеряют отдельные техники, также нужна диагностика более высокого уровня, которая проверяет, ограничена ли общая стратегия обучения данными или вычислениями. Эксперименты с законами масштабирования нейронных сетей (Kaplan et al., 2020; Hoffmann et al., 2022) подбирают степенные зависимости для конкретных семейств моделей, наборов данных и диапазонов вычислений. Контролируемые серии запусков могут использовать эти подобранные зависимости, чтобы сравнивать распределение моделей и данных, но ни одно отдельное соотношение не диагностирует каждый запуск обучения.
Исследование Chinchilla33 (Hoffmann et al., 2022) подобрало оптимальный по вычислениям баланс между размером модели и обучающими данными в пределах своего экспериментального режима. Распределения по обе стороны от подобранного баланса использовали бюджет вычислений исследования менее эффективно.
Оптимальный баланс задает границу, оптимальную по вычислениям: наилучшее достижимое качество при каждом бюджете вычислений, когда данные и размер модели сбалансированы надлежащим образом. «Иллюстративная граница, оптимальная по вычислениям» показывает эту диагностику как концептуальную границу, а не подобранный результат Chinchilla.
Иллюстративная граница, оптимальная по вычислениям: зеленая кривая — концептуальная граница по нормированным вычислениям, а не подобранный результат Chinchilla. Точки ниже нее иллюстрируют распределения, которые контролируемая серия перебора размера модели и числа токенов может определить как ограниченные данными или вычислениями.
Относительно границы, подобранной по контролируемым сериям, положение точки может подсказать следующий эксперимент. Распределение, ограниченное данными, мотивирует проверку качества корпуса, покрытия или отбора; распределение, ограниченное вычислениями, — проверку эффективной пропускной способности, длительности или размера модели. Концептуальные точки на рисунке «Иллюстративная граница, оптимальная по вычислениям» сами по себе не диагностируют реальный запуск, а точки вблизи подобранной границы остаются специфичными для семейства моделей, данных, целевой функции и диапазона вычислений, по которым ее оценили.
Интерпретация результата Chinchilla
В подобранном режиме Chinchilla оптимальные по вычислениям параметры модели и обучающие токены росли примерно с одинаковой скоростью.34 В частности, обучение плотного трансформера требует около FLOP ( на прямой проход и на обратный проход с пересчетом активаций, где — число параметров, а — число токенов). При режиме равного масштабирования, когда параметры и токены растут пропорционально (), общие вычисления растут квадратично (), что напрямую означает: оптимальное число токенов масштабируется как корень из бюджета вычислений (). Удвоение вычислений поэтому соответствует примерно , или 41,4 процента, дополнительных токенов при этих предположениях. Часто приводимые 20 токенов на параметр — полезный ориентир из этого исследования, а не универсальный оптимум.
Применение диагностики
Если обучение работает хуже ожиданий, продление одного запуска может показать, еще ли помогают дополнительные шаги оптимизации, но плато само по себе не указывает на голодание по данным. Графики скорости обучения, ограничения оптимизации, емкость модели и качество данных могут все вместе дать плато. Надежная диагностика сравнивает контролируемые запуски, которые варьируют размер модели, число токенов и распределение вычислений при фиксированном протоколе оценки.
На графике «Иллюстративная убывающая отдача данных» две кривые расходятся: стратегия эффективного отбора данных (синяя) достигает плато качества на меньшем числе образцов, чем случайная выборка (серая). Горизонтальный разрыв отражает это сокращение числа образцов и может переходить в экономию вычислений, если работа на образец и график обучения остаются фиксированными; вертикальный разрыв, отмеченный красной стрелкой, представляет прирост качества при фиксированном размере набора данных.
Иллюстративная убывающая отдача данных: синтетическая кривая эффективного отбора (синяя) достигает того же плато на меньшем числе образцов, чем случайная выборка (серая). Вертикальная красная стрелка отмечает модельный разрыв в качестве при фиксированном размере набора данных; измеренные кривые не обязаны иметь такую форму.
Эти метрики оценки определяют точку перехода, в которой неизбирательный сбор данных уступает место целенаправленному кураторству, и показывают, когда предельные образцы тратят вычисления обучения впустую, а не улучшают обобщение. Однако алгоритмическая эффективность не гарантирует, что сокращенный набор данных сохранит качество модели на эксплуатационных пограничных случаях.
Техники отбора данных неявно ранжируют ценность образцов, и проверка того, что отобранный набор сохраняет качество модели, требует систематического бенчмаркинга по трем измерениям. Метрики покрытия подтверждают, что отбор коресетов сохранил представительность по классам и демографическим группам. Метрики согласованности распределений (такие как дивергенция KL и индекс стабильности популяции, которые определены в разделе «Измерение дрейфа (расхождение)» приложения «Основы данных») выявляют, не сдвинулся ли отобранный обучающий набор относительно распределения развертывания. Метрики качества меток (согласованность между аннотаторами, уверенное обучение) подтверждают, что активное обучение не внесло систематических ошибок разметки. Сокращение набора данных на 50 процентов ценно лишь тогда, когда бенчмаркинг подтверждает, что модель сохраняет целевую точность, калибровку и устойчивость. Глава «Бенчмаркинг» позднее обобщает эти идеи в более широкие протоколы оценки модели и данных; здесь мысль уже: отобранный набор данных нужно проверять по распределению задачи, а не по одному только коэффициенту сокращения.
Сама целевая метрика валидации может быть ненадежной. Точность на бенчмарке может завышать обобщение, когда тестовые наборы не отражают сдвигов распределения в эксплуатации, поэтому оценочные бенчмарки требуют такой же строгости, как и отобранные обучающие наборы.
Пример: разрыв воспроизведения бенчмарка
Сценарий: классификаторы, оцененные на заново собранных тестовых наборах, потеряли от 3 до 15 процентных пунктов точности на CIFAR-10 и от 11 до 14 пунктов на ImageNet (Recht et al., 2019).
Диагностика: воспроизведенная выборка дала немного более сложные изображения, чем исходные тестовые наборы. Исследование показало, что адаптивность бенчмарка не объясняет разрыв, хотя многократное использование одного и того же тестового набора остается общим риском оценки.
Системный урок: построение оценочного набора влияет на измеренное обобщение. Конвейеры отбора данных должны проверять отобранные подмножества на независимо собранных тестовых наборах, релевантных развертыванию, а не доверять одному бенчмарку, который использовался очень долго.
Выигрыш в эффективности, измеренный по одному бенчмарку, может исчезнуть при сдвиге распределения; отобранное подмножество должно демонстрировать стабильное качество на нескольких отложенных распределениях, прежде чем ему можно доверять заявленный коэффициент сокращения.
Отбор данных для маячных моделей
Принципы отбора данных применимы ко всем пяти маячным моделям, хотя доминирующее ограничение определяет технику. «Приоритеты отбора данных по маячным моделям» сопоставляет каждую нагрузку с приоритетом: например, ResNet-50, ограниченная вычислениями, выигрывает от отбора коресетов, GPT-2/Llama, ограниченная памятью, — от дедупликации, а крошечная модель KWS — от аугментации и синтеза.
Маячная модель Основное узкое место Приоритет отбора данных ResNet-50 Вычисления Отбор коресетов напрямую сокращает FLOP обучения GPT-2/Llama Пропускная способность памяти Дедупликация уменьшает размер корпуса; учебный план повышает эффективность токенов MobileNetV2 Задержка/энергопотребление Проверить аугментацию на целевой модели и инвариантностях развертывания DLRM Емкость памяти Дедупликация взаимодействий и прореживание эмбеддингов уменьшают размер таблиц Распознавание ключевых слов (KWS) Экстремальные ограничения Аугментация и синтез создают наборы данных из минимальных исходных образцов Приоритеты отбора данных по маячным моделям: основное узкое место и кандидатный приоритет отбора данных для каждой нагрузки. Такое сопоставление задает гипотезу для проверки; одного доминирующего ресурсного ограничения недостаточно, чтобы гарантировать окупаемость техники.
Для всех этих нагрузок отбор данных работает как системная оптимизация, настроенная на снятие того физического ресурса, который связывает конвейер.
На всем стеке оптимизации строгие метрики отделяют подлинную экономию вычислений от отложенного вычислительного долга. Стратегия отбора успешна, только если экономия на последующем обучении и обслуживании при целевом качестве превышает арифметические и пересылочные накладные расходы на оценку, фильтрацию и подготовку образцов.
Заблуждения и ловушки
Отбор данных связан с контринтуитивной убывающей отдачей, которая противоречит интуиции «больше — лучше» из традиционного машинного обучения. Ошибки ниже делятся на три группы: концептуальные заблуждения о том, чего может достичь отбор данных, ловушки реализации, возникающие, когда правильные стратегии сталкиваются с инженерной реальностью, и ошибки переноса, возникающие, когда результаты бенчмарков применяются к новым доменам без критической проверки.
Заблуждение и ловушка
Заблуждение: Данные — новая нефть, поэтому больше всегда лучше.
Больше данных не означает пропорционального роста точности, потому что кривые обучения демонстрируют убывающую отдачу по степенному закону. Функция потерь на тесте убывает сублинейно с объемом выборки (), то есть каждое следующее снижение ошибки требует экспоненциально большего корпуса. В сценарии, описанном в «Асимметрия масштабирования ресурсов ML», увеличение набора данных в десять раз с 1 млн до 10 млн образцов дает всего 4 процентных пункта прироста точности. В системных терминах такое расширение в 10 раз требует десятикратного роста ввода-вывода хранилища, передач от хоста к устройству и FLOP ускорителей, тратя огромную энергию кластера на обработку избыточных примеров с малым градиентом, которые почти не добавляют информации к обновлению параметров. Команды должны измерять эмпирическую кривую обучения и предельную стоимость вычислений для своей конкретной нагрузки, а не предполагать, что масштабирование неотобранных данных даст пропорциональную ценность.
Заблуждение и ловушка
Ловушка: Замена валидации на реальных данных обучением только на синтетике.
Инженеры часто полагают, что генеративные модели могут заменить эмпирический сбор данных неисчерпаемыми синтетическими образцами при нулевой предельной стоимости получения. Обучение только на синтетике терпит неудачу по двум основным режимам. Во-первых, как разобрано в «Преодоление доменного разрыва» и «Соотношения смешивания синтетических и реальных данных», генеративные распределения страдают доменным разрывом: синтетические данные могут расходиться с физическим многообразием развертывания, смещая выученную границу решений на «Проблеме доменного разрыва» и вызывая катастрофические ошибки классификации на реальных входах. Во-вторых, рекурсивное обучение на данных, сгенерированных моделью, запускает коллапс модели (Shumailov et al., 2024). Как показывает диаграмма ниже, подача синтетических выходов обратно в последующие циклы обучения постепенно размывает хвосты распределения: в этом сценарии точность на оценке падает с 95 процентов до 78 процентов за пять рекурсивных поколений, то есть коллапс составляет 17 процентных пунктов. Хотя синтетическая аугментация дает полезное покрытие в иллюстративной смеси 50–80 процентов, синтетические смеси всегда нужно проверять и привязывать к отобранным реальным распределениям.
Рекурсивное обучение на синтетических данных снижает точность от поколения к поколению.
Заблуждение и ловушка
Заблуждение: Отбор данных — это просто очистка данных.
Инженеры часто смешивают качество данных (исправление неверных схем, поврежденных меток и шумных токенов) с ценностью данных для конкретной процедуры обучения. Набор данных может быть полностью чистым, корректно размеченным и грамматически безупречным, но при этом математически избыточным: если модель уже минимизировала потери на кластере признаков, обработка дополнительных одинаковых образцов дает нулевой сигнал градиента, сжигая пропускную способность памяти и FLOP ускорителя. Очистка данных устраняет внутренние дефекты данных, тогда как отбор данных активно максимизирует отдачу обучения на потраченный FLOP. Как показывают граница неопределенности на «Иллюстративном отборе на основе неопределенности» и геометрические цели в разделе «Алгоритмы отбора коресетов», нацеливание на информативные пограничные примеры повышает ICR: в нашем разобранном сценарии коресета ICR выше в 1,8 раза. Очистка гарантирует правильность данных; отбор оптимизирует эффективность вычислений обучения.
Заблуждение и ловушка
Ловушка: Рассмотрение отбора данных только как тактики для ограниченного бюджета.
Практики часто видят в отборе данных технику для развертываний с ограниченными ресурсами на периферии или для команд с ограниченным бюджетом и предполагают, что передовые фундаментальные модели могут просто достичь сходимости грубой силой, наращивая кластер. На самом деле крупномасштабное обучение фундаментально ограничено стеной данных («Рост наборов данных у предела»), где доступная емкость ускорителей опережает поставки доступных качественных релевантных человеческих данных. Кроме того, экономическая отдача от отбора растет вместе с расходами кластера: прирост эффективности в 10 процентов на граничном обучении стоимостью $100 млн при наших базовых предположениях экономит $10 млн. Когда инфраструктура отбора, предвычисленные оценки важности и кэшированные эмбеддинги амортизируются по повторным запускам обучения и последующим адаптациям («Амортизация по запускам обучения»), интеллектуальная фильтрация становится фундаментальным экономическим рычагом крупномасштабных инженерных систем.
Заблуждение и ловушка
Заблуждение: Накладные расходы отбора слишком малы, чтобы менять экономику обучения.
Стратегия отбора данных жизнеспособна, только если вычислительная стоимость оценки и фильтрации строго меньше вычислений обучения, которые она экономит. Как формализовано неравенством отбора в «Неравенстве отбора», сквозная жизнеспособность требует . Рассмотрим базовый запуск обучения, который требует 8 часов, при этом обучение на оптимизированном коресете занимает 2 часа. Если сложный алгоритм отбора требует 10 часов на вычисление важности образцов, сам этап отбора потребляет в 5 раз больше времени, чем ускоренное обучение, и превышает базовое обучение на полном наборе, создавая чистый дефицит вычислений. Чтобы выполнить «неравенство отбора», производственные конвейеры отделяют оценку от основной модели, используя кэшированные эмбеддинги или легкие прокси-сети. В нашем иллюстративном сравнении оценка EL2N на основе прокси завершается за 30 минут, всего 6,2 процента от базового обучения на полном наборе, выполняя неравенство и давая ощутимую экономию по календарному времени.
Заблуждение и ловушка
Ловушка: Прореживание редких классов до полного исчезновения.
Стандартные целевые функции отбора минимизируют совокупные эмпирические потери, давая хвостовым срезам минимальное влияние на глобальные вероятности выборки. В наборе из 1 млн примеров, где редкие классы составляют 0,1 процента данных (1 000 примеров), нестратифицированный коресет в 10 процентов в среднем сохраняет лишь 100 примеров редких классов, что заметно ниже порога в 150 образцов, необходимого для выучивания устойчивых представлений признаков. Хотя выборка с важностью теоретически может компенсировать это, взвешивая вклад потерь обратными вероятностями отбора, экстремальные веса выборки раздувают дисперсию градиента. Эта дисперсия дестабилизирует траектории импульса оптимизатора и вынуждает брать меньшие скорости обучения, замедляя сходимость кластера. Как рекомендовано в разделе «Алгоритмы отбора коресетов», промышленные конвейеры коресетов должны задавать жесткие нижние границы стратификации для каждого класса или критичного для развертывания среза до оптимизации оставшегося бюджета отбора.
Заблуждение и ловушка
Заблуждение: Дедупликации обучающих данных достаточно, чтобы оценка была надежной.
Инженеры часто полагают, что устранение дубликатов последовательностей внутри обучающей части предотвращает запоминание и обеспечивает чистую оценку. Однако конвейеры приема в веб-масштабе собирают обучающие, валидационные и тестовые бенчмарки из общих веб-обходов, что вносит незаметную перекрестную утечку между частями. Когда оценочные наборы содержат дубликаты или почти дубликаты обучающих документов, метрики валидации измеряют запоминание, а не обобщение на данных вне распределения. Масштабное исследование дедупликации показало, что пересечение обучающих и тестовых данных затрагивает более 4 процентов валидационных примеров в стандартных бенчмарках языкового моделирования (Lee et al., 2022). Дедупликация обучающих данных в изоляции оставляет эту загрязненность оценки нетронутой. Строгая гигиена конвейера требует дедупликации между частями с помощью сопоставления -грамм или MinHash LSH («Дедупликация данных»), с калибровкой порогов сходства почти дубликатов, чтобы удалить утекшие последовательности во всех частях одновременно.
Заблуждение и ловушка
Ловушка: Активное обучение без учета задержки разметки.
Теоретические постановки активного обучения предполагают оракула с нулевой задержкой, который мгновенно размечает запрошенные образцы, позволяя модели включить новые градиенты до выбора следующей партии запросов. В промышленных системах очереди человеческой разметки вносят существенные задержки, часто иллюстративные 14 дней между отправкой образца и возвратом метки. Эта задержка ломает цикл обратной связи активного обучения двумя способами. Если кластеры ускорителей останавливают обучение в ожидании меток, дорогое оборудование простаивает, разрушая утилизацию вычислительных ресурсов кластера. И наоборот, если обучение продолжается асинхронно на фоновых данных, пока аннотации ожидают, веса модели дрейфуют через шаги обучения; к моменту прихода меток оценки неопределенности, которые обосновывали запрос этих образцов, устаревают. Кроме того, отправка огромных партий для амортизации времени разметки создает информационную избыточность внутри партии запросов, если не применяются штрафы за разнообразие. Отдача от вложений в активное обучение ограничена не только ценой меток, но и отношением задержки аннотации к циклу переобучения модели.
Заблуждение и ловушка
Заблуждение: Если техника работает на ImageNet, она сработает и на моем наборе данных.
Коэффициенты прореживания, выведенные из стандартных бенчмарков зрения, нельзя слепо переносить на специфичные для домена нагрузки. Наборы вроде CIFAR-10 и ImageNet обладают высокой семантической избыточностью среди канонических классов объектов, что допускает агрессивное прореживание коресетов (часто на 30–50 процентов) без измеримой деградации точности. Напротив, специализированные домены, такие как гистопатология, спутниковое дистанционное зондирование или обнаружение дефектов в промышленности, имеют тяжелохвостые распределения признаков, где критичные для безопасности паттерны появляются лишь в нескольких редких примерах. Отбрасывание 50 процентов примеров по эвристике ImageNet может устранить единственные пограничные примеры, которые отделяют тонкие патологии, и вызвать катастрофическую деградацию в домене. Кроме того, геометрические алгоритмы коресетов опираются на пространства эмбеддингов: если экстрактор признаков предобучен на естественных изображениях, его представления не содержат индуктивного смещения, нужного для различения тонких доменных отличий. Инженерные команды должны измерять избыточность собственных данных, оценивать представления на целевых последующих задачах и проверять доли сохранения на критичных для безопасности срезах до применения прореживания.
Заблуждение и ловушка
Ловушка: Оптимизация метрик отбора вместо метрик развертывания.
Алгоритмы отбора оптимизируют суррогатные математические цели, такие как общее снижение потерь, площадь под кривой обучения (AULC) или производительность на данные (PPD, «Основные метрики»), вычисленные как агрегированный скаляр по корпусу валидации. Политика отбора, сохраняющая коресет в 10 процентов, может достичь превосходного агрегированного PPD, отдавая предпочтение плотным кластерам распространенных легких образцов, которые ускоряют среднюю сходимость, и отбрасывая неоднозначные пограничные случаи и редкие срезы. В промышленной эксплуатации, однако, отказы системы происходят на хвостовых срезах, пограничных случаях и защищаемых подгруппах, а не на средних значениях набора данных. Максимизация агрегированной эффективности отбора без ограничений по подгруппам дает модели, которые проходят глобальные валидационные ворота, но катастрофически отказывают при развертывании. Как предписывает система измерений в «Система измерений», политики отбора нужно оценивать стратифицированными бенчмарками по срезам, которые обеспечивают покрытие демографических групп, редких категорий и эксплуатационных пограничных случаев, даже если это немного снижает средний PPD.
Итоги
Отбор данных рассматривает объем обучения как инженерную переменную, а не как неизменное ограничение. Там, где традиционное машинное обучение спрашивает, сколько примеров нужно для достижения целевой точности, системная инженерия оптимизирует полную стоимость по вычислениям, хранилищу, разметке, энергии и календарного времени. Отобранные наборы данных могут не уступать огромным неотобранным корпусам или превосходить их, потому что предельный сигнал обучения у сырых примеров различается на порядки. В порядке оптимизации отбор решает первый вопрос: устранение ненужной работы до начала обучения модели.
Этот системный подход становится практичным благодаря трем количественным инструментам: ICR, неравенству отбора и модели полной стоимости данных. Отношение информации к вычислениям измеряет обучение, полученное на единицу FLOP, и показывает, оправдывает ли пример свой проход обучения. Неравенство отбора требует, чтобы вычислительные и временные накладные расходы на оценку кандидатов оставались строго меньше времени обучения, сэкономленного на сохраненном подмножестве. Вместе с анализом окупаемости и безубыточности эти формулировки определяют, экономит ли предложенный механизм отбора ресурсы или лишь переносит расходы между этапами.
Трехэтапный конвейер оптимизации решает разные фазы этого уравнения стоимости: статическое прореживание убирает избыточность до обучения с помощью отбора коресетов и дедупликации; динамический отбор выделяет информативные примеры во время обучения с помощью учебного плана и активного обучения; а синтетическая генерация создает данные там, где их не было, с помощью аугментации, симуляции и дистилляции. Вместе эти стратегии отвечают на «стену данных», то есть структурную асимметрию между быстро растущими вычислительными мощностями и медленно растущими качественными данными.
Самоконтролируемое обучение представляет крайнюю точку спектра отбора данных. Предобучение переносит основную часть обучения представлений в неаннотированную восходящую фазу, позволяя последующим задачам достигать целевого качества с гораздо меньшим числом специфичных для задачи меток. Эта первоначальная инвестиция становится экономически убедительной, когда стоимость предобучения амортизируется по десяткам или сотням специализированных адаптаций.
Перевод этих стратегий отбора в промышленную эксплуатацию требует решения конкретных системных узких мест. Неравенство отбора в «неравенстве отбора» контролирует каждую технику: любой проход оценки, превышающий календарное время, сэкономленное при обучении, дает чистый убыток. Прокси-модели и загрузчики на основе шардов согласуют динамический отбор с пропускной способностью последовательного хранилища, не давая случайному доступу к образцам останавливать исполнение на ускорителе. Когда входные конвейеры остаются узким местом пропускной способности, эхо данных переиспользует батчи, чтобы вернуть простаивающие такты GPU. Наконец, диагностические метрики (производительность на данные (PPD), площадь под кривой обучения (AULC) и коэффициент сжатия данных (DCR)) показывают, ограничена ли модель данными или вычислениями, и направляют инвестиции в связывающий ресурс.
Отбирать, а не накапливать
- Отбор оптимизирует стоимость системы: цель — минимизировать полную стоимость по вычислениям, хранилищу, разметке и энергии, а не только число образцов. Отношение информации к вычислениям выражает этот компромисс как полученное обучение на потраченный FLOP и переходит в ускорение по календарному времени только в условиях, ограниченных вычислениями.
- Начинайте с дедупликации: точная дедупликация часто является самой безопасной первой техникой, поскольку удаляет повторяющиеся байты без обученного прохода оценки. Почти дубликаты и семантическую дедупликацию применяйте только после проверки порогов по метрикам качества на последующих задачах.
- Неравенство отбора регулирует каждую технику: экономия на последующем обучении должна строго превышать накладные расходы отбора: . Легкие прокси-модели и кэшированные эмбеддинги удерживают низким, тогда как неоптимизированные алгоритмы отбора могут съесть всю экономию.
- Динамический отбор адаптирует рацион данных: учебный план меняет порядок предъявления, а активное обучение — какие образцы получают метки. Каждый из них повышает эффективность, когда проверены его правило оценки, покрытие и накладные расходы на обновление.
- Самоконтролируемое предобучение может амортизировать стоимость адаптации: предобучение один раз и дообучение многократно распределяет стоимость предобучения по последующим задачам. Сценарий предполагает снижение меток в 100 раз и снижение предельных вычислений в 20 раз; реальная экономия зависит от качества переноса и повторного использования.
- Синтетические данные — дополнение, а не замена: смесь 50–80 процентов синтетики иллюстративна и зависит от нагрузки, а не является универсальным оптимумом. Чисто синтетическое обучение рискует коллапсом модели и деградацией из-за доменного разрыва.
- Проверенное сокращение работы накапливает эффект ниже по потоку: когда отбор безопасно устраняет примеры или токены без компенсирующих шагов, эта работа никогда не доходит до последующих оптимизаций модели или машины. Динамическая оценка и синтез добавляют собственные издержки, поэтому совокупную экономию нужно измерять, а не предполагать.
Определяющий инвариант отбора данных состоит в том, что обучающие примеры дают крайне неравный предельный сигнал обучения на переданный байт и выполненный FLOP. В таксономии D·A·M отбор работает в голове системы: каждый безопасно устраненный избыточный образец или неинформативный токен напрямую сокращает и объем данных (), и число операций () в железном законе ML-систем (принцип «Железный закон систем машинного обучения»). Это сокращение на входе навсегда убирает работу до начала последующего алгоритмического сжатия или аппаратного ускорения, при условии что накладные расходы отбора строго ограничены неравенством отбора.
От данных к алгоритмам
Отбор данных меняет то, чему учится система; даже лучшие данные не сделают неэффективную модель быстрой на ограниченном оборудовании. Фокус переносится на то, как система представляет усвоенное: Глава «Сжатие моделей» рассматривает прореживание, квантование и дистилляцию знаний, снижающие вычислительную стоимость самого артефакта модели.
-
Законы масштабирования: Джаред Каплан и его коллеги из Университета Джонса Хопкинса и OpenAI в 2020 году эмпирически показали, что функция потерь языковых моделей подчиняется степенным зависимостям от размера модели, размера набора данных и бюджета вычислений в изученных режимах (Kaplan et al., 2020). Подобранный показатель степени по данным составлял примерно в . Значение не универсально, но форма убывающей отдачи позволяет рассуждать о том, когда отбор становится выгоднее сбора новых данных. ↩
-
Стена данных: в отличие от вычислений (которые растут за счет капитальных затрат) или алгоритмов (которые улучшаются благодаря исследованиям), запас качественного текста, созданного людьми, растет медленно. Обновленные прогнозы Epoch AI оценивали, что при смоделированных в статье предположениях о потреблении модели могли бы использовать наборы данных примерно того же объема, что и запас публичного текста, созданного людьми, в период между 2026 и 2032 годами (Villalobos et al., 2022). Для проектирования систем важно не фиксированное календарное ограничение, а то, что данные могут стать ограничением поставок, а не только экономическим ограничением. Это напрямую влияет на член общего числа операций : когда качественные данные становятся дефицитными, дополнительные вычисления дают убывающую отдачу независимо от пропускной способности аппаратуры. ↩
-
The Pile: корпус английского текста примерно 886 ГБ (в источнике указано 825 гибибайт), объединяющий двадцать два подмножества, включая PubMed, ArXiv, GitHub, Project Gutenberg, Common Crawl, Stack Exchange, Википедию и патенты USPTO (Gao et al., 2020). Его многоисточниковая структура делает его полезным примером разнообразия данных: у каждого семейства источников свой профиль дублирования, качества и покрытия предметных областей, поэтому конвейеры отбора должны сохранять покрытие при удалении избыточного текста. ↩
-
C4 (Colossal Clean Crawled Corpus): C4 применяет к данным Common Crawl фильтрацию, включая определение языка, дедупликацию повторяющихся трехпредложных фрагментов и удаление страниц, не прошедших эвристические проверки качества, в результате чего получается примерно 750 ГБ очищенного английского текста (Raffel et al., 2020). Фильтрация сама имеет вычислительную стоимость и может удалить полезный материал, поэтому ее ROI и влияние на качество нужно измерять, а не выводить из одного лишь размера корпуса. ↩
-
Коресет (core set): в вычислительной геометрии небольшое подмножество может аппроксимировать заданную геометрическую цель с контролируемым коэффициентом ошибки (Agarwal et al., 2005). Машинное обучение адаптирует эту идею как принцип отбора, но гарантия для целевой функции с эмбеддингами и расстоянием сама по себе не гарантирует точности нейронной сети. Сохраненное подмножество все равно необходимо проверить на целевой задаче. ↩
-
Алгоритм k-центров: его жадная стратегия на каждом шаге выбирает точку, наиболее удаленную от уже выбранных центров, в заданном эмбеддинге и метрике. Sener and Savarese используют эту постановку коресетов для активного обучения сверточных нейронных сетей (Sener and Savarese, 2018). Полученная оценка покрытия относится к этой геометрической цели, а не напрямую к точности на последующих задачах или сохранению редких классов. ↩
-
EL2N (error L2-norm) и GraNd (gradient normed): эти методы оценивают примеры по их ошибке или норме градиента на раннем этапе обучения, выявляя примеры, которые модель считает наиболее трудными. Практичность подхода опирается на переносимость: оценки малой прокси-модели могут направлять отбор данных для гораздо большей целевой модели. Например, прокси, обученная за пять эпох, может создать оценки для отбора набора данных для полного производственного обучения на 90 эпохах (Paul et al., 2021). ↩
-
События забывания: этот метод находит ценные примеры, отслеживая, когда модель «забывает» их, то есть переходит от верной классификации к неверной в ходе обучения. Главный компромисс — высокая стоимость анализа, который требует полного прогона обучения. Однако полученные оценки важности надежно переносятся с малых прокси-моделей на большие целевые (например, с ResNet-18 на ResNet-50), и именно это делает стратегию «дешевого отбора на основе прокси» жизнеспособной (Toneva et al., 2019). ↩
-
MinHash: предложен (Broder, 1997) для выявления дубликатов веб-страниц в AltaVista; алгоритм строит компактные сигнатуры с помощью случайных хеш-функций так, что похожие документы с высокой вероятностью дают похожие сигнатуры. Каждая сигнатура сжимает документ в эскиз фиксированного размера, что позволяет оценивать попарное сходство за время для размера эскиза . ↩
-
Локально-чувствительное хеширование (LSH): LSH раскладывает MinHash-сигнатуры по бакетам так, что похожие сигнатуры с большей вероятностью совпадают. Генерация кандидатов избавляет от полного попарного сравнения, а время работы и память зависят от длины сигнатуры, разбиения на полосы, размеров бакетов и числа кандидатов, требующих проверки. ↩
-
Сходство Жаккара: определяется как и лежит от 0 (не пересекаются) до 1 (идентичны). Для дедупликации метрика сравнивает множества шинглов документов разной длины. Порог нужно калибровать под определение шинглов, корпус и последующее качество, потому что универсального порога, отделяющего дубликаты от законно связанных документов, не существует. ↩
-
CLIP (Contrastive Language-Image Pretraining): предобучен на 400 миллионах пар «изображение — текст» и отображает семантически связанные изображения и тексты в общее пространство эмбеддингов (Radford et al., 2021). Эмбеддинги могут выдавать кандидатов на проверку, но семантическая близость не является доказательством дублирования двух примеров. Вычисление эмбеддингов также заметно дороже, чем вычисление перцептивных хешей, а соотношение зависит от модели и аппаратуры. ↩
-
Учебный план (curriculum learning): от латинского currere («бежать»), первоначально означавшего «дистанцию, которую нужно пройти», — метафора, которая напрямую соответствует методу: обучающие данные как дистанция, пройденная в заданном порядке, с простыми участками вначале. Учебный план может работать как метод продолжения для невыпуклой оптимизации: более простые примеры формируют раннюю траекторию оптимизации, прежде чем вводятся трудные. С системной точки зрения ICR примера может меняться в ходе обучения, что оправдывает изменение состава примеров со временем. ↩
-
Активное обучение: «активной» здесь является сама алгоритмическая часть, которая выбирает, какие неразмеченные примеры эксперт должен разметить следующими. Это переводит задачу из вычислительной оптимизации (обучение на данных, которые уже есть) в финансовую: максимизировать прирост модели на каждый доллар, потраченный на экспертную разметку. Запрос наиболее информативных примеров может существенно сократить потребность в разметке по сравнению со случайной выборкой, но множитель зависит от задачи, модели и оракула (разметчика). ↩
-
Иллюстративная экономика клинической разметки: диапазоны доли просмотра и почасовой ставки — это предположения сценария, а не сообщенные измерения. При этих входных данных разметка 500 снимков требует 7–10 часов и стоит $1 000–3 000; разметка всех 50 000 стоит $94 000–300 000. Арифметика иллюстрирует, почему полуконтролируемое обучение может быть привлекательным, когда экспертные метки дороги, но реальное время просмотра, арбитраж, распространенность и требования к проверке нужно измерять. ↩
-
Псевдоразметка: использует уверенные предсказания обученной модели как эталонные метки для неразмеченных данных. Эффективность метода основана на положительной обратной связи: точные предсказания на легких неразмеченных примерах расширяют обучающий набор, что улучшает модель и позволяет точнее предсказывать на более трудных примерах. Режим отказа так же самоусиливается: неверные псевдометки закрепляют ошибки через подтверждающее смещение, и модель укрепляет собственные неверные классификации. ↩
-
Регуляризация согласованности: основана на допущении гладкости: если два входа и близки в пространстве входов, их метки тоже должны быть близкими. Целевая функция обучения минимизирует расхождение между предсказаниями модели для входа и для его аугментированной версии. Концептуально это отличается от аугментации данных (которая создает больше обучающих примеров), поскольку явно навязывает согласованность предсказаний как член потерь, даже для неразмеченных данных, где «правильная» метка неизвестна. Системное следствие — дополнительные вычисления на генерацию и сравнение предсказаний при нескольких возмущениях; этот компромисс может быть выгоден в условиях, где вычислений много, а меток мало. ↩
-
FixMatch: генерирует псевдометку по слабо аугментированному изображению, а затем обучает модель предсказывать ту же метку для сильно аугментированной версии того же изображения. Это обучение согласованности ограничено порогом уверенности: псевдометка используется, только если предсказание модели на слабой аугментации очень уверенное (например, >0,95) (Sohn et al., 2020). Здесь прямой системный компромисс между дополнительными вычислениями обучения и меньшим числом ручных меток; величина зависит от базового варианта и модели стоимости. ↩
-
Самоконтролируемое обучение: претекстовая задача, например предсказание следующего или замаскированного токена, дает сигнал контроля, выведенный из самих данных. Это снижает зависимость от специфичных для задачи человеческих меток, но может требовать существенных вычислений предобучения. Амортизация зависит от того, насколько широко переиспользуется полученная модель. ↩
-
Фундаментальная модель: название подчеркивает, что такие модели служат общей основой для многих последующих задач, но это создает единую точку отказа. Дефекты данных предобучения фундаментальной модели (смещения, фактические ошибки, запомненное приватное содержимое) распространяются на каждое приложение, построенное на ней. С системной точки зрения этот риск гомогенизации означает, что качество отбора данных при предобучении имеет непропорционально большой радиус поражения: ошибка кураторства, которая в парадигме обучения с нуля затронула бы одну задачу, теперь затрагивает тысячи последующих развертываний. ↩
-
Cutout: случайно маскирует квадратные области входных изображений во время обучения, заставляя модель распознавать объекты по частичной информации, а не по одной различительной области (DeVries and Taylor, 2017). В отличие от dropout (который обнуляет нейроны в пространстве признаков), Cutout действует во входном пространстве. Исходные эксперименты с Cutout дали прирост от 0,3 до 2,0 процентного пункта на CIFAR-10/100 и SVHN при ничтожных вычислительных накладных расходах, что делает его методом аугментации с высоким ICR, когда инвариантность к окклюзии соответствует задаче: больше информации на пример почти без дополнительной стоимости для конвейера. ↩
-
CutMix: заменяет обнуленную область Cutout фрагментом из другого обучающего изображения, смешивая метки пропорционально площади фрагмента (если 30 процентов изображения A заменены изображением B, метки делятся 70/30) (Yun et al., 2019). Это устраняет слабость Cutout: обнуленные области тратят пиксельную информацию, которая могла бы нести сигнал обучения. В статье CutMix сообщается о приросте top-1 на ImageNet на 2,28 процентного пункта для ResNet-50 и на 1,70 процентного пункта для ResNet-101, а также об улучшении локализации. Метод дает более сильную регуляризацию, чем Cutout или MixUp по отдельности, при небольшой дополнительной стоимости конвейера данных. ↩
-
Обратный перевод: в методе, описанном в (Sennrich et al., 2016), одноязычный текст на целевом языке переводится на исходный язык, а синтетический исходник сопоставляется с неизмененной целью для обучения машинному переводу. Системный компромисс — задержка, поскольку каждый синтетический исходник требует вывода модели перевода. Конвейеры могут предвычислять такие примеры офлайн, а не генерировать их в загрузчике данных. ↩
-
AutoAugment: рассматривает проектирование политики аугментации как задачу поиска с подкреплением: контроллер выбирает операции (поворот, сдвиг, наклон, выравнивание гистограммы), их величины и вероятности применения, чтобы максимизировать точность на валидации (Cubuk et al., 2019). Исходный поиск для ImageNet использовал примерно 15 000 GPU-часов, что мотивировало более поздние методы, сокращающие пространство поиска. ↩
-
RandAugment: сводит поиск политик AutoAugment к двум гиперпараметрам: числу преобразований и общей величине (Cubuk et al., 2020). Такое маленькое пространство поиска соответствует или превосходит AutoAugment на сообщенных бенчмарках при гораздо меньшей стоимости поиска, что делает его практичным, когда 15 000 GPU-часов на поиск политики не оправданы. ↩
-
Stable Diffusion: выполняет итеративное шумоподавление в сжатом латентном пространстве, что позволяет создавать целенаправленные примеры «текст — изображение» (Rombach et al., 2022). Его итеративная генерация заметно более вычислительно затратна, чем геометрические преобразования, поэтому она подходит там, где важнее новизна, чем пропускная способность на пример. ↩
-
Доменный разрыв: статистическое расхождение между распределениями синтетических и реальных данных, измеримое такими метриками, как maximum mean discrepancy (MMD) или Frechet Inception Distance (FID). Для систем ML разрыв превращается в перекос обучения и обслуживания: модель, обученная на симуляторе, может хорошо проходить валидацию на синтетических данных, но незаметно отказывать на реальных данных развертывания. ↩
-
Рандомизация домена: намеренно разнообразит синтетические данные, рандомизируя текстуры, цвета, освещение и физические свойства. Цель — не фотореализм, а достаточное разнообразие, чтобы улучшить покрытие условий развертывания; это переносит узкое место стоимости с точности рендеринга на покрытие. ↩
-
Коллапс модели: формально проанализирован в (Shumailov et al., 2024). Явление возникает, потому что генеративные модели систематически недопредставляют хвостовые распределения, то есть редкие, но важные паттерны, которые появляются в обучающих данных нечасто. Когда поколение обучается на выходе поколения , каждое следующее поколение дополнительно сжимает хвосты, производя все более однородные данные. Деградация может быть быстрой в условиях рекурсивного обучения, поэтому обучение на неподкрепленных синтетических выходах рискует катастрофическим коллапсом хвостового разнообразия. ↩
-
Дистилляция знаний: мягкие вероятности учителя раскрывают структурные сходства между классами, которые one-hot кодирование опускает. Параметр температуры масштабирует сглаживание логитов (): чрезмерное сглаживание стирает различительный сигнал, а при распределение возвращается к предсказанию argmax. Дистилляция вносит стоимость вывода учителя, которая должна окупаться улучшением эффективности выборки или точности ученика. ↩
-
FAISS (Facebook AI Similarity Search): обеспечивает поиск по сходству с ускорением на GPU, используя точные, приближенные и сжатые индексные структуры (Johnson et al., 2019). Johnson, Douze и Jegou сообщают о построении графа на миллиардах векторов на нескольких GPU, что показывает, почему инфраструктура векторных индексов важна для отбора в веб-масштабе. Для конвейеров отбора данных индексирование в духе FAISS поддерживает поиск ближайших соседей для отбора коресетов, дедупликацию на основе эмбеддингов и стратифицированную кластеризацию для сбалансированной выборки. Без такой инфраструктуры отбор на основе эмбеддингов чаще всего откатывался бы к дорогим сканированиям всего корпуса. ↩
-
Эхо данных: ключевая тонкость — где в конвейере вставить точку эха. Эхо до аугментации (эхо выше по потоку) может применять разные случайные аугментации к каждому повтору, а эхо после аугментации подает ускорителю идентичные тензоры. Полезные коэффициенты эха и реальное ускорение зависят от нагрузки, размера батча, точки вставки и политики перемешивания (Choi et al., 2019). ↩
-
Chinchilla: Chinchilla — языковая модель с 70 миллиардами параметров, обученная на 1,4 трлн токенов. В экспериментах, описанных в (Hoffmann et al., 2022), она превзошла более крупную GPT-3 на большинстве оцененных задач при сопоставимом бюджете вычислений обучения. Подобранное оптимальное по вычислениям распределение масштабировало параметры и токены примерно с одинаковой скоростью в экспериментальном режиме исследования; это не универсальное предписание для каждой архитектуры, набора данных или рецепта обучения. ↩
-
Токены на параметр: отношение сравнивает обучающие токены с параметрами модели; GPT-3 использовала примерно 1,7 токена на параметр (Brown et al., 2020), а Llama 2 70B — примерно 28,6 (Touvron et al., 2023). Эти описательные отношения не устанавливают, был ли какой-либо из запусков оптимальным по вычислениям при другой архитектуре, корпусе, целевой функции или бюджете аппаратуры. Для такой диагностики нужны контролируемые серии перебора размера модели и числа токенов. ↩
Сжатие моделей
Назначение
Почему модели, которые побеждают в бенчмарках, редко становятся моделями, которые работают в продакшене?
Обучение дало способную модель, но сама по себе способность не гарантирует, что ее можно развернуть. Облако, периферийные устройства, мобильные телефоны и TinyML накладывают ограничения, которые исследовательские бенчмарки не учитывают: бюджеты памяти, измеряемые в мегабайтах, а не в гигабайтах, целевые задержки, измеряемые в миллисекундах, а не в секундах, и энергетические бюджеты, измеряемые в милливаттах, а не в киловаттах. Исследования оптимизируют точность на отложенных тестовых наборах; продакшен оптимизирует точность на доллар, точность на ватт и точность на миллисекунду. Модели, которые побеждают в бенчмарках, часто крупнее, медленнее и более требовательны к ресурсам, чем позволяют производственные ограничения. Чтобы преодолеть этот разрыв, нужна систематическая дисциплина сжатия, которая жертвует возможностями, не нужными развертыванию, ради ограничений, которые нельзя нарушить. Многие обученные модели содержат больше разрядов, связей или емкости, чем требует среда развертывания, и часть этого избытка можно убрать, сохранив нужное поведение. Однако меньшее представление не обязательно работает быстрее. Аппаратный и программный стек должен использовать новую числовую точность или структуру; иначе номинальное сокращение лишь переносит узкое место, а задержка остается прежней. При грамотном применении сжатие может существенно уменьшить размер модели и превратить исследовательский артефакт, который работает только в дата-центре, в продуктовый актив для телефона, датчика или микроконтроллера. Дисциплина состоит не просто в том, чтобы делать модели меньше, а в том, чтобы сделать возможными нужные модели для их физической среды. В терминах D·A·M сжатие реализует совместное проектирование алгоритма и машины на уровне самой модели: оно перестраивает ее математическую структуру под физические ограничения машины.
Цели обучения
- Объяснять сжатие как совместное проектирование алгоритма и машины, которое обменивает избыточную емкость на ограничения по памяти, задержке и энергии
- Сравнивать прореживание, дистилляцию, квантование и поиск архитектуры по ограничению ресурса, которое каждый из них ослабляет
- Вычислять снижение объема памяти параметров, разрядности и разреженности, чтобы оценить наилучший достижимый выигрыш от сжатия
- Применять стратегии посттренировочного квантования, квантования с учетом обучения и квантования только весов при ограничениях по точности и аппаратуре
- Выбирать структурное прореживание и операторы, которые соответствуют доступным ядрам ускорителя
- Проектировать конвейеры сжатия, которые упорядочивают прореживание, дистилляцию и квантование так, чтобы сохранить точность при развертывании
- Оценивать измеренные задержку, энергию и точность на целевой аппаратуре, а не полагаться на подсчет FLOP
Рамка оптимизации
Веса крупнейших моделей намного превышают память телефона и микроконтроллера; сжатие преодолевает этот разрыв.
Языковой модели с 7 миллиардами параметров нужно 14 ГБ только для хранения весов в FP16. Целевое устройство — смартфон с 8 ГБ ОЗУ, которые делят операционная система, фоновые приложения и пользовательский интерфейс. Даже если бы операционная система отдала под один процесс весь пул памяти, 14 ГБ превышают физическую емкость устройства. Кроме того, авторегрессивная генерация токенов ограничена пропускной способностью памяти: для каждого сгенерированного токена нужно прочитать из DRAM в регистры процессора все параметры. По мобильной шине LPDDR с пропускной способностью около 50 ГБ/с чтение 14 ГБ занимает почти 300 мс на токен и потребляет несколько джоулей, быстро разряжая батарею и нарушая устойчивый тепловой режим устройства в 3–5 Вт. Это физическое несоответствие между размером модели и возможностями периферийного оборудования определяет основную инженерную задачу сжатия моделей.
Согласно принципу «Кремниевый контракт», каждая модель машинного обучения заключает со своим оборудованием физическую сделку по производительности: пропускная способность вычислений, пропускная способность памяти, емкость памяти и фиксированные накладные расходы на запуск определяют, какой физический ресурс упрется в предел первым. На этапе обучения сделка заключается на повышение: кластеры ускорителей серверного класса дают совокупную память и вычислительную мощность с плавающей точкой, нужные для широких слоев, высокой числовой точности и большого вспомогательного состояния. Обучение должно хранить градиенты, буферы моментов оптимизатора и кэши активаций между проходами назад. Развертывание для вывода меняет эти требования полностью: выполнение идет только вперед, промежуточные активации можно сразу перезаписывать, а состояния оптимизатора исчезают. Смешанная точность улучшает пропускную способность обучения, выборочно используя FP16 или BF16 («Обучение в смешанной точности»), тогда как развертывание позволяет снизить точность еще дальше, до INT8, INT4 или специализированных микроформатов, если их поддерживают целевые вычислительные блоки. В терминах D·A·M обучение совместно проектирует данные и алгоритм, чтобы максимизировать представительную емкость, а сжатие совместно проектирует алгоритм и машину, перестраивая математическую структуру под физические пределы аппаратуры развертывания. Сжатие модели — это систематический процесс пересмотра кремниевого контракта для ограниченной среды выполнения: он уменьшает объем параметров, трафик памяти или число арифметических операций, сохраняя точность решения задачи.
Физическое различие между средами развертывания охватывает шесть порядков величины: крупнейшая модель с 175 миллиардами параметров занимает более 350 ГБ только в представлении FP16, тогда как встроенный микроконтроллер располагает лишь 512 КБ встроенной SRAM. Чтобы преодолеть этот разрыв, нужна инженерная рамка с предсказуемыми физическими компромиссами. Каждый метод сжатия удаляет из модели определенную структуру: лишние веса, избыточные числовые биты или дублирующие подграфы операторов. Проектирование продуктового развертывания требует выявить, какой ресурс упрется в предел первым на целевой платформе, и понять, как последовательные приближения накапливаются по иерархии памяти.
Сжатие действует вдоль трех взаимодополняющих измерений. Структурная оптимизация убирает избыточность из самого графа модели: прореживание исключает параметры с малым влиянием, дистилляция знаний переносит поведение в меньшую архитектуру, а поиск нейронной архитектуры находит конструкции, настроенные под заданную цель. Оптимизация точности снижает разрядность весов и активаций; например, преобразование FP32 в INT8 уменьшает число байтов на значение в четыре раза. Поддерживаемые матричные блоки низкой точности также могут ускорять арифметику. Оптимизация на уровне оборудования отображает преобразованный граф на целевой процессор через слияние операторов и аппаратно поддерживаемую разреженность. Эти измерения образуют стек оптимизации: структурные изменения меняют, какие операции существуют, изменение точности меняет число байтов на значение, а отображение на аппаратуру определяет, станут ли теоретические выигрыши поддерживаемыми путями выполнения. В сверточных сетях слияние пакетной нормализации с предшествующими весами полностью устраняет отдельные обращения к памяти и арифметику на этапе вывода. Выгоды суммируются, только если преобразования снимают разные связывающие узкие места и среда выполнения поддерживает получившийся граф. Раздел «Тензорные ядра» главы «Аппаратное ускорение» объясняет механизмы ускорителей, которые стоят за путями выполнения с низкой точностью.
Конкретные бенчмарк-нагрузки иллюстрируют эти компромиссы в разных режимах работы: ResNet-50 и MobileNetV2 (маячные модели из «Состав маячных моделей: биографии моделей») для задач зрения, трансформерные языковые модели для авторегрессивных последовательностей, DLRM для емкости памяти рекомендательных систем (Naumov et al., 2019) и сверточные сети с раздельной по глубине сверткой (DS-CNN) для распознавания ключевых слов в TinyML (Zhang et al., 2017). Каждая нагрузка нагружает свой член железного закона: от таблиц эмбеддингов, которые доминируют по параметрам, до матричных умножений, требующих много вычислений. Оценка сжатия на этих эталонных нагрузках показывает, как снижение числа параметров и разрядности переходит в реальную экономию задержки и энергии при одинаковых условиях выполнения.
Сжатие модели
Сжатие модели — это семейство методов, которые снижают вычислительную стоимость и объем памяти обученной модели за счет удаления избыточных параметров (прореживание), снижения числовой точности (квантование) или переноса выученного поведения в меньшую архитектуру (дистилляция), сохраняя по возможности предсказательную точность.
- Значение: сжатие напрямую уменьшает члены железного закона, отвечающие за перемещение данных и вычисления. INT8-квантование 175-миллиардной LLM уменьшает память весов с 350 ГБ (FP16) до 175 ГБ, то есть в 2 раза уменьшает , а выделенные матричные блоки низкой точности могут повысить пропускную способность вычислений, если ядра и раскладка данных используют поддерживаемый путь INT8. Неструктурированное прореживание до 50 процентов разреженности уменьшает число ненулевых элементов вдвое, но число выполняемых операций падает только тогда, когда среда выполнения может пропускать нули через поддерживаемый разреженный формат или ядро.
- Отличие: в отличие от методов посттренировочного сжатия, таких как прореживание и квантование, поиск нейронной архитектуры находит эффективные архитектуры с нуля, исследуя пространство проектирования. Здесь NAS рассматривается как родственный метод структурной оптимизации: он меняет представление до обучения, а не сжимает готовую модель постфактум.
- Типичная ошибка: методы сжатия не складываются без взаимных помех. Прореживание меняет распределения весов и профили операций; квантование добавляет ограничения калибровки и ядер. Их комбинация может потерять точность или не дать ускорения без совместной проверки.
Эти три измерения оптимизации образуют нисходящую иерархию абстракций от алгоритмической формулировки к физическому кремнию. Сначала оптимизация определяет, какие операции выполняет модель (представление), затем сколько битов кодирует каждый операнд (числовой формат), и наконец, как выполнение распределяется по структурам памяти и функциональным блокам ускорителя (реализация). «Стек оптимизации» показывает эту последовательность от программного представления к выполнению на аппаратуре.
Стек оптимизации: оптимизация модели идет от представления программного уровня (прореживание, дистилляция, NAS) через числовую точность (квантование) к выполнению на аппаратуре (слияние ядер, движки разреженности). Чем ниже уровень абстракции, тем ближе оптимизации к физическому кремнию, где решения о представлении определяют достижимую эффективность выполнения.
Верхний слой, эффективное представление модели, устраняет структурную избыточность внутри вычислительного графа. Такие методы, как прореживание, дистилляция знаний и поиск нейронной архитектуры (NAS)1, напрямую меняют число параметров и топологию операторов. Прореживание удаляет веса или целые каналы, вклад которых в точность модели пренебрежимо мал. Дистилляция знаний обучает компактную модель-ученика воспроизводить выходные распределения или промежуточные представления переобученного учителя. NAS с учетом аппаратуры автоматизирует этот поиск: он оценивает кандидатные топологии слоев, коэффициенты расширения и размеры ядер, чтобы найти графы, Парето-оптимальные при явных ограничениях на задержку или память.
Средний слой, эффективное представление числовой точности, оптимизирует разрядность, которой кодируется каждое значение тензора. Квантование отображает непрерывные значения с плавающей точкой высокой точности на низкоразрядные представления, например 8-битные или 4-битные целые, уменьшая объем весов и трафик шины DRAM () в два–четыре раза. Помимо сокращения памяти, целочисленная арифметика снимает вычислительные узкие места: матричные блоки низкой точности выполняют целочисленные операции умножения с накоплением, требуя во много раз меньше площади кристалла и энергии, чем 32-битные ALU с плавающей точкой, и обеспечивают более высокую пиковую пропускную способность в том же тепловом режиме.
Нижний слой, эффективная аппаратная реализация, согласует оставшиеся операции с физической архитектурой ускорителя. Меньшее число операций не гарантирует более быстрого выполнения, если перемещение данных останавливает вычислительные ядра или несогласованные обращения к памяти сериализуют каналы DRAM. Слияние операторов объединяет соседние слои, например свертку, добавление смещения и функцию активации, в одно ядро, удерживая промежуточные активации в быстрой встроенной SRAM или регистрах, а не гоняя их туда и обратно через внешнюю DRAM с высокой задержкой. Аналогично, аппаратно поддерживаемые движки разреженности, например структурированные разреженные тензорные ядра 2:4, дают физическое ускорение, только если ненулевые элементы соответствуют ограничениям выравнивания и выборки конвейера выполнения.
Эти три слоя жестко связаны на границе компиляции и выполнения. Прореживание меняет распределения весов и профили активаций, а значит, и динамические диапазоны, которые нужны для последующей калибровки квантования. Квантование уменьшает объем перемещаемых данных по шине памяти и переводит ранее ограниченную памятью нагрузку к режиму, ограниченному вычислениями, где решают слияние ядер и планирование блоков. Чтобы получить совокупный прирост производительности, преобразования нужно согласовывать между всеми тремя слоями, а не применять изолированно; эта стратегия композиции формализована в разделе «Схема принятия решений».
Какой слой стека оптимизации дает наибольшую отдачу, полностью зависит от физической машины, на которой работает нагрузка. Сервер дата-центра с несколькими ускорителями высокой пропускной способности памяти переносит модели в несколько гигабайт, но требует высокой пропускной способности токенов при параллельной работе. Смартфон или встроенный микроконтроллер работают при жестких физических ограничениях на емкость памяти, пропускную способность шины и тепловыделение на уровне милливатт. Определить границы оборудования на каждом физическом уровне и выяснить, какой ресурс упирается в предел первым в каждой среде, — необходимая отправная точка любой стратегии сжатия.
Контекст развертывания
Серверный GPU с 80 ГБ памяти с высокой пропускной способностью (HBM) сталкивается с принципиально иными ограничениями, чем смартфон с общей оперативной памятью или микроконтроллер с несколькими сотнями килобайт SRAM. Физические цели развертывания определяют, какой ресурс упрется в предел первым («Ограничения развертывания»).
| Контекст | Память | Задержка | Мощность | Основная цель |
|---|---|---|---|---|
| Облако | десятки ГБ | 100–500 мс | Гибкая | Пропускная способность, стоимость |
| Мобильные/периферийные | от сотен МБ до ГБ | 5–100 мс | Ватты | Размер, задержка |
| TinyML | КБ–МБ | 1–10 мс | мВт | Размер, энергия |
Ограничения развертывания: каждый контекст развертывания задает собственные приоритеты оптимизации.
Сценарии развертывания
Вывод в облаке ориентирован на пропускную способность (запросов в секунду на доллар): поддерживаемые целочисленные пути квантования повышают плотность обслуживания, а слияние операторов снижает накладные расходы на запуск ядер для каждого запроса (Choudhary et al., 2020; Dean et al., 2018). Мобильные и периферийные развертывания должны уложиться в жесткие физические границы памяти и одновременно выполнять детерминированные сроки реального времени. Камерный конвейер, обрабатывающий 30 кадров в секунду, имеет бюджет задержки 33 мс на кадр; превышение этого бюджета приводит к пропуску кадров и нарушает гарантии реального времени.
TinyML делает сжатие абсолютным требованием развертывания. Микроконтроллер с несколькими сотнями килобайт SRAM не может запустить модель в 100 МБ, какой бы ни была ее предсказательная точность (Banbury et al., 2020). Без виртуальной памяти и аппаратной подкачки веса модели и пиковые буферы активаций должны целиком помещаться в физической SRAM; если рабочий набор превышает физическую емкость, программа немедленно падает с ошибкой нехватки памяти.
Физические пределы памяти ограничивали глубокое обучение с самого его начала. AlexNet, модель, победившая в конкурсе ImageNet 2012 года, столкнулась со стеной памяти при обучении, и ее архитектура фиксирует возникшее решение о разделении на два GPU.
Разделение AlexNet на два GPU (2012)
Контекст: в 2012 году Алекс Крижевский, Илья Суцкевер и Джеффри Хинтон хотели обучить модель зрения с 60 миллионами параметров на ImageNet (Krizhevsky et al., 2012).
Механизм: GPU NVIDIA GTX 580 предоставлял всего 3 ГБ памяти GDDR5 — этого недостаточно, чтобы хранить 240 МБ весов модели вместе с активациями FP32 () и состояниями оптимизатора () для обучения на одном GPU.
Последствия: модель вообще нельзя было обучить на одном устройстве, поэтому потолок памяти проник в саму архитектуру сети, а не остался проблемой закупки оборудования.
Решение: они разделили модель на два GPU GTX 580 по 3 ГБ и ограничили связи между GPU так, чтобы рабочий набор помещался в границы памяти каждого устройства (). Получившаяся архитектура из двух «башен» достигла победной ошибки top-5 в 15,3 процента, с отрывом в 10,8 процентного пункта.
Системный урок: физические границы памяти ограничивали глубокое обучение с самого его начала. Стратегии развертывания (прореживание, квантование) решают те же физические ограничения, которые в AlexNet вынудили разбить модель на части.
Те же ограничения памяти, которые определили архитектуру обучения AlexNet, определяют, возможно ли развернуть модель на обычном мобильном оборудовании.
Иллюстративный выигрыш MobileNet
Сценарий: развертывание модели сегментации видео для размытия фона в реальном времени на среднебюджетных смартфонах Android при 30 кадрах в секунду.
Диагностика: несжатая модель MobileNetV3 в FP32 выдает лишь 8 кадров в секунду, что превышает задержку устройства и тепловые лимиты питания. Квантование весов в INT8 позволяет выполнять целочисленные матричные операции на NPU/DSP мобильного устройства.
Системный урок: здесь INT8 уменьшает сырой объем параметров в 4 раза, а поддерживаемый целочисленный путь поднимает вывод с 8 до 35 кадров в секунду. Скорость и энергопотребление все равно нужно измерять на самом устройстве.
Баланс компромиссов
«Разрыв развертывания» количественно описывает этот разрыв развертывания для маячных моделей из «Состав маячных моделей: биографии моделей». Даже MobileNetV2 в INT8 превышает память TinyML-устройства примерно в 6,7 раза, что показывает, как физические границы памяти ограничивают жизнеспособность модели:
| Модель | Память весов при выполнении | Хранение весов в артефакте | Облако (~107 ГБ) | Мобильное (8 ГБ) | TinyML (~512 КБ) |
|---|---|---|---|---|---|
| DLRM | 100 ГБ | 100 ГБ | да | нет (11,6×) | нет (190 734,9×) |
| GPT-2 XL | 6 ГБ | 6 ГБ | да | да | нет (11 444,1×) |
| ResNet-50 | 102,4 МБ | 102,4 МБ | да | да | нет (195,3×) |
| MobileNetV2 | 14 МБ | 14 МБ | да | да | нет (26,7×) |
| MobileNetV2 (INT8) | 3,5 МБ | 3,5 МБ | да | да | нет (6,7×) |
| DS-CNN (KWS, INT8) | 200 КБ | 200 КБ | да | да | да |
Разрыв развертывания: требования к весам моделей в сравнении с типичной емкостью устройств. DLRM иллюстрирует нагрузку рекомендательных моделей на эмбеддинги (Naumov et al., 2019); DS-CNN иллюстрирует случай распознавания ключевых слов в TinyML (Zhang et al., 2017). Даже MobileNetV2, квантованная до INT8, превышает бюджет TinyML в ~512 КБ в 6,7 раза, тогда как специально построенный распознаватель ключевых слов DS-CNN после квантования до INT8 помещается. В этом подсчете, учитывающем только веса, память весов при выполнении равна объему весов в артефакте; накладные расходы на активации, рабочие буферы, упаковку и метаданные не учтены. Числа в скобках показывают, во сколько раз модель превышает память устройства.
Этот разрыв делает неизбежным компромисс между точностью и эффективностью. Увеличение емкости модели в целом повышает предсказательную точность, но требует больших объемов весов, расширенного рабочего набора активаций и более высокой пропускной способности памяти при выводе. На оборудовании со строгими ограничениями по памяти или энергии эти требования заставляют выбирать точку на границе Парето.
Кривая компромисса между сжатием и точностью
Граница не однородна: техники, сохраняющие структуру, находятся близко к верхней части и обменивают малую потерю точности или ее отсутствие на реальное ускорение, тогда как агрессивная структурная хирургия находится внизу, где каждый дополнительный выигрыш берет все более крутую плату в точности.
Инженерное решение состоит в том, где остановиться. Сжатие должно прекращаться у «колена» кривой — точки, в которой предельная потеря точности впервые превышает предельный выигрыш эффективности. За этим коленом модель деградирует быстрее, чем ускоряется.
«Компромиссы оптимизации» суммирует основные методы сжатия по этим областям и сопоставляет их системный выигрыш с ценой для машинного обучения.
| Техника | Системный выигрыш | Цена для ML | Типичный эффект | Зона |
|---|---|---|---|---|
| Слияние операторов | снижение задержки на 10–30 % | Нет | Без потери точности | 1 |
| FP32 → BF16 | в 2 раза меньше памяти, ~2× пропускная способность | Минимальная | падение точности менее 0,1 % | 1 |
| FP16 → INT8 | в 2 раза меньше памяти, пропускная способность выше в 2–4 раза | Ошибка квантования | падение точности 0,5–1 % | 2 |
| Прореживание 50 % | модель примерно в 2 раза меньше | Потеря емкости | падение точности 0,5–1 % | 2 |
| Дистилляция знаний | ученик в 2–10 раз меньше | Потолок возможностей | падение точности 1–3 % | 2 |
| 4-битное квантование | снижение памяти в 4 раза | Существенная ошибка | падение точности 2–5 % | 2–3 |
| Прореживание 90 % | модель примерно в 10 раз меньше | Серьезная потеря емкости | падение точности 5–15 % | 3 |
| ↑ Размер батча (8×) | выше пропускная способность, лучше загрузка GPU | Разрыв в обобщении | Требует масштабирования скорости обучения | — |
Компромиссы оптимизации: зона 1 — «бесплатный обед», зона 2 — эффективный компромисс, зона 3 — опасная зона. Размер батча влияет на динамику обучения, а не на качество модели напрямую. Это представительные инженерные диапазоны, синтезированные по опубликованным работам о средах вывода, квантовании, прореживании, низкобитном квантовании LLM и дистилляции (NVIDIA, 2024; Jacob et al., 2018; Han et al., 2015; Lin et al., 2024; Hinton et al., 2015); фактические результаты зависят от архитектуры, задачи, калибровочных данных и качества реализации.
Методы, которые сохраняют структуру модели, например слияние ядер и умеренное снижение точности (FP32 в BF16), дают выигрыш по задержке и памяти при пренебрежимо малой потере точности. Напротив, методы, которые меняют структуру сети, например прореживание и дистилляция, дают более крупное снижение объема памяти и арифметики, но рискуют существенно ухудшить качество без тщательного переобучения. Оптимизация начинается с определения связывающего аппаратного ограничения: памяти на мобильных устройствах, задержки кадра в интерактивных конвейерах или энергии на вывод в датчиках на батарейках. Стратегии сжатия затем целенаправленно бьют по этому узкому месту: структурные методы уменьшают число параметров и операций, квантование сокращает трафик памяти и повышает интенсивность арифметики, а слияние на уровне компилятора устраняет промежуточные обращения к памяти.
Контрольная точка: граница эффективности
Оптимизация — это обмен одного ресурса на другой.
Компромиссы
- Точность против стоимости: сравните оптимизацию, сохраняющую структуру, и оптимизацию, которая ее меняет, назвав, какой ресурс каждая экономит и какой риск для качества вводит.
- «Бесплатный обед»: можете ли вы указать на кривой компромисса между сжатием и точностью место, где метод покупает эффективность без потери точности, и объяснить, почему эта область существует?
- Колено: объясните, почему агрессивную оптимизацию нужно останавливать там, где предельная потеря точности превышает предельный выигрыш эффективности.
Структурная оптимизация
Современные нейронные сети часто содержат больше параметров, чем нужно для развертывания.2 Неиспользуемая емкость все равно расходует память, вычисления и энергию. Структурная оптимизация работает с первым измерением рамки оптимизации, эффективным представлением модели, меняя то, что вычисляет модель. Хотя дополнительная емкость может помогать оптимизации во время обучения, параметры, которые не улучшают развернутую модель, все равно создают стоимость развертывания.
Каждый метод этой главы следует одной инженерной эвристике: сохранению сложности. Сжатие редко полностью уничтожает стоимость. Оно переносит ее между осями Данных, Алгоритма и Машины. Прореживание может уменьшить число параметров, но требует от среды выполнения использовать разреженную структуру; дистилляция может снизить стоимость вывода, добавив фазу обучения учителя и ученика; квантование может сократить перемещение данных, но расходует числовую точность. Задача инженера — перенести сложность туда, где стоимость минимальна при заданных ограничениях развертывания.
Системная задача состоит в том, чтобы удалить избыточную емкость, не жертвуя представлением, критичным для задачи. Работа на этой границе Парето3 требует решить, где должна находиться сложность: в поиске на этапе обучения, в разреженной индексации во время выполнения или в емкости модели-ученика.
Эти методы решают задачу через взаимодополняющие механизмы. Прореживание удаляет избыточные параметры из существующей сети; дистилляция знаний переносит выученные представления в независимо спроектированную компактную топологию; поиск нейронной архитектуры автоматизирует процесс структурного открытия с нуля (Hutter et al., 2019). В производственных конвейерах эти методы часто комбинируются: архитектура, найденная NAS и контролируемая дистиллированным учителем, прореживается перед финальным квантованием. Прореживание рассматривается первым в этом анализе, потому что оно наиболее прямо выявляет физическое узкое место: снижение числа параметров ускоряет выполнение, только если получающаяся структура отображается на поддерживаемые аппаратные ядра.
Прореживание
Рассмотрим MobileNet, обученную для классификации изображений в носимом медицинском мониторе. Обученная модель занимает 14 МБ, но целевой микроконтроллер предлагает только 2 МБ флеш-памяти. Переобучение меньшей архитектуры с нуля потребовало бы недель сбора и проверки данных — времени, которого не позволяет график продукта. Допустим, профилирование показывает, что около 85,7 процента весов модели близки к нулю и мало вносят вклад на валидационной выборке. Удаление этих весов и дообучение оставшихся в течение нескольких эпох дает модель, которая помещается в 2 МБ с приемлемой потерей точности. Эти числа служат опорой для инженерного компромисса, а не отчетом о каком-либо универсальном бенчмарке MobileNet.
Прореживание4 напрямую решает задачи эффективности памяти, устраняя параметры или структуры, которые мало вносят вклад в целевую функцию развертывания. Многие обученные сети содержат удаляемую емкость, но безопасная доля зависит от архитектуры, задачи, шаблона прореживания и процедуры восстановления. Центральные вопросы таковы: что прореживать (отдельные веса или целые структуры), как оценить, чем можно пожертвовать (по величине, градиентам или активациям), и когда прореживать (после обучения, во время обучения или даже при инициализации). Раздел «Механика структурированной разреженности N:M» главы «Аппаратное ускорение» разбирает микроархитектурное выполнение разреженных операндов, однако фундаментальное системное правило инвариантно: нулевые веса экономят физические ресурсы, только если базовое оборудование и путь выполнения в среде выполнения могут пропускать их загрузку или вычисление.
Прореживание
Прореживание — это метод сжатия модели, который разреживает пространство параметров, удаляя веса, вносящие минимум информации в ландшафт функции потерь.
- Значение: оно может превращать плотные матрицы в разреженные структуры, уменьшая объем памяти и общий объем данных , если разреженное представление, метаданные и процедура восстановления сохраняют приемлемое качество.
- Отличие: в отличие от квантования, которое снижает точность каждого веса, прореживание уменьшает число весов, выявляя и устраняя избыточность.
- Типичная ошибка: распространено заблуждение, что прореживание «автоматически» ускоряет выполнение. На деле без специальной поддержки разреженного выполнения получающиеся разреженные матрицы могут работать медленнее плотных из-за нерегулярного шаблона доступа к памяти; более высокий сам по себе не делает нерегулярную разреженную раскладку эффективной.
Формальная задача прореживания ищет разреженный тензор параметров , который минимизирует эмпирическую функцию потерь при бюджете параметров : где — L0-норма (число ненулевых параметров). Решение этой оптимизации с ограничением на мощность множества комбинаторно, поэтому на практике используются эвристики5, например прореживание по величине. «Прореживание по величине» демонстрирует этот подход: он удаляет веса с малыми абсолютными значениями и превращает плотную матрицу весов в разреженное представление, показанное на рисунке «Преобразование разреженной матрицы».
Прореживание по величине: удаляет веса ниже порога, создавая разреженные матрицы, и уменьшает число ненулевых параметров с 9 до 4 .
import torch
# Исходная плотная матрица весов
weights = torch.tensor(
[[0.8, 0.1, -0.7], [0.05, -0.9, 0.03], [-0.6, 0.02, 0.4]]
)
# Простое прореживание по величине: оставить только 4 наибольших веса
threshold = 0.5
mask = torch.abs(weights) >= threshold
pruned_weights = weights * mask
print("Исходная:", weights)
print("После прореживания (4 ненулевых):", pruned_weights)
Преобразование разреженной матрицы: прореживание по величине заменяет веса ниже численного порога точными нулями (белые клетки), сохраняя значимые связи с большими модулями (цветные клетки). Получающаяся разреженность уменьшает число параметров, но для реального аппаратного ускорения нужно перевести эти неструктурированные нулевые элементы в разреженные форматы хранения или специализированные ядра выполнения.
Получающаяся разреженная матрица сохраняет только значения с большим модулем (цветные клетки), а веса, близкие к нулю, становятся точными нулями. В моделях, пригодных для прореживания, после удаления весов с малым модулем значительная часть представительной емкости остается нетронутой, что делает пороговое отсечение по величине эффективной базовой эвристикой.
Чтобы сделать прореживание вычислительно выполнимым при градиентном обучении, на практике комбинаторное ограничение часто ослабляют непрерывными штрафами, например -регуляризацией , где задает масштаб штрафа за разреженность, применяемого к тензору весов . Штраф за величину весов приближает несущественные параметры к нулю и облегчает последующее пороговое отсечение. Обычно это сочетают с итеративным прореживанием: параметры удаляют последовательными порциями, чередуя их с циклами дообучения для восстановления потерянной точности (Gale et al., 2019; Blalock et al., 2020).
Целевые структуры
Выбор того, что прореживать, зависит от аппаратных ограничений целевой платформы и от того, какой ресурс является связывающим узким местом. Когда основной ограничитель — емкость памяти, прореживание нейронов может дать прямое облегчение в моделях, где полносвязные слои доминируют в хранении параметров: удаление целых нейронов вместе с их весами и смещениями уменьшает ширину слоя и число параметров. Профилирование должно сначала установить, что именно эти слои, а не эмбеддинги, активации или другой компонент, действительно являются узким местом.
Когда узкое место — задержка сверточного вывода на массовых ускорителях, сильным кандидатом становится прореживание каналов (также называемое прореживанием фильтров). Удаление целых каналов или фильтров уменьшает глубину карты признаков и число операций умножения с накоплением в последующих слоях. Получающаяся подсеть остается плотной и регулярной, поэтому ее можно отобразить на обычные ядра GPU и тензорных процессоров (TPU) без неструктурированного разреженного формата. Реальная задержка все равно зависит от получившихся размеров, ядер и трафика памяти.
Когда в модели есть удаляемые стадии, прореживание слоев убирает из сети целые слои. Каждое удаление исключает все вычисления этой стадии, но также уменьшает глубину представления и может изменить формы тензоров, остаточные пути или интерфейсы с последующими слоями. Оставшиеся слои должны принять на себя утраченную функцию, обычно через дообучение или переобучение. Номинальная экономия операций поэтому не гарантирует пропорциональной задержки: перезапись графа, формы ядер и трафик памяти по-прежнему определяют выполнение. Прореживание слоев требует тщательной проверки на задаче и сквозного профилирования. Сравнение бок о бок на рисунке «Прореживание каналов и слоев» показывает, почему прореживание каналов и прореживание слоев имеют разную стоимость реализации.
Прореживание каналов и слоев: структурное прореживание работает на разной архитектурной гранулярности. Прореживание каналов (слева) удаляет срезы карт признаков внутри сверточных слоев, сохраняя общую топологию сети и плотное выполнение, тогда как прореживание слоев (справа) убирает целые вычислительные стадии, требуя перестройки графа и рискуя большей потерей емкости ради большей экономии на операцию.
Структурная механика на рисунке «Прореживание каналов и слоев» объясняет, почему эти гранулярности создают разные аппаратные компромиссы. Прореживание каналов сжимает внутренние размерности плотных операций обобщенного матричного умножения (GEMM): удаление выходных каналов слоя уменьшает размерность входных каналов слоя . Тензоры остаются плотными и не требуют разреженных обращений по указателям, но обрезанные размерности должны оставаться выровненными по границам аппаратных тайлов (обычно кратными 8, 16 или 32 элементам для блоков SIMD «одна инструкция — много данных» и тензорных ядер), чтобы не допустить несогласованных обращений к памяти и простаивающих вычислительных линий. Прореживание слоев обходит выравнивание размерностей, полностью удаляя вычислительные стадии. Это устраняет задержку запуска ядер, трафик промежуточной памяти активаций и синхронизации по остаткам, но требует перестройки остаточных пропускающих связей и мирится с более крутым падением емкости представления.
Неструктурированное прореживание
Неструктурированное прореживание удаляет отдельные веса, сохраняя общую архитектуру сети. Некоторые связи становятся избыточными во время обучения и мало вносят вклад в итоговый выход. Удаление этих слабых связей уменьшает число ненулевых элементов и может сохранить большую часть качества решения после восстановления.
Формализуем этот процесс: пусть — матрица весов в данном слое. Прореживание удаляет подмножество весов, применяя бинарную маску , и дает прореженную матрицу весов: где обозначает поэлементное произведение Адамара. Маска строится по критерию прореживания, обычно по модулю веса. Распространенный подход — прореживание по величине, которое удаляет долю весов с наименьшими модулями, задавая порог так, что: где выбирается так, чтобы остались только наибольшие весов. Этот метод предполагает, что веса с большим модулем вносят больший вклад в функцию сети, поэтому их предпочтительно сохранять.
Неструктурированное прореживание уменьшает число ненулевых параметров, но чтобы превратить это уменьшение в реальную экономию места хранения, нужно индексированное разреженное кодирование, например разреженный строковый формат (CSR) или координатный список (COO). Поскольку эти форматы должны хранить позиционные метаданные, например индексы столбцов и указатели строк, рядом с ненулевыми значениями, накладные расходы на метаданные съедают экономию при низкой разреженности. Например, хранение 16-битного веса с 16-битным индексом столбца удваивает объем байтов на элемент, и чтобы просто выйти на ноль по размеру артефакта (), нужна разреженность свыше 50 процентов. Хранение плотного тензора с обнуленными элементами не экономит память вовсе.
Неструктурированная разреженность также не переходит напрямую в ускорение вывода на современном оборудовании. Массовые ускорители достигают пиковой пропускной способности () через плотные систолические массивы и широкие блоки SIMD, которые требуют синхронного выполнения и объединенных обращений к памяти по соседним адресам. Произвольное распределение нулей заставляет ядра умножения разреженной матрицы на плотную (SpMM) выполнять непрямую адресацию и обход указателей. Эта нерегулярность памяти вызывает расхождение варпов (warp divergence), несогласованные глобальные обращения к памяти и сильное недоиспользование строк кэша. Если сеть не достигает экстремальной разреженности (часто свыше 80–90 процентов) и не выполняется на специализированных разреженных ядрах, неструктурированное прореживание дает модель, которая занимает меньше места на диске, но работает медленнее во время выполнения.
Структурированное прореживание
Если неструктурированное прореживание удаляет отдельные веса, то структурированное прореживание (Li et al., 2017) устраняет целые вычислительные единицы: нейроны, фильтры, каналы или слои. Такой подход создает меньшие плотные тензоры, которые выполняются на стандартных ядрах ускорителя. Поэтому его существенно проще превратить в экономию задержки, чем произвольную неструктурированную разреженность, хотя формы тензоров, выравнивание памяти и качество решения по-прежнему требуют тщательного профилирования.
Нейроны, фильтры и слои могут заметно различаться по вкладу в предсказания модели. Некоторые единицы несут избыточную или малозначимую информацию, но удаление безопасно, только когда валидация показывает, что оставшаяся структура сохраняет нужное поведение. Выявление таких структур остается основной задачей.
Аппаратно-ориентированные стратегии прореживания, например структурированная разреженность N:M,6 задают определенные шаблоны (например, требуя, чтобы ровно 2 из каждых 4 весов были нулевыми), чтобы совпасть со специализированными возможностями ускорителя. В этой главе в качестве примера сжатия используется шаблон 2:4; раздел «Механика структурированной разреженности N:M» главы «Аппаратное ускорение» позже показывает, как разреженные тензорные ядра используют его.
Методы прореживания меняют параметрическую экономию на регулярность аппаратного выполнения. Сравните три панели на рисунке «Неструктурированное и структурированное прореживание»: слева — нерегулярное удаление весов, в центре и справа — структурное удаление нейронов и каналов.
Неструктурированное и структурированное прореживание: компромисс между регулярностью и сжатием для разных гранулярностей прореживания. Неструктурированное прореживание (слева) удаляет произвольные отдельные связи и требует разреженного представления и соответствующего ядра, чтобы изменить выполнение. Структурное прореживание нейронов (в центре) или сверточных каналов (справа) может давать меньшие плотные тензоры, совместимые со стандартными ядрами, хотя реальная задержка зависит от получающихся форм и среды выполнения. Источник: (Qi et al., 2021).
Структурированное прореживание устраняет штрафы за разреженные метаданные и расхождение памяти, свойственные неструктурированной разреженности, сжимая базовые матрицы в меньшие непрерывные плотные тензоры («Неструктурированное и структурированное прореживание»). В полносвязных слоях (центр) прореживание нейронов удаляет соответствующие строки и столбцы в соседних матрицах весов. В сверточных слоях (справа) прореживание каналов удаляет целые трехмерные срезы фильтров. Поскольку получившаяся подсеть состоит только из плотных операций, она выполняется непосредственно на стандартных базовых подпрограммах линейной алгебры (BLAS) и сверточных движках, без специализированных разреженных библиотек. Главное системное требование — сохранять выравнивание размерностей: современные ядра ускорителей достигают пиковой пропускной способности памяти, когда размерности тензоров остаются кратными строкам кэша аппаратуры и размерам тайлов варпов (например, 32, 64 или 128 элементам).
Распространенный подход к структурированному прореживанию ранжирует целые нейроны или фильтры по величине связанных с ними весов. Малая групповая норма — это дешевый заместитель низкой важности, а не доказательство того, что единица избыточна. Оценка может использовать - или -норму по весам, связанным с каждой единицей; группы ниже выбранного порога становятся кандидатами на прореживание. Послойное ранжирование важно, потому что сырые масштабы могут различаться между слоями. Метод не требует прохода по репрезентативным данным, но вычисление оценок, выбор порога, материализация меньшего графа и проверка или дообучение результата по-прежнему требуют инженерных и вычислительных затрат.
Другая стратегия — прореживание на основе активаций, которое оценивает активации нейронов или фильтров на наборе данных. Единицы, которые остаются слабыми на репрезентативных входах, становятся кандидатами на удаление при условии проверки абляцией или дообучением. Этот метод учитывает поведение, зависящее от входа, а не только статические веса. Его ранжирование все же может пропустить редкие, но важные входы, зависеть от масштабирования активаций или измениться после удаления верхних по потоку единиц. Прореживание на основе активаций поэтому требует репрезентативных данных профилирования и проверки после удаления выбранных структур.
Прореживание на основе градиентов использует производные функции потерь, чтобы оценить, как удаление нейрона или фильтра изменит целевую функцию. Малая оценка первого порядка указывает на кандидата при текущем контрольном состоянии и на выбранных данных; она не доказывает постоянную ненужность и не учитывает все взаимодействия между единицами. Критерии на основе градиентов могут объединять значение единицы с ее градиентом, чтобы ранжировать ожидаемое локальное изменение потерь. Математически этот критерий аппроксимирует изменение функции потерь при обнулении параметра через разложение Тейлора первого порядка: . Веса, которые близки к нулю или имеют пренебрежимо малые градиенты, мало влияют на целевую функцию, поэтому они первые кандидаты на удаление. В отличие от критериев только по величине весов, они требуют обратного прохода и обычно встраиваются в обучение или дообучение. Результат все равно нужно проверять на уровне задачи, потому что оценка — локальное приближение.
Эти критерии обменивают стоимость измерения на точность отражения поведения модели. Оценки по величине дешевы и дают полезную базовую линию, но не учитывают распределение входов. Оценки по активациям учитывают репрезентативные входы и выявляют единицы, которые «молчат» на этой нагрузке, тогда как оценки на основе градиентов учитывают также локальную поверхность функции потерь ценой дополнительных затрат на обучение. Ни один из них не доминирует для всех моделей, и ни один не доказывает, что удаление безвредно. Корректное сравнение прореживает до одной и той же структурной цели, применяет один и тот же бюджет восстановления и измеряет качество решения после удаления. Затем оно профилирует экспортированный граф, потому что лучшая оценка важности может сохранить качество, но дать формы, которые целевая среда выполнения не исполняет эффективно. Выбор поэтому зависит от доступных данных и вычислений, от удаляемой структуры и от запаса качества, который допускает развертывание.
Динамическое прореживание
Традиционные методы прореживания, неструктурированные или структурированные, дают статическую маску прореживания или подсеть, которая остается фиксированной во время развертывания, даже если маска постепенно выучивалась во время обучения. Динамическое прореживание, напротив, адаптирует, какие вычисления активны, в зависимости от входных данных или динамики обучения, поэтому выполняемая подсеть может меняться со временем.
Динамическое прореживание может использовать техники разреженности во время выполнения, когда модель выбирает параметры или структуры по характеристикам входа. Например, условное по активациям прореживание отключает нейроны или каналы для отдельных входов (Hu et al., 2023). Получающаяся разреженность, зависящая от входа, сокращает выполняемую работу, только если контроллер и среда выполнения могут пропускать эту работу дешевле, чем плотный путь ее выполнил бы.
Например, рассмотрим сверточную сеть, которая обрабатывает изображения разной сложности. При выводе на простом изображении с преимущественно однородными областями некоторые сверточные фильтры могут давать пренебрежимо малые активации. Динамическая политика может выявить таких кандидатов и временно исключить их из вычислений. Это исключение уменьшает номинальную работу, но контроллер, нерегулярное выполнение и любое изменение качества остаются частью результата. Метод становится полезным в чувствительном к задержке приложении, только если разнообразие входов достаточно велико, чтобы окупить эти издержки. Как описано в главе «Бенчмаркинг», оценка таких выигрышей в эффективности требует измерять и задержку, и точность на одной и той же целевой нагрузке по всему распределению входов.
Другой класс динамического прореживания работает во время обучения, постепенно вводя и настраивая разреженность на протяжении всего процесса оптимизации. Постепенное прореживание по величине начинает с плотной сети и постепенно увеличивает долю удаленных параметров, одновременно дообучая оставшиеся веса. Варианты динамического разреженного обучения дополнительно позволяют сети восстанавливаться после потери емкости, вызванной прореживанием, отращивая связи, которые позже в обучении окажутся важными.
Динамическое прореживание может выделять разные объемы работы разным входам и повторно активировать емкость, которую статическая маска развертывания удалила бы навсегда. Эти свойства создают возможность, а не гарантированный выигрыш в эффективности или точности. Контроллер находится на критическом пути, маршрутизация, зависящая от входа, фрагментирует пакетное выполнение по полосам SIMD, а расширенное пространство поведения требует больше проверок. Обучению также может понадобиться штраф за маршрутизацию или регуляризация, чтобы политика действительно использовала свои более дешевые пути. Производственные развертывания должны отслеживать частоту маршрутов, хвосты задержек и качество по каждому маршруту; эти практики мониторинга и отката подробно разбираются в главе «MLOps». Динамическое прореживание поэтому является кандидатом, когда разнообразие сложности входов достаточно, чтобы окупить накладные расходы контроллера и пакетирования, а не заменой статического прореживания по умолчанию.
Компромиссы прореживания
Три подхода к прореживанию занимают разные позиции на компромиссе между регулярностью и гранулярностью. Неструктурированное прореживание может удалять отдельные веса и поэтому выражает мелкозернистую разреженность, но ускорителям для пропуска этих нулей нужны соответствующие разреженные форматы и ядра. Структурированное прореживание удаляет каналы, фильтры или слои и может давать меньшие плотные операции, которые обычное оборудование уже поддерживает. Динамическое прореживание делает выполняемую структуру зависимой от входа, добавляя управляющие и пакетные накладные расходы в обмен на условное распределение вычислений. «Стратегии прореживания» суммирует эти различия для развертывания.
Эти категории описывают выполняемое развертывание, а не взаимоисключающие алгоритмы обучения. Структурная подсеть может выучиваться по динамическому расписанию, а затем фиксироваться для обслуживания; классифицируйте артефакт по тому, что его среда выполнения реально выполняет.
| Аспект | Неструктурированное прореживание | Структурированное прореживание | Динамическое прореживание |
|---|---|---|---|
| Что удаляется? | Отдельные веса в модели | Целые нейроны, каналы, фильтры или слои | Меняет прореживание в зависимости от условий выполнения |
| Структура модели | Разреженные матрицы весов; исходная архитектура сохраняется | Архитектура модели меняется; прореженные слои полностью удаляются | Структура адаптируется динамически |
| Влияние на память | Уменьшает число ненулевых элементов; объем хранения падает только при подходящем разреженном представлении | Уменьшает объем модели за счет удаления целых компонентов | Зависит от прореживания в реальном времени |
| Влияние на вычисления | Плотная работа остается, если поддерживаемый разреженный путь не пропускает нули | Уменьшает номинальное число FLOP; задержка зависит от получающихся форм и ядер | Зависит от политики маршрутизации и накладных расходов контроллера |
| Совместимость с аппаратурой | Требует разреженных форматов и соответствующей поддержки выполнения | Дает плотные подсети, но неудобные формы все равно могут недоиспользовать аппаратуру | Требует адаптивных движков вывода |
| Нужно ли дообучение? | Часто используется для восстановления точности после прореживания | Часто используется после структурного изменения | Зависит от того, как обучаются политика маршрутизации и подсети |
| Сценарии использования | Экономичное по памяти сжатие моделей для облачного развертывания | Оптимизация вывода в реальном времени, мобильный и периферийный ИИ, эффективное обучение | Адаптивные приложения ИИ, системы реального времени |
Стратегии прореживания: неструктурированное прореживание удаляет отдельные веса, но для выигрыша при развертывании нужно разреженное хранение и соответствующие ядра; структурированное прореживание удаляет целые компоненты, которые ближе отображаются на плотное аппаратное обеспечение, а динамическое прореживание добавляет адаптацию во время выполнения и накладные расходы.
Стратегии прореживания
Расписание выполнения определяет, поглотит ли сеть потерю емкости или деградирует необратимо. Два основных расписания управляют удалением весов: итеративное прореживание и однократное прореживание.
Итеративное прореживание
Итеративное прореживание смягчает катастрофические падения точности, чередуя структурное удаление параметров с циклами переобучения («Производительность итеративного прореживания»).
Производительность итеративного прореживания: три строки показывают последовательные циклы «прореживание — дообучение», каждый из которых убирает два из исходных двадцати двух каналов. Точность падает с 0,995 до 0,971 после первого прореживания, восстанавливается до 0,992 после дообучения и стабилизируется на 0,991 после всех трех циклов: потеря 0,4 процента при сокращении числа каналов на 27 процентов.
Трехстрочный процесс на рисунке «Производительность итеративного прореживания» демонстрирует это постепенное приспособление на сверточной сети, прореженной на шесть каналов. Вместо удаления всех шести каналов за один проход конвейер убирает по два канала за цикл в течение трех итераций, дообучая оставшиеся параметры после каждого среза. Первый срез снижает точность с 0,995 до 0,971, но короткое дообучение возвращает ее к 0,992. Два последующих цикла «прореживание — настройка» дают финальную модель с точностью 0,991: пренебрежимо малое ухудшение на 0,4 процента при сокращении числа каналов на 27 процентов. Растягивание структурной операции на несколько интервалов переобучения позволяет оставшимся весам подстраивать свои представления вдоль ландшафта функции потерь.
Однократное прореживание
Однократное прореживание удаляет несколько архитектурных компонентов за один шаг, после чего следует обширная фаза дообучения для восстановления точности модели. Такой агрессивный подход быстро сжимает модель, но несет больший риск деградации точности, поскольку сети приходится одновременно адаптироваться к значительным структурным изменениям.
Применение однократного прореживания к той же сети иллюстрирует опасность агрессивного структурного усечения. Вместо поэтапного удаления однократное прореживание срезает все шесть каналов одновременно («Влияние однократного прореживания»). Удаление 27 процентов емкости сети за один шаг снижает точность с 0,995 до 0,914. Последующее дообучение восстанавливает только до 0,943 — постоянная деградация на 5 процентов относительно исходного уровня. Хотя итеративное и однократное прореживание дают одинаковую итоговую геометрию тензоров, внезапная потеря представительной емкости загоняет дообучение после однократного прореживания в худший локальный минимум.
Влияние однократного прореживания: все шесть каналов (27 процентов) удаляются одновременно, из-за чего точность падает с 0,995 до 0,914. Дообучение восстанавливает только до 0,943, то есть деградация на 5 процентов от исходной точности.
Выбор между стратегиями расписания определяют три эксплуатационных ограничения. Высокие целевые уровни разреженности требуют итеративных циклов, чтобы не допустить серьезной потери представительной емкости. И наоборот, жесткие вычислительные бюджеты во время оптимизации или агрессивные сроки развертывания делают предпочтительным однократное прореживание, принимая небольшую деградацию точности ради избежания нескольких дорогих переобучений. Наконец, целевая архитектура ускорителя определяет, оправдывает ли получающийся шаблон разреженности итеративные затраты.
Гипотеза лотерейного билета
Стандартные процедуры прореживания предполагают полностью обученную плотную модель, из которой затем удаляют веса. Однако связь между структурой сети и динамикой оптимизации глубже: прореживание может выявить изначально эффективные, хорошо обучаемые подсети, заложенные в исходной случайной параметризации.
Эта точка зрения ведет к гипотезе лотерейного билета7 (LTH), которая оспаривает стандартные процедуры прореживания, предполагая, что в больших нейронных сетях есть малые, удачно инициализированные подсети («выигрышные билеты»), способные при обучении в изоляции достичь точности, сравнимой с полной моделью. Вместо того чтобы рассматривать прореживание как шаг сжатия после обучения, LTH предполагает, что оно может служить механизмом открытия, позволяющим найти эти эффективные подсети на ранней стадии обучения (Rachwan et al., 2022).
Исходная процедура LTH находит эти подсети через итеративное прореживание по величине и откат («Цикл итераций лотерейного билета»). Сеть обучают до сходимости, удаляют веса с малой величиной, а оставшиеся параметры сбрасывают к исходным значениям , а не переинициализируют случайно. Повторение цикла может выделить разреженную подсеть, которая в описанных условиях обучается до точности, сравнимой с исходной сетью (Frankle and Carbin, 2019). Успех той же процедуры зависит от архитектуры, масштаба, оптимизатора и бюджета обучения.
Цикл итераций лотерейного билета: исходная процедура многократно обучает сеть, прореживает веса с малой величиной и возвращает оставшиеся веса в их начальное состояние . Цикл проверяет, может ли получившаяся разреженная подсеть сравняться с плотной базовой моделью при обучении в изоляции; результат эмпирический, а не гарантированный.
Гипотеза лотерейного билета предполагает, что компактные, обучаемые подсети могут существовать внутри переизбыточной инициализации. Это наблюдение мотивирует прямые исследования разреженного обучения, но стандартная процедура поиска не устраняет стоимость плотного обучения: сначала нужно оплатить один или несколько плотных или частично плотных прогонов, чтобы найти билет. Поэтому результат подчеркивает роль инициализации, но оставляет практический системный вопрос: можно ли выявить эту подсеть до того, как будет израсходована большая часть исходного бюджета обучения.
Итеративная процедура также разделяет два эффекта, которые однократное прореживание смешивает: какие веса выживают и сколько дообучения следует за каждым срезом. В одних условиях меньшие шаги прореживания дают сети больше возможностей восстановиться; в других дополнительные циклы не оправдывают своей стоимости. Поэтому сравнение для развертывания должно одновременно измерять итоговое качество, стоимость поиска или переобучения и реально полученную экономию во время выполнения.
На практике конвейер в стиле LTH нужно сравнивать с обучением меньшей плотной модели с нуля, однократным прореживанием с восстановлением и прямыми методами разреженного обучения. Учет должен включать каждый плотный или частично плотный поисковый прогон, каждый откат к контрольной точке, каждый цикл прореживания и каждую фазу восстановления, а не только итоговую подсеть. Выигрышный билет — это результат обучения; он становится системным выигрышем, только если суммарное время ускорителя, итоговый размер артефакта, целевая задержка и качество решения превосходят эти альтернативы.
Прореживание на практике
Хотя гипотеза лотерейного билета проясняет ландшафт оптимизации, практические системы обслуживания заботятся только об исполняемых артефактах. Прореживание на уровне фреймворка полезно, только если оно дает конкретную аппаратную экономию: меньший плотный тензор, структурированную разреженную матрицу, выровненную по аппаратуре, или индексированную разреженную раскладку вместе с соответствующими ядрами среды выполнения. Прореживание во время обучения часто начинается с применения маски: исходный тензор остается в памяти, а бинарная маска обнуляет выбранные веса во время прямого прохода. Этот механизм направляет поток градиентов во время восстановления, но сам по себе не дает ни снижения памяти, ни улучшения задержки. Измеримый выигрыш эффективности появляется только после того, как замаскированная структура экспортирована в физический артефакт, загруженный движком вывода.
Эта граница артефакта разделяет стратегии прореживания. Неструктурированное прореживание удаляет отдельные веса и требует разреженных ядер и подходящего формата хранения, чтобы превратить нули в скорость. Структурированное прореживание удаляет целые каналы, головы, нейроны или блоки, что может переформировать тензоры в меньшие плотные операции, которые обычные ускорители уже выполняют хорошо. Постепенное прореживание во время дообучения добавляет расписание обучения: разреженность растет со временем, чтобы оставшиеся веса могли восстанавливать точность по мере удаления емкости. Поэтому системный аудит конкретен: определите, что прореживается, определите формат среды выполнения и проверьте, есть ли на целевом оборудовании ядра, которые делают разреженность полезной.
Эти компромиссы становятся конкретными при рассмотрении реальных развертываний. Некоторые семейства моделей снижают стоимость развертывания за счет архитектуры, а не постфактум-прореживания: MobileNet использует раздельные по глубине свертки для мобильного и встроенного зрения (Howard et al., 2017), а EfficientNet применяет составное масштабирование, чтобы улучшить компромисс между точностью и эффективностью при ограничениях ресурсов (Tan and Le, 2019). Прореживание остается отдельным рычагом оптимизации. Трансформеры в стиле BERT8 прореживали, удаляя избыточные головы внимания или промежуточные размерности, тогда как отдельные методы дистилляции, такие как DistilBERT и TinyBERT, обучают меньшие плотные модели-ученики, которые сохраняют значительную часть качества BERT (Sanh et al., 2019; Jiao et al., 2020).
Прореживание имеет внутреннее ограничение: оно начинается с существующей архитектуры и отрезает от нее части. Прореженная модель наследует структуру исходной — те же типы слоев, те же шаблоны связности, только меньше параметров. Сама исходная архитектура может быть неэффективна для развертывания. Практику может понадобиться модель с совершенно другой структурой, например шестислойный трансформер вместо двенадцатислойного, который при этом сохраняет возможности исходной модели.
Когда ограничения развертывания требуют принципиально другой топологии, цель сжатия смещается от отрезания весов к обучению меньшей модели на выходах исходной. Дистилляция знаний решает эту задачу, рассматривая переизбыточную сеть как учителя, а не как артефакт развертывания.
Дистилляция знаний
Представим, что медицинская модель ответов на вопросы превышает бюджет памяти и задержки серверного узла больницы с одним GPU. Если сделать ее существующие веса разреженными, все равно может остаться неподдерживаемое представление или архитектура, слишком большая для целевого устройства, поэтому развертыванию может понадобиться принципиально меньшая модель. Дистилляция знаний решает этот класс задач, обучая компактного «ученика» воспроизводить поведение более крупного «учителя»; часто ученик сохраняет значительную часть качества решения учителя при меньшей стоимости вывода (Hinton et al., 2015; Sanh et al., 2019). Термин дистилляция заимствован из химии, где процесс выделяет концентрированную суть из большей смеси,9 но системный вывод здесь конкретен: предсказания учителя могут нести информацию, выходящую за пределы исходных обучающих меток.
Дистилляция знаний
Дистилляция знаний — это метод сжатия модели, который обучает меньшую модель-ученика (student) воспроизводить поведение большей предобученной модели-учителя (teacher).
- Значение: дистилляция переносит стоимость из повторяющегося вывода в дополнительную фазу обучения. Ученик может быть существенно меньше учителя и при этом сохранять полезное качество решения задачи; например, DistilBERT сообщает об уменьшении числа параметров на 40 процентов, ускорении вывода на 60 процентов и сохранении 97 процентов качества BERT в понимании языка (Sanh et al., 2019). Этот компромисс ценен, когда стоимость обучения ученика амортизируется на множестве развернутых запросов.
- Отличие: в отличие от прореживания, которое удаляет параметры из существующей архитектуры, и квантования, которое снижает числовую точность, дистилляция обучает новую плотную архитектуру. Ученик наследует поведение из распределения выходов учителя или его промежуточных представлений, а не полное число параметров или структуру слоев учителя.
- Типичная ошибка: распространено заблуждение, что дистилляция — сжатие без потерь. На деле ученик ограничен собственной емкостью, качеством учителя и соответствием между данными дистилляции и распределением при развертывании; ученик может точно воспроизвести и знания, и ошибки учителя.
Учитель передает семантические знания через относительные вероятности, назначенные всем классам. Тогда как one-hot эталонная метка приписывает правильному классу вероятность единицу, а всем остальным — ноль, распределение выходов учителя на рисунке «Мягкое целевое распределение» фиксирует структурные связи между классами: вход, классифицированный как кошка, имеет больше семантических общих признаков с собакой, чем с лисой.
Мягкое целевое распределение: относительные уровни уверенности учителя показывают, какие классы семантически похожи (например, кошка и собака), и дают гораздо более богатый сигнал надзора, чем бинарная метка «правильно».
Обучение ученика требует баланса между имитацией учителя и контролем по эталонным меткам задачи. Практически рабочий процесс требует четырех решений до начала обучения: выбрать учителя с нужным поведением, спроектировать ученика, плотная архитектура которого укладывается в бюджет памяти и вычислений целевого ускорителя, сгенерировать мягкие цели по обучающему корпусу и выбрать температуру и веса потерь, управляющие оптимизацией. «Рабочий процесс дистилляции знаний» иллюстрирует этот двухпутевой процесс обучения, в котором каждый входной образец проходит через обе сети, а обновления параметров ученика определяются комбинированной мягкой и жесткой функциями потерь.
Рабочий процесс дистилляции знаний: входной образец проходит через сеть-учителя и сеть-ученика. Учитель выдает мягкие метки через softmax с температурным масштабированием, а выход ученика сравнивается и с мягкими метками (потеря дистилляции), и с жесткими метками (потеря ученика).
При развертывании дистиллированного ученика недостаточно проверить только top-1 точность. Поскольку ученик может унаследовать систематические смещения и ошибки калибровки учителя так же легко, как его полезные представления, проверка должна измерять ошибку калибровки, поведение на подгруппах и фактическую задержку на целевой аппаратуре.
Математика дистилляции
Стандартная нормировка softmax («Нелинейные функции активации») превращает сырые логиты модели в вероятности. Введение параметра температуры10 смягчает получающееся распределение вероятностей по классам выхода:
Более высокая сглаживает распределение softmax и выявляет темное знание: скрытую информацию, содержащуюся в относительных вероятностях классов, например когда учитель, классифицируя изображение кошки, назначает собаке малую, но ненулевую вероятность, а грузовику — почти нулевую. Полная потеря дистилляции уравновешивает стандартную перекрестную энтропию и дивергенцию Кульбака — Лейблера (KL) относительно смягченного распределения учителя:11
Здесь и — векторы вероятностей, вычисленные при температуре , — one-hot эталонная метка, а уравновешивает цели по жесткой метке и мягкой цели. Множитель гарантирует, что величина градиента потери дистилляции остается соизмеримой с жесткой перекрестной энтропией: деление логитов на масштабирует производную вероятностей softmax множителем , а градиент дивергенции KL по логитам ученика в пределе высокой температуры масштабируется как . Умножение на не дает градиенту учителя исчезнуть относительно потери по жесткой метке при росте . Эта формулировка задает дистилляцию на основе ответов, которая согласует итоговые выходные распределения. Современные конвейеры также используют дистилляцию на основе признаков: промежуточные слои ученика обучаются напрямую воспроизводить скрытые представления или карты внимания учителя, используя среднеквадратичную ошибку или косинусное расстояние, чтобы направлять обновления градиента в глубоких магистралях.
Выигрыш в эффективности и компромиссы
Главное преимущество дистилляции перед неструктурированным прореживанием при развертывании состоит в том, что она дает меньшую плотную модель. Стандартные ускорители достигают пиковой арифметической интенсивности на непрерывных матричных умножениях; неструктурированные разреженные модели несут нерегулярный доступ к памяти и накладные расходы на декодирование индексов, которые часто сводят на нет теоретическое снижение FLOP, если разреженность не экстремальна. Компактный плотный ученик сохраняет объединенный доступ к памяти и выполняет оптимизированные поставщиком плотные ядра GEMM. Однако одно лишь снижение числа параметров не гарантирует меньшей задержки: операционная интенсивность, глубина слоев, длина последовательности внимания и пределы пропускной способности памяти по-прежнему определяют время выполнения. DistilBERT, например, добивается снижения задержки на 60 процентов главным образом за счет удаления половины трансформерных слоев BERT, что вдвое сокращает трафик памяти и последовательные зависимости между слоями, сохраняя при этом 97 процентов производительности BERT в понимании языка (Sanh et al., 2019).12 Компактные архитектуры зрения, такие как MobileNet, применяют тот же принцип при обучении под контролем учителя (Howard et al., 2017; Hinton et al., 2015).
Дистилляция естественно сочетается с прореживанием и квантованием в многоэтапных конвейерах сжатия. Например, практик может дистиллировать большого учителя в компактную архитектуру ученика, проредить избыточные головы внимания или каналы у этого ученика и квантовать оставшиеся веса из FP16 в INT8 для развертывания. Gordon et al. (2020) показывают, что BERT можно прореживать на этапе предобучения и переносить на последующие задачи, то есть структурное сжатие и дистилляция могут работать одновременно.
Эти выигрыши в эффективности вывода оплачиваются существенными накладными расходами на обучение. Дистилляция требует прогонять вывод через модель-учителя, чтобы генерировать мягкие цели, и распространять потери обратно через ученика на миллионах токенов. Для больших моделей эта вспомогательная фаза обучения потребляет значительные FLOP ускорителя и пропускную способность памяти, тогда как методы посттренировочного квантования завершаются за минуты на калибровочных подвыборках. Эффективность сжатия также ограничена емкостью ученика и точностью учителя: слишком маленький ученик не способен усвоить распределение учителя, а неточный или некалиброванный учитель передает ученику собственные систематические ошибки. Как разобрано в главе «Бенчмаркинг», выбор стратегии оптимизации требует одновременно оценивать точность на задаче, объем параметров, задержку обслуживания и полную стоимость обучения.
«Дистилляция и прореживание» сопоставляет ключевые компромиссы между дистилляцией знаний и прореживанием по сохранению точности, стоимости обучения, скорости вывода, совместимости с аппаратурой и сложности реализации. DistilBERT и MobileBERT демонстрируют переработку архитектуры вместе с дистилляцией; прореживание можно комбинировать с дистилляцией и в других конвейерах оптимизации, но эти модели стоит понимать прежде всего как примеры плотных моделей-учеников.
| Критерий | Дистилляция знаний | Прореживание |
|---|---|---|
| Сохранение точности | Зависит от модели и ученика; часто высокое при сильном учителе | Зависит от модели и разреженности |
| Стоимость обучения | Выше – нужен вывод учителя и обучение ученика | Часто ниже – нужны прореживание и обычно дообучение |
| Скорость вывода | Часто благоприятна для меньшего плотного ученика | Зависит – структурное прореживание эффективно, неструктурное требует особой поддержки |
| Совместимость с аппаратурой | Высокая – работает на стандартных ускорителях | Ограниченная – разреженным моделям может понадобиться специальное выполнение |
| Трудозатраты на реализацию | Выше: вывод учителя, цель ученика и обучение | Зависят: выбрать критерий, проредить, дообучить и экспортировать |
Дистилляция и прореживание: дистилляция тратит дополнительные усилия на обучение и проектирование ученика, чтобы получить меньшую плотную модель; прореживание изменяет существующую модель, но разреженные результаты требуют совместимого хранения и ядер, чтобы дать выигрыш при развертывании.
Прореживание изменяет существующую параметризацию, тогда как дистилляция переносит поведение в выбранную архитектуру ученика. Ни один из этих подходов напрямую не представляет плотный тензор весов через низкоранговые множители. Для иллюстративной матрицы факторизация ранга 128 хранит 6,25 процента от числа скалярных параметров плотной матрицы; точность такой аппроксимации зависит от спектра сингулярных значений матрицы. Методы структурированной аппроксимации используют именно эту форму математической избыточности.
Структурированные аппроксимации
Структурированная аппроксимация решает иную задачу развертывания, чем прореживание или дистилляция: когда тензор весов слоя обладает математической избыточностью, прямое представление этой избыточности требует меньше памяти и пропускной способности, чем выборка плотного тензора из DRAM. Вместо удаления отдельных весов или переноса поведения в другую архитектуру структурные методы раскладывают большие матрицы весов и тензоры на компактные множители меньшей размерности. Низкоранговая матричная факторизация и разложение тензоров дают взаимодополняющие алгебраические стратегии для такого сжатия.
Низкоранговая факторизация
Низкоранговая матричная факторизация (LRMF) аппроксимирует матрицы весов представлениями меньшего ранга. Для матрицы весов LRMF находит матрицы-множители и такие, что: где ранг аппроксимации . Такое разложение обычно вычисляется через сингулярное разложение (SVD)13: сохраняются только наибольших сингулярных значений, а их величины включаются в множители. Во время вывода вычисление выхода слоя как заменяет одно большое матрично-векторное произведение двумя последовательными умножениями меньшего размера. Главный системный вопрос в том, компенсирует ли сокращение объема параметров и арифметических операций накладные расходы на промежуточную активацию и запуск дополнительного ядра.
Компромисс между пропускной способностью и вычислениями
Низкоранговая факторизация может снижать и арифметическую, и пропускную способную нагрузку, если сохраняемый ранг мал, хотя она добавляет вторую операцию с множителем и возможные накладные расходы на запуск ядра. Хранение матрицы 4096 на 4096 требует 67,1 МБ (в FP32). Выборка этой матрицы для одного вывода создает значительный трафик памяти, особенно когда выполнение ограничено физической пропускной способностью памяти.
Факторизация матрицы при ранге 128 требует хранения двух меньших матриц (4096 на 128 и 128 на 4096), всего 4,2 МБ — сокращение сохраняемых значений в 16 раз. Если вывод использует два множителя напрямую, арифметика матрично-векторного умножения также падает с до при малом . Развертывание ускоряется, только если две операции с множителями и их промежуточный трафик обходятся дешевле исходного плотного ядра. Явное вычисление добавило бы работу и свело бы смысл на нет.
Этот компромисс между пропускной способностью и вычислениями иллюстрирует стену памяти на уровне оператора: при малых размерах батча выполнение упирается во время, нужное для выборки байтов весов из DRAM, а не в время умножения с накоплением. Раздел «Понимание стены памяти в ИИ» главы «Аппаратное ускорение» рассматривает эту стену памяти с точки зрения архитектуры аппаратуры. В промышленных движках обслуживания вычисление факторизованного представления позволяет избежать материализации полного ранга. «Низкоранговая факторизация» иллюстрирует это разложение: исходная матрица делится на компактные множители ранга , и .
Низкоранговая факторизация: матрица весов размера аппроксимируется двумя меньшими множителями, которые на схеме обозначены и и соответствуют и в окружающих обозначениях. Объем хранения падает с до параметров, а одна плотная операция превращается в две операции с множителями.
LRMF применяется непосредственно к полносвязным проекционным слоям и к развернутым тензорам весов сверточных слоев. Вычисление факторизованного слоя заменяет одно плотное матрично-векторное произведение двумя последовательными умножениями и снижает объем хранения параметров и арифметических операций с до . На современных ускорителях, однако, такое разделение создает конкретные системные компромиссы: промежуточный вектор активаций нужно хранить в SRAM на кристалле или пересылать через память, а запуск двух отдельных ядер несет задержку, если операции не слиты. Кроме того, если ранг аппроксимации мал или не выровнен по размерам аппаратных тайлов (например, систолических массивов ), вычислительные блоки работают заметно ниже пиковой пропускной способности. Выбор ранга поэтому балансирует сокращение памяти и пропускной способности с ошибкой аппроксимации, накладными расходами на запуск ядер и загрузкой аппаратных тайлов.
Разложение тензора
Разложение тензора распространяет низкоранговую аппроксимацию на многомерные массивы, например четырехмерные сверточные ядра () и веса многоголового внимания. Развертывание этих параметров в двумерные матрицы отбрасывает пространственные и межканальные корреляции, что приводит к плохой точности аппроксимации при данном бюджете ранга. Разложения тензоров сохраняют многомерную структуру, представляя тензор через мультилинейные произведения множителей меньшей размерности. «Разложение тензора» иллюстрирует каноническое полиадическое разложение трехмерного тензора и показывает, как внешние произведения векторов множителей восстанавливают отдельные элементы тензора по рангу .
Разложение тензора: трехмерный тензор аппроксимируется матрицами множителей U, X и V. Выделенные векторы множителей , и комбинируются по рангу R, восстанавливая элемент . Перенос низкоранговой аппроксимации из двух измерений в три переносит аргументы о хранении и вычислениях на сверточные слои. Источник: (Gholami et al., 2022).
Разные форматы разложения по-разному обменивают сокращение параметров на сложность свертки. CP-разложение представляет тензор как сумму компонент ранга один, (Lebedev et al., 2015), давая максимальное сокращение параметров, но часто страдая численной нестабильностью при оптимизации ранга. Разложение Таккера ослабляет это ограничение, сохраняя малое плотное ядро-тензор, умноженное по каждой моде на ортогональные матрицы множителей, . Тензорный поезд (TT) раскладывает тензор высокого порядка в линейную цепочку ядер-тензоров третьего порядка, свернутых по общим вспомогательным индексам, избегая экспоненциального роста по порядку тензора, который ограничивает ядра Таккера.
В системах глубокого обучения разложение тензоров сжимает четырехмерные сверточные фильтры, проекции многоголового внимания и большие таблицы эмбеддингов токенов. Однако выполнение тензорных свертков на промышленных ускорителях упирается в серьезный системный барьер: современная аппаратура сильно специализирована под плотное двумерное матричное умножение (GEMM). Свертка разложенных тензоров требует либо переупаковки раскладки памяти через явные ядра транспонирования, либо выполнения нескольких малых сверток с несогласованным доступом к памяти. Если не использовать специализированные слитые ядра свертки, перемещение памяти и задержка запуска ядер для разложенных операций могут легко свести на нет теоретическую экономию арифметики. «Матричная и тензорная факторизация» сравнивает LRMF и разложение тензоров по структурам данных, механизмам сжатия и компромиссам выполнения.
| Признак | Низкоранговая матричная факторизация (LRMF) | Разложение тензора |
|---|---|---|
| Применимая структура данных | Двумерные матрицы | Многомерные тензоры |
| Механизм сжатия | Раскладывает матрицу на две или более матрицы меньшего ранга | Раскладывает тензор на несколько компонент меньшего ранга |
| Распространенные методы | Сингулярное разложение (SVD), попеременные наименьшие квадраты (ALS) | CP-разложение, разложение Таккера, тензорный поезд (TT) |
| Вычислительная стоимость | Зависит от метода факторизации, выбранного ранга и ядер | Зависит от разложения, выбранных рангов, процедуры оптимизации и ядер тензорных сверток |
| Сокращение хранения | Сокращает хранение с до | Зависит от разложения и выбранных рангов; хранит матрицы-множители и для некоторых методов ядро-тензор |
| Выполнение вывода | Заменяет одну плотную операцию двумя операциями с множителями | Вводит тензорные свертки, задержка которых зависит от доступных ядер |
| Основные сценарии | Полносвязные слои, эмбеддинги, рекомендательные системы | Сверточные фильтры, механизмы внимания, мультимодальное обучение |
| Сложность реализации | Проще в реализации, часто использует прямые методы факторизации | Сложнее, требует итеративной оптимизации и выбора ранга |
Матричная и тензорная факторизация: LRMF применима к двумерным матрицам, тогда как разложения тензоров распространяют низкоранговые представления на многомерные тензоры; реальные хранение и задержка зависят от выбора ранга и поддержки ядер.
В промышленных конвейерах эти структурные аппроксимации часто комбинируют: LRMF применяют к большим линейным проекциям и таблицам эмбеддингов, а многомерные сверточные слои обрабатывают разложениями тензоров. В таксономии D·A·M структурная аппроксимация меняет Алгоритм, чтобы снять узкие места Машины по емкости и пропускной способности памяти. Когда задержка обслуживания строго ограничена памятью, как при авторегрессивной генерации токенов по одному батчу, сокращение байтов весов, передаваемых из DRAM, напрямую переходит в снижение задержки. Когда обслуживание ограничено вычислениями, накладные расходы на несколько операций с множителями и фрагментированный доступ к памяти могут обнулить эти выигрыши.
Прореживание и факторизация изменяют существующие параметризации моделей, тогда как дистилляция переносит поведение в независимо обученную модель-ученика. Поиск нейронной архитектуры идет принципиально другим путем: он находит архитектуры, которые эффективны по построению.
Поиск нейронной архитектуры
Прореживание, дистилляция и факторизация предполагают существующую топологию, созданную человеческой интуицией. Выбор конкурентоспособной конфигурации может требовать обширных экспериментов, а ручной перебор рискует оставить эффективные архитектурные варианты необнаруженными (Elsken et al., 2019). Поиск нейронной архитектуры (NAS) автоматизирует часть этого процесса, исследуя заданное пространство архитектур и целей. Ранний NAS на основе обучения с подкреплением оптимизировал точность на валидации (Zoph and Le, 2016), методы с разделением весов снизили стоимость оценки кандидатов (Pham et al., 2018), а NAS с учетом аппаратуры добавил в целевую функцию задержку на устройстве или эффективность платформы (Tan et al., 2019).
Цикл оптимизации на рисунке «Поток поиска нейронной архитектуры» формализует процедуру поиска. NAS14 задает пространство поиска архитектурных компонентов и ограничений, применяет стратегию, например обучение с подкреплением (Zoph and Le, 2016), эволюционный поиск или оптимизацию на основе градиентов, и оценивает кандидатов по целям точности и эффективности. Каждая оценка возвращает метрики производительности контроллеру поиска, направляя дальнейшие предложения кандидатов в области, которые балансируют точность решения с бюджетами физических ресурсов.
Поток поиска нейронной архитектуры: автоматизированный цикл оптимизации для открытия архитектур. Стратегия поиска выбирает кандидатные подсети из заранее заданного пространства поиска, а движок оценки производительности проверяет кандидатов по целевой точности и аппаратным ограничениям (таким как задержка или энергия), возвращая сигналы вознаграждения, чтобы направить дальнейший поиск к Парето-оптимальным решениям.
Задача оптимизации NAS
Эффективность NAS зависит от трех проектных решений: по каким архитектурам вести поиск (пространство поиска), как эффективно исследовать это пространство (стратегия поиска) и как оценивать пригодность каждого кандидата для развертывания. Задача оптимизации начинается с ограничения «что было раньше: курица или яйцо»: нельзя узнать, насколько хороша архитектура, пока ее не обучишь, а обучение дорого. Отсюда возникают два вложенных решения: какие операции включить (архитектура) и как найти лучшие параметры для этих операций (веса). Архитектура определяет, что оптимизировать; веса определяют, насколько хорошо эта архитектура может работать.
Поэтому NAS является двухуровневой задачей оптимизации.15 Внешний цикл ищет по пространству архитектур , а внутренний цикл обучает кандидатные архитектуры для оценки качества. Формально мы ищем оптимальную архитектуру , которая минимизирует валидационную функцию потерь при ограничениях (задержка, память): где — оптимальные параметры модели для архитектуры , полученные минимизацией обучающей функции потерь:
Вычислительное узкое место лежит во внутреннем цикле. Если оценка каждого кандидата требует независимого обучения с нуля, даже скромное пространство поиска из 10 вариантов операций на 20 слоях дает возможных архитектур, и полный перебор становится невозможен. Практические методы NAS преодолевают этот комбинаторный взрыв тремя механизмами: ограничением пространства поиска многоразовыми ячейками, амортизацией оценки через разделение весов или релаксацией дискретного выбора в непрерывную дифференцируемую формулировку.
Проектирование пространства поиска
Пространство поиска определяет, какие архитектуры может открыть NAS. Хорошо спроектированные пространства поиска включают предметные знания, чтобы сосредоточить поиск на перспективных областях, оставаясь достаточно гибкими, чтобы открывать новые шаблоны.
Вместо поиска целых архитектур сетей многие системы NAS ищут многоразовые вычислительные блоки, или ячейки, которые можно складывать в полные сети. Сверточная ячейка может выбирать из операций вроде свертки , свертки , раздельной по глубине свертки, максимального пулинга или тождественных связей. Упрощенная ячейка с четырьмя узлами и двумя операциями на ребро дает примерно 10 000 возможных конструкций ячеек, что гораздо практичнее поиска полных архитектур. NASNet служит примером этого подхода: он открыл многоразовые нормальные и редукционные ячейки, которые складываются в полные сети разных размеров.
Пространства поиска также напрямую кодируют физические ограничения аппаратуры. Вместо произвольных топологических графов пространства поиска с учетом аппаратуры ограничивают кандидатные операции примитивами, у которых есть эффективные векторизованные реализации ядер на целевой платформе. Например, мобильные пространства поиска отдают предпочтение раздельным по глубине сверткам с ограниченными размерами ядер и выравниванием каналов, чтобы помещаться в строки кэша и минимизировать транзакции шины памяти (Zhang et al., 2020). MobileNetV3 сочетала такое структурированное пространство поиска на уровне блоков с NetAdapt, чтобы прореживать каналы слоев по измеренной задержке мобильного CPU (Howard et al., 2019).
Стратегии поиска
Стратегии поиска определяют, как эффективно исследовать пространство архитектур без полного перебора. «Сравнение стратегий поиска NAS» сопоставляет компромиссы между стоимостью поиска, разнообразием архитектур и гарантиями оптимальности для каждого подхода.
| Стратегия | Эффективность поиска | Когда применять | Ключевая проблема |
|---|---|---|---|
| Обучение с подкреплением | 22 400 GPU-дней | Новые области, поиск без ограничений | Высокая вычислительная стоимость |
| Эволюционные алгоритмы | 3 150 GPU-дней | Доступна параллельная инфраструктура | Требуются большие популяции |
| Градиентные (DARTS) | 1–4 GPU-дня | Ограниченный бюджет вычислений | Может сойтись к неоптимальным локальным минимумам |
Сравнение стратегий поиска NAS: типичные компромиссы между эффективностью поиска, сценариями использования и ограничениями для разных подходов к NAS. Стоимости — результаты, специфичные для метода: ранних поисков с обучением с подкреплением и эволюционных поисков, а также DARTS, а не универсальные диапазоны для каждой стратегии (Zoph and Le, 2016; Real et al., 2019; Liu et al., 2019).
NAS на основе обучения с подкреплением рассматривает поиск архитектуры как последовательное решение: контроллер генерирует архитектуры и получает награду за точность. Контроллер (обычно сеть с долгой краткосрочной памятью) учится предлагать лучшие архитектуры через оптимизацию градиента политики. Этот подход открыл высокоэффективные архитектуры вроде NASNet, но его внутренний цикл дорог, потому что каждая награда требует обучения кандидатной архитектуры: Zoph and Le (2016) оценили примерно 12 800 архитектур суммарно на 22 400 GPU-дней. Такая стоимость подтолкнула практический NAS к разделению весов и более дешевым предикторам производительности.
Эволюционные алгоритмы поддерживают популяцию кандидатных архитектур и итеративно применяют мутации (изменение операций, добавление связей) и кроссовер (комбинирование архитектур-родителей), чтобы порождать потомков. Отбор по пригодности сохраняет высокоэффективные архитектуры для следующего поколения, поэтому полезные компоненты, например пропускные связи или раздельные по глубине свертки, могут рекомбинироваться, а не открываться заново с нуля. AmoebaNet использовала эволюцию, чтобы на ImageNet достичь точности, сопоставимой с лучшими вручную спроектированными моделями, за 3 150 GPU-дней (Real et al., 2019). Это показывает и ценность популяционного поиска, и сохраняющуюся необходимость в прокси-задачах, разделении весов или массовом параллелизме для контроля стоимости поиска.
Градиентные методы, такие как DARTS (Differentiable Architecture Search; Liu et al., 2019), представляют пространство поиска как непрерывную релаксацию, в которой все возможные операции — взвешенные комбинации. Вместо дискретного сэмплирования DARTS оптимизирует веса архитектуры и веса модели совместно градиентным спуском. Делая поиск дифференцируемым, DARTS снижает стоимость поиска с сотен GPU-дней до одного–четырех GPU-дней, хотя непрерывная релаксация может пропускать дискретные архитектурные шаблоны, которые находят дискретные методы поиска.
NAS с учетом аппаратуры выходит за пределы теоретических подсчетов FLOP и оптимизирует напрямую метрики выполнения на целевом кремнии. Подсчет FLOP плохо коррелирует с временем выполнения, когда доминируют пропускная способность памяти, размещение в кэше или накладные расходы на запуск ядер: операция с малым числом FLOP и низкой арифметической интенсивностью простаивает в ожидании транзакций памяти и работает медленнее операции с большим числом FLOP, которая достигает насыщения вычислений по модели Roofline. MnasNet устраняет это расхождение, включая модель предсказания задержки, обученную на тысячах пар «архитектура — задержка», измеренных на мобильных телефонах. Целевая функция поиска сочетает точность и задержку через взвешенное произведение: где — измеренная задержка, — ограничение по задержке, а задает компромисс между точностью и задержкой. Такая формулировка штрафует архитектуры, которые превышают целевую задержку, и поощряет те, что достигают высокой точности в рамках бюджета. В описанном пространстве поиска MnasNet варьирование коэффициентов расширения инвертированных остаточных блоков давало более выраженный компромисс между точностью и задержкой, чем равномерное расширение; это показывает, как поиск может выявить неоднородные конструкции, которые узкий ручной перебор не проверил бы.
Когда использовать NAS
Поиск нейронной архитектуры может найти архитектуры, превосходящие созданные вручную, но его вычислительная стоимость требует внимательно оценить, оправдано ли вложение. NAS может быть полезен для новых аппаратных платформ с необычными ограничениями, например новых архитектур ускорителей или сильно ограниченных периферийных устройств, где существующие архитектуры плохо оптимизированы. Он также может иметь смысл в масштабах развертывания, где небольшие выигрыши в эффективности оправдывают стоимость предварительного поиска, или когда семейства архитектур для облачного, периферийного и мобильного развертывания позволяют амортизировать один поиск на множество вариантов.
И наоборот, собственный NAS трудно оправдать, когда стандартные ограничения развертывания уже закрываются хорошо оптимизированными семействами архитектур. Если бюджет вычислений составляет лишь несколько GPU-дней, большие поиски с обучением с подкреплением или эволюционные поиски нереалистичны; дифференцируемые методы или методы с разделением весов, такие как DARTS, могут оставаться выполнимыми, но и им нужно обоснование масштабом развертывания и стоимостью валидации. Быстро меняющиеся требования также ослабляют аргумент, потому что цель может сдвинуться раньше, чем завершатся поиск и валидация.
Для большинства практиков готовые архитектуры, найденные NAS или созданные с его помощью, такие как EfficientNet (Tan and Le, 2019), MobileNetV3 (Howard et al., 2019) и MnasNet (Tan et al., 2019), дают сильные базовые линии до того, как финансировать поиск с нуля. Качество их переноса все равно зависит от задачи и аппаратуры. Собственный NAS стоит оставлять для необычных ограничений или масштабов развертывания, которые могут амортизировать вложения в поиск и валидацию.
Примеры архитектур
Исследования NAS выявили многоразовые шаблоны проектирования внутри своих пространств поиска. EfficientNet совместно масштабирует глубину, ширину и разрешение составными коэффициентами и сообщает о лучшем компромиссе между точностью и эффективностью во всем семействе моделей (Tan and Le, 2019). MobileNetV3 сочетает поиск с учетом аппаратуры и NetAdapt для целевых задержек на телефонах (Howard et al., 2019), а FBNet включает задержку конкретного устройства в целевую функцию поиска для мобильного CPU (Wu et al., 2019). Эти результаты показывают, что нашел поиск при конкретных пространствах, целях и измерениях; они не доказывают, что автоматизированный поиск универсально превосходит тщательное ручное проектирование.
Помимо сверточных сетей, NAS применяли к трансформерным архитектурам, включая поиски компактных языковых и визуальных моделей при ограничениях на вычисления или память. Общий системный урок уже, чем утверждение, что поиск всегда превосходит ручное проектирование: когда задержка, память или энергия входят в целевую функцию и измеряются на целевой платформе, поиск оценивает кандидатов по тому ресурсу, который реально ограничивает развертывание. Результат по-прежнему зависит от пространства поиска, качества прокси-оценок, бюджета оптимизации и финального переобучения.
Рассмотренные структурные методы (прореживание, дистилляция, факторизация и NAS) все оптимизируют то, какие вычисления выполняет модель, включая то, какие параметры существуют, какие связи сохраняются и как устроена архитектура. Эти методы могут существенно снизить число параметров и теоретические FLOP. Однако независимо от структурной эффективности каждый оставшийся вес и каждая активация по-прежнему должны храниться и обрабатываться с некоторой числовой точностью.
Выбор структурного метода
Структурные методы по-разному перераспределяют стоимость развертывания.
- Структурное и неструктурированное прореживание: сравните, как каждый шаблон взаимодействует с выполнением на GPU и TPU.
- Дистилляция и прореживание: объясните, почему плотный ученик может сохранять точность лучше агрессивного прореживания, требуя дополнительного обучения.
- Выбор NAS: определите, когда аппаратные ограничения и масштаб развертывания оправдывают поиск архитектуры вместо ручного проектирования.
Оставшиеся операции все равно должны выполняться в пределах физической пропускной способности памяти и емкости регистров. Второе измерение рамки оптимизации управляет числовой точностью этих операций. Структурные методы снижают число параметров и номинальные FLOP; оптимизация точности меняет трафик памяти и стоимость арифметики для каждого оставшегося значения. 32-битное значение с плавающей точкой занимает 4 байта, тогда как 8-битное целое — 1 байт, без учета метаданных масштаба или упаковки. Для вывода, ограниченного пропускной способностью, это меньшее представление напрямую снижает трафик памяти, если среда выполнения отображает операторы на поддерживаемые целочисленные вычислительные блоки. Хотя хорошо откалиброванные нагрузки INT8 часто сохраняют базовую точность, качество решения все же чувствительно к семейству модели, чувствительности слоев и аппаратной реализации (Jacob et al., 2018; Gholami et al., 2022).
Квантование часто является привлекательным первым экспериментом развертывания, потому что оно оставляет архитектуру нетронутой и может применяться посттренировочно. Его эффект максимален, когда связывающим ограничением становится трафик весов или активаций, а целевая платформа предоставляет эффективные низкоразрядные ядра; в противном случае оно может уменьшить артефакт, не ускорив запрос.
Квантование и числовая точность
Физический разрыв, определяющий сжатие, задается ограничениями памяти: языковая модель с 7 миллиардами параметров в FP16 требует 14 ГБ только для весов, тогда как целевой смартфон предлагает всего 8 ГБ общей оперативной памяти. Структурное прореживание может удалять слои или головы, но неструктурированные нули не уменьшают плотно хранимый артефакт развертывания без накладных расходов специального формата (Han et al., 2016). Дополнительный рычаг уменьшает разрядность, которой представляется каждый параметр: определение того, насколько можно снизить точность до того, как точность рухнет, задает практические границы квантования.
Квантование
Квантование — это метод сжатия модели, который снижает точность информации, отображая непрерывные значения высокой точности на дискретное множество меньшей точности.
- Значение: преобразование FP32 в INT8 уменьшает сырой объем данных на квантованное значение в 4 раза. Реальный размер артефакта, трафик и задержка также зависят от масштабов, метаданных, упаковки, охвата операторов и целевых ядер.
- Отличие: в отличие от прореживания, которое уменьшает число параметров, квантование уменьшает разрядность выбранных весов и/или активаций.
- Типичная ошибка: распространено заблуждение, что квантование — это просто «округление». На деле это отображение с потерями, которое требует тщательной оценки диапазонов и часто квантования с учетом обучения (QAT), чтобы свести к минимуму влияние на точность.
Квантование16 касается каждого веса и активации нейронной сети, хранящихся с некоторой числовой точностью: FP32 (32 бита), FP16 (16 бит), INT8 (8 бит) или ниже. Поэтому разрядность становится критическим системным параметром. Она ограничивает сырой размер данных и занятость кэша, влияет на требования к пропускной способности, когда значения остаются упакованными, и определяет компромиссы по площади и пропускной способности специализированных матричных движков (раздел «Числовая точность в ускорении ИИ» главы «Аппаратное ускорение»).
Могут меняться три системных свойства. Сырой объем весов падает в 4 раза при переходе от FP32 к INT8, до учета метаданных масштаба и упаковки. Трафик весов может упасть в сопоставимое число раз, если значения остаются упакованными по пути памяти, ускоряя вывод, ограниченный пропускной способностью, например декодирование некоторых больших языковых моделей (LLM) с малым батчем. Стоимость вычислений также может снизиться, если целевая платформа предоставляет эффективные ядра INT8; неподдерживаемые операторы, преобразования или запасные пути могут съесть часть выигрыша (Gupta et al., 2015; Wang et al., 2019).
Стоимость точности зависит от модели, задачи, квантователя, калибровочных данных и разрядности. Многие модели вывода сверточных нейронных сетей (CNN) хорошо переносят INT8; трансформеры, речевые модели и слои с большим числом выбросов могут требовать другой гранулярности, смешанной точности или методов с учетом обучения. Основные подходы — посттренировочное квантование (PTQ), квантование с учетом обучения (QAT) и экстремальное квантование для развертывания при меньшей разрядности. Они различаются стоимостью и контролем обучения, а не гарантированным порядком по точности.
Жизнеспособность каждого подхода зависит от того, насколько разрядность можно снизить у конкретной модели, прежде чем ухудшится качество. «Иллюстративные режимы квантования» показывает распространенный качественный паттерн: плато, на котором умеренное снижение разрядности почти не меняет измеряемый результат, и за ним обрыв, положение которого зависит от модели. Разрядность на любой из границ не универсальна.
Иллюстративные режимы квантования: кривые показывают качественное плато, за которым следует обрыв точности при снижении разрядности. Положение точек излома иллюстративно; реальные границы зависят от модели, распределения слоев, квантователя, метода калибровки или обучения и задачи оценки.
Точность и энергия
Выбор числовой точности — это решение об энергии, потому что физическое перемещение данных доминирует в тепловом и энергетическом бюджетах современных вычислительных систем. В кремнии энергия рассеивания прямо пропорциональна емкости проводников (), поэтому перемещение битов по длинным шинам памяти стоит на порядки больше джоулей, чем переключение логических элементов внутри арифметико-логического устройства. Перемещение 32-битного операнда с плавающей точкой из внешней DRAM в локальные регистры расходует заметно больше энергии, чем сама операция умножения с накоплением. Снижение числовой точности напрямую сокращает объем байтов, проходящих через иерархию памяти (), и уменьшает энергию переключения на одну операцию АЛУ (), ослабляя узкие места пропускной способности памяти и тепловые ограничения по всему аппаратному стеку.
Физика квантования
Инвариант перемещения энергии означает, что в физике кремния каждый извлеченный бит несет энергетическую цену (Horowitz, 2014). Раздел «Числа, которые нужно знать» приложения «Основы машины» собирает эталонные энергетические соотношения, а раздел «Числовые представления» того же приложения сравнивает компромиссы числовых форматов.
Согласно железному закону , снижение разрядности меняет члены перемещения данных и вычислений только через путь выполнения, который использует новое представление. Модель упакованных значений первого порядка дает два полезных сравнения:
- Перемещение памяти : упакованный поток INT8 несет в четыре раза меньше сырых битов значений, чем FP32. Соответствующая оценка энергии предполагает, что полные транзакции амортизируются на упакованных значениях; кэши, метаданные, выравнивание и размер транзакции влияют на реально достигаемую стоимость.
- Вычислительная работа : умножение в 32 битах стоит ≈ 3,7 пДж/оп. Умножение в INT8 стоит ≈ 0,2 пДж/оп.
«Иерархия энергии» нормирует эти стоимости относительно сложения целых в 8 битах, чтобы показать разрыв в четыре порядка между арифметикой и доступом к DRAM.
Для вывода переход от FP32 к INT8 сокращает сырое хранение значений в 4 раза, тогда как две приведенные выше стоимости умножения дают идеализированное снижение энергии умножения в 18,5 раза. Сквозная энергия также включает память, управление, датчики и потребление в простое. Раздел «Модель Roofline» приложения «Основы машины» придает этой связи формальный вид: нагрузки с малым числом арифметических операций на байт ограничены памятью, поэтому доминирует сокращение перемещения данных; нагрузки с большим числом операций на байт ограничены вычислениями, поэтому важнее экономия арифметики. Одного отношения арифметики недостаточно для предсказания времени работы батареи устройства.
Та же физика действует и в масштабе дата-центра: распределенные системы обучения используют пониженную точность, чтобы уменьшить накладные расходы на коммуникацию градиентов, о чем рассказано в разделе «Обучение в смешанной точности». Глава «Аппаратное ускорение» возвращается к аппаратным механизмам, которые используют эти энергетические различия.
Измерения энергии на уровне кремния объясняют, почему системы используют квантование, но сама аппаратная эффективность не определяет жизнеспособность развертывания. Рабочая область квантования зависит от двух взаимодействующих ограничений на границе D·A·M: от того, насколько алгоритм терпит численное возмущение до деградации точности на задаче, и от того, может ли машина превратить более узкие разрядности в снижение энергии и реальное ускорение. Чтобы количественно оценить аппаратную сторону этого компромисса, нужно измерить физическую энергию на каждом уровне иерархии памяти и выполнения.
Стоимость энергии
«Иерархия энергии» суммирует канонический разрыв между арифметикой и перемещением данных, нормируя стоимость операций относительно сложения целых в 8 битах. Перемещение данных через интерфейс памяти несет штраф в энергии, в четыре порядка превышающий выполнение арифметики на кристалле, что задает основную физическую мотивацию для снижения разрядности.
| Операция | Разрядность | Относительная энергия |
|---|---|---|
| Сложение целых | 8 бит | 1× |
| Сложение с плавающей точкой | 32 бита | 30× |
| Чтение DRAM | 32 бита | 21 333,3× |
Иерархия энергии: относительная стоимость энергии представительных арифметических операций и операций с памятью, нормированная к сложению целых в 8 битах. Сложение с плавающей точкой в 32 битах стоит в 30 раз больше своего целочисленного аналога в 8 битах, а одно чтение DRAM в 32 бита стоит в 21 333,3 раза больше, что ставит доступ к DRAM более чем на четыре порядка выше вычислений на кристалле. Именно этот разрыв делает так, что снижение разрядности, сокращающее перемещение данных, доминирует в энергетическом бюджете вывода гораздо сильнее, чем можно было бы ожидать по одной экономии арифметики (Horowitz, 2014).
«Энергия на операцию по точности» распространяет эту базовую линию на числовые точности и иерархию встроенной SRAM. В эталонной технологической модели на 45 нм сложение 32-битных целых стоит 0,1 пДж/оп, а сложение 8-битных целых расходует 0,03 пДж/оп. Арифметика с плавающей точкой следует той же прогрессии: сложение с плавающей точкой в 32 битах расходует примерно 0,9 пДж/оп, а в 16 битах требуется 0,4 пДж/оп. По отношению к INT8-сложению в 0,03 пДж чтения встроенной SRAM занимают от 5 до 50 пДж — множитель от 167 до 1 667 раз, — что показывает: размещение операндов в иерархии кэшей определяет энергию так же сильно, как сам формат арифметики. Доступ к внешней DRAM стоит еще дороже. В масштабе эти различия по операциям накапливаются по миллиардам параметров и операций. Для нагрузок, ограниченных памятью, перемещение неквантованных параметров по высокоемким шинам DRAM насыщает пропускную способность и доминирует в потреблении мощности ускорителя (Patterson et al., 2021); на энергетически ограниченных периферийных устройствах избыточная разрядность напрямую истощает запас батареи и нарушает тепловые пределы.
Энергия на операцию по точности: представительные стоимости энергии в технологии 45 нм лежат от 0,03 пДж для сложения INT8 до 3,10 пДж для умножения INT32 и от 5 до 50 пДж для показанных чтений SRAM. Диагональ отмечает чтение 8 КБ примерно в 167 раз дороже энергии сложения INT8; полный диапазон чтений SRAM составляет примерно от 167 до 1 667 раз относительно этой базовой линии. Значения энергии взяты из (Horowitz, 2014).
Энергетический дивиденд: INT8 против FP32
Снижение объема памяти часто служит первой мотивацией квантования, но арифметика пониженной точности может также дать энергетический дивиденд. Переход от FP32 к INT8 уменьшает сырой объем значений ровно в 4 раза; отношение энергии на уровне операции может быть больше, тогда как сквозная энергия по-прежнему зависит от нагрузки и устройства.
Иерархия энергии в аппаратуре раскрывает эту операционную асимметрию. В используемой здесь эталонной технологической модели сложение FP32 стоит 0,9 пДж/оп, а сложение INT8 — 0,03 пДж/оп, то есть операция INT8 дешевле по энергии в 30 раз. Это отношение не является предсказанием времени работы батареи на уровне устройства: остаются доступ к памяти, точность накопления, управление, датчики и потребление в простое. Оно, однако, объясняет, почему многие ускорители добавляют специализированные блоки низкой точности и почему квантование может быть необходимо, когда связывающим ограничением становится энергия арифметики или памяти.
Квантование окупается только тогда, когда ось машины содержит подходящие целочисленные блоки.
Эти энергетические выигрыши фундаментально меняются, когда связывающим физическим ограничением становится емкость памяти, а не пропускная способность вычислений. Рекомендательные модели превращают энергетический аргумент в задачу размещения: квантование должно сжать доминирующие структуры памяти настолько, чтобы они помещались в физическую память машины-хоста.
DLRM и квантование эмбеддингов
Маячная модель DLRM («Разреженные архитектуры: рекомендательные системы») представляет задачу сжатия, в которой связывающим ограничением становится емкость памяти, а не пропускная способность вычислений или памяти (Naumov et al., 2019). Ее таблицы эмбеддингов могут достигать терабайтов, намного превышая память GPU.
Для DLRM квантование нацелено на плотность хранения, а не на пропускную способность арифметики. Снижение точности таблиц эмбеддингов с FP32 до INT8 (или ниже) уменьшает объем памяти в 4–8 раз, позволяя более крупным таблицам помещаться на меньшем числе GPU, если точность и ядра поиска переносят пониженную точность. Сжатие таблиц поиска гарантирует, что физическая память устройства может вместить алгоритмическую модель.
Помимо прямой экономии вычислений, снижение числовой точности уменьшает энергию памяти, которая часто доминирует в общей мощности системы. Обращение к памяти, особенно к внешней DRAM, гораздо энергоемче вычисления арифметики: представительное чтение DRAM в 32 бита, используемое в этой главе, стоит 640 пДж, тогда как кэш и арифметические операции измеряются в масштабе пикоджоулей. Полная энергия инструкции поэтому определяется трафиком памяти, а не вычислениями АЛУ.17
Вместе DLRM и маячная модель TinyML («Императив квантования TinyML») иллюстрируют два операционных крайних случая этого ограничения памяти. DLRM использует пониженную точность, чтобы уместить таблицы эмбеддингов терабайтного масштаба в память хоста; TinyML использует пониженную точность, чтобы держать каждый вывод внутри крошечного энергетического бюджета и нескольких сотен килобайт встроенной SRAM.
Императив квантования TinyML
Маячная модель распознавания ключевых слов (KWS), DS-CNN, находится на противоположном от DLRM краю железного закона (Zhang et al., 2017). Типичный бюджет TinyML составляет примерно 512 КБ SRAM, и даже специально построенный распознаватель ключевых слов DS-CNN превышает его в FP32: его веса занимают 800 КБ. После квантования в INT8 та же сеть уменьшается до 200 КБ и помещается с запасом для буферов времени выполнения. Более жесткий микроконтроллер умного дверного звонка с 256 КБ SRAM оставляет для весов модели около 100 КБ после буферов времени выполнения, аудиоокон и состояния извлечения признаков, что мотивирует более агрессивное сжатие в INT4 или бинарное.
В FP32 даже компактная архитектура DS-CNN перемещает в 4 раза больше сырых байтов весов, чем в INT8, а арифметический путь может также стоить дороже на аппаратуре с эффективными целочисленными блоками. Для постоянно работающего устройства с батарейкой-таблеткой это снижение способствует большему времени работы батареи, но стоимость датчиков, пробуждения, извлечения признаков и потребления в простое может доминировать. Здесь квантование снижает член перемещения данных модели и может улучшить вычислительный член , если поддерживается целочисленный путь.
Снижение числовой точности, таким образом, бьет по физической стоимости выполнения на двух разных фронтах: задержка арифметики в АЛУ и трафик байтов по шине памяти. То, как эти снижения переходят в реальное ускорение, напрямую зависит от того, ограничена ли нагрузка пропускной способностью вычислений или пропускной способностью памяти.
Выигрыш в производительности
«Иллюстративный сценарий квантования» сравнивает иллюстративные альтернативы FP32 и INT8. Парные столбцы не являются измерениями задержки на общей платформе; панель хранения показывает точное четырехкратное снижение с 32 до 8 бит.
Иллюстративный сценарий квантования: парные столбцы разделяют альтернативы FP32 и INT8. Правая панель показывает сырое хранение весов, где снижение каждого веса с 32 до 8 бит дает точное уменьшение в четыре раза; левая панель показывает иллюстративные, зависящие от архитектуры изменения задержки.
Большие языковые модели показывают, как точность весов определяет физическую осуществимость памяти в масштабе.
Экономия при квантовании
Задача: развертывание Llama 3 с 8 млрд параметров требует хранить 8 млрд параметров на устройстве. Сколько памяти занимает модель в FP16 и в INT4, и достаточно ли квантование сжимает ее, чтобы поместиться на одном потребительском GPU?
FP16
- Размер сырых весов: 8 2 байта (16 бит) = 16 ГБ
- Бюджет времени выполнения: 16 ГБ не оставляют запаса; практичен устройство класса 24 ГБ.
INT4
- Размер сырых весов: 8 0,5 байта (INT4) = 4 ГБ
- Бюджет времени выполнения: 4 ГБ оставляют около 4 ГБ на устройстве с 8 ГБ для метаданных, кэша, активаций и рабочей области.
Помимо экономии хранения, квантование ускоряет арифметику за счет параллелизма данных в аппаратных регистрах. Блоки векторного выполнения фиксированной ширины (SIMD) и систолические массивы обрабатывают больше операндов за такт, когда каждый операнд занимает меньше битов.
Множитель SIMD
Задача: вычислительно ограниченный слой выполняется в INT8 вместо FP32 на том же процессоре. Откуда берется ускорение?
Механизм: выполнение SIMD. Ядро CPU или GPU обрабатывает данные в векторных регистрах фиксированной ширины (например, AVX-512 имеет ширину 512 бит).
Расчет:
- Ширина регистра: 512 бит.
- Емкость FP32: 512/32 = 16 элементов за векторную инструкцию.
- Емкость INT8: 512/8 = 64 элемента за векторную инструкцию.
Результат: переход на INT8 упаковывает в тот же регистр в 4 раза больше элементов. = 64/16 = 4 (в 4 раза)
Системный вывод: квантование дает ускорение вычислительно ограниченных слоев до 4 раз только за счет упаковки векторов на аппаратуре, где целочисленные векторные инструкции INT8 имеют сопоставимую с FP32 пропускную способность, даже до учета экономии пропускной способности памяти.
Снижение числовой точности, однако, вносит компромиссы. Форматы низкой точности могут вызывать численную нестабильность и шум квантования, потенциально влияя на точность модели. «Иллюстративные совокупные остатки квантования» показывает иллюстративное распределение остатков, агрегированное по значениям с разнородными масштабами и возможным отсечением. Для идеального равномерного квантователя ошибка округления внутри диапазона, напротив, ограничена интервалом ; ошибки за пределами этого интервала возникают из-за отсечения или агрегирования разных размеров шага. Некоторые архитектуры, например большие трансформерные модели NLP, хорошо переносят квантование, тогда как другие могут заметно деградировать. Поэтому выбор подходящей числовой точности требует баланса между ограничениями по точности, поддержкой аппаратуры и выигрышами в эффективности.
Иллюстративные совокупные остатки квантования: иллюстративное совокупное распределение остатков по разнородным масштабам и отсеченным значениям. Внутри одного неотсеченного равномерного квантователя ошибка округления ограничена интервалом ; показанные хвосты представляют отсечение или агрегирование по разным размерам шага.
Пока шум квантования удерживается в пределах, системная цель пониженной точности — ускорение по реальному времени. Величина и физическая природа этого ускорения напрямую зависят от того, ограничено ли выполнение вычислениями или памятью.
Ускорение квантованием (ограниченное вычислениями)
Задача: вычислительно ограниченное матричное умножение (например, в блоке многослойного перцептрона трансформера) переходит с FP16 на INT8. Каково ожидаемое ускорение?
Расчет: на современной аппаратуре с выделенными блоками INT8:
- Путь целочисленной пропускной способности: эталонный ускоритель класса A100 оценивает свои выделенные матричные блоки INT8 в 624 TOPS против 312 TFLOP/s на пути FP16 (NVIDIA Corporation, 2020; Choquette et al., 2021). Прирост пиковой пропускной способности равен этому отношению из спецификации: 624 TOPS ÷ 312 TFLOP/s ≈ 2 (в 2 раза).
- Пропускная способность памяти: веса INT8 вдвое меньше, поэтому их загрузка из памяти занимает вдвое меньше времени.
- Совокупный эффект: для операций, ограниченных вычислениями, ускорение в основном дает пропускная способность вычислений: примерно в 2 раза.
Системный вывод: ускорение от квантования зависит от узкого места. Операции, ограниченные вычислениями (большие батчи, высокая арифметическая интенсивность ), получают примерно двукратное ускорение от более быстрых блоков INT8, и выигрыш здесь происходит от целочисленного матричного пути, а не от сокращения трафика памяти. Случай, ограниченный пропускной способностью, работает наоборот: вдвое меньше перемещаемых байтов (с FP16 на INT8) дает выигрыш до 2 раз, а большие сокращения разрядности масштабируют выигрыш дальше, как показывает следующий разобранный пример.
Когда операция ограничена пропускной способностью, ускорение следует за сокращением байтов, передаваемых на токен, а не за пиковой пропускной способностью арифметики. При авторегрессивной генерации токенов с малыми батчами трафик шины памяти доминирует в задержке.
Ускорение квантованием
Задача: сценарий развертывания требует запустить LLM с 7 млрд параметров на устройстве с 16 ГБ ОЗУ. Веса в FP16 (2 байта).
Расчет:
- Размер модели: 7 2 байта = 14 ГБ.
- KV-кэш: FP16 KV-кэш на 4 096 токенов использует два тензора (ключи и значения) по 32 слоям, 32 головам KV, 128 измерениям на голову и 2 байта на значение, что требует примерно 2,1 ГБ.
- Полная память: 14 ГБ + 2,1 ГБ = 16,1 ГБ. Это превышает емкость устройства еще до памяти операционной системы и рабочей области.
- Стоимость пропускной способности: в упрощенной модели полного трафика кэша загрузка весов и KV-кэша при 50 ГБ/с занимает 323 мс на токен. Это 3,1 токена/с — слишком медленно для диалога.
Исправление (INT4):
- Квантование: перевести веса в INT4 (0,5 байта).
- Новый размер: 7 0,5 байта = 3,5 ГБ весов или 5,6 ГБ с учетом неизменного FP16 KV-кэша.
- Новая скорость: загрузка этого объема занимает 113 мс. Скорость растет до 9 токенов/с.
Системный вывод: квантование весов делает конфигурацию пригодной по памяти и дает ускорение в 2,9 раза в заявленной модели трафика, что меньше четырехкратного выигрыша из-за неизменного трафика FP16 KV-кэша.
Ускорение от квантования зависит от того, что ограничивает выполнение: пропускная способность памяти или пропускная способность вычислений.
Сравнение числовых форматов
Ускоряет ли квантование выполнение, зависит напрямую от того, ограничен ли оператор пропускной способностью памяти или вычислениями. Для ядер, ограниченных памятью, сокращение разрядности уменьшает число байтов, переданных по шине памяти, и напрямую повышает эффективную пропускную способность. Для ядер, ограниченных вычислениями, ускорение требует специализированных арифметических блоков, способных выполнять больше операций низкой точности за такт. Поэтому выбор числового формата требует баланса между динамическим диапазоном и поддержкой выполнения на аппаратуре, с одной стороны, и трафиком памяти, с другой, а не слепой минимизации разрядности. «Форматы числовой точности» сравнивает форматы точности, которые обычно применяют в архитектурах ускорителей, и сопоставляет сокращение объема хранения, выигрыш в арифметической пропускной способности и целевую аппаратуру относительно стандартного 32-битного формата с плавающей точкой (FP32).
| Формат точности | Разрядность | Сокращение хранения (относительно FP32) | Скорость вычислений (относительно FP32) | Влияние на мощность | Сценарии использования |
|---|---|---|---|---|---|
| FP32 | 32 бита | Базовое (1×) | Базовая (1×) | Базовое | Обучение и вывод (универсальный) |
| FP16 | 16 бит | в 2 раза меньше | До 2× пиковой на выбранной поддерживаемой аппаратуре | Зависит от аппаратуры и нагрузки | Ускоренное обучение, вывод (тензорные ядра NVIDIA, TPU) |
| BF16 (Brain Floating Point) | 16 бит | в 2 раза меньше | Зависит от аппаратуры и нагрузки | Зависит от аппаратуры и нагрузки | Обучение на TPU, трансформерные модели |
| TF32 (TensorFloat-32) | 19 бит | Нет (хранится как FP32) | До 8× пиковой на тензорных ядрах NVIDIA Ampere | Зависит от аппаратуры и нагрузки | Обучение на GPU NVIDIA |
| FP8 (8-битная плавающая точка) | 8 бит | в 4 раза меньше | Зависит от аппаратуры и нагрузки | Зависит от аппаратуры и нагрузки | Эффективное обучение и вывод (H100, ИИ-ускорители) |
| INT8 (8-битное целое) | 8 бит | в 4 раза меньше | Зависит от аппаратуры и нагрузки | Зависит от аппаратуры и нагрузки | Квантованный вывод (периферийный ИИ, мобильный ИИ, NPU) |
| INT4 (4-битное целое) | 4 бита | в 8 раз меньше | Зависит от аппаратуры и нагрузки | Зависит от аппаратуры и нагрузки | Сверхнизкое энергопотребление, экспериментальное квантование |
| Бинарные/троичные (1–2 бита) | 1–2 бита | в 16–32 раза меньше | Зависит от аппаратуры и нагрузки | Зависит от аппаратуры и нагрузки | Предельная эффективность (бинарные и троичные нейронные сети) |
Форматы числовой точности: отношения хранения отражают ширину сырого значения; скорость вычислений и влияние на мощность зависят от поддержки аппаратуры и поведения нагрузки.
При 16 битах FP16 и BF16 вдвое уменьшают объем памяти по сравнению с FP32, одновременно используя специализированные блоки матричных вычислений, например тензорные ядра NVIDIA и TPU Google, для ускорения арифметики. Однако их внутреннее распределение битов по-разному обменивает числовой диапазон на точность мантиссы. BF16 сохраняет 8-битную экспоненту FP32 и поэтому динамический диапазон примерно от до , а дробная часть сокращается до 7 бит. FP16, напротив, отводит 5 бит на экспоненту и 10 бит на дробную часть; это дает большую точность, но ограничивает максимальное конечное значение числом 65 504, а нормальные значения при меньших величинах, чем примерно , обнуляются (субнормальные — до ). Поэтому обучение в FP16 обычно требует масштабирования потерь и накопительных регистров FP32, чтобы не допустить исчезновения и переполнения градиентов, тогда как широкий диапазон экспоненты BF16 позволяет стандартной динамике обучения работать без масштабирования. TensorFloat-32 (TF32) представляет гибридный компромисс: он сохраняет 8-битную экспоненту FP32 и 10-битную дробную часть FP16, выполняется на тензорных ядрах для ускорения матричного умножения, а значения хранятся в стандартной 32-битной памяти. Сравнение битовых раскладок FP32, FP16 и BF16 показывает, как каждый формат распределяет поля знака, экспоненты и мантиссы, чтобы сбалансировать динамический диапазон и точность («Битовые раскладки чисел с плавающей точкой»).
Битовые раскладки чисел с плавающей точкой: распределение битов обменивает динамический диапазон на точность мантиссы. FP32 использует 8 битов экспоненты и 23 бита дробной части. BF16 сохраняет 8-битную экспоненту FP32 и поэтому близкий числовой диапазон, но сокращает дробную часть до 7 бит. FP16 использует 5 битов экспоненты и 10 битов дробной части, обеспечивая большую точность мантиссы, чем BF16, но более узкий диапазон, который может требовать масштабирования потерь при обучении.
Для нагрузок вывода точность INT8 дает четырехкратное сокращение сырого объема хранения по сравнению с FP32, сохраняя приемлемую точность предсказаний. Вывод обходит проход обратного распространения градиентов и устраняет малые по величине обновления с большим динамическим диапазоном, которые при обучении приводят к исчезновению значений. Поэтому активации и веса без труда отображаются на знаковые 8-битные целые () с помощью равномерного аффинного или симметричного масштаба квантования. В режимах вывода, ограниченных пропускной способностью, например при авторегрессивной генерации токенов языковой моделью, это сокращение объема в 4 раза разгружает шину памяти, уменьшая трафик DRAM и кэша. Для операторов, ограниченных вычислениями, выделенные блоки векторных и тензорных вычислений INT8 дают большую плотность арифметических операций за такт и на единицу площади кристалла, чем эквивалентные блоки с плавающей точкой.
Бинарные и троичные сети представляют теоретический предел снижения точности: веса и активации ограничиваются одним битом () или троичным набором (), чтобы заменить умножители с плавающей точкой побитовыми логическими операциями XNOR и подсчетом единиц. Однако поскольку стандартная память адресует байты, а не отдельные биты, представления менее байта требуют упаковки значений в 8- или 32-битные слова, что добавляет накладные расходы на побитовые сдвиги и маски, если пользовательские аппаратные тракты данных не поддерживают их напрямую. Сильная дискретизация также ограничивает распространение градиента при обучении, делая точность решения чувствительной к формулировке суррогатного градиента и стабилизации обучения. Маячная модель распознавания ключевых слов («Эффективные архитектуры: распознавание ключевых слов») иллюстрирует режим работы, где экстремальное сжатие необходимо, чтобы уложиться в жесткий бюджет SRAM в ~512 КБ. INT8 задает базовую цель; INT4, бинарные или троичные представления обменивают дополнительный числовой динамический диапазон на соблюдение более строгих ограничений памяти и мощности.
Различия в энергии арифметики завершают физический аргумент в пользу квантования. Представления низкой точности снижают энергопотребление по двум разным физическим путям: сокращается перемещение памяти по шине и уменьшается энергия переключения, необходимая для каждой арифметической операции. Полное умножение с накоплением в INT8, например, использует примерно в 20 раз меньше энергии, чем его эквивалент в FP32. Ускорители с собственными блоками низкой точности, например тензорные ядра NVIDIA, TPU Google или мобильные NPU, умножают эту экономию арифметики на снижение трафика памяти. Напротив, универсальные процессоры без собственных конвейеров выполнения низкой точности теряют большую часть этого выигрыша на накладных расходах времени выполнения: распаковка битов, преобразование форматов и запасной скалярный путь. Поэтому точность — это решение о связке модели и аппаратуры, а не флаг конфигурации программы.
Стратегии снижения точности
Уменьшение числовой разрядности снижает трафик памяти и энергию арифметики, но наивное отсечение вводит шум квантования, который ухудшает точность модели. Развертывание представлений низкой точности требует структурированных стратегий, которые контролируют, где и как меняется разрядность в вычислительном графе.
Существуют три подхода, которые образуют лестницу сложности. Посттренировочное квантование (PTQ) снижает точность после обучения, не требуя переобучения и минимальных инженерных усилий. Квантование с учетом обучения (QAT) включает эффекты квантования в цикл обучения, позволяя модели адаптироваться к более низкой точности и сохранять более высокую точность. Подходы смешанной точности назначают разным слоям разную разрядность, согласуя числовую точность с чувствительностью каждого оператора. «Дорожная карта сложности квантования» распределяет методы квантования по трем последовательным уровням в зависимости от сложности реализации, требований к ресурсам и целевых сценариев использования.
Дорожная карта сложности квантования: уровни упорядочивают методы по типичным инженерным усилиям и усилиям на валидацию, а не по гарантированной точности. PTQ дает недорогую отправную точку; QAT и смешанная точность добавляют контроль над обучением или ядрами; методы INT4, бинарные и троичные все сильнее требуют валидации, специфичной для модели и аппаратуры. Развертывание может остановиться на любом уровне, как только достигнуты измеренные критерии качества, задержки, памяти и энергии, а более сложный уровень не обязательно лучше.
Дорожная карта служит инструментом для порядка развертывания, а не таксономией числовых форматов. PTQ стоит первым, потому что меняет представление с минимальной стоимостью обучения; QAT и смешанная точность переходят на промышленный уровень, поскольку требуют поддержки цикла обучения или ядер; методы INT4, бинарные и троичные находятся на переднем крае, потому что предположения о точности и аппаратуре становятся специфичными для архитектуры.
Посттренировочное квантование
Посттренировочное квантование (PTQ) снижает числовую точность после обучения, преобразуя выбранные веса или активации из FP32 в представления меньшей точности, например INT8, без полного переобучения (Choukroun et al., 2019). Оно надежно уменьшает объем сырых значений; задержка и энергия улучшаются только тогда, когда экспортированный граф отображается на эффективные ядра низкой точности (Wu et al., 2020).
Ключевое преимущество PTQ — низкая вычислительная стоимость: оно не требует переобучения и обычно не требует размеченного обучающего набора, хотя калибровка активаций обычно нуждается в небольшом репрезентативном калибровочном наборе данных. Однако снижение точности вносит ошибку квантования, которая может ухудшить точность, особенно в задачах, требующих мелкозернистой числовой точности. Фреймворки машинного обучения, такие как TensorFlow Lite, среда выполнения Open Neural Network Exchange и PyTorch, предоставляют встроенную поддержку PTQ.
Основной механизм PTQ — равномерное квантование, которое отображает значения с плавающей точкой на дискретные целые уровни с помощью единого масштабного коэффициента. Поскольку интервал между соседними квантованными значениями постоянен, равномерное квантование упрощает реализацию и позволяет эффективно выполнять его на аппаратуре. Для симметричной формы, показанной здесь, выбирается по максимальному абсолютному значению так, чтобы получающиеся целые оставались в целевом диапазоне. Квантованное значение вычисляется как: где:
- — квантованное целочисленное представление,
- — исходное значение с плавающей точкой,
- — масштабный коэффициент, который отображает диапазон значений с плавающей точкой на доступный целочисленный диапазон.
«Равномерное квантование» демонстрирует равномерное квантование из FP32 в INT8, которое сокращает сырой объем значений с 32 до 8 бит на вес и измеряет получающуюся ошибку квантования; метаданные масштаба и накладные расходы упаковки не учитываются. После квантования модели среда выполнения может использовать целочисленную арифметику там, где она поддерживается (Gholami et al., 2022).
Равномерное квантование: преобразует веса FP32 в INT8, сокращая сырой объем на вес с 32 до 8 бит и измеряя ошибку квантования; метаданные масштаба и накладные расходы упаковки не учитываются.
import torch
# Исходные веса FP32
weights_fp32 = torch.tensor(
[0.127, -0.084, 0.392, -0.203], dtype=torch.float32
)
print(f"Исходные FP32: {weights_fp32}")
print(f"Память на вес: 32 бита")
# Простое равномерное квантование в INT8 (от -128 до 127)
# Шаг 1: найти масштабный коэффициент
max_val = weights_fp32.abs().max()
scale = max_val / 127 # 127 — максимальное положительное значение INT8
# Шаг 2: квантовать по нашей формуле q = round(x/s)
weights_int8 = torch.round(weights_fp32 / scale).to(torch.int8)
print(f"Квантованные INT8: {weights_int8}")
print(f"Память на вес: 8 бит (вместо 32)")
# Шаг 3: деквантовать для проверки
weights_dequantized = weights_int8.float() * scale
print(f"Деквантованные: {weights_dequantized}")
print(
f"Ошибка квантования: "
f"{(weights_fp32 - weights_dequantized).abs().mean():.6f}"
)
Альтернативное, неравномерное квантование назначает более мелкую точность тем диапазонам числовых значений, которые заполнены плотнее, что может сохранять точность для моделей, веса которых сосредоточены вокруг определенных значений. Неравномерные схемы требуют более сложной калибровки и реже встречаются в продакшене, но могут быть эффективны для моделей, особенно чувствительных к изменению точности.
PTQ — полезный первый эксперимент для многих моделей зрения, языка и речи, но чувствительность варьируется в зависимости от архитектуры, слоя и распределения. Если равномерная конфигурация PTQ не достигает целевого качества, следующими вариантами становятся более мелкая гранулярность, смешанная точность, методы квантования только весов, лучшая калибровка или QAT.
Калибровка
Калибровка квантования оценивает вещественный диапазон отсечения для каждого тензора. Неподходящий диапазон либо насыщает критичные значения отсечением, либо тратит доступные целые уровни на редкие выбросы. Калибровка минимизирует ошибку представления на выборке распределения, хотя не гарантирует границ для входов развертывания вне этого распределения.
Поскольку тензоры активаций меняются в зависимости от входных данных, профилирование требует пропустить через прямой проход неразмеченный калибровочный набор, чтобы зафиксировать динамические диапазоны. «Конвейер посттренировочного квантования» описывает этот автономный процесс преобразования, а приведенный ниже алгоритм формализует пошаговую процедуру калибровки по слоям, в которой наблюдатели активаций записывают распределения значений, чтобы вычислить метаданные масштаба и нулевой точки.
Алгоритм: калибровка посттренировочного квантования
Вход: предобученная модель f_θ; репрезентативный калибровочный набор C; разрядность b;
гранулярность (слой/группа/канал); метод (max, entropy, percentile)
Выход: квантованные веса и метаданные диапазонов по группам {(α_g, β_g, s_g, z_g)}
1. Подключить наблюдатели к весам и выбранным тензорам активаций с выбранной гранулярностью
2. Для каждого батча из C: ▷ проход калибровки
2.1 выполнить f_θ в режиме вывода; зафиксировать распределения значений по группам
3. Для каждой группы квантования g:
3.1 выбрать диапазон отсечения [α_g, β_g] выбранным методом
3.2 вычислить масштаб s_g и нулевую точку z_g, отображающие [α_g, β_g] в b-битный целочисленный диапазон
4. Квантовать статические веса; экспортировать метаданные диапазонов активаций для вывода
5. Если точность ниже производственного порога, расширить диапазоны, изменить гранулярность или перейти к QAT
Конвейер посттренировочного квантования: PTQ преобразует обученную модель FP32 непосредственно в INT8 без переобучения. Репрезентативные калибровочные данные проходят через модель, чтобы зафиксировать диапазоны активаций , и вычисляют масштабный коэффициент и нулевую точку для квантования параметров перед развертыванием.
Один калибровочный проход по позволяет обойтись без переобучения, а квантование весов из FP32 в INT8 сокращает сырые значения весов в 4 раза до учета метаданных масштаба, нулевой точки и упаковки. Цена в том, что статические диапазоны активаций, зафиксированные в цикле, рискуют насыщением или потерей целых уровней, если калибровочные данные не охватывают хвосты распределения при развертывании. Шаг квантования затем переводит параметры модели в формат меньшей точности, создавая итоговую квантованную модель.
Отображение необоснованно широкого вещественного интервала на 256 дискретных значений 8-битного целого тратит числовое разрешение на пустой диапазон, тогда как слишком агрессивное отсечение обрезает сигнал. Три метода калибровки уравновешивают этот компромисс между отсечением и разрешением: max задает границы по абсолютному экстремуму (сохраняя крайние значения ценой уязвимости к выбросам), entropy выбирает границы, минимизируя дивергенцию Кульбака — Лейблера (KL) между исходным и квантованным распределениями, а percentile отсекает фиксированную долю хвоста (например, 99,9 процента). «Распределение активаций» показывает, почему обработка выбросов критична: в активациях ResNet-50 длинные хвосты растягивают динамический диапазон и лишают плотный кластер около нуля доступных дискретных уровней.
Распределение активаций: активации слоев ResNet-50 имеют длинный хвост с выбросами, которые могут привести к неэффективному использованию точности, если с ними не обращаться аккуратно. Источник: (Wu et al., 2020).
Диапазоны калибровки могут быть симметричными (центрированными на ноль, обычно с нулевой точкой, равной нулю) или асимметричными (один масштаб с, как правило, ненулевой нулевой точкой, полезный, когда распределения скошены). Выбор метода и диапазона заметно влияет на точность квантованной модели.
Настройка диапазонов квантования
Как только калибровка определила границы отсечения , диапазон нужно отобразить на целочисленные концы. «Выбор диапазона калибровки» сравнивает две основные стратегии отображения: симметричную калибровку, которая фиксирует вещественный ноль на целом нуле, и асимметричную калибровку, которая вводит явное смещение нулевой точки для скошенных распределений.
Выбор диапазона калибровки: симметричное и асимметричное аффинные отображения квантования. Симметричное квантование (слева) принуждает вещественный ноль отображаться в целый ноль, ограничивая выбор диапазона интервалом ценой потери динамического диапазона для скошенных распределений активаций; асимметричное квантование (справа) использует явное смещение нулевой точки , чтобы эффективно отображать нецентрированные диапазоны .
Симметричное квантование упрощает ядра целочисленного матричного умножения, потому что нулевая точка равна нулю (), и при аппаратном накоплении не нужны перекрестные слагаемые. Однако для активаций с асимметричными распределениями (например, карт признаков после ReLU, где все значения неотрицательны) симметричное квантование тратит примерно половину целочисленного динамического диапазона на неиспользуемые отрицательные значения. Асимметричное квантование возвращает этот диапазон, отображая на , но требует, чтобы аппаратура во время выполнения вычисляла поправки на смещение () при операциях умножения с накоплением.
Гранулярность
Гранулярность квантования определяет, насколько широко масштабные коэффициенты и нулевые точки разделяются по тензору, — это баланс между разрешением представления, накладными расходами на метаданные и сложностью выполнения. В сверточных фильтрах или матрицах проекций трансформера величины весов часто сильно различаются от канала к каналу. Использование одного масштабного коэффициента на весь тензор рискует свести динамический диапазон каналов малой величины к нулю; напротив, назначение масштабов по каналам сохраняет локальную дисперсию ценой отслеживания дополнительных векторов масштаба при матричном умножении.
Вычисление масштаба и нулевой точки
Формула аффинного квантования: аффинное отображение переводит вещественный диапазон , содержащий ноль, в целочисленный диапазон (например, UINT8) по следующей конструкции.
Анализ: Аффинное квантование задает линейное отображение , где — масштаб (размер шага), а — нулевая точка (целое значение, соответствующее вещественному нулю). Отображение состоит из трех вычислительных шагов:
Вычислить масштаб : разделить вещественный диапазон на целочисленный по формуле «Масштаб квантования».
Вычислить нулевую точку : сдвинуть диапазон так, чтобы вещественный ноль отображался в целое, по формуле «Нулевая точка квантования».
Квантовать по формуле «Квантование»:
Сценарий: Допустим, активации лежат в диапазоне от до , а целевая точность — UINT8 .
- Диапазон: .
- Шаги: .
- Масштаб: .
- Нулевая точка: .
Системный вывод: вещественное значение представлено целым 64, что гарантирует точное представление нулевого дополнения (распространенного в CNN) и предотвращает «дрейф квантования», когда дополнение вносит ненулевой шум.
Когда каналы весов имеют расходящиеся стандартные отклонения, совместное использование одного порога отсечения на весь слой либо схлопывает каналы малой величины, либо обрезает более широкие каналы. «Разброс диапазонов квантования» показывает этот разброс от фильтра к фильтру по сверточным слоям, сопоставляя общую границу на слой с независимыми порогами по каналам.
Разброс диапазонов квантования: разные сверточные фильтры могут иметь разные диапазоны весов, что мотивирует квантование по фильтрам для снижения ошибки квантования. Различные масштабы отсечения иллюстрируют выбор между одним диапазоном на слой и отдельными диапазонами по каналам. Источник: (Gholami et al., 2022).
Гранулярность квантования обменивает накладные расходы калибровки и метаданных на ошибку представления. Более локальные диапазоны могут сохранять информацию, когда каналы различаются, но они не улучшают точность автоматически и могут не иметь эффективного пути ядер. Каждый дополнительный масштаб также нужно хранить, загружать и применять на той гранулярности, которую поддерживает бэкенд. «Уровни гранулярности квантования» суммирует четыре распространенных уровня — от одного общего диапазона на слой до локальных диапазонов внутри фильтра.
| Уровень | Совместное использование диапазонов | Компромисс |
|---|---|---|
| По слою | Один диапазон на слой | Просто, но неоптимально, когда диапазоны фильтров сильно различаются |
| По группам | Фильтры объединяются с общими диапазонами | Использовано в Q-BERT (Shen et al., 2020) для слоев внимания трансформера |
| По каналам | Один диапазон на фильтр | Распространенное значение по умолчанию; баланс между ошибкой квантования, метаданными масштаба и накладными расходами реализации |
| Внутри канала | Диапазоны внутри каждого фильтра | Более локальные диапазоны могут снизить ошибку квантования, но увеличивают метаданные и накладные расходы реализации |
Уровни гранулярности квантования: гранулярность обменивает накладные расходы калибровки на точность — от одного диапазона на слой до поддиапазонов на фильтр.
Квантование по каналам сохраняет точность лучше квантования по слою, когда динамические диапазоны каналов различаются, но ценой хранения дополнительных векторов масштаба и пересчета по каналам в конвейере ядра. Помимо гранулярности масштаба, эффективность выполнения зависит от различия между статическими весами и динамическими активациями, которые накладывают принципиально разные ограничения на память и задержку в системе развертывания.
Веса и активации
Выполнение вывода в низкой точности требует преобразовать входы с плавающей точкой перед запуском ядра и пересчитать промежуточные выходы аккумулятора. При целочисленном матричном умножении произведение двух 8-битных целых дает 16-битный результат. Суммирование этих произведений по внутреннему измерению длины вызывает рост разрядности, который быстро переполняет 8-битные регистры; поэтому аппаратура накапливает результат в 32-битных целочисленных регистрах (INT32). Прежде чем передать результат в следующие слои, переквантование масштабирует 32-битную накопленную сумму эффективным масштабным коэффициентом слоя () и приводит значения обратно в диапазон 8-битных целых. «Конвейер квантованного матричного умножения» иллюстрирует этот сквозной конвейер выполнения: входы с плавающей точкой проходят квантование в INT8, затем целочисленное матричное умножение SIMD или тензорных ядер, накапливаются в 32-битных регистрах и переквантуются обратно в INT8 перед нелинейной активацией.
Конвейер квантованного матричного умножения: этапы вычислений выделены цветом. Вещественные веса и входы активаций квантуются в INT8 (фиолетовый), подаются в целочисленное умножение матриц SIMD или тензорных ядер (синий), накапливаются в 32-битных регистрах (красный) и переквантуются обратно в INT8 (зеленый) перед нелинейной активацией. Источник: курс HarvardX по TinyML.
Квантование активаций отображает выходы слоев на представление меньшей точности во время вывода. Это уменьшает промежуточные объемы данных и может сокращать стоимость арифметики на аппаратуре с эффективным целочисленным путем, но также вносит ошибку между слоями. Например, CNN может преобразовать карты признаков FP32 в INT8 перед последующими свертками. Выигрыш максимален, когда последовательные операторы остаются на целочисленном пути; изолированные квантованные операторы могут нести стоимость преобразований, не сокращая работу достаточно. Поэтому то, улучшает ли квантование активаций задержку, зависит от поддерживаемых ядер, обработки масштабов, времени жизни тензоров и любых границ квантования и деквантования, которые остаются в экспортированном графе.
Активационно-зависимое квантование весов (AWQ)18 нацелено на трафик весов в выводе LLM. Этот подход актуален для маячной модели GPT-2/Llama, когда декодирование ограничено загрузкой весов модели. Защищая небольшую долю значимых каналов весов на основе величины активаций, AWQ поддерживает квантование весов класса INT4, контролируя деградацию на задаче. Упакованные низкоразрядные веса могут сокращать трафик памяти, необходимый при генерации токенов, если среда выполнения предоставляет соответствующее ядро (Lin et al., 2024).
Статическое и динамическое квантование
Помимо формы и гранулярности диапазона отсечения, проект системы определяет, когда вычисляются диапазоны активаций. Квантование активаций делится на две основные модели выполнения: статическое и динамическое квантование.
При статическом квантовании диапазон отсечения вычисляется заранее во время автономной калибровки и остается фиксированным во время вывода. Такой подход не добавляет накладных расходов на оценку диапазона во время выполнения: входы масштабируются фиксированными коэффициентами и напрямую подаются в целочисленные блоки выполнения. Однако статические диапазоны рискуют насыщением или исчезновением значений, когда производственные входы отклоняются от калибровочного распределения (Jacob et al., 2018; Yao et al., 2021).
Динамическое квантование, напротив, вычисляет масштабные коэффициенты и нулевые точки динамически по тензорам активаций во время выполнения. Адаптация окна отсечения к каждому конкретному входу устраняет насыщение, вызванное сдвигами распределения. Цена — накладные расходы памяти и задержки во время выполнения: аппаратура должна выполнить проходы редукции по промежуточным тензорам активаций, чтобы получить минимумы и максимумы, прежде чем может начаться целочисленная арифметика. На операторах, ограниченных пропускной способностью памяти, этот проход редукции может съесть преимущество выполнения в низкой точности.
Эти решения о времени и гранулярности взаимодействуют с более широким выбором методологии квантования. «Сравнение методов квантования» сопоставляет посттренировочное квантование, квантование с учетом обучения и динамическое квантование, каждое из которых имеет свои сильные стороны и компромиссы для разных сценариев развертывания.
| Метод | Инженерные усилия | Сохранение точности | Адаптивность к входу | Когда применять |
|---|---|---|---|---|
| Посттренировочное квантование (PTQ) | Низкие: без переобучения | Зависит от модели; параметры не адаптируются | Фиксированный диапазон калибровки | откалиброванная модель достигает измеренных целевых показателей точности и производительности |
| Квантование с учетом обучения (QAT) | Высокие: дополнительное обучение с моделированием квантования | Часто выше, когда PTQ не справляется | Фиксированный диапазон калибровки | PTQ не достигает целевой точности, а бюджет обучения позволяет |
| Динамическое квантование | Умеренные: диапазоны пересчитываются во время выполнения | Зависит от модели; диапазон подходит каждому входу | Диапазон для каждого входа | диапазоны активаций сильно меняются от входа к входу, а накладные расходы выполнения приемлемы |
Сравнение методов квантования: выбор зависит от трех определяющих вопросов — бюджета инженерных усилий, порога точности и изменчивости входов, — а не от списка возможностей.
PTQ служит базовым вариантом с низкими усилиями; QAT тратит циклы обучения, когда PTQ снижает точность на задаче, а динамическое квантование расходует трафик памяти и вычисления во время выполнения, чтобы отслеживать динамические диапазоны, зависящие от входа.
Выбор калибровки и диапазонов
Квантование удается, только если политика диапазонов соответствует данным развертывания и ограничениям среды выполнения.
Проектирование диапазонов
- Калибровочные данные: объясните, как нерепрезентативный калибровочный набор создает отсечение или тратит целые уровни впустую.
- Гранулярность: сравните диапазоны на весь тензор и по каналам по компромиссу ошибки и метаданных, который каждый создает.
- Статические и динамические диапазоны: выберите политику диапазонов, когда распределения активаций меняются от входа к входу, а накладные расходы выполнения ограничены.
Системная оценка
- Выигрыш от квантования: для модели с 7 млрд параметров, обслуживаемой из HBM, оцените память весов в FP16 и INT4, а также примерный прирост скорости декодирования для вывода, ограниченного пропускной способностью памяти.
PTQ на практике
Посттренировочное квантование балансирует скорость развертывания и контроль точности. PTQ не требует обратного распространения градиента или переобучения, что делает его стандартным первым шагом в конвейерах оптимизации развертывания. Достаточно ли автономной калибровки, зависит от архитектуры, распределения калибровочных данных, конструкции численного квантователя и ограничений целевой аппаратуры.
Основное ограничение PTQ в том, что оно замораживает параметры модели, не позволяя компенсировать потерю точности. Если квантованная модель опускается ниже производственного порога, средства смягчения включают повторную калибровку, уточнение гранулярности масштаба, переход на смешанную точность или переход к квантованию с учетом обучения. QAT встраивает ограничения точности непосредственно в граф обучения, используя сквозную оценку (straight-through estimator, STE), чтобы пропускать градиенты через недифференцируемые операторы округления. Это позволяет весам адаптироваться к представлениям низкой разрядности при переобучении и восстанавливать точность ценой полных вычислений обучения () и подбора гиперпараметров.
Квантование с учетом обучения
Квантование с учетом обучения включает численный шум округления непосредственно в граф оптимизации. «Конвейер квантования с учетом обучения» показывает этот рабочий процесс обучения: узлы фиктивного квантования моделируют ошибки отсечения и округления низкой точности в прямом проходе, а сквозные оценки направляют градиенты обратно к мастер-весам с плавающей точкой при обратном распространении.
Конвейер квантования с учетом обучения: QAT вставляет узлы фиктивного квантования в прямой граф, чтобы моделировать ошибки отсечения и округления низкой точности во время обучения. Обратное распространение обновляет вещественные мастер-веса через сквозные оценки (STE), позволяя параметрам сети адаптироваться к числовому шуму до экспорта фиксированных целочисленных масштабов для вывода.
Вместо обучения с нуля или холодного старта параметров масштаба производственные рабочие процессы часто инициализируют QAT масштабными коэффициентами, полученными при первом проходе калибровки PTQ. «Конвейер от PTQ к QAT» иллюстрирует эту двухэтапную последовательность: автономная калибровка задает базовые метаданные диапазонов, а дообучение затем корректирует мастер-веса, компенсируя шум квантования.
Конвейер от PTQ к QAT: калибровка PTQ может инициализировать диапазоны и масштабы до того, как QAT дообучит предобученные веса с моделированием квантования. Калибровочные данные подаются на этап PTQ, а обучающие данные — на QAT.
Математика обучения
При прямом распространении веса и активации квантуются и деквантуются, имитируя пониженную точность. Пусть — значение полной точности, — масштабный коэффициент, который отображает значения с плавающей точкой в диапазон меньшей точности, а — смоделированное квантованное значение. Этот процесс обычно записывают так: где — смоделированное квантованное значение, — вес или активация полной точности, а — масштабный коэффициент, отображающий значения с плавающей точкой в целые меньшей точности.
Хотя прямой проход выполняется с моделированным квантованием, вычисление градиентов требует обратного распространения через оператор округления . Поскольку округление — кусочно-постоянная ступенчатая функция, ее производная равна нулю почти всюду и не определена в точках перехода, что обнулило бы градиенты и остановило бы градиентный спуск. Сквозная оценка (Straight-Through Estimator, STE) устраняет это узкое место, подставляя тождественную функцию вместо оператора округления при обратном распространении (Bengio et al., 2013):19
Учет эффектов квантования при обучении позволяет модели адаптировать веса и диапазоны активаций к моделируемой ошибке низкой точности. QAT может восстановить качество, которое теряет посттренировочный путь, особенно при агрессивной разрядности, но преимущество зависит от модели, квантователя, калибровки и процедуры обучения (Krishnamoorthi, 2018).
Узлы фиктивного квантования и реализация
Реализация QAT опирается на операции фиктивного квантования, которые моделируют квантование во время прямого распространения, сохраняя полную точность для вычисления градиентов. Эти операции вставляют пары квантования — деквантования в вычислительный граф, создавая моделирование во время обучения поведения при выводе.
Узел фиктивного квантования должен воспроизводить те же ошибки, что увидит среда выполнения вывода, поэтому его три операции моделируют путь развертывания во время обучения:
- Квантование: отобразить значение с плавающей точкой на дискретный уровень квантования
- Отсечение: применить ограничения диапазона на основе разрядности
- Деквантование: вернуть значение к плавающей точке для последующих операций
Математически для симметричного квантования с разрядностью при входном значении с плавающей точкой : где — масштабный коэффициент, вычисленный по распределению входа, а — выход с фиктивным квантованием, который имитирует значения INT8, но остается в формате с плавающей точкой.
Для асимметричного квантования с беззнаковыми целыми предположим, что наблюдаемый диапазон расширен так, чтобы включать ноль: где — смещение нулевой точки, которое позволяет представлять асимметричный диапазон.
«Прямой проход свертки QAT» показывает прямой проход QAT: фиктивное квантование применяется к входам и весам перед сверткой, моделируя численные значения INT8 при сохранении тензоров с плавающей точкой для обучения.
Прямой проход свертки QAT: применяет фиктивное квантование к активациям и весам перед сверткой, чтобы моделировать численные значения развертывания во время обучения.
# Прямой проход с фиктивным квантованием
def qat_conv_forward(x, weight):
# Фиктивное квантование входных активаций
x_scale = compute_scale(x, bits=8, symmetric=False)
x_zero = compute_zero_point(x, x_scale, bits=8)
x_quant = fake_quantize(x, x_scale, x_zero, bits=8)
# Фиктивное квантование весов (обычно симметричное)
w_scale = compute_scale(weight, bits=8, symmetric=True)
w_quant = fake_quantize(weight, w_scale, zero=0, bits=8)
# Свертка с фиктивно квантованными значениями
output = conv2d(x_quant, w_quant)
return output
При обратном распространении узлы фиктивного квантования аппроксимируют градиенты через сквозную оценку с учетом отсечения: Внутри диапазона отсечения оценка трактует квантование как тождественное отображение, передавая входящий градиент без изменений мастер-весу . За границами отсечения производная равна нулю, блокируя градиенты от насыщенных выбросов, которые иначе дестабилизировали бы обновления оптимизатора.
На практике фреймворки вроде PyTorch и TensorFlow реализуют фиктивное квантование как пользовательские операторы автоградиента, прямой проход которых выполняет цикл квантования — деквантования, а обратный проход применяет STE. Обработка масштабов зависит от метода: наблюдатели могут отслеживать распределения и затем замораживаться, либо масштабы могут выучиваться. Пакетная нормализация также требует согласованной с развертыванием обработки: рабочие процессы сворачивают пакетную нормализацию в веса предшествующей свертки () и замораживают ее накопленные статистики перед экспортом квантования, гарантируя, что масштабы фиктивного квантования при обучении совпадают со статическими параметрами слитого ядра, выполняемого при выводе.
Компромиссы QAT
Главное преимущество QAT20 — дополнительный контроль качества при низкой точности. Включая смоделированный шум квантования во время обучения или дообучения, модель может адаптироваться к развернутому численному пути. Процессоры с выделенными целочисленными блоками затем могут использовать арифметику INT8 для более быстрого или менее энергоемкого вывода, если экспортированные операторы поддерживаются (Wu et al., 2020; Gholami et al., 2022). Выигрыш нужно измерять относительно PTQ для той же модели и цели, включая дополнительную стоимость обучения и любые различия в калибровке, покрытии графа или выборе ядер.
Ценой служит дополнительная инженерная сложность. QAT встраивает моделирование квантования в обучение, поэтому команды должны проверять схемы квантования, поведение масштабов и восстановление точности на целевой модели. Эти накладные расходы могут сделать QAT менее практичным для очень больших моделей, когда бюджеты обучения уже ограничены. Посттренировочные пути дают дополнительный вариант, который исключает эти накладные расходы переобучения при ограниченных бюджетах обучения (Choukroun et al., 2019).
На практике выбор между PTQ и QAT следует простому правилу. Начните с PTQ и измерьте точность на валидационной выборке. Если точность достигает производственного порога, инженерные затраты на QAT не оправданы. Если PTQ не дотягивает, инвестируйте в QAT, чтобы закрыть разрыв. Гибридный подход — начать с калибровки PTQ и применять дообучение QAT только к критичным по точности слоям — часто дает полезный баланс.
PTQ и QAT обычно нацелены на точность 8 или 4 бита, но сохранение точности зависит от модели, задачи и метода квантования. Однако некоторые сценарии развертывания требуют еще более агрессивного сжатия, подталкивая точность к абсолютным пределам того, что нейронные сети могут выдерживать.
Экстремальное квантование
Экстремальное квантование снижает числовую точность до 1 или 2 битов на значение для сред развертывания, где даже INT8 или INT4 не укладываются в бюджеты памяти или энергии (Courbariaux et al., 2015; Zhu et al., 2017). Бинаризация ограничивает веса и активации двумя значениями, обычно записываемыми как . В цифровой логике отображение в двоичный , а в двоичную делает скалярное умножение изоморфным побитовой операции XNOR. В результате дорогие блоки умножения с накоплением (MAC) в плавающей или целочисленной арифметике заменяются побитовой логикой и подсчетом единичных битов (popcount) (Rastegari et al., 2016). 64-битный регистр упаковывает 64 двоичных значения. Одна инструкция XNOR выполняет 64 умножения параллельно за один такт, а последующая аппаратная инструкция popcount считает совпадающие биты, накапливая скалярное произведение (). Это полностью исключает аппаратные умножители. Однако однобитные представления сильно ограничивают выразительность модели, что приводит к резкой деградации точности в сложных задачах восприятия и языка (Hubara et al., 2018).
Тернаризация смягчает эту потерю емкости, допуская три значения: (Zhu et al., 2017). Нулевое состояние вводит разреженность и упрощает арифметику: умножение активации на требует сложения, на — вычитания, а умножение на пропускается полностью. Это исключает универсальные умножители и сводит арифметический блок к условному накопителю со сложением и вычитанием. Однако троичные значения нельзя упаковать по одному биту на значение. Им нужно как минимум два бита на вес в стандартной памяти с выравниванием по байтам (тогда одно из четырех возможных 2-битных состояний не используется) или многотритное кодирование (например, упаковка пяти тритов в один байт, поскольку ), которое добавляет накладные расходы на декодирование во время выполнения.
И бинарное, и тернарное квантование вводят ступенчатые функции, производная которых почти всюду равна нулю ( при ), из-за чего градиенты при обратном распространении исчезают. Чтобы обучать такие представления, квантование с учетом обучения использует методы аппроксимации градиента, главным образом сквозную оценку (STE) (Bengio et al., 2013; Choi et al., 2018). При обратном проходе STE подменяет недифференцируемый квантователь тождественным или отсекающим оператором и передает градиенты непосредственно полноточным латентным весам, которые накапливают малые шаги оптимизатора, пока не пересекут пороги квантования.
Проблемы и ограничения
Перевод подбайтовой точности в реальное ускорение ограничен стандартными архитектурами процессоров. Массовые CPU и GPU содержат АЛУ и тензорные конвейеры, рассчитанные на 8-, 16- и 32-битные регистры; у них нет собственных инструкций матричного умножения на одном или двух битах. Выполнение подбайтовых операндов на таких универсальных архитектурах требует подпрограмм побитовых сдвигов, масок и распаковки. Накладные расходы этих манипуляций с битами часто съедают экономию пропускной способности памяти, если только нагрузки не выполняются на специализированных битово-последовательных ускорителях, программируемых вентильных матрицах (FPGA) или аппаратуре с собственными побитовыми блоками выполнения (Umuroglu et al., 2017).
Качество модели создает не менее серьезный барьер. Экстремальное квантование резко сжимает представительную емкость сети. Хотя низкоэнтропийные нагрузки, например KWS на бюджете SRAM микроконтроллера, могут переносить бинарные или тернарные веса, сложные модели восприятия и генеративные модели страдают от резкой деградации точности. Бинарное и тернарное квантование становятся жизнеспособными кандидатами, только когда представления повышенной точности, такие как INT8 или INT4, не укладываются в физические бюджеты памяти или энергии, и когда аппаратура развертывания может выполнять упакованные побитовые операции нативно (Rastegari et al., 2016; Hubara et al., 2018; Zhu et al., 2017; Umuroglu et al., 2017). Промышленное развертывание требует сравнения бинарных и тернарных базовых линий с INT8, INT4, структурным прореживанием и компактными архитектурными переделками на одной и той же нагрузке с измерением полного размера бинарного артефакта, сквозной задержки, энергии на вывод и точности на задаче на целевой аппаратуре.
Управляющая инженерная проверка состоит в том, напрямую ли разрядность, аппаратные арифметические пути и выбор калибровки или обучения выполняют физические ограничения развертывания.
Контрольная точка: квантование и точность
Критерии проверки проекта квантования:
- Память INT8 против энергии: можете ли вы объяснить, почему квантование INT8 дает примерно четырехкратное снижение памяти, но потенциально более чем четырехкратное снижение энергии? Учитывайте энергетическую стоимость блоков арифметики с плавающей точкой и целочисленной арифметики.
- QAT против PTQ: понимаете ли вы ключевое преимущество квантования с учетом обучения (QAT) перед посттренировочным квантованием (PTQ) и когда дополнительная стоимость обучения оправдана?
- Ускорение за счет разрядности: можете ли вы объяснить, почему квантование весов дает почти линейное ускорение при снижении разрядности для вывода LLM, ограниченного пропускной способностью памяти? Подумайте, какой ресурс является узким местом при авторегрессивной генерации.
Первые два измерения оптимизации отвечают на разные вопросы: структурная оптимизация (прореживание, дистилляция, NAS) определяет, что вычислять, а оптимизация точности (квантование) определяет, насколько точно это представлять и выполнять. Выигрыш на бумаге нужно выражать в ресурсе, который он реально меняет, — числе ненулевых элементов, FLOP или сырых байтах — прежде чем переводить эти сокращения в задержку или энергию.
В продакшене устойчиво возникает разрыв между теоретическими оценками и измеренным ускорением. Этот иллюстративный сценарий сочетает коэффициент прореживания 50 процентов с уменьшением разрядности INT8 для прикидочной цели в 8 раз, а затем предполагает, что реализуется только 1,5 раза. Это примерно 18,8 процента от цели на бумаге. Сценарий показывает, почему теоретическое сжатие не подразумевает пропорционального ускорения. Оптимизация должна выходить за пределы графа модели и охватывать то, как операции выполняются по всей физической иерархии памяти.
Разрыв возникает из-за нескольких архитектурных и программных несоответствий. Разреженные матрицы, хранящиеся в плотных форматах, тратят пропускную способность памяти на передачу нулей — аппаратура не может пропускать неиндексированные нули. Операции, которые могли бы выполняться одновременно, стоят последовательно, когда планирование или зависимости среды выполнения мешают перекрытию. Единый граф выполнения назначает каждому входу одинаковую вычислительную глубину независимо от сложности. Преодоление разрыва между сокращением на бумаге и измеренным аппаратным ускорением — задача третьего измерения оптимизации: архитектурной эффективности. Оно оценивает, превращаются ли структурная оптимизация и оптимизация точности в реальный выигрыш выполнения, когда вычислительные графы взаимодействуют с физическими блоками выполнения.
Архитектурная эффективность
Архитектурная эффективность начинается с трассы выполнения. В предыдущем разделе количественно оценили разрыв между теоретическим и измеренным ускорением; профилировщик объясняет, куда он уходит: разреженные тензоры все еще могут проходить через плотные ядра, операторы пониженной точности могут требовать преобразований, которые аппаратура не способна скрыть, а маленькие слои могут тратить больше времени на запуск ядер и перемещение промежуточных данных, чем на арифметику. Модель на бумаге стала меньше, но трасса выполнения все равно заставляет машину выполнять неэффективную последовательность обращений к памяти и операций.
Если представление определяет, какие вычисления выполнять, а точность определяет, насколько точно их выполнять, то архитектурная эффективность определяет, как эти вычисления укладываются в машину. Измеренные узкие места определяют, какой архитектурный ответ полезен. Проектирование с учетом аппаратуры меняет модель до обучения, чтобы ее слои соответствовали бюджету развертывания. Использование разреженности делает удаленные веса видимыми для ядер, которые могут их пропускать. Динамические вычисления позволяют простым входам выходить раньше, вместо того чтобы платить за наихудший случай. Слияние операторов сокращает трафик памяти, когда соседние операции иначе записывали бы один и тот же тензор и читали его снова.
Проектирование с учетом аппаратуры
Проектирование с учетом аппаратуры начинается до сжатия. Если целевое устройство не может постоянно снабжать свертки данными, не может хранить активации без выгрузки или не укладывается в энергетический бюджет при выбранном разрешении входа, прореживание и квантование лишь лечат симптомы. Сама архитектура должна раскрывать такой тип работы, который аппаратура может выполнять эффективно. Это означает выбор форм слоев, правил масштабирования и шаблонов операторов, при которых пропускная способность памяти, параллелизм и энергия — это первоклассные ограничения, а не проверки развертывания постфактум.
Принципы эффективного проектирования
Первый шаг проектирования — определить, какой ресурс трасса показывает как ограничивающий. Модель может не достичь цели, потому что каждый слой слишком дорог, потому что одно семейство сверток доминирует в арифметике, потому что активации или параметры не помещаются в иерархию памяти, или потому что кандидатная архитектура игнорирует предпочитаемые платформой операторы. «Принципы проектирования с учетом аппаратуры» упорядочивает распространенные ответы по устраняемому узкому месту, а не по семейству моделей.
| Наблюдаемое узкое место | Архитектурный ответ | Примеры сетей |
|---|---|---|
| Превышение бюджета модели | Согласованно изменять глубину, ширину и разрешение, чтобы модель оставалась в пределах бюджета задержки, памяти и мощности. | EfficientNet, RegNet |
| Избыточные вычисления | Заменять дорогие плотные операции факторизованными или групповыми, которые сохраняют полезное смешивание каналов при меньшей арифметике. | MobileNet, ResNeXt |
| Нагрузка на память | Сокращать хранение параметров и активаций или повторно использовать признаки, чтобы рабочий набор помещался в доступный кэш, SRAM или память устройства. | DenseNet, SqueezeNet |
| Несоответствие платформе | Включать измеренную задержку устройства, поддержку операторов и поведение энергопотребления в поиск архитектуры или цикл проектирования вместо оптимизации одних FLOP. | MobileNetV3, MnasNet |
Принципы проектирования с учетом аппаратуры: профильная трасса должна определять, какой архитектурный ответ уместен. MobileNet отвечает на избыточные сверточные вычисления раздельными по глубине свертками, DenseNet и SqueezeNet отвечают на нагрузку на память повторным использованием признаков и сокращением параметров, а NAS с учетом аппаратуры встраивает измеренное поведение платформы прямо в целевую функцию поиска.
Эти ответы взаимодействуют. Сокращение сверточных FLOP раздельными по глубине свертками21 помогает, только если целевая среда выполнения имеет эффективные ядра для получающихся операторов. Уменьшение модели слоями с сокращением параметров помогает, только если объем активаций или трафик памяти были частью измеренной проблемы. Проектирование с учетом аппаратуры поэтому не заменяет профилирование; оно переносит информацию профилирования раньше, внутрь самой архитектуры.
Оптимизация масштабирования
Первый архитектурный ответ — глобальный: когда каждый этап профиля превышает бюджет, проблема не в одном плохом слое; модель масштабирована неправильно для бюджета развертывания. Задача проектирования тогда — распределить емкость между глубиной, шириной и разрешением входа, а не выбирать одно число параметров. Глубина увеличивает последовательную работу и хранение активаций. Ширина открывает больше параллельной работы, но повышает потребление памяти. Разрешение улучшает пространственные детали, но увеличивает число позиций, которые должна обработать каждая свертка. Правильный баланс зависит от машины: сильно параллельный ускоритель часто может использовать ширину, тогда как маленькое периферийное устройство может быть ограничено емкостью памяти и энергией на каждое обращение.
Математически общее число FLOP сверточной модели можно приблизить так: где — глубина (число слоев), — ширина, а — разрешение входа. Это выражение показывает, почему наивное масштабирование не работает: одновременное увеличение ширины и разрешения быстро умножает работу, и получившаяся модель может превысить бюджет пропускной способности памяти или мощности, даже если число параметров выглядит разумным.
Составное масштабирование превращает этот баланс в управляемое правило проектирования. Вместо независимой настройки глубины, ширины и разрешения составное масштабирование увеличивает все три измерения в фиксированных пропорциях относительно базовой модели: Здесь — коэффициент масштабирования, а , и — масштабные множители, определяемые по эмпирическим измерениям точности и эффективности. Правило важно, потому что не дает одному измерению израсходовать бюджет раньше, чем остальные смогут внести полезный вклад в точность.
EfficientNet («Поиск нейронной архитектуры») подтвердил этот принцип, использовав поиск, чтобы найти базовую архитектуру, а затем масштабировав ее сбалансированными коэффициентами глубины, ширины и разрешения (Tan and Le, 2019). Урок не в том, что каждое развертывание должно использовать EfficientNet. Системный урок в том, что масштабирование — это решение о распределении ресурсов: одна и та же цель по точности может подразумевать разные компромиссы глубины, ширины и разрешения в зависимости от того, какой ресурс целевая платформа делает дефицитным. Более поздний материал по бенчмаркингу формализует измерение этих компромиссов; здесь принцип проектирования состоит в том, чтобы масштабировать измерения относительно связывающего ресурса.
Та же логика распространяется за пределы сверточных моделей. Слои трансформера, головы внимания, длина последовательности и ширина эмбеддинга играют роли, аналогичные глубине, ширине и разрешению: каждое увеличивает емкость, но каждое по-разному нагружает вычисления, пропускную способность памяти или хранение активаций. Масштабирование с учетом аппаратуры привязывает эти измерения к измеренному узкому месту, а не рассматривает размер модели как одну скалярную величину.
Сокращение вычислений
Если профиль показывает, что небольшой набор сверточных операторов доминирует в арифметике, равномерное сокращение всей модели расточительно. Лучший ответ — заменить дорогой оператор. Современные эффективные архитектуры делают это, факторизуя плотные вычисления на более дешевые части, которые сохраняют представление, необходимое для точности.
Раздельные по глубине свертки, популяризованные MobileNet, служат примером этого подхода: они раскладывают стандартную свертку на два этапа — раздельную по глубине свертку (отдельные фильтры применяются к каждому входному каналу независимо) и поточечную свертку (, смешивающую выходы по каналам). Для размера батча один, единичного шага, дополнения, сохраняющего пространственный размер , и квадратного ядра ширины вычислительная сложность стандартной свертки с входными и выходными каналами составляет: где — размер ядра. Раздельные по глубине свертки сводят это к: исключая множитель из операций смешивания каналов и часто давая сокращение FLOP в 5–10 раз. Выигрыш во времени зависит от поддержки ядер и поведения памяти: мобильная среда выполнения с оптимизированными раздельными ядрами может превратить большую часть этого сокращения арифметики в экономию задержки, тогда как слабо поддержанный бэкенд может представить факторизованные операции как множество малых ядер, ограниченных памятью.
Другие шаблоны факторизации отвечают на тот же диагноз. Групповые свертки, использованные в ResNeXt, разбивают карты признаков на независимые группы перед их объединением, сокращая избыточную работу между каналами. Бутылочные слои, использованные в ResNet, применяют свертки , чтобы уменьшить размерность признаков перед дорогими операциями. SqueezeNet использует ту же идею для сокращения параметров. Эти приемы повышают эффективность, когда сокращают операцию, которая действительно доминирует в трассе; они дают гораздо меньше пользы, когда новым узким местом становятся трафик памяти, накладные расходы запуска или неподдерживаемые ядра.
Сокращение арифметики — лишь один из возможных ответов. Когда профилирование вместо этого указывает, что связывающим ресурсом на целевом устройстве становятся емкость памяти или перемещение данных, архитектура должна решать это узкое место памяти напрямую.
Оптимизация памяти
Когда профиль указывает на память, а не на арифметику, архитектура должна уменьшить рабочий набор или число дорогих обращений к памяти. Активации, карты признаков и параметры могут превышать объем кэша, SRAM, памяти ускорителя или хранилища периферийного устройства, даже если число FLOP приемлемо. Поэтому архитектуры, эффективные по памяти, стараются сохранить полезную информацию, одновременно храня или перемещая меньше данных.
DenseNet иллюстрирует ответ через повторное использование признаков (Huang et al., 2017). В традиционной сверточной сети каждый слой вычисляет новый набор карт признаков, и объем активаций растет по мере углубления сети. DenseNet соединяет слои так, что последующие вычисления могут переиспользовать ранее полученные карты признаков, вместо того чтобы заново выучивать похожие представления. В стандартной сверточной сети с слоями, если каждый слой порождает новых карт признаков, общее число карт растет линейно:
DenseNet сокращает избыточность параметров за счет повторного использования признаков, но конкатенация сохраненных признаков может увеличивать хранение активаций и трафик памяти. Получающийся рабочий набор и среду выполнения нужно измерять на целевой аппаратуре.
Контрольная точка активаций дополняет повторное использование признаков, обменивая вычисления на память во время обучения. Для сравнимых слоев с объемом активаций на слой равномерно расставленная контрольная точка сокращает член сохраненных активаций с до , пересчитывая пропущенные активации при обратном распространении. В контексте сжатия контрольные точки позволяют обучать большие модели в фиксированных бюджетах памяти, что, в свою очередь, дает больше емкости для последующего прореживания или дистилляции.
Сокращение параметров применяет ту же логику к хранению. SqueezeNet использует свертки , чтобы уменьшить число входных каналов перед стандартными свертками, заставляя дорогой слой работать с меньшим представлением (Iandola et al., 2016). Число параметров стандартного сверточного слоя равно:
Уменьшая свертками , SqueezeNet сокращает число параметров и достигает уровня точности AlexNet из статьи с гораздо меньшим числом параметров, чем у AlexNet. Этот компромисс привлекателен, когда ограничение развертывания — флеш-память, размер загрузки модели или пропускная способность параметров; он менее решающий, когда доминируют память активаций или накладные расходы операторов.
Повторное использование признаков, контрольные точки активаций и сокращение параметров поэтому не являются взаимозаменяемыми рецептами. Каждый меняет свою часть проблемы памяти. Повторно используемые признаки сокращают избыточные представления, контрольные точки сокращают хранение активаций при обучении, а бутылочные слои сокращают перемещение параметров. Правильный выбор следует из того, какой член памяти профиль показывает как связывающий.
Помимо минимизации объема хранимых тензоров, существенная эффективность выполнения возникает при перестройке графиков доступа к памяти. Объединение соседних операций в составные ядра выполнения устраняет возвраты в DRAM вне кристалла для промежуточных карт признаков.
Слияние операторов
Рассмотрим типичный слой нейронной сети: свертка, затем батч-нормализация, затем ReLU. Без слияния каждая операция записывает свой выход в глобальную память GPU, а следующая операция читает этот выход обратно. Для того, что можно вычислить целиком в быстрых регистрах на кристалле, происходят три возврата в память. Сливая эти операции в одно ядро, компиляторы и движки вывода устраняют избыточные обращения к памяти и повышают пропускную способность и снижают задержку на нагрузках, ограниченных памятью (Chen et al., 2018; NVIDIA, 2024).
Слияние операторов
Слияние операторов — это оптимизация компилятора и среды выполнения, которая объединяет соседние тензорные операции в одно слитое ядро, так что промежуточные значения остаются в регистрах или в памяти на кристалле, а не записываются в глобальную память ускорителя и не читаются из нее снова.
- Значение: в идеальной цепочке из поэлементных операций над одним и тем же тензором размером байт отдельные ядра могут переместить около , тогда как слитое ядро может приблизиться к , сохраняя промежуточные значения на кристалле. Реальный трафик также включает веса, кэши, выравнивание и выгрузки, поэтому профилирование должно подтвердить сокращение.
- Отличие: в отличие от прореживания, квантования или дистилляции слияние операторов не меняет параметры, точность или архитектуру модели. Оно меняет расписание выполнения математически эквивалентных операций, сохраняя выходы модели и улучшая задержку и пропускную способность на нагрузках, ограниченных памятью.
- Типичная ошибка: распространено заблуждение, что больше слияния всегда лучше. Слияние ограничено зависимостями данных, формами тензоров, давлением на регистры и емкостью кэша; чрезмерное слияние может снизить заполненность или вынудить выгрузки обратно в память, сведя выигрыш на нет.
Современные нейронные сети состоят из последовательностей операций: свертки, батч-нормализации, функций активации и поэлементных операций. При независимом выполнении каждая операция требует четыре шага:
- Загрузка входных тензоров из глобальной памяти
- Вычисление
- Запись выходных тензоров обратно в глобальную память
- Запуск следующего ядра
Цикл «чтение — вычисление — запись» создает узкие места пропускной способности памяти для операций с малой арифметической интенсивностью (FLOP/байт). Для идеальной последовательности из операций над одним и тем же промежуточным тензором размером байт трафик без слияния равен: где каждая операция читает и записывает промежуточный тензор. Если последовательность законно сливать и промежуточные значения остаются на кристалле, трафик может приблизиться к: поскольку промежуточный вход читается один раз, а итоговый выход записывается один раз. Веса, вспомогательные входы, эффекты кэша и выгрузки регистров выходят за пределы этой простой оценки. Тем не менее несколько паттернов вывода приближаются к ней достаточно близко, чтобы слияние имело значение.
Слияние свертки, батч-нормализации и ReLU
Распространенный паттерн Conv-BN-ReLU в «Слияние Conv-BN-ReLU» может заменить три запуска и промежуточные возвраты одним слитым путем, когда компилятор может законно свернуть батч-нормализацию и объединить активацию.
Слияние Conv-BN-ReLU: объединение трех операций в одно ядро сокращает трафик памяти с 6 передач до 2 и устраняет промежуточные записи в память.
# Псевдокод: API среды выполнения и законность слияния
# зависят от реализации.
# === БЕЗ СЛИЯНИЯ: 3 запуска ядер, 6 передач памяти ===
conv_out = conv2d(input, weight)
bn_out = batch_norm(conv_out, ...)
relu_out = relu(bn_out)
# === СО СЛИЯНИЕМ: 1 запуск ядра, 2 передачи памяти ===
def conv_bn_relu_fused(input, weight, gamma, beta, mean, var):
# Читаем вход и веса один раз
conv = conv2d(input, weight)
# Применяем батч-норм в регистрах (без записи в память)
bn = gamma * (conv - mean) / sqrt(var + eps) + beta
# Применяем ReLU в регистрах (без записи в память)
output = relu(bn)
# Записываем итоговый результат один раз
return output
Слияние операторов сокращает число передач памяти с шести до двух.
Арифметические операции остаются теми же, но трафик памяти падает с 6 передач до 2 (сокращение в 3 раза). Для слоя ResNet-50 с 256 каналами и пространственным размером это устраняет промежуточного трафика памяти на слой.
Тот же принцип распространяется за пределы CNN. Слияние GEMM с смещением и активацией устраняет промежуточные записи в линейных слоях трансформера, вычисляя поэлементные операции в регистрах сразу после каждого элемента выхода матричного умножения. Тайлинг внимания, как в FlashAttention,22 сокращает трафик HBM, обрабатывая внимание блоками размером с SRAM и не материализуя полную матрицу внимания , как подробно описано в разделе «FlashAttention: оптимизация внимания с учетом ввода-вывода».
Анализ пропускной способности памяти количественно оценивает эти выгоды слияния. Рассмотрим последовательность Conv-BN-ReLU над картой признаков (802,8 КБ). Без слияния каждая операция совершает собственный возврат в память: свертка читает вход (802,8 КБ) плюс веса (2,4 МБ) и записывает выход (802,8 КБ), всего 4 МБ. Затем BN читает этот выход, добавляет свои параметры (2 КБ) и записывает снова, что дает 1,6 МБ. ReLU повторяет эту схему еще на 1,6 МБ. Общий трафик памяти без слияния составляет 7,2 МБ. При слиянии вся последовательность читает вход и веса один раз и записывает итоговый выход один раз, требуя всего 4 МБ — сокращение пропускной способности на 44,5 процента.
При смоделированной пропускной способности HBM 900 ГБ/с эти объемы трафика подразумевают идеальные нижние границы 8 мкс до слияния и 4,5 мкс после слияния, то есть отношение 1,8 раза только для компонента трафика. Это не полные задержки слоя, потому что нужно учитывать также вычисления свертки, эффекты кэша и накладные расходы запуска.
Как показывает «Иллюстративная выгода от слияния операторов по нагрузкам», выгода от слияния зависит от нагрузки. Наибольшую пользу получают операции, ограниченные памятью, тогда как операции, ограниченные вычислениями, почти не улучшаются.
| Нагрузка | Относительная выгода от слияния | Почему |
|---|---|---|
| Поэлементные операции | Высокая | Сильно ограничены памятью, низкая арифметическая интенсивность |
| Паттерны Conv-BN-Act | Умеренная | Смешанные характеристики памяти и вычислений |
| Операции на основе GEMM | Низкая | Ограничены вычислениями; слияние сокращает хвост, ограниченный памятью |
| Механизмы внимания | Высокая | Длинные последовательности умножают избегаемый трафик промежуточных матриц внимания |
Иллюстративная выгода от слияния операторов по нагрузкам: нагрузки, ограниченные памятью, обычно выигрывают больше, чем ограниченные вычислениями; реальный выигрыш зависит от графа, среды выполнения, формы последовательности и аппаратуры.
Слияние также сокращает накладные расходы запуска ядер. Каждый запуск ядра CUDA несет задержку порядка микросекунд. В гипотетическом графе с пятьюдесятью тремя подходящими тройками Conv-BN-ReLU выполнение без слияния запускает 159 ядер, тогда как выполнение со слиянием запускает 53 ядра, экономя повторные накладные расходы запуска в дополнение к трафику памяти. ResNet-50 не содержит пятидесяти трех прямых троек, потому что остаточные сложения прерывают многие такие паттерны.
Реализация слияния охватывает весь программный стек: от сопоставления паттернов на уровне фреймворка через оптимизацию компилятора, такую как Accelerated Linear Algebra (XLA), TVM и TensorRT, до слияния во время выполнения, которое адаптируется к формам входов и характеристикам аппаратуры. Процесс становится выполнимым, когда фреймворк может экспортировать или трассировать соответствующее вычисление как граф, узлы которого — тензорные операции, а ребра фиксируют зависимости данных. Компилятор может затем сопоставить законные паттерны, такие как Conv→BN→ReLU, и переписать их как слитые операции, проверяя формы, алиасы и числовые ограничения. Динамический управляющий поток, модификация на месте или неподдерживаемые операции могут помешать такой перезаписи графа, поэтому экспортированный план нужно проверять, а не предполагать. Раздел «Слияние ядер» главы «Аппаратное ускорение» подробно разбирает измерения слияния, относящиеся к компилятору и аппаратуре, включая давление на регистры, сопоставление графов и компромиссы для конкретных платформ GPU, TPU и периферийных ускорителей.
Тогда как слияние операторов минимизирует перемещение данных между статическими этапами конвейера, адаптивные вычисления ставят под сомнение допущение, что каждый вход требует полной глубины или ширины вычислительного графа. Модулируя активные подсети в зависимости от сложности входа или бюджетов времени выполнения, системы обменивают детерминированные расписания выполнения на меньшую усредненную задержку и энергию.
Методы адаптивных вычислений
Проектирование архитектуры с учетом аппаратуры и слияние операторов оптимизируют фиксированный граф выполнения: при отсутствии управления, зависящего от входа, каждый вход проходит одинаковый запланированный путь. На статических графах Алгоритм навязывает Машине неизменную вычислительную нагрузку: 24-слойный трансформер выполняет одинаковые операции MAC и выгружает весь объем параметров из HBM или внешней DRAM как для очевидного, легко классифицируемого примера, так и для неоднозначного. Адаптивный вывод заменяет этот разомкнутый конвейер управляющим контуром, зависящим от входа: промежуточные представления или бюджеты времени выполнения определяют динамические решения, которые прекращают выполнение или направляют активации через специализированные подсети. Хотя динамические пути могут снижать среднее число арифметических операций и трафик памяти, они вводят накладные расходы времени выполнения на логику маршрутизации, управление батчами, калибровку уверенности и разброс задержки.
Динамические схемы
Поскольку входные данные имеют неравномерную семантическую сложность, выделение неизменного вычислительного бюджета тратит пропускную способность памяти и такты выполнения на простые примеры. Динамические схемы модулируют пути выполнения, чтобы снизить усредненные вычисления, сохраняя глубокую сеть для наихудших входов. Эта архитектурная гибкость охватывает четыре основные управляющие переменные: глубину сети (раннее завершение), структурную маршрутизацию (условный пропуск слоев), подсети-эксперты (смесь экспертов) и непрерывное распределение вычислений.
Для управления глубиной выполнения архитектуры раннего выхода прикрепляют вспомогательные классификационные головы к промежуточным слоям и прекращают выполнение, когда промежуточные представления дают достаточную уверенность предсказания (Teerapittayanon et al., 2017). BranchyNet реализует этот механизм в сверточных магистралях с помощью мелких ветвей выхода, тогда как многовыходные визуальные трансформеры прикрепляют линейные пробы и оценщики энтропии между блоками трансформера (Xin et al., 2021). Когда вход удовлетворяет критерию выхода, например энтропия предсказания softmax опускается ниже заранее настроенного порога, среда выполнения прекращает вычисления и возвращает промежуточное предсказание. Чистая операционная выгода требует, чтобы арифметические операции и передачи памяти, которых удалось избежать в последующих слоях, превышали вычислительные накладные расходы на оценку промежуточных классификаторов и пороговых фильтров.
Системный компромисс резко различается на разных целевых платформах развертывания. На периферийных процессорах с одним примером (размер батча , типично для микроконтроллеров и мобильных NPU) раннее завершение немедленно прекращает поток выполнения (Hu et al., 2020). Пропуск оставшихся слоев устраняет как арифметические операции, так и транзакции DRAM вне кристалла, необходимые для загрузки весов последующих слоев в кэш SRAM на кристалле. И наоборот, на параллельных ускорителях пропускной способности (GPU и TPU), обрабатывающих батчи (), раннее завершение вводит серьезную фрагментацию батча (Chen et al., 2024). Если только часть примеров в батче достигает порога выхода, остальные все равно должны пройти более глубокие слои. Если только среда выполнения не выполняет динамическое уплотнение батча — сбор нерешенных тензоров активаций в непрерывный буфер памяти с помощью копирований и синхронизаций ядер, — неактивные примеры остаются выделенными в памяти, либо ускорителю приходится маскировать неактивные полосы SIMD или SIMT. Следовательно, задержка хвоста батча определяется самым глубоким проходящим примером. «Архитектура раннего выхода» показывает этот конвейер решений: каждый промежуточный блок оценивает оценщик уверенности, прежде чем направить нерешенные представления в последующие слои.
Архитектура раннего выхода: слои трансформера динамически регулируют вычисления, классифицируя выход каждого слоя и разрешая раннее завершение при достаточной уверенности, что снижает среднюю задержку и мощность, когда многие входы могут выйти до последнего слоя. Источник: (Xin et al., 2021).
Помимо усечения глубины выполнения вдоль одного линейного конвейера, условные вычисления динамически модулируют топологическую маршрутизацию активаций через граф сети (Bengio et al., 2015). Вместо выполнения каждого блока в заранее заданной последовательности функции управления оценивают тензоры активаций, чтобы обойти остаточные слои, изменить ядра операторов или выбрать специализированные функциональные блоки. Это превращает статический ориентированный ациклический граф (DAG) в динамический граф, зависящий от входа.
Архитектурные реализации нацелены на разные структурные гранулярности. SkipNet использует легковесные рекуррентные или прямые контроллеры затворов, чтобы условно обходить остаточные блоки в сверточных сетях, сохраняя полную глубину сети только для вычислительно сложных входов (Wang et al., 2018). Динамические сети фильтров генерируют зависящие от образца веса сверточных фильтров непосредственно из входа, изменяя шаблоны извлечения признаков напрямую, а не пропуская статические веса (Jia et al., 2016). Капсульные сети используют итеративную маршрутизацию по согласию, чтобы направлять низкоуровневые векторы признаков к совместимым высокоуровневым капсулам (Sabour et al., 2017). С точки зрения системного оборудования условная маршрутизация дает реальное ускорение только тогда, когда такты, сэкономленные за счет обхода операторов, превосходят задержку на вычисление сети затворов, синхронизацию управления между хостом и устройством и управление нескомпонованными обращениями к памяти.
Масштабирование плотных трансформерных моделей жестко связывает емкость параметров с вычислениями с плавающей точкой на токен: увеличение емкости модели заставляет каждый токен вычислять против каждой матрицы весов, что повышает и арифметическую нагрузку, и требования к пропускной способности памяти. Архитектура смеси экспертов (MoE) отделяет емкость параметров от вычислений на токен, заменяя плотные полносвязные сети прямого распространения (FFN) банком параллельных подсетей-экспертов, которыми управляет параметризованный маршрутизатор (Shazeer et al., 2017). Switch Transformer от Google23 масштабирует этот принцип разреженной маршрутизации, направляя каждый токен к одному эксперту (), что резко снижает накладные расходы на коммуникацию по сравнению с маршрутизацией top- (Fedus et al., 2022).
Такая разреженная активация создает фундаментальный компромисс между пропускной способностью памяти и емкостью на аппаратных ускорителях. Пока токен выполняет арифметику только над долей общих параметров экспертов, все матриц экспертов должны оставаться резидентными в памяти устройства (HBM или SRAM). При малых операционных размерах батча, например при однопоточной авторегрессивной генерации, маршрутизация расходящихся токенов к разным экспертам дробит матрично-матричные умножения () на матрично-векторные операции () с низкой арифметической интенсивностью, что приводит к насыщению пропускной способности памяти. Кроме того, неравномерное распределение токенов создает вычислительные горячие точки: перегруженные эксперты отбрасывают токены сверх своего коэффициента емкости, а недозагруженные эксперты оставляют конвейеры тензорных ядер простаивать.
Разреженные архитектуры смеси экспертов заменяют монолитные полносвязные сети (FFN) динамически маршрутизируемыми подсетями. Сравните структуру блока трансформера слева на «Архитектура Switch Transformer» с расширенным маршрутизатором затворов справа: каждый входной токен активирует только один экспертный блок FFN.
Архитектура Switch Transformer: замена плотных полносвязных слоев слоем коммутируемой FFN (слева) обеспечивает разреженную условную маршрутизацию. Сеть затворов направляет каждый токен к одному эксперту (справа) из большого пула, отделяя общую емкость модели (параметры) от стоимости вычислений на токен (FLOP). Источник: (Fedus et al., 2022).
Поскольку маршрутизатор лежит на критическом пути выполнения, среда выполнения ускорителя должна динамически распределять и собирать активации между экспертными блоками, не вызывая задержек синхронизации между хостом и устройством. На архитектурах SIMD и SIMT, таких как GPU и TPU, эффективное выполнение разреженных экспертных слоев требует перестановки токенов: токены, назначенные одному эксперту, собираются в непрерывные тайлы памяти, чтобы поддерживать высокую загрузку тензорных ядер при последующих матричных умножениях (Lepikhin et al., 2021). Если распределение маршрутизации сильно перекошено, буферы токенов популярных экспертов переполняют фиксированные выделения емкости, и системе приходится либо обрезать токены (что ухудшает представления), либо запускать неравномерные ядра, оставляя параллельные векторные полосы простаивать.
Хотя раннее завершение и маршрутизация MoE делают дискретный выбор ветвей, адаптивный вывод может работать и непрерывно, постепенно модулируя глубину или число итераций в зависимости от сложности задачи в реальном времени (Yang et al., 2020). Быстрые нейронные сети динамически подстраивают число активных слоев согласно оценщикам сложности во время выполнения (Wu et al., 2019), а динамическое масштабирование слоев распределяет вычисления постепенно, пока неопределенность выхода не опустится ниже калиброванного порога. Рассмотрим встроенную систему зрения, обрабатывающую поток данных с датчиков: кадры с высоким контрастом и четкой геометрией дороги разрешаются минимальным префиксом слоев извлечения признаков, тогда как ухудшенные кадры с перекрытыми препятствиями запускают более глубокие рекуррентные блоки обработки. Физический системный выигрыш реализуется, только если оценка управления остается вычислительно легковесной, а среда выполнения параллельно планирует кадры с согласованной глубиной выполнения, чтобы поддерживать высокую загрузку аппаратуры.
Проблемы реализации
Реализация выигрышей эффективности адаптивных вычислений требует преодоления критических проблем на уровне обучения модели, оркестровки времени выполнения и выравнивания с аппаратурой. Во время обучения дискретные решения маршрутизации (например, недифференцируемый выбор ) ломают стандартное обратное распространение. Практикам приходится применять непрерывные релаксации, такие как оценщик Gumbel-Softmax, градиенты политики обучения с подкреплением или вспомогательные потери балансировки нагрузки, чтобы предотвратить коллапс маршрутизации, когда маршрутизатор перегружает один эксперт или один выход (Shazeer et al., 2017).
Во время выполнения ветвление потока управления фундаментально противоречит модели параллельного выполнения с синхронизацией блоков, характерной для современных ускорителей. Когда параллельные потоки внутри варпа GPU сталкиваются с расходящимися ветвями выполнения, аппаратура сериализует выполнение ветвей и маскирует неактивные потоки, что сводит на нет теоретическое сокращение FLOP. Кроме того, вычисление сетей затворов вводит управляющие зависимости, которые препятствуют слиянию операторов, вносят барьеры синхронизации между хостом и устройством и требуют промежуточных копий памяти для перестановки токенов. Если эти накладные расходы на диспетчеризацию превышают время вычислений, сэкономленное пропуском слоев, динамическая модель демонстрирует более высокую сквозную задержку, чем плотная базовая модель. Раздел «Динамическое выполнение ядер» главы «Аппаратное ускорение» рассматривает аппаратно-ориентированные стратегии времени выполнения, включая неравномерный батчинг и очереди динамического запуска ядер, предназначенные для управления такими шаблонами выполнения.
Помимо эффективности систем, динамическое управление вводит серьезные режимы отказа по качеству и безопасности. Поскольку политики затворов направляют входы на основе статистических эвристик, плохо откалиброванные затворы систематически недораспределяют вычисления в редкие хвосты распределения, ухудшая точность предсказаний именно в критичных для безопасности граничных случаях. Кроме того, вычисления, зависящие от входа, создают поверхность атаки: состязательные возмущения могут намеренно манипулировать затворами маршрутизации, вызывая атаки на отказ в качестве (принудительно направляя входы в усеченные ранние выходы, где они ошибаются) или атаки на отказ в обслуживании (принудительно направляя все входы в максимально глубокие или несбалансированные пути, чтобы насытить очереди ускорителя). Следовательно, оценка адаптивных моделей не может опираться только на средние числа FLOP. Строгое системное профилирование должно сообщать гистограммы распределения путей, задержку хвоста (P99), точность, разбитую по сложности входа, и стабильность пропускной способности при динамическом батчинге. Там, где динамические вычисления решают, выполнять ли определенные операции, использование разреженности отвечает на дополняющий вопрос: как ускорить вычисления, когда многие операнды равны нулю.
Использование разреженности
Напомним, что прореживание (из раздела «Прореживание») вводит нули в матрицы весов. Использование разреженности спрашивает, как ускорить вычисления, когда эти нули присутствуют. Прореживание создает нули или удаляет структуру; разреженные форматы могут сокращать хранение, а соответствующие ядра — вычисления. Разреженность24 в машинном обучении — это состояние, при котором значительная часть элементов тензора, например матриц весов или тензоров активаций, равна нулю или близка к нулю.
Формально для разреженной матрицы весов коэффициент разреженности можно записать так: где — индикаторная функция, которая равна единице, если элемент равен нулю, и нулю в остальных случаях, а — норма L0, которая считает число ненулевых элементов. Точный ноль представим в плавающей точке, но пороговые определения также объединяют значения малой величины, если метод прореживания считает их подлежащими удалению. Пороговый коэффициент разреженности имеет вид: где — малое пороговое значение.
Точная разреженность может возникнуть во время обучения благодаря регуляризации или быть введена намеренно прореживанием, которое принудительно обнуляет выбранные элементы. Она дает экономию памяти, вычислений или энергии, только если формат хранения и путь выполнения пропускают эти нули с меньшими накладными расходами, чем плотное выполнение. Эта оговорка особенно важна на устройствах с ограниченными ресурсами, где индексные метаданные и нерегулярные обращения потребляют ту же дефицитную пропускную способность и мощность.
Типы разреженности
Аппаратное решение начинается с шаблона нулей. Разреженность в нейронных сетях делится на две широкие категории: неструктурированную и структурированную разреженность.
Неструктурированная разреженность возникает, когда отдельные веса обнуляются без какого-либо определенного шаблона, обычно через прореживание по величине. Будучи очень гибкой, неструктурированная разреженность менее эффективна на аппаратуре, поскольку у нее нет предсказуемой структуры.25 Ее использование требует специализированных оптимизаций аппаратуры или программного обеспечения.
Структурированная разреженность удаляет регулярные группы, такие как фильтры, нейроны, каналы, блоки или фиксированные шаблоны внутри группы. Регулярность делает хранение и выполнение более предсказуемыми, но ускорение все равно зависит от того, поддерживает ли цель такую структуру и используют ли получающиеся формы ее вычислительные блоки эффективно. Поэтому она является кандидатом, а не автоматическим предпочтением, когда развертывание требует предсказуемого использования ресурсов.
Методы использования разреженности
Разреженная модель, в которой 90 процентов весов обнулены, все равно может работать почти с полной вычислительной стоимостью на аппаратуре, не предназначенной для нерегулярного доступа к памяти. Критический вопрос — как превратить теоретические нули в реальное ускорение. Процессор не может пропустить умножение, если не знает, что операнд равен нулю, а узнать это можно, только загрузив операнд из памяти. Преодоление этого разрыва требует специализированных методов использования и аппаратной поддержки, которые эффективно пропускают вычисления с нулевыми значениями (Hoefler et al., 2021). Работа Han et al. (2015) по прореживанию — канонический пример превращения плотных сетей в разреженные за счет удаления неважных связей, но ускорение на ускорителях зависит от того, соответствует ли получающийся шаблон разреженности аппаратно поддерживаемым форматам.
Самый простой метод использования — разреженная матричная операция, которая хранит ненулевые значения и использует их индексы, чтобы пропускать арифметику над нулями. Рассмотрим разницу: умножение плотной матрицы на вектор обычно требует 16 умножений, тогда как реализация с учетом разреженности вычисляет шесть ненулевых произведений, дополнительно обрабатывая разреженные метаданные:
Развертывание, таким образом, — не общее стремление к меньшему числу параметров, а выбор между представлениями, которые среда выполнения может выполнять эффективно. Низкоранговая аппроксимация, рассмотренная ранее в разделе «Низкоранговая факторизация», заменяет плотную матрицу меньшими плотными множителями, тогда как использование разреженности пропускает буквальные нулевые веса. Обучение с учетом разреженности и разреженный градиентный спуск могут помочь моделям выучить или сохранить шаблоны нулей, но ускорение во время выполнения появляется только тогда, когда развернутое представление использует форматы и ядра, которые пропускают нули. Поэтому следующий вопрос проектирования — не просто насколько разрежена матрица, а какова структура ее нулей.
Структурированные шаблоны
Чтобы получить реальное ускорение от разреженности, нужна аппаратура, которая эффективно пропускает вычисления с нулевыми значениями. Разные архитектуры процессоров по-разному справляются с разреженными шаблонами: например, разреженные тензорные ядра Ampere используют мелкозернистые структурированные шаблоны 2:4, тогда как систолическим массивам нужны плотные блочные структуры; аппаратная механика описана в разделе «Механика структурированной разреженности N:M» главы «Аппаратное ускорение». Программные библиотеки, такие как cuSPARSE, могут помочь преодолеть этот разрыв, переформулируя разреженные вычисления в шаблоны, которые текущая аппаратура обрабатывает эффективно. Например, MegaBlocks (Gale et al., 2022) переформулирует обучение разреженной смеси экспертов в блочно-разреженные операции, группируя работу «эксперт — токен» в плотные тайлы, чтобы специализированные ядра могли поддерживать высокую загрузку ускорителя несмотря на нерегулярные шаблоны разреженности.
Разреженный шаблон получает аппаратное ускорение, только если он достаточно регулярен, чтобы ядра могли его предсказать. Два заметных формата делают эту регулярность явной: блочно-разреженные матрицы и шаблоны разреженности N:M. Блочно-разреженные матрицы выделяют блоки нулевых и ненулевых плотных подматриц, так что операции над большой разреженной матрицей можно выразить как меньшее число плотных операций над подматрицами. Такая структура поддерживает более эффективное хранение плотных подматриц при сохранении совместимости форм для матричных или векторных произведений. Например, «Блочно-разреженное представление» показывает, как библиотека cuSPARSE от NVIDIA (NVIDIA, 2020) поддерживает блочно-разреженные матричные операции и хранение. Несколько других работ, например матрицы Monarch (Dao et al., 2022), опирались на этот подход блочной разреженности, чтобы добиться лучшего баланса между выразительностью матриц и эффективностью вычислений и памяти.
Блочно-разреженное представление: группировка ненулевых весов в плотные подблоки ( тайла) и хранение вспомогательного массива индексов позволяет вычислять разреженные матрицы регулярными ядрами GEMM над подблоками, восстанавливая высокое выравнивание памяти GPU и загрузку тензорных ядер. Адаптировано из документации NVIDIA cuSPARSE (NVIDIA, 2020).
Аналогично, разреженность : сохраняет не более ненулевых элементов в каждой группе из последовательных элементов; аппаратно ориентированное прореживание часто принудительно сохраняет ровно значений, чтобы у каждой группы было одинаковое представление (Zhou et al., 2021). Детерминированный формат позволяет поддерживаемому ядру предсказать расположение значений и метаданных, сохраняя при этом больше емкости, чем при удалении целых каналов или блоков. Эта регулярность создает выполнимый компромисс между произвольными масками и плотными вычислениями, но только для целей с соответствующим путем выполнения. Поскольку из каждого непрерывного блока из четырех элементов выбираются ровно два ненулевых значения, каждому сохраненному значению нужен лишь 2-битный индекс ( — ), чтобы записать его исходную координату внутри блока. Эти компактные метаданные добавляют лишь 16 бит накладных расходов на каждый отрезок строки из 16 элементов, что гораздо меньше многобайтовых массивов указателей, требуемых общими форматами CSR или COO, и позволяет тензорным ядрам потоково читать сжатые операнды без раздувания трафика памяти. «Умножение матриц с разреженностью 2:4» сравнивает плотное умножение и умножение 2:4, а STEP рассматривает обучение более общих масок : для вывода (Lu et al., 2023).
На уровне ускорителя действует то же правило, специфичное для шаблона: аппаратная поддержка — это контракт между разреженным форматом и путем выполнения.
Умножение матриц с разреженностью 2:4: слева — стандартное плотное умножение матриц на тензорных ядрах с полными строками из 8 элементов. Справа — разреженное умножение 2:4 сохраняет два ненулевых элемента в каждой группе из четырех и использует компактные индексы, чтобы выбрать соответствующие элементы из плотной правой матрицы. Поддерживаемый разреженный внутренний цикл может вдвое уменьшить число перемножаемых значений, хотя обработка метаданных и остальной путь выполнения определяют сквозное ускорение. Источник: блог PyTorch (PyTorch, 2022).
Поддерживаемые пути разреженных тензорных ядер на NVIDIA Ampere и более поздних архитектурах могут ускорять разреженность 2:4, пропуская предписанные нули и неся компактные метаданные, с идеальным улучшением арифметической скорости до 2 раз (NVIDIA Corporation, 2020). Напротив, неструктурированное прореживание обнуляет произвольные отдельные веса. Такие нерегулярные позиции могут нарушать объединение обращений к памяти и загрузку полос, а метаданные Compressed Sparse Row (CSR) или Coordinate (COO) добавляют хранение и обращения с шагом, отличным от единицы. Поэтому неструктурированная разреженная модель может работать медленнее плотного аналога, когда метаданные и недозагрузка перевешивают пропущенную арифметику. TPU служат полезным контрастным случаем для ускорения плотных систолических массивов (Jouppi et al., 2021), но ускорение разреженных вычислений все равно зависит от конкретного пути аппаратуры и программного обеспечения, а не принимает произвольные маски. Программируемые вентильные матрицы (FPGA) могут реализовать специфичные для приложения разреженные форматы, однако их эффективность зависит от выбранного потока данных и бюджета ресурсов; программируемость не гарантирует универсального ускорения разреженных вычислений.
На всех платформах разреженные операции могут снижать требования к пропускной способности памяти и энергопотребление, когда разреженное представление и ядра действительно пропускают перемещение данных, а не только арифметику. Эта выгода складывается с квантованием: разреженная модель INT8 может требовать меньше трафика памяти, чем любой из методов по отдельности, если накладные расходы формата достаточно малы (Hoefler et al., 2021; Gale et al., 2020).
Проблемы и ограничения
Неструктурированная разреженность окупается только после перехода через точку безубыточности, специфичную для аппаратуры и ядра.
Тот же контракт формата и аппаратуры объясняет, почему разреженность часто разочаровывает на практике. Центральная проблема — разрыв между теоретическим и практическим ускорением. Неструктурированное прореживание удаляет отдельные веса по их важности, создавая нерегулярные шаблоны, которые распространенные плотные пути ускорителей не могут использовать; пропуск этих нулей требует разреженного представления и совместимого ядра. Само прореживание добавляет стоимость обучения или анализа, поскольку выявление удаляемых весов может требовать сложной оценки важности на больших моделях. Даже после достижения разреженности форматы хранения добавляют индексы, накладные расходы которых могут перекрыть сэкономленные значения и арифметику. Раздел «Форматы разреженных матриц» приложения «Основы алгоритмов» подробно описывает раскладку сжатых разреженных строк и показывает, как ее метаданные на каждый ненулевой элемент делают выигрыш по памяти зависимым от плотности. Точка безубыточности по производительности зависит от формы тензора, разреженного формата, ядра, размера батча и аппаратуры; универсального порога разреженности не существует.
Компромисс между точностью и эффективностью требует измерения на разных уровнях разреженности. Модель может переносить один уровень с малым измеримым влиянием, а затем резко деградировать после сравнительно небольшого дополнительного шага прореживания. Рабочая точка — это наибольшая полезная разреженность, при которой и качество на задаче, и производительность при развертывании удовлетворяют своим порогам.
Энергетическая эффективность не гарантирована. Хотя разреженные операции сокращают арифметику, накладные расходы разреженной индексации и нерегулярного доступа к памяти могут увеличить энергопотребление на аппаратуре, не оптимизированной под разреженные шаблоны. На периферийных устройствах с жесткими энергетическими бюджетами эти накладные расходы могут перевесить выигрыш.
Наконец, выгода от разреженности зависит от слоя, модели и цели выполнения. Нагрузка, полезные тензоры которой остаются плотными, или цель без соответствующего разреженного пути может не получить улучшения и даже ухудшиться после учета накладных расходов на метаданные и нерегулярный доступ.
Комбинированные оптимизации
Прореживание, квантование, слияние операторов, динамические вычисления и разреженное выполнение разделяют веса, представления и физические ресурсы. Развертывание может сочетать их, когда один метод не может удовлетворить все ограничения, но комбинированный результат не гарантированно превосходит лучший отдельный метод. Каждое преобразование может изменить точность, формы, распределения и узкие места, предполагаемые следующим, поэтому комбинации требуют совместного измерения качества и производительности, а не обещанного коэффициента сжатия (Hoefler et al., 2021).
Взаимодействие разреженности и прореживания самое прямое: прореживание создает разреженность, но шаблон определяет аппаратную эффективность. Удаление целых фильтров или слоев может давать меньшие плотные формы, тогда как фиксированные шаблоны внутри групп могут отображаться на поддерживаемые разреженные ядра. Неструктурированное прореживание создает нерегулярные шаблоны, для реализации ускорения которым нужны специализированные форматы и ядра (Elsen et al., 2020; Gale et al., 2019).
Сочетание разреженности с квантованием может умножать сокращения сырого объема значений, но развернутое представление несет одновременно метаданные разреженности и квантования. GPU со специализированными разреженными тензорными ядрами могут ускорять поддерживаемые структурированные шаблоны, тогда как результаты на CPU зависят от выбранного формата, разреженного ядра низкой точности, формы тензора и накладных расходов индексации (NVIDIA Corporation, 2020; Hoefler et al., 2021; Gale et al., 2020).
Повторяющаяся тема всех комбинаций — согласование с аппаратурой. Эффективные архитектуры, такие как раздельные по глубине свертки (Howard et al., 2017), динамические вычисления и разреженность помогают, только если целевая аппаратура поддерживает получающиеся шаблоны операций (Hoefler et al., 2021). Выбор комбинаций техник требует понимания возможностей целевой платформы, как рассмотрено в главе «Аппаратное ускорение».
Проблемы координации, присущие сочетанию разреженности с другими методами, указывают на более широкий принцип: методы оптимизации редко срабатывают изолированно, а их эффективность зависит от решений о порядке применения и от согласования с аппаратурой.
Проблема композиции оптимизаций
Методы оптимизации взаимодействуют через общие представления и физические ресурсы, а не компонуются как независимые функции. Прореживание меняет распределение выживших значений, формы тензоров или разреженный формат; квантование добавляет масштабы и меняет доступные ядра; слияние меняет, какие промежуточные значения материализуются, и может изменить профиль, который обосновывал более ранние решения. Поэтому эффективная оптимизация рассматривает связку «модель — среда выполнения — аппаратура» как связанную систему, измеряет ее после каждого преобразования и пересматривает последовательность, когда появляется новое узкое место. Это делает сжатие задачей системной инженерии в той же мере, что и задачей машинного обучения.
Выбор техники
Выбор техник сжатия для промышленного развертывания требует определить связывающее физическое ограничение целевой среды выполнения. Рассмотрим развертывание трансформера, в котором параметры модели превышают память устройства в 3 раза, задержка вывода превышает целевой уровень обслуживания в 4 раза, а тепловой бюджет ограничивает рассеивание величиной не более 2 Вт в устойчивом режиме. Решение о том, квантовать ли, проредить, дистиллировать в компактную архитектуру или комбинировать несколько методов, зависит от того, какая аппаратная граница насыщена, какая потеря точности на задаче допустима и каков доступный бюджет обучения.
Три основных рычага оптимизации воздействуют на разные уровни системного стека. Дистилляция меняет алгоритмическую архитектуру, обучая компактного плотного ученика имитировать большего учителя; он эффективно выполняется на стандартной аппаратуре без специальной поддержки среды выполнения. Прореживание меняет топологию тензоров и шаблоны операций, но дает ускорение по реальному времени, только если получающаяся разреженность совпадает с блоками выполнения аппаратуры, например с ядрами структурированной разреженности или подматрицами, выровненными по каналам. Квантование меняет представление данных, уменьшая разрядность чисел; оно непосредственно снижает трафик шины памяти и занятость кэша, одновременно задействуя целочисленные пути данных с более высокой пропускной способностью. «Компромиссы техник оптимизации» суммирует компромиссы первого порядка между этими техниками по риску для качества, стоимости обучения и зависимости от аппаратуры.
| Техника | Основная цель | Риск для качества | Стоимость обучения | Зависимость от аппаратуры | Сценарий применения |
|---|---|---|---|---|---|
| Прореживание | Снизить FLOP и размер | Зависит от шаблона | Часто включает дообучение | Высокая для ускорения разреженности | Удаляемые структуры или веса |
| Квантование | Снизить байты и точность | Зависит от разрядности | Низкая для PTQ; выше для QAT | Высокая для скорости выполнения | Путь, ограниченный памятью или пропускной способностью |
| Дистилляция | Обучить меньшую модель | Зависит от ученика | Работают учитель и ученик | Низкая для плотного выполнения | Возможен новый прогон обучения |
Компромиссы техник оптимизации: строки определяют кандидатов первого порядка, а не гарантированные результаты. Риск для качества и стоимость обучения зависят от модели и метода, а зависимость от аппаратуры определяет, меняет ли прореживание или квантование задержку. Прореживание может удалять структуру или создавать разреженные тензоры, квантование напрямую уменьшает число байтов значений, а дистилляция тратит вывод учителя и прогон обучения ученика, чтобы получить обычную плотную модель. Кандидат все равно нужно оценивать по той же задаче и порогам развернутой системы.
Сопоставление ограничений с техниками
Связывающее аппаратное ограничение определяет, какое семейство оптимизации нужно развернуть первым. В таксономии D·A·M методы сжатия перераспределяют потребности в ресурсах между Алгоритмом (топология сети и структурное прореживание), Данными (числовая точность и калибровочные наборы) и Машиной (блоки выполнения и иерархии памяти). «Измерения оптимизации» сопоставляет каждое системное ограничение с основным измерением оптимизации, способным его ослабить.
| Системное ограничение | Представление модели | Числовая точность | Архитектурная эффективность |
|---|---|---|---|
| Вычислительная стоимость | ✓ | ✓ | |
| Память и хранение | ✓ | ✓ | |
| Задержка и пропускная способность | ✓ | ✓ | |
| Энергоэффективность | ✓ | ✓ | ✓ |
| Масштабируемость | ✓ | ✓ |
Измерения оптимизации: системные ограничения направляют оптимизацию по трем основным измерениям — представлению модели, числовой точности и архитектурной эффективности, — каждое из которых устраняет свои ограничения ресурсов и цели производительности. ✓ отмечает прямой рычаг, а — выгоду, зависящую от нагрузки или аппаратуры; например, арифметика низкой точности помогает, только когда ускоритель и среда выполнения предоставляют поддерживаемый путь.
Эти измерения взаимодействуют через железный закон ML-систем: одна оптимизация часто сдвигает сразу несколько физических узких мест. Например, квантование весов из FP32 в INT8 напрямую снижает требования к емкости хранения на устройстве. Однако его влияние на задержку вывода зависит от операционной интенсивности: для операторов, ограниченных пропускной способностью памяти, сокращение передаваемых байтов дает пропорциональное снижение задержки; для операторов, ограниченных вычислениями, задержка улучшается, только если базовый процессор предоставляет более высокую пиковую пропускную способность INT8 и среда выполнения избегает накладных расходов на деквантование. И наоборот, неструктурированное прореживание устраняет арифметические FLOP, не снижая задержку на стандартных ускорителях, поскольку накладные расходы разреженной индексации и неслитые обращения к памяти ухудшают эффективность пропускной способности памяти.
Схема принятия решений
Когда связывающим ограничением развертывания становится постоянная память или емкость памяти устройства — например, ограничения на размер пакета для обновления по воздуху или бюджет флеш-памяти микросхемы, — квантование дает самое прямое сокращение полезной нагрузки. По сравнению с хранением FP32 посттренировочное квантование INT8 (PTQ) сокращает сырое хранение весов в 4 раза без циклов переобучения. INT4 сокращает сырую полезную нагрузку в 8 раз, хотя агрессивное снижение разрядности повышает риск деградации точности. Если равномерное низкоразрядное квантование вызывает неприемлемую потерю точности в чувствительных слоях, дистилляция знаний в меньшую плотную архитектуру с последующим умеренным квантованием сохраняет точность и при этом удовлетворяет бюджету хранения.
Когда задержка ограничена вычислениями, нагрузка работает выше точки перехода по арифметической интенсивности ускорителя, насыщая блоки выполнения. Устранение этого узкого места требует уменьшить число выполняемых операций или повысить пропускную способность арифметики. Структурное прореживание удаляет каналы, головы внимания или целые слои, давая меньшие плотные матрицы, которые выполняются на стандартных библиотеках без накладных расходов разреженной среды выполнения; однако прореживание до размерностей, не совпадающих с размерами варпов или тайлов аппаратуры (например, с числом каналов, не делящимся на 8 или 16), снижает эффективность тензорных ядер и уменьшает выигрыш по реальному времени. Если целевая платформа предоставляет выделенные целочисленные блоки выполнения, квантование INT8 повышает скорость выполнения инструкций и напрямую ускоряет ядра, ограниченные вычислениями. Архитектуры раннего выхода дают альтернативный алгоритмический путь, динамически прекращая вывод на более простых входах, при условии что накладные расходы маршрутизации и синхронизации конвейера не нарушают пакетную обработку.
Генерация трансформера с малым батчем создает совсем другое узкое место: авторегрессивное декодирование ограничено пропускной способностью памяти, а не вычислениями. Генерация каждого токена требует загрузки больших матриц параметров из HBM или внешней DRAM для выполнения операций матрично-векторного умножения с операционной интенсивностью примерно один FLOP на байт. Поскольку арифметические блоки простаивают в ожидании передач памяти, квантование только весов (например, веса INT4 или INT8 в паре с активациями FP16) дает ускорение задержки примерно пропорционально сокращению числа загружаемых байтов весов. Это преимущество пропускной способности сохраняется, пока трафик KV-кэша, накладные расходы ядер деквантования в регистрах или большие одновременные размеры батча не вернут операционную интенсивность в режим, ограниченный вычислениями.
Когда связывающим ограничением становятся энергия или тепловое рассеивание, квантование дает существенный выигрыш, потому что перемещение данных по шинам внешней памяти расходует на бит на порядки больше энергии, чем арифметика на кристалле или доступ к локальной SRAM. Снижение разрядности операндов напрямую уменьшает энергию заряда емкости шины, а целочисленные АЛУ потребляют меньше энергии переключения, чем тракты с плавающей точкой. Структурное прореживание усиливает эту экономию, полностью устраняя операции и обращения к памяти. Аудиты энергопотребления всей системы все равно должны измерять периферийные компоненты, включая обновление памяти, обмен по шине хоста и статическую утечку в простое, чтобы убедиться, что экономия энергии на уровне ядер переходит в увеличение времени работы.
Выбор также зависит от инженерного и вычислительного бюджета, доступного для оптимизации. Посттренировочное квантование служит исходной базовой линией, потому что откалиброванное PTQ требует лишь небольшого репрезентативного набора данных и пренебрежимо малых вычислений. Если PTQ не проходит порог точности и есть ресурсы на дообучение, квантование с учетом обучения (QAT) моделирует ошибку квантования во время обратного прохода, чтобы вернуть потерянную точность. Дистилляция знаний влечет более высокие вычислительные затраты: нужны прямые проходы учителя и значительные циклы обучения, чтобы оптимизировать меньшую модель-ученика. NAS с учетом аппаратуры занимает самый дорогой уровень и оправдан только тогда, когда массовое развертывание амортизирует большие вычислительные затраты на исследование пространства архитектурного поиска.
Проверка того, что выбранная техника достигает целевой производительности, требует систематического профилирования и измерения на целевом кремнии («Измерение эффективности»). Реальные развертывания редко опираются на одну изолированную оптимизацию: сочетание прореживания, квантования и дистилляции вводит межслойные взаимодействия, которые диктуют строгие протоколы последовательности.
Стратегии оптимизации
Ограничения промышленного развертывания редко позволяют опираться на изолированную оптимизацию. Чтобы уместить языковую модель на 110 миллионов параметров в мобильный бюджет памяти и тепла, требуется сочетать структурное прореживание, дистилляцию знаний и квантование точности. В этом смоделированном мобильном конвейере поэтапная оптимизация сокращает объем BERT-Base с 440 МБ до 28 МБ, достигая сокращения сырого объема в 16 раз. Каждый этап устраняет свое узкое место в иерархии D·A·M: структурное прореживание убирает избыточные матричные умножения, чтобы сократить арифметику, дистилляция знаний направляет компактного ученика на восстановление представительной емкости, а квантование упаковывает веса и активации в целые меньшей разрядности, снимая нагрузку на пропускную способность памяти.
Мобильный конвейер развертывания BERT-Base
Сценарий: смоделированное развертывание запускает языковую модель BERT-Base на 110 миллионов параметров на мобильном оборудовании с ограниченными ресурсами (Sanh et al., 2019).
Диагностика: применение техник сжатия в произвольном порядке ухудшает качество представлений. Если квантование INT8 идет раньше прореживания, последующее удаление весов нарушает откалиброванные масштабы и нулевые точки, увеличивая потерю точности до 2,1 процента. Постановка структурного прореживания и дистилляции до квантования стабилизирует распределение весов.
Системный урок: в этом смоделированном конвейере последовательное структурное сокращение, дистилляция и квантование с учетом обучения дают снижение объема в 16 раз (440 МБ до 28 МБ), ограничивая потерю точности на задаче 0,6 процента. Поскольку распределения тензоров и эффективность аппаратных ядер различаются между архитектурами, каждый промежуточный артефакт нужно профилировать на целевой среде выполнения.
Порядок имеет значение, потому что эти преобразования взаимодействуют через общие параметры и распределения активаций. Структурное прореживание удаляет каналы или головы внимания, меняя динамический диапазон и дисперсию оставшихся тензоров весов. Если сначала квантовать модель, последующее прореживание весов обнуляет значения, которые определяли откалиброванный масштабный коэффициент и нулевую точку, искажая дискретную сетку. Кроме того, вычисление градиентов для квантованных целочисленных весов при дообучении вносит серьезные ошибки дискретизации. Выполнение структурного прореживания сначала в плавающей точке позволяет сети адаптировать оставшиеся параметры. Затем дистилляция переносит представления из плотного учителя в ученика, восстанавливая потерянную точность до того, как квантование с учетом обучения (QAT) зафиксирует окончательные параметры в дискретных ячейках. «Методы сжатия в одной из опубликованных постановок» иллюстрирует эти компромиссы для техник сжатия, оцененных на бенчмарках компьютерного зрения (Han et al., 2016). Пока разложение по сингулярным значениям (SVD) и одно прореживание резко теряют точность при больших коэффициентах сокращения, сочетание прореживания с квантованием дает наибольшее сжатие при точности, близкой к базовой. Порядок и величина этих выигрышей остаются специфичными для модели и среды выполнения, поэтому инженерам нужно проверять каждый этап преобразования отдельно.
Методы сжатия в одной из опубликованных постановок: цитируемое сравнение показывает изменение точности в зависимости от отношения размеров модели для прореживания, квантования, их комбинации и SVD. В этой постановке прореживание плюс квантование достигает наименьшего отношения размера при точности, близкой к базовой; порядок зависит от модели и реализации. Источник: (Han et al., 2016).
Совокупное сокращение объема на бумаге не гарантирует пропорционального ускорения выполнения на аппаратуре. Прореженные размерности могут не совпадать с шириной векторов SIMD, а квантованные тензоры требуют поддерживаемых аппаратных ядер, чтобы избежать накладных расходов на деквантование. Проверка того, что многоэтапный конвейер оптимизации достигает целевых показателей задержки, памяти и энергии, требует систематического профилирования и измерения на целевом кремнии («Измерение эффективности»).
Измерение эффективности
Раздел «Архитектурная эффективность» проследил разрыв между коэффициентом сжатия на бумаге и ускорением, которое модель реально получает. Этот разрыв задает обязательство эмпирического измерения. Хотя INT8 сокращает сырую полезную нагрузку тензоров в 4 раза относительно FP32, ускорение задержки не масштабируется пропорционально. Реальная пропускная способность зависит от ограничений иерархии памяти, арифметической интенсивности и реализации целевых ядер, которые номинальные коэффициенты сжатия предсказать не могут. Чтобы перевести теоретическое сжатие в реальное ускорение, нужно определить, какие физические узкие места управляют каждым компонентом модели, установить многомерные базовые линии на целевой аппаратуре и выделить, как сокращения арифметики взаимодействуют с накладными расходами системного уровня.
Профилирование и анализ возможностей
Профилирование раскладывает выполнение модели по физическим границам ускорителя: емкость памяти (SRAM, DRAM/HBM), пропускная способность шины памяти и пропускная способность арифметики. Выделение памяти делится на статический объем (тензоры весов и постоянные буферы) и динамическое выделение (тензоры активаций и KV-кэши во время прямого прохода). Статический объем определяет, помещаются ли параметры модели в быструю встроенную память или в DRAM устройства без выгрузки через соединения хост — ускоритель с высокой задержкой, такие как PCIe. Динамическое выделение определяет пиковую занятость памяти, ограничивая максимальный размер батча и параллелизм обслуживания. На уровне операторов профилирование измеряет теоретические операции (FLOP) вместе с реальным временем выполнения. Поскольку операторы различаются на порядки по арифметической интенсивности (), их узкие места выполнения расходятся: плотные матричные умножения насыщают блоки выполнения, тогда как операторы, ограниченные памятью (например, нормализация слоя и поэлементные активации), простаивают в ожидании потоковой передачи тензоров в память и из нее, расходуя реальное время несоразмерно своему числу FLOP.
Профиль Vision Transformer (ViT) на периферийном ускорителе иллюстрирует эту операционную неоднородность. Слои проекций внимания составляют 65 процентов всех FLOP, нормализация слоя занимает 8 процентов времени выполнения, хотя дает лишь 2 процента FLOP, а финальная голова классификации — 1 процент вычислений, но занимает 15 процентов памяти параметров. Профилирование выделяет управляющее физическое узкое место для каждого компонента, диктуя точечные оптимизации, а не равномерное сжатие: структурное прореживание ослабляет вычислительно ограниченные проекции внимания, слияние операторов устраняет промежуточные обращения к глобальной памяти для ограниченных памятью слоев нормализации, а квантование INT8 сокращает статический объем тяжелой по параметрам головы классификации.
Сквозной потолок сжатия достигается, когда работа вне модели доминирует в конвейере.
Перевод метрик профилирования на уровне слоев в сквозное системное ускорение требует учета полного конвейера обслуживания. В промышленных системах обслуживания выполнение модели часто составляет лишь долю общей задержки, а остальное занимают декодирование изображений, токенизация, десериализация RPC или передача по сети. Как показывает рисунок выше, оптимизация модели в изоляции упирается в потолок Амдала, когда этапы вне модели доминируют в бюджете задержки.
Снижение FLOP не означает пропорционального ускорения
Снижение FLOP модели на 50 процентов не гарантирует снижения задержки на 50 процентов. Операции, ограниченные памятью, мало выигрывают от сокращения арифметики, потому что их время задает перемещение данных, а не умножение. Критически важно, что закон Амдала применяется на системном уровне (раздел «Закон Амдала и закон Густафсона» приложения «Основы машины» выводит его форму сильного масштабирования): если вывод модели составляет лишь 20 процентов сквозной задержки (остальные 80 процентов уходят на загрузку данных, предобработку и постобработку), то даже идеальная оптимизация модели дает не более чем в 1,25 раза общего ускорения. Токенизация и передача по сети могут занимать внемодельную долю в обслуживании языковых моделей; декодирование изображений, изменение размера и нормализация могут делать то же в конвейерах зрения. Профилируйте полный путь на целевой аппаратуре, прежде чем оценивать выгоду от оптимизации.
Дополнительно к профилям задержки и пропускной способности анализ чувствительности по слоям количественно показывает, как отдельные слои переносят возмущения. В глубоких сетях распределения параметров разных слоев имеют неравную устойчивость к снижению точности или удалению весов. Профилирование деградации точности при систематическом возмущении одного слоя за раз — оценка шума квантования или влияния удаления весов — выявляет, какие компоненты требуют представления высокой точности, а какие могут выдержать агрессивное квантование в 4 бита или структурное прореживание без ущерба для точности на задаче.
Измерение эффективности оптимизации
Оценка сжатия требует баланса между статистическим качеством и физической стоимостью выполнения по осям Данных, Алгоритма и Машины (D·A·M). Единственная скалярная метрика — например, top-1 точность или число параметров — не отражает пригодность к развертыванию. Базовые линии качества должны учитывать совокупную точность, калибровку уверенности (проверку того, что предсказанные вероятности отражают эмпирическую правильность) и производительность на недопредставленных срезах входа. Одновременно базовые линии эффективности должны фиксировать пиковую занятость памяти, распределения задержки (включая задержку хвоста ), насыщение шины памяти и энергию на один вывод.
Иллюстративный профиль INT8 должен проверять и размер, и точность.
Квантование ResNet-50 из FP32 в INT8 показывает, как решения о сжатии распространяются по физическим и статистическим измерениям. Вместо оценки перехода на INT8 по одной изолированной метрике точности «Иллюстративный профиль развертывания ResNet-50 в INT8» представляет смоделированный профиль развертывания по вычислениям, памяти, энергии и статистической калибровке. Как показывает рисунок выше, проверка сжатия требует подтвердить, что сжатие артефакта не вызывает недопустимой деградации качества.
| Метрика | Базовый FP32 | Результат INT8 | Что это значит при развертывании |
|---|---|---|---|
| Top-1 точность | 76,1% | 75,8% (падение на 0,3 п.п.) | Общая точность в основном сохраняется, но проверки подгрупп по-прежнему важны. |
| Модельная задержка на V100 | 1,56 мс | 0,39 мс | Задержка на GPU улучшается, когда среда выполнения отображает INT8 на быстрые ядра. |
| Размер модели | 102,4 МБ | 25,6 МБ (4×) | Артефакт становится проще кэшировать, передавать и развертывать на периферии. |
| Энергия на вывод | 0,25 Дж | 0,06 Дж (4×) | Низкая точность снижает и энергию арифметики, и энергию перемещения данных в памяти. |
| Ошибка калибровки | 2,1% | 3,4% | Калибровка уверенности может сместиться, даже когда точность выглядит приемлемой. |
Иллюстративный профиль развертывания ResNet-50 в INT8: значения образуют модельный сценарий, а не измерения одного запуска на аппаратуре. Реальный профиль должен измерять точность, задержку, размер артефакта, энергию и калибровку на целевой системе.
Смоделированный профиль показывает, что перевод весов и активаций в INT8 сжимает объем модели в 4 раза (с 102,4 МБ до 25,6 МБ), снижая трафик DRAM и обеспечивая четырехкратное снижение энергии на вывод. Модельная задержка выполнения на V100 падает с 1,56 мс до 0,39 мс при условии, что среда выполнения отображает операции INT8 на нативные ядра тензорных ядер, а не вызывает деквантование во время выполнения. Важно, что при падении агрегированной top-1 точности всего на 0,3 процентного пункта (с 76,1 процента до 75,8 процента) ошибка калибровки растет с 2,1 процента до 3,4 процента. Распределения вероятностей после квантования смещаются, и это может подорвать критичные для безопасности пороги уверенности, даже когда точность топ-1 классификации выглядит сохраненной. Поскольку эти значения представляют смоделированный сценарий, решения о промышленном развертывании требуют эквивалентных эмпирических измерений на целевой аппаратуре.
Получить эти выигрыши в продакшене можно, только оценив взаимодействия нескольких техник сжатия. Последовательное применение прореживания, квантования и дистилляции может давать невзаимные выигрыши или накапливать деградацию; например, неоткалиброванное квантование весов на агрессивно прореженной разреженной матрице может вызвать катастрофическое обрушение точности. Оценка этих накопленных компромиссов требует отображения моделей на границу Парето «эффективность — качество», как описано в разделе «Проверка сжатия: граница эффективности и качества» главы «Бенчмаркинг». Выполнение этого систематического профилирования и многоэтапного конвейера преобразований, в свою очередь, зависит от автоматизированных программных инструментов, которые координируют компиляцию, генерацию ядер и бенчмаркинг аппаратуры.
Инструменты реализации
Квантовать модель на 175 миллиардов параметров вручную означает изменять тысячи мест вызова операторов, чтобы вставить масштабные коэффициенты и отслеживать динамические диапазоны активаций. Без автоматизированных инструментов фреймворка даже равномерное посттренировочное квантование INT8 требует вручную перехватывать жизненный цикл тензоров по всему вычислительному графу, а прореживание требует вести маски разреженности вместе с матрицами весов. В масштабе ручная манипуляция графом не может гарантировать согласованность автоградиента при переобучении и не может обеспечить ограничения выравнивания памяти, которые требует аппаратура ускорителя.
Выбор инструмента следует за тем уровнем программного стека, который владеет преобразованием. API фреймворков работают с высокоуровневым вычислительным графом во время обучения и калибровки, где движок выполнения видит веса, активации и состояние автоградиента. На этом этапе квантование обычно моделируется: узлы фиктивного квантования ограничивают и округляют значения внутри регистров с плавающей точкой, моделируя потерю численной точности и сохраняя дифференцируемость. Однако сами инструменты фреймворка не могут реализовать физическое ускорение выполнения. Компиляторы и движки времени выполнения берут управление после экспорта графа, преобразуя смоделированные операции в нативные для ускорителя планы выполнения. Компилятор времени выполнения сливает арифметику масштабных коэффициентов непосредственно в вычислительные тайлы матричного умножения и упаковывает разреженные веса в аппаратно-специфичные раскладки метаданных (например, форматы структурированной разреженности 2:4). Такое преобразование устраняет возвраты в HBM, которые иначе свели бы на нет выгоды от снижения точности. Программная инфраструктура закрепляет эту границу, фиксируя данные калибровки, расписания прореживания и слияния операторов, которые породили развертываемый двоичный файл, а не полагаясь на неотслеживаемые правки скриптов.
Во всем этом многоэтапном конвейере операционный императив — воспроизводимость. Сжатие модели меняет ее числовые представления на уровнях алгоритма и машины таксономии D·A·M. Незаписанные входы калибровки или несогласованные режимы округления могут незаметно ухудшить точность без ошибок времени выполнения. Глава «MLOps» позже расширяет эту дисциплину на версионирование моделей, мониторинг, управление артефактами и процедуры отката; здесь базовое требование состоит в том, чтобы каждый развернутый артефакт детерминированно прослеживался от исходной контрольной точки обучения до скомпилированного аппаратного графа выполнения.
API и инструменты оптимизации модели
На уровне разработки модели алгоритмы сжатия требуют доступа к состоянию времени выполнения, которое последующие компиляторы развертывания отбрасывают: истории градиентов, переменные состояния оптимизатора и динамические распределения активаций. Когда посттренировочное квантование или однократное прореживание снижает точность ниже приемлемых рабочих порогов, восстановление требует переобучения или итеративного дообучения. Фреймворки, такие как PyTorch и TensorFlow, предоставляют API оптимизации именно для управления этой границей преобразования графа. Эти API вставляют узлы квантования, переписывают параметризацию тензоров весов масками разреженности и сохраняют метаданные калибровки вместе с обученными параметрами. Хотя «Фреймворки машинного обучения» всесторонне описывает движки выполнения фреймворков, сжатие модели опирается на эти специализированные мутации графа, чтобы связать алгоритмическую функцию потерь с ограничениями выполнения на уровне машины.
Пример квантования с учетом обучения показывает это вмешательство на уровне графа. Квантование непрерывных весов с плавающей точкой в дискретные целые вводит разрывную ступенчатую функцию, производная которой почти всюду равна нулю (), и стандартный градиентный спуск останавливается. API оптимизации преодолевают этот математический барьер, вставляя операторы фиктивного квантования в вычислительный граф. При прямом проходе эти операторы ограничивают значения целевым динамическим диапазоном и округляют их до дискретных целых, подвергая последующие активации шуму усечения низкой точности. При обратном проходе оператор реализует сквозную оценку: он рассматривает шаг округления как тождественную функцию, беспрепятственно направляя градиенты к нижележащим 32-битным мастер-весам. «Квантование с учетом обучения» описывает последовательность преобразований графа и отслеживания метаданных, необходимых для получения развертываемого артефакта низкой точности.
Квантование с учетом обучения: преобразование на уровне механизма, которое обучает через моделируемое поведение низкой точности и экспортирует метаданные калибровки, необходимые для развертывания.
выбрать целевую точность и политику калибровки
вставить границы квантования и деквантования вокруг выбранных тензоров
обучать на смоделированных значениях низкой точности, сохраняя непрерывность потока градиентов
записать масштабы, нулевые точки, точность аккумулятора и неподдерживаемые операции
экспортировать откалиброванный граф и метаданные как один воспроизводимый артефакт
Параллельная стратегия мутации графа управляет прореживанием в API фреймворков. Физическая аппаратура не может ускорить произвольное удаление параметров во время обучения: динамическое удаление несмежных весов фрагментировало бы выделения памяти и разрушило бы объединенные обращения к памяти по полосам SIMD. Поэтому API прореживания фреймворков не уменьшают размерности тензоров во время дообучения. Вместо этого они переписывают параметризацию слоя, сохраняя исходный плотный тензор весов и выделяя вспомогательный бинарный тензор маски той же формы, а прямой проход выполняют поэлементным умножением (). Такой дизайн сохраняет раскладки плотных тензоров в памяти и обновления градиентов во время оптимизации. Только когда обучение завершено, проход экспорта окончательно выполняет преобразование: либо физически срезает ненужные каналы при структурном прореживании, либо кодирует ненулевые элементы в разреженные контейнерные форматы, совместимые с аппаратными ускорителями. «Граница артефакта прореживания» иллюстрирует жизненный цикл оценки параметров, маскирования и экспорта.
Граница артефакта прореживания: применяет правила неструктурированного или структурированного удаления, затем записывает маску и контекст дообучения, необходимые для воспроизведения сжатой модели.
выбрать гранулярность прореживания: отдельные веса, каналы, блоки или головы внимания
оценить кандидатные параметры по величине, чувствительности или влиянию на валидационную потерю
удалить или замаскировать выбранную структуру по правилу, совместимому с аппаратурой
дообучить сжатую модель на исходной валидационной цели
экспортировать веса, маски, шаблон разреженности и данные калибровки вместе
Инженерная ценность этих API заключается в воспроизводимости экспериментов на всей иерархии D·A·M. Вместо реализации специальных манипуляций с графом практики используют встроенные модули оптимизации как стандартизированные контрольные точки. Инженеры могут систематически перебирать коэффициенты разреженности, схемы масштабирования квантования, калибровочные наборы данных и расписания скорости обучения, сохраняя неизменным базовый конвейер выполнения. Упаковка получающихся масштабов, нулевых точек, масок и архитектурных изменений в единые артефакты экспорта гарантирует, что последующие среды выполнения вывода могут воспроизвести точную численную семантику, проверенную во время обучения.
Библиотеки оптимизации для конкретного оборудования
Экспорт оптимизированной модели из фреймворка обучения дает промежуточное графовое представление, а не исполняемый двоичный файл. Компиляторы и движки времени выполнения, такие как TensorRT, XLA, OpenVINO и TVM, отвечают за финальный шаг трансляции: компиляцию прореженного, квантованного или слитого графа в машинные инструкции, адаптированные под целевой ускоритель. Хотя глава «Аппаратное ускорение» подробно описывает микроархитектурные структуры, на которые нацелены эти инструменты, управляющий системный принцип опирается на иерархию D·A·M: алгоритмическое сжатие остается теоретическим, пока граф не отображается на ядра, которые физически используют иерархию памяти и блоки выполнения целевой машины.
Проход компиляции проверяет, дает ли номинальное сжатие физическое ускорение. Прореживание удаляет из графа нулевые веса, но если аппаратура не предоставляет раскладки памяти и пути выполнения, учитывающие разреженность (например, поддержку структурированной разреженности 2:4), матричные блоки передают и умножают нули так же, как ненулевые значения, и трафик памяти или задержка не снижаются. Квантование снижает разрядность, но если ускоритель не имеет нативных вычислительных конвейеров INT8 или INT4, среда выполнения должна распаковать операнды в регистры с плавающей точкой перед арифметикой, заменяя узкое место памяти накладными расходами инструкций. Кроме того, ядра низкой точности требуют специализированных раскладок тензоров, например тайловых или чередующихся каналов памяти, чтобы обеспечить объединенную загрузку в разделяемую память или регистровый файл. Слияние операторов устраняет промежуточные возвраты в DRAM вне кристалла, размещая промежуточные активации непосредственно в SRAM на кристалле или в регистрах. Если неподдерживаемая последовательность операторов блокирует слияние, узкое место пропускной способности памяти остается на месте. Оптимизации на уровне фреймворка лишь открывают возможности; компиляторы под конкретное оборудование определяют, сохраняются ли эти возможности при переводе в эффективный машинный план выполнения.
Диагностическая визуализация
Граница инструментов разделяет обязанности: API фреймворков создают и калибруют сжатую модель, библиотеки оптимизации под аппаратуру переводят ее в субстрат выполнения, а диагностический осмотр проверяет численную целостность. Системная валидация и мониторинг артефактов относятся к последующей инфраструктуре развертывания, но непосредственная диагностическая задача состоит в том, чтобы убедиться, что отсечение квантования, маски прореживания или шаблоны разреженности не исказили внутренние распределения признаков сверх допустимой ошибки на задаче.
Гистограммы ошибки квантования показывают, распределена ли ошибка широко или сосредоточена в выбросах. Визуализация активаций помогает обнаружить отсечение, переполнение и насыщение. «Паттерны первого сверточного слоя» схематически группирует ядра первого сверточного слоя по визуальному паттерну. Ядра, близкие к нулю, или фильтры со стабильно пренебрежимо малыми активациями, а не просто фильтры с однородным видом, являются кандидатами на прореживание, поэтому диагностика должна сочетать визуализацию весов с измеренным поведением активаций. Отладчики и наблюдатели фреймворков могут показывать диапазоны квантования и ошибку тензоров, тогда как инспекторы компилятора или среды выполнения могут показывать граф и ядра, которые экспортированная модель действительно выполняет.
Паттерны первого сверточного слоя: сетка группирует стилизованные ядра в паттерны краев, цвета, частот, смешанные и однородные на вид. Внешний вид сам по себе не доказывает бездействия; для прореживания требуются измеренные данные об активациях или важности помимо низкой дисперсии весов.
Диагностика разреженности отвечает на вопрос развертывания: какие слои действительно стали достаточно разреженными, чтобы среда выполнения могла их использовать? «Распределение разреженности по слоям» показывает, как тепловая карта по слоям и блокам выявляет, где концентрируется разреженность, а графики трендов отслеживают ее динамику по итерациям прореживания. Профилирование ядер все равно должно определить, дает ли шаблон ускорение. Для этого есть такие инструменты, как TensorBoard, Netron и SparseML.
Распределение разреженности по слоям: тепловая карта по блокам, визуализирующая неоднородное удаление параметров. Более темные клетки означают более высокую плотность разреженности и показывают, какие слои сети сохраняют плотные признаки, а какие концентрируют нулевые веса ради экономии памяти или планирования разреженных ядер.
Диагностическая ценность — в неоднородности, а не в точном оттенке отдельной клетки. Если поздние слои намного разреженнее ранних экстракторов признаков, политика прореживания концентрирует сжатие там, где представления более избыточны; если первыми темнеют ранние слои, политика, возможно, разрушает признаки низкого уровня раньше, чем модель получит достаточную глубину для компенсации.
Инструменты реализации делают сжатие повторяемым, но не устраняют компромиссы. Квантование может следовать за прореживанием или дистилляцией в многослойном конвейере: прореживание меняет структуру модели или число параметров, квантование меняет числовое представление, а дистилляция может обучать меньший артефакт на поведении учителя. Эти преобразования могут накапливать сокращения сырого объема, но ни фиксированный коэффициент сжатия, ни результат по качеству не переносятся между моделями и развертываниями; каждый этап нужно оценивать относительно целевой задачи и профилировать на целевом пути выполнения.
Заблуждения и ловушки
Самые поучительные уроки сжатия моделей часто дает не то, что работает, а то, что проваливается. Сценарии ниже иллюстрируют типичные режимы отказа; точные результаты зависят от модели, метода сжатия, нагрузки и целевой аппаратуры.
Оптимизация моделей включает контринтуитивные взаимодействия между техниками, которые кажутся независимыми. Инженеры часто предполагают, что стратегии компонуются линейно и что теоретические метрики предсказывают производительность развертывания; эти допущения тратят усилия оптимизации, ухудшают точность или не выполняют требования развертывания, несмотря на значительные инвестиции.
Заблуждение и ловушка
Заблуждение: Техники оптимизации можно применять независимо, не учитывая их взаимодействия.
Инженеры предполагают, что стратегии оптимизации складываются аддитивно: прореживание на 50 процентов плюс квантование в 4 раза дают совокупный выигрыш. На деле техники взаимодействуют нелинейно и умножают потери. В репрезентативном сценарии сжатия в стиле BERT прореживание до разреженности 70 процентов может сохранять большую часть качества решения, но последующее квантование INT8 может потерять больше точности, чем QAT прореженной модели. Дистилляция из сильно прореженных учителей может также передавать вырожденные шаблоны внимания, которые снижают точность ученика по сравнению с дистилляцией из плотных учителей. Как показывает раздел «Стратегии оптимизации», успешная оптимизация требует согласованного применения, где техники выстроены в последовательность. Организации, которые применяют агрессивные комбинации без измерения взаимодействий, тратят недели на восстановление утраченной точности.
Заблуждение и ловушка
Ловушка: Оптимизация под теоретические метрики вместо реальной производительности развертывания.
Команды могут существенно снизить FLOP, не получив пропорционального выигрыша в задержке. В одном гипотетическом трейсе прореженная модель с 40 процентами меньшим числом параметров дает лишь 12 процентов снижения задержки, потому что нерегулярная разреженность мешает эффективному выполнению. Во втором сценарии трансформер уменьшается с 440 МБ до 110 МБ, но накладные расходы преобразования на аппаратуре без быстрого пути низкой точности съедают выигрыш в задержке. Эти значения иллюстрируют режимы отказа и не являются измерениями для ARM или GPU. Пропускная способность памяти, поведение кэша, ядра и параллелизм на уровне инструкций определяют реальную производительность, поэтому промышленным развертываниям нужны измерения времени выполнения на целевой аппаратуре.
Заблуждение и ловушка
Заблуждение: Агрессивное квантование сохраняет производительность модели при минимальной потере точности.
Инженеры предполагают, что ошибка квантования растет равномерно с разрядностью. На практике снижение точности может давать пороговые эффекты, а порог зависит от модели, слоя, квантователя, калибровки и метода обучения. Значения для ResNet и BERT в этой главе иллюстративны, а не являются универсальными полосами деградации. Даже такие операции, как LayerNorm и Softmax, можно реализовать целочисленными приближениями, поэтому они не требуют обязательно FP16; сохраняет ли низкоточная реализация качество на задаче, нужно измерять. Как показывает раздел «Стратегии снижения точности», смешанные подходы к точности могут сохранять более высокую точность там, где равномерное квантование не справляется.
Заблуждение и ловушка
Ловушка: Использование FP32 везде, чтобы избежать риска квантования.
FP32 расходует в два раза больше сырого хранения и пропускной способности, чем BF16, но выполнение в низкой точности само по себе не гарантирует сходимости или точности. Обучение в смешанной точности часто сохраняет накопители FP32 или мастер-веса и может требовать масштабирования потерь, тогда как точность вывода нужно проверять для каждой модели и каждого оператора. Правильный вопрос — какая самая низкая точность сохраняет качество на распределении оценки и эффективно отображается на целевую аппаратуру.
Заблуждение и ловушка
Заблуждение: Посттренировочной оптимизации всегда достаточно.
Команды часто начинают с посттренировочного квантования (PTQ), потому что оно избавляет от переобучения. Если получившийся артефакт соответствует порогам задачи и развертывания, этот простой путь может оказаться достаточным. Когда этого не происходит, квантование с учетом обучения (QAT) может восстановить часть разрыва в качестве, адаптируя модель к моделируемому поведению низкой точности. Посттренировочное прореживание и апостериорная дистилляция могут аналогично уступать расписаниям с учетом обучения при агрессивной разреженности или разрядности. Как подробно описано в разделе «Стратегии снижения точности», решение определяет производственный порог, а не презумпция, что один из путей универсально превосходит другой.
Заблуждение и ловушка
Ловушка: Предположение, что коэффициенты сжатия напрямую переходят в пропорциональный выигрыш развертывания.
Команды могут получить четырехкратное снижение сырой полезной нагрузки весов через квантование INT8 и ожидать такого же выигрыша при развертывании. На практике масштабы, метаданные, неподдерживаемые операторы, преобразования и разреженная индексация съедают эту выгоду. Сквозное улучшение в 18,8 процента от цели в 8 раз на бумаге в этой главе — гипотетический трейс, а не бенчмарк BERT. Промышленные процессы должны профилировать задержку в развернутом виде на целевой аппаратуре, а не экстраполировать из коэффициентов сжатия.
Заблуждение и ловушка
Заблуждение: Разреженные матрицы всегда экономят память.
Разреженные форматы добавляют метаданные в виде массивов индексов, которые съедают экономию при умеренной плотности. При значениях FP32 и индексах INT32 подходы CSR достигают точки безубыточности примерно при плотности 50 процентов до учета накладных расходов указателей строк, тогда как COO хранит дополнительные координаты и пересекает точку безубыточности при меньшей плотности. У производительности нет универсального порога разреженности, потому что форма тензора, формат, ядро, батч и аппаратура определяют, опережает ли разреженное выполнение плотное. Специализированные форматы, такие как разреженность 2:4 от NVIDIA, сокращают метаданные и дают поддерживаемый путь выполнения, тогда как произвольная неструктурированная разреженность на массовом оборудовании может не дать ни экономии памяти, ни экономии задержки (см. раздел «Профилирование и анализ возможностей»).
Заблуждение и ловушка
Ловушка: Выбор разреженного хранения до проверки порога плотности.
Команды иногда преобразуют тензоры в разреженные форматы, как только прореживание создает видимые нули. Это преобразование может сделать систему медленнее и крупнее, если метаданные, накладные расходы сбора и рассеивания и плохая локальность кэша перевешивают сэкономленные значения. Промышленный проход сжатия должен измерять реализованную плотность, выбирать разреженный формат только после пересечения точки безубыточности и предпочитать структурированную разреженность, когда целевая аппаратура имеет ядра, которые ее используют.
Итоги
Сжатие модели — инженерная дисциплина, построенная на трех взаимодополняющих измерениях: структурная оптимизация определяет, что вычисляет модель, оптимизация точности определяет, насколько точно она вычисляет, а архитектурная оптимизация определяет, насколько эффективно эти вычисления выполняются на физической аппаратуре. Эти измерения могут накапливаться, но их выигрыши не перемножаются автоматически. Прореживание, дистилляция и квантование вместе дают иллюстративному конвейеру сокращение объема в 16 раз — с 440 МБ до 28 МБ; метаданные, неподдерживаемые операторы и отображение на аппаратуру определяют реально достигнутый выигрыш при развертывании. Сокращение параметров дает такое же сокращение задержки, только если затронутая работа находится на критическом пути и среда выполнения может использовать новое представление. Профилируйте на целевой аппаратуре, а не по метрикам на бумаге.
В сочетании с техниками отбора данных из раздела «Отбор данных» эти оптимизации, ориентированные на модель, завершают набор инструментов эффективности со стороны модели: отбор данных максимизирует обучение на доступных примерах, а сжатие модели минимизирует ресурсы, нужные для развертывания. Превратятся ли эти сбережения в реальное ускорение, по-прежнему зависит от аппаратуры и среды выполнения, которые запускают сжатую модель.
От победителя бенчмарка к продуктовой модели
- Сжатие расходует избыточную емкость: продуктовые модели обменивают неиспользуемые параметры, точность и емкость на ограничения по задержке, памяти, мощности или стоимости, которые развертывание не может нарушить. Цель — наименьший артефакт, который сохраняет требуемое поведение на задаче при ограничениях развертывания.
- Выигрыши перемножаются только при согласовании: структурное прореживание, дистилляция, квантование и изменения архитектуры могут совокупно сокращать сырой объем, как показывает сокращение в 16 раз в смоделированном мобильном конвейере BERT. Выигрыш становится реальным, только когда качество на задаче сохраняется, а получающиеся операторы соответствуют целевой среде выполнения и ускорителю.
- Точность — это контракт развертывания: там, где целевая среда выполнения ее поддерживает, посттренировочное квантование INT8 — полезный первый эксперимент, потому что оно снижает сырую полезную нагрузку весов FP32 в 4 раза без переобучения. QAT, дистилляция или смешанная точность становятся кандидатами, когда калибровка или чувствительность слоев выявляют недопустимую ошибку.
- Аппаратура задает курс обмена: неструктурированная разреженность и теоретическое сокращение FLOP не означают выигрыша задержки, если ядра и раскладки памяти не могут их использовать. Гипотетическая цель в 8 раз на бумаге против реализованных 1,5 раза в главе показывает, почему профилирование на целевой аппаратуре обязательно.
- Сквозная задержка ограничивает выигрыш модели: сжатие ценно только на критическом пути. Когда вывод составляет 20 процентов общей задержки запроса, закон Амдала ограничивает даже идеальное ускорение модели величиной в 1,25 раза, поэтому предобработка, диспетчеризация и перемещение данных могут быть истинной целью оптимизации.
Техники этой главы различаются почти во всех деталях, но под всеми ними лежит одно правило. Каждая покупает более компактную, быструю или холодную модель за счет чего-то другого: прореживание расходует емкость, квантование расходует числовую точность, а дистилляция расходует вычисления обучения. Там, где у модели нет избытка, за который можно заплатить, счет может быть оплачен качеством решения. Сжатие не делает работу исчезающей; оно переносит стоимость или риск из одной части системы в другую, а курс обмена задает аппаратура. Поэтому техника, которая окупается на телефоне, может оказаться бесполезной на GPU дата-центра. Это эвристика сохранения сложности на уровне одной модели. Промышленный артефакт — это модель, структура, представление и путь выполнения которой спроектированы вместе до тех пор, пока компромисс не уравновесится с аппаратными и прикладными ограничениями, управляющими развертыванием.
От математики к физике
Эти техники оптимизации сжимают логику модели, уменьшая работу, которую алгоритм поручает машине. Логика, однако, в конечном счете должна выполняться на физическом кремнии. Глава «Аппаратное ускорение» рассматривает, как GPU, TPU и NPU — с их систолическими массивами, разреженными тензорными ядрами и иерархиями памяти SRAM/HBM — отображают поддерживаемые сжатые представления на пропускную способность вычислений и перемещения данных, доступных в аппаратуре.
-
Нейронный поиск архитектуры (NAS): (Zoph and Le, 2016) в Google Brain использовали обучение с подкреплением, чтобы выучить саму архитектуру, при стоимости 22 400 GPU-дней (800 GPU в течение 28 дней), что эквивалентно 537 600 GPU-часам. Подходы с разделением весов, такие как эффективный поиск нейронной архитектуры (ENAS), позже сократили стоимость поиска примерно в 1 000 раз, разделяя параметры между кандидатными архитектурами (Pham et al., 2018). Аппаратно-ориентированный NAS и методы масштабирования затем сделали результаты поиска практичными для развертываемых семейств архитектур, таких как EfficientNet и MobileNetV3 (Tan and Le, 2019; Howard et al., 2019). ↩
-
Сверхпараметризация: (Zhang et al., 2017) показали, что сети, достаточно большие, чтобы подогнаться под ImageNet, могут также запомнить полностью случайные метки, то есть емкость для обучения может превышать структуру, нужную для естественных меток. Исследования прореживания затем показывают последствие для развертывания: обученные модели часто содержат много параметров, которые можно удалить или разредить с умеренной потерей качества на задаче, если прореживание и дообучение выполнены аккуратно (Gale et al., 2019; Blalock et al., 2020). Избыточность не является универсальной константой в 10 раз; она зависит от архитектуры, набора данных, шаблона разреженности и поддержки среды выполнения. ↩
-
Граница Парето: названа в честь итальянского экономиста Вильфредо Парето (1848–1923), который заметил, что 80 процентов земли в Италии принадлежали 20 процентам населения. В многокритериальной оптимизации граница Парето — это множество решений, в которых улучшение одного критерия (например, скорости) обязательно жертвует другим (например, точностью). EfficientNet конкретно прослеживает эту границу: от B0 (точность 77,1 процента, 390 миллионов FLOP) до B7 (84,4 процента, 37 миллиардов FLOP), то есть рост вычислений в 95 раз ради прироста точности на 7,3 процентного пункта. Это показывает, насколько крутым становится компромисс на краю границы (Tan and Le, 2019). ↩
-
Optimal Brain Damage: метод, предложенный (LeCun et al., 1989), позволил сократить число параметров в 4 раза (и пропорционально сэкономить память) в распознавателе рукописного текста. Для оценки роста функции потерь при удалении каждого веса использовалась диагональная аппроксимация информации о вторых производных (гессиана). Полный гессиан содержит элементов для параметров, но Optimal Brain Damage избегает хранения всей матрицы, аппроксимируя только ее диагональ. Прореживание в современных масштабах по-прежнему предпочитает более дешевые критерии, например величину, потому что даже оценка диагональной кривизны увеличивает стоимость обучения. ↩
-
Эвристика: от греческого heuriskein («находить»), того же корня, что и «эврика» Архимеда. В прореживании доминирующая эвристика — больший модуль означает большую важность — эмпирически хорошо работает, но создает системную ловушку: прореживание по величине, примененное глобально, может удалить большую часть параметров из избыточно параметризованных слоев, оставив критичные узкие слои почти нетронутыми. Так создается видимость агрессивного сжатия при сохранении большей части вычислительной стоимости и стоимости памяти в тех слоях, которые важны (Blalock et al., 2020). Поэтому циклы «прореживание — переобучение» с бюджетами по слоям часто безопаснее наивного глобального прореживания по величине: каждый цикл позволяет сети перераспределить важность до следующего среза. ↩
-
Структурированная разреженность N:M: впервые коммерчески представленная с GPU NVIDIA A100 (2020), шаблон 2:4 был выбран потому, что он вдвое сокращает операции умножения с накоплением, сохраняя метаданные о позициях достаточно компактными для пути разреженных тензорных ядер (NVIDIA Corporation, 2020; Choquette et al., 2021). Это фиксированное соотношение — аппаратное ограничение, а не математический оптимум: путь разреженных тензорных ядер A100 ускоряет разреженные операнды 2:4, давая ускорение вычислений до 2 раз по сравнению с плотным выполнением, когда ядра и раскладки удовлетворяют ограничению. Другие соотношения этим конкретным аппаратным путем не ускоряются, что иллюстрирует, как кремниевый дизайн ограничивает, какие шаблоны разреженности дают реальное ускорение. ↩
-
Гипотеза лотерейного билета: название отражает интуицию, что обучение большой сети похоже на покупку множества лотерейных билетов: большинство проигрывает, но несколько «выигрышных билетов» (разреженных подсетей с удачной инициализацией) могут обучиться до сопоставимой точности самостоятельно. (Frankle and Carbin, 2019) установили эту гипотезу на меньших сетях для зрения и полносвязных сетях; позже работы обобщили и расширили эту идею на более крупные задачи (Rachwan et al., 2022). Системный вывод состоит в том, что часть памяти и вычислений, затраченных на обучение плотных сетей, может оказаться избыточными накладными расходами, которые можно выявить, однако практическая отдача зависит от того, можно ли найти выигрышную подсеть, прежде чем потратить большую часть исходной стоимости обучения. ↩
-
Прореживание BERT: 12 голов внимания на слой в BERT могут содержать значительную избыточность: Michel et al. (2019) обнаружили на MultiNLI, что многие головы можно удалить без статистически значимого изменения производительности. Доля удаляемых голов зависит от слоя и задачи, поэтому прореживание для развертывания должно измерять и качество на задаче, и то, уменьшает ли получающаяся структура объем работы среды выполнения. ↩
-
Дистилляция: название заимствовано из химического процесса разделения смеси. В сжатии моделей ученик учится на смягченном распределении выходов учителя или на его внутренних представлениях, а не копирует его параметры. Мягкие цели могут кодировать отношения между классами, но ученик выучивает лишь то, что раскрывают его целевая функция и обучающие данные. Метафора полезна, но не буквальна: параметр температуры приходит из масштабирования softmax, а компромисс между размером и качеством зависит от ученика, данных, целевой функции и процедуры обучения (Hinton et al., 2015). Экономия при развертывании возникает из архитектуры ученика, а не из самой метафоры. ↩
-
Температура (softmax): термин происходит из распределения Больцмана в статистической механике. Деление логитов на температуру больше единицы дает более мягкое распределение и может выявить относительные вероятности среди нецелевых классов. При выражение совпадает со стандартным softmax; увеличение температуры уменьшает разрывы между логитами, но не гарантирует, что раскрытые вероятности помогут ученику. Полезная степень смягчения зависит от масштаба логитов, калибровки учителя, емкости ученика, веса потерь и сопутствующего множителя . Поэтому температуру подбирают эмпирически, а не фиксируют в универсальном диапазоне. ↩
-
Дивергенция KL: введена Соломоном Кульбаком и Ричардом Лейблером в 1951 году; измеряет дополнительное число битов, нужное для кодирования выборок из распределения кодом, оптимизированным для . Ключевое асимметричное следствие: сильно штрафует ученика за назначение нулевой вероятности выходам, вероятным для учителя, вынуждая ученика сохранять широкое покрытие распределения учителя, включая малоправдоподобные «мягкие метки», которые несут выученную учителем неопределенность. Дистилляция может влиять на калибровку, которую нужно оценивать отдельно. ↩
-
DistilBERT: сообщаемая модель имеет 66 миллионов параметров против 110 миллионов у BERT-Base, на 40 процентов меньше и на 60 процентов быстрее, и сохраняет 97 процентов производительности в понимании языка. Абсолютные память и задержка по-прежнему зависят от числового формата, размера батча, длины последовательности, среды выполнения и аппаратуры (Sanh et al., 2019). ↩
-
Сингулярное разложение (SVD): теорема Эккарта — Янга (1936) доказывает, что сохранение наибольших сингулярных значений дает оптимальную аппроксимацию ранга в нормах Фробениуса и спектральной норме. Ключевой системный компромисс состоит в том, окупается ли однократная высокая вычислительная стоимость этой факторизации — — экономией памяти и пропускной способности при многократных вызовах вывода с меньшей моделью. ↩
-
NAS с учетом аппаратуры: оптимизирует измеренную задержку, а не FLOP, которые могут расходиться в 3–5 раз, когда доминируют доступ к памяти или поддержка операторов. Tan et al. (2019) подали задержку на устройстве в поиск и нашли архитектуры, которые в 1,8 раза быстрее MobileNetV2 при большей точности. ↩
-
Двухуровневая оптимизация: постановка, в которой одна задача оптимизации находится внутри другой. В NAS внешний уровень выбирает архитектуру, а внутренний обучает веса этого кандидата, поэтому ранние методы платили полную стоимость обучения за каждую оцененную архитектуру. Это вложение объясняет, почему раннему NAS требовались 22 400 GPU-дня; методы с разделением весов амортизируют один прогон обучения на множество кандидатов, сокращая стоимость поиска примерно в 1 000 раз. ↩
-
Квантование: восходит к теории Шеннона о представлении непрерывных сигналов дискретными значениями (Shannon, 1948). При переходе от FP32 к INT8 более четырех миллиардов представимых значений сжимаются всего до 256. Нейронные сети часто выдерживают это, потому что обученные веса сосредотачивают информацию в относительных величинах, а не в абсолютной точности: вывод INT8 при надлежащей калибровке или квантовании с учетом обучения может оставаться близким к базовой точности полного формата, тогда как методы INT4 и более низкой разрядности сильнее зависят от архитектуры и метода (Jacob et al., 2018; Gholami et al., 2022; Shen et al., 2020; Lin et al., 2024). Системное следствие в том, что жизнеспособность квантования нужно проверять для каждой модели и каждой задачи, а не предполагать по агрегированным бенчмаркам. ↩
-
Влияние INT8 на энергию: доминирование энергии доступа к памяти экстремально: при используемых здесь константах Horowitz одно 32-битное чтение DRAM стоит примерно в 2 782,6 раза больше энергии умножения с накоплением INT8 (Horowitz, 2014). Квантование с FP32 до INT8 бьет по этому разрыву с двух сторон — в 4 раза меньше переносимых байтов и более дешевая арифметика на операцию, — хотя реальная экономия энергии зависит от иерархии памяти, ядер и нагрузки. ↩
-
Активационно-зависимое квантование весов (AWQ): значимость определяется величиной активаций, а не величиной весов, — это различие важно, потому что малый вес, умноженный на большую активацию, дает большой вклад в выход. AWQ защищает около 1 процента значимых каналов весов с помощью масштабирования, учитывающего активации, а большинство весов квантует в низкоразрядные форматы, так что набор весов FP16 на 7 миллиардов параметров, который занимал бы около 14 ГБ, может приблизиться к объему весов класса INT4 примерно в 3,5 ГБ до учета метаданных, масштабов и накладных расходов упаковки, специфичной для ядра (Lin et al., 2024). ↩
-
Сквозная оценка (STE): предложена (Bengio et al., 2013). STE подставляет тождественную функцию вместо истинного градиента округления, который равен нулю почти всюду, поскольку округление кусочно-постоянно. Распространенная тождественная STE переносит входящий градиент через квантователь без изменений. Это смещенная эвристика, а не истинная производная. ↩
-
Квантование с учетом обучения (QAT): QAT моделирует поведение низкой точности во время обучения или дообучения, чтобы обновления весов могли адаптироваться к ошибкам отсечения и округления. Исследования BERT сообщают, что методы с учетом обучения или учетом гессиана могут оставаться ближе к базовым результатам полной точности на General Language Understanding Evaluation (GLUE), чем более простые посттренировочные пути, в проверенных условиях (Zafrir et al., 2019; Shen et al., 2020). Точный разрыв зависит от модели, задачи, квантователя, разрядности, бюджета обучения и распределения оценки; более близкий результат бенчмарка — это свидетельство в пользу попытки QAT, а не гарантия того, что его дополнительная стоимость обучения или экспортированная среда выполнения удовлетворят производственную цель. ↩
-
Раздельные по глубине свертки: этот прием снижает вычисления, раскладывая стандартную свертку на отдельные раздельные по глубине (поканальные) операции и поточечные операции. Архитектуры MobileNet используют такую факторизацию, чтобы обменять емкость модели и точность на меньшее число операций для зрения на устройстве (Howard et al., 2017; Sandler et al., 2018). ↩
-
FlashAttention: демонстрирует силу слияния для ограниченного памятью внимания: вычисления тайлятся под SRAM, полная матрица внимания не материализуется, и сообщается о многократном ускорении на длинных последовательностях (Dao et al., 2022). Это показывает, как слияние операторов меняет узкие места памяти: арифметика математически эквивалентна, но шаблон доступа к памяти меняется, делая внимание на более длинном контексте выполнимым на аппаратуре, которая иначе не могла бы позволить себе полную промежуточную матрицу. ↩
-
Switch Transformer: (Fedus et al., 2022) масштабируется примерно до 1,6 триллиона общих параметров при маршрутизации каждого токена к одному эксперту; в эксперименте с согласованными вычислениями Switch-Base с 64 экспертами достиг целевого качества T5-Base примерно за одну седьмую времени обучения; сравнение для триллионного масштаба сообщило о примерно четырехкратном ускорении относительно T5-XXL. Маршрутизация каждого токена к одному эксперту снижает коммуникацию по сравнению с маршрутизацией top-, однако дисбаланс нагрузки требует вспомогательных потерь и коэффициентов емкости. Этот компромисс — огромная емкость параметров при низкой стоимости вычислений на токен, но со сложной системной инженерией балансировки нагрузки — определяет пространство проектирования MoE. ↩
-
Разреженность: от латинского sparsus («рассеянный»), причастие от spargere («рассеивать»); в машинном обучении L1-регуляризация, например лассо, может создавать точные нули, а не просто малые значения (Tibshirani, 1996). Программное обеспечение может представлять произвольные шаблоны разреженности, тогда как эффективное аппаратное выполнение обычно требует поддерживаемого формата или структурированного шаблона (например, разреженности 2:4 от NVIDIA). Разрыв между представимой и выполнимой разреженностью отделяет теоретическое сжатие от реального ускорения. ↩
-
Неструктурированная разреженность и потери SIMD: современные CPU и GPU обрабатывают данные векторными или тензорными группами; неструктурированная разреженность разбрасывает ненулевые элементы по памяти нерегулярно, поэтому векторная загрузка может вернуть в основном нули, оплатив при этом полную стоимость обращения к памяти. Процессор не может пропускать нулевые элементы, не зная сначала, где находятся ненулевые, а метаданные для ответа на этот вопрос также потребляют пропускную способность. Поэтому структурированная разреженность может давать ускорение при меньших уровнях разреженности, чем произвольная неструктурированная, тогда как неструктурированной разреженности часто нужны очень высокие доли нулей и специализированные ядра, прежде чем экономия арифметики перекроет накладные расходы индексации и загрузки полос (Hoefler et al., 2021). ↩
Аппаратное ускорение
Назначение
Почему перемещение данных обходится дороже, чем их вычисление?
Арифметика дешева по сравнению со многими обращениями к памяти. За то время, которое уходит на выборку одного значения из основной памяти, процессор может выполнить много вычислений. Этот дисбаланс, «стена памяти», отражает задержку, пропускную способность и энергетические затраты на перемещение данных по системе. Он объясняет, почему специализированные ускорители не просто быстрее считают, а устроены так, чтобы скрывать, амортизировать и снижать стоимость перемещения данных через глубокую иерархию памяти, массовый параллелизм и специализированные пути передачи данных. Аппаратное ускорение позволяет расти многим большим нагрузкам ИИ там, где одного масштабирования процессоров общего назначения недостаточно. Оно также объясняет, почему некоторые оптимизации, которые сокращают теоретический объем вычислений, не ускоряют выполнение. Если операция ограничена памятью, сокращение вычислений может не помочь, потому что вычисления не являются узким местом. Поэтому выбор аппаратуры нельзя свести к сравнению пиковых FLOP/s. Важно, совпадают ли шаблоны перемещения данных нагрузки с тем, что аппаратура спроектирована ускорять. Модели с большими таблицами эмбеддингов и нерегулярными выборками нужен другой ускоритель, чем модели, которые выполняют плотные матричные умножения над компактными тензорами весов. Программное обеспечение должно выявлять доступное повторное использование данных и планировать его; иначе специализированные блоки простаивают, пока данные перемещаются, и заявленная пропускная способность остается теоретической. Совпадение нагрузки и аппаратуры определяет, останется ли выполнение на доле теоретического пика или приблизится к практическому потолку аппаратуры. В терминах D·A·M ускоритель делает ограничение машины конкретным и определяет, какие алгоритмы остаются практичными в промышленной эксплуатации.
Цели обучения
- Объяснять аппаратное ускорение как специализацию по оси машины для тензорных нагрузок, повторного использования данных и производительности на ватт
- Вычислять арифметическую интенсивность и потолки Roofline, чтобы относить ядра к вычислительно-ограниченным или ограниченным памятью
- Диагностировать узкие места «стены памяти» по пропускной способности, иерархии кэшей, передаче данных между хостом и устройством и энергии перемещения данных
- Сравнивать тензорные ядра, систолические массивы, блоки SIMD/SIMT и разреженное выполнение как примитивы вычислений для ML
- Выбирать стратегии потоков данных, тайлинга и отображения, которые максимизируют повторное использование при ограничениях на объем памяти
- Анализировать оптимизации компилятора и среды выполнения, которые сливают ядра, планируют память и распределяют работу по ускорителям
- Оценивать выбор ускорителя по пропускной способности, задержке, мощности, стоимости и ограничениям среды развертывания
Основы ускорения
Аппаратное ускорение включается по оси машины.
Сокращение параметров, точности или числа операций имеет смысл только тогда, когда машина способна эффективно выполнить полученное представление. Отбор данных сократил член данных, сжатие сократило объем работы алгоритма; аппаратное ускорение спрашивает, что машина может реально выдать. Ответ начинается со стены памяти: арифметика часто дешева по сравнению с перемещением данных. Обращение к памяти за пределами кристалла может занимать много тактов процессора и расходовать на порядки больше энергии, чем арифметическая операция низкой точности; точное соотношение зависит от устройства и уровня памяти. Специализированная аппаратура важна, потому что она повышает пропускную способность вычислений и одновременно организует память, потоки данных и параллелизм так, чтобы арифметические блоки оставались загруженными.
Аппаратное ускорение
Аппаратное ускорение — это практика переноса работы с выполнения общего назначения на специализированные процессоры или функциональные блоки, оптимизированные для более узкого класса операций. Для нагрузок машинного обучения такая специализация обычно обменивает часть программируемости на плотность вычислений и выигрыш производительности на ватт, которые способны использовать регулярные тензорные операции.
- Значение: ускоритель A100 дает 312 TFLOP/s при умножении матриц в FP16/BF16; относительно эталонной базы этой главы, процессора на 1–2 TFLOP/s, это разрыв в 156–312 раз. Его 54,2 млрд транзисторов отданы параллельной арифметике гораздо больше, чем предсказанию ветвлений, внеочередному планированию и большим кэшам (NVIDIA Corporation, 2020; Choquette et al., 2021).
- Отличие: процессор общего назначения рассчитан на гибкое выполнение, низкую задержку управления и разнородные нагрузки. Ускоритель же концентрирует ресурсы на более узком классе операций, поэтому получает выигрыш, только когда нагрузка открывает поддерживаемые операции и достаточно параллельной работы, чтобы занять арифметические блоки.
- Типичная ошибка: распространенное заблуждение состоит в том, что заявленная пиковая пропускная способность ускорителя — это та пропускная способность, которую получает нагрузка. Реальная производительность определяется меньшим из двух потолков: вычислительного и того, что может подать пропускная способность памяти, то есть ограничением Roofline. Ядро с низкой арифметической интенсивностью может работать на малой доле пиковых FLOP/s, как бы быстро ни была оценена кремниевая схема, потому что оно ждет данных, а не арифметики.
Это определение задает центральный инженерный компромисс главы. Процессоры общего назначения отдают площадь кристалла сложной логике управления, спекулятивному выполнению, предсказанию ветвлений и многоуровневым иерархиям кэшей, чтобы обрабатывать произвольный поток управления. Ускоритель направляет этот бюджет транзисторов на плотные массивы арифметики, выделенные регистровые файлы и пути высокой пропускной способности к памяти, настроенные под более узкий класс нагрузок. Когда программный путь раскрывает достаточный тензорный параллелизм, такая специализация дает улучшения энергоэффективности и производительности на ватт на порядки.
Одна аппаратура этих выигрышей не дает. Алгоритмы должны структурировать операции так, чтобы раскрывать повторное использование данных и регулярный доступ к памяти, а кремниевые архитектуры должны выделять физические блоки под математические примитивы и числовые форматы, которые алгоритмы действительно выполняют. Этот симбиоз порождает дополняющий принцип: совместное проектирование аппаратуры и программного обеспечения.
Совместное проектирование аппаратуры и программного обеспечения
Совместное проектирование аппаратуры и программного обеспечения — это метод разработки ускорителей для ML, который пересекает обычные границы абстракций: ограничения алгоритма влияют на кремниевый проект, а возможности аппаратуры формируют постановку алгоритма.
- Значение: на поддерживаемом пути тензорных ядер целочисленное квантование INT8 может дать многократный прирост пропускной способности, потому что аппаратура выполняет операции низкой точности плотнее и перемещает меньше байтов, чем путь FP32; точный выигрыш зависит от архитектуры и нагрузки (NVIDIA Corporation, 2020; Dally et al., 2021; Dally, 2023).
- Отличие: в отличие от послойной абстракции, где программа вызывает аппаратный API, не зная деталей кремния, совместное проектирование напрямую открывает ограничения аппаратуры авторам алгоритмов и компиляторов: требования к выравниванию данных, форматы точности и шаблоны доступа к памяти становятся видимыми входами для глобальной межслойной оптимизации.
- Типичная ошибка: распространенное заблуждение состоит в том, что совместное проектирование — это однократный выбор аппаратного решения. На практике поддерживаемые возможности продолжают развиваться: тензорные ядра NVIDIA начинались с умножения матриц в FP16, затем появились TF32 и более широкая поддержка целых чисел, а Ampere добавил ускорение для структурированной разреженности 2:4 (NVIDIA, 2017; NVIDIA Corporation, 2020).
Совместное проектирование объясняет, почему методы сжатия, описанные в главе «Сжатие моделей», дают реальное ускорение. Методы квантования из раздела «Квантование и числовая точность» показывают, почему перевод FP32 в INT8 ускоряет выполнение на поддерживаемой аппаратуре: пониженная точность сокращает трафик памяти, а специализированные арифметические блоки выполняют за такт больше низкоточных операций, чем эквивалентных операций FP32 (NVIDIA Corporation, 2020). Структурное прореживание повышает производительность, когда оно дает более компактные плотные формы или шаблон разреженности, который распознает кремний, тогда как произвольная неструктурированная разреженность требует обработки метаданных и несогласованных обращений к памяти, которые часто съедают теоретический выигрыш. Оценка производительности ускорителя требует проследить путь от нагрузки до кремния: примитивы вычислений, иерархии памяти, диагностику по Roofline, отображение и поток данных, планирование компилятором. Повторяющийся вопрос таков: почему алгоритмические улучшения часто не дают пропорционального сквозного ускорения? Ответ дает закон Амдала.
Фундаментальный предел ускорения (закон Амдала)
Аппаратное ускорение не ускоряет систему целиком; оно ускоряет только ту долю базового времени, которая идет по ускоренному пути. Для этой доли и выигрыша пути закон Амдала для ИИ (Amdahl, 1967) задает границу в (уравнении Амдала):
- Ускоренная доля (): доля базового времени, которая получает заявленный выигрыш, часто это умножение матриц или другое поддерживаемое ядро.
- Выигрыш ускорителя (): чистое преимущество в скорости GPU или тензорного процессора (TPU) над CPU на ускоренной части нагрузки.
- Неускоренная доля (): работа вне выбранного пути, например загрузка данных, накладные расходы хоста, неподдерживаемые операторы и задержка запуска ядер.
Ловушка: неускоренная работа ограничивает общее ускорение. Если 10 процентов базового времени не затронуты (), даже бесконечный выигрыш пути () дает не больше чем в 10 раз общего ускорения. Когда ускоренная часть становится достаточно быстрой, доминирует незатронутая работа.
Аппаратное ускорение действует на конкретные члены железного закона ML-систем («Железный закон систем машинного обучения»), который раскладывает сквозное время на объем данных , вычисления и фиксированную задержку . Отбор данных сократил общий объем данных, а сжатие модели сократило операции на образец, тогда как аппаратное ускорение повышает скорость выполнения, улучшая , и . Раздел «Физика вычислений» приложения «Основы машины» дает аналитические модели производительности, которые диагностируют, какой из этих членов доминирует в данной нагрузке, включая размерный анализ, подтверждающий, что каждый член железного закона выражается в секундах. Но ускорение упирается в жесткий потолок, который задает закон Амдала.1
Эта динамика объясняет, почему обновления аппаратуры часто не дают пропорционального сквозного ускорения. «Тепловая карта железного закона» показывает эту стену ускорения: пока остается неускоренная доля , асимптотический потолок навязывает резко убывающую отдачу от выигрыша пути , если только не приближается к единице.
Тепловая карта железного закона: общее ускорение системы как функция выигрыша ускорителя () и ускоренной доли (). Высокое ускорение возникает только в правом верхнем углу, где высоки и выигрыш ускорителя, и ускоренная доля. При , например, даже бесконечный выигрыш на ускоренном пути не может дать сквозное ускорение больше 10 раз. Контуры охватывают ускорение примерно от 1 до 200 раз.
Сырое ускорение ускорителя переходит в системную пропускную способность только после того, как неускоренная доля минимизирована. Ускоренная доля заметно различается между типами нагрузок, работающих на одинаковой аппаратуре, и именно она определяет, окупаются ли инвестиции в ускоритель или он простаивает на операциях, которые не являются матричными.
Фильтр параллелизма
Эти проверки превращают границу Амдала в тест выбора аппаратуры.
Реальность закона Амдала
- Последовательные узкие места: с помощью границы Амдала объясните, почему GPU, который в 1 000 раз быстрее, может ускорить обучение лишь в 5 раз, если загрузка данных медленная.
- Потолок ускорения: для и оцените общее ускорение и сравните его с потолком для бесконечного ускорителя.
- Различие нагрузок: сравните ускоренные доли ResNet-50 и MobileNet для предлагаемого изменения аппаратуры, затем предскажите, какая из них выиграет больше.
Последовательное узкое место становится конкретным на реальной аппаратуре, где тот же ускоритель, который приближается к своему параллельному потолку на одной нагрузке, может простаивать на другой. Раздел «Числа, которые нужно знать» приложения «Основы машины» собирает справочные значения для разных поколений ускорителей и иерархию задержек, которые переводят эти сравнения аппаратуры в порядки величин. Оценка NVIDIA H100 на вычислительно-ограниченной свертке и на ограниченном памятью авторегрессивном декодировании показывает, как разные неускоренные доли определяют реальное ускорение.
Иллюстративный бюджет Амдала для H100
Иллюстративный вывод ResNet-50 на NVIDIA H100:
- Допустим, H100 дает на умножении матриц относительно эталонного процессора без матричных расширений (1979 TOPS INT8 против примерно 8 TOPS) (Choquette, 2023).
- Допустим, : 95 процентов базового времени получают этот выигрыш, а 5 процентов остаются за загрузкой данных, предобработкой, постобработкой и прочей работой.
Выигрыш пути в 247 раз дает лишь 18,6-кратное сквозное ускорение, потому что незатронутая доля 5 процентов задает потолок.
Сравнение с GPT-2 (авторегрессивный):
- Для генерации токенов GPT-2 допустим ; оставшиеся 20 процентов включают накладные расходы хоста, семплирование и декодирование вне ускоренного матричного пути.
Меньшая часть времени генерации токенов получает предполагаемый выигрыш, поэтому даже бесконечный выигрыш пути дает не больше . Оптимизации обслуживания решают это ограничение иначе: батчирование повышает загрузку при обработке нескольких запросов, а спекулятивное декодирование использует черновую модель, чтобы сократить число последовательных шагов целевой модели.
Ограничена ли операция скоростью вычислений или перемещением данных, определяет и выбор аппаратуры, и программную оптимизацию. Переход на ускоритель с пиковой вычислительной мощностью в 10 раз выше дает пренебрежимо малое ускорение, если узким местом является подача данных. Модель Roofline дает аналитическую основу для такой диагностики (Williams et al., 2009); она вводится формально в разделе «Модель Roofline» приложения «Основы машины», а раздел «Модель Roofline» этой главы применяет ее к нагрузкам ИИ. Она сопоставляет арифметическую интенсивность операции2, определенную как отношение операций с плавающей точкой к байтам трафика памяти (FLOP/байт), с возможностями аппаратуры и показывает, ограничена ли производительность вычислениями или пропускной способностью. Плотное умножение матриц с высокой арифметической интенсивностью выигрывает от дополнительных TFLOP/s; LayerNorm с низкой интенсивностью выигрывает только от большей пропускной способности памяти. Свертки ResNet-50 с высоким повторным использованием работают в вычислительно-ограниченном режиме, а авторегрессивное внимание при малом батче работает в режиме, ограниченном памятью. Следовательно, вычислительно-ограниченным нагрузкам нужны стратегии, которые максимизируют пропускную способность арифметики и загрузку функциональных блоков, тогда как ядра, ограниченные памятью, требуют слияния операторов и поэтапной работы с иерархией памяти, чтобы минимизировать трафик за пределами кристалла.
Архитектурное проектирование начинается с физических ограничений, которые вынудили к специализации: распад классического масштабирования напряжения Деннарда и непомерная энергетическая стоимость перемещения данных по иерархиям памяти. Когда микроархитектуры общего назначения столкнулись с этими тепловыми барьерами и барьерами памяти, основным инженерным путем стала специализация аппаратуры под предметную область, позволившая поддерживать рост производительности.
Специализация аппаратуры
Когда компания Google развернула в производственных дата-центрах свой первый тензорный процессор (TPUv1) наряду с GPU NVIDIA K80, сравнение показало фундаментальный разрыв в эффективности. Процессоры общего назначения отдают значительную площадь кристалла и бюджет мощности аппаратуре выборки инструкций, предсказания ветвлений и когерентности кэшей, рассчитанной на произвольный код. Для нагрузок глубокого обучения, в которых доминирует регулярная плотная линейная алгебра, эти накладные расходы управления дают низкую плотность арифметики. Когда алгоритмический шаблон становится достаточно доминирующим и структурированным, специализированная аппаратура опережает платформы общего назначения: она заменяет динамические механизмы управления выделенными массивами арифметики и перемещением данных под управлением программного обеспечения. Производственная оценка вывода в Google измерила этот разрыв в эффективности (пример «Шок эффективности TPUv1 против K80»).
Шок эффективности TPUv1 против K80
Сценарий: в 2015 году компания Google развернула свой первый тензорный процессор (TPUv1) в производственных дата-центрах и сравнила его пропускную способность и энергоэффективность с GPU общего назначения NVIDIA K80 (Jouppi et al., 2017).
Диагностика: K80 был программируемым GPU, рассчитанным на более широкий набор графических и вычислительных нагрузок. Предметно-специализированная архитектура (DSA) TPUv1 сделала более узкую ставку на вывод: большой 8-битный систолический матричный блок в паре с памятью под управлением программного обеспечения и более простым управлением.
Системный урок: на шести вывод-нагрузках Google и на современных базовых CPU/GPU, которые оценивались в статье о TPU, подгонка кремния под доминирующие матричные операции дала в 15–30 раз более высокую пропускную способность и в 30–80 раз лучшую производительность на ватт (Jouppi et al., 2017). Эти соотношения описывают оцененные системы, а не любую нагрузку.
В терминах D·A·M этот выигрыш в эффективности возникает за счет подгонки ресурсов машины под алгоритмическую структуру. Заменяя аппаратные кэши scratchpad-буферами под управлением программного обеспечения и направляя данные напрямую между соседними арифметическими блоками систолического массива, специализированные архитектуры максимизируют арифметическую интенсивность и минимизируют трафик памяти за пределами кристалла. Однако такая специализация навязывает архитектурный компромисс: жесткие конвейеры выполнения теряют гибкость. Когда нагрузки вносят нерегулярный доступ к памяти, динамический поток управления или неподдерживаемые числовые форматы, пути данных с фиксированной функцией простаивают, и дорогой кремний остается без работы.
Современные ускорители для ML, включая нейросетевые ускорители класса DianNao (Chen et al., 2014), GPU с тензорными ядрами, TPU от Google3 и Neural Engine от Apple, отражают это непрерывное балансирование между арифметической специализацией и программируемой гибкостью. Их конструкции возникли из исторической траектории, которая охватывает четыре отдельные фазы: истоки специализированных вычислений, параллельную обработку графики, предметно-специализированные архитектуры и появление аппаратуры, специфичной для ML. Каждая фаза решала конкретное узкое место ресурса, которое сдерживало масштабирование в свою эпоху.
Специализированные вычисления
Аппаратная специализация возникает тогда, когда конкретные вычислительные шаблоны становятся главным узким местом системы и не дают процессорам общего назначения масштабироваться эффективно. Эта история выделяет три повторяющихся ограничения: медленная реализация скалярной арифметики с плавающей точкой, недостаточная пропускная способность для параллельной графики и плохая интеграция памяти с параллельными вычислениями.
Первая фаза, узкое место точности, возникла тогда, когда научные и инженерные приложения потребовали арифметики с плавающей точкой на микропроцессорах с арифметико-логическими устройствами только для целых чисел. В конце 1970-х годов CPU эмулировали операции с плавающей точкой с помощью многоинструкционных программ, которые распаковывали поля знака, порядка и мантиссы, сдвигали биты для выравнивания двоичной точки и нормализовали результат. Такая программная эмуляция создавала сильные накладные расходы скалярных инструкций даже для одного умножения и породила первую крупную волну аппаратной специализации: математический сопроцессор.
Intel 8087 (1980)4 решил это узкое место, выполняя инструкции с плавающей точкой прямо на выделенных аппаратных конвейерах (Palmer, 1980). Замена многоинструкционных программных процедур жестко заданной арифметикой закрепила базовый принцип системного проектирования: если во внутреннем цикле доминирует определенная операция, специализированный кремний устраняет накладные расходы инструкций общего назначения и сдвигает потолок производительности.
По мере того как специализированные функции доказывали свою полезность, они следовали повторяющемуся шаблону интеграции. Intel 486DX (1989) перенес FPU прямо на кристалл CPU, устранив задержку шинной связи вне кристалла и сделав высокоточную математику стандартной функцией, а не дополнительным сопроцессором (Hennessy and Patterson, 2017). Этот цикл, в котором специализация устраняет острое узкое место, а затем следует архитектурная интеграция, повторяется в разных эпохах аппаратуры.
«Хронология специализации аппаратуры» прослеживает этот путь через пять эпох, показывая, как повторяющиеся вычислительные узкие места привели эволюцию аппаратуры от сопроцессоров с плавающей точкой и цифровых сигнальных процессоров к программируемым GPU, кодекам мультимедиа и тензорным ускорителям для глубокого обучения. Современные нагрузки машинного обучения напрямую опираются на принципы, сложившиеся в этих эпохах: выделение кремния под доминирующие матричные операции, размещение операндов в локальной памяти и минимизацию перемещения данных за пределами кристалла.
Хронология специализации аппаратуры: вычислительные архитектуры развиваются через повторяющиеся циклы специализации и интеграции в пяти эпохах. Каждая эпоха вводит аппаратуру под предметную область, чтобы устранить важное узкое место памяти или арифметики: от внешних FPU к GPU, кодекам и блокам массивов TPU и тензорных ядер. Многие из этих возможностей позже появляются рядом с CPU в более широких системах, даже если специализированные блоки остаются отдельными.
Параллельные вычисления и обработка графики
Процессоры общего назначения отдают большую часть бюджета кремния логике управления, предсказанию ветвлений и многоуровневым кэшам, которые минимизируют задержку выполнения одного потока инструкций. Когда нагрузка демонстрирует массовый, однородный параллелизм данных, то есть одинаковую арифметику над миллионами независимых элементов, эта архитектура, ориентированная на задержку, тратит площадь кристалла и тепловой бюджет на структуры управления, которые не повышают вычислительную пропускную способность. Специализированные ускорители устраняют этот дисбаланс, перераспределяя кремний от кэша и управления к плотным массивам арифметико-логических устройств (ALU), ставя совокупную пропускную способность выше задержки одного потока.
Трехмерная графика реального времени двигала эту ориентированную на пропускную способность специализацию на протяжении 1990-х. Ранние графические ускорители разгружали фиксированные задачи растеризации, например передачу растровых изображений и заполнение многоугольников. В 1999 году GeForce 256 от NVIDIA включил аппаратно ускоренные преобразования и освещение (T&L), переложив преобразования координат с хостового CPU на выделенный кремний на кристалле. Хотя эти первые графические процессоры (GPU) еще не были программируемыми, они показали, как специализированные конвейеры могут ускорять фиксированные математические операции, такие как преобразование вершин и наложение текстур. Однако жесткие конвейеры с фиксированной функцией создавали сильный дисбаланс загрузки: сложная геометрия оставляла аппаратуру растеризации простаивающей, а плотное затенение фрагментов не давало работы конвейерам вершин. Переход к программируемым шейдерам в GeForce 3 (2001) и к унифицированной архитектуре шейдеров в GeForce 8 (2006) устранил этот дисбаланс, заменив разделенные функциональные блоки массивами одинаковых программируемых вычислительных ядер. Такое структурное объединение отделило аппаратуру от фиксированных этапов графики и сделало GPU универсальным параллельным процессором, способным выполнять плотную матричную арифметику. К 2004 году мощные GPU могли обрабатывать более 100 миллионов многоугольников в секунду (Owens et al., 2008).
Параллельно с графической аппаратурой цифровые сигнальные процессоры (DSP) решали другое физическое ограничение: детерминированное выполнение с низкой задержкой в жестких энергетических бюджетах. Универсальные иерархии кэшей вносят переменную задержку при каждом промахе кэша, что нарушает строгие сроки реального времени в обработке сигналов. DSP заменяли непредсказуемые кэши scratchpad-памятью под управлением программного обеспечения и сочетали выделенные блоки умножения с накоплением (MAC) с буферами кольцевой адресации, чтобы выполнять непрерывную фильтрацию и преобразования Фурье без дрожания из-за простоя памяти. Texas Instruments TMS32010 (1983) показал, как предметно-специфичные наборы инструкций и выделенные пути MAC могут опережать процессоры общего назначения на векторных операциях (Lyons, 2011).
Сетевая обработка сталкивалась с еще более жестким сроком задержки: поддерживать инспекцию пакетов на полной скорости линии. Когда пакеты приходят каждые несколько наносекунд, задержка обращения к памяти за пределами кристалла приводит к потере пакетов. Сетевой процессор Intel IXP2800 показывает последствия этого жесткого ограничения: соблюдение сроков пакетов на полной скорости линии не оставляет запаса на промахи кэша, поэтому проект располагает много параллельных ядер вокруг ярусной памяти на кристалле, чтобы держать данные рядом с вычислениями. Такая организация «память рядом с вычислениями», навязанная сроками прихода пакетов, предвосхитила иерархии памяти, которые современные ускорители машинного обучения используют, чтобы массивы процессорных элементов постоянно получали тензорные тайлы.
Эти области разошлись в реализации, потому что их вычислительные профили различались. DSP оптимизировались под потоки сигналов одномерной природы с низкой задержкой в тепловых рамках милливатт, тогда как сетевые процессоры оптимизировались под маршрутизацию пакетов с минимальным хранением состояния. Напротив, в нагрузках глубокого обучения доминируют плотные матричные умножения и многомерные свертки. Эти операции обладают высокой арифметической интенсивностью и массовым параллелизмом данных. Унифицированный GPU стал идеальным соответствием машине: тысячи параллельных ALU-линий, поддержанные широкими шинами памяти, с многопоточностью под управлением аппаратуры, которая скрывает задержку обращения к памяти за пределами кристалла во время плотных тензорных операций.
Практическое значение этого архитектурного совпадения стало очевидным в 2012 году, когда AlexNet5 (Krizhevsky et al., 2012) выиграл соревнование ImageNet с отрывом более десяти процентных пунктов. Обучение проводилось на двух потребительских графических картах NVIDIA GTX 580, в каждой из которых было всего 3 ГБ видеопамяти. Лежащий в основе алгоритм, сверточные сети, обученные градиентным спуском, существовал десятилетиями, но пропускная способность CPU делала крупномасштабное обучение вычислительно непрактичным. Отобразив плотные двумерные свертки прямо на исполнительные блоки GPU, авторы сжали месяцы вычислений на CPU до пяти-шести дней. В терминах D·A·M ограничение машины раньше определяло, какие алгоритмы осуществимы; совпадение параллельной структуры сверток с GPU, ориентированным на пропускную способность, сделало глубокие модели практичными для обучения на больших наборах данных.
Появление предметно-специализированных архитектур
Эти разнообразные паттерны ускорения сошлись в более широком архитектурном сдвиге. Появление архитектур, специализированных под предметную область (DSA)6 обозначает переход в проектировании компьютерных систем, вызванный замедлением традиционных выгод масштабирования (Esmaeilzadeh et al., 2011) и растущими вычислительными требованиями специализированных нагрузок. Закон Мура7 описывал длительный рост плотности транзисторов (Moore, 1998). Масштабирование Деннарда8 (Dennard et al., 1974) позволяло напряжению падать по мере уменьшения транзисторов; его распад убрал сопутствующий путь к обычному росту частоты при постоянной плотности мощности. Вместе эти сдвиги ограничили производительность и эффективность процессоров общего назначения. Как утверждали (Hennessy and Patterson, 2019) в Тьюринговской лекции 2017 года, ответом стала новая эра предметно-специфичных решений, оптимизированных под важные нагрузки.
Масштаб этой проблемы становится очевиден на «Системном разрыве», который показывает иллюстративный разрыв между спросом моделей и предложением аппаратуры; иногда его обсуждают под неформальным названием закон Хуанга.9 Нормированный сценарий предполагает, что предложение GPU растет примерно в 1,7 раза в год, а спрос моделей примерно в 6 раз в год, что дает разрыв, который расширяется примерно в 3–4 раза каждый год. Опубликованные тенденции вычислений мотивируют качественное расхождение, но построенные темпы являются сценарными допущениями, а не прогнозом (Amodei and Hernandez, 2018); (Epoch AI, 2024).
Системный разрыв: относительный рост вычислений (логарифмическая шкала), сравнивающий спрос моделей с предложением аппаратуры, нормированный к 2012 = 1,0. Серая пунктирная линия (CPU) и синяя штриховая линия (GPU) отражают прогресс аппаратуры, который отстает от экспоненциальной красной сплошной линии (спрос моделей). Фиолетовая область — «системный разрыв», который нужно преодолеть через параллелизм и совместное проектирование.
График нормирован к базе 2012 года, чтобы подчеркнуть относительный рост. Фиолетовая область выделяет это расхождение: системный разрыв нельзя закрыть одними лишь успехами техпроцесса; он требует архитектурных новшеств, параллельного распределения и совместного проектирования аппаратуры и программного обеспечения.
Технологическая S-кривая: почему архитектуры меняются
Многие вычислительные технологии описываются жизненным циклом: брожение (начальный медленный прогресс), взлет (быстрый рост) и насыщение (убывающая отдача вблизи физических или экономических пределов). «Две S-кривые специализированных вычислений» использует две концептуальные S-кривые, чтобы выразить этот шаблон: когда выигрыши одного проектного подхода сходят на нет, архитектуры под предметную область могут открыть новую кривую эффективности для нагрузок со стабильной вычислительной структурой.
Две S-кривые специализированных вычислений: концептуальная схема показывает, как подход общего назначения (серый) выходит на убывающую отдачу, в то время как специализированный подход (синий) начинает новую кривую эффективности. Это схема архитектурного перехода, а не измеренный ряд исторической производительности. Специализация аппаратуры под устойчивые нагрузки линейной алгебры может дать большие выигрыши ценой общей программируемости.
Привычные выигрыши, которые раньше связывали с уменьшением транзисторов, замедлились, в то время как вычислительный спрос моделей ИИ вырос быстрее, чем емкость аппаратуры общего назначения. Закрыть этот разрыв нельзя, дожидаясь следующих уменьшений техпроцесса CPU; для этого нужны архитектурные изменения, которые перестраивают то, как нагрузки используют площадь кремния, пропускную способность памяти и тепловой бюджет.
В фазе роста S-кривой общего назначения полупроводниковое масштабирование давало предсказуемый прирост производительности существующему программному обеспечению. По классическому масштабированию Деннарда уменьшение размеров транзисторов позволяло пропорционально снижать рабочее напряжение, сохраняя плотность мощности постоянной при росте тактовых частот. Когда масштабирование Деннарда распалось в середине 2000-х, токи утечки ниже порога не дали снижать напряжение дальше, и тактовые частоты уперлись в тепловой барьер рассеивания. Архитекторы сначала ответили добавлением процессорных ядер, но расширение числа ядер упиралось в две физические границы: закон Амдала и темный кремний, то есть тепловое ограничение, при котором лишь часть транзисторов чипа может переключаться одновременно на полной частоте. Кроме того, CPU общего назначения тратят подавляющую часть энергетического бюджета на накладные расходы управления: выборку и декодирование инструкций, предсказание ветвлений, спекулятивное внеочередное выполнение и когерентность кэшей, а не на арифметику. Для регулярных нагрузок линейной алгебры выполнение одной инструкции на ядре CPU может расходовать сотни пикоджоулей энергии управления ради операции с плавающей точкой стоимостью 3 пикоджоуля.
Архитектуры под предметную область переходят на новую кривую эффективности, устраняя эти накладные расходы управления и отдавая кремний согласованным путям данных. Главное архитектурное новшество — настроенный путь данных: блоки матричного умножения в ускорителях ИИ, например, реализуют систолические массивы, решетчатые сети процессорных элементов, которые вычисляют и передают данные непосредственно соседним блокам. Вместо того чтобы постоянно записывать промежуточные результаты обратно в регистровые файлы или кэши, систолический массив проталкивает активации и веса через соседние ячейки, так что значение, однажды прочитанное из локальной памяти на кристалле, используется повторно по всей строке или столбцу операций умножения с накоплением. Когда такой путь данных установлен, иерархию памяти можно напрямую подогнать под шаблоны повторного использования нагрузки: аппаратно управляемые кэши заменяются программно управляемыми scratchpad-буферами, логикой предвыборки и контроллерами памяти, рассчитанными на детерминированные потоки тензоров.
Специализированные наборы инструкций усиливают эту физическую специализацию. Вместо того чтобы выбирать и декодировать скалярные операции по одной, наборы инструкций под предметную область кодируют крупнозернистые тензорные примитивы в одну макроинструкцию, которая настраивает тысячи арифметических блоков одновременно и амортизирует накладные расходы декодирования и диспетчеризации. Блоки схемы с фиксированной функцией полностью обходят программное выполнение для неизменных операций, таких как функции активации и слои нормализации. Итоговая эффективность возникает из согласованной специализации аппаратуры на каждом слое: перемещение данных, локальность памяти, накладные расходы инструкций и реализация схемы выравниваются вокруг одних и тех же вычислительных инвариантов.
Системы на кристалле (SoC) для мобильных устройств прямо показывают этот компромисс эффективности. Современные смартфоны декодируют видео высокого разрешения в тепловых рамках милливатт, хотя обработка видео требует миллиардов операций в секунду. Такая эффективность достигается благодаря выделенным аппаратным видеокодекам10, которые реализуют отраслевые стандарты, такие как H.264/AVC и H.265/HEVC (Sullivan et al., 2012). Эти специализированные схемы дают прирост производительности на ватт на порядки по сравнению с программным декодированием на ядрах CPU общего назначения, а точный выигрыш зависит от профиля кодека, разрешения, техпроцесса и базового CPU.
Этот архитектурный сдвиг повторяется в областях вычислений с интенсивными данными всякий раз, когда вычислительное ядро нагрузки стабилизируется. Геномная обработка использует специализированные ускорители, потому что сборка длинных прочтений содержит фиксированные ядра динамического выравнивания, которые выделенный аппаратный конвейер реализует прямо в кремнии (Turakhia et al., 2018). Криптографические нагрузки породили специализированные интегральные схемы (ASIC)11 по той же причине: фиксированные алгоритмы хеширования оправдывают выделенные кремниевые конвейеры, которые жертвуют всякой программируемой гибкостью ради максимальной энергоэффективности (Bedford Taylor, 2017).
Эти переходы подчеркивают центральный принцип современного системного инжиниринга: эпоха автоматического роста производительности за счет масштабирования процессоров общего назначения закончилась. Десятилетиями разработчики программного обеспечения могли полагаться на закон Мура и ускорять существующие программы без изменения структуры кода. С распадом масштабирования Деннарда вычислительные узкие места уже нельзя устранить, дожидаясь более быстрых ядер общего назначения; их нужно решать, проектируя машину под алгоритм. В терминах D·A·M ускоритель делает физическое ограничение машины явным. Производительность определяется совместным проектированием аппаратуры и программного обеспечения: эффективность выполнения зависит от того, насколько хорошо тензорные размерности алгоритма, шаблоны доступа к памяти и параллелизм отображаются на специализированные физические структуры архитектур под предметную область.
Специализация аппаратуры для машинного обучения
Многие важные нейросетевые нагрузки содержат регулярные тензорные операции, существенный параллелизм данных и возможности для пониженной точности. Плотные матричные умножения и свертки — яркие примеры, поскольку их структура цикла раскрывает повторяющиеся операции и предсказуемое повторное использование. Эти характеристики породили специализированные архитектуры, которые были бы неэффективны для произвольного кода, но дают существенный выигрыш на подходящих ядрах ML. Другие операции ML остаются нерегулярными, ограниченными пропускной способностью, последовательными или слишком малыми, чтобы загрузить широкий движок, поэтому одно и то же устройство не обязано ускорять каждую часть модели. Аппаратура, построенная для использования регулярной части, составляет класс устройств, известных как ускорители ML, а экономический повод для специализации возникает тогда, когда поддерживаемая нагрузка важна в масштабе парка серверов, а не только в бенчмарке.
Обрыв емкости TPU
Сценарий: в 2013 году компания Google рассчитала, что рост пользовательского спроса на голосовой поиск (3 минуты в день на пользователя) потребует удвоения глобальной емкости дата-центров для вывода нейросетей на CPU (Jouppi et al., 2017).
Диагностика: емкость серверов на CPU общего назначения экономически не могла вместить экспоненциальный рост FLOP на вывод, что грозило узким местом капитальной инфраструктуры.
Системный урок: специализированное аппаратное ускорение становится обязательным, когда объем нагрузки пересекает экономические пороги уровня парка. Совокупная арифметическая интенсивность и совокупная стоимость владения серверами определяют решения о развертывании специализированных ASIC.
Вычислительные требования ML выявляют ограничения традиционных процессоров. В иллюстративном сценарии, где эталонный CPU удерживает от 5 до 10 процентов своего пика на нейросетевой нагрузке, верхняя граница дает примерно 100 GFLOP/s (миллиардов операций с плавающей точкой в секунду). Эта неэффективность возникает из-за архитектурных несоответствий: CPU оптимизированы под производительность одного потока и нерегулярный доступ к памяти, тогда как нейросети требуют массового параллелизма и предсказуемых потоков данных. Ограничение пропускной способности памяти усугубляет проблему: один слой нейросети может требовать доступа к гигабайтам параметров, что перегружает иерархии кэшей CPU, рассчитанные на меньшие рабочие наборы.
Энергетическая экономика перемещения данных влияет на проектирование ускорителей. На одно событие обращение к 32-битному значению из DRAM может стоить порядка раз больше энергии, чем одно умножение FP32 (точные значения зависят от техпроцесса и проекта), что делает перемещение данных главной целью оптимизации (Horowitz, 2014); (Sze et al., 2017). Это расхождение помогает объяснить переход от перепрофилированных графических процессоров к нейросетевым ускорителям специального назначения. TPU и другие специализированные ускорители могут поддерживать высокую загрузку на плотных ядрах, реализуя систолические массивы и другие архитектуры, которые максимизируют повторное использование данных и минимизируют их перемещение.
Обучение и вывод имеют разные вычислительные профили, которые влияют на проектирование ускорителей. Обучение вычисляет градиенты и обновляет веса: FP32 и FP16 — стандартизованные двоичные форматы с плавающей точкой (IEEE Standards Association, 2019), а смешанная точность использует низкоточные тензорные операции с накоплением в более высокой точности, когда это позволяет точность (Micikevicius et al., 2017). Обратное распространение также сохраняет или пересчитывает активации (см. «Требования памяти для активаций»), что повышает требования к памяти. Вывод требует только прямого прохода и может использовать INT8 или INT4, когда это поддерживают модель и ядра. Интерактивный вывод может ставить приоритетом хвостовую задержку, тогда как офлайн или пакетный вывод может ставить приоритетом пропускную способность, стоимость или энергию; выбор ускорителя следует фактической цели обслуживания. Эти профили часто благоприятствуют высокоемким системам обучения с ориентацией на пропускную способность и энергоэффективным путям вывода, но размер батча и политика обслуживания могут обратить кажущееся предпочтение.12
Ускоритель ML
Ускорители машинного обучения — это процессоры или специализированные блоки, предназначенные в первую очередь для распространенных тензорных операций нейросетей и потоков данных. Они добиваются высокого и повторного использования данных на подходящих нагрузках, выделяя больше ресурсов арифметике и локальному перемещению данных, чем это может сделать путь выполнения общего назначения.
- Значение: определяющая черта ускорителя ML — не одна лишь сырая арифметика, а сбалансированный путь, который подает операнды и удерживает пригодные для повторного использования значения рядом. A100 дает 2,04 ТБ/с пропускной способности памяти устройства, примерно в 10,2 раза больше, чем иллюстративный путь 200 ГБ/с к DRAM хоста, используемый здесь (NVIDIA Corporation, 2020; Choquette et al., 2021). Это сравнение потолков, а не гарантия: чтобы приблизиться к его пику 312 TFLOP/s для FP16/BF16, по-прежнему нужны достаточная арифметическая интенсивность, параллелизм и повторное использование.
- Отличие: выигрыши зависят от поддержки операций, параллельной работы, регулярного доступа к данным и программного стека, который выбирает нужный путь. Ускоритель ML может быть на порядки быстрее эталонного CPU на больших плотных умножениях матриц, но терять большую часть преимущества на малых, нерегулярных, насыщенных синхронизацией или управлением нагрузках. Передачи данных и неподдерживаемые операторы могут доминировать даже тогда, когда ускоряемое ядро само по себе быстрое.
- Типичная ошибка: распространенное заблуждение состоит в том, что ускорители ML всегда ускоряют машинное обучение. Чтобы приблизиться к пиковой пропускной способности, нужны совместимая точность, форма операции, раскладка, реализация и достаточно параллельной работы, чтобы занять нужные блоки. Загрузка также зависит от того, способны ли пути памяти и межсоединений поддерживать эту работу. Поэтому авторегрессивный запрос с батчом 1 может использовать лишь малую долю арифметической мощности большого ускорителя для обучения, хотя то же устройство хорошо работает на пакетном префилле или обучении.
Один доступ к DRAM стоит более чем в 100 раз дороже одного умножения FP32 на событие.
Контекст развертывания определяет архитектурный выбор, указывая на связывающее ограничение. В дата-центрах таким ограничением часто выступает время до результата при обучении массивных моделей. NVIDIA H100 обменивает сотни ватт мощности на высокую пропускную способность (Choquette, 2023); снижает ли этот обмен общую стоимость, зависит от загрузки, цены аренды, масштабирования нагрузки и тарифа на электроэнергию. TPUv4 от Google делает похожий архитектурный выбор, ставя пропускную способность выше за счет систолических массивов и памяти с высокой пропускной способностью (Jouppi et al., 2023).
Фильтр ускорителя
Используйте иерархию энергии, чтобы решить, когда специализация окупается.
Энергетическая инверсия
- Стоимость перемещения данных: можете ли вы объяснить, почему перемещение данных из DRAM стоит в 100 раз больше энергии, чем вычисления над ними?
- Архитектурный ответ: объясните, как систолические массивы (TPU) и тензорные ядра (GPU) сокращают повторное перемещение одних и тех же операндов.
Логика выбора
- Обучение против вывода: почему чипам обучения нужна огромная пропускная способность HBM, тогда как чипы вывода ставят приоритетом низкую задержку и операции INT8?
На периферии приоритет часто смещается к энергии на один вывод и жестким ограничениям по задержке и мощности, хотя пропускная способность остается важной для непрерывных потоков с камер, аудио или датчиков. Камера смартфона или аудиотракт, работающий постоянно в бюджете в несколько ватт, не может просто взять высокомощную систему памяти ускорителя центра обработки данных. Периферийные архитектуры вместо этого сокращают перемещение данных через локальные scratchpad-буферы, плотно интегрированные ускорители, динамическое изменение напряжения и частоты и событийную обработку, когда нагрузка это позволяет. Тот же принцип «стены памяти» действует в обоих случаях: чипы центров обработки данных вкладываются в емкость и пропускную способность памяти с высокой пропускной способностью (HBM), тогда как периферийные чипы в значительной мере полагаются на близость и повторное использование.
Ни одна архитектура не доминирует во всех нагрузках ML. Периферийные устройства ценят энергоэффективность и ограниченную задержку, тогда как обучение в облаке ценит пропускную способность, емкость и производительность межсоединений. Облачный вывод может подчеркивать стоимость запроса или хвостовую задержку, а периферийное устройство все же может нуждаться в устойчивой пропускной способности для потока реального времени. Специализированные архитектуры поэтому отражают свой контекст развертывания, но все они подчинены энергетическим и временным затратам на перемещение данных.
«Тенденции специализации аппаратуры» подытоживает эти вехи специализации аппаратуры. Сопроцессоры с плавающей точкой ускорили арифметику, которую раньше выполняли программно, ранние GPU повысили графическую пропускную способность, а медиаблоки показали, как стабильные конвейеры могут оправдывать блоки с фиксированной функцией. Ускорители ИИ сочетают плотные тензорные блоки с иерархиями памяти и программной поддержкой, так что интеграция перемещения данных и параллельного выполнения становится центральной задачей.
Современное ускорение ИИ, таким образом, выходит за пределы кристалла. Полезным ускорителям нужна поддержка фреймворков, компилятора, библиотек, драйверов и среды выполнения для преобразований графа, выбора ядер, слияния, планирования памяти и развертывания в средах от дата-центров до периферийных устройств. Неподдерживаемые операции или окружающие передачи данных могут свести на нет выигрыш на уровне ядра.
| Эпоха | Вычислительный шаблон | Примеры архитектур | Характеристики |
|---|---|---|---|
| 1980-е | Арифметика с плавающей точкой и обработка сигналов | FPU, DSP | • Однозадачные движки • Узкие наборы инструкций • Интерфейсы сопроцессоров |
| 1990-е | Трехмерная графика и мультимедиа | GPU, блоки SIMD | • Много одинаковых вычислительных блоков • Регулярные шаблоны данных • Широкие интерфейсы памяти |
| 2000-е | Кодирование мультимедиа в реальном времени | Медиакодеки, сетевые процессоры | • Конвейеры с фиксированной функцией • Высокая пропускная способность • Оптимизация производительности и мощности |
| 2010-е | Тензорные операции глубокого обучения | TPU, тензорные ядра GPU | • Блоки матричного умножения • Массовый параллелизм • Оптимизация пропускной способности памяти |
| 2020-е | Специализированное ускорение под приложения | Движки ML, Smart NIC, ускорители предметных областей | • Пути данных под конкретные нагрузки • Настроенные иерархии памяти • Конструкции под приложения |
Тенденции специализации аппаратуры: последовательные эпохи вычислений постепенно интегрируют специализированную аппаратуру, чтобы ускорять распространенные нагрузки, переходя от CPU общего назначения к архитектурам под предметную область и далее к настраиваемым ускорителям ИИ. Подгонка аппаратуры под вычислительные шаблоны повышает производительность и энергоэффективность и стимулирует развитие систем машинного обучения.
Узкое место интеграции
Эволюция от числового сопроцессора Intel 8087 к современным графическим и ИИ-ускорителям обнаруживает устойчивую закономерность: аппаратура развивается, подстраиваясь под доминирующее узкое место алгоритма (Palmer, 1980); (Goodfellow et al., 2016); (Sze et al., 2017); (Jouppi et al., 2017). Там, где 8087 разгружал арифметику с плавающей точкой, которая перегружала универсальные CPU в научных вычислениях, современные ИИ-ускорители нацелены на плотное умножение матриц и свертки. В этой области подключить сырые арифметические блоки несложно; сложно другое, подавать в них данные. Современные ИИ-архитектуры должны устранить узкое место интеграции: переносить операнды и результаты через иерархию памяти достаточно быстро и эффективно, чтобы загрузить тысячи параллельных вычислительных блоков. Специализированный кремний дает существенный выигрыш производительности на ватт по сравнению с процессорами общего назначения только тогда, когда вычислительная нагрузка концентрируется в регулярные операции, которые совпадают с физическими путями данных аппаратуры.
Три свойства ядер нейросетей делают это узкое место решаемым. Во-первых, большие матричные умножения и свертки открывают обширный параллелизм данных, который массивы процессорных элементов могут использовать одновременно. Во-вторых, статические или скомпилированные тензорные графы имеют предсказуемый поток данных, что позволяет компилятору разбивать передачи на тайлы и размещать их в локальной scratchpad-памяти13, а не полагаться только на аппаратно управляемые кэши. Это дает программному обеспечению явный контроль над регулярными рабочими наборами, а аппаратные кэши сохраняются для нерегулярного доступа. В-третьих, многие тензорные операции допускают снижение точности, поэтому поддерживаемые 8-битные или 4-битные пути повышают плотность вычислений и уменьшают число байтов на значение (Dally et al., 2021); (Dally, 2023). И наоборот, нагрузки, в которых доминируют динамический поток управления, большие таблицы эмбеддингов, мелкие тензоры, переменные формы или строгие требования к точности, нарушают эти допущения и остаются ограниченными задержкой памяти и нерегулярным доступом.
Когда арифметической мощности становится достаточно, центральной инженерной задачей становится удержание данных достаточно близко, чтобы ее использовать. Обращение к DRAM может потреблять более чем в 100 раз больше энергии, чем арифметическая операция низкой точности, при физических ограничениях, которые проанализировал (Horowitz, 2014). Эта крутая энергетическая иерархия объясняет, почему архитектуры ускорителей вкладывают площадь кремния и бюджет мощности в HBM, SRAM на кристалле и scratchpad-память под управлением программного обеспечения, а не только в добавление арифметико-логических устройств.14
Аппаратное ускорение устраняет узкое место интеграции с помощью специализированной пространственной раскладки и многоярусных иерархий хранения. Как показано на архитектурном чертеже в «Устройство современного ИИ-ускорителя», высокоскоростная память устройства питает общее хранилище на кристалле, которое, в свою очередь, снабжает локальную scratchpad-память, окружающую решетку исполнительных блоков.
Устройство современного ИИ-ускорителя: этот обобщенный схематический чертеж объединяет распространенные компоненты, а не изображает один продукт. Интерфейс хоста связывает ускоритель с CPU, интерфейс высокоскоростной памяти устройства питает общее хранилище на кристалле, а процессорные элементы содержат матричные, векторные блоки и блоки специальных функций с локальной памятью. Реальные ускорители различаются набором блоков и тем, является ли хранилище аппаратно управляемым кэшем или программно управляемой scratchpad-памятью.
На обобщенной схеме в «Устройство современного ИИ-ускорителя» массив процессорных элементов содержит блоки, специализированные под разные классы операций: матричные блоки выполняют плотное умножение матриц, векторные блоки — поэлементную арифметику, а блоки специальных функций аппроксимируют трансцендентные операции, такие как экспоненты и активации. Число, группировка и фирменная номенклатура этих блоков различаются у разных архитектур, но все они стремятся использовать параллелизм данных на тензорных тайлах. В некоторых конструкциях блоки организованы в явную двумерную систолическую решетку; в других матричные движки распределены среди широких параллельных вычислительных ядер. Схема отражает функциональные обязанности, а не физическую раскладку одного производителя.
Дополняя исполнительные блоки, иерархия памяти амортизирует задержку и энергетическую стоимость переноса данных на нескольких уровнях. Высокоскоростная память дает внешнюю емкость и совокупную пропускную способность, а общая память на кристалле и кэши или scratchpad-память отдельных элементов снижают трафик за пределами кристалла. Конкретные реализации различаются: одни опираются на аппаратно управляемые кэши, другие открывают программно управляемую SRAM, многие сочетают оба подхода, но физический принцип постоянен: перенос тензорного тайла через границы корпуса стоит на порядки больше энергии, чем его хранение на кристалле. Компиляторы и ядра среды выполнения должны координировать емкость тайлов, повторное использование, предвыборку и двойную буферизацию, чтобы операнды оставались в быстрой локальной памяти. Расширение пропускной способности HBM поднимает потолок внешнего трафика, но без временного и пространственного повторного использования в локальной SRAM блоки исполнения простаивают в ожидании операндов. В разделе «Физика вычислений» приложения «Основы машины» собраны справочные характеристики современных ускорителей, включая H100 и TPU v5, и сведена иерархия задержек.
Хостовый интерфейс связывает ускоритель с CPU хоста и более широкой системной памятью. CPU хоста координирует графы выполнения, асинхронный ввод-вывод и операции с откатом на CPU, тогда как ускоритель выполняет отправленные ему вычислительные ядра. Это разделение не абсолютно: современные ускорители могут самостоятельно планировать очереди работ, а CPU могут вычислять тензорные операции. На практике пропускная способность системы зависит от того, где выполняется каждый оператор, и от объема передач, запусков ядер и барьеров синхронизации между ними. Блоки прямого доступа к памяти (DMA) и аппаратно управляемые очереди могут совмещать передачи между хостом и устройством с активным выполнением, но неподдерживаемые операторы вынуждают дорогие обращения обратно к CPU. Граница обмена между памятью хоста и хранилищем ускорителя поэтому задает реальный предел ускорения: время выполнения ядра почти не важно, если передачи между хостом и устройством доминируют в сквозной задержке.
Специализация, видимая в процессорных элементах, векторных конвейерах и многоярусных scratchpad-буферах, отражает вычислительный профиль нейросетей: модели многократно вызывают компактный набор линейно-алгебраических и поэлементных примитивов. В рамках D·A·M алгоритмические изменения дают ускорение по реальному времени только тогда, когда их вычислительная структура и шаблоны доступа к памяти напрямую отображаются на эти специализированные аппаратные примитивы. Алгоритмические оптимизации, которые сокращают теоретические операции, не совпадая с путями данных аппаратуры, оставляют блоки вычислений без работы и превращают заявленный выигрыш в чисто теоретический.
Примитивы вычислений ИИ
Во всех полносвязных, сверточных слоях и слоях внимания обучаемые линейные преобразования сводятся к повторяющимся операциям MAC. Большой слой может выдать миллионы или миллиарды MAC, а его регулярная тензорная структура открывает параллельную работу и повторное использование, что делает его естественной целью для специализации. MAC доминируют не во всех моделях и не на всех фазах: нормализация, маршрутизация, индексирование, коммуникация и поэлементные операции могут стать ограничивающими, однако именно MAC составляют большую часть пиковой арифметической мощности современных ускорителей ML. Доминируют ли они реальное время выполнения, по-прежнему зависит от формы тензоров, перемещения данных и окружающих операторов.
Аппаратные блоки, которые используют эти шаблоны, — это примитивы вычислений ИИ: специализированные функциональные блоки, каждый из которых оптимизирован под определенный класс операций. Три примитива особенно распространены в ускорителях, и каждый нацелен на свой вычислительный шаблон в нейросетях.
На уровне фреймворка одно декларативное утверждение инкапсулирует тысячи арифметических операций («Абстракция плотного слоя»).
Абстракция плотного слоя: высокоуровневые API фреймворков инкапсулируют 131 072 MAC (256 входов умножить на 512 выходов) в одном вызове функции, скрывая вычислительную сложность от разработчика и одновременно позволяя автоматическую оптимизацию аппаратуры.
# Фреймворк абстрагирует вычислительно емкие операции
dense = Dense(512)(input_tensor) # 256x512 MAC на образец
Под этим вызовом API движок автоградиента или компиляции понижает слой до вычислительного графа. «Раскрытие операции умножения матриц» показывает эту декомпозицию: объемное матричное умножение, широковещательное добавление смещения и поэлементную активацию.
Раскрытие операции умножения матриц: каждый плотный слой раскладывается на матричное умножение и поэлементные операции, раскрывая доминирующий вычислительный шаблон, на котором построено множество ядер нейросетей.
# Работа линейного преобразования растет как input_dim x output_dim x
# batch.
output = (
matmul(input, weights) + bias
) # Умножение матриц доминирует в стоимости
output = activation(
output
) # Поэлементно: пропорционально output_dim x batch
Графовые представления объединяют эти шаги в крупные тензорные операторы, но выполнение на физической аппаратуре требует планирования отдельных скалярных операций. При понижении умножения матриц до вложенных циклов («Исполнение на уровне процессора») структура выполнения становится явной: три вложенных итерации проходят по измерениям батча, выходных признаков и редукции, задавая арифметическую сложность .
Исполнение на уровне процессора: вложенные циклы выявляют операции умножения с накоплением , которые должны выполнять ускорители; для конфигурации , , это 4,2 млн MAC.
# Общее число операций: batch_size × output_size × input_size MAC
for n in range(batch_size): # Измерение батча: распараллеливаемо
for m in range(output_size): # Выходные нейроны: распараллеливаемо
sum = bias[m] # Инициализация аккумулятора
for k in range(input_size): # Измерение редукции: последовательно
sum += input[n, k] * weights[k, m] # Операция MAC
output[n, m] = activation(sum) # Нелинейное преобразование
# Объем работы растет как batch_size × output_size ×
# input_size операций умножения с накоплением
Эти вложенные циклы выявляют три повторяющихся вычислительных шаблона: поэлементные операции вдоль векторов, редукции умножения с накоплением на уровне матриц и нелинейные преобразования. Их повсеместность оправдывает выделенные пути аппаратного выполнения: векторные конвейеры потоково обрабатывают независимые элементы и редукции, матричные движки организуют решетки умножения с накоплением по пространственным тайлам, а блоки специальных функций аппроксимируют нелинейную математику. Границы между этими блоками архитектурные, а не математические: оптимизирующий компилятор часто сливает операции по всем трем путям в одном вызове ядра, чтобы устранить трафик промежуточной памяти.
Векторные операции
Векторные операции ускоряют вычисления, выполняя одну инструкцию над несколькими элементами данных одновременно. В скалярной формулировке «Исполнение на уровне процессора» обработка батча из 32 образцов через плотный слой 256→512 требует 4,2 млн MAC. Скалярный процессор выдает отдельную инструкцию на загрузку каждой пары вход-вес, выполнение умножения и обновление аккумулятора, неся полные накладные расходы выборки, декодирования и предсказания ветвлений на каждом элементе. Векторные конвейеры устраняют эти накладные расходы инструкций, работая с векторными регистрами, которые охватывают несколько параллельных линий выполнения.
RISC-V,15 открытая архитектура набора инструкций (ISA) со стандартизованным векторным расширением (Waterman et al., 2013), дает конкретное воплощение этой модели выполнения. В векторном ассемблере RISC-V («Векторный цикл скалярного произведения») векторные инструкции выражают операции над массивами длины, которая задается во время выполнения, отделяя программное обеспечение от физической ширины линий процессора.
Векторный цикл скалярного произведения: этот иллюстративный цикл обрабатывает несколько пар элементов за итерацию и сводит их к одному скалярному произведению.
fmv.w.x fa0, zero # Скалярный аккумулятор скалярного произведения
fmv.w.x ft1, zero # Нулевое начальное значение для векторной редукции
loop_feature:
vsetvli t0, feature_cnt, e32, m1, ta, ma
vle32.v v1, (in_ptr)
vle32.v v2, (wt_ptr)
vfmul.vv v3, v1, v2
vfmv.v.f v0, ft1
vfredusum.vs v4, v3, v0
vfmv.f.s ft0, v4
fadd.s fa0, fa0, ft0
slli t1, t0, 2 # Четыре байта на элемент FP32
add in_ptr, in_ptr, t1
add wt_ptr, wt_ptr, t1
sub feature_cnt, feature_cnt, t0
bnez feature_cnt, loop_feature
Векторный цикл редукции в «Векторный цикл скалярного произведения» проходит пять аппаратно видимых этапов:
- Настройка длины вектора:
vsetvliнастраивает векторные блоки на 32-битные элементы (e32), динамически вычисляя, сколько элементов (t0) помещается в аппаратные векторные регистры (VLEN). - Инициализация вектора: обнуляется скалярный аккумулятор, который будет хранить накопленное скалярное произведение.
- Векторные загрузки:
vle32.vзагружает смежные 32-битные элементы в векторные регистрыv1иv2, отправляя широкие запросы к памяти через интерфейс памяти. - Векторное умножение и редукция:
vfmul.vvперемножает пары элементов параллельно по векторным линиям, аvfredusum.vsсводит произведения в частичную скалярную сумму. - Арифметика указателей и ветвление цикла: сдвигаются базовые адреса, оставшееся число элементов уменьшается на размер обработанного фрагмента
t0, и при оставшихся элементах выполняется переход.
За итерации векторная инструкция умножения обрабатывает несколько элементов данных одновременно, а широкие загрузки амортизируют накладные расходы декодирования инструкций и запросов к памяти. Поскольку длина вектора во время выполнения динамически подстраивается под аппаратную ширину реализации (VLEN), один и тот же бинарный файл корректно работает и на узких встроенных векторных блоках, и на широких конвейерах дата-центров. Для этой нагрузки из 256 признаков реализация с 8 линиями разбивает редукцию примерно на 524 288 векторных фрагментов по батчу.
Помимо плотных внутренних произведений, нагрузки глубокого обучения опираются на более широкий набор векторных инструкций. «Векторные операции» сопоставляет эти примитивные векторные операции с конкретными слоями нейросетей, которые от них зависят.
| Векторная операция | Описание | Применение в нейросетях |
|---|---|---|
| Редукция | Сводит элементы вектора (например, сумма, максимум) | Слои пулинга, вычисление оценок внимания |
| Сбор (gather) | Загружает несколько несмежных элементов памяти | Поиск эмбеддингов, разреженные операции |
| Рассеивание (scatter) | Записывает в несколько несмежных ячеек памяти | Обновление градиентов эмбеддингов |
| Маскированные операции | Выборочно работает с элементами вектора | Маски внимания, обработка заполнения |
| Широковещание скаляра | Применяет скаляр ко всем элементам вектора | Добавление смещения, операции масштабирования |
Векторные операции: базовые векторные операции напрямую соответствуют примитивам глубокого обучения: редукции реализуют слои пулинга, сборка обеспечивает поиск эмбеддингов, рассеивание обновляет градиенты эмбеддингов, а маскированные операции обрабатывают маски внимания. Эти соответствия показывают, как векторная аппаратура поддерживает распространенные примитивы ML.
Выгода выходит за рамки числа инструкций. Смежные векторные загрузки могут эффективно использовать интерфейсы памяти, а накладные расходы управления амортизируются на несколько элементов данных. Сбор, рассеивание, маскирование и короткие хвосты могут использовать меньше линий или требовать дополнительных обращений к памяти, поэтому сама ширина вектора не гарантирует пропорционального ускорения. Архитектурный шаблон не нов. Cray-116 использовал векторные регистры и конвейеризованные функциональные блоки для научных вычислений в 1970-е (Jordan, 1982); современные процессоры ML применяют родственные принципы в гораздо большем коммерческом масштабе.
Векторные операции хорошо подходят для поэлементных преобразований, таких как функции активации, где каждый выход зависит только от своего соответствующего входа. Однако нейросетям также нужны структурированные вычисления, в которых каждый выход зависит от всех входов, — взвешенные суммы, которые задают преобразования слоя. Эти операции «многие ко многим» естественно выражаются как матричные умножения, второй вычислительный примитив.
Матричные операции
Умножение матриц составляет большую часть арифметики во многих плотных нейронных сетях, преобразуя многомерные данные через структурированные шаблоны весов, активаций и градиентов (Goodfellow et al., 2016). Если векторные операции обрабатывают элементы независимо или сводят их, то матричные операции организуют работу сразу по нескольким измерениям. Аппаратура и библиотеки разбивают эти измерения на тайлы, чтобы блоки весов и активаций можно было повторно использовать, а частичные суммы накапливались локально. Эта регулярная структура задает важные аппаратные стратегии, однако малые или нерегулярные матрицы могут оставлять емкость тайлов неиспользованной.
Матричные операции в нейронных сетях
Вычисления нейросетей раскладываются на иерархические матричные операции. «Иерархия операций линейного слоя» показывает эту иерархию на примере линейного слоя, который преобразует входные признаки в выходные нейроны по батчу.
Иерархия операций линейного слоя: пример раскрывает линейный слой в матричное умножение и широковещательное добавление смещения, затем применяет поэлементный ReLU, разделяя матричную и векторную работу, которую должна выполнить аппаратура.
layer = nn.Linear(256, 512) # Слой преобразует 256 входов в 512 выходов
output = layer(input_batch) # Обрабатываем батч из 32 образцов
# Внутреннее представление фреймворка: базовые операции (соглашение о батче по столбцам)
Z = matmul(weights, input) # Матрица: преобразует [256×32]
# вход в выход [512×32]
Z = Z + bias # Вектор: добавляет смещение к каждому
# выходу независимо
output = relu(Z) # Вектор: применяет активацию к
# каждому элементу независимо
Это вычисление показывает масштаб матричных операций в нейросетях. Каждый выходной нейрон (всего 512) должен обработать все входные признаки (всего 256) для каждого образца батча (32 образца). Одна только матрица весов содержит 256 × 512 = 131 072 параметра, которые задают эти преобразования, что объясняет, почему эффективное умножение матриц доминирует в вопросах производительности.
Нейросети используют матричные операции и в архитектурных шаблонах за пределами простых линейных слоев. Свертки превращаются в матричные умножения методом im2col,17 что позволяет эффективно выполнять их на матрично-оптимизированной аппаратуре. «Матричные шаблоны в архитектурах» иллюстрирует эти применения.
Матричные шаблоны в архитектурах: линейные слои, механизмы внимания и свертки сводят ключевую работу к матричным умножениям, поэтому матричная аппаратура становится общим примитивом современных нейросетевых архитектур.
hidden = matmul(weights, inputs)
# weights: [out_dim x in_dim], inputs: [in_dim x batch]
# Результат объединяет все входы для каждого выхода
# Механизмы внимания — несколько матричных операций
Q = matmul(Wq, inputs)
# Проецируем входы в пространство запросов [query_dim x batch]
K = matmul(Wk, inputs)
# Проецируем входы в пространство ключей [key_dim x batch]
attention = matmul(Q.T, K)
# Сравниваем все токены-запросы со всеми токенами-ключами [batch x batch]
# Свертки — умножение матриц после изменения формы
patches = im2col(input)
# Преобразуем изображение [H x W x C] в матрицу патчей
output = matmul(kernel, patches)
# Применяем ядра ко всем патчам одновременно
Эти примеры различаются формой тензоров и шаблоном повторного использования, а от этого зависит, насколько эффективно каждое умножение загружает матричный блок. Линейные слои повторно используют одну матрицу весов по всему батчу; внимание формирует проекции, а затем матрицу оценок от токена к токену; свертка повторно использует каждое ядро на множестве патчей изображения. Выражение всех трех через умножение матриц дает аппаратуре общий интерфейс, но не делает их стоимость выполнения одинаковой. Размер батча, длина последовательности, число каналов и тайлинг определяют, переиспользуются ли операнды локально или многократно загружаются из памяти.
Аппаратное ускорение матричных операций
Этот повсеместный шаблон умножения матриц имеет прямые последствия для проектирования аппаратуры: ускорителям нужны специализированные блоки, которые справляются с такими вычислениями в больших масштабах. «Иллюстративная операция матричного блока» показывает типичный выделенный матричный блок, который обрабатывает весь блок за один раз, и объясняет, почему матричные инструкции и тензорные ядра могут давать гораздо большую пропускную способность, чем скалярные или чисто векторные пути выполнения (NVIDIA, 2017); (Intel Corporation, 2021).
Иллюстративная операция матричного блока: типичные инструкции загрузки, умножения с накоплением и записи работают с матричными блоками, а не с отдельными скалярными элементами.
mload mr1, (weight_ptr) # Загрузка, например, блока 16x16
# матрицы весов
mload mr2, (input_ptr) # Загрузка соответствующего блока входов
matmul.mm mr3, mr1, mr2 # Умножение с накоплением сразу
# по целым блокам
mstore (output_ptr), mr3 # Запись вычисленного блока выходов
Иллюстративный блок работает с матричными тайлами, а не с отдельными элементами. Полное произведение тайла содержит операций умножения с накоплением, но число тактов зависит от конкретной инструкции и архитектуры. Устойчивая пропускная способность зависит также от числа матричных блоков, точности операндов, частоты выдачи инструкций, поведения конвейера и того, успевает ли память снабжать блоки данными. Матричные блоки дополняют векторное выполнение, ускоряя структурированные преобразования «многие ко многим».
Как и векторная обработка, матричное ускорение имеет глубокие исторические корни: DSP и GPU, оптимизированные под матричные вычисления в 1980–1990-е для обработки изображений, научных расчетов и трехмерного рендеринга (Owens et al., 2008); (Hwu, 2011). Нейросети сделали умножение матриц коммерчески доминирующим и привели к интеграции двумерных систолических массивов и матричных движков (таких как тензорные ядра NVIDIA и TPU Google) прямо в тракты данных процессоров.
Линейная алгебра составляет лишь часть конвейера выполнения нейросетей. Между линейными преобразованиями нейросети вводят нелинейные функции активации и слои нормализации. Кусочно-линейные функции, такие как ReLU, отображаются на простые векторные инструкции сравнения, тогда как трансцендентные вычисления (например, экспоненты в softmax и GELU или обратные квадратные корни в нормализации) нельзя напрямую вычислить на путях умножения с накоплением без серьезных штрафов по тактам. «Характеристики операций» сводит характеристики выполнения трех основных вычислительных примитивов и их отображение на операции нейросетей.
| Тип операции | Лучше всего подходит | Примеры | Ключевая характеристика |
|---|---|---|---|
| Матричные операции | Преобразования «многие ко многим» | Преобразования слоев, внимание, свертки | Каждый выход зависит от нескольких входов |
| Векторные операции | Векторная и редукционная работа | Функции активации, нормализация слоя, поэлементные градиенты | Использует поэлементные операции и векторные редукции |
| Пути специальных функций | Трансцендентная арифметика | Экспонента, логарифм, обратный квадратный корень | Использует аппаратно-специфичную аппроксимацию или выделенную логику |
Характеристики операций: матричные операции лучше всего справляются с преобразованиями «многие ко многим», тогда как векторные блоки обрабатывают поэлементные операции и редукции, такие как активация и нормализация. Пути специальных функций обрабатывают трансцендентную арифметику через аппаратно-специфичную аппроксимацию или выделенную логику. Структура операции определяет, какой аппаратный примитив подходит.
Блоки специальных функций
Блоки специальных функций (SFU) или специализированные пути инструкций ускоряют нелинейные функции и связанную с ними арифметику, завершая триаду процессорных примитивов главы. Эта потребность не нова: сопроцессоры с плавающей точкой решали узкие места скалярной арифметики (Palmer, 1980), а цифровые сигнальные процессоры добавляли специализированную арифметику для задач обработки сигналов (Smith, 1997). Реализация может использовать отдельный блок, векторные инструкции аппроксимации или библиотечную последовательность, обменивая точность, задержку и пропускную способность. В нейросетях операции активации, нормализации и softmax могут стать важными между матричными ядрами, особенно когда повторные проходы по памяти или трансцендентные функции ограничивают пропускную способность.
Нелинейные функции
Типичная последовательность слоев показывает, как нематричные операторы входят в конвейер выполнения (Goodfellow et al., 2016). «Последовательность линейного и нелинейного слоя» связывает линейное преобразование с активацией ReLU и пакетной нормализацией, то есть с операциями, которые в коде фреймворка на Python выглядят тривиально, но накладывают на аппаратуру разные арифметические ограничения и ограничения по памяти.
Последовательность линейного и нелинейного слоя: линейный слой, ReLU и BatchNorm объединяют матричную работу, поэлементные операции и нормализацию в одной типичной последовательности слоев.
layer = nn.Sequential(
nn.Linear(256, 512), nn.ReLU(), nn.BatchNorm1d(512)
)
output = layer(input_tensor)
«Раскрытие нелинейной операции» раскрывает эту последовательность на арифметические примитивы, выделяя поэлементное пороговое преобразование ReLU из межбатчевых редукций и обратного квадратного корня, которые требует пакетная нормализация.
Раскрытие нелинейной операции: раскрытие последовательности слоев показывает сравнение ReLU, редукции BatchNorm, вычисление дисперсии и нормализацию через квадратный корень вокруг матричного умножения.
Z = matmul(weights, input) + bias # Линейное преобразование
H = max(0, Z) # Активация ReLU
mean = reduce_mean(H, axis=0) # Статистики BatchNorm
var = reduce_mean((H - mean) ** 2) # Вычисление дисперсии
output = gamma * (H - mean) / sqrt(var + eps) + beta # Нормализация
Аппаратная реализация нелинейных функций
Перенос этих математических функций в кремний выявляет резкие различия в трафике памяти, числе инструкций и загрузке конвейера. Например, пакетная нормализация (Ioffe and Szegedy, 2015) требует многопроходного сбора статистик по памяти, накопления дисперсии и обратного квадратного корня, а softmax требует вычисления экспонент по всему измерению нормировки. Хотя выпрямительная линейная функция (ReLU) математически проста, наивная скалярная реализация создает накладные расходы на ветвления или лишние обращения к памяти, если ее не слить с соседними ядрами. «Операции ReLU и BatchNorm» сопоставляет накладные расходы памяти и зависимостей у поэлементной активации и многопроходной нормализации в развернутой модели цикла без слияния.
Метка нелинейный скрывает три разных контракта выполнения. Поэлементные функции, такие как ReLU, оставляют элементы независимыми и поэтому естественно отображаются на векторные линии или параллельные потоки. Редукции, такие как среднее и дисперсия в пакетной нормализации, вводят зависимости между элементами: частичные результаты нужно объединить, прежде чем продолжится следующий этап. Трансцендентные функции, такие как экспонента, логарифм и обратный квадратный корень, добавляют числовой контракт, поскольку их реализации обменивают задержку, точность и допустимый диапазон входов. Шаблон зависимостей, а не одна лишь математическая метка, определяет, уместны ли векторная арифметика, дерево редукции или специализированный путь аппроксимации. Более быстрый путь специальных функций ускоряет только ту операцию, которую реализует; он не устраняет окружающий трафик тензоров и синхронизацию.
«Операции ReLU и BatchNorm» намеренно явно показывает зависимости и не является моделью оптимизированного ядра. Циклы выявляют три времени жизни состояний: активации для каждого элемента, аккумуляторы для каждого признака и итоговые нормированные выходы. Параметры нормализации нельзя применить, пока не будут доступны нужные статистики, поэтому реализации должны либо сохранять промежуточные активации, либо пересчитывать их. Обучение выводит эти статистики из текущего батча, тогда как вывод может использовать сохраненные статистики и свести нормализацию к поэлементному аффинному преобразованию. Компиляторы могут сливать допустимые этапы, но зависимости данных определяют, какие преобразования сохраняют вычисление. Поэтому чтение листинга как графа зависимостей выявляет долговечные аппаратные вопросы: сколько раз каждый тензор пересекает интерфейс памяти, какие промежуточные значения остаются локально и где редукции вводят синхронизацию.
Операции ReLU и BatchNorm: нейросети обрабатывают входные данные поэлементным выбором и несколькими проходами нормализации, что выявляет проблемы эффективности наивных реализаций.
for batch in range(32):
for feature in range(512):
# ReLU: наивное скалярное сравнение и выбор; оптимизированные ядра
# обычно реализуют это без ветвлений.
z = matmul_output[batch, feature]
h = max(0.0, z) # Условная операция
# BatchNorm: несколько проходов по данным
mean_sum[feature] += h # Первый проход для среднего
var_sum[feature] += h * h # Дополнительный проход для дисперсии
temp[batch, feature] = h # Нужно дополнительное хранение в памяти
# Нормализация требует сложной арифметики
for feature in range(512):
mean = mean_sum[feature] / batch_size
var = (var_sum[feature] / batch_size) - mean * mean
# Вычисление квадратного корня: несколько итераций
scale = gamma[feature] / sqrt(var + eps) # Итеративное
# приближение
shift = beta[feature] - mean * scale
# Дополнительный проход по данным для финального вычисления
for batch in range(32):
output[batch, feature] = temp[batch, feature] * scale + shift
Структура зависимостей в «Операции ReLU и BatchNorm» показывает, почему наивное выполнение обрушивает производительность: арифметическая интенсивность резко падает. Поэлементный ReLU и масштабирование со сдвигом в нормализации выполняют лишь одну-две арифметические операции на каждое четырехбайтовое обращение к памяти, загоняя нагрузку глубоко в режим, ограниченный памятью. Кроме того, поскольку статистики батча нельзя окончательно вычислить, пока не обработаны все образцы, промежуточный тензор temp приходится записать обратно в память и перечитать на последующем проходе, что раздувает потребление пропускной способности памяти и нагрузку на кэш. Одновременно вычисление требует итеративного извлечения корня и деления, которые могут останавливать конвейер на десятки тактов, если выполняются на стандартных целочисленных или арифметико-логических блоках с плавающей точкой. Снижение этих накладных расходов требует двух взаимодополняющих стратегий: аппаратных блоков специальных функций (SFU), которые аппроксимируют трансцендентную арифметику за однозначное число тактов, и слияния ядер на уровне компилятора, которое удерживает промежуточные значения в регистрах, а не выгружает их через шину памяти.
Аппаратная реализация SFU
SFU решают проблему арифметических узких мест, реализуя нелинейные и трансцендентные операции в специализированных функциональных блоках, а не в многоинструкционных программных процедурах. Ускорители используют выделенные схемы тракта данных, такие как квадратичные полиномиальные интерполяторы и небольшие таблицы поиска (LUT), которые вычисляют функции вроде экспоненты, обратного квадратного корня и логарифма за несколько ступеней конвейера. «Иллюстративные операции SFU» показывает, как набор инструкций выставляет эти операции наряду с векторными обращениями к памяти.
Иллюстративные операции SFU: псевдокод показывает векторные нелинейные операции, которые могут отображаться на специализированные пути выполнения; имена инструкций и задержка зависят от реализации.
vld.v v1, (input_ptr) # Загрузка вектора значений (псевдокод)
vrelu.v v2, v1 # Векторный путь ReLU
vsigm.v v3, v1 # Векторный путь сигмоиды
vtanh.v v4, v1 # Векторный путь tanh
vrsqrt.v v5, v1 # Векторный путь обратного квадратного корня
Пути специальных функций балансируют площадь схемы против математической точности. Кусочно-линейные активации, такие как ReLU, требуют лишь однотактной логики сравнения и выбора (максимума) в тракте данных, тогда как трансцендентные функции обменивают размер таблицы поиска и степень полиномиальной интерполяции на ошибку аппроксимации. «Блоки специальных функций» сводит типичные аппаратные механизмы и их качественные характеристики задержки для этих примитивов.
| Функциональный блок | Операция | Стратегия реализации | Иллюстративная задержка |
|---|---|---|---|
| Блок активации | ReLU | Сравнение и выбор или максимум | Низкая; зависит от архитектуры |
| Блок статистик | Среднее, дисперсия | Параллельные деревья редукции | Растет с глубиной редукции |
| Блок экспоненты | exp, log, sigmoid, tanh | Аппроксимация, поиск по таблице и интерполяция | Зависит от архитектуры |
| Блок корней и степеней | sqrt, rsqrt | Итеративное или аппроксимирующее аппаратное обеспечение | Зависит от архитектуры |
Блоки специальных функций: выделенные пути сокращают накладные расходы инструкций для нелинейных примитивов и редукций. Реализации и задержка зависят от архитектуры; таблица описывает механизмы, а не универсальные числа тактов.
Векторные операции, матричные операции и пути специальных функций образуют базовые арифметические примитивы ускорителей ML, однако одни функциональные блоки не определяют устойчивую пропускную способность. Эти примитивы задают, что вычисляет кремний; модель выполнения и иерархия памяти задают, как данные поступают в тракт данных. Матричный блок с номинальной мощностью в сотни TFLOP/s будет простаивать, если пропускная способность памяти не способна поддерживать подачу операндов, если размеры тайлов не совпадают с регистровым блокированием или если синхронизация потоков сводит выполнение к последовательному. Пиковые аппаратные характеристики описывают производительность при идеализированной доступности операндов; модель выполнения архитектуры определяет, какая часть этого пика достижима на реальных нагрузках нейросетей.
Вычислительные блоки и модели выполнения
Применение ReLU к вектору из 512 элементов показывает, почему модели выполнения важны: операция проста, но пропускная способность зависит от того, рассматривает ли аппаратура эти 512 сравнений как скалярные инструкции, линии SIMD, потоки GPU или фрагменты тензорной программы. Современные процессоры ИИ объединяют три вычислительных примитива в различные исполнительные блоки: блоки «одна инструкция, много данных» (SIMD), тензорные ядра и процессорные элементы, которые определяют, как вычисления структурированы и как они открыты программисту. Понимание этой организации раскрывает как теоретические возможности, так и практические характеристики, определяющие реальную пропускную способность.
Отображение примитивов на исполнительные блоки
Отображение вычислительных примитивов на исполнительные блоки определяется физической энергией проводников и повторным использованием данных. Чтение операнда из регистрового файла и его передача по проводникам на кристалле стоит в несколько раз больше энергии, чем сама арифметическая операция. Аппаратные ускорители справляются с этим физическим ограничением, выделяя специализированные исполнительные блоки под характер повторного использования каждого примитива:
- Векторные операции → блоки SIMD и «одна инструкция, много потоков» (SIMT). Они выполняют одномерные поэлементные примитивы, такие как сложение, масштабирование и смещения, на параллельных ALU, которые разделяют логику выборки и декодирования инструкций. Поскольку у векторных операций арифметическое повторное использование на каждый загруженный операнд составляет , их пропускная способность остается ограниченной пропускной способностью портов регистрового файла и подачей из памяти.
- Матричные операции → тензорные ядра18 и систолические массивы. Они отображают двумерные примитивы внутреннего произведения на плотные двумерные решетки схем умножения с накоплением. Направляя активации и веса напрямую между соседними процессорными элементами по локальным проводникам, например в потоках «стационарные веса» или «стационарный выход», матричные блоки повторно используют данные в полете. Такое пространственное повторное использование отделяет арифметическую пропускную способность от пропускной способности основного регистрового файла и поддерживает пиковую вычислительную плотность в управляемом тепловом режиме.
- Специальные функции → блоки специальных функций (SFU). Они отображают трансцендентные и нелинейные примитивы, такие как , и обратные квадратные корни, на выделенные конвейеры, которые используют кусочно-полиномиальную аппроксимацию и таблицы поиска. Вычисление трансцендентных функций на ALU общего назначения требует итеративных численных алгоритмов, которые занимают десятки тактов; выделенные SFU вычисляют эти функции вне основного пути выполнения с меньшей пропускной способностью, не давая слоям активации останавливать векторные конвейеры.
В таксономии D·A·M такое разделение определяет, как алгоритмические примитивы связываются с физическими путями выполнения машины. Прогон плотных матричных умножений через стандартные векторные конвейеры быстро насыщает порты чтения регистрового файла и снижает пропускную способность до малой доли пиковой мощности ускорителя. И наоборот, пропуск поэлементных операций с низкой арифметической интенсивностью или нерегулярных активаций через матричные массивы оставляет линии обработки незагруженными. Устойчивая производительность системы зависит от того, что каждый вычислительный примитив сопоставлен с исполнительным блоком, поток данных и иерархия хранения которого соответствуют его арифметической интенсивности.
Эволюция от SIMD к SIMT
В скалярных процессорных архитектурах выполнение поэлементной операции над вектором активаций из 512 элементов требует 512 отдельных итераций цикла. Каждая итерация выбирает, декодирует и отслеживает инструкцию в конвейере, расходуя на логику управления инструкциями заметно больше энергии, чем арифметико-логическое устройство (ALU) тратит на само сравнение или сложение. При фиксированных бюджетах расчетной тепловой мощности (TDP) скалярное выполнение тратит площадь кремния и мощность на управление инструкциями, а не на пропускную способность арифметики. Модель SIMD Флинна амортизирует эти накладные расходы фронтенда, выдавая одну декодированную инструкцию над несколькими элементами данных, упакованными в широкие векторные регистры (Flynn, 1966). Например, 512-битный регистр SIMD обрабатывает одновременно шестнадцать 32-битных значений с плавающей точкой за один такт, сокращая трафик выборки и декодирования инструкций в шестнадцать раз.
Традиционные SIMD-архитектуры фиксированной ширины привязывают скомпилированный машинный код к конкретным ширинам регистров, например 128, 256 или 512 бит. Когда размерность тензора не совпадает с фиксированной шириной вектора, компиляторам приходится генерировать скалярные циклы очистки или вставлять дополнение памяти, что увеличивает размер бинарного файла и сложность ветвлений. Расширение Arm Scalable Vector Extension (SVE) снимает эту жесткость с помощью выполнения, не зависящего от длины вектора (VLA), и поканальной предикации (Stephens et al., 2017). Вместо того чтобы зашивать физические ширины регистров в кодировку инструкций, SVE опирается на регистры предикатов, которые динамически настраивают активные линии, как показано в последовательности векторной арифметики в «Векторное выполнение Arm SVE».
Векторное выполнение Arm SVE: предицированный векторный ассемблер загружает, умножает и складывает элементы с плавающей точкой, используя регистры, не зависящие от длины.
ptrue p0.s # Создаем предикат для длины вектора
ld1w z0.s, p0/z, [x0] # Загружаем вектор входов
fmul z1.s, z0.s, z0.s # Умножаем элементы
fadd z2.s, z1.s, z0.s # Складываем элементы
st1w z2.s, p0, [x1] # Сохраняем результаты
Инструкция ptrue активирует все доступные линии предиката, не кодируя фиксированную длину вектора. Эта модель программирования, не зависящая от длины вектора, позволяет одному и тому же бинарному файлу SVE работать на реализациях от 128 до 2048 бит без перекомпиляции (Stephens et al., 2017). Расширения Intel Advanced Matrix Extensions (AMX) делают специализацию еще на шаг дальше: выделенные тайловые регистры и ускорители умножения матриц работают непосредственно над двумерными блоками данных, а не над одномерными векторами (Intel Corporation, 2021). Вместе SVE и AMX представляют адаптации на стороне CPU для нагрузок ML: переносимое векторное выполнение и конвейеры матриц с фиксированными тайлами.
Несмотря на гибкость длины вектора, SIMD-архитектуры CPU сталкиваются с фундаментальными физическими ограничениями при масштабировании на большие нагрузки нейросетей. CPU отдают значительную площадь кремния предсказателям ветвлений, логике внеочередного выполнения и многоуровневым иерархиям кэшей, чтобы минимизировать задержку для нескольких последовательных потоков. При потоковой обработке гигабайтов тензорных данных промахи кэша заставляют конвейер ждать сотни тактов выборки из основной памяти. Буфер переупорядочивания инструкций CPU быстро заполняется во время простоев памяти, оставляя широкие конвейеры SIMD без работы. Кроме того, условное ветвление внутри вектора требует вычисления обоих путей под битовыми масками, что снижает полезную загрузку линий.
Модели «одна инструкция, много потоков» (SIMT) снимают эти узкие места, отделяя логическую абстракцию программирования от физического выполнения на аппаратуре (Lindholm et al., 2008); (Nickolls et al., 2008). Вместо того чтобы требовать от программиста упаковывать данные в явные векторные регистры, SIMT предоставляет модель выполнения из независимых скалярных потоков. В архитектурах GPU каждый потоковый мультипроцессор (SM)19 координирует тысячи одновременных потоков. Аппаратные планировщики варпов группируют эти потоки в варпы,20 которые представляют собой блоки выполнения из 32 потоков (или волновые фронты в архитектурах AMD) и выполняют инструкции синхронно на параллельных ALU. Вместо того чтобы полагаться на большие кэши для снижения задержки памяти, GPU скрывают задержку за счет массового параллелизма потоков. SM статически распределяет регистровый файл на кристалле между всеми активными потоками, устраняя накладные расходы на сохранение контекста: когда один варп простаивает, ожидая сотни тактов выборки из памяти за пределами кристалла, планировщик варпов в следующем же такте выбирает и выдает инструкции из другого готового варпа. Базовое ядро матричного умножения в «SIMT-выполнение» показывает, как эта модель скалярных потоков отображается на аппаратуру.
SIMT-выполнение: каждый поток вычисляет уникальный выходной элемент параллельно, что показывает, как SIMT обеспечивает эффективное матричное умножение на GPU.
__global__ void matrix_multiply(float* C, float* A, float*
B, int N) { // Ядро CUDA
// Каждый поток обрабатывает один выходной элемент
int row = blockIdx.y * blockDim.y + threadIdx.y;
int col = blockIdx.x * blockDim.x + threadIdx.x;
float sum = 0.0f;
for (int k = 0; k < N; k++) {
// Потоки в варпе выполняются параллельно
sum += A[row * N + k] * B[k * N + col];
}
C[row * N + col] = sum;
}
В «SIMT-выполнение» ядро CUDA21 назначает каждому потоку один выходной элемент . Соседние потоки в варпе имеют один и тот же индекс строки и последовательные индексы столбцов (threadIdx.x). Когда потоки читают , их запросы к памяти обращаются к смежным четырехбайтовым адресам с плавающей точкой. Контроллер памяти объединяет эти 32 отдельные четырехбайтовые загрузки в одну объединенную транзакцию памяти размером 128 байт, максимизируя эффективность шины DRAM. Одновременно все потоки варпа читают один и тот же элемент , что позволяет аппаратуре передать это единственное считанное значение во все 32 линии. Однако это наивное ядро иллюстрирует железный закон ML-систем: арифметическая интенсивность ограничивает доставляемую пропускную способность. Поскольку каждая итерация внутреннего цикла выполняет всего две операции с плавающей точкой, перезагружая операнды из глобальной памяти без подготовки в SRAM на кристалле, ядро остается сильно ограниченным памятью. Кроме того, выполнение плотного матричного умножения на скалярных ALU SIMT требует одного цикла выборки, декодирования и выдачи инструкции на каждое умножение с накоплением, насыщая порты чтения регистрового файла. Преодоление этого машинного узкого места требует перехода от выполнения «вектор скаляров» к специализированным двумерным матричным блокам.
Тензорные ядра
Рассмотрим одну голову внимания трансформера, которая вычисляет произведение для последовательности из 2 048 токенов с эмбеддингами размерности 64. Эта операция требует умножить матрицу на матрицу : примерно 268,4 млн MAC, или около 536,9 MFLOP, если умножение и сложение считать отдельно. На скалярном процессоре, который выполняет одну операцию с плавающей точкой за такт на частоте 2 ГГц, эта одна голова внимания заняла бы около 268,4 мс. SIMT-выполнение на GPU может распределить эту работу между многими потоками, но тензорные ядра идут дальше: за одну инструкцию они обрабатывают целые матричные тайлы. При иллюстративном допущении, которое используется здесь, тайловый путь выполняет ту же операцию за 0,5 мс, то есть примерно в 536,9 раза быстрее скалярного выполнения. Это ускорение возникает не из-за более высоких тактовых частот, а из-за того, что повторное использование данных на уровне тайла встроено прямо в тракт выполнения.
Пока блоки SIMD и SIMT эффективно выполняют векторную работу, большие матричные вычисления выигрывают от блоков, организованных вокруг многомерных тайлов. Выделенные матричные движки амортизируют загрузку операндов по многим операциям умножения с накоплением, повторно используя тайлы на кристалле. GPU NVIDIA предоставляют тензорные ядра, тогда как TPU Google используют матричные блоки на основе систолических массивов. Оба выполняют блочное умножение матриц с накоплением.22 Выигрыш зависит от повторного использования тайлов, их формы, точности и поведения памяти.
Параллельное выполнение NVIDIA (PTX) открывает эту архитектуру через матричные инструкции, синхронные на уровне варпа.23 В «Операция тензорного ядра» все 32 потока варпа совместно выполняют mma.sync, чтобы вычислить произведение матричного тайла .
Операция тензорного ядра: умножения матриц выполняются параллельно по целым блокам матриц, что повышает вычислительную эффективность обучения нейросетей.
Операция тензорного ядра (пример PTX для GPU):
mma.sync.aligned.m16n8k16.row.col.f32.f16.f16.f32
{d0,d1,d2,d3}, // Регистры результата
{a0,a1,a2,a3}, // Исходная матрица A
{b0,b1}, // Исходная матрица B
{c0,c1,c2,c3}; // Аккумулятор
В этой инструкции варп выполняет операцию умножения с накоплением для матриц , , в смешанной точности: входы () и () имеют формат FP16, а аккумулятор и результат () используют FP32. Вместо того чтобы планировать 64 отдельные скалярные инструкции слитного умножения с накоплением (fma) на поток, планировщик варпа выдает одну инструкцию, которая вычисляет 2 048 операций умножения с накоплением по тракту тензорного ядра. Распределение фрагментов матрицы по регистрам потоков и накопление промежуточных сумм в выделенных деревьях сумматоров снимают два ключевых аппаратных узких места обычного SIMT-выполнения: пропускную способность выдачи инструкций и конкуренцию за порты чтения регистрового файла.
Приоритеты проектирования определяют, как матричные движки выглядят в разных семействах процессоров. Тензорные ядра GPU сохраняют программируемость, ускоряя универсальные ядра глубокого обучения. Конструкции в духе TPU используют крупные матричные блоки, организованные в систолические массивы, чтобы максимизировать устойчивую пропускную способность обучения на плотных тензорных ядрах. Мобильные NPU24 сжимают ту же идею в маломощные блоки вывода, а серверные CPU добавляют расширения матричных инструкций (тайлы класса AMX) для вывода и смешанных нагрузок. Каждая версия меняет один и тот же контракт: сколько гибкости аппаратура сохраняет, сокращая перемещение данных вокруг плотных матричных операций.
«Заявленная пиковая мощность GPU по поколениям» показывает, как специализация, пониженная точность и поддержка разреженности изменили заявленную пиковую мощность. От K20X FP32 до H100 FP8 с структурированной разреженностью показанные значения вырастают примерно на три порядка величины (NVIDIA Corporation, 2017); (NVIDIA Corporation, 2020); (Choquette, 2023); (NVIDIA Corporation, 2024). Точки не измеряют одну и ту же величину: они смешивают форматы точности и сочетают FLOP/s с операциями INT8 в секунду. Поэтому кривая сравнивает самый заметный заявленный путь каждого поколения, а не производительность приложения при одинаковой точности. «Сводная матрица характеристик ускорителей» из приложения «Допущения» дает соответствующие спецификации точности, пропускной способности и ограничений по мощности.
Заявленная пиковая мощность GPU по поколениям: значения одного чипа отложены на логарифмической шкале. Подпись точности у каждой точки существенна: кривая сочетает архитектурные выигрыши с разными числовыми форматами и для части точек — с допущениями о разреженности, а не измеряет масштабирование приложения при одинаковой точности (NVIDIA Corporation, 2017); (NVIDIA Corporation, 2020); (Choquette, 2023); (NVIDIA Corporation, 2024).
Процессорные элементы
На следующем уровне иерархии выполнения ускорители объединяют несколько тензорных ядер с локальной памятью в модульные процессорные элементы (PE). Высокопроизводительные матричные блоки нельзя питать напрямую из глобальной памяти: DRAM за пределами кристалла и HBM в корпусе не обладают пропускной способностью и низкой задержкой, которые нужны, чтобы подавать операнды в плотные массивы арифметики каждый такт. Процессорный элемент устраняет этот дефицит пропускной способности, размещая разнородные вычислительные конвейеры — тензорные ядра для умножения матриц, векторные блоки для поэлементных операций и блоки специальных функций для нелинейных преобразований — рядом с высокоскоростными регистровыми файлами и scratchpad-SRAM. Подготовка операндов внутри PE держит данные рядом с функциональными блоками и амортизирует задержку и энергетическую стоимость внешних обращений к памяти по многократному арифметическому повторному использованию.
Конструкция процессорных элементов различается, поскольку каждая архитектура выбирает свой баланс между плотностью вычислений, емкостью локальной памяти и длиной межсоединений. Intelligence Processing Unit (IPU) от Graphcore распределяет вычисления по 1 472 тайлам, каждый из которых содержит независимый процессорный элемент с выделенной локальной SRAM, чтобы использовать мелкозернистый параллелизм без конкуренции за память (Graphcore, 2020). Cerebras развивает этот принцип локального хранения в системе CS-2, интегрируя примерно 850 000 оптимизированных для ИИ ядер на устройстве масштаба пластины, чтобы полностью обойти интерфейсы памяти за пределами кристалла в пользу сетки SRAM на кристалле (Cerebras Systems, 2021). Процессор Tesla D1 отдает значительную площадь кремния локальной SRAM и высокопроизводительным интерфейсам маршрутизации внутри своих процессорных элементов, отдавая приоритет быстрому обмену данными между плотно связанными массивами вычислений (Tesla, Inc., 2021).
Во всех этих конструкциях связывающее физическое ограничение — это компромисс между плотностью вычислений и локальностью данных: площадь кремния под арифметические блоки не может одновременно вмещать SRAM и проводники маршрутизации. Размещение большего числа исполнительных блоков повышает теоретический пик FLOP/s, но эти блоки простаивают, если пропускная способность памяти и каналы маршрутизации не могут доставить операнды. Эффективность, которую выдает процессорный элемент, поэтому зависит от его локальной иерархии памяти и стратегии межсоединений не меньше, чем от сырой арифметической способности.
Та же зависимость от локальности определяет, какие алгоритмические оптимизации аппаратура может реально использовать. Регулярная решетка процессорных элементов ускоряет разреженность, только если оставшиеся ненулевые значения сохраняют предсказуемые шаблоны доступа, от которых зависит решетка, и именно это ограничение призвана выполнить структурированная разреженность N:M.
Механика структурированной разреженности N:M
Неструктурированное прореживание сокращает число параметров модели, но редко переходит в ускорение аппаратуры, потому что произвольное размещение ненулевых значений разрушает локальность памяти. Аппаратные ускорители решают эту задачу структурированной разреженностью N:M,25 которая ограничивает разреженность детерминированным мелкозернистым шаблоном. Обозначение «» означает, что ровно значений должны быть ненулевыми в каждом смежном блоке из значений вдоль измерения редукции. Ограничение ненулевых значений фиксированными локальными интервалами гарантирует равномерный доступ к памяти и предсказуемую индексацию между параллельными исполнительными блоками.
Параллельным архитектурам нужна структурная регулярность из-за того, как разреженные матрицы должны кодироваться в памяти. Классические форматы, такие как Compressed Sparse Row (CSR) и Block Compressed Sparse Row (BSR), которые формально рассмотрены в разделе «Форматы разреженных матриц» приложения «Основы алгоритмов», опираются на вспомогательные массивы индексов, чтобы найти ненулевые элементы. Когда разреженность неструктурирована, соседние потоки в варпе SIMT обращаются к несмежным адресам памяти, порождая несогласованные транзакции памяти, которые насыщают шину памяти, выбирая в основном пустые строки кэша. Кроме того, разное число ненулевых элементов в строках вызывает расхождение ветвлений, и потокам приходится выполняться последовательно. Хотя грубая блочная разреженность группирует ненулевые элементы в более крупные плотные тайлы, чтобы уменьшить расхождение, она ухудшает точность модели, когда приходится прореживать целые блоки. «Раскладки разреженных матриц» сравнивает эти шаблоны заполненности и показывает, сколько метаданных нужно, чтобы индексировать нерегулярные или блочные ненулевые элементы.
Раскладки разреженных матриц: четыре панели сравнивают шаблоны заполненности плотной, CSR, блочно-разреженной и BSR матриц. Отдельный столбец индексов ненулевых блоков представляет метаданные, которые нужны, чтобы найти сохраненные блоки в блочно-разреженных случаях. Регулярная блочная структура делает эти метаданные предсказуемыми и компактными, поэтому аппаратура может пропускать нулевые блоки и эффективно выбирать сохраненные.
Разреженные тензорные ядра NVIDIA реализуют конкретный пример мелкозернистой структурированной разреженности: ограничение 2:4, которое требует, чтобы ровно два из каждого смежного блока из четырех значений вдоль измерения редукции были ненулевыми (NVIDIA Corporation, 2020); (NVIDIA, 2020). В памяти матрица весов хранится в сжатом виде: сохраняются только два ненулевых значения, а вместе с ними метка метаданных размером 4 бита на блок (2 бита на значение), которая указывает исходную позицию каждого ненулевого элемента внутри четырехэлементного вектора. Во время выполнения иерархия памяти передает только сжатые веса и их метаданные, что вдвое сокращает требуемую пропускную способность памяти весов по сравнению с плотным выполнением. Внутри тракта данных разреженного тензорного ядра 4-битные метаданные управляют внутренней сетью мультиплексоров, которая выбирает два совпадающих значения из несжатого четырехэлементного вектора активаций. Выбранные активации и два ненулевых веса затем направляются в вдвое меньшее дерево умножения скалярных произведений. Поскольку аппаратура вычисляет только над ненулевыми элементами, потоково читая сжатые веса, эта конструкция удваивает пиковую пропускную способность арифметических инструкций, давая заявленное ускорение тензорной математики в 2 раза по сравнению с плотными операциями, когда веса дообучены под этот шаблон.
Шаблон 2:4 подкрепляет центральную реальность стены памяти: аппаратные ускорители выигрывают в эффективности не потому, что быстрее считают нули, а потому, что полностью исключают их передачу. Вдвое меньшая полезная нагрузка весов снижает трафик через HBM и кэши SRAM на кристалле и смещает нагрузку к более высокой операционной арифметической интенсивности на кривой Roofline.
Разреженные тензорные ядра ускоряют умножение матриц, пропуская операнды через мультиплексоры внутри тракта SIMT, тогда как альтернативные архитектуры обходят ограничения пропускной способности памяти, меняя то, как данные перемещаются в пространстве. Вместо того чтобы многократно перебрасывать активации между исполнительными блоками и централизованными регистровыми файлами, систолические массивы передают промежуточные значения напрямую между соседними процессорными элементами по физической решетке.
Систолические массивы
Тензорные ядра упаковывают матричные операции в небольшие специализированные инструкционные тайлы, тогда как систолические массивы организуют процессорные элементы в большие двумерные решетки, оптимизированные под непрерывный поток данных и повторное использование операндов. Подавая входы горизонтально, а частичные суммы вертикально через массив, систолические архитектуры минимизируют дорогие выборки из DRAM, что позволяет низкоточным квантованным весам достигать максимальной вычислительной плотности. Основная мотивация систолических архитектур связана с той же энергетической проблемой, которая определяет проектирование ускорителей: минимизацией штрафов за обращение к памяти через физическое повторное использование операндов. Простое сравнение энергии в пределах массива показывает, почему эта архитектура стала центральной для современных ИИ-ускорителей.
Энергетическое преимущество пульсирующих данных
Сценарий: систолическая архитектура повышает энергоэффективность, сохраняя операнды локально, пока работа «пульсирует» через массив; метафора «систолический» (от сердечного ритма) отражает эту выгоду локального повторного использования операндов. Этот модельный расчет сравнивает систолический поток данных с наивной реализацией, которая прогоняет каждый операнд через DRAM:
- Базовый вариант с потоковой передачей через DRAM: загружает , загружает , вычисляет и записывает без повторного использования кэша или регистров.
- Перемещение данных: 3 загрузки + 1 запись = 4 обращения к DRAM (на операцию).
- Энергия: ≈ 4 × 640 пДж + 1 пДж (вычисления) = 2 561 пДж на операцию.
- Систолический массив (размер 128 × 128): загружает A и B один раз по краям. Данные «пульсируют» через 128 процессорных элементов.
- Перемещение данных: 2 загрузки на 128 операций = 0,016 обращения к DRAM (на операцию).
- Энергия: ≈ 0,016 × 640 пДж + 1 пДж (вычисления) ≈ 11 пДж на операцию.
Системный вывод: при этом намеренно наивном базовом варианте с потоковой передачей через DRAM модельный расчет дает систолическому массиву преимущество по энергии в 232,8 раза. Это соотношение измеряет локальность, а не врожденный разрыв между векторной и систолической арифметикой.
- Конкретно, массив 128 × 128 может поддерживать 16 384 MAC за такт с большим энергетическим выигрышем за счет пропускания данных через процессорные элементы вместо многократной загрузки их из DRAM (Horowitz, 2014); (Jouppi et al., 2023).
- Такая локальность позволяет плотным массивам поддерживать много одновременных операций MAC, не платя обращением к DRAM за каждую операцию.
- Ограничение: сравнение предполагает отсутствие эффективного повторного использования в базовом варианте и полное повторное использование по всему массиву. Кэши, регистровое блокирование, недозагрузка массива и другие потоки данных существенно меняют это соотношение.
Систолический массив располагает процессорные элементы в виде решетки, в которой данные ритмично текут между соседними блоками синхронным образом, позволяя каждому операнду участвовать в нескольких вычислениях по мере распространения по массиву. Такое структурированное движение минимизирует обращения к внешней памяти, максимизируя локальное повторное использование данных. Один весовой элемент может участвовать в десятках операций, проходя через процессорные элементы, и это переводит энергетический профиль из режима, ограниченного памятью, в режим эффективного вычисления.
Кунг и Лейзерсон26 (Kung and Leiserson, 1979) впервые ввели систолические массивы и формализовали их использование в архитектурах параллельных вычислений для эффективных матричных операций (Kung, 1982). В отличие от универсальных исполнительных блоков, систолические массивы используют пространственную и временную локальность, повторно применяя операнды по мере их распространения по решетке. Архитектурный подход TPU Google служит примером: в TPUv4 систолический массив умножения с накоплением размером 128 × 128 обрабатывает матричные операции, прогоняя данные через массив конвейерным образом (Jouppi et al., 2023). «Архитектура потоков данных систолического массива» показывает эти пути данных: блок управления питает входные буферы, которые потоково подают данные горизонтально в массив, а частичные суммы каждой ячейки текут вертикально вниз к цепочке аккумуляторов внизу, которая собирает готовые результаты. Каждый процессорный элемент выполняет одно умножение с накоплением за такт и передает свои операнды соседям, поэтому значение, загруженное однажды, используется по всей строке или столбцу, а не загружается из памяти заново.
Архитектура потоков данных систолического массива: конвейерная решетка процессорных элементов (PE) передает операнды и частичные результаты между соседями. Показанное движение — один из возможных потоков данных умножения матриц; конструкции выбирают, какой операнд или частичная сумма остается стационарной, чтобы соответствовать повторному использованию, буферам и форме тензора. Загрузка зависит от отображения и размерностей.
Принцип тайлинга: мост между графом и кремнием
Между вычислительным графом (который видит одно матричное умножение 4 096 × 4 096) и физическим кремнием (который обладает фиксированным систолическим массивом 128 × 128) существует фундаментальное несоответствие. Преодоление этого разрыва требует тайлинга: разбиения больших тензорных операций на «тайлы», которые точно помещаются в быструю локальную память аппаратуры (SRAM или scratchpad-память).
Чтобы обработать слой с шириной 4 096 из рабочего примера на систолическом массиве шириной 128, компилятор раскладывает результат на 1 024 выходных тайла. Каждый выходной тайл накапливается по 32 тайлам измерения редукции, поэтому полное умножение матриц выполняет 32 768 произведений тайлов на тайлы . Такая декомпозиция — физическое требование, навязанное пределами иерархии памяти: тайлы операндов выбираются из высокоемкой, высокозадержной HBM, размещаются в быстрой SRAM и прогоняются через систолический массив.
Одно лишнее измерение сверх ширины тайла обрушивает загрузку с обрыва.
Размеры тайлов балансируют емкость кристалла и арифметическую интенсивность. Больший тайл повторно использует каждый загруженный байт в большем числе операций умножения с накоплением, повышая арифметическую интенсивность ядра и сдвигая его в вычислительно-ограниченный режим модели Roofline; потолок емкости определяется тем, сколько из , и одновременно помещается в быструю память на кристалле. Тайлинг поддерживает высокую эффективность аппаратуры , обеспечивая, что на каждый байт, загруженный из основной памяти, данные повторно используются 128 раз внутри систолической решетки. И наоборот, нарушение этого выравнивания ломает контракт с кремнием: если размерности слоя не кратны размеру тайла (например, ширина 129 на массиве 128), система платит краевой налог недозагруженным кремнием, когда 127 блоков простаивают, пока один блок дорабатывает остаточный тайл. Алгоритм «Блочное умножение матриц» формализует вложенный цикл, который компилятор выпускает для организации такого размещения на кристалле и накопления.
Блочное умножение матриц (псевдокод)
Вход: A ∈ R^{M×K}, B ∈ R^{K×N}; размеры тайлов T_M, T_N, T_K
Выход: C = AB
Для каждого тайла строк i0 (размер T_M)
Для каждого тайла столбцов j0 (размер T_N)
обнулить аккумулятор C-тайла на кристалле
Для каждого k0 по K с шагом T_K
загрузить A-тайл [i0,k0] и B-тайл [k0,j0] на кристалл
накопить произведение тайлов на кристалле ▷ повторное использование T_N/T_M на байт
Конец цикла по k0
записать C-тайл обратно в память
Конец цикла по j0
Конец цикла по i0
Когда тайлы операндов оказались в быстрой локальной SRAM, аппаратура выполняет произведение тайлов без дальнейшего трафика памяти за пределами кристалла. Систолические массивы достигают вычислительной эффективности, направляя операнды через структурированную двумерную решетку процессорных элементов (PE), которые обмениваются данными напрямую с соседями по выделенным регистрам, обходя конкуренцию за общую шину памяти. В конструкции со стационарными весами, которая является каноническим потоком данных TPU и показана в «Архитектура потоков данных систолического массива», веса из -тайла заранее загружаются в локальные регистры PE и удерживаются на месте. Входные активации из -тайла потоком идут по строкам слева направо, а частичные суммы накапливаются вертикально вниз по столбцам. На каждом такте каждый активный PE умножает входящую активацию на свой стационарный вес, прибавляет результат к поступившей сверху частичной сумме и передает активацию вправо своему соседу для следующего такта.
Поскольку операнды распространяются на один переход за такт, синхронное выполнение требует намеренного временного сдвига. Рассмотрим минимальное произведение тайлов , где выходной элемент требует двух произведений и одного сложения. Матрица весов удерживается стационарно на четырех PE: хранит , хранит , хранит , а хранит . Если активация входит в на такте 0, ее частичное произведение перемещается вниз в на такте 1. Чтобы совместиться с приходящей частичной суммой, активация должна быть подана с задержкой в один такт. Входы вдоль каждой последовательной строки и столбца смещены так, чтобы операнды, встречающиеся в любой физической координате, соответствовали одинаковым индексам редукции. Локальное повторное использование амортизирует начальное заполнение и опустошение: каждая загруженная активация используется по всей строке из процессорных элементов, а каждый стационарный вес обслуживает целую последовательность входных векторов до вытеснения. Однако устойчивая пропускная способность остается ограниченной пропускной способностью памяти за пределами кристалла всякий раз, когда пополнение операндов не успевает за выдачей результатов массивом («Понимание стены памяти в ИИ»).
Систолический массив 128 × 128, способный выполнять 16 384 операции за такт, требует непрерывного потока операндов для поддержания загрузки. Буферы на кристалле подают активации и веса к краям массива и пополняются из памяти за пределами кристалла по мере необходимости; повторное использование внутри массива избавляет от выборки каждого операнда из HBM на каждом такте. Пропускная способность HBM2 у TPU v4 на уровне 1 200 ГБ/с помогает поддерживать этот поток, но пропускная способность за пределами кристалла все еще может ограничивать модели, рабочие наборы и шаблоны повторного использования которых превышают емкость кристалла.
Методы квантования из раздела «Квантование и числовая точность» сокращают объем памяти модели, переводя веса FP32 в представление INT8. Перевод 32-битных весов с плавающей точкой в 8-битные целые сокращает трафик весов в 4 раза; меняет ли это ядро с ограниченного пропускной способностью на вычислительно-ограниченное, зависит от исходной арифметической интенсивности операции, точки перехода INT8 у ускорителя (порога интенсивности, на котором его вычисления INT8 насыщаются), и накладных расходов на квантование и деквантование. Аналогично, структурированное прореживание удаляет целые строки или столбцы матриц весов, сокращая как объем данных, который должен пройти по иерархиям памяти, так и требуемые вычисления. В таксономии D·A·M эти алгоритмические оптимизации оказываются ценными именно потому, что они нацелены на узкое место памяти, которое на практике ограничивает производительность ускорителя.
Соответствие архитектуры нагрузке
Задача: систолические массивы должны выбрать, какие данные держать стационарными (в регистрах), чтобы минимизировать перемещение. Этот выбор жестко закладывает предпочтение аппаратуры к определенным типам моделей. «Стратегии потоков данных систолического массива» предваряет три стратегии стационарного операнда и нагрузки, которым каждая благоприятствует; «Оптимизация потоков данных» разрабатывает каждую из них полностью как общее решение об отображении.
Стратегия Стационарный объект Оптимизирована для Пример нагрузки Стационарные веса Веса () Высокое повторное использование весов CNN (Conv2D): фильтры малы и повторно используются по всему изображению. Стационарный выход Частичные суммы () Высокое повторное использование аккумуляторов Большой батч MatMul: накопление результатов для многих входов против большой матрицы весов. Стационарный вход Входы () Высокое повторное использование активаций Трансформеры: одни и те же активации подаются во многие матрицы весов по головам внимания. Стратегии потоков данных систолического массива: три варианта стационарного операнда для систолических массивов, шаблон повторного использования, который каждый из них максимизирует, и класс нагрузок, который выигрывает, — это показывает, как фиксированный выбор потока данных жестко задает сродство ускорителя к определенным моделям.
Ни одна архитектура ускорителя не подходит для всех нагрузок. Кристалл, оптимизированный под поток данных со стационарными весами (как ранние TPU), хорошо работает на CNN, где фильтры весов малы и повторно используются по многим патчам изображения. Та же архитектура буксует на авторегрессивном выводе больших языковых моделей (LLM) при батче 1, где вся матрица весов должна один раз прочитываться из памяти за пределами кристалла на каждый сгенерированный токен без повторного использования в батче, что толкает архитектуры к стационарному выходу или гибридным шаблонам потоков данных.
Числовая точность в ускорении ИИ
Систолические массивы и тензорные ядра часто поддерживают арифметику пониженной точности. FP16 вдвое сокращает число байтов на значение по сравнению с FP32, а цель может выделять больше емкости под умножение с накоплением в низкой точности. Ускорение в 2 раза не возникает автоматически: для него нужны поддерживаемое ядро и достаточно параллельной работы без другого узкого места. Опираясь на «Сжатие моделей», можно сказать, что пониженная точность — это решение на стыке аппаратуры и программного обеспечения. Форматы входа и накопления могут различаться, влияя на точность, пропускную способность, энергию и перемещение данных.
Компромиссы точности
Низкая точность не бесплатна. У FP16 пять бит порядка и 10 сохраненных бит мантиссы, поэтому по точности значащих разрядов он превосходит BF16, но динамический диапазон у него гораздо меньше, чем у FP32. Наименьшее нормальное значение составляет около , а наибольшее конечное значение равно 65 504; субнормальные числа расширяют диапазон вниз, но с пониженной точностью. BF16 сохраняет восьмибитный порядок FP32 и использует 7 бит мантиссы, сохраняя близкий динамический диапазон при меньшей точности. У INT8 нет порядка с плавающей точкой, и он зависит от выбора масштаба, нулевой точки и отсечения. Аппаратура и программное обеспечение должны балансировать эти свойства против пропускной способности и трафика.
Эволюция аппаратуры ИИ отражает совместное проектирование численных методов и возможностей аппаратуры. Более ранние поколения GPU не имели выделенных матричных путей смешанной точности, которые сегодня используются в глубоком обучении, даже когда другие блоки поддерживали несколько форматов. Когда методы обучения и вывода показали приемлемую точность при выборочных операциях пониженной точности, производители добавили нативные тензорные пути FP16, BF16 и целочисленные. Фреймворки и библиотеки открывают их через совместимые ядра, автоматическое приведение типов, квантование и калибровку. Выигрыш программного обеспечения появляется только тогда, когда модель выбирает эффективный путь; одно изменение хранения может сократить число байтов, но не даст заявленного ускорения арифметики.
Поддержка точности встроена в исполнительные блоки и пути памяти. Линии SIMD и SIMT могут поддерживать несколько скалярных форматов, тогда как тензорные ядра («Тензорные ядра») и систолические блоки («Систолические массивы») открывают специфичные для архитектуры комбинации входа и накопления. Низкая точность сокращает число байтов на операнд и может повысить число операций за такт. Определяют повторное использование тайлы и поток данных, а не сама точность, тогда как накладные расходы на преобразование, масштабирование или откат могут съесть часть выигрыша. Формат полезен, только если ядро и числовая политика могут применять его безопасно.
Несмотря на преимущества пониженной точности, модели глубокого обучения не всегда могут опираться только на низкоразрядные представления. Чтобы решить эту задачу, современные ИИ-ускорители реализуют вычисления смешанной точности, при которых разные числовые форматы используются на разных стадиях выполнения. Эти решения о точности влияют на надежность вычислений: матричные умножения могут выполняться в FP16 или BF16, а накопления сохраняются в FP32, чтобы не терять точность. Аналогично движки вывода используют арифметику INT8, сохраняя ключевые активации в более высокой точности там, где это необходимо.
Вычисления в смешанной точности
Современные ИИ-ускорители все чаще поддерживают выполнение в смешанной точности, позволяя использовать разные числовые форматы на разных этапах вычисления. Нагрузки обучения часто используют FP16 или BF16 для матричных умножений, сохраняя накопления в FP32, чтобы сберечь точность (Micikevicius et al., 2017); (Mellempudi et al., 2019). Программная реализация обучения в смешанной точности, включая масштабирование потерь и поддержку фреймворков, описана в разделе «Обучение в смешанной точности». Нагрузки вывода, напротив, оптимизируются под INT8 или даже INT4, достигая высокой эффективности при сохранении приемлемой точности.
Сдвиг к разнообразию точностей заметен в эволюции ИИ-аппаратуры. Ранние архитектуры, такие как NVIDIA Volta, предлагали ограниченную поддержку пониженной точности сверх FP16, тогда как более поздние архитектуры, включая Turing и Ampere, расширили набор поддерживаемых форматов. «Эволюция поддержки точности» прослеживает этот путь: GPU Ampere ввели TF32 как гибрид FP32 и FP16 (NVIDIA, 2020), а вместе с ним более широкую поддержку BF16, INT8 и INT4 (NVIDIA Corporation, 2017); (NVIDIA Corporation, 2018); (NVIDIA Corporation, 2020).
| Архитектура | Год | Поддерживаемые точности тензорных ядер | Поддерживаемые точности CUDA-ядер |
|---|---|---|---|
| Volta | 2017 | FP16 | FP64, FP32, FP16 |
| Turing | 2018 | FP16, INT8, INT4, INT1 | FP64, FP32, FP16, INT8 |
| Ampere | 2020 | FP64, TF32, BF16, FP16, INT8, INT4 | FP64, FP32, FP16, BF16, INT8 |
Эволюция поддержки точности: от Volta до Ampere поддержка тензорных ядер расширилась с FP16 до TF32, BF16 и целочисленных форматов, расширив выбор точностей для обучения и вывода; колонка CUDA-ядер показывает отдельные скалярные и векторные форматы, которые поддерживает каждое поколение.
Новые архитектуры включают растущее разнообразие численных форматов, потому что разные нагрузки упираются в разные точки компромисса между точностью, пропускной способностью и энергией. Поддержка точности, таким образом, — это еще одна форма согласования с нагрузкой, а не универсальный список возможностей.
Формат с плавающей точкой, выбранный при проектировании аппаратуры, имеет каскадные последствия для всей системы. Переход с FP32 на FP16 сокращает трафик памяти вдвое, и это важнее, чем кажется: поскольку доступ к памяти доминирует в энергопотреблении, сокращение трафика вдвое может заметно снизить энергию на вывод, когда узким местом является перемещение данных (Horowitz, 2014). Одновременно тензорные ядра и систолические массивы могут упаковать больше блоков умножения с накоплением пониженной точности в ту же площадь кремния, повышая пиковую пропускную способность (Dally et al., 2021); (Dally, 2023). Целочисленная арифметика низкой точности также потребляет меньше энергии, чем FP32, в типичных исследованиях техпроцессов (Horowitz, 2014), а ориентированный на вывод TPUv1 был построен вокруг 8-битных блоков умножения (Jouppi et al., 2017). Системный вывод таков: пониженная точность не просто «экономит биты», а одновременно снимает ограничение пропускной способности памяти и повышает плотность вычислений, атакуя обе стороны кривой Roofline сразу.
По мере того как модели ИИ продолжают масштабироваться, поддержка точности связывает обсуждение вычислительных примитивов обратно со стеной памяти: низкоразрядные форматы важны, когда сокращают объем передаваемых данных и поддерживают загрузку матричных движков аппаратуры. Оставшийся архитектурный вопрос состоит в том, как эти исполнительные блоки, форматы точности и пути памяти объединяются в законченные системы ускорителей. Архитектурная интеграция определяет, насколько эффективно вычислительные примитивы превращаются в пригодную пропускную способность ускорителя. Линии SIMD, тензорные ядра и систолические массивы — строительные блоки, но их организация на уровне всего кристалла заметно различается у ИИ-процессоров; выбор исполнительных блоков, поддержка числовой точности и связность определяют, насколько эффективно аппаратура может масштабироваться для нагрузок глубокого обучения.
Межсоединения внутри узла: масштабирование стека
Освоение стека одной машины требует понимания того, как биты перемещаются между GPU и CPU. В диапазоне от 1 до 8 GPU масштабирование достигается благодаря высокоскоростным межсоединениям внутри узла, таким как NVLink, и передачам между хостом и устройством по PCIe, которые смягчают стену памяти. Эти связи образуют сужение пропускной способности: скорость перемещения данных падает на каждом шаге от вычислительных блоков: от HBM в корпусе через мост NVLink между GPU к хостовому каналу PCIe. Шаг через PCIe намного медленнее локальной памяти ускорителя и структуры связи между GPU, поэтому любой путь данных, который обращается к CPU, может стать источником падения производительности — «стеной PCIe», которой и призван избегать NVLink (NVIDIA Corporation, 2020). «Топология межсоединений узла» развивает эту иерархию количественно, где главной задачей становится обмен между хостом и ускорителем.
Современные ИИ-процессоры демонстрируют набор проектных компромиссов в зависимости от целевых приложений, и сравнение их конфигураций показывает, как ограничения развертывания ведут к расхождению архитектур. Ускоритель, оптимизированный под обучение, например NVIDIA A100, содержит много потоковых мультипроцессоров с широкими блоками SIMD и тензорными ядрами FP16, потому что пропускная способность обучения масштабируется вместе с совокупной емкостью умножения с накоплением (NVIDIA Corporation, 2020). TPUv4 от Google делает принципиально иную ставку: всего два ядра на чип, каждое из которых содержит массивные систолические массивы BF16, что обменивает гибкость программиста на эффективность в плотных умножениях матриц (Jouppi et al., 2023). На стороне вывода Sapphire Rapids от Intel выделяет блоки тайлов Advanced Matrix Extensions (AMX) под INT8 и BF16, что отражает вывод из «Сжатие моделей»: модели вывода выдерживают пониженную точность (Intel Corporation, 2021). Мобильные нейронные движки идут еще дальше, уменьшая матричные движки до маломощных блоков SoC и ставя энергоэффективность на операцию выше пикового быстродействия. «Конфигурации процессоров ИИ» сравнивает эти архитектурные конфигурации.
| Процессор | Векторные вычисления | Матричный движок | Процессорные элементы | Основные нагрузки |
|---|---|---|---|---|
| NVIDIA A100 | Линии CUDA FP/INT | Инструкционные тайлы тензорных ядер | 108 SM | Обучение, HPC |
| Google TPUv4 | Векторный блок | Систолические массивы BF16 | 2 ядра на чип | Обучение |
| Intel Sapphire Rapids | 512-битный AVX-512 | Тайлы AMX (до 16 строк по 64 байта каждый) | До 60 ядер | Вывод |
| Мобильный NPU | Векторы CPU/GPU/DSP | Небольшие матричные движки | Встроенные блоки NPU | Мобильный вывод |
Конфигурации процессоров ИИ: современные ИИ-процессоры по-разному расставляют приоритеты характеристик исполнительных блоков под конкретные нагрузки: NVIDIA A100 использует широкий SIMD и тензорные ядра для обучения, Google TPUv4 делает упор на высокопроизводительное матричное умножение BF16, Intel Sapphire Rapids ориентирован на вывод с оптимизацией под INT8, а мобильные NPU ставят приоритетом маломощное исполнение. Эти различия в ширине SIMD, размере тензорных ядер и числе процессорных элементов отражают растущее разнообразие архитектур ИИ-аппаратуры.
Закономерность в этих конфигурациях показывает последовательный инженерный принцип: каждая конструкция жертвует универсальностью ради оптимизации под доминирующую операцию и точность целевой нагрузки. Обучающие чипы вкладывают кремний в широкие тракты данных с плавающей точкой; чипы вывода обменивают точность на пропускную способность; мобильные чипы обменивают пропускную способность на энергоэффективность. Ни одна конструкция не доминирует во всех нагрузках, поэтому выбор аппаратуры зависит от анализа нагрузки, а не от заголовочных спецификаций.
Анализ стоимости и производительности
Архитектурные спецификации определяют вычислительный потенциал, но решения о развертывании требуют анализа стоимости и производительности. Сырые вычисления — лишь один вход: реальная производительность может упираться в арифметическую пропускную способность, пропускную способность памяти, задержку межсоединений, накладные расходы программного обеспечения или низкую операционную загрузку.
Физический энергетический разрыв, описанный в «Специализация аппаратуры для машинного обучения», где перенос операндов из DRAM за пределами кристалла стоит на порядки больше энергии, чем арифметика, движет специализацию ускорителей. Поскольку стоимость доступа к памяти превышает стоимость вычислений, ускорители на ядрах, ограниченных памятью, выдают лишь долю своей пиковой пропускной способности. И наоборот, архитектуры, которые максимизируют повторное использование данных, например систолические массивы при выполнении плотных матричных умножений, поддерживают заметно более высокую загрузку, распределяя каждое обращение к памяти между несколькими арифметическими операциями.
Рассмотрим инженерную команду, которая выбирает между развертыванием большего кластера старых ускорителей или меньшего кластера новых. Пиковые значения FLOP/s вводят в заблуждение всякий раз, когда доминирующие ядра ограничены пропускной способностью памяти или коммуникациями. В большом конвейере модели плотные прямые проходы и слои проекции внимания могут оставаться вычислительно-ограниченными, тогда как поиск эмбеддингов, нормализация слоя, остаточные сложения и шаги авторегрессивного декодирования строго ограничены памятью. Решающая метрика — это производительность нагрузки на доллар при реалистичной загрузке кластера, ограничениях емкости памяти, доступной пропускной способности памяти и эффективности межсоединений при горизонтальном масштабировании.
Эти архитектурные и экономические ограничения объясняют быстрое внедрение новых ускорителей, несмотря на существенный рост номинальной цены за единицу. Для нагрузок, ограниченных памятью, поколенческие улучшения пропускной способности памяти и генерации кода компилятором доминируют во времени выполнения от начала до конца. Облачные развертывания вносят дополнительные компромиссы: почасовые тарифы аренды, динамическая загрузка экземпляров и накладные расходы инфраструктуры непрерывно сдвигают точку безубыточности между покупкой собственного оборудования и арендой облачных мощностей.
«Иллюстративная таблица стоимости ускорителей» предлагает иллюстративную таблицу стоимости для распространенных ускорителей. Прайс-листы различаются по поставщику, региону, условиям контракта и объему закупок. Кроме того, строки пропускной способности соответствуют различным режимам числовой точности, поэтому показатель цены за пиковую операцию осмыслен только внутри одной строки и не годится как межустройственный бенчмарк. Таблица задает рамку для того, чтобы делать экономические допущения явными, а не предлагает универсальный рейтинг аппаратуры.
| Ускоритель | Прайс-лист | Представительная пиковая пропускная способность (с указанием точности) | Пропускная способность памяти | Цена/производительность |
|---|---|---|---|---|
| NVIDIA V100 | ~$10 000 | 125 TFLOP/s | 900 ГБ/с | $80/(TFLOP/s) |
| NVIDIA A100 | ~$15 000 | 312 TFLOP/s | 2 039 ГБ/с | $48,1/(TFLOP/s) |
| NVIDIA H100 | ~$25 000–30 000 | 494 TFLOP/s (TF32) | 3 350 ГБ/с | ~$50,6/(TFLOP/s) |
| Google TPUv4 | ~$8 000* | 275 TFLOP/s (BF16) | 1 200 ГБ/с | ~$29,1/(TFLOP/s) |
| Intel Gaudi 2 | ~$12 000 | 865 TFLOP/s (FP8) | 2 450 ГБ/с | $13,9/(TFLOP/s) |
Иллюстративная таблица стоимости ускорителей: каждая строка делит приблизительное допущение о цене закупки на показанный представительный пиковый режим. Поскольку точность, допущения о разреженности и источники цен различаются, эти отношения нельзя сравнивать как производительность нагрузки. Полная стоимость включает загрузку, емкость памяти, мощность, охлаждение, межсоединения, программное обеспечение и инфраструктуру; стоимость приобретения TPU оценена по ценам облака.
Таблица показывает, почему выбор ускорителя нельзя свести к одной заголовочной спецификации. Нагрузка, ограниченная пропускной способностью, выигрывает от подсистемы памяти H100 с 3 350 ГБ/с сильнее, чем от постепенного роста пиковой арифметики, тогда как вычислительно-ограниченное общее умножение матриц (GEMM) показывает противоположную чувствительность. Емкость памяти устройства определяет, помещаются ли рабочие наборы на кристалл без выгрузки или разбиения, а зрелость компилятора и драйверов определяет, может ли приложение действительно достичь заявленного тракта данных.
Выбор программной платформы напрямую влияет на эти экономические компромиссы: графовые компиляторы, проходы слияния операторов и диспетчеры среды выполнения определяют эффективность, с которой высокоуровневые описания моделей отображаются на физические исполнительные блоки. Конкретные стратегии оптимизации на уровне фреймворков рассмотрены в разделе «Фреймворки машинного обучения», а эмпирические методы измерения и бенчмаркинга разработаны в главе «Бенчмаркинг».
Векторные конвейеры, движки матричных тайлов и тензорные ядра обеспечивают огромную пиковую арифметическую мощность. NVIDIA A100 заявляет 312 TFLOP/s на своем тензорном пути FP16, а последующие конструкции ускорителей добавляют режимы выполнения в узких форматах FP8 (NVIDIA Corporation, 2020); (Kuzmin et al., 2022); (Micikevicius et al., 2022). Архитектура Blackwell (B200) от NVIDIA продолжает эту траекторию с тензорным трактом данных FP4, номинально до 9 PFLOP/s плотной и 18 PFLOP/s разреженной пиковой пропускной способности на чип (NVIDIA Corporation, 2024). Чтобы достичь этих теоретических потолков, нужны числовые представления, реализации ядер и шаблоны разреженности, которые точно совпадают с путями специализированной аппаратуры. Более узкие числовые форматы расширяют пространство проектирования, но требования к численной устойчивости и динамическому диапазону определяют, может ли нагрузка безопасно использовать FP4.
Деление общего числа операций модели на пиковую арифметическую пропускную способность дает идеализированную нижнюю границу времени выполнения, а не реалистичную задержку вывода. Для A100 деление арифметических операций ResNet-50 на 312 TFLOP/s дает оценку в масштабе микросекунд. Реальный вывод ResNet-50, однако, занимает миллисекунды. Это расхождение на порядки выявляет центральное противоречие систем машинного обучения: арифметическая пропускная способность намного опередила пропускную способность памяти, необходимую для подачи исполнительных блоков. Перенос данных из памяти стоит на порядки больше энергии, чем арифметика, а пропускная способность памяти растет медленнее, чем пропускная способность тензорной арифметики. Этот физический дисбаланс определяет, дает ли заявленные 312 TFLOP/s высокую устойчивую загрузку аппаратуры или остаются почти незадействованными на конкретной нагрузке (Horowitz, 2014); (Gholami et al., 2024).
Преодоление этого разрыва в производительности требует анализа иерархий памяти, которые питают вычислительные блоки. Подсистема памяти — это не пассивный каркас; вместе с арифметической интенсивностью и планированием ядер она определяет долю пиковых вычислений, которую алгоритм может извлечь из машины.
Системы памяти ИИ
ResNet-50 может показать разрыв между арифметикой ускорителя и памятью: веса сверток, активации и промежуточные результаты должны поступать вовремя. Современные ускорители достигают сотен TFLOP/s и более на выбранных путях пониженной точности (NVIDIA Corporation, 2020); (Choquette, 2023); (NVIDIA Corporation, 2024), но ядро не может использовать эту мощность, когда требуемый трафик превышает соответствующую пропускную способность памяти. Стена памяти в ИИ называет растущее несоответствие между спросом арифметики и системой памяти, которая ее питает.
В отличие от обычных нагрузок, модели ML требуют частого доступа к большим объемам параметров, активаций и промежуточных результатов, что ведет к существенным требованиям к пропускной способности памяти. Эта задача пересекается со стратегиями управления данными, рассмотренными в главе «Инженерия данных». Современная ИИ-аппаратура решает эти задачи с помощью продвинутых иерархий памяти, эффективных методов перемещения данных и стратегий сжатия, которые способствуют эффективному выполнению.
Понимание стены памяти в ИИ
Стена памяти в ИИ
Стена памяти в ИИ — это ограничение производительности ускорителей ML, которое возникает, когда пиковая арифметическая пропускная способность опережает пропускную способность памяти . Основной вопрос в том, успевает ли система памяти подавать операнды и принимать результаты достаточно быстро, чтобы поддерживать специализированные примитивы, введенные в разделе «Вычислительные блоки и модели выполнения».
- Значение: нагрузка достигла стены памяти, когда одно лишь увеличение FLOP/s перестает сокращать время выполнения, потому что член доминирует в общем времени работы.
- Отличие: в отличие от общей стены памяти, которая затрагивает все вычисления, стена памяти в ИИ определяется большими объемами параметров и тензорами промежуточных активаций, которые требует глубокое обучение.
- Типичная ошибка: распространенное заблуждение состоит в том, что стену памяти «устраняет» больше памяти. На деле это разрыв между пропускной способностью и задержкой: даже при бесконечной емкости скорость перемещения данных между памятью и вычислениями остается фундаментальным физическим узким местом.
Доступ к данным может доминировать в энергетическом бюджете ядра, интенсивного по памяти.27 «Иерархия энергии» сравнивает типичные стоимости операций из одного исследования техпроцессов и показывает многопорядковый разрыв между простой локальной арифметикой и обращением к DRAM за пределами кристалла.
Иерархия энергии: типичные оценки энергии для техпроцесса 45 нм на логарифмической шкале по данным (Horowitz, 2014). Обращение к DRAM за пределами кристалла стоит примерно в 128 раз больше, чем чтение 8-килобайтной SRAM, и более чем в 20 000 раз больше, чем сложение INT8, в этой модели. Значения не являются универсальными характеристиками устройств; они иллюстрируют, почему повторное использование в регистрах и SRAM может важнее, чем одно лишь сокращение числа арифметических операций.
Количественная оценка разрыва между вычислениями и памятью
Энергетическое неравенство, которое фиксирует «Иерархия энергии», с каждым поколением аппаратуры становится острее. За последние два десятилетия пиковые вычислительные возможности выросли заметно быстрее пропускной способности DRAM (Gholami et al., 2024). Это расхождение вызвано физическими ограничениями масштабирования: хотя масштабирование транзисторов и плотные систолические массивы умножают арифметическую пропускную способность, пропускная способность памяти остается ограниченной числом выводов, плотностью трассировки в подложке корпуса и мощностью сигнализации интерфейса. Типичные высокопроизводительные ускорители могут выдавать порядка TFLOP/s пиковой тензорной пропускной способности (например, NVIDIA H100 выдает 989 TFLOP/s в FP16 или почти 2 000 TFLOP/s в плотном FP8), предоставляя при этом примерно 3,35 ТБ/с пропускной способности памяти (Choquette, 2023). Отсюда следует, что для полного использования вычислений на каждый перемещенный байт нужно порядка FLOP работы, и это может превышать арифметическую интенсивность многих практических нейросетевых нагрузок.
Когда арифметическая интенсивность нагрузки падает ниже этого порога, бюджет времени полностью смещается в сторону передачи данных (). Ускорители пытаются терпеть задержку памяти, обычно сотни тактов для DRAM за пределами кристалла, поддерживая тысячи одновременных потоков выполнения и переключаясь между активными варпами, пока запросы к памяти находятся в полете. Однако когда пропускная способность памяти насыщается или когда давление на регистры ограничивает заполненность, планировщику не хватает независимых инструкций для выдачи. Конвейеры вычислений затем простаивают, оставляя высокопроизводительные тензорные ядра без работы в ожидании операндов. Одновременно управление широкими шинами памяти за пределами кристалла по емкостным дорожкам печатных плат и физическим интерфейсам (PHY) потребляет существенную долю расчетной тепловой мощности (TDP) кристалла, напрямую ограничивая энергетический бюджет, доступный арифметической логике (Horowitz, 2014); (Sze et al., 2017).
Аппаратный баланс (): разбиение по парадигмам
Разные устройства проводят границу между вычислениями и пропускной способностью на разных интенсивностях. Аппаратный баланс — это отношение пиковой арифметической пропускной способности к пиковой пропускной способности памяти. В модели Roofline это точка перехода, в которой пересекаются потолки вычислений и пропускной способности:
Это отношение задает границу, специфичную для устройства. В зависимости от выбранной точности высокопроизводительному ускорителю вроде H100 может понадобиться примерно – FLOP на байт, чтобы достичь своего арифметического потолка, тогда как у микроконтроллера точка перехода может быть гораздо ниже. Одно и то же ядро поэтому может быть ограничено пропускной способностью на плотном по вычислениям ускорителе и вычислительно-ограниченным на периферийном процессоре. Аппаратный баланс не объявляет ни одно из устройств универсально эффективным; он показывает, сколько повторного использования данных нагрузке нужно на этом устройстве.
Пиковая вычислительная способность расширялась быстрее, чем производительность шины памяти, на протяжении поколений ускорителей, и величина этого расхождения определяет, сколько повторного использования данных нужно ядру, чтобы его снабжали операндами. «Расхождение вычислений и пропускной способности» разделяет два темпа роста, которые порождают точку перехода, каждый из которых нормирован к базе V100, так что расширяющийся промежуток между ними можно прочитать напрямую.
Расхождение вычислений и пропускной способности: пиковая плотная производительность FP16 и пропускная способность памяти для пяти поколений дата-центровых GPU NVIDIA, каждая нормирована к базе V100 на логарифмической шкале. За 2017–2024 годы вычисления выросли в 18 раз, а пропускная способность — в 8,9 раза, поэтому заштрихованный промежуток между кривыми расширился в 2,0 раза. Этот промежуток — повторное использование данных, которое ядро должно обеспечивать, чтобы арифметические блоки оставались занятыми. Шаг H200 — поучительное исключение: пропускная способность выросла, а пиковые вычисления остались на месте, что на одно поколение сузило разрыв.
Порог, при котором ядро становится вычислительно-ограниченным, сдвинулся по поколениям ускорителей. По последовательным архитектурам дата-центров («Растущая точка перехода») аппаратные точки перехода поднимаются от V100 до B200, постепенно увеличивая арифметическую интенсивность, необходимую для насыщения пиковой вычислительной пропускной способности.
Растущая точка перехода: аппаратная арифметическая интенсивность (FLOP/байт) во времени, вычисленная как пиковая плотная тензорная производительность FP16 каждого чипа, деленная на его пропускную способность памяти. Это арифметическая интенсивность, которой ядру нужно достичь, прежде чем его начнут ограничивать вычисления, а не пропускная способность. Поскольку вычислительные возможности растут быстрее пропускной способности памяти, точка перехода поднимается от V100 через H100 и остается высокой на B200. Эта тенденция объясняет, почему архитектуры с высоким повторным использованием данных процветают, а нагрузки с низким повторным использованием сталкиваются с растущим аппаратным налогом.
Помимо ограничений производительности, доступ к памяти стоит дорого по энергии. Выборка данных из DRAM за пределами кристалла расходует на порядки больше энергии, чем арифметические операции на кристалле (Horowitz, 2014). Арифметический блок передает сигналы по проводникам микрометрового масштаба на кремнии, тратя десятки фемтоджоулей на операцию; выборка операнда из DRAM требует управления макроскопическими дорожками печатной платы и корпусными соединениями, что стоит десятков пикоджоулей. В моделях машинного обучения, где миллиарды параметров и активаций проходят по шине, перемещение данных быстро доминирует в общем энергетическом бюджете. Это энергетическое различие определяет архитектурные решения: TPUv1 Google достиг в 30–80 раз лучшей производительности на ватт, чем современные CPU и GPU, на бенчмарках вывода, сведя к минимуму перемещение данных за пределами кристалла благодаря систолическим массивам и большой SRAM на кристалле (Jouppi et al., 2017). Эти проектные решения показывают, что энергетические бюджеты, не меньше чем бюджеты тактов, определяют, какие архитектуры способны работать в промышленной эксплуатации.
Шаблоны доступа к памяти в нагрузках ML
Помимо сырой вычислительной пропускной способности, устойчивая эффективность ускорителя зависит от того, как операнды подаются исполнительным блокам без простоев конвейера. Глубокие нейронные сети предъявляют к этой подаче данных три одновременных требования. Во-первых, параметры модели (веса и смещения) могут достигать сотен миллиардов значений (Brown et al., 2020). При авторегрессивной генерации с батчем 1 каждый параметр нужно передавать из памяти на каждый сгенерированный токен, и арифметическая интенсивность падает примерно до 1 FLOP/байт. Во-вторых, промежуточные активации, создаваемые на каждом слое, должны буферизоваться в памяти для последующих операций; при обучении глубокие архитектуры должны сохранять эти активации на протяжении всего прямого прохода, пока обратное распространение их не использует. В-третьих, обучение добавляет трафик градиентов и оптимизатора: обратное распространение вычисляет градиенты для каждого параметра, а такие алгоритмы, как адаптивная оценка моментов (Adam), читают и записывают многословные состояния моментов, умножая объем перемещения данных на каждое обновление параметра (Narayanan et al., 2021); (Kwon and Rhu, 2018).
Физическая стоимость этого перемещения данных зависит от того, где в иерархии памяти находится каждый тензор. Если доступ к регистру на кристалле завершается за один такт с энергией менее пикоджоуля, то выборка из DRAM за пределами кристалла останавливает выполнение на сотни тактов и тратит на порядки больше энергии. Проследить один тензор по уровням памяти во время прохода вывода — значит сделать это различие конкретным, как показано на примере конвейера распознавания ключевых слов (KWS) из иллюстративной модели («Жизнь тензора»).
Жизнь тензора: KWS на GPU
Вспомним иллюстративную модель распознавания ключевых слов, кратко описанную в «Пять иллюстративных моделей». Если тот же односекундный аудиофрагмент обрабатывается пакетом на пути вывода на GPU, его физический путь через иерархию памяти выглядит так:
- DRAM (HBM): тензор начинается здесь.
- Размер: 16 000 отсчетов × 2 байта (FP16) = 32 КБ.
- Задержка: выборка из памяти за пределами кристалла занимает около 300 нс (плюс задержка в очереди).
- Энергия: стоимость около 20 пДж/бит. Высокая.
- Кэш L2: запросы к памяти устройства могут обслуживаться здесь, если нужные строки кэша находятся в нем.
- Задержка: около 4 нс.
- Доступ: общий для нескольких потоковых мультипроцессоров (SM).
- Кэш L1 / разделяемая память: конкретный SM работает с тайлом аудио, используя аппаратно управляемый кэш или явно размещенную разделяемую память.
- Задержка: около 1 нс.
- Локальность: если запрос к L1 промахивается, его все еще может обслужить L2 до того, как понадобится обращение к HBM.
- Регистры: здесь работает тензорное ядро.
- Задержка: обычно несколько тактов, в зависимости от инструкции и архитектуры.
- Пропускная способность: 312 TFLOP/s.
- Энергия: стоимость около 0,1 пДж/бит.
Системный вывод: производительность ограничена меньшим из двух значений: пиковой вычислительной пропускной способностью и произведением пропускной способности на арифметическую интенсивность. Какое звено памяти поставляет нужную пропускную способность, зависит от того, где находится рабочий набор; путь от HBM до L2 — лишь один возможный ограничивающий путь, а не единственный фактор, определяющий Roofline.
Граница между выполнением, ограниченным памятью, и вычислительно-ограниченным выполнением возникает непосредственно из баланса между временем передачи данных и временем арифметического выполнения. Для нагрузки, которой нужен объем данных (байт) при доступной пропускной способности (байт/с), и которая выполняет операций с плавающей точкой на аппаратуре с пиковой пропускной способностью (FLOP/s) при фактической загрузке аппаратуры , времена выполнения равны:
В строго последовательной модели без перекрытия означает выполнение, ограниченное памятью. Когда аппаратура перекрывает передачи памяти с вычислениями, большее из двух значений задает теоретическую нижнюю границу времени выполнения. На практике, однако, зависимости данных, очереди контроллера памяти и частичное перекрытие конвейера определяют, сколько арифметической аппаратуры простаивает в ожидании операндов.
Структурное расхождение между размерами моделей и доступной пропускной способностью памяти и превращает в связывающее ограничение на протяжении поколений. «Размер модели против пропускной способности аппаратуры» количественно показывает это расхождение для публичных эталонных моделей и архитектур ускорителей (Krizhevsky et al., 2012); (Brown et al., 2020); (Chowdhery et al., 2022); (Dubey et al., 2024). Даже ускорители с высокой пропускной способностью, такие как NVIDIA B200 и AMD MI300X/MI325X, не могут закрыть этот разрыв темпов роста одним лишь масштабированием пропускной способности (NVIDIA Corporation, 2024); (AMD, 2023). Число параметров закрытых систем, таких как GPT-4 и Gemini, официально не раскрывается, поэтому их не наносят как фактические точки данных.
Размер модели против пропускной способности аппаратуры: обе серии — это десятичный логарифм роста относительно 2014 года, поэтому каждая единица на вертикальной оси соответствует десятикратному увеличению. За отображенное десятилетие число параметров вырастает примерно в 4 900 раз, тогда как пропускная способность — в 17 раз. Заштрихованная полоса — это разрыв между логарифмами, а не разность, поэтому ее ширина читается как отношение, а две подогнанные тенденции расходятся с постоянной скоростью.
Нерегулярный доступ к памяти
Производственные нагрузки машинного обучения сочетают регулярные плотные матричные ядра с нерегулярными шаблонами доступа к памяти, которые обходят обычную аппаратуру кэширования и предвыборки. Плотные операции, такие как GEMM и свертка, потоково читают смежные блоки, которые чисто ложатся на аппаратные кэши и систолические массивы, тогда как нерегулярные операции зависят от косвенных, разреженных или зависящих от входа адресов памяти. «Регулярный и нерегулярный доступ к памяти» сопоставляет эти два режима памяти по геометрии доступа, локальности кэша и аппаратному давлению.
| Признак | Регулярные плотные ядра | Нерегулярные компоненты ML |
|---|---|---|
| Шаблон доступа | Смежный или тайловый | Косвенный, разбросанный или зависящий от входа |
| Локальность кэша | Часто высокая после тайлинга | Часто ниже и зависит от нагрузки |
| Повторное использование данных | Структурированное по тайлам или батчам | Разреженное или динамическое, в зависимости от оператора |
| Зависимости | Статические вложенные циклы | Маршрутизация, зависящая от входа, или переменные формы |
| Примеры | GEMM, свертка, плотное внимание | Поиск эмбеддингов, неструктурированная разреженность, маршрутизация MoE |
| Основное давление | Вычисления или пропускная способность, в зависимости от арифметической интенсивности | Задержка, пропускная способность, метаданные и дисбаланс нагрузки |
| Энергетические последствия | Зависят от повторного использования и уровня памяти | Дополнительное перемещение и метаданные могут увеличивать энергию |
Регулярный и нерегулярный доступ к памяти: регулярные плотные ядра раскрывают повторное использование, которое можно разбить на тайлы, и предсказуемые адреса, тогда как нерегулярные компоненты ML опираются на косвенный или зависящий от входа доступ, ослабляя кэширование и предвыборку и добавляя накладные расходы на метаданные или балансировку нагрузки. Одна модель может содержать оба режима.
Внутри одной нейронной сети поведение доступа к памяти резко различается по типам слоев. Сверточные слои демонстрируют высокую пространственную локальность и повторное использование регистров, поскольку небольшие ядра весов скользят по картам признаков входа. Полносвязные слои и плотное внимание выполняют регулярные матричные умножения, но их большие матрицы параметров или кэши ключей и значений могут превышать емкость SRAM на кристалле и стать ограниченными пропускной способностью, когда повторное использование в вычислениях мало. Переменная длина последовательностей осложняет выделение буферов памяти, однако операции внимания внутри каждой последовательности остаются регулярными смежными умножениями матриц.
Настоящая нерегулярность памяти возникает из трех различных архитектурных шаблонов: неструктурированной разреженности,28 поиска эмбеддингов и динамической маршрутизации токенов. При неструктурированной разреженности ненулевые веса или активации хранятся в сжатых форматах (например, CSR или COO), которые требуют косвенной адресации указателями для декодирования координат операндов. В таблицах эмбеддингов разреженные категориальные идентификаторы выбирают произвольные строки из таблиц размером в десятки гигабайт в DRAM, превращая последовательные передачи памяти в несогласованные разбросанные чтения. В моделях смеси экспертов (MoE) шлюзы маршрутизации направляют токены в разные сети-эксперты в зависимости от контекста входа; будучи детерминированным для данного входа, назначение токенов меняется от батча к батчу, нарушая конвейеры предвыборки и разбалансируя очереди выполнения между параллельными ядрами.
Нерегулярность снижает производительность через разные механизмы, и рассмотрение их как одну проблему памяти может указать на неверную оптимизацию. Разбросанные адреса могут превращать одно логическое обращение в несколько транзакций памяти, так что каждая выбранная строка кэша несет мало полезных байтов. Косвенность также может сериализовать генерацию адресов: системе нужно выбрать индекс или указатель, прежде чем она узнает, какие данные запросить, что ограничивает параллелизм памяти, даже когда общая пропускная способность доступна. Маршрутизация, зависящая от входа, создает третий вид отказа, когда одни процессорные элементы получают более длинные очереди, чем другие; время завершения определяется самой медленной очередью, пока соседние блоки простаивают. Выделения переменного размера могут фрагментировать емкость, но фрагментация не является ни необходимым, ни достаточным условием нерегулярного доступа. Последовательный поток может насытить пропускную способность и при этом не быть нерегулярным, тогда как цепочка зависимых поисков может остановиться намного ниже пиковой пропускной способности.
Диагностика поэтому должна начинаться с механизма, который мешает продвижению вперед. Низкое отношение полезных байтов полезной нагрузки к переданным байтам указывает на плохую пространственную утилизацию или объединение транзакций. Долгие остановки памяти при неиспользованной пропускной способности указывают на зависимые промахи или на слишком малое число одновременных запросов, чтобы скрыть задержку. Неравные глубины очередей или работа по маршрутам выявляют дисбаланс нагрузки, а не проблему емкости кэша. Одна лишь доля попаданий в кэш не позволяет различить эти случаи, потому что промах может тратить пропускную способность, открывать задержку или то и другое сразу. Каждая диагностика подсказывает другое средство: упаковка или блочное разбиение улучшают пространственную утилизацию, переупорядочивание и предвыборка открывают одновременные запросы, структурированные разреженные форматы сокращают накладные расходы индексации, а маршрутизация или разбиение балансируют работу. Иерархия памяти определяет стоимость оставшихся обращений, а выбор потока данных и раскладки тензоров определяет, сколько нерегулярности программное обеспечение может устранить до того, как выполнение доберется до аппаратуры.
Порядок оптимизации следует из этой диагностики. Представление идет первым, когда формат находится под контролем системы, поскольку блочно-структурированный разреженный формат или сгруппированная маршрутизация могут убрать косвенность до запуска ядра. Затем следует организация запросов: обращения, выданные вместе, должны указывать на соседние адреса, а достаточно независимых запросов должно оставаться в полете, чтобы скрыть неизбежную задержку. Дополнительная емкость кэша или пропускная способность помогают только тогда, когда профилирование показывает, что упорядоченный поток запросов все еще исчерпывает этот ресурс. Больше пропускной способности не устранит последовательную зависимость по указателю, а больше емкости не перебалансирует перекошенную работу. Цель — выставить как можно больше регулярной структуры, сводя неизбежную нерегулярность к наименьшей части выполнения.
Программное обеспечение может смягчить нерегулярный доступ, регуляризуя раскладки тензоров, навязывая структурированную разреженность и сортируя динамические маршруты в однородные батчи. Однако перестройка программы не может устранить физический штраф за перемещение данных: независимо от того, является ли запрос памяти смежным или разбросанным, каждый переданный байт должен пройти по физическим проводникам, ограниченным конечной пропускной способностью, задержкой распространения и рассеиванием энергии. Чтобы ограничить эти физические издержки, хранилище организуют в каскадные аппаратные ярусы. Вместо того чтобы считать память единым пулом, архитектуры ускорителей развертывают многоуровневые иерархии памяти, которые на каждом ярусе обменивают емкость на задержку и энергию.
Иерархия памяти
Ни одна технология хранения не может одновременно обеспечить многотерабайтную в секунду пропускную способность, которую требуют плотные исполнительные блоки, и десятки гигабайт емкости, нужные для хранения параметров современных моделей. Ускорители разрешают это противоречие с помощью многоуровневых иерархий памяти. Вместо того чтобы считать память монолитным адресным пространством, машина организует хранилище в отдельные физические ярусы, каждый из которых оптимизирован под определенный баланс емкости, задержки доступа, пропускной способности и энергетических затрат.
На вершине иерархии регистровые файлы и кэши SRAM на кристалле подают операнды арифметическим блокам с задержкой менее наносекунды и энергией в единицы пикоджоулей, но их емкость жестко ограничена площадью кристалла. У основания энергонезависимая флеш-память хранит сотни гигабайт контрольных точек моделей и обучающих наборов данных, но для доступа к ней нужны миллисекунды или микросекунды. Между этими границами программно управляемые scratchpad-буферы размещают активные тайлы тензоров, а локальная память устройства (HBM или GDDR) служит основной рабочей памятью для параметров и активаций.
Такая организация задает обратную зависимость между ярусами: по мере роста емкости хранилища и физического расстояния до арифметических блоков пропускная способность падает, задержка растет на порядки, а энергия на бит возрастает. «Компромиссы иерархии памяти» сравнивает эти ярусы по задержке, пропускной способности, емкости и функциональным ролям в нагрузках глубокого обучения.
| Уровень памяти | Относительная задержка | Пропускная способность | Относительная емкость | Пример использования в глубоком обучении |
|---|---|---|---|---|
| Регистры | Наименьшая | Наивысшая | Крошечная | Хранение операндов для немедленных вычислений |
| Кэши L1/L2 (SRAM) | Очень низкая | Высокая | Малая | Кэширование часто используемых активаций и небольших блоков весов |
| Scratchpad-память | Очень низкая | Высокая | Малая или средняя | Программно управляемое хранение промежуточных вычислений |
| DRAM устройства (HBM, GDDR или LPDDR) | Высокая | Средняя–очень высокая | Большая | Хранение параметров модели и активаций, которые не помещаются на кристалле |
| DRAM хоста (обычно DDR) | Высокая локально; передача добавляет задержку | Средняя | Большая или очень большая | Подготовка или выгрузка данных за пределы памяти ускорителя |
| Флеш-хранилище (SSD/NVMe) | Очень высокая | Низкая | Очень большая | Хранение предобученных моделей и контрольных точек для последующей загрузки |
Компромиссы иерархии памяти: ускорители ИИ используют многоуровневую иерархию памяти, чтобы сбалансировать производительность и емкость. Каждый уровень обеспечивает свои характеристики задержки, пропускной способности и емкости, которые определяют, как компоненты нейросети (веса, активации и промежуточные результаты) следует размещать, чтобы минимизировать узкие места и максимизировать пропускную способность. Относительные обозначения описывают типичный порядок; точные значения зависят от архитектуры. Справочные значения задержек приведены в разделе «Задержки, которые должен знать каждый программист» приложения «Основы машины».
Повторяющийся системный вопрос состоит в том, почему ускорители не могут полностью обойти SRAM на кристалле и потоково читать все операнды напрямую из высокоемкой DRAM за пределами кристалла. Физическое ограничение, которое этому мешает, — это нижняя граница задержки, накладываемая геометрией кристалла, распространением электрических сигналов и динамикой доступа к ячейкам DRAM.
Предел скорости света
Задача: почему нужна SRAM на кристалле, а не выборка всех данных из HBM?
Расчет:
- Расстояние: на кристалле класса H100 площадью 814 мм² сигналы проходят около 20 мм.
- Задержка распространения: при в кремнии .
- Такт: при 2 ГГц .
- DRAM: HBM за пределами кристалла находится в миллиметрах от него на корпусе, но задержка доступа к DRAM плюс накладные расходы протокола составляют 100 и более тактов.
Системный вывод: оценка распространения на 20 мм составляет около 130 пс, что меньше одного такта в 500 пс, поэтому одно лишь расстояние не доказывает невозможность доступа за один такт. Реальный доступ к HBM включает задержку массива DRAM, сериализацию, прохождение протокола, задержку межсоединений и очередь, что дает путь доступа длиной 100 и более тактов. Поэтому локальные регистры и SRAM необходимы, чтобы питать вычислительные блоки на частоте 2 ГГц. Для трансформеров именно этот полный путь доступа объясняет, почему веса должны размещаться в SRAM тайлами, а не читаться по требованию из HBM, и почему многократная потоковая передача всего KV-кэша может обрушить пропускную способность вывода, если его трафик памяти нельзя скрыть за арифметикой.
Память на кристалле
Подсистема памяти на кристалле объединяет регистры, кэши статической памяти с произвольным доступом (SRAM) и программно управляемые scratchpad-буферы непосредственно на кристалле ускорителя. Регистровые файлы обеспечивают хранение непосредственных операндов и аккумуляторов, которые нужны конвейерам выполнения. Современные ускорители выделяют значительную суммарную емкость регистров по всему кристаллу, но динамически распределяют этот пул между одновременными потоками или варпами. Увеличение регистровой выделенности на поток позволяет отдельным потокам сохранять более крупные матричные тайлы, но ограничивает общее число одновременно запланированных варпов и снижает способность аппаратуры скрывать задержку памяти. И наоборот, недостаточное выделение регистров вынуждает компилятор выгружать значения в память за пределами кристалла, превращая однотактные обращения к регистрам в многотактные простои. Эффективное проектирование ядер балансирует выделение регистров так, чтобы сохранять максимальную заполненность, удерживая горячие операнды в регистрах.
Аппаратно управляемые кэши L1 и L2 обеспечивают быструю буферизацию часто используемых данных с помощью автоматической проверки тегов и аппаратных политик вытеснения. Однако автоматические кэши плохо подходят для потоковой обработки многогигабайтных тензорных операций: проход по большим тензорам активаций может вытеснить пригодные для повторного использования тайлы весов раньше, чем арифметические блоки их переиспользуют. Кроме того, специализированные конвейеры выполнения накладывают жесткие ограничения на раскладку и типы данных, которые общие кэши не могут выполнить автоматически. Как показано в примере «Контракт тензорного ядра», аппаратные матричные движки требуют определенных выравниваний и условий работы с памятью; нарушение этих требований приводит к откату выполнения на неускоренные пути.
Контракт тензорного ядра
Сценарий: инженерная команда переносит нагрузку трансформера на GPU NVIDIA A100, рассчитывая на автоматическое ускорение тензорными ядрами, но профилирование показывает, что тензорные ядра простаивают (NVIDIA Corporation, 2020).
Диагностика: нагрузка использовала формы и типы данных, которые выбирали менее эффективные ядра вместо предполагаемого пути тензорных ядер.
Системный урок: специализированные пути имеют требования к оператору, точности, раскладке и форме. Библиотеки часто могут справиться с невыровненными размерностями через дополнение нулями или альтернативные ядра, но для высокой загрузки нужно проверить, какой путь был выбран на самом деле.
Чтобы избежать накладных расходов на вытеснение и непредсказуемости автоматических кэшей, ускорители ИИ включают scratchpad-память. В отличие от аппаратных кэшей, scratchpad-память представляет собой программно управляемые структуры SRAM, отображенные прямо в адресное пространство ядра, без каталогов тегов и аппаратной логики замещения. Компилятор или программист явно управляет тем, когда тензорные тайлы загружаются из внешней DRAM, как долго они находятся на кристалле и когда обновленные значения записываются обратно. В сверточных моделях scratchpad-память удерживает карты входных признаков и ядра весов на протяжении скользящих рецептивных окон, устраняя избыточные чтения DRAM (Chen et al., 2017). На GPU NVIDIA scratchpad-память доступна как разделяемая память: быстрый SRAM-банк под управлением программиста, общий для всех потоков блока потоков. Пользовательские ядра, написанные на CUDA или Triton, управляют разделяемой памятью явно. FlashAttention демонстрирует силу этого механизма: вместо того чтобы материализовать полную матрицу оценок внимания в HBM за пределами кристалла, ядро разбивает запросы, ключи и значения на тайлы через разделяемую память и обновляет статистики softmax онлайн (Dao et al., 2022). Ускорение полностью происходит из устранения обращений к HBM с высокой задержкой, а не из сокращения арифметических операций; более того, алгоритм пересчитывает промежуточные значения внимания при обратном проходе, чтобы не сохранять их в памяти за пределами кристалла.
Память за пределами кристалла
Когда рабочие наборы тензоров превышают емкость SRAM на кристалле, операнды и параметры размещаются в локальной DRAM устройства. Это не последовательные уровни иерархии, а альтернативные архитектуры памяти, рассчитанные на разные бюджеты стоимости, пропускной способности и мощности: высокоскоростная память (HBM), графическая DDR (GDDR) и маломощная DDR (LPDDR). Высокопроизводительные ускорители используют HBM, которая стекует кристаллы DRAM вертикально через сквозные межсоединения в кремнии (TSV) и связывается с кристаллом ускорителя по широкому кремниевому интерпозеру (например, 1 024–8 192 бита). Эта широкая шина дает пропускную способность в несколько терабайт в секунду при меньших тактовых частотах и меньшей энергии на бит по сравнению с обычной DRAM, но требует сложной корпусировки 2.5D. Там, где кремниевые интерпозеры слишком дороги, ускорители используют GDDR с более узкими шинами (например, 256–384 бита), работающими на высоких скоростях вывода по стандартным печатным платам. Мобильные и встроенные ускорители используют LPDDR, обменивая сырую пропускную способность на низкое рабочее напряжение и сниженную мощность в режиме ожидания.
Когда объемы параметров и активаций превышают емкость DRAM устройства, системе нужно выгружать состояние в DRAM хоста (обычно стандартная DDR). Доступ к памяти хоста требует пересечения интерфейса ввода-вывода, такого как PCIe, или когерентной структуры, такой как NVLink или Compute Express Link (CXL). Поскольку пропускная способность PCIe (десятки гигабайт в секунду) на один-два порядка ниже пропускной способности DRAM ускорителя, неуправляемая выгрузка останавливает арифметическое выполнение. Эффективные среды выполнения смягчают этот штраф, перекрывая асинхронные копирования прямого доступа к памяти (DMA) с выполнением ядер и предвыбирая параметры следующих слоев, пока текущие слои вычисляются.
У основания иерархии энергонезависимая флеш-память и твердотельные накопители (SSD) обеспечивают постоянную емкость в несколько терабайт для наборов данных и контрольных точек обучения (Narayanan et al., 2021). Поскольку задержки чтения измеряются десятками микросекунд, а пропускная способность шины ограничена однозначным числом гигабайт в секунду, флеш-устройства не могут напрямую участвовать в выполнении ядер. Конвейеры контрольных точек и загрузки данных рассматривают флеш-хранилище как асинхронный потоковый источник, подготавливая батчи через DRAM хоста в памяти ускорителя до начала вычислений.
Физические ярусы иерархии памяти задают нижние границы задержки и верхние границы емкости ускорителя. Насколько близко приложение подходит к пиковой производительности аппаратуры, зависит от того, может ли программное обеспечение поддерживать высокую загрузку на каждом ярусе: заявленная пропускная способность памяти — лишь теоретический предел, тогда как достижимая пропускная способность определяется регулярностью доступа, раскладкой тензоров и локальностью повторного использования.
Пропускная способность памяти и архитектурные компромиссы
Заявленная пропускная способность памяти — это только потолок; достижимая пропускная способность зависит от шаблона доступа, батчинга, локальности и хостового интерфейса, который питает ускоритель. Типичные ускорители дата-центров обеспечивают пропускную способность памяти порядка нескольких ТБ/с при десятках ГБ высокоскоростной памяти. Пиковые значения предполагают непрерывный объединенный доступ с шагом 1 по всем каналам памяти. Реальные нагрузки нейросетей существенно отклоняются от этого идеала: слои трансформерного внимания, свертки и полносвязные слои достигают разных долей пиковой пропускной способности, поскольку их шаги доступа к памяти, размеры тайлинга и операционное повторное использование различаются. Полносвязные слои приближаются к пиковой пропускной способности, только когда батчи достаточно велики, чтобы амортизировать стоимость загрузки матриц весов, — это напрямую связано с чувствительностью к размеру батча, которую разбирает модель Roofline в разделе «Модель Roofline». При малых батчах выполнение ограничивается задержкой памяти и недозагруженными каналами, и эффективная пропускная способность остается заметно ниже заявленных потолков.
Доступ к памяти на кристалле обычно расходует энергию порядка единиц–десятков пикоджоулей за обращение, тогда как внешняя DRAM — порядка сотен пикоджоулей за обращение, то есть штраф по энергии на порядок («Понимание стены памяти в ИИ»). Поскольку управление физическими интерфейсами за пределами кристалла доминирует в тепловом и энергетическом бюджете, ускорители строят свои конвейеры выполнения вокруг пространственного повторного использования данных. Вместо того чтобы многократно перебрасывать тензоры через DRAM, архитектуры принимают определенные стационарные потоки данных. В конструкции со стационарными весами параметры модели остаются зафиксированными в регистрах процессорных элементов, пока через них проходят входные активации, амортизируя загрузку параметров по нескольким токенам или пространственным позициям. В конструкции со стационарным входом активации буферизуются локально, пока через них проходят веса, максимизируя повторное использование по фильтрам ядра. В конструкции со стационарным выходом частичные суммы накапливаются прямо в локальных аккумуляторах до завершения окончательных редукций, устраняя промежуточные обращения к внешней DRAM для частично вычисленных карт признаков.
Физические ограничения на границах кремния и корпуса определяют, как пропускная способность памяти масштабируется по классам ускорителей. HBM достигает пропускной способности в несколько терабайт в секунду за счет вертикальной укладки кристаллов DRAM друг на друга со сквозными межсоединениями в кремнии (TSV) и связи с процессором через кремниевый интерпозер. Такая компоновка корпуса дает широкие параллельные интерфейсы — порядка 1 ТБ/с в массовых продуктах и несколько ТБ/с в мощных системах, но при существенно более высокой стоимости корпуса и тепловой плотности. Конструкции класса TPU сочетают высокоскоростную память с большими буферами на кристалле и двумерными систолическими массивами, обменивая универсальную гибкость памяти на плотное пространственное повторное использование в плотных умножениях матриц. На противоположном конце мобильные SoC работают в рамках мощности в несколько ватт и не могут вместить стоимость или тепловую нагрузку стеков на интерпозере. Такие периферийные процессоры опираются на унифицированную память массового класса LPDDR с общей пропускной способностью порядка сотен ГБ/с, которую нужно строго распределять между ядрами CPU, GPU и нейронного ускорителя, чтобы не допустить конкуренции за шину памяти и теплового троттлинга.
Ограничения пропускной способности выходят за пределы корпуса ускорителя и затрагивают интерфейс «хост–устройство». Если вход должен пройти через канал PCIe 64 ГБ/с, прежде чем его использует ускоритель с 2 ТБ/с пропускной способности HBM, интерфейс имеет примерно в 30 раз меньшую пропускную способность и может доминировать в мелких частых передачах (NVIDIA Corporation, 2020). Для запросов вывода с малой задержкой или для мелкозернистой выгрузки ядер сериализация передач по хостовой шине легко может оказаться длиннее, чем вычисления ядра. Чтобы снять это узкое место интерфейса, нужно держать параметры модели и промежуточные состояния активаций резидентными в памяти ускорителя на протяжении шагов выполнения или обходить хостовый канал целиком через прямые одноранговые (peer-to-peer) пути данных для хранилища и сети.
Обмен между хостом и ускорителем
В дискретных системах с ускорителями хостовый CPU и ускоритель работают как отдельные вычислительные домены, соединенные периферийной шиной. Хост управляет вводом-выводом хранилища, сетевыми потоками и оркестрацией среды выполнения, тогда как ускоритель выполняет плотные математические ядра над высокоскоростной памятью устройства. Поскольку системная память CPU и память ускорителя (HBM или GDDR) занимают разные физические адресные пространства, вычисления не могут начаться, пока тензоры не пройдут через межсоединение «хост–ускоритель». Перемещение данных между хостом и ускорителем, таким образом, задает эксплуатационную границу: если передачи по периферийной шине не могут подавать вычислительные ядра ускорителя с линейной скоростью, устройство простаивает независимо от своей сырой производительности в FLOP/s.
«Последовательность передачи данных хост–ускоритель» показывает четырехфазную последовательность выполнения, которая управляет этим взаимодействием хоста и устройства. Перед началом вычислений входные тензоры должны быть скопированы из DRAM хоста по шине PCIe в память ускорителя (шаг 1) через DMA.29 Затем CPU отправляет команды запуска ядер в очередь команд ускорителя (шаг 2), заставляя вычислительные блоки обрабатывать тайлы параллельно из локальной памяти (шаг 3). После завершения выполнения ускоритель сохраняет выходные тензоры в памяти устройства и копирует результаты обратно по PCIe в DRAM хоста (шаг 4). В наивной синхронной модели выполнения каждый шаг передачи лежит прямо на критическом пути и останавливает либо хост, либо ускоритель, пока каждая транзакция памяти не завершится.
Последовательность передачи данных хост–ускоритель: четырехшаговый поток выполнения между хостом CPU и устройством GPU: (1) копирование входных данных по PCIe, (2) выдача инструкций ядер, (3) вычисления на GPU и (4) передача результатов обратно в память хоста. Низкая пропускная способность PCIe и задержки отправки на хост могут легко доминировать во времени выполнения, если время вычислений ядра не превышает накладных расходов на передачу данных.
Сквозная задержка запуска ядра раскладывается на время передачи, накладные расходы диспетчеризации очереди и время арифметического выполнения. Когда тензорные передачи малы или часты, фиксированные накладные расходы отправки драйвером и обращений по шине доминируют во времени выполнения. Когда передачи велики, низкая пропускная способность PCIe относительно HBM на корпусе создает устойчивое узкое место ввода-вывода. В терминах D·A·M граница «Машина» между хостом и ускорителем вынуждает «Алгоритм» максимизировать арифметическое повторное использование на устройстве, как только тензоры прибыли.
Топология межсоединений узла
Оптимизация перемещения данных требует понимания физической топологии вычислительного узла. Типичный ИИ-сервер — это не плоская сеть связанных устройств, а иерархия пропускных способностей, которая сужается по мере удаления данных от кристалла.
Пропускная способность резко сужается по мере удаления данных от ускорителя.
В пределах сервера с несколькими ускорителями три уровня межсоединений определяют это сужение пропускной способности:
- Межсоединение между устройствами (NVLink/Infinity Fabric): современные узлы с несколькими GPU используют специализированные высокоскоростные мосты, например NVLink,30 чтобы соединять ускорители напрямую, минуя хостовый CPU. Пропускная способность составляет от 600 до 900 ГБ/с на GPU (NVIDIA Corporation, 2020); (Choquette, 2023). Эта связь важна всякий раз, когда тензоры должны перемещаться между ускорителями внутри одного сервера, включая разбиение модели, обмен активациями и синхронизацию градиентов при обучении.31 Архитектурный принцип — это граница: трафик, который остается в структуре ускорителей, намного дешевле трафика, который уходит через хост.
- Межсоединение «хост–устройство» (PCIe): связь между CPU и ускорителем. Пропускная способность составляет от 32 до 64 ГБ/с (PCIe Gen4/Gen5). Обучающие данные, подготовленные на хосте, могут упираться в это место, хотя резидентные данные, прямой ввод-вывод хранилища или сети и когерентные связи ускорителей могут использовать другие пути. Серверы с несколькими GPU могут также предоставлять несколько линий PCIe, а не один общий путь на 64 ГБ/с.
- Сетевой интерфейсный адаптер: связь хоста с внешним миром, соединяющая с другими узлами. Пропускная способность составляет от 25 до 50 ГБ/с (Ethernet/InfiniBand на 200–400 Гб/с32). Это межсоединение — первый шаг от рассуждений о железе одного узла к следующему рубежу: масштабированию. Выход в сеть переносит трафик на самый узкий путь с наибольшей задержкой во всей системе.
Эти три уровня создают характерное сужение пропускной способности:
Эффективность системы зависит от того, удается ли держать тензоры на самых быстрых доступных связях. Поскольку PCIe и сетевые связи дают на порядки меньшую пропускную способность и большую задержку, чем память на корпусе, размещение и планирование должны минимизировать пересечения этих границ.
Оптимизация передачи данных
Две взаимодополняющие стратегии смягчают накладные расходы передач через интерфейс «хост–ускоритель»: асинхронное перемещение данных и абстракцию унифицированной памяти.
В асинхронном конвейере программное обеспечение выделяет закрепленную (page-locked) память хоста и ставит в очередь неблокирующие копии памяти на выделенные движки DMA. Поскольку движки копирования работают независимо от вычислительных блоков, следующий входной батч может передаваться по PCIe одновременно с тем, как ускоритель обрабатывает текущий батч в локальной памяти. Такая двойная буферизация скрывает задержку передачи за временем арифметического выполнения всякий раз, когда время вычислений превышает время передачи (). Когда длительность вычислений слишком мала, чтобы амортизировать передачу, выполнение остается ограниченным шиной, и вычислительные блоки неизбежно простаивают.
Унифицированная память (Unified Memory) предлагает альтернативную абстракцию, представляя единое виртуальное адресное пространство, охватывающее DRAM хоста и HBM устройства. Вместо ручного выделения буферов и явных промежуточных копий драйвер среды выполнения переносит страницы памяти по требованию через аппаратные страничные ошибки, когда любой из процессоров обращается к адресу. Хотя это устраняет шаблонный код промежуточной подготовки, миграция по требованию вносит сильную непредсказуемость производительности. Страничные ошибки вызывают прерывания драйвера, которые останавливают конвейеры выполнения, а рассеянные шаблоны доступа могут вызвать «трэшинг» страниц по шине PCIe. Поэтому высокопроизводительные промышленные нагрузки опираются на явные конвейерные передачи DMA для детерминированной производительности, оставляя унифицированную память для быстрого прототипирования или приложений, где продуктивность программиста важнее устойчивой загрузки аппаратуры.
Эти ограничения межсоединений и памяти определяют, как архитектуры нейросетей ложатся на физический кремний. Свертка демонстрирует высокое пространственное повторное использование, которое амортизирует стоимость передач через тайлинг в регистрах и SRAM на кристалле. Плотное самовнимание обладает регулярной матричной структурой, но квадратичный рост по длине последовательности создает сильное давление на емкость и пропускную способность памяти корпуса. Разреженные эмбеддинги, маршрутизация смеси экспертов и авторегрессивные кэши ключей и значений создают еще другие шаблоны доступа к памяти, сдвигая связывающее ограничение с арифметической пропускной способности на емкость памяти, задержку шины или пропускную способность межсоединений.
Давление модели на память
Архитектура модели определяет, какой член памяти становится связывающим. Многослойные перцептроны (MLP), сверточные нейронные сети (CNN) и трансформеры демонстрируют принципиально разные профили потоков данных: одни ограничены емкостью весов, другие — объемом промежуточных активаций, пропускной способностью памяти устройства или пропускной способностью хостового интерфейса. Поэтому каждая нагрузка требует своей иерархии памяти ускорителя и своей стратегии выполнения.
Маячные модели, введенные в разделе «Маячные модели как эталонные нагрузки», обосновывают этот анализ: ResNet-50 представляет нагрузки CNN с высоким пространственным повторным использованием и большим объемом активаций; GPT-2 и Llama иллюстрируют давление трансформеров на память, охватывающее одновременно емкость параметров и промежуточные состояния внимания; DLRM показывает разреженные выборки эмбеддингов, которые нагружают пропускную способность памяти с произвольным доступом, а не плотные вычисления; MobileNetV2 демонстрирует архитектуры, оптимизированные по эффективности, где раздельные по глубине свертки меняют арифметическую интенсивность на меньший объем параметров. Их характеристики памяти показывают, как структура вычислительного графа определяет использование физической аппаратуры.
Многослойные перцептроны
Слой MLP — это плотное матричное умножение с необязательными смещением, активацией и нормализацией. Его операционная интенсивность напрямую зависит от размера батча: при батче каждый параметр, загруженный из памяти за пределами кристалла, обслуживает только одну операцию умножения с накоплением, что дает низкую арифметическую интенсивность (часто ), из-за которой АЛУ простаивают без данных, а выполнение остается ограниченным пропускной способностью памяти. Увеличение размера батча повторно использует каждую загруженную матрицу весов по независимым входным векторам, масштабируя арифметическую интенсивность, пока матричное умножение не достигнет вычислительно-ограниченного потолка Roofline ускорителя.
Плотные матрицы весов регулярно превышают десятки мегабайт, доступных в SRAM на кристалле, поэтому параметры должны находиться в локальной DRAM устройства (HBM или GDDR). Хостовый интерфейс (например, PCIe) входит в критический путь, только когда потоково передаются динамические входы или когда параметры и активации превышают емкость памяти устройства и требуют выгрузки на хост.
Поскольку шаблоны доступа к памяти у MLP регулярны и предсказуемы, ускорители разбивают матричные операции на блоки, которые помещаются в SRAM на кристалле и регистровые файлы. Аппаратная двойная буферизация предвыбирает последующие тайлы весов и активаций из DRAM в SRAM одновременно с арифметическим выполнением текущих тайлов. Достижимая пропускная способность поэтому зависит от того, обеспечивает ли размер батча достаточную арифметическую интенсивность и выравниваются ли размерности матриц по границам аппаратных тайлов (Chen et al., 2017).
Сверточные нейронные сети
Сверточный слой обрабатывает карты входных признаков небольшими ядрами фильтров, которые скользят по пространственным измерениям. Эта локализованная структура скользящего окна дает высокую арифметическую интенсивность через три разные формы повторного использования данных: сверточное повторное использование (соседние пространственные окна разделяют входные активации), повторное использование фильтров (одни и те же веса ядра вычисляются в каждой пространственной позиции) и повторное использование каналов (входные каналы вычисляются для нескольких выходных фильтров). В отличие от MLP, где матрицы весов доминируют в объеме памяти, ранние слои CNN содержат компактные тензоры параметров, но создают огромные карты промежуточных активаций.
Поскольку тензоры промежуточных активаций часто превышают емкость SRAM на кристалле, неоптимизированное послойное выполнение постоянно выгружало бы карты признаков в DRAM устройства, и конвейер упирался бы в пропускную способность памяти. Ускорители предотвращают эти обращения туда и обратно через пространственный тайлинг: активации и фильтры делятся на тайлы, размер которых подобран под буферы SRAM на кристалле (Chen et al., 2017). Размещение перекрывающихся граничных пикселей непосредственно в локальной памяти позволяет соседним сверткам потреблять активации, не перечитывая их по шине DRAM устройства.
Специализированные ускорители CNN настраивают аппаратный поток данных вокруг этих шаблонов повторного использования. Архитектура Eyeriss ввела поток данных со стационарными строками (row-stationary), который отображает одномерные строки фильтров и активаций на регистры вычислительных блоков, удерживая строки фильтров неподвижными и накапливая частичные суммы в локальной памяти, чтобы минимизировать энергоемкий трафик межсоединений (Chen et al., 2016). В более широкой таксономии «Оптимизация потоков данных» эта конструкция служит примером гибридного потока данных, который использует многомерное сверточное повторное использование через регистры, буферы SRAM и исполнительные блоки.
Трансформерные сети
Архитектура трансформера, введенная в разделе «Трансформеры», заменяет локальные скользящие окна глобальным самовниманием33 и плотными блоками прямой связи, создавая двойные узкие места памяти: квадратичные промежуточные матрицы внимания и огромный объем параметров.
Глобальное взаимодействие токенов создает разные проблемы памяти при обучении и выводе. В стандартном многоголовом внимании вычисление попарного сходства токенов порождает матрицу оценок для длины последовательности . Материализация этой промежуточной матрицы в HBM многократно читает и записывает данных по шине памяти, насыщая пропускную способность, даже когда арифметические блоки матричного умножения недозагружены. Алгоритмы тайлового внимания, такие как FlashAttention (Dao et al., 2022), устраняют это узкое место, размещая блоки запросов, ключей и значений в SRAM на кристалле, вычисляя онлайн-редукции softmax локально и передавая выходы напрямую в HBM без материализации квадратичной промежуточной матрицы в DRAM устройства.
При авторегрессивном выводе давление памяти смещается на кэш ключей и значений (KV) (см. раздел «Память и KV-кэш» главы «Обслуживание моделей»). Для генерации каждого следующего токена нужно читать накопленные исторические состояния KV из HBM ради одной операции «вектор–матрица», работая с очень низкой арифметической интенсивностью и напрямую привязывая скорость генерации к пропускной способности памяти.
На масштабах больших языковых моделей (Brown et al., 2020) число параметров превышает физическую емкость HBM любого отдельного ускорителя. Распределение таких моделей по нескольким ускорителям требует разбиения весов и активаций между GPU. Внутри узла сервера высокоскоростные межсоединения, такие как NVLink, обеспечивают пропускную способность, необходимую для устойчивых коллективных операций all-reduce и all-gather во время тензорного и последовательностного параллелизма, где стандартные линии PCIe ограничили бы выполнение. Системные среды выполнения планируют асинхронные передачи, чтобы перекрывать эти фазы межускорительной коммуникации с локальными арифметическими умножениями матриц (Narayanan et al., 2021).
Следствия для проектирования ускорителей
Проект ускорителя под конкретную нагрузку диктуется требованиями к памяти и потокам данных целевых архитектур нейросетей. В таксономии D·A·M алгоритмическая постановка напрямую определяет шаблоны перемещения данных по физической иерархии памяти, поэтому единая жесткая аппаратная архитектура неэффективна для разных классов моделей. «Доступ к памяти моделей ML» сравнивает получающиеся размерности тензоров, профили повторного использования, регулярность доступа и основные аппаратные узкие места для базовых семейств моделей.
| Тип модели | Размер весов | Повторное использование активаций | Шаблон доступа к памяти | Основное узкое место |
|---|---|---|---|---|
| MLP (плотный) | Большой, плотный | Низкое | Регулярный, последовательный (потоковый) | Пропускная способность (вне кристалла) |
| CNN | Малый, повторно используемый | Высокое | Пространственная локальность | Перемещение карт признаков |
| Трансформер | Большой, обычно плотный; разреженный в вариантах MoE/с прореживанием | Низкое–среднее | В основном регулярное GEMM плюс трафик KV-кэша и внимания | Емкость памяти + пропускная способность |
Доступ к памяти моделей ML: разные модели машинного обучения демонстрируют разные шаблоны доступа к памяти и узкие места из-за различий в размере весов, повторном использовании активаций и перемещении данных. Стандартные плотные трансформеры требуют высокой пропускной способности и емкости, потому что большие веса, KV-кэши и трафик внимания доминируют в давлении на память; разреженные варианты MoE или с прореживанием добавляют соображения маршрутизации и разреженности. CNN выигрывают от пространственной локальности и высокого повторного использования активаций, что снижает давление на память.
Каждая архитектура модели по-разному нагружает подсистему памяти. При выводе многослойного перцептрона (MLP) на малом батче доминируют матрично-векторные умножения (GEMV): каждый элемент весов передается из памяти за пределами кристалла, чтобы взаимодействовать с одним вектором активаций, что дает арифметическую интенсивность около одного FLOP на байт, насыщает пропускную способность памяти за пределами кристалла, а матричные блоки простаивают. Увеличение размера батча превращает ядро в умножение матриц на матрицы (GEMM), амортизируя загрузку весов по нескольким входным векторам. В CNN компактные ядра фильтров скользят по пространственным картам признаков, что дает высокое арифметическое повторное использование; ускорители используют эту пространственную локальность, размещая тайлы признаков в статической памяти с произвольным доступом на кристалле (SRAM) или scratchpad-памяти, чтобы не допустить избыточного трафика за пределами кристалла. Трансформеры создают разные узкие места на разных фазах выполнения: распределенное обучение ограничено удержанием активаций для обратного распространения и межускорительной коммуникацией, тогда как авторегрессивное декодирование ограничено пропускной способностью памяти, потому что каждый генерируемый токен потоково читает весь набор параметров и растущий кэш ключей и значений (KV) из памяти устройства.
Архитекторы аппаратуры отвечают на эти разнородные требования многоярусными иерархиями памяти. SRAM на кристалле (кэши и scratchpad-память) обеспечивает десятки терабайт в секунду пропускной способности при низкой задержке, удерживая активации с высоким повторным использованием и блоки матриц, разбитые на тайлы. HBM обеспечивает емкость и пропускную способность, необходимые для размещения огромных тензоров весов и динамических состояний последовательностей. Когда масштаб модели превышает физическую емкость памяти отдельного ускорителя, высокоскоростные межсоединения, такие как NVLink, дают пропускную способность между ускорителями для распределенного тензорного и конвейерного параллелизма, минуя более узкую хостовую шину PCIe.
Перемещение данных также доминирует в энергетическом бюджете аппаратных ускорителей. Перенос операндов из внешней динамической памяти (DRAM) расходует примерно на два порядка больше энергии, чем выполнение арифметической операции на локальных блоках вычислений. Поэтому эффективность аппаратуры зависит от максимизации вычислений на каждый байт, считанный из внешней памяти. Чтобы определить, ограничено ли выполнение ядра пропускной способностью вычислений или пропускной способностью памяти, нужна аналитическая граница. Модель Roofline устанавливает эту связь, сравнивая операционную интенсивность с пределами производительности аппаратуры, и гарантирует, что оптимизации нацелены на истинное физическое узкое место.
Модель Roofline
Низкая арифметическая интенсивность удерживает нагрузку в режиме, ограниченном памятью.
Пиковые FLOP/s показывают, что могут выдать исполнительные блоки, когда операнды уже находятся на кристалле, но устойчивая пропускная способность ускорителя в конечном счете ограничена скоростью, с которой иерархия памяти доставляет данные. Модель Roofline34 (Williams et al., 2009) формализует эту связь, откладывая достижимую производительность относительно арифметической интенсивности и определяя, ограничена ли операция вычислениями или памятью. Вместо того чтобы оценивать вычислительную мощность изолированно, модель пересекает арифметическую пропускную способность аппаратуры с пропускной способностью памяти и показывает, какой физический потолок связывает выполнение раньше, чем инженер вкладывает усилия в оптимизацию.
Производительность ограничена двумя потолками, как формализует «уравнение Roofline». Здесь достижимая производительность и пиковые вычисления выражаются в FLOP/s (часто в TFLOP/s), пиковая пропускная способность — в байтах/с (часто в ТБ/с), а арифметическая интенсивность — в FLOP/байт:
Арифметическая интенсивность
Арифметическая интенсивность — это отношение операций к байтам, переданным через моделируемый интерфейс памяти (). Вместе с пропускной способностью этого уровня и соответствующим пиком вычислений она определяет, какой из идеализированных потолков Roofline ниже.
- Значение: граница между двумя потолками — это точка перехода . Для A100 (312 TFLOP/s в FP16/BF16, 2,04 ТБ/с) она составляет примерно 153 FLOP/байт. При заданных моделях трафика большое хорошо разбитое на тайлы умножение достигает около 341,3 FLOP/байт, тогда как отдельная операция ReLU — около 0,125 FLOP/байт. Поэтому на одном и том же оборудовании они упираются в разные потолки.
- Отличие: в отличие от общего числа FLOP (счета операций), арифметическая интенсивность — это отношение, которое характеризует форму аппаратных требований нагрузки. Два ядра с одинаковым числом FLOP, но разными шаблонами доступа к памяти имеют разную арифметическую интенсивность и упираются в разные аппаратные ресурсы.
- Типичная ошибка: распространенное заблуждение состоит в том, что арифметическая интенсивность — фиксированное свойство операции. На практике она зависит от деталей реализации: наивное умножение матриц, которое перезагружает операнды из DRAM для каждого выходного элемента, имеет низкую арифметическую интенсивность; блочная (тайловая) реализация, которая повторно использует данные из быстрой SRAM, достигает высокой интенсивности — та же математическая операция, но на порядки разная аппаратная эффективность.
Пусть — число операций, а — объем данных в байтах; тогда «арифметическая интенсивность» задает определение в операционном виде.
На визуализации Roofline производительность (TFLOP/s) откладывается по вертикальной оси, а арифметическая интенсивность (FLOP/байт) — по горизонтальной. При низкой арифметической интенсивности производительность растет линейно вдоль наклона пропускной способности памяти (), где выполнение ограничено памятью. Выше точки перехода производительность упирается в пиковые вычисления (), где выполнение ограничено вычислениями. Раздел «Диагностика узких мест» приложения «Таксономия D·A·M» сопоставляет каждый режим с оптимизациями, которые окупаются, и с теми, которые тратят усилия впустую, поэтому классификация нагрузки как ограниченной памятью или вычислениями прямо показывает инженеру, нужен ли более быстрый ускоритель или больше пропускной способности.
Аппаратные точки перехода
Точка перехода — аппаратный баланс , введенный в разделе «Аппаратный баланс», — это порог арифметической интенсивности, при котором ускоритель переходит от выполнения, ограниченного памятью, к вычислительно-ограниченному. «Аппаратные точки перехода» количественно показывает эту границу для трех поколений ускорителей NVIDIA:
| Ускоритель NVIDIA | Пиковая FP16 | Пропускная способность | Точка перехода |
|---|---|---|---|
| V100 (2017) | 125 TFLOP/s | 0,9 ТБ/с | 138,9 FLOP/байт |
| A100 (2020) | 312 TFLOP/s | 2,04 ТБ/с | 153 FLOP/байт |
| H100 (2022) | 989 TFLOP/s | 3,35 ТБ/с | 295,2 FLOP/байт |
Аппаратные точки перехода: опубликованные производителем пиковые значения FP16 и пропускная способность памяти для трех поколений NVIDIA и точка перехода, которую задает каждая пара. Точка перехода растет от V100 к H100, потому что вычислительная пропускная способность растет быстрее пропускной способности памяти; эти значения специфичны для аппаратуры, а не универсальные средние по поколению.
Поскольку арифметическая пропускная способность растет намного быстрее пропускной способности памяти от поколения к поколению, аппаратная точка перехода постепенно сдвигается вправо. Поэтому нагрузка должна демонстрировать существенно большее повторное использование данных, чтобы насытить новое оборудование; алгоритм, который на старой архитектуре был вычислительно-ограниченным, может легко стать ограниченным памятью на новой.
Разрыв в загрузке
Задача: почему получить 100 процентов загрузки на H100 труднее, чем на V100?
Метрика: точка перехода (FLOP/байт) из раздела «Аппаратный баланс»: сколько математических операций аппаратура должна выполнить на каждый байт загруженных данных, чтобы занять вычислительные блоки.
Эволюция:
- V100 (2017): 125 TFLOP/s / 0,9 ТБ/с ≈ 138,9 FLOP/байт.
- A100 (2020): 312 TFLOP/s / 2,04 ТБ/с ≈ 153 FLOP/байт.
- H100 (2022): 989 TFLOP/s / 3,35 ТБ/с ≈ 295,2 FLOP/байт.
Результат: интенсивность, нужная для достижения тензорного пика, выросла. По этой простой модели Roofline для HBM ядро с = 200 FLOP/байт лежит выше точки перехода A100, но ниже точки перехода H100. Если его интенсивность и реализация не меняются, его идеализированный выигрыш ближе к отношению пропускных способностей (в 1,6 раза, 3,35 / 2,04), чем к отношению пиковых вычислений (в 3,2 раза, 989 / 312).
Системный вывод: отдельная операция ReLU при модели трафика «одно чтение, одна запись» FP32 выполняет примерно одну операцию на 8 байт, что намного ниже тензорной точки перехода H100. Хорошо разбитое на тайлы плотное умножение достигает около 341,3 FLOP/байт по своей идеализированной модели трафика. Слияние полезно для цепочек с низкой интенсивностью, потому что может убрать промежуточные обращения туда и обратно; но это не автоматически лучшая оптимизация для каждого ядра.
Такие операции, как раздельная по глубине свертка, поиск эмбеддингов, LayerNorm и softmax, служат ориентирами низкой интенсивности: данные в них почти не используются повторно, поэтому время выполнения определяют передачи из памяти. «Операции на модели Roofline» сопоставляет распространенные операции нейросетей с моделью Roofline.
| Операция | Арифметическая интенсивность | Классификация | Иллюстративная модель |
|---|---|---|---|
| Conv2D (плотная) | 50–200 FLOP/байт | Пересекает точку перехода; случаи с высоким повторным использованием вычислительно-ограничены | ResNet-50 |
| Плотное умножение (большой батч, хорошо разбитое на тайлы) | 64–256+ FLOP/байт | Часто вычислительно-ограничено при большом батче | GPT-2 (пакетные проекции) |
| Раздельная по глубине свертка | 10–20 FLOP/байт | Ограничено памятью | MobileNet |
| Softmax внимания | Зависит от соглашения | Ограничено памятью | GPT-2 (генерация) |
| LayerNorm | 1–2 FLOP/байт | Ограничено памятью | GPT-2/Llama |
| Поиск эмбеддингов | FLOP/байт | Ограничено памятью | DLRM |
Операции на модели Roofline: слои нейросетей охватывают широкий диапазон арифметических интенсивностей. Большие хорошо разбитые на тайлы свертки и пакетные GEMM могут быть вычислительно-ограниченными, тогда как слои раздельных по глубине сверток в MobileNet, softmax внимания, нормализация и эмбеддинги DLRM часто ограничены памятью. Чтобы увидеть, как эти значения интенсивности переходят в реальные прогнозы производительности, слой трансформера дает полный расчет арифметической интенсивности по его основным подоперациям.
Анализ слоя трансформера
Для трансформера с hidden_dim = 768, батчем 32 и длиной последовательности 512:
Проекция QKV внимания:
- FLOP: 2 × 3 × 32 × 512 × 768 × 768 = 58 GFLOP
- Байты: (вход + веса + выход) = (32 × 512 × 768 + 3 × 768 × 768 + 32 × 512 × 768 × 3) × 2 ≈ 104,2 МБ
- = 58 GFLOP / 104,2 МБ = 556,4 FLOP/байт; это вычислительно-ограничено на A100 (выше точки перехода 153 FLOP/байт)
Softmax:
- FLOP: 32 × 12 × 512 × 512 × 3 ≈ 302 MFLOP (экспонента, сумма, деление)
- Байты: 32 × 12 × 512 × 512 × 2 × 2 = 402,7 МБ
- = 302 MFLOP / 402,7 МБ = 0,75 FLOP/байт при таком простом подсчете операций; это ограничено памятью. Подсчеты, которые учитывают экспоненты и деление как несколько операций, дают большее числовое значение интенсивности, не меняя классификации узкого места.
Системный вывод: этот анализ объясняет, почему FlashAttention сосредоточен на сокращении трафика памяти во внимании, а не на сокращении FLOP.
Классификация по Roofline определяет, какая физическая подсистема ограничивает производительность и какие оптимизации могут ее снять. Для операций, ограниченных памятью, во времени выполнения доминируют передачи данных по шине памяти за пределами кристалла; конвейеры АЛУ тратят простаивающие такты, ожидая операндов. Оптимизация поэтому должна фокусироваться на экономии пропускной способности памяти: слияние соседних операторов держит промежуточные активации в регистрах на кристалле или разделяемой памяти (SRAM), более низкие числовые форматы сокращают физическое число байтов при передачах памяти, а алгоритмические перестройки, такие как FlashAttention, перестраивают шаблоны доступа, так что вычисления идут внутри тайлов SRAM. Для вычислительно-ограниченных операций пропускная способность за пределами кристалла уже не является узким местом, потому что высокое повторное использование данных снабжает блоки выполнения. Производительность здесь зависит от насыщения конвейеров арифметического выполнения: структурирования матричных тайлов, чтобы поддерживать пропускную способность тензорных ядер, скрытия задержек инструкций программной конвейеризацией и масштабирования размеров батчей, чтобы распределять работу по всем доступным потоковым мультипроцессорам.
Расчет границ пропускной способности памяти
Область, ограниченная памятью, в модели Roofline определяется внешней пропускной способностью памяти ускорителя. Чтобы поддерживать операционную пропускную способность (FLOP/s) для нагрузки с арифметической интенсивностью (FLOP/байт), подсистема памяти должна передавать данные со скоростью, которую задает формула («требуемая пропускная способность»):
Когда эта требуемая пропускная способность превышает пиковую пропускную способность памяти аппаратуры , передачи памяти ограничивают достижимую пропускную способность согласно формуле («достижимая пропускная способность»):
Сопоставление операции с точкой перехода аппаратуры определяет, ограничено ли выполнение пропускной способностью памяти или арифметической пропускной способностью. Когда повторное использование данных велико, арифметическая интенсивность превышает точку перехода, и ядро попадает в вычислительно-ограниченный режим. Двумерная свертка демонстрирует это поведение.
Анализ сверточного слоя
Рассмотрим слой Conv2D с входной формой (батч = 32, каналы = 128, высота = 56, ширина = 56), выходными каналами = 256 и ядром на GPU A100:
Вычислительные требования:
- Размер выхода: = 25,7 млн элементов
- FLOP на выходной элемент: = 2 304 (умножение со сложением)
- Всего FLOP: 25,7 млн 2 304 = 59,2 GFLOP
Анализ трафика памяти:
- Вход: = 25,7 МБ (FP16)
- Веса: ≈ 0,6 МБ (FP16)
- Выход: = 51,4 МБ (FP16)
- Итого: 77,7 МБ
Арифметическая интенсивность: = 59,2 GFLOP / 77,7 МБ = 762,2 FLOP/байт
Системный вывод: это намного выше точки перехода A100 в 153 FLOP/байт, поэтому простая модель Roofline помещает операцию в область, ограниченную вычислениями. Пик примерно 312 TFLOP/s (FP16 с тензорными ядрами) является потолком, но реальная производительность по-прежнему зависит от тайлинга, заполненности, состава инструкций и эффективности библиотеки.
Высокая арифметическая интенсивность свертки возникает из-за пространственного повторного использования весов: одно и то же ядро применяется в каждой пространственной позиции карты признаков, амортизируя стоимость загрузки весов из памяти за пределами кристалла на миллионы операций умножения с накоплением. Поскольку промежуточные значения и веса ядра остаются в быстрых регистрах на кристалле и в разделяемой памяти, шина памяти за пределами кристалла простаивает, пока конвейеры арифметики остаются насыщенными.
Не все слои нейросетей демонстрируют такое обширное повторное использование данных. Полносвязные (плотные) слои — например, классификационные головы, сети прямой связи и линейные проекции в блоках внимания трансформера — не имеют пространственных измерений. При малых размерах батча их арифметическая интенсивность заметно падает, и выполнение переходит в режим, ограниченный памятью:
Анализ плотного слоя
Рассмотрим полносвязный слой: вход (батч = 32, признаки = 2048) → выход (батч = 32, признаки = 2048) на том же A100:
Вычислительные требования:
- Умножение матриц:
- Всего FLOP: = 268,4 MFLOP
Анализ трафика памяти:
- Вход: = 131,1 КБ (FP16)
- Веса: = 8,4 МБ (FP16)
- Выход: = 131,1 КБ (FP16)
- Итого: 8,7 МБ
Арифметическая интенсивность: = 268,4 MFLOP / 8,7 МБ = 31 FLOP/байт
Эта интенсивность лежит ниже точки перехода A100 в 153 FLOP/байт, что делает операцию ограниченной памятью. Достижимая производительность: = 2 039 ГБ/с 31 FLOP/байт = 63,3 TFLOP/s
Системный вывод: реальная пропускная способность достигает лишь 20,3 процента пиковой вычислительной мощности, что демонстрирует эффект стены памяти при малых размерах батча.
Более низкая арифметическая интенсивность плотного слоя возникает из-за ограниченного повторного использования параметров. Ядро сверточного слоя переиспользуется в каждой пространственной позиции карты активаций, тогда как плотная матрица весов переиспользуется только по измерению батча. При батче 32 каждый параметр веса, переданный из HBM, умножается всего 32 раза, прежде чем будет вытеснен. Поскольку шина памяти за пределами кристалла не может передавать операнды достаточно быстро, чтобы кормить тензорные ядра, арифметические блоки тратят более 80 процентов тактов в простое, ограничивая пропускную способность 20,3 процента пиковой вычислительной мощности. Это структурное ограничение объясняет, почему вывод трансформеров при малых размерах батча определяется пропускной способностью памяти, а не арифметическими возможностями.
Если матричные умножения малых батчей страдают от ограниченного повторного использования параметров, то поэлементные операторы и операторы редукции создают еще более острое узкое место памяти. Такие операции, как нормализация слоя, функции активации и остаточные сложения, выполняют лишь несколько арифметических операций на каждый элемент, загруженный из памяти, и прижимают арифметическую интенсивность к физическому минимуму:
Анализ LayerNorm
LayerNorm с входной формой (батч = 32, длина последовательности = 512, скрытая размерность = 768):
Вычислительные требования:
- Элементы: = 12,6 млн
- Примерное число операций на элемент: редукция среднего (1 сложение), дисперсия (2 сложения, 1 умножение), нормализация и аффинное преобразование (2 сложения, 2 умножения) ≈ 8; накладные расходы обратного квадратного корня распределяются по каждому скрытому вектору
- Всего FLOP: 12,6 млн 8 = 100,7 MFLOP
Трафик памяти:
- Вход: 12,6 млн 2 = 25,2 МБ
- Параметры (масштаб, смещение): = 3,1 КБ (незначительно)
- Выход: 12,6 млн 2 = 25,2 МБ
- Итого: 50,3 МБ
Арифметическая интенсивность: = 100,7 MFLOP / 50,3 МБ = 2,0 FLOP/байт
Эта арифметическая интенсивность заметно ниже точки перехода A100 (в 77 раз ниже). Производительность ограничена величиной: = 2 039 ГБ/с 2,0 FLOP/байт = 4,1 TFLOP/s
Системный вывод: простая модель Roofline для HBM ограничивает эту отдельную операцию LayerNorm примерно 1 процентом пика тензорных вычислений A100. Фактическая задержка также зависит от слияния, стратегии редукции, накладных расходов на запуск и того, какой уровень памяти поставляет данные.
Отдельная нормализация выполняет минимум арифметики относительно порождаемого ею трафика памяти, что и демонстрирует анализ LayerNorm. В неслитой реализации каждый элемент активации передается из HBM за пределами кристалла по глобальной шине, редуцируется и записывается обратно в память; арифметическая интенсивность составляет около 2 FLOP/байт, а вычислительные блоки простаивают 99 процентов времени. В рамках D·A·M, когда ограничение машины — это непреодолимая стена пропускной способности памяти, алгоритмический ответ — слияние операторов: схлопывание соседних операций, таких как линейные проекции, добавление смещений, нормализация и активации, в одно ядро. Слияние удерживает промежуточные активации в быстрой SRAM на кристалле или в регистрах, устраняя обращения туда и обратно по шине памяти и превращая нагрузки, которым не хватает пропускной способности, в эффективное вычислительное выполнение.
Оптимизация по режимам интенсивности
Анализ по Roofline напрямую определяет приоритеты оптимизации, которые сведены в «Оптимизация по режимам арифметической интенсивности».
| Режим интенсивности | Типичные операции | Приоритет оптимизации | Распространенные приемы | Ожидаемый эффект |
|---|---|---|---|---|
| Высокая интенсивность ( FLOP/байт) | Большие свертки | Максимизировать загрузку вычислений. | Тензорные ядра, настройка блоков потоков и высокая заполненность. | Повышает устойчивую загрузку вычислений, когда ядро уже превышает точку перехода. |
| Средняя интенсивность (20–200 FLOP/байт) | Плотные слои среднего размера | Сбалансировать оптимизацию вычислений и памяти. | Большие батчи, регистровый тайлинг и слияние с соседними операциями. | Может сместить главное узкое место между памятью и вычислениями. |
| Низкая интенсивность ( FLOP/байт) | Малые плотные слои и поэлементные операции | Сократить трафик памяти. | Агрессивное слияние операторов, пониженная точность (FP16 → INT8) и алгоритмические изменения. | Сокращает трафик внешней памяти, когда слияние или изменения раскладки допустимы. |
| Очень низкая интенсивность ( FLOP/байт) | Слои нормализации и функции активации | Исключить обращения к памяти туда и обратно. | Слияние с соседними операциями и вычисления на месте, где это допустимо. | Убирает промежуточные обращения, когда соседние операции можно слить. |
Оптимизация по режимам арифметической интенсивности: положение на Roofline определяет, должна ли оптимизация гнаться за загрузкой вычислений, сокращением трафика памяти или полным устранением обращений к памяти туда и обратно. Чем ниже арифметическая интенсивность, тем ценнее становятся слияние и избегание перемещения данных.
Для операций с низкой арифметической интенсивностью слияние операторов часто оказывается решающей оптимизацией: например, LayerNorm в сочетании с функцией ошибки Гаусса (GELU) может стать одним слитым ядром. Один из самых доступных рычагов сдвинуть операцию вверх и вправо по Roofline — батчинг.
Размер батча и арифметическая интенсивность
Увеличение размера батча повышает арифметическую интенсивность матричных операций, амортизируя загрузку весов. «Батч и арифметическая интенсивность» формализует эту связь для идеализированного плотного слоя FP16/BF16 , учитывая по одному чтению входа и весов и одну запись выхода, где — размер батча, а и — входная и выходная размерности:
Пример: плотный слой с (FP16)
- Батч = 1: ≈ 1 FLOP/байт (ограничено памятью)
- Батч = 32: ≈ 31 FLOP/байт (ограничено памятью)
- Батч = 256: ≈ 204,8 FLOP/байт (вычислительно-ограничено на A100)
Системный вывод: это объясняет, почему батчинг может дать большой прирост пропускной способности в промышленных системах вывода, как показывает MLPerf Inference, стандартизованный набор бенчмарков, разобранный в главе «Бенчмаркинг», разделяя прогоны на максимальную пропускную способность и прогоны с ограничением задержки (Reddi et al., 2019).
Анализ размера батча объясняет, почему системы обслуживания вывода строятся вокруг батчинга: он меняет режим арифметической интенсивности нагрузок, ограниченных памятью. Однако батчинг вносит компромиссы по задержке, поскольку запросы должны ждать в очереди, пока сформируется батч. Это напряжение между пропускной способностью (которой благоприятствуют большие батчи) и задержкой (которой благоприятствуют малые батчи) — центральная проблема систем обслуживания ML, которую подробно рассматривает раздел «Компромиссы задержки и пропускной способности при динамическом батчинге» главы «Обслуживание моделей».
Когда задержка обслуживания ограничивает батчинг, декодирование LLM с батчем 1 или малым батчем часто сохраняет низкое повторное использование весов и низкую арифметическую интенсивность. Следующая разобранная модель количественно описывает именно этот режим, а не считает весь вывод LLM одинаковым.
Потолок пропускной способности
Задача: расчет GPT-2 с батчем 1 делает этот потолок пропускной способности конкретным: какова максимально возможная загрузка NVIDIA A100 при выводе GPT-2 (размер батча 1)?
Аппаратные ограничения (знаменатели)
Пиковые вычисления: 312 TFLOP/s (тензорное ядро FP16).
Пиковая пропускная способность: 2,04 ТБ/с (HBM2e).
Точка перехода : 312 TFLOP/s / 2,04 ТБ/с = 153 FLOP/байт (для тензорного ядра FP16).
Интерпретация: чтобы насытить этот чип при точности FP16, нужно 153 FLOP на каждый загруженный байт. Точка перехода зависит от точности: операции FP32 (пик 19,5 TFLOP/s) имеют точку перехода всего примерно 9,6 FLOP/байт.
Характеристики нагрузки (числитель)
- Модель: GPT-2 XL (1,5 млрд параметров).
- Операция: авторегрессивная генерация (по одному токену за раз).
- Перемещение данных: нужно загружать все веса (3 ГБ в FP16) для каждого токена.
- Вычисления: умножение «вектор–матрица». 2 × параметры ≈ 3 GFLOP.
- Арифметическая интенсивность: 3 GFLOP / 3 ГБ = 1 FLOP/байт
Прогноз (железный закон)
Поскольку фактическая интенсивность (1) точки перехода (153 FLOP/байт), система ограничена пропускной способностью.
- Максимальная пропускная способность: 1 FLOP/байт 2,04 ТБ/с = 2,04 TFLOP/s.
- Потолок загрузки: 2,04 TFLOP/s (фактически) / 312 TFLOP/s (пик) ≈ 0,7 %
Системный вывод: без батчинга GPU стоимостью $15 000 работает с загрузкой вычислений менее 1 процента в этой модели декодирования с потоковой передачей весов. Батчинг и квантование весов закрывают этот разрыв; кэширование ключей и значений, напротив, избавляет от пересчета предыдущих состояний внимания.
Благодаря этому выводу модель Roofline служит диагностической основой, которая определяет, являются ли операции вычислительно-ограниченными или ограниченными памятью. Знание, что нагрузка ограничена памятью при загрузке 0,7 процента, — лишь первый шаг; следующая задача — перевести этот диагноз в эффективные планы выполнения, которые используют архитектуры ускорителей.
Отображение на аппаратуру
Рассмотрим свертку , которая выполняется на тайле ускорителя. Математическая операция фиксирована, а план выполнения — нет. Одно расписание может держать фильтр в локальных регистрах, пока через него проходят многие выходные пиксели; другое продвигается пиксель за пикселем и многократно перезагружает те же значения фильтра из более медленного уровня памяти. Оба расписания вычисляют один и тот же тензор. Только одно из них превращает повторное использование в свертке в реальную экономию пропускной способности.
Отображение в ускорении ИИ
Отображение в ускорении ИИ — это процесс компилятора ускорителя, который связывает логический вычислительный граф с физической топологией аппаратуры, решая, какие операции выполняются на каких процессорных элементах, какие данные находятся на каком уровне памяти и в каком временном порядке.
- Значение: в таксономии D·A·M отображение — это решение по оси машины, которое помогает определить, насколько близко операция подходит к границе Roofline . Неудачный выбор тайлинга, который вынуждает к лишним обращениям к DRAM, может снизить эффективную арифметическую интенсивность настолько, что номинально вычислительно-ограниченная операция переходит в режим, ограниченный пропускной способностью.
- Отличие: традиционная компиляция часто делает упор на выбор инструкций, распределение регистров и планирование для процессоров общего назначения. Отображение на ускоритель придает равное значение пространственному размещению и явному перемещению данных по архитектуре потоков данных. Причина физическая: в сравнении при 45 нм, представленном ранее, обращение к DRAM за пределами кристалла расходовало примерно в 200 раз больше энергии, чем локальное целочисленное умножение с накоплением, хотя это соотношение зависит от техпроцесса и операции.
- Типичная ошибка: распространенное заблуждение состоит в том, что отображение автоматически выполняется фреймворками. Для общих нагрузок GPU компиляторы, такие как Accelerated Linear Algebra (XLA), могут находить сильные отображения для распространенных ядер; для специализированных ускорителей (систолических массивов, заказных ASIC) сгенерированные компилятором отображения могут все еще отставать от настроенных вручную расписаний, потому что пространство поиска компилятора ограничено бюджетом времени на компиляцию.
Пример со сверткой выявляет три решения, которые повторяются на протяжении всей компиляции для ускорителей. Размещение назначает работу умножения с накоплением процессорным элементам, так что параллелизм не превращается в простой или в перегрузку межсоединений. Выделение держит веса, активации и частичные суммы на том уровне памяти, где произойдет их следующее использование, не позволяя повторному использованию выливаться обратно в DRAM. Планирование упорядочивает циклы и ядра так, чтобы выбранные размещение и выделение оставались корректными во времени. Неудачный выбор в любом из этих измерений может вернуть операцию с высокой арифметической интенсивностью к выполнению, ограниченному пропускной способностью. На практике эти решения слишком связаны, чтобы разработчики могли управлять ими вручную в масштабе модели, поэтому такие системы, как XLA, TVM и TensorRT, понижают уровень высокоуровневых моделей и ищут или выбирают планы выполнения в пределах своих бюджетов времени компиляции и аппаратуры. Подробно эти системы рассматривает раздел «Поддержка компиляторов».
Размещение и выделение
Перевод вычислительного графа модели в эффективное аппаратное выполнение требует решения двух тесно связанных задач. Размещение вычислений определяет, какие операции выполняются на каких процессорных элементах, уравновешивая параллелизм и стоимость коммуникаций. Выделение памяти определяет, где данные находятся внутри иерархии памяти, обменивая емкость на задержку доступа. Эти два решения взаимодействуют: размещение операций на удаленных процессорных элементах увеличивает пропускную способность памяти, необходимую для перемещения данных между ними, а выделение данных в быструю, но малую память на кристалле ограничивает, какие операции могут выполняться одновременно. Ошибка в любом из них оставляет тысячи процессорных элементов простаивающими — без работы или в ожидании данных.
Размещение вычислений
Размещение вычислений — это назначение операций процессорным элементам (PE) ускорителя, чтобы раскрыть параллелизм, ограничить простои и сократить лишнее перемещение данных. Современные ускорители содержат множество таких ресурсов: NVIDIA H100 имеет более 16 000 ядер CUDA и более 500 тензорных ядер (Choquette, 2023), TPU организуют тысячи блоков умножения с накоплением в систолические массивы (Jouppi et al., 2017), а процессоры масштаба целой кремниевой пластины, такие как CS-2 от Cerebras, интегрируют более 850 000 ядер (Cerebras Systems, 2021). На таких масштабах неэффективность размещения становится измеримой, потому что простаивающие ядра и избыточные передачи тратят и время, и энергию.
Сложность размещения зависит от регулярности нагрузки. Сверточные сети и плотные операции трансформеров имеют регулярные шаблоны доступа, которые предсказуемо разбиваются на тайлы, хотя архитектуры трансформеров смешивают операции с разными формами тензоров и профилями повторного использования. Графовые нейросети (GNN) создают большие трудности: разреженные, зависящие от входа агрегации по соседям вносят дисбаланс нагрузки и неравномерную коммуникацию между процессорными элементами. «Проблемы размещения вычислений» сводит эти основные проблемы размещения и их операционное влияние.
| Проблема | Влияние на выполнение | Ключевые соображения для размещения |
|---|---|---|
| Дисбаланс нагрузки | Одни процессорные элементы заканчивают рано, а другие остаются перегруженными, что ведет к простою вычислительных ресурсов. | Равномерно распределять операции, чтобы предотвратить остановки и обеспечить полную загрузку PE. |
| Нерегулярные вычислительные шаблоны | Разреженные графы, маршрутизация и переменные формы могут создавать неравномерную работу, которая усложняет статическое размещение. | Использовать адаптивное размещение, когда характеристики нагрузки меняются во время выполнения. |
| Избыточное перемещение данных | Частые передачи памяти вносят задержку и повышают энергопотребление. | Держать часто используемые данные близко к вычислительным блокам и сводить к минимуму обращения к памяти за пределами кристалла. |
| Ограниченная пропускная способность межсоединений | Плохо размещенные операции могут создавать перегрузку и замедлять перемещение данных между PE. | Оптимизировать пространственное и временное размещение, чтобы сократить накладные расходы на коммуникацию. |
| Потребности, специфичные для модели | CNN, трансформеры и GNN требуют разных шаблонов выполнения, поэтому одна стратегия размещения неэффективна. | Подбирать стратегии размещения под вычислительную структуру каждого типа модели. |
Проблемы размещения вычислений: эффективное развертывание нейросети требует стратегического распределения вычислений по процессорным элементам с балансом распределения нагрузки, стоимости перемещения данных и аппаратных ограничений, чтобы максимизировать эффективность выполнения. Эти проблемы задают проектирование стратегий отображения, которые оптимизируют использование ресурсов и сводят к минимуму накладные расходы на коммуникацию.
Статические пространственные отображения достаточны для регулярных плотных операций, форма и границы циклов которых известны заранее. Нагрузки с динамическими формами, разреженностью или маршрутизацией смеси экспертов, напротив, требуют планирования во время выполнения, чтобы балансировать работу между процессорными элементами. Однако даже оптимальное размещение вычислений останавливается, если нужные операнды не подготовлены вовремя: вычислительные блоки могут работать только так быстро, как операнды поступают из иерархии памяти.
Выделение памяти
Если размещение вычислений определяет, где выполняются операции, то выделение памяти определяет, где находятся данные и как они проходят через иерархию. Цель состоит в том, чтобы держать повторно используемые данные рядом с процессорными элементами, не превышая емкость более быстрого уровня. GPU предоставляют глобальную память, разделяемую память, кэши и регистры, которыми ядра управляют через тайлинг (NVIDIA Corporation, 2020). TPU используют буферы на кристалле, чтобы подготавливать активации и веса для выполнения на систолическом массиве («Архитектура потоков данных систолического массива») (Jouppi et al., 2017), тогда как процессоры масштаба целой пластины разделяют память и вычисления, чтобы контролировать трафик межсоединений (Cerebras Systems, 2021). Процессоры общего назначения и ускорители используют иерархии памяти, но многие ускорители открывают больше решений по размещению компиляторам и ядрам. Когда выделение не использует локальность, процессорные элементы простаивают в ожидании операндов, снижая загрузку и рассеивая энергию по шине памяти.
Серьезность этих штрафов зависит от нагрузки. Сверточные сети опираются на структурированные, локализованные шаблоны доступа и выигрывают от четко заданных раскладок памяти, которые облегчают предсказуемое повторное использование (Chen et al., 2016). Трансформерам нужен доступ к большим наборам параметров и промежуточным активациям, поэтому они чувствительны к емкости и пропускной способности. Графовые нейросети добавляют нерегулярные разреженные структуры, которые усложняют выделение и предвыборку.
Емкость — лишь первая проверка выделения. Тензор может помещаться в память ускорителя и все же доминировать в выполнении, если каждое ядро перечитывает его из удаленного уровня; и наоборот, тайлинг может сохранять эффективность большего рабочего набора, поддерживая повторное использование локально. Поэтому диагностика выделения — это трафик, а не только емкость: компиляторы должны отслеживать, как часто значения пересекают каждую границу памяти, и держать тензоры с высоким повторным использованием на самом быстром допустимом уровне. Системы сочетают статические планы памяти для известных форм с динамическим управлением буферами, когда формы меняются, а емкость устройства ограничивает, какие модели помещаются без разбиения или выгрузки. «Проблемы выделения памяти» сводит эти проблемы выделения по всей иерархии.
| Проблема | Влияние на выполнение | Ключевые соображения для выделения |
|---|---|---|
| Высокая задержка памяти | Медленный доступ к данным задерживает выполнение и снижает пропускную способность. | Приоритетно размещать часто используемые данные в более быстрых ячейках памяти. |
| Ограниченное хранилище на кристалле | Малая локальная память ограничивает объем данных, доступных рядом с вычислительными блоками. | Эффективно распределять хранилище, чтобы максимизировать доступность данных, не превышая аппаратные ограничения. |
| Высокий спрос на пропускную способность за пределами кристалла | Частый доступ к внешней памяти увеличивает задержки и энергопотребление. | Сокращать ненужные передачи памяти, тщательно управляя тем, когда и как перемещаются данные. |
| Нерегулярные шаблоны доступа к памяти | Некоторые модели требуют непредсказуемого доступа к данным, что ведет к неэффективному использованию памяти. | Организовывать раскладку памяти так, чтобы она соответствовала шаблонам доступа и минимизировала лишние перемещения данных. |
| Потребности в памяти, специфичные для модели | Разные модели требуют разных стратегий выделения для оптимизации производительности. | Подбирать решения о выделении под структуру и характеристики выполнения нагрузки. |
Проблемы выделения памяти: эффективное управление памятью в ускорителях ИИ балансирует скорость доступа к данным с аппаратными ограничениями и снижает узкие места производительности, вызванные задержкой, ограничениями пропускной способности и нерегулярными шаблонами данных. Сложные модели, такие как трансформеры и графовые сети, предъявляют переменные и высокие требования к памяти, которые усиливают эти проблемы.
Комбинаторная сложность
Небольшой пример со сверткой показывает, почему отображение аппаратуры становится задачей комбинаторного поиска. Удержание фильтра в локальной памяти улучшает повторное использование, только если назначенные процессорные элементы имеют достаточно памяти и если расписание циклов возвращается к этому фильтру до вытеснения. Аналогично, распараллеливание на большее число процессорных элементов повышает пропускную способность только до тех пор, пока накладные расходы синхронизации и конкуренция в межсоединениях не съедят выигрыш. Поскольку изменение одного решения меняет допустимые и эффективные варианты для остальных, компиляторы должны оценивать размещение, выделение и планирование совместно, а не по отдельности. «Компромиссы размещения, выделения и планирования» сводит эти повторяющиеся компромиссы по всему стеку выполнения.
| Измерение | Соображения о размещении | Соображения о выделении и планировании |
|---|---|---|
| Гранулярность вычислений | Мелкогранулярное размещение дает больше параллелизма, но увеличивает накладные расходы синхронизации. | Крупногранулярное планирование снижает накладные расходы синхронизации, но может ограничивать гибкость. |
| Пространственное и временное отображение | Пространственное размещение усиливает параллельное выполнение, но может приводить к конкуренции за ресурсы и перегрузке памяти. | Временное планирование балансирует разделение ресурсов, но может снижать общую пропускную способность. |
| Память и локальность данных | Размещение данных ближе к вычислительным блокам сокращает задержку, но может уменьшать общую доступность памяти. | Выделение данных по нескольким уровням памяти увеличивает емкость, но вводит более высокие затраты доступа. |
| Коммуникация и синхронизация | Совместное размещение вычислительных блоков снижает задержку коммуникации, но может вводить конкуренцию. | Планирование механизмов синхронизации смягчает простои, но может добавлять накладные расходы. |
| Поток данных и порядок выполнения | Статическое размещение упрощает выполнение, но ограничивает адаптивность к колебаниям нагрузки. | Динамическое планирование улучшает адаптивность, но добавляет сложность планирования. |
Компромиссы размещения, выделения и планирования: производительность ускорителя ИИ зависит от отображения вычислений на аппаратуру, выделения данных по уровням памяти и планирования выполнения во времени. Тщательный учет этих взаимозависимых факторов необходим для максимизации пропускной способности и минимизации энергопотребления.
Оценка этих компромиссов требует навигации по неограниченному пространству поиска, которое определяют три структурных решения: порядок выполнения циклов, пространственное распараллеливание по процессорным элементам и выделение памяти по иерархии. Чтобы понять, почему исчерпывающий поиск непрактичен, рассмотрим комбинаторный рост каждого измерения по отдельности.
Порядок вычислений и выполнения
Нагрузки машинного обучения обычно записываются как вложенные циклы, которые проходят по измерениям тензоров. Например, ядро умножения матриц перебирает размер батча (), входные признаки () и выходные признаки (). Порядок выполнения циклов определяет, какие элементы тензоров остаются в регистрах или SRAM между итерациями, и тем самым напрямую задает локальность данных и повторное использование.
Если не учитывать зависимости и эквивалентные порядки, число способов упорядочить циклов имеет игрушечную верхнюю границу:
которая быстро растет. Типичный сверточный слой может включать до семи измерений циклов, что дает:
Варианты отображения комбинаторно растут по мере увеличения измерений циклов.
Если бы каждый уровень памяти мог выбирать порядок независимо, соответствующая игрушечная верхняя граница расширилась бы до:
где — число уровней иерархии памяти. Это быстрое расширение показывает, почему важна оптимизация порядка выполнения: субоптимальный порядок циклов преждевременно вытесняет значения и умножает трафик DRAM, тогда как оптимизированный порядок максимизирует повторное использование в локальной SRAM и кэшах (Sze et al., 2017).
Параллелизация по процессорным элементам
Современные ускорители ИИ используют тысячи процессорных элементов, чтобы выполнять итерации циклов одновременно. Однако распараллеливание внутреннего цикла редукции требует синхронизации между ядрами и коллективной коммуникации, тогда как распараллеливание внешних независимых циклов (таких как батч или каналы выходных признаков) позволяет каждому ядру выполняться самостоятельно без трафика межсоединений. Определение того, какие циклы отображать пространственно, требует тщательного разбиения.
До применения ограничений на допустимость и емкость число упорядоченных способов выбрать циклы для параллельного выполнения имеет верхнюю границу:
где — число циклов, а — число циклов, выбранных для параллельного выполнения. Для вычисления с шестью циклами, из которых три выбраны, это неограниченное число равно:
Даже для одного слоя число кандидатов достигает сотен до удаления недопустимых или эквивалентных стратегий. Каждое кандидатное расписание предъявляет разные требования к барьерной синхронизации, пропускной способности межсоединений и загрузке PE.
Размещение в памяти и перемещение данных
Физическая иерархия памяти заставляет компиляторы определять, какие тензоры находятся в регистрах, разделяемой памяти или глобальной DRAM на каждом этапе выполнения. Выборка операндов из DRAM за пределами кристалла стоит на порядки больше энергии и задержки, чем чтение из локальной SRAM, поэтому размещение данных становится главным фактором достигаемой арифметической интенсивности.
Если бы каждое вычислительное измерение имело независимых вариантов на каждом уровне памяти, соответствующая игрушечная верхняя граница выглядела бы так:
где:
- — число вариантов размещения на уровень,
- — число вычислительных измерений,
- — число уровней иерархии памяти.
Для модели с:
- вычислительными измерениями,
- уровнями памяти,
- возможными вариантами размещения на уровень,
Пространство поиска отображений
Этот пример без ограничений превышает миллиард комбинаций, хотя многие из них недопустимы, связаны или эквивалентны. Перемножение игрушечных счетов дает иллюстрацию верхней границы пространства поиска отображений:
где:
- задает варианты размещения в памяти,
- учитывает варианты порядка вычислений,
- отражает возможности распараллеливания,
- — число уровней иерархии памяти.
Это уравнение не является точным подсчетом допустимых расписаний, потому что варианты взаимодействуют, а аппаратные ограничения отсекают пространство. Оно иллюстрирует, почему пространства кандидатов быстро растут и почему исчерпывающий поиск становится непрактичным. Даже в небольшом слое изменение одного решения о порядке может дать разницу на порядок в трафике памяти.
Порядок циклов в небольшой свертке
Рассмотрим свертку, которая применяет 16 фильтров размера к одноканальному входу . Вычисление можно выразить пятью вложенными циклами, которые перебирают строки выхода (), столбцы выхода (), число фильтров (), высоту фильтра () и ширину фильтра (). Перестановки — это верхняя граница без ограничений: допустимые порядки сохраняют математический результат, хотя порядок редукции в вычислениях с плавающей точкой может менять округление, и они порождают разный трафик памяти.
Порядок A (стационарные веса): поставим циклы фильтров (, , ) внешними, а пространственные циклы (, ) — внутренними. Каждый фильтр загружается в регистры один раз и затем применяется ко всем 36 выходным позициям, прежде чем загрузится следующий фильтр. Всего загрузок весов: значения, каждое загружено ровно один раз.
Порядок B (стационарный выход): поставим пространственные циклы внешними, а циклы фильтров — внутренними. Для каждой выходной позиции все 16 фильтров нужно загрузить, применить и накопить их частичные суммы, прежде чем перейти к следующей позиции. Если регистровый файл не может вместить все 16 фильтров одновременно, фильтры многократно выбираются из кэша или DRAM. В худшем случае каждая из 36 выходных позиций перезагружает все 144 веса фильтров, что дает чтений весов.
Системный вывод: при этих двух предельных допущениях Порядок A сокращает смоделированные чтения весов в 36 раз относительно худшего случая для Порядка B. Реальные ядра также учитывают трафик активаций и частичных сумм, емкость регистров, поведение кэша и векторизацию. Тем не менее пример показывает, почему два математически эквивалентных порядка циклов могут предъявлять очень разные требования к системе памяти.
Этот комбинаторный взрыв ставит центральную загадку систем ML: если пространство поиска без ограничений содержит миллиарды кандидатов, как компиляторы и разработчики ядер регулярно достигают эффективности, близкой к пиковой для аппаратуры? Вместо того чтобы перебирать произвольные перестановки, промышленные системы ограничивают поиск небольшим семейством канонических шаблонов потоков данных — пространственных и временных расписаний, спроектированных под конкретные свойства повторного использования операторов нейросетей.
Оптимизация потоков данных
Пространственное и временное отображение («Отображение на аппаратуру») определяет, где выполняются операции и где находятся операнды, но оптимизация потоков данных управляет точными траекториями и расписаниями движения данных через процессорные элементы и иерархию памяти. В систолическом массиве или тайловом векторном блоке временное расписание и пространственная маршрутизация весов, входов и частичных сумм определяют, как часто операнды приходится выбирать из энергоемкой DRAM, а не переиспользовать из локальных регистров или scratchpad-памяти. Управляя трафиком за пределами кристалла, поток данных задает эффективную операционную интенсивность ядра и определяет, достигает ли выполнение вычислительно-ограниченного плато модели Roofline или застревает в режиме, ограниченном памятью. Оптимизирующие компиляторы («Поддержка компиляторов») и системы среды выполнения («Поддержка среды выполнения») поэтому подгоняют шаблоны потоков данных под характеристики повторного использования каждого слоя и аппаратные ограничения целевого ускорителя.
Пространство проектирования структурируют три повторяющихся архитектурных решения:
- Локальность: выбор стационарного операнда (стационарные веса, стационарный выход или стационарный вход) определяет, какой тензор закреплен в локальных регистрах или scratchpad-буферах процессорных элементов, что обменивает трафик памяти на давление на регистры.
- Организация: физические раскладки тензоров (например, channels-last
NHWCпротив channels-firstNCHW) определяют, совпадают ли обращения к памяти с размерами пакетов контроллера памяти и шириной векторов SIMD, предотвращая несогласованные транзакции памяти. - Комбинация: слияние ядер и тайлинг циклов разбивают пространства итераций и объединяют соседние операции, чтобы устранить обращения к внешней памяти туда и обратно для промежуточных тензоров.
Вместе эти шаблоны дают компактный словарь для навигации по выбору потоков данных без исчерпывающего перебора миллиардов кандидатных расписаний.
Строительные блоки стратегий отображения
Эти три решения переходят в четыре базовых приема: шаблоны перемещения данных, которые закрепляют конкретные операнды рядом с арифметическими блоками (стационарные веса, стационарный выход и стационарный вход), эффективные по памяти раскладки тензоров (channels-last против channels-first), слияние ядер, которое удерживает промежуточные активации в SRAM на кристалле между операциями, и тайлинг циклов, который ограничивает размеры рабочих наборов, чтобы они помещались в локальную память. Вместо того чтобы заново изобретать расписания с нуля, эвристические компиляторы и фреймворки автонастройки компонуют эти строительные блоки, чтобы создавать эффективные планы выполнения для слоев глубоких нейронных сетей.
Шаблоны перемещения данных
На современных ускорителях выборка операнда из DRAM за пределами кристалла стоит примерно от двух до трех порядков больше энергии, чем выполнение арифметической операции или выборка из локального регистрового файла (Chen et al., 2016). Выполняет ли нагрузка плотные матричные операции, превышающие емкость кэша на кристалле, или нерегулярные разреженные выборки, стратегия перемещения данных определяет общую задержку выполнения и полное энергопотребление. Если данные нельзя подготовить и подать в процессорные элементы с той скоростью, которой требует их арифметическая пропускная способность, блоки выполнения останавливаются на задержке памяти, теряя теоретическую вычислительную мощность и раздувая энергию подсистемы памяти.
Чтобы конвейеры арифметики не останавливались, стратегия перемещения данных должна улавливать присущее тензорным операциям алгоритмическое повторное использование внутри локального, энергетически экономного хранилища. «Наивный поток данных умножения матриц» иллюстрирует канонический вариант реализации умножения матриц тремя вложенными циклами, раскрывая повторное использование операндов по весам, входам и частичным суммам, которое отображение на аппаратуру должно удерживать в локальном хранилище.
Наивный поток данных умножения матриц: вложенный цикл многократно обращается к строкам весов, столбцам входа и аккумуляторам выхода, раскрывая повторное использование, которое отображение должно сохранить в локальной памяти.
## Умножение матриц, где:
## weights: [512x256] — параметры модели
## input: [256x32] — батч активаций
## Z: [512x32] — выходные активации
## Вычисление каждого выходного элемента Z[i,j]:
for i in range(512):
for j in range(32):
for k in range(256):
Z[i, j] += weights[i, k] * input[k, j]
Это вычисление выявляет несколько критических проблем потока данных. Первая проблема — число требуемых обращений к памяти. Для каждого выходного вычислению нужно выбрать целую строку весов из матрицы весов и полный столбец активаций из входной матрицы. Поскольку матрица весов содержит 512 строк, а входная матрица — 32 столбца, возникают повторные обращения к памяти, которые создают большую нагрузку на пропускную способность памяти.
Вторая проблема связана с повторным использованием весов. Одни и те же веса применяются к нескольким входам, поэтому идеальная стратегия отображения должна максимизировать локальность весов, чтобы избежать избыточных выборок из памяти. Без должного повторного использования ускоритель тратил бы пропускную способность на многократную загрузку одних и тех же весов (Chen et al., 2018).
Третья проблема касается накопления промежуточных результатов. Поскольку каждый элемент требует вклада от 256 различных пар вес–вход, частичные суммы нужно сохранять и извлекать, прежде чем будет вычислено окончательное значение. Если эти промежуточные значения хранятся неэффективно, система потребует частых обращений к памяти, что еще сильнее повысит требования к пропускной способности.
Один из способов смягчить эти проблемы — использовать модели выполнения SIMD и SIMT, которые позволяют выбирать несколько значений параллельно. Однако даже с этими оптимизациями перемещение данных остается узким местом. Главное узкое место — не только скорость выборки, но и частота передач и размещение в иерархии памяти (Han et al., 2016).
Поскольку перемещение данных доминирует в энергетическом бюджете, который отображает «Иерархия энергии», самая важная цель ускорителя — минимизировать обращения к памяти. Стратегии потоков данных достигают этого, максимизируя повторное использование данных. Центральное решение — какие данные выгоднее всего держать локально. Ускорители отвечают на него, определяя, какие данные остаются зафиксированными в памяти, а какие передаются динамически: стационарные веса удерживают параметры модели локально, стационарный вход сохраняет данные активаций, а стационарный выход сохраняет промежуточные результаты. Каждый подход обменивает разные шаблоны доступа к памяти, чтобы максимизировать повторное использование данных и сократить энергоемкие передачи, которые составляют главное узкое место в ускорении ИИ.
Стационарные веса
Стратегия стационарных весов удерживает веса фиксированными в локальной памяти, тогда как входные активации и частичные суммы проходят через систему потоком. Подходы со стационарными весами особенно выгодны в CNN и умножениях матриц, где один и тот же набор весов применяется к нескольким входам. Закрепляя веса, этот метод сокращает избыточные выборки из памяти, что помогает снимать узкие места пропускной способности и повышает энергоэффективность.
Ключевое преимущество стационарных весов в том, что они максимизируют повторное использование весов и снижают частоту обращений к внешнему хранилищу. Поскольку параметры весов часто разделяются между несколькими вычислениями, их хранение в локальной памяти устраняет ненужное перемещение данных и снижает общую энергетическую стоимость вычислений. Это делает подход особенно эффективным для архитектур, где веса составляют главную часть накладных расходов памяти, например для систолических массивов и заказных ускорителей, созданных для машинного обучения. «Поток данных со стационарными весами» показывает, как выполнение со стационарными весами держит веса фиксированными в локальной памяти, пока входы передаются потоком, а частичные суммы накапливаются.
Поток данных со стационарными весами: веса остаются в локальной памяти, пока через систему проходят входы и частичные суммы; минимизирует трафик чтения параметров и лучше всего подходит для CNN и умножений матриц с интенсивным повторным использованием весов.
## Умножение матриц со стационарными весами
## - Веса остаются фиксированными в локальной памяти
## - Входные активации проходят потоком
## - Частичные суммы накапливаются для итогового выхода
for weight_block in weights: # Загрузка и удержание весов как стационарных
load_to_local(weight_block) # Фиксированы в локальном хранилище
for input_block in inputs: # Динамически передаем входы потоком
for output_block in outputs: # Вычисляем результаты
output_block += compute(weight_block, input_block)
# Повторно используем веса для разных входов
При потоке данных со стационарными весами веса загружаются в локальную память один раз и остаются фиксированными на протяжении всего вычисления, а входы динамически проходят потоком, сокращая избыточные обращения к памяти. Частичные суммы накапливаются эффективно, сводя к минимуму ненужное перемещение данных. Поскольку веса не нужно перезагружать для каждого нового вычисления, требования к пропускной способности значительно падают, что делает этот поток данных очень эффективным для нагрузок с интенсивным повторным использованием весов, таких как CNN и умножения матриц.
Однако хотя эта стратегия сокращает трафик, связанный с весами, она вносит компромиссы в перемещение входов и выходов. Поскольку входы должны динамически проходить потоком, пока веса остаются фиксированными, эффективность подхода зависит от того, насколько хорошо входные активации можно доставлять вычислительным блокам без остановок. Частичные суммы, представляющие промежуточные результаты, тоже нужно аккуратно накапливать, чтобы не допустить чрезмерного трафика памяти. Общий выигрыш производительности зависит от размера доступной памяти на кристалле, поскольку хранение больших матриц весов локально может стать ограничением для моделей с миллионами или миллиардами параметров.
Стратегия стационарных весов хорошо подходит для нагрузок, где веса демонстрируют высокое повторное использование и пропускная способность памяти является ограничивающим фактором. Она обычно применяется в CNN, систолических массивах и ядрах умножения матриц, где структурированное повторное использование весов приводит к измеримому росту производительности. Однако для моделей, в которых важнее повторное использование входов или выходов, лучшие компромиссы могут дать альтернативные потоки данных — стационарный выход или стационарный вход.
Стационарный выход
Стратегия стационарных весов держит веса локально и пропускает входы через систему. Однако доминирующая стоимость меняется, когда узким местом оказывается не загрузка весов, а частые записи частичных сумм. В полносвязных слоях и механизмах внимания трансформера каждый выходной элемент накапливает вклад сотен или тысяч пар вес–вход. Запись этих промежуточных частичных сумм во внешнюю память после каждого шага накопления создала бы узкое место пропускной способности записи, гораздо более серьезное, чем накладные расходы на чтение, которые решает стратегия стационарных весов. Стратегия стационарного выхода меняет приоритеты: она удерживает частичные суммы фиксированными в локальной памяти, пропуская через систему и веса, и входные активации, так что каждый выходной элемент записывается во внешнюю память только один раз, после накопления всех своих вкладов (Chen et al., 2016).
«Поток данных со стационарным выходом» показывает, как локальное накопление частичных сумм минимизирует записи в память и повышает эффективность умножения матриц. В этой реализации буфер аккумулятора остается в локальных регистрах или scratchpad-памяти на протяжении всего внутреннего цикла; веса и входы проходят потоком, вносят вклад в текущую сумму и отбрасываются. Итоговый результат записывается только один раз на выходной элемент, что устраняет повторяющийся трафик записи, который иначе доминировал бы в пропускной способности.
Этот подход естественно согласуется с систолическими массивами, где вычисление продвигается через решетку процессорных элементов, а частичные суммы могут течь вдоль одной оси, не покидая кристалл. Компромисс в том, что теперь и веса, и активации должны передаваться динамически, поэтому системе приходится поддерживать высокую пропускную способность чтения для двух потоков данных одновременно. Параллельные реализации также требуют аккуратной синхронизации, когда несколько PE вносят вклад в один и тот же выходной элемент. Стационарный выход поэтому наиболее эффективен для нагрузок, где доминирует накопление, например для полносвязных слоев и механизмов внимания, но хуже подходит, когда критическим узким местом является повторное использование входов.
Поток данных со стационарным выходом: частичные суммы остаются в локальной памяти, пока через нее проходят веса и входы, поэтому каждый выход записывается только один раз, что минимизирует трафик записи при накоплении; лучше всего подходит для полносвязных слоев и внимания.
## - Частичные суммы остаются в локальной памяти
## - Веса и входные активации проходят потоком динамически
## - Итоговые выходы записываются только один раз
for output_block in outputs: # Удерживаем частичные суммы как стационарные
accumulator = 0 # Инициализируем буфер накопления
for weight_block, input_block in zip(weights, inputs):
accumulator += compute(weight_block, input_block)
# Накапливаем частичные суммы
store_output(accumulator) # Одна запись в память
Стационарный вход
Две рассмотренные стратегии фиксируют в локальной памяти разные операнды: стационарные веса фиксируют веса, чтобы снизить пропускную способность чтения параметров, а стационарный выход фиксирует частичные суммы, чтобы снизить пропускную способность записи накоплений. Третья стратегия завершает картину, фиксируя оставшийся операнд — входные активации. В слое трансформера одна активация может питать несколько проекций или голов внимания; следующий слой получает уже новое вычисленное представление, а не ту же активацию токена. Когда повторное использование активаций составляет главную стоимость памяти, удержание входов стационарными и потоковая передача весов через систему может снизить энергию и пропускную способность. «Поток данных со стационарным входом» иллюстрирует этот подход.
Поток данных со стационарным входом: входные активации остаются в локальной памяти, пока через нее проходят веса, что сокращает трафик чтения активаций, когда один тайл активаций питает несколько вычислений.
## - Входные активации остаются в локальной памяти
## - Веса проходят потоком динамически
## - Частичные суммы накапливаются и записываются
for input_block in inputs: # Удерживаем входные активации как стационарные
load_to_local(input_block) # Фиксированы в локальном хранилище
for weight_block in weights: # Динамически передаем веса потоком
for output_block in outputs: # Вычисляем результаты
output_block += compute(weight_block, input_block)
# Повторно используем входы для разных весов
Здесь входные активации загружаются один раз и удерживаются фиксированными в локальном хранилище, пока через него проходят веса. Частичные суммы накапливаются и в итоге записываются, но в отличие от потока со стационарным выходом выгоду от локальности получает не буфер накопления, а входные активации.
Компромисс повторяет устройство двух других стратегий: веса передаются динамически, требуя устойчивой пропускной способности чтения из памяти, а частичные суммы нужно буферизовать перед записью обратно. Стационарный вход наиболее эффективен, когда один тайл активаций питает несколько проекций, голов внимания или вычислений гейтов до вытеснения.
В совокупности три потока данных дают основу для принятия решений, а не иерархию качества. Стационарные веса минимизируют трафик чтения параметров и подходят сверточным сетям с компактными, интенсивно используемыми фильтрами. Стационарный выход минимизирует трафик записи накоплений и подходит полносвязным слоям с широким входным веером. Стационарный вход минимизирует трафик чтения активаций и подходит трансформерам и выводу с большим батчем при высоком повторном использовании активаций. Ни одна стратегия не доминирует; оптимальный выбор зависит от того, какое измерение тензора дает наибольшее отношение повторного использования к емкости локального хранилища. Аппаратные компиляторы выбирают между этими стратегиями, исходя из размерностей нагрузки и ограничений иерархии памяти. Сверточные конструкции добавляют четвертую метку — стационарные строки (как в Eyeriss), но это гибрид, который удерживает строки входов и частичных сумм локально, когда такое отображение дает большее повторное использование, чем фиксация любого одного операнда («Сверточные нейронные сети»).
Эффективные по памяти раскладки тензоров
Стратегии потоков данных из раздела «Шаблоны перемещения данных» определяют, какие операнды остаются рядом с вычислительными блоками; раскладки тензоров определяют, можно ли эффективно обращаться к этим операндам, когда они поступили. Даже удачно выбранное расписание со стационарными весами останавливается, если веса разложены в формате, который порождает шаговые, несогласованные выборки из памяти. Раскладка тензора — это контракт ядра: физический порядок многомерных данных в линейной памяти должен совпадать с шагом доступа, который ожидают исполнительные блоки ускорителя, иначе процессор платит остановками памяти, недоиспользованием кэша и лишними транзакциями шины.
Аппаратные ускорители выбирают данные из памяти устройства транзакциями фиксированного размера, обычно от 32 до 128 байт на транзакцию. Когда вычислительные блоки запрашивают несмежные адреса, каждая транзакция доставляет лишь долю полезной нагрузки, ухудшая эффективную пропускную способность памяти. Согласование раскладки тензора с моделью выполнения аппаратуры обеспечивает, что параллельные потоки или линии SIMD обращаются к смежным ячейкам памяти в одной объединенной транзакции (NVIDIA Corporation, 2021).
Фреймворки машинного обучения и компиляторы часто управляют выбором раскладки автоматически. Инструменты оптимизации, такие как cuDNN для GPU NVIDIA, XLA для TensorFlow и JAX и стеки компиляторов на основе MLIR, преобразуют раскладки тензоров, когда понижают операции до ядер конкретного бэкенда (NVIDIA Corporation, 2021); (Google, 2025); (Lattner et al., 2020). В высокоуровневых фреймворках преобразования раскладки обычно применяются прозрачно, но разработчикам, которые пишут собственные ядра или работают с низкоуровневыми API, такими как CUDA, Metal или OpenCL, приходится управлять форматами тензоров напрямую.
В PyTorch, например, операции представления вроде tensor.permute() меняют шаги тензора без перемещения данных в памяти, и для материализации упакованного буфера, когда последующему ядру нужно непрерывное хранение, требуется явный вызов tensor.contiguous() (PyTorch Contributors, 2026). И наоборот, TensorFlow по умолчанию использует channels-last (NHWC) для сверточных моделей на GPU NVIDIA и предупреждает, что входы NCHW вносят накладные расходы автоматической транспозиции при понижении до ядер GPU (TensorFlow Developers, 2024). Библиотеки с аппаратной оптимизацией, такие как cuDNN на GPU и oneDNN на CPU, реализуют специальные форматы памяти, чтобы максимизировать использование строк кэша и пропускную способность SIMD. Руководящий принцип таков: раскладку памяти нужно считать внутренним свойством пути выполнения бэкенда; самый быстрый формат тензора тот, который минимизирует накладные расходы на преобразование раскладки и делает обращения к памяти непрерывными для аппаратных блоков выполнения.
Раскладка channels-last
В раскладке NHWC channels-last индекс канала меняется быстрее всего в непрерывном тензоре, поэтому значения каналов для каждой пространственной координаты располагаются в памяти рядом. NHWC задает логический порядок измерений, а не соглашение о линейном хранении; и тензоры NHWC, и NCHW представляют собой линейные последовательности хранения в соответствующем порядке измерений.
Рассмотрим тензор RGB-изображения формы . Элементы в линейной памяти располагаются так:
Все значения каналов для данного пикселя смежны, а адреса памяти продвигаются по ширине, прежде чем перейти вниз по высоте. Такая раскладка поддерживает векторизованное выполнение, когда вычислительное ядро обрабатывает несколько каналов одновременно: регистры SIMD CPU и тензорные ядра GPU могут загружать смежные векторы каналов напрямую, без перетасовки внутри регистра.
Преимущество хранения channels-last зависит от целевого оператора и вычислительного блока. TensorFlow использует NHWC по умолчанию, тогда как PyTorch предоставляет отдельный формат памяти channels-last, который отделяет логический порядок измерений от физического хранения. Современные ядра cuDNN для тензорных ядер предпочитают NHWC, потому что блоки умножения матриц упаковывают измерения каналов прямо в тайлы аккумуляторов. Когда ядрам нужны входы с непрерывными каналами, передача несовместимого формата заставляет среду выполнения фреймворка вставлять явную транспозицию памяти, что влечет штраф по пропускной способности до начала вычислений.
Раскладка channels-first
В непрерывной раскладке NCHW channels-first индекс пространственной ширины меняется быстрее всего, и все пространственные значения по целому каналу хранятся подряд, прежде чем начнется следующий канал. Ускорители обрабатывают данные параллельно по варпам потоков или линиям SIMD; когда соседние потоки в варпе обращаются к соседним адресам памяти, контроллер памяти объединяет эти запросы в одну транзакцию памяти (объединение обращений к памяти, memory coalescing).35
Рассмотрим тот же RGB-тензор изображения с измерениями, переупорядоченными в порядке channels-first: . Сохраняя как семантическую координатную нотацию, данные хранятся в порядке channels-first так:
В этом формате сначала хранятся все значения красного канала для всего изображения, затем все зеленые и затем все синие значения. Такое расположение позволяет ядрам, которые распараллеливают по пространственным координатам , выполнять объединенные чтения вдоль строк изображения, что подходило более ранним алгоритмам свертки на GPU и конвейерам выполнения SIMD (Chetlur et al., 2014).
Относительное преимущество NCHW перед NHWC зависит от того, как базовое ядро отображает вычисления на аппаратные потоки. Сверточные слои вычисляют фильтры по пространственным и канальным измерениям одновременно. В классических прямых или основанных на FFT свертках порядок channels-first позволял эффективно скользить по пространству без скачков шага. Однако современные свертки, понижаемые до GEMM, и конвейеры тензорных ядер отображают редукцию по каналам прямо в аккумуляторы умножения матриц, поэтому предпочитают структуры channels-last. Когда модель работает в NCHW, но вызывает бэкенд, оптимизированный под тензорные ядра, среда выполнения должна либо запустить неоптимизированное запасное ядро, либо динамически транспонировать тензор в NHWC; в обоих случаях тратится пропускная способность памяти.36
Сравнение раскладок channels-last и channels-first
Раскладки channels-last (NHWC) и channels-first (NCHW) рассчитаны на разные аппаратные шаблоны доступа, и их эффективность определяется тем, распараллеливает ли ядро по пространственным координатам или векторизует по измерениям каналов. Выбор раскладки напрямую управляет использованием строк кэша, числом транзакций шины памяти и загрузкой вычислительных блоков. «Стратегии раскладки данных» сопоставляет компромиссы производительности и аппаратную совместимость двух подходов.
| Признак | Channels-last (NHWC) | Channels-first (NCHW) |
|---|---|---|
| Порядок хранения в памяти | Пиксели хранятся построчно, каналы чередуются | Все значения данного канала хранятся вместе |
| Лучше всего для | Циклы CPU, поэлементные операции, многие ядра channels-last | Многие устаревшие пути свертки на GPU и код моделей channels-first |
| Эффективность кэша | Высокая локальность кэша для последовательного доступа по строкам и каналам | Может улучшать объединение для ядер channels-first |
| Производительность свертки | Часто предпочтительна для современных путей свертки и слияния на тензорных ядрах | Эффективна для многих ядер cuDNN и фреймворков |
| Выборка из памяти | Хорошо, когда ядра векторизуют по соседним данным каналов | Хорошо, когда ядра обрабатывают тайлы, упорядоченные по каналам |
| Значение по умолчанию во фреймворках | Распространенное соглашение TensorFlow; опция channels-last в PyTorch | Распространенное соглашение о форме тензоров в PyTorch |
Стратегии раскладки данных: раскладки channels-last (NHWC) и channels-first (NCHW) оптимизируют шаблоны доступа к памяти для разных ядер бэкенда. NHWC часто подходит для векторизации CPU и современных путей свертки и слияния на тензорных ядрах, тогда как NCHW остается распространенным в коде моделей PyTorch и во многих ядрах GPU. Выбор подходящей раскладки напрямую влияет на производительность, максимизируя использование кэша и эффективность пропускной способности памяти.
Хотя такие компиляторы, как XLA, TensorRT и PyTorch Inductor, автоматизируют распространение раскладки и вставляют преобразования раскладки, когда это выгодно, преобразования форматов не бесплатны: транспонирование тензора требует прочитать каждый элемент из памяти и записать его обратно в другом порядке, расходуя пропускную способность памяти без полезной арифметики. В промышленных развертываниях согласование раскладки памяти модели с родным форматом ядра ускорителя полностью устраняет эти преобразования.
Даже когда раскладка тензора идеально согласована с аппаратурой, выполнение операций как изолированных ядер вносит отдельное узкое место: промежуточные значения все равно должны ходить к памяти устройства и обратно между операциями. Чтобы устранить это узкое место, нужно менять не раскладку тензоров, а то, как операции планируются.
Слияние ядер
Сокращение промежуточного перемещения данных между операциями — один из главных механизмов смягчения стены памяти. Слияние ядер37 объединяет несколько последовательных операций в одно исполняемое ядро, устраняя промежуточные обращения к памяти туда и обратно.
Промежуточная запись в память
Выполнение нейросетей часто ограничено пропускной способностью памяти, а не арифметической производительностью. Когда операции выполняются как изолированные ядра, каждый промежуточный результат записывается в память устройства (DRAM или HBM), а затем читается обратно следующим оператором. Этот цикл туда и обратно вносит задержку памяти, останавливает вычислительные блоки и расходует пропускную способность шины на данные, которые не используются повторно за пределами этой пары операций.
Эта аппаратная реальность дает физическое обоснование для методов слияния операторов, введенных в разделе «Слияние операторов». Если в разделе «Понимание стены памяти в ИИ» анализировались ограничения пропускной способности через низкую операционную интенсивность, то цепочки поэлементных операций усугубляют стену памяти, умножая глобальные транзакции памяти (NVIDIA Corporation, 2017).
В наивной модели выполнения каждая операция выполняется как отдельное ядро GPU, и промежуточные тензоры совершают путь туда и обратно через память устройства («Наивное выполнение»). В цепочке из трех операций, таких как ReLU, пакетная нормализация и аффинное масштабирование, промежуточные выходы и записываются в DRAM только для того, чтобы сразу же быть повторно прочитанными следующим ядром. Для поэлементных операторов, где арифметическая интенсивность низка (), время перемещения данных по шине памяти превышает время вычислений (Jia et al., 2019). Кроме того, удержание таких неслитых промежуточных буферов в памяти раздувает объем живых тензоров во время выполнения («Хранение промежуточных тензоров»).
Наивное выполнение: каждый шаг записывает промежуточные результаты в память перед обработкой следующего, что ведет к росту использования пропускной способности и снижению эффективности.
import torch
import torch.nn.functional as F
## Входной тензор
X = torch.randn(1024, 1024).cuda()
running_mean = torch.zeros(1024, device=X.device)
running_var = torch.ones(1024, device=X.device)
## Пошаговое выполнение (наивный подход)
X1 = torch.relu(X) # Промежуточный тензор хранится в памяти
X2 = F.batch_norm(
X1, running_mean, running_var, training=False
) # BatchNorm при выводе с замороженными статистиками
Y = 2.0 * X2 + 1.0 # Итоговый результат
Слияние ядер для эффективности памяти
Два промежуточных тензора занимают емкость памяти, пока остаются живыми, и создают внешний трафик, когда отдельные ядра их материализуют. Слияние ядер может устранить эти промежуточные записи и повторные загрузки (Jia et al., 2019), передавая значения через регистры или локальную память внутри одного ядра.
| Тензор | Размер (МБ) для тензора |
|---|---|
| X | 4,2 МБ |
| X’ | 4,2 МБ |
| X’’ | 4,2 МБ |
| Y | 4,2 МБ |
| Итого | 16,8 МБ |
Хранение промежуточных тензоров: если все четыре названных тензора остаются живыми в этом наивном примере, они занимают 16,8 МБ; оптимизирующая среда выполнения может переиспользовать буферы, когда более ранние значения больше не нужны. Слияние в первую очередь гарантирует устранение внешней записи и чтения для каждого исключенного промежуточного значения, а не универсальное сокращение пикового выделенного объема памяти.
Типичная последовательность вывода машинного обучения может применять ReLU, пакетную нормализацию с замороженными статистиками и затем аффинное масштабирование с множителем и смещением . В наивной реализации каждое отдельное ядро порождает промежуточный тензор, который записывается в память и читается обратно следующим ядром:
При слиянии ядер эти операции объединяются в один вычислительный шаг, и все преобразование выполняется без порождения ненужных промежуточных тензоров:
«Выгоды слияния операций» показывает влияние слияния операций на эффективность памяти. Удерживая промежуточные результаты в регистрах или локальной памяти вместо записи в основную память, слияние сокращает внешний трафик. Для трех отдельных поточечных ядер вывода наивный идеализированный путь читает и записывает один тензор на операцию, тогда как слитый путь читает вход один раз и записывает выход один раз.
| Модель выполнения | Внешние передачи тензоров | Трафик (МБ) |
|---|---|---|
| Наивное выполнение | 3 чтения + 3 записи | 25,2 МБ |
| Слитое выполнение | 1 чтение + 1 запись | 8,4 МБ |
Выгоды слияния операций: в этой идеализированной последовательности вывода слияние сокращает внешний трафик тензоров с 25,2 МБ до 8,4 МБ, то есть в 3 раза. Фактический трафик зависит от поведения кэша и переиспользования буферов компилятором.
Выгоды и ограничения производительности
Слияние ядер дает несколько ключевых преимуществ, которые повышают эффективность памяти и пропускную способность вычислений. Сокращая обращения к памяти, слитые ядра удерживают промежуточные значения внутри регистров, а не записывают их в память и не читают оттуда многократно. Это заметно снижает трафик памяти, который является одним из главных узких мест нагрузок машинного обучения. GPU и TPU в особенности выигрывают от слияния ядер, потому что высокоскоростная память — дефицитный ресурс, а сокращение транзакций памяти приводит к лучшей загрузке вычислительных блоков (NVIDIA Corporation, 2020).
Однако не все операции можно сливать произвольно. Поэлементные операции и нормализация при замороженном выводе — сильные кандидаты, потому что их вычисления не требуют редукций по всему батчу. Пакетная нормализация в режиме обучения вычисляет статистики батча и не является чисто поэлементной. Умножения матриц и свертки ограничивают слияние, потому что включают редукции и большие перемещения данных; их часто сливают с поэлементными завершающими этапами, такими как смещение или активация, но свободно сливать с несвязанными глобальными операциями нельзя.
Еще одно важное соображение — давление на регистры. Слияние нескольких операций означает, что все временные значения должны держаться в регистрах, а не в памяти. Это устраняет избыточные записи в память, но увеличивает потребность в регистрах. Если слитое ядро превышает доступные регистры на поток, компилятор может выгрузить лишние значения в локальную память потока, которая опирается на память устройства и может кэшироваться; это вносит дополнительную задержку и потенциально сводит на нет выгоды слияния. На GPU, где заполненность потоков (число потоков, которые могут работать параллельно) ограничена доступными регистрами, чрезмерное слияние может снизить параллелизм и привести к убывающей отдаче.
Разные ИИ-ускорители и компиляторы обрабатывают слияние по-разному. GPU NVIDIA, например, благоприятствуют параллелизму на уровне варпа, где поэлементное слияние несложно (NVIDIA Corporation, 2020). TPU, напротив, отдают приоритет выполнению на систолическом массиве для плотных матричных операций (Jouppi et al., 2017). Стеки компиляторов и вывода, такие как TVM, XLA, TensorRT и MLIR, применяют переписывание графов, проходы понижения уровня или эвристики построения движков, чтобы уравновесить экономию памяти с ограничениями выполнения (Chen et al., 2018); (Google, 2025); (NVIDIA, 2024); (Lattner et al., 2020).
Несмотря на свои преимущества, слияние не всегда полезно. Некоторые фреймворки ИИ позволяют разработчикам выборочно отключать слияние, особенно при отладке проблем производительности или при частых изменениях модели. Решение о слиянии операций должно учитывать компромиссы между эффективностью памяти, использованием регистров и аппаратными ограничениями выполнения, чтобы слияние давало ощутимый прирост производительности.
Перемещение данных и слияние ядер
Строительные блоки потоков данных теперь на месте: локальность данных, раскладка тензоров и слияние ядер. Эти решения о слиянии в конечном счете касаются локальности данных, которая связывает основные стратегии перемещения данных этой главы:
- Выбор локальности: при потоках данных со стационарными весами, стационарным выходом и стационарным входом определите, какой тензор держится рядом с вычислительными блоками и как этот выбор смещает место, где приземляется трафик памяти.
- Соответствие раскладки: ядро работает на бэкенде, который ожидает NHWC, но получает тензор NCHW. Предскажите, что произойдет с его шаблоном доступа к памяти и с достигаемой пропускной способностью.
- Допустимость слияния: для Conv2D, BatchNorm и ReLU, выполняемых последовательно, решите, какие пары стоит сливать, и определите, что делает слияние окупаемым.
- Оставшийся разрыв: локальность, раскладка и слияние выбраны хорошо, но операция все равно останавливается на памяти. Какого преобразования не хватает и почему остальные три его не решают?
Эффективные по памяти стратегии тайлинга
Хотя современные ИИ-ускорители обеспечивают высокую вычислительную пропускную способность, их производительность часто ограничивается пропускной способностью памяти, а не сырой вычислительной мощностью. Если данные нельзя подать вычислительным блокам достаточно быстро, возникают остановки выполнения, приводящие к потерянным тактам и неэффективному использованию аппаратуры.
Тайлинг38 смягчает эту проблему, перестраивая вычисления в меньшие, дружественные к памяти подзадачи. Когда пропускную способность памяти нельзя увеличить напрямую, системы должны сократить обращения к основной памяти. Вместо того чтобы обрабатывать целые матрицы или тензоры сразу, что ведет к избыточному трафику памяти, тайлинг разбивает вычисления на меньшие блоки (тайлы), которые помещаются в быструю локальную память (например, кэши, разделяемую память или регистры) (Lam et al., 1991).
Умножение матриц, широко используемое в моделях ИИ, при наивной реализации демонстрирует неэффективный доступ к памяти. «Наивное умножение матриц» показывает, как без тайлинга повторные обращения к одним и тем же данным ведут к ненужному потреблению пропускной способности.
Наивное умножение матриц: прямая реализация делает обращений к массивам для матриц . Кэши могут обслуживать часть обращений, но порядок циклов не блокирует повторное использование намеренно для иерархии памяти.
for i in range(N):
for j in range(N):
for k in range(N):
C[i, j] += A[i, k] * B[k, j] # Многократные выборки
# A[i, k] и B[k, j]
Цикл многократно обращается к элементам и . Некоторые обращения могут попадать в кэш, но большие матрицы и неблагоприятный порядок обхода по-прежнему могут вызывать избыточный трафик на нижних уровнях.
Тайлинг решает эту проблему, обеспечивая, что меньшие части матриц загружаются в быструю память, эффективно переиспользуются и записываются обратно в основную память только при необходимости. Этот прием особенно важен в ИИ-ускорителях, где обращения к памяти доминируют во времени выполнения. «Механика тайлинга матриц» обозначает произведение тремя его измерениями: строк и столбцов в , строк и столбцов в , и в выходе . Каждый выделенный тайл — это рабочий набор, который в данный момент помещается в быструю память: зеленая полоса строк размером умножается на розовую полосу столбцов размером , чтобы накопить один синий выходной блок размером матрицы . Выполнение всех вычислений одного тайла до перехода к следующему позволяет не платить раз за разом штраф за обращение к DRAM.
Механика тайлинга матриц: разбиение большого умножения матриц () на блоки и выравнивает объем памяти под быструю SRAM на кристалле и регистры. Максимизация повторного использования регистров внутри каждого тайла амортизирует медленные обращения к DRAM за пределами кристалла и поддерживает вычислительные движки на пиковой пропускной способности.
Основы тайлинга
Тайлинг разбивает вычисление на меньшие тайлы, которые помещаются в доступную быструю память, вместо того чтобы работать сразу со всей структурой данных. Такая структура максимизирует повторное использование данных, сокращая избыточные обращения к памяти и повышая эффективность.
Рассмотрим умножение матриц, ключевую операцию нагрузок машинного обучения. Операция вычисляет , где каждый элемент . «Наивное умножение матриц» показывает основную проблему: на каждой итерации самого внутреннего цикла элементы матриц и выбираются из памяти, выполняется умножение и обновляется матрица . Поскольку матрицы большие, процессор многократно перезагружает одни и те же значения из памяти, хотя они только что использовались в предыдущих вычислениях.
Эти накладные расходы на перемещение данных дороги: доступ к DRAM имеет гораздо большую задержку и энергетическую стоимость, чем доступ к кэшу или регистрам на кристалле (Horowitz, 2014); (Sze et al., 2017). Решение — тайлинг.
Выгоды тайлинга для производительности
Вместо того чтобы вычислять по одному элементу и постоянно перемещать данные туда и обратно из медленной памяти, тайлинг обрабатывает подматрицы (тайлы) по одной, удерживая часто используемые значения в быстрой памяти. Идея в том, чтобы разбить матрицы на меньшие блоки, которые помещаются в кэш процессора или разделяемую память, так что однажды загруженный блок используется многократно, прежде чем перейти к следующему. «Блочное умножение матриц с учетом кэша» демонстрирует блокировку циклов, дружественную к кэшу: границы циклов разбивают матрицы на тайлы, а иерархия кэшей аппаратуры держит недавно использованные данные тайла рядом с вычислительными блоками, когда порядок доступа обладает локальностью.
Блочное умножение матриц с учетом кэша: этот подход блокировки циклов высокого уровня делит матрицы на меньшие диапазоны индексов, чтобы аппаратные кэши могли переиспользовать данные внутри каждого тайла, повышая вычислительную эффективность без явных загрузок в scratchpad.
TILE_SIZE = 32 # Выбираем размер тайла по аппаратным ограничениям
# Блокировка по кэшу: разбиение данных через границы циклов.
# Загрузки неявные, через иерархию кэшей аппаратуры.
for i in range(0, N, TILE_SIZE):
for j in range(0, N, TILE_SIZE):
for k in range(0, N, TILE_SIZE):
# Каждый тайл вычисляется независимо
for ii in range(i, min(i + TILE_SIZE, N)):
for jj in range(j, min(j + TILE_SIZE, N)):
for kk in range(k, min(k + TILE_SIZE, N)):
C[ii, jj] += A[ii, kk] * B[kk, jj]
Такая перестройка заметно повышает производительность благодаря трем взаимно усиливающим эффектам. Повторное использование памяти улучшается, потому что подход многократно обращается к небольшому тайлу, пока он вероятнее всего остается в кэше, прежде чем перейти к следующему тайлу, а не выбирает элементы и снова и снова из медленной памяти, что минимизирует избыточные обращения. Использование пропускной способности памяти падает как прямое следствие: поскольку каждый тайл используется многократно, прежде чем будет вытеснен, большинство нужных данных доступны в кэше L1/L2 или разделяемой памяти, а не в DRAM, поэтому трафик сокращается и выполнение ускоряется. Эффективность вычислений растет в свою очередь, потому что процессоры меньше времени ждут данных и больше времени выполняют полезную работу; в архитектурах вроде GPU и TPU, где тысячи параллельных вычислительных блоков работают одновременно, тайлинг обеспечивает структурированное чтение и обработку данных, которое избегает ненужных остановок.
Этот прием особенно эффективен в ИИ-ускорителях, где нагрузки машинного обучения состоят из больших умножений матриц и преобразований тензоров. Без тайлинга такие нагрузки быстро становятся ограниченными памятью, то есть производительность определяется скоростью получения данных, а не сырой вычислительной мощностью процессора.
Методы тайлинга
Хотя общий принцип тайлинга остается тем же, то есть разбиение больших вычислений на меньшие подзадачи для улучшения повторного использования памяти, существуют разные способы применения тайлинга в зависимости от структуры вычисления и аппаратных ограничений. Две основные стратегии тайлинга — пространственный и временной. Они оптимизируют разные аспекты вычислений и доступа к памяти, а на практике их часто комбинируют для достижения наилучшей производительности.
Пространственный тайлинг разбивает структуры данных на меньшие блоки, которые помещаются в быструю память. Тайловое умножение матриц в «Блочное умножение матриц с учетом кэша» демонстрирует блокировку циклов, дружественную к кэшу: код не выдает явных загрузок в scratchpad, но шаблон доступа в форме тайлов позволяет аппаратным кэшам переиспользовать близкие значения до их вытеснения. Эта стратегия особенно полезна для больших тензоров, которые превышают емкость быстрой памяти: разбивая вычисления на меньшие тайлы, минимизируют перемещение данных между уровнями памяти и держат операции локализованными внутри иерархий кэша.
Временной тайлинг дополняет пространственный, явно размещая данные в разделяемой памяти или регистрах и переупорядочивая вычисления вокруг этих подготовленных данных. Многие нагрузки ML обращаются к одним и тем же данным повторно на разных итерациях — без временного тайлинга это приводит к избыточным выборкам из памяти. Временной тайлинг перестраивает вычисление так, чтобы часто используемые данные оставались в быстрой памяти как можно дольше до начала следующего вычисления.
Классический пример, где временной тайлинг полезен, — сверточные операции, в которых один и тот же набор весов применяется к нескольким областям входа. Без блокировки циклов эти веса могли бы загружаться из памяти несколько раз на каждое вычисление. С временным тайлингом вычисление переупорядочивается так, что веса остаются в быстрой памяти для нескольких входов, что сокращает ненужные выборки и повышает общую эффективность. «Явная подготовка тайлов (псевдокод)» иллюстрирует явную подготовку тайлов: код загружает блоки и во временное быстрое хранилище, а затем переиспользует их в нескольких операциях внутреннего цикла.
Явная подготовка тайлов (псевдокод): бэкенд отображает временные тайловые объекты на быстрое хранилище и переиспользует их в операциях внутреннего цикла.
# Явная подготовка тайлов: загрузка данных в быструю
# временную память перед внутренними циклами.
for i in range(0, N, TILE_SIZE):
for j in range(0, N, TILE_SIZE):
for k in range(0, N, TILE_SIZE):
# Псевдокод: отображаем эти тайловые объекты на быструю память
A_tile = A[i : i + TILE_SIZE, k : k + TILE_SIZE]
B_tile = B[k : k + TILE_SIZE, j : j + TILE_SIZE]
# Повторно используем загруженные тайлы для всех внутренних итераций
for ii in range(A_tile.shape[0]):
for jj in range(B_tile.shape[1]):
for kk in range(A_tile.shape[1]):
C[i + ii, j + jj] += (
A_tile[ii, kk] * B_tile[kk, jj]
)
Явная подготовка тайлов повышает производительность, когда бэкенд размещает временные тайлы в быстрой памяти и переиспользует их до вытеснения. Псевдокод включает укороченные граничные тайлы, когда не делится на TILE_SIZE.
Этот прием особенно полезен в нагрузках, где определенные значения используются многократно, например в свертках, рекуррентных нейронных сетях (RNN) и механизмах самовнимания трансформеров. Применяя блокировку циклов, ИИ-ускорители могут заметно сократить остановки памяти и повысить пропускную способность выполнения.
Сложности и компромиссы тайлинга
Тайлинг повышает производительность только тогда, когда тайл соответствует бюджету локальности аппаратуры. Если тайл слишком мал, выборки из памяти по-прежнему доминируют во времени выполнения, потому что повторное использование слишком ограничено. Если тайл слишком велик, он не помещается в быструю память и вызывает трэшинг кэша или выгрузку в scratchpad. Поэтому выбор правильного размера тайла прямо определяет вычислительную эффективность и использование пропускной способности памяти.
Размер тайла также управляет балансировкой нагрузки. В таких архитектурах, как GPU и TPU, вычисления выполняются параллельно на тысячах вычислительных блоков. Если тайлы распределены неравномерно, часть блоков простаивает, пока другие перегружены, что ведет к неоптимальному использованию вычислительных ресурсов. Эффективное планирование тайлов поддерживает сбалансированное и эффективное параллельное выполнение.
Перемещение данных остается определяющей стоимостью даже после тайлинга. Хотя тайлинг сокращает число медленных обращений к памяти, перенос тайлов между уровнями иерархии по-прежнему несет задержку и энергетическую стоимость, особенно когда данные выпадают из кэша или scratchpad обратно в DRAM. Эффективные стратегии предвыборки и планирования памяти сводят это остаточное перемещение к минимуму и гарантируют, что данные доступны, когда они нужны.
Гибридный тайлинг сочетает пространственные и временные стратегии, когда ни одно измерение в отдельности не отражает шаблон повторного использования нагрузки. Некоторые ИИ-ускорители используют пространственный тайлинг для умножения матриц, а для повторного использования весов в сверточных слоях применяют временной тайлинг, динамически подстраивая размеры тайлов или переупорядочивая вычисления в зависимости от условий выполнения в реальном времени.
Регистровая блокировка, двойная буферизация и иерархический тайлинг расширяют тот же принцип локальности на более мелкие и более крупные уровни памяти. ИИ-компиляторы и системы среды выполнения, такие как TensorFlow XLA, TVM и MLIR, автоматически выбирают эти стратегии тайлинга по аппаратным ограничениям, позволяя тонко настраивать производительность без ручного вмешательства. «Стратегии тайлинга» дает сравнительный обзор пространственного, временного и гибридного подходов к тайлингу, выделяя их преимущества и компромиссы.
По мере роста размера и сложности моделей машинного обучения тайлинг остается критически важным инструментом повышения эффективности аппаратуры, позволяя ИИ-ускорителям работать близко к своему практическому потенциалу. Хотя ручные стратегии тайлинга могут давать существенную выгоду, компиляторы и методы оптимизации с учетом аппаратуры дополнительно повышают производительность, автоматически выбирая эффективные стратегии тайлинга для конкретной нагрузки.
| Аспект | Пространственный тайлинг (разбиение данных) | Временной тайлинг (блокировка циклов) | Гибридный тайлинг |
|---|---|---|---|
| Основная цель | Сократить обращения к памяти, удерживая данные в быстрой памяти дольше | Повысить повторное использование данных между итерациями циклов | Адаптироваться динамически к ограничениям нагрузки |
| Фокус оптимизации | Разбиение структур данных на меньшие дружественные к памяти блоки | Переупорядочивание вычислений для максимизации повторного использования до вытеснения | Балансировка стратегий пространственного и временного повторного использования |
| Использование памяти | Улучшает локальность кэша и сокращает обращения к DRAM | Удерживает часто используемые данные в быстрой памяти на несколько итераций | Минимизирует перемещение данных при высоком повторном использовании |
| Типичные случаи применения | Умножение матриц, CNN, самовнимание в трансформерах | Свертки, рекуррентные нейронные сети (RNN), итеративные вычисления | ИИ-ускорители с иерархической памятью, смешанные нагрузки |
| Прирост производительности | Сниженные требования к пропускной способности памяти, лучшая загрузка кэша | Меньшая задержка выборки из памяти, лучшая локальность данных | Максимальная эффективность на разных типах аппаратуры |
| Сложности | Требует аккуратного выбора размера тайла, неэффективен для нагрузок с минимальным пространственным повторным использованием | Может повышать давление на регистры, требует перестройки циклов | Сложность настройки размера тайла и порядка выполнения в динамике |
| Лучше всего, когда | Данные велики и требуют разбиения для эффективной обработки | Одни и те же данные обращаются многократно на разных итерациях | Важны и разбиение данных, и повторное использование по итерациям |
Стратегии тайлинга: пространственный, временной и гибридный тайлинг оптимизируют шаблоны доступа к памяти для повышения производительности. Пространственный тайлинг максимизирует повторное использование данных в быстрой памяти, временной тайлинг использует структуру цикла для сокращения обращений, а гибридный тайлинг сочетает оба подхода. Компиляторы и системы среды выполнения ИИ используют эти методы для автоматической оптимизации выполнения моделей на разнообразной аппаратуре.
Применение стратегий отображения к нейронным сетям
Хотя эти базовые приемы отображения применимы широко, их эффективность меняется в зависимости от вычислительной структуры, шаблонов доступа к данным и возможностей распараллеливания разных архитектур нейросетей. Каждая архитектура накладывает свои ограничения на перемещение данных, иерархию памяти и планирование вычислений, требуя подходящих стратегий отображения для оптимизации производительности.
Для систематического выбора стратегий отображения нужен структурированный подход, поскольку при назначении вычислений ИИ-ускорителям возникает комбинаторный взрыв вариантов. Вместо того чтобы рассматривать каждую модель как отдельную задачу оптимизации, одни и те же принципы применимы к разным архитектурам; меняется лишь то, какой приоритет получает каждый из них в зависимости от характеристик нагрузки. Цель состоит в том, чтобы систематически выбирать и применять стратегии отображения, которые максимизируют эффективность для разных типов моделей машинного обучения.
Эти принципы применяются к трем репрезентативным нагрузкам ИИ, каждая из которых характеризуется своими вычислительными требованиями. CNN выигрывают от пространственного повторного использования данных, поэтому выполнение со стационарными весами и тайлинг особенно эффективны. Поведение трансформеров зависит от фазы и формы: умножения матриц при обучении и префилле могут быть вычислительно-ограниченными, тогда как декодирование при малом батче часто зависит от пропускной способности весов и KV-кэша. MLP включают значительное умножение матриц и выигрывают от структурированного тайлинга, оптимизированных раскладок весов и выполнения с учетом памяти.
Несмотря на различия, каждая из этих моделей следует общему набору принципов отображения, с отличиями в расстановке приоритетов оптимизаций. «Стратегии отображения по архитектурам» сводит пригодность разных стратегий оптимизации для CNN, трансформеров и MLP.
Сверточные нейронные сети (ResNet-50)
Для ResNet-50 и подобных CNN ключевая возможность отображения — пространственное повторное использование весов. Небольшой фильтр применяется во многих пространственных позициях, поэтому его веса участвуют во многих операциях умножения с накоплением. Отображения со стационарными весами могут захватить это повторное использование, удерживая тайлы фильтров локально, тогда как отображения со стационарными строками или стационарным выходом на других архитектурах могут лучше балансировать трафик активаций и частичных сумм. Благоприятные формы свертки могут достигать высокой арифметической интенсивности, что делает их хорошо подходящими для матричных и систолических путей выполнения. Семейство моделей не определяет один универсальный поток данных: форма слоя, размер батча, емкость локального хранилища и поддерживаемые ядра целевой платформы решают, какой шаблон повторного использования стоит удерживать.
| Оптимизационный прием | CNN | Трансформеры | MLP | Обоснование |
|---|---|---|---|---|
| Поток данных | Стационарные веса, строки или выход | Зависит от фазы и ядра | Стационарные веса или выход | CNN открывают повторное использование фильтров и пространственное повторное использование; блоки внимания трансформера и MLP создают иной трафик; плотные MLP повторно используют веса по батчу и накапливают выходы. |
| Раскладки тензоров с учетом памяти | Зависит от бэкенда (часто NCHW для сверток cuDNN, channels-last на тензорных ядрах) | Зависит от бэкенда (типичны активации row-major) | Обычно row-major | Выбор раскладки зависит от пути ядра бэкенда и режима точности (см. раздел «Эффективные по памяти раскладки тензоров»); в ячейках указаны распространенные умолчания, а не универсальные предписания. |
| Слияние ядер | Свертка + активация | Слитое внимание | Слияние GEMM | CNN оптимизируют слияние свертки и активации; трансформеры сливают механизмы внимания; MLP выигрывают от слитых умножений матриц. |
| Тайлинг для эффективности памяти | Пространственный тайлинг | Временной тайлинг | Блочный тайлинг | CNN разбивают на тайлы по пространственным измерениям; трансформеры используют блокировку циклов для эффективности памяти по последовательности; MLP используют блочный тайлинг для больших умножений матриц. |
Стратегии отображения по архитектурам: каждая архитектура нейросети выигрывает от разных приоритетов оптимизации в зависимости от ее вычислительных характеристик и характеристик памяти.
Эта пространственная регулярность также позволяет агрессивно сливать операции и тайлить вычисления. Для вывода с замороженной статистикой BatchNorm компиляторы могут свертывать или сливать свертку, нормализацию и активацию, чтобы избежать ненужных промежуточных записей. BatchNorm в режиме обучения требует редукций по статистикам батча и не имеет того же контракта поэлементного слияния. Пространственный тайлинг разбивает карту признаков на подобласти, размер которых подобран под SRAM на кристалле, поэтому слитое ядро обрабатывает каждый тайл из быстрой памяти, прежде чем перейти к следующему.
Архитектуры трансформеров (GPT-2/Llama)
Если CNN определяются повторным использованием весов, то трансформеры определяются давлением на память со стороны кэша ключей и значений (KV). Во время вычисления внимания каждый вектор запроса должен обращаться к сохраненным парам ключей и значений по всей длине последовательности. По мере роста последовательностей полный KV-кэш обычно находится в HBM или DRAM устройства, тогда как ядра внимания разбивают активные блоки на тайлы в SRAM, регистрах или разделяемой памяти. Этот шаблон доступа мотивирует выполнение со стационарными активациями: удерживать текущие тайлы KV рядом с вычислительными блоками, пропуская через них запросы, вместо того чтобы многократно материализовать большие промежуточные результаты внимания во внешней памяти.
Трафик памяти, который создают стандартные реализации внимания, объясняет, почему слитые ядра внимания, такие как FlashAttention (Dao et al., 2022), дают большой прирост производительности: сливая скалярное произведение запроса и ключа, нормализацию softmax и взвешенную по значениям сумму в одно ядро, которое разбивает вычисления на тайлы по измерению последовательности, эти реализации не материализуют полную матрицу внимания в основной памяти. Такой подход временного тайлинга обрабатывает блоки последовательности, которые помещаются в SRAM на кристалле, существенно сокращая трафик HBM при сохранении вычисления внимания . Отображение трансформера зависит от фазы и формы: GEMM при обучении и префилле могут быть вычислительно-ограниченными, тогда как авторегрессивное декодирование при малом батче обычно ограничено пропускной способностью весов и KV-кэша.
Многослойные перцептроны и DLRM
MLP представляют самую прямую задачу отображения, потому что их вычисление в основном сводится к плотному GEMM.39 Каждый полносвязный слой умножает матрицу активаций на матрицу весов. Матрица весов фиксирована для всех образцов, поэтому батчинг повторно использует каждый загруженный вес по большему числу активаций и повышает арифметическую интенсивность. Батч из одного образца дает мало повторного использования весов между образцами и часто недозагружает широкие матричные движки, тогда как большие батчи могут сдвинуть выполнение в вычислительно-ограниченный режим. Раздел «Обобщенное матричное умножение (GEMM)» приложения «Основы алгоритмов» выводит масштабирование, которое определяет эту чувствительность.
Поскольку слои MLP обычно сопровождаются функциями активации и добавлением смещений, слияние GEMM объединяет эти шаги в одно ядро, избегая промежуточных записей в память. Блочный тайлинг разбивает большие умножения матриц на подблоки, размер которых подобран под разделяемую память ускорителя, обеспечивая высокую загрузку кэша на всем протяжении вычисления. Простота отображения MLP, где доминирует один примитив с предсказуемыми шаблонами доступа, как раз и объясняет, почему производители аппаратуры так агрессивно оптимизируют библиотеки GEMM: прирост производительности GEMM напрямую переходит в пропускную способность MLP. Однако DLRM — не чисто MLP-нагрузка. Ее большие разреженные таблицы эмбеддингов и этап взаимодействия признаков могут доминировать в емкости и трафике памяти, поэтому описанное здесь плотное отображение относится к нижней и верхней башням MLP, а не ко всей модели (Naumov et al., 2019).
Гибридные стратегии отображения
Предыдущие архитектурные подразделы рассматривают каждую архитектуру изолированно, однако реальные модели редко состоят из слоев одного типа. Визуальный трансформер, например, сочетает этап встраивания патчей, слои самовнимания и блоки MLP (Dosovitskiy et al., 2021). Эти слои создают разные шаблоны повторного использования: этап встраивания может выиграть от отображения со стационарными весами, внимание делает упор на движение активаций и тайлинг, а блоки MLP требуют блочного тайлинга GEMM и слияния. Ни одна стратегия потока данных не оптимальна для всех этих слоев, поэтому аппаратное отображение становится гибридным и зависящим от слоя.
Гибридное отображение решает эту неоднородность, позволяя ускорителю переключать стратегии на границах слоев. Каждый слой представляет свой баланс вычислительной интенсивности, повторного использования данных и шаблона доступа к памяти, и оптимальное отображение должно меняться соответственно (Sze et al., 2017). Вместо того чтобы фиксироваться на одном потоке данных для всей модели, гибридные подходы выбирают выполнение со стационарными весами для слоев с высоким повторным использованием весов, выполнение со стационарными активациями для слоев внимания с большими KV-кэшами и выполнение со стационарным выходом для слоев, где важнее всего минимизировать трафик записи.
Современные ускорители предоставляют архитектурные возможности, необходимые для реализации гибридного отображения на практике. Систолические массивы в духе TPU, GPU NVIDIA и ускорители на основе тайлов открывают разные сочетания локальной памяти, раскладок тензоров, слияния и средств планирования, позволяя компиляторам и средам выполнения выбирать стратегии для конкретных слоев, а не один глобальный поток данных для всей модели (Jouppi et al., 2023); (NVIDIA Corporation, 2020); (Chen et al., 2018). Эти реализации требуют программируемых иерархий памяти, эффективных межсоединений и специализированных конвейеров выполнения, что подкрепляет принцип совместного проектирования аппаратуры и программного обеспечения.
Однако гибридное отображение остается оптимизацией на этапе проектирования. В промышленных нагрузках условия выполнения меняются динамически из-за различных размеров входов, конкуренции за память и доступности аппаратных ресурсов. Компиляторы машинного обучения и системы среды выполнения расширяют эти статические решения об отображении, вводя динамическое планирование, оптимизации памяти и автонастройку, что обеспечивает эффективную работу глубоких нейронных сетей на разных ускорителях и в разных средах развертывания.
Поддержка компиляторов
Одна свертка может быть реализована десятками допустимых стратегий тайлинга, вариантами ядер и раскладками памяти, большинство из которых плохо работают на данной целевой платформе. Компиляторы машинного обучения справляются с этой сложностью, переводя высокоуровневые представления потоков данных в исполняемый код для конкретной целевой платформы. Компиляция ResNet-50 для вывода на GPU иллюстрирует основные этапы компилятора:
- Оптимизация графа сливает повторяющиеся шаблоны Conv2D–BatchNorm–ReLU в единые составные ядра, устраняя промежуточные обращения туда и обратно к HBM.
- Выбор ядра подбирает специализированные реализации тензорных ядер для совместимых умножений матриц, используя высокую арифметическую интенсивность плотных сверток.
- Планирование памяти определяет времена жизни активаций, чтобы безопасно перекрывать и переиспользовать выделения промежуточных буферов.
- Планирование вычислений конвейеризует копирования памяти с выполнением по независимым аппаратным очередям, скрывая задержки передачи данных.
В этом сценарии задержка вывода падает с 47 мс до 8 мс, то есть в 5,9 раза, без изменения математического выхода модели. Эти цифры отражают, как переписывание графа, выбор ядер, планирование памяти и расписание систематически применяют слияние ядер («Слияние ядер») и эффективный по памяти тайлинг («Эффективные по памяти стратегии тайлинга»), чтобы превратить теоретические FLOP/s аппаратуры в реально достигаемую пропускную способность (Chen et al., 2018); (NVIDIA, 2024).
Этот конвейер воплощает принцип совместного проектирования аппаратуры и программного обеспечения, введенный в разделе «Основы ускорения». Компиляторы машинного обучения соединяют высокоуровневые спецификации моделей с низкоуровневыми движками выполнения, перестраивая вычисления, выбирая ядра, специализированные под аппаратуру, и планируя времена жизни тензорного хранилища (Chen et al., 2018). Они опираются на классические основы компиляторов, добавляя преобразования на уровне тензоров и графов.
Конструкция компиляторов ML
Компиляторы машинного обучения специализируют традиционные техники компиляции для программ, выраженных как тензорные графы и библиотеки операторов. Компиляторы общего назначения оптимизируют скалярный поток управления, векторные инструкции, распределение регистров и локальность кэша; стеки компиляторов ML работают на более высоком семантическом уровне, оптимизируя топологию графа, раскладки тензорной памяти, специализацию по формам, диспетчеризацию ядер ускорителя и планирование выполнения между устройствами (Li et al., 2021).
«Приоритеты оптимизации компиляторов» сопоставляет акценты этих двух слоев компиляции. Граница взаимодополняющая, а не непересекающаяся: стек компилятора ML понижает высокоуровневые тензорные операции до промежуточных представлений, которые передаются в бэкенд LLVM, GPU или специфичный для вендора.
| Аспект | Традиционный компилятор | Компилятор машинного обучения |
|---|---|---|
| Входное представление | Программа на исходном языке или в промежуточном представлении | Тензорный граф или тензорное промежуточное представление |
| Модель выполнения | Поток управления, циклы, потоки, векторы и задачи | Тензорные операторы, ядра, графы и потоки ускорителя |
| Приоритеты оптимизации | Выбор инструкций, преобразования циклов, векторизация, регистры | Переписывание графа, слияние, раскладки, формы и выбор ядер |
| Управление памятью | Объекты, стек/куча, кэши, локальность и предвыборка | Времена жизни тензоров, переиспользование буферов, раскладки, тайлинг и передачи между устройствами |
| Целевое оборудование | CPU, GPU и другие программируемые цели | CPU, GPU, TPU и заказные ускорители |
| Результат компиляции | Машинный код или промежуточное представление более низкого уровня | Ядра плюс аппаратно-специфичный граф или план выполнения |
Приоритеты оптимизации компиляторов: стеки компиляторов ML добавляют решения на уровне тензоров и графов к традиционной компиляции на уровне инструкций и циклов. В промышленной цепочке инструментов оба слоя обычно работают вместе, а не заменяют друг друга.
Различие, описанное в «Приоритеты оптимизации компиляторов», объясняет, почему конфигурация компилятора определяет достигаемую производительность, даже если исходный код нейросети не меняется. Компиляторы ML управляют слоем трансляции между высокоуровневыми тензорными операциями и исполнительными блоками аппаратуры; когда это отображение не оптимизирует повторное использование данных или выравнивание раскладки, вычислительные блоки простаивают, а шины памяти насыщаются.
Скрытый слой оптимизации
Большинство практиков никогда не работают с компиляторами ML напрямую, однако качество компилятора определяет, какую долю пиковой пропускной способности ускорителя достигает модель. Вызов
model.compile()в Keras,torch.compile()в PyTorch или развертывание движка через TensorRT запускает многоэтапные конвейеры оптимизации, которые выполняют четыре преобразования:
- Слияние операций, которые разработчик сам не объединял (например, слияние Conv2D, BatchNorm и ReLU в одно ядро)
- Переупорядочивание вычислений для максимизации повторного использования данных в быстрой локальной памяти (например, тайлинг умножений матриц)
- Выбор ядер из библиотек, содержащих сотни настроенных вручную реализаций для конкретных архитектур
- Преобразование раскладок тензоров между тем, что ожидает API фреймворка, и тем, что требуют контроллеры памяти аппаратуры
Одно и то же определение модели работает с существенно разной пропускной способностью в зависимости от бэкенда компиляции, выбора понижения графа, выбора ядер и конфигурации среды выполнения. Когда задержка выполнения превышает целевые показатели обслуживания, конфигурация компилятора и понижение до бэкенда становятся основными рычагами оптимизации, которые не требуют изменения архитектуры модели или параметров обучения.
Конвейер компиляции ML
Модели машинного обучения, определенные в современных фреймворках, представлены как высокоуровневые графы потоков данных, описывающие операции над многомерными тензорами. Перевод этих представлений в исполняемый код для CPU, GPU, TPU или заказных ASIC требует конвейера компиляции ML (Chen et al., 2018); (Google, 2025); (Lattner et al., 2020).
Стандартный конвейер компиляции выполняет пять взаимосвязанных обязанностей:
- Оптимизация графа перестраивает вычисление, устраняя избыточную работу и сокращая трафик данных.
- Выбор ядра сопоставляет математические операции с оптимизированными реализациями под конкретную целевую платформу.
- Планирование памяти назначает раскладки тензоров, статические смещения буферов и границы времени жизни.
- Планирование вычислений упорядочивает ядра и передачи памяти, чтобы максимизировать параллелизм и скрыть задержки передач.
- Генерация кода выпускает машинные инструкции, ассемблер или интерпретируемый байт-код для конкретной целевой платформы.
На всех этих этапах компилятор применяет стратегии потоков данных, разобранные в разделе «Оптимизация потоков данных»: слияние ядер, тайлинг памяти и размещение вычислений. Аппаратное ускорение дает свою теоретическую пропускную способность, только когда эти преобразования, управляемые компилятором, открывают достаточную арифметическую интенсивность и согласуют доступ к памяти с иерархией аппаратуры.
Оптимизация графа
Фреймворки машинного обучения представляют модели как высокоуровневые вычислительные графы, где узлы — математические операторы (например, свертки, умножения матриц и активации), а направленные ребра — зависимости тензорных данных. Выполнение этого графа узел за узлом, как его задают фронтенды фреймворков, влечет серьезные штрафы памяти: каждое ребро требует выделения памяти и транзакции во внешней памяти (запись в DRAM или HBM с последующим чтением), а каждый узел — накладных расходов на запуск ядра и синхронизацию. На ускорителях, где арифметическая пропускная способность опережает пропускную способность памяти на порядок, материализация ненужных промежуточных тензоров доминирует в общем времени выполнения.
Оптимизация графа преобразует этот вычислительный граф в эффективный план выполнения до генерации аппаратного кода (Chen et al., 2018); (Jia et al., 2019). Работая в основном на независимом от целевой платформы промежуточном представлении (IR) до понижения («Генерация кода»), проходы графа применяют четыре основных преобразования:
Слияние операторов объединяет соседние операции в одно составное ядро, чтобы устранить обращения к внешней памяти туда и обратно и накладные расходы запуска. В сверточных сетях слияние Conv2D, пакетной нормализации и ReLU в одно ядро сохраняет активации в локальных регистрах или разделяемой SRAM на протяжении всей последовательности («Слияние ядер»). В архитектурах трансформеров сопоставители шаблонов заменяют многооператорные подграфы самовнимания (умножение матриц, масштабирование, маскирование, softmax и проекцию) монолитными ядрами внимания с учетом ввода-вывода (IO-aware), которые разбивают вычисления на тайлы полностью внутри быстрой памяти на кристалле (Dao et al., 2022).
Устранение избыточных вычислений и свертка констант находят и удаляют ненужные операции. Во время компиляции вывода параметры статических слоев, например векторы масштаба и смещения пакетной нормализации, сворачиваются прямо в веса и смещения предыдущих линейных или сверточных слоев, что убирает операторы нормализации из выполнения во время работы. Проходы графа также обрезают мертвые подграфы и объединяют одинаковые параллельные пути через исключение общих подвыражений.
Алгебраическое упрощение и корректировки раскладки переупорядочивают операции там, где они математически эквивалентны, чтобы минимизировать перемещение данных. Например, транспонирования можно протащить через поэлементные операции или сократить с обратными перестановками, уменьшая накладные расходы на изменение формы во время выполнения.
Переупорядочивание узлов с учетом памяти оценивает зависимости данных по топологическим сортировкам графа, чтобы планировать независимые операции в порядке, который минимизирует пиковый объем живых тензоров. Переупорядочивание узлов гарантирует, что промежуточные активации своевременно потребляются и освобождаются, не давая давлению на память вынуждать выгрузку в память хоста.
Компиляторы XLA, TVM, TensorRT и MLIR выполняют эти переписывания через правила сопоставления шаблонов и насыщение равенств. Устраняя ненужные обращения к памяти туда и обратно и раскрывая крупнозернистый параллелизм, оптимизация графа производит граф выполнения, который согласуется с ограничениями пропускной способности ускорителя. После того как граф перестроен в оптимизированные составные операции, компилятор должен связать каждый узел с конкретной аппаратно-специфичной процедурой выполнения.
Выбор ядер
Выбор ядра связывает каждый узел оптимизированного графа с конкретной аппаратной реализацией. Ускорители предоставляют десятки допустимых реализаций ядер для одной тензорной операции, каждая из которых параметризуется размерами тайлов, конфигурацией блоков потоков, шаблонами разбиения на память и целевой точностью. Выбор оптимального ядра определяет, достигает ли движок выполнения высокой загрузки вычислений или простаивает на несогласованных обращениях к памяти и пузырях конвейера (Chen et al., 2018); (Zheng et al., 2020).
В большинстве промышленных конвейеров компиляторы берут реализации из библиотек ядер, оптимизированных вендорами, а не синтезируют ядра с нуля. cuDNN и cuBLAS от NVIDIA предоставляют подобранные вручную подпрограммы для GPU, oneDNN от Intel ориентирована на архитектуры x86, Arm Compute Library (ACL) — на процессоры Arm, а BLIS дает оптимизированные примитивы матричных вычислений для CPU. Эти библиотеки кодируют детали микроархитектуры, такие как емкость регистрового файла, задержку иерархии кэшей и ширину векторных линий, позволяя компилятору вызывать заранее настроенные реализации.
Компиляторы ИИ используют три основные стратегии для выбора среди кандидатных ядер:
Выбор на основе правил опирается на статические эвристики40, которые отображают операторы по формам тензоров, типам данных и целевым платформам. Например, XLA выбирает реализации GEMM с поддержкой тензорных ядер на GPU NVIDIA, когда размерности матриц кратны 8 или 16, а точность установлена в FP16 или BF16. Эвристики не требуют накладных расходов времени компиляции, хотя могут пропустить неочевидные оптимальные конфигурации на нерегулярных формах тензоров.
Выбор на основе модели стоимости оценивает задержку выполнения ядра и трафик памяти с помощью аналитических моделей архитектуры аппаратуры. Фреймворки вроде MLIR предоставляют инфраструктуру для моделей стоимости, которые предсказывают давление на регистры, долю попаданий в кэш и арифметическую интенсивность в пространстве параметров, отсекая неперспективные кандидаты без запуска физических бенчмарков (Lattner et al., 2020).
Выбор, управляемый профилированием, оценивает кандидатные ядра эмпирически на целевой аппаратуре. Системы TVM AutoTVM и Ansor измеряют задержку выполнения непосредственно на ускорителе, перебирая размеры тайлов, коэффициенты разворачивания циклов и конфигурации потоков с помощью статистического поиска, чтобы сойтись к самой быстрой реализации (Chen et al., 2018); (Zheng et al., 2020). Аналогично TensorRT строит аппаратно-специфичные движки выполнения, сравнивая варианты тактик непосредственно с целевыми размерами батчей и ограничениями памяти.
Выбор с учетом точности интегрирует численные требования в процесс выбора. Обучение требует FP32 или BF16, чтобы сохранять численную устойчивость при накоплении градиентов, тогда как конвейеры вывода используют FP16 или INT8, чтобы максимизировать арифметическую пропускную способность и вдвое сократить трафик памяти. Ошибка выбора здесь влияет и на корректность, и на скорость: направление некалиброванной модели на ядро INT8 ухудшает точность модели, тогда как выбор FP32 по умолчанию оставляет движки тензорных ядер недозагруженными.
Когда ядра выбраны, планирование памяти и планирование вычислений определяют точные выделения буферов, последовательности запусков и параллельность потоков.
Планирование памяти
Планирование памяти назначает физические места хранения, смещения буферов и времена жизни тензоров по иерархии памяти ускорителя (Roesch et al., 2018); (Chen et al., 2018). Высокопроизводительные планы выполнения терпят неудачу, если управление памятью вносит несогласованные транзакции памяти, конфликты банков или ненужные выделения, которые исчерпывают память ускорителя.
Компилятор координирует три основных механизма управления памятью.
Оптимизация раскладки тензоров определяет физическое расположение измерений тензора в памяти. Разные аппаратные архитектуры и вычислительные движки требуют конкретных раскладок памяти, чтобы обеспечить объединенный доступ к глобальной памяти и векторизацию («Эффективные по памяти раскладки тензоров»). Например, тензорные ядра NVIDIA достигают пиковой пропускной способности с раскладкой channels-last NHWC для сверток FP16 и INT8, где измерения каналов совпадают с 16-байтными транзакциями памяти, тогда как устаревшие CUDA-ядра FP32 исторически предпочитали channels-first NCHW (NVIDIA Corporation, 2021); (Google, 2025). Компиляторы выполняют назначение раскладок глобально по всему графу, чтобы не допустить последовательных ядер преобразования раскладки, которые расходуют пропускную способность памяти.
Анализ живости и повторное использование буферов предотвращают ошибки нехватки памяти, разделяя физическую память между неперекрывающимися тензорами. Глубокие нейронные сети порождают десятки промежуточных тензоров активаций во время прямого распространения. Выделение уникального буфера памяти для каждого тензора быстро превысило бы емкость памяти устройства (например, 16–80 ГБ на типичных ускорителях-GPU). Компилятор анализирует граф, чтобы вычислить интервал живости каждого тензора — от его создания до завершения последнего потребителя. Моделируя выделение памяти как задачу раскраски графа интервалов или двумерной упаковки в контейнеры, компилятор назначает несколько неперекрывающихся промежуточных тензоров на одни и те же физические смещения памяти (Roesch et al., 2018). Такое статическое повторное использование снижает требования к пиковой памяти устройства до размера рабочего набора одновременно активных тензоров, избегая накладных расходов на выделение во время выполнения и фрагментации.
Размещение в иерархии памяти оптимизирует подготовку данных между внешней памятью (HBM или GDDR) и scratchpad-памятью на кристалле (SRAM или разделяемой памятью). Пропускная способность внешней памяти — дефицитный ресурс; перемещение промежуточных тайлов туда и обратно по шине памяти создает остановки, ограниченные памятью. Компиляторы синтезируют параметры тайлинга, которые гарантируют, что промежуточные блоки остаются резидентными в SRAM на кристалле до завершения всех локальных вычислительных операций, минимизируя трафик туда и обратно по шине памяти.
Когда раскладки памяти зафиксированы и адреса буферов назначены, компилятор планирует выполнение операций на аппаратных вычислительных ресурсах.
Планирование вычислений
Планирование вычислений определяет временную шкалу выполнения и привязку аппаратных ресурсов для операций в скомпилированном графе (Zheng et al., 2020). Современные ускорители имеют глубокие аппаратные конвейеры, несколько независимых вычислительных движков и выделенные движки копирования DMA. Эффективное планирование координирует эти ресурсы, чтобы максимизировать заполненность аппаратуры, сохранить зависимости данных и предотвратить остановки конвейера (Chen et al., 2018).
Реализация в ИИ-компиляторах
Компиляторы реализуют планирование по трем различным архитектурным измерениям.
Разбиение задач отображает вычислительные подграфы на исполнительные блоки целевой платформы. На GPU вычисления разбиваются на сетки блоков потоков, распределяемых по потоковым мультипроцессорам (SM). На TPU умножения матриц разбиваются на последовательности тайлов, согласованные с физическими размерами систолических массивов (например, или процессорных элементов) (Norrie et al., 2021). На CPU задачи разделяются на пулы потоков, соответствующих физическим ядрам, и векторизуются, чтобы заполнять регистры SIMD.
Порядок выполнения разрешает зависимости, одновременно минимизируя давление живой памяти. Операции, которые зависят от предыдущих результатов, должны ждать завершения ядер-производителей, но независимые ветви — например, проекции голов многоголового внимания или параллельные остаточные пути — могут выполняться одновременно или чередоваться, чтобы поддерживать равномерную загрузку вычислений. Компиляторы анализируют граф зависимостей, чтобы планировать операции в порядке, который поддерживает конвейеры вычислений заполненными, одновременно сокращая времена жизни активаций и предотвращая раздувание буферов.
Асинхронное перекрытие скрывает задержку памяти, выполняя передачи данных одновременно с вычислительными ядрами. Ускорители имеют выделенные движки DMA, которые работают независимо от арифметических конвейеров. Компиляторы используют это архитектурное разделение, планируя передачи памяти (например, веса от хоста к устройству или обмены «гало» между ускорителями) в отдельных аппаратных очередях или потоках CUDA, перекрывая задержку передачи с длительными вычислительными операциями (Chen et al., 2018); (NVIDIA, 2024). Когда вычисления и передачи полностью перекрываются, стоимость перемещения данных скрывается за арифметическим выполнением.
Плохое планирование создает пузыри выполнения, в которых арифметические блоки простаивают, ожидая выдачи ядер или последовательных копирований данных. Синхронизация ядер через явные события, которые генерирует компилятор, и расписания потоков обеспечивает устойчивое выполнение аппаратуры без вмешательства драйвера CPU (NVIDIA, 2024); (Zheng et al., 2020).
Генерация кода
После завершения планирования последний этап компиляции переводит расписанный план выполнения в машинные инструкции, специфичные для целевой платформы. Генерация кода применяет традиционные проходы бэкенд-компилятора — выбор инструкций, распределение регистров, планирование инструкций и локальную оптимизацию (peephole) — адаптированные под архитектуры ускорителей.
Решающим является то, что выбор инструкций для целей ML должен выдавать инструкции, которые напрямую задействуют специализированные расширения матричного ISA. На GPU NVIDIA генераторы кода выдают инструкции PTX, например mma.sync.aligned, чтобы напрямую вызвать тензорные ядра, как показано в «Операция тензорного ядра». На CPU Intel с Advanced Matrix Extensions (AMX) бэкенд нацелен на инструкции тайлового умножения, работающие с двумерными регистровыми тайлами. На архитектурах Arm с Scalable Matrix Extension (SME) целью является накопление внешних произведений по масштабируемым векторным тайлам. Бэкенд, который выдает общие инструкции векторной арифметики с плавающей точкой вместо этих матричных расширений, оставляет основные вычислительные движки неиспользованными и снижает эффективную пропускную способность на порядок.
Для CPU и GPU компиляторы выдают машинный код или оптимизированный ассемблер; для TPU, программируемых пользователем вентильных матриц (FPGA)41 и проприетарных NPU результатом часто становится оптимизированный байт-код или бинарный пакет выполнения, который запускается специализированной аппаратной средой выполнения.
От компиляции к среде выполнения
Компилятор преобразует высокоуровневую модель в план выполнения, адаптированный под целевую аппаратуру, однако этот план содержит статические допущения о условиях выполнения: формах тензоров, пределах выделения рабочей памяти, возможностях устройства и параллелизме выполнения. Компиляция заранее (AOT) оптимизирует структуры графа, границы слияния и раскладки памяти для фиксированных форм и известных конфигураций аппаратуры. Хотя компиляция «точно в срок» (JIT) может динамически компилировать специализированные варианты по мере поступления новых форм, каждое скомпилированное ядро все равно выполняется по фиксированному плану.
Однако промышленные среды обслуживания ИИ работают в динамических условиях, которые отличаются от статических допущений компилятора. Интенсивность поступления запросов колеблется, размеры батчей меняются динамически, несколько нагрузок вывода конкурируют за общую память ускорителя, а тепловой троттлинг может снижать тактовые частоты ниже номинальных значений. Среды выполнения обслуживания управляют этими колебаниями через динамический батчинг запросов, конкурентность по нескольким потокам, контроль допуска и выбор движка выполнения, а не пересчитывают на лету стратегии слияния ядер или тайлинга. Глава «Обслуживание моделей» рассматривает динамический батчинг, контроль допуска и цели уровня обслуживания как задачи системного инжиниринга; непосредственная системная задача — как среда выполнения ускорителя эффективно запускает скомпилированные планы выполнения, когда батч достигает аппаратуры.
Поддержка среды выполнения
Среда выполнения ИИ соединяет статическую компиляцию графов с динамическими реалиями выполнения на ускорителе. Компиляторы оптимизируют и понижают вычислительные графы при фиксированных структурных допущениях, но в промышленных системах встречаются переменные размеры батчей, колеблющиеся длины последовательностей и ограниченные бюджеты памяти. Среда выполнения запускает скомпилированные движки, одновременно управляя формами тензоров, зависящими от входа, выделениями scratchpad-памяти, асинхронными аппаратными потоками и предварительно скомпилированными профилями выполнения. В промышленных стеках вывода, таких как NVIDIA TensorRT, офлайн-построитель оптимизирует сеть и сравнивает тактики-кандидаты, чтобы построить движок выполнения, а движок среды выполнения связывает входные буферы, выбирает допустимые профили оптимизации и отправляет ядра на ускоритель (NVIDIA Corporation, 2026).
Этот жизненный цикл выполнения охватывает три основные обязанности. Во-первых, среда выполнения выбирает и отправляет предварительно скомпилированные варианты ядер, соответствующие размерностям тензоров во время выполнения и возможностям аппаратуры. Во-вторых, она управляет памятью устройства через арена-аллокаторы и статическое повторное использование буферов, устраняя дорогую синхронизацию хоста и устройства во время выполнения. В-третьих, в распределенных средах фреймворки выполнения координируют границы выполнения между устройствами, как показано в фреймворках конвейерного параллелизма, таких как GPipe (Huang et al., 2019), и системах автоматического размещения по устройствам (Mirhoseini et al., 2017). Пока планировщики обслуживания управляют батчингом запросов и контролем допуска в кластерах, среда выполнения ускорителя управляет локальным выполнением на устройстве.
Сравнение сред выполнения ИИ с традиционными средами программного выполнения проясняет, почему нагрузкам машинного обучения нужны специализированные стратегии выполнения.
Архитектура среды выполнения ML
Среды выполнения общего назначения управляют потоками, вытесняющими задачами, выделениями в куче и асинхронным вводом-выводом по произвольным путям управления. Напротив, среда выполнения ИИ работает над графами потоков данных, составленными из многомерных тензоров, заранее расписанных сеток ядер, арен памяти устройства и аппаратных очередей команд.
Архитектурные различия между традиционными программными средами выполнения и средами ИИ сопоставлены в «Модели выполнения среды выполнения».
| Аспект | Традиционная среда выполнения | Среда выполнения ИИ |
|---|---|---|
| Модель выполнения | Функции, потоки, задачи, события и асинхронный ввод-вывод | Тензорные графы, ядра, потоки и события устройства |
| Планирование задач | Потоки и задачи по ресурсам процессора | Диспетчеризация ядер и передач с учетом зависимостей |
| Управление памятью | Объекты, стеки, кучи, пулы и виртуальная память | Тензорные буферы, рабочие области, память устройства и повторное использование буферов |
| Приоритеты оптимизации | Отзывчивость, пропускная способность, локальность и совместное использование ресурсов | Совместимость форм, перекрытие передач, повторное использование и загрузка |
| Адаптивность | Динамическое планирование и выделение в рамках семантики программы | Выбор среды выполнения внутри скомпилированных графов и доступных ядер |
| Целевое оборудование | CPU и гетерогенные устройства | CPU, GPU, TPU и заказные ускорители |
Модели выполнения среды выполнения: среды выполнения ИИ добавляют к стандартным службам среды выполнения управление ресурсами, учитывающее тензоры, графы и ускорители. Точная граница между фреймворком, средой выполнения компилятора, библиотекой устройства и планировщиком обслуживания различается в разных стеках.
Управление тензорной памятью представляет основное архитектурное расхождение. В традиционных системах универсальные аллокаторы управляют объектами кучи переменного размера, используя метаданные времени выполнения. На ускорителях ИИ динамические выделения памяти через вызовы драйвера устройства (например, cudaMalloc) вызывают ловушки драйвера хоста, которые останавливают конвейер ускорителя. Среды выполнения ИИ устраняют эти накладные расходы, сочетая офлайн-анализ времени жизни с арена-выделением. Для графов с фиксированными формами компилятор вычисляет статические смещения памяти, отображая неперекрывающиеся промежуточные тензоры на общие физические буферы. Для тензоров переменной формы среда выполнения выделяет память из предварительно выделенных пулов scratchpad, ограничивая пиковый объем памяти без вызовов выделения во время выполнения.
Аппаратные среды выполнения также накладывают физические рабочие границы, которые отличаются от настроек офлайн-бенчмаркинга.
Промышленные среды вводят физические ограничения, которые отличаются от офлайн-бенчмарков. Например, ускоритель NVIDIA A100 SXM работает с максимальным TDP в 400 Вт, тогда как вариант A100 PCIe ограничен рамками 300 Вт TDP. Поскольку устойчивые тактовые частоты масштабируются с доступной мощностью и тепловым рассеянием, ядро, настроенное для модуля SXM, может испытывать тепловой троттлинг или не укладываться в границы задержки на карте PCIe. Среда выполнения не может заново синтезировать структуры циклов или динамически менять размеры блоков потоков в ответ на тепловые ограничения; она должна выполняться в пределах предварительно скомпилированных профилей, пока система обслуживания управляет батчингом запросов и контролем допуска.
Динамическое выполнение ядер
Пока статическая компиляция генерирует высокопроизводительный машинный код для фиксированных форм, промышленный вывод требует выполнения запросов с динамическими размерностями. В языковых моделях длина входной последовательности и размер батча меняются от запроса к запросу. Повторная компиляция вычислительного графа динамически, когда приходит неожиданная форма, непрактична: исследование разворачивания циклов, тайлинга в разделяемой памяти и выделения регистров занимает секунды или минуты, тогда как сроки обслуживания измеряются миллисекундами.
Среды выполнения ИИ решают это несоответствие с помощью предварительно скомпилированных профилей оптимизации. Профиль оптимизации задает допустимые границы размерностей (минимальную, оптимальную и максимальную формы) для динамических осей тензора. Во время построения движка построитель выделяет рабочее пространство scratchpad, рассчитанное на максимальную форму, и выбирает тактики ядер, которые максимизируют арифметическую интенсивность по всему заданному рабочему диапазону. Во время выполнения:
- Когда входящие формы тензоров совпадают с активным профилем, среда выполнения связывает указатели тензоров с предварительно выделенными буферами и запускает соответствующие предварительно скомпилированные ядра без накладных расходов JIT.
- Когда входные размерности выходят за пределы всех скомпилированных профилей, среда выполнения не может синтезировать новые стратегии тайлинга на лету; система обслуживания должна либо дополнить входы до допустимой границы размерности, либо разбить батч, либо направить запрос на более медленное ядро общего назначения в качестве запасного варианта.
Динамическая обработка запросов также нагружает межсоединение «хост–ускоритель». Если входные передачи выполняются синхронно, вычислительные движки ускорителя простаивают во время перемещения данных. Чтобы перекрыть коммуникацию с вычислениями, среда выполнения использует асинхронные потоки и двойную буферизацию. Подготавливая входные тензоры в закрепленной (pinned) памяти хоста, выделенные движки копирования DMA передают батч по PCIe или NVLink одновременно с выполнением батча на ядрах ускорителя. Эта конвейеризация скрывает задержку передачи, если длительность вычислений превышает длительность передачи; если доминирует перемещение памяти, конвейер ускорителя останавливается.
Выбор ядер во время выполнения
В выбранном профиле оптимизации операцию могут выполнять несколько предварительно скомпилированных реализаций ядер, называемых тактиками. Среда выполнения выбирает оптимальную тактику по размерностям тензоров, арифметической интенсивности и доступной памяти scratchpad.
Рабочий размер батча напрямую определяет оптимальную стратегию выполнения. Для малых батчей ( при авторегрессивной генерации токенов) умножение матрицы на вектор ограничено пропускной способностью памяти и имеет низкую арифметическую интенсивность. Среда выполнения выбирает ядра потоковой передачи из памяти (GEMV), оптимизированные под пропускную способность чтения глобальной памяти. Для крупных батчей обработки промпта () нагрузка переходит в вычислительно-ограниченный GEMM. Среда выполнения отправляет тактики, предназначенные для систолических массивов тензорных ядер, используя двумерный регистровый тайлинг и тайлинг в разделяемой памяти, чтобы максимизировать повторное использование данных из SRAM на кристалле.
Доступность рабочей памяти scratchpad дополнительно ограничивает выбор тактики. Когда у GEMM малая выходная размерность, но большая размерность редукции , стандартный тайлинг недозагружает ускоритель, потому что запускается слишком мало блоков потоков, чтобы занять все потоковые мультипроцессоры (SM). В этом режиме построитель предоставляет тактику split-, которая распределяет размерность редукции между отдельными блоками потоков, работающими одновременно на разных SM. Однако выполнение split- требует вспомогательного рабочего буфера в памяти устройства (HBM), чтобы хранить частичные суммы редукции до финального прохода накопления. Если память устройства ограничена параллельными запросами, среда выполнения должна отклонить вариант split- и отправить не-split ядро, жертвуя параллельной заполненностью ради соблюдения предела памяти.
Выбор среды выполнения остается строго ограниченным числовыми форматами, установленными во время компиляции. В системах обучения и вывода в смешанной точности, таких как Megatron-LM, выполнение умножений матриц в FP16 или BF16 на тензорных ядрах с накоплением в FP32 является архитектурным инвариантом, проверяемым до развертывания (Shoeybi et al., 2019). Среда выполнения не отслеживает значения потерь и не меняет точность динамически; она выбирает только среди проверенных тактик, которые реализуют заданную числовую точность.
Планирование ядер и загрузка
Отправка ядер представляет собой заключительный этап выполнения в среде выполнения, который координирует очереди задач на стороне хоста с выполнением на стороне устройства.
Программная среда выполнения управляет очередями команд на стороне хоста (например, потоки CUDA или кольца команд TPU) и записывает аппаратные события или семафоры, чтобы асинхронно выполнять зависимости потоков данных. Когда независимые операции, например параллельные проекции голов многоголового внимания, не имеют взаимных зависимостей данных, среда выполнения отправляет их в отдельные потоки, чтобы обеспечить одновременное выполнение на ускорителе. Однако после передачи в очередь устройства управление выполнением полностью переходит к аппаратным планировщикам. На GPU аппаратный планировщик варпов и движок распределения работы назначают блоки потоков SM на основе доступности регистрового файла, емкости разделяемой памяти и максимальной заполненности варпов; программная среда выполнения не может планировать отдельные потоки или диктовать политики замещения кэша L1/L2. Аналогично, среды выполнения TPU отправляют макроинструкции в очереди команд на кристалле, а аппаратные секвенсоры подают систолические матричные блоки и векторные блоки (Jouppi et al., 2017).
Управление памятью напрямую поддерживает загрузку ускорителя. Вызов выделителей памяти драйвера устройства (например, cudaMalloc) во время выполнения запроса вызывает глобальную синхронизацию устройства, опустошая конвейер выполнения. Среды выполнения ИИ устраняют эту задержку, поддерживая предварительно выделенные арены памяти и статически управляя жизненным циклом тензоров. Промежуточные активации выделяются из памяти scratchpad, причем перекрывающиеся времена жизни отображаются на одинаковые физические адреса, что обеспечивает нулевые накладные расходы на выделение на горячем пути вывода.
Даже при агрессивном слиянии ядер, оптимальном выборе тактик и повторном использовании памяти без выделений емкость выполнения одного ускорителя физически ограничена площадью кремния, пределом теплового рассеивания и емкостью высокоскоростной памяти. Масштабирование за эти физические границы требует распределения вычислений между несколькими ускорителями.
Рассмотрим оценочные операций с плавающей точкой, связанных с обучением GPT-3 (Brown et al., 2020). Для сравнения масштаба разделим это историческое число операций на пиковую скорость FP8 более позднего H100, равную 1,98 PFLOP/s. Нижняя арифметическая граница составляет около 5 лет на одном устройстве, а при иллюстративном диапазоне загрузки 40–60 процентов — 8,4–12,6 года (Choquette, 2023). Это не реконструкция обучения GPT-3: точность, аппаратура, коммуникация и нагрузка здесь контрфактические. Расчет лишь показывает, почему масштаб вычислений модели или объем запросов в сервисе может превышать полезную емкость одного ускорителя.
Масштабирование на несколько кристаллов
Один H100 имеет большой пик FP8, однако цель по времени обучения или пропускной способности все равно может требовать множества ускорителей. Методы, рассмотренные ранее, остаются основой масштабирования на несколько кристаллов: каждому устройству по-прежнему нужен эффективный поток данных. Новый урок состоит в том, что коммуникация добавляет дополнительные границы иерархии. Перемещение данных через хранилище на кристалле, HBM, межсоединение внутри узла и кластерную структуру, как правило, увеличивает задержку и энергетические затраты, поэтому масштабирование — это не просто добавление кристаллов.
Когда емкости одного ускорителя оказывается недостаточно, инженерная задача смещается от питания одного кристалла к выбору границы коммуникации, которую нагрузка может выдержать. Практики сталкиваются с этими границами в промышленной эксплуатации, даже когда большая часть работы по оптимизации остается внутри одного ускорителя.
Подходы к масштабированию на несколько кристаллов
Большие системы ИИ масштабируются за пределы отдельных ускорителей, перенося границу коммуникации наружу, и каждая граница меняет доминирующий компромисс. Последовательность начинается внутри корпуса. Архитектуры на основе чиплетов разбивают большие конструкции на меньшие модульные кристаллы, соединенные внутри одного корпуса; это обходит производственные ограничения монолитных кристаллов и сохраняет относительно низкую задержку коммуникации. Следующая граница — узел: серверы с несколькими ускорителями соединяют несколько чипов межсоединениями на уровне платы или сервера. Каждый ускоритель имеет выделенные ресурсы памяти и вычислений, поэтому нагрузки распределяются через параллелизм данных (каждый ускоритель обрабатывает свои батчи) или параллелизм моделей — либо конвейерный параллелизм, при котором разные ускорители обрабатывают последовательные слои сети, либо тензорный параллелизм, при котором отдельные матричные умножения нарезаются между устройствами внутри доменов высокоскоростных межсоединений. Внутриузловые межсоединения с высокой пропускной способностью могут обеспечивать эффективную синхронизацию градиентов, хотя реальная производительность зависит от топологии и эффективности коллективной коммуникации.
За пределами узла граница расширяется до кластера. Специально построенные структуры дата-центров координируют сотни ускорителей, поэтому топология и алгоритмы коллективной коммуникации становятся центральными факторами эффективности масштабирования; почти линейное масштабирование достижимо на некоторых нагрузках, когда накладные расходы на коммуникацию контролируются. Интеграция на уровне пластины — встречный ход: вместо того чтобы выносить границу наружу, она собирает больше вычислений обратно в одно большое устройство. Платформы класса Cerebras WSE объединяют чрезвычайно большое число транзисторов и ядер на одном устройстве, сокращая накладные расходы межчиповой коммуникации, но при этом создают собственные проблемы с теплоотводом, отказоустойчивостью и выходом годных изделий при производстве.
Почему масштабирование вносит новые ограничения
Переход от одного чипа к нескольким вносит накладные расходы коммуникации и другие ограничения, которые меняют оптимизацию. Коммуникация, синхронизация, балансировка нагрузки и объем параллельной работы на устройство могут ограничивать масштабирование. Закон Амдала42 дает одну модель первого порядка для неперекрытой работы, которая не уменьшается при добавлении устройств. Для моделей со ста миллиардами параметров полная полезная нагрузка градиентов без шардирования может занимать сотни гигабайт за шаг, и AllReduce31 должен ее агрегировать; точность, шардирование, сжатие и алгоритм коллективной операции меняют объем байтов, который передает каждое устройство.
Величина первого порядка — это полезная нагрузка градиентов. Для модели с параметрами эта нагрузка приблизительно равна числу параметров, умноженному на число байтов, хранимых для каждого элемента градиента, до учета состояния оптимизатора, выравнивания и накладных расходов протокола. Масштабирование поэтому улучшается только тогда, когда сэкономленное время вычислений превышает время передачи этой нагрузки через выбранное межсоединение и алгоритм коллективной операции.
Эти накладные расходы объясняют, почему большое число ускорителей может давать убывающую отдачу, если система не сокращает обмениваемые данные, не перекрывает коммуникацию с полезными вычислениями или не выбирает лучший шаблон распараллеливания. Меняется и модель памяти: отдельные памяти ускорителей обычно управляются явно, а коллективные операции задают нужную синхронизацию, а не предоставляют единое полностью когерентное пространство памяти для всего кластера. Когерентные связи есть в некоторых системах, но их охват и стоимость зависят от архитектуры.
Когда вычисления охватывают много связей, чипов и стеков памяти, надежность и энергия становятся частью той же истории масштабирования. Крупные системы должны корректно переживать отказы компонентов, потому что вероятность хотя бы одного отказа растет с размером системы. Архитектурный принцип фундаментален: распределенные системы TPU должны переносить отказы компонентов на системном масштабе (Jouppi et al., 2023), тогда как Cerebras использует избыточные ядра и связи структуры, чтобы заменять ядра с производственным браком и восстанавливать логическую сетку пластины (Lie, 2021). Перемещение данных также дорожает с расстоянием, превращая распределенное обучение в тщательный баланс между параллелизмом вычислений и эффективностью коммуникации.
Масштабирование в дата-центре и развертывание на периферии представляют противоположные концы спектра развертываний, однако разделяют одни и те же основные принципы. Масштабирование в дата-центре координирует множество высокопроизводительных ускорителей, тогда как периферийное масштабирование укладывает полезный ИИ в несколько ограниченных ватт. Оба случая требуют согласования характеристик нагрузки с возможностями аппаратуры при минимизации перемещения данных. Принципы специализации вычислений, оптимизации иерархии памяти и отображения нагрузки применяются на обоих масштабах; различаются только ограничения. Дата-центры оптимизируют совокупную пропускную способность в рамках бюджетов мощности, измеряемых в мегаваттах; периферийные устройства оптимизируют отзывчивость в жестких границах батареи и тепла. Одна и та же модель зрения, которая комфортно работает в дата-центре, может требовать принципиально иной стратегии отображения на смартфоне или микроконтроллере.
Проектирование гетерогенных SoC
Периферийные, мобильные и автомобильные развертывания работают в жестких физических ограничениях: запечатанные корпуса без активного охлаждения ограничивают тепловыделение несколькими ваттами, а емкость батареи ограничивает общее энергопотребление. Чтобы обеспечивать возможности машинного обучения в этих границах, гетерогенные архитектуры SoC объединяют на одном кремниевом кристалле ядра CPU общего назначения, шейдерные массивы GPU, цифровые сигнальные процессоры (DSP) и специализированные нейронные процессоры (NPU) с общей подсистемой памяти. Задача отображения нагрузки, введенная для дискретных ускорителей, сохраняется, но расширяется: к ней добавляются покрытие аппаратных операторов, накладные расходы передач между движками, сроки реального времени и динамический тепловой троттлинг.
Эволюция архитектуры мобильных SoC
Архитектуры мобильных систем на кристалле реализуют гетерогенные вычисления, связывая различные движки выполнения — многоядерные CPU, широкие ядра шейдеров SIMD GPU, DSP с фиксированной точкой и выделенные нейронные процессоры (NPU)43 — через внутрикристальную сеть, подключенную к общей маломощной DRAM (LPDDR). Распределение работы направляет сенсорные и перцептивные задачи на вычислительный движок, лучше всего соответствующий их арифметической структуре: непрерывное извлечение аудиопризнаков и распознавание ключевых слов работают на маломощных DSP, плотные слои свертки и умножения матриц выполняются на систолических или тензорных массивах NPU, параллельная графика и постобработка изображений отображаются на GPU, а последовательный поток управления выполняется на CPU. Чтобы уложиться в сроки кадров реального времени, не вызывая агрессивного теплового троттлинга, нужно планировать выполнение по этим движкам с учетом их различных профилей мощности.
Гетерогенные микроконтроллеры
Сценарий: встроенный умный дверной звонок должен выполнять периодическое распознавание человека в жестких бюджетах памяти, энергии и задержки.
Диагностика: на поддерживаемом развертывании путь общего назначения на Cortex-M не укладывается в измеренную цель по энергии или задержке. Микро-NPU, например Arm Ethos-U, может разгружать совместимые операторы свертки, тогда как CPU сохраняет управление потоком и неподдерживаемые операции.
Системный урок: специализация микро-NPU может улучшить энергию и задержку поддерживаемых операторов, но осуществимость нужно измерять для всего конвейера, включая запасные пути и обработку сенсоров.
Современные мобильные SoC используют архитектуры с унифицированной памятью, в которых все вычислительные блоки делят общее физическое адресное пространство в LPDDR. В отличие от дискретных архитектур ускорителей, которые несут явные задержки передач по PCIe, унифицированная память позволяет передавать буферы без копирования между процессором обработки изображений (ISP), CPU, GPU и NPU. Однако совместное использование физической DRAM не гарантирует нулевых программных накладных расходов. Если движок NPU не имеет аппаратного отслеживания кэша (snooping), передача промежуточного тензора от CPU требует явного сброса и инвалидации кэша. Кроме того, специализированные NPU часто требуют аппаратно-специфичных раскладок тензоров — например, channels-last (NHWC) с выравниванием каналов по 16 или 32 байта, чтобы питать линии векторных регистров, — что приводит к транспонированиям, ограниченным памятью, при взаимодействии со слоями CPU в формате channels-first (NCHW).
Архитекторы SoC настраивают вычислительные блоки под физические ограничения конкретной области. Смартфонные SoC высокого класса делают упор на пиковую импульсную производительность и низкие токи утечки в простое для интерактивных задач, таких как вычислительная фотография в реальном времени и генерация текста на устройстве. Напротив, встроенные и автомобильные SoC ставят приоритетом детерминированный доступ к памяти, аппаратное обнаружение неисправностей и ограниченную задержку в худшем случае, чтобы удовлетворять ограничениям управления в реальном времени.
Стратегии динамического распределения нагрузки
Распределение нейросетевых нагрузок по ядрам гетерогенного SoC требует сопоставления арифметической интенсивности и регулярности памяти каждого оператора вычислительного графа с микроархитектурой, лучше всего приспособленной для его выполнения. Рассмотрим конвейер обнаружения объектов в реальном времени, работающий на мобильном SoC со встроенными CPU, GPU и NPU. Конвейер состоит из трех последовательных этапов: магистраль MobileNet для извлечения признаков, подавление не-максимумов (NMS) для постобработки кандидатных ограничивающих рамок и наложение изображения на экран, чтобы вывести итоговые детекции поверх видеопотока с камеры. Сверточная магистраль демонстрирует регулярный детерминированный доступ к памяти и плотную арифметику, подходящую для фиксированного тензорного движка NPU, хотя раздельные по глубине слои имеют меньшую арифметическую интенсивность, чем стандартные свертки. NMS, напротив, опирается на сортировку по оценкам и условные циклы пересечения над объединением, вычисляемые по кандидатным спискам переменной длины. Этот нерегулярный поток управления с большим числом ветвлений плохо отображается на пространственный массив NPU, но эффективно выполняется на внеочередных ядрах CPU с предсказанием ветвлений и аппаратным кэшированием. Наконец, наложение на экран требует растеризации по пикселям и альфа-смешивания по кадру высокого разрешения — это задача, легко распараллеливаемая и ограниченная пропускной способностью памяти, которая напрямую отображается на растеризаторы и текстурные блоки GPU. Разбиение конвейера по трем движкам — NPU для извлечения признаков, CPU для NMS и GPU для композиции экрана — минимизирует сквозную задержку и общее энергопотребление по сравнению с выполнением всего конвейера на любом отдельном процессоре.
Такое разбиение конвейера отражает более широкую связь между алгоритмическими структурами и архитектурами машин. Регулярные матричные произведения и свертки аккуратно отображаются на систолические или векторизованные пути данных NPU, тогда как зависящий от данных поток управления отображается на ресурсы выполнения CPU. Слои внимания трансформера охватывают обе парадигмы: проекционные GEMM () и матричные произведения оценок внимания ( и ) эффективно выполняются на матричных блоках NPU, но промежуточные редукции softmax, каузальное маскирование и нормализации слоя включают поэлементные операции. Если среда выполнения NPU не может слить эти поэлементные операции в scratchpad-память SRAM на кристалле, промежуточные тензоры должны выгружаться в LPDDR, что съедает преимущество ускорителя в пропускной способности.
Оптимальное назначение процессоров динамично, а не статично. Когда тепловые условия устройства ухудшаются или запас батареи падает, среда выполнения должна адаптировать свою политику планирования. Однако перенос выполняющейся модели между бэкендами процессоров несет нетривиальные накладные расходы: веса нужно заново связать в памяти, промежуточные буферы могут требовать переформатирования раскладки, а драйверы устройств добавляют задержку отправки ядер. Если накладные расходы на синхронизацию состояния между процессорами превышают экономию вычислений от разгрузки, сохранение выполнения на одном неоптимальном движке может дать меньшую общую задержку и энергию, чем непрерывная миграция между движками.
Общие подсистемы памяти вносят взаимные помехи между движками при одновременном выполнении. Поскольку CPU, GPU, NPU, ISP камеры и движок дисплея делят одну шину памяти LPDDR, контроллер памяти SoC обеспечивает приоритеты качества обслуживания (QoS), чтобы удовлетворять аппаратным срокам реального времени. Движку дисплея и ISP камеры нужна гарантированная пропускная способность памяти и ограниченная задержка, чтобы предотвратить мерцание экрана и переполнение FIFO сенсора; поэтому контроллер памяти отдает приоритет транзакциям дисплея и камеры перед трафиком NPU и GPU. Во время фаз, интенсивных по памяти, — например, авторегрессивного декодирования языковой модели, где веса модели должны читаться из DRAM для каждого сгенерированного токена, — высокоприоритетный трафик ISP или дисплея снижает эффективную пропускную способность памяти NPU и увеличивает задержку генерации токенов.
Управление мощностью и теплом
Мобильные устройства без вентилятора работают в строгих непрерывных бюджетах мощности и тепловых границах, обычно рассеивая не более 3–5 Вт в устойчивом режиме по всему корпусу, прежде чем температура поверхности превысит безопасные пороги. Хотя кратковременные всплески могут потреблять 10–15 Вт, непрерывный вывод быстро исчерпывает тепловую емкость устройства, нагревая кремниевый переход и требуя активного управления мощностью по всему SoC.
Гетерогенные SoC управляют мощностью отдельных кремниевых разделов с помощью динамического изменения напряжения и частоты (DVFS). Поскольку динамическая мощность масштабируется квадратично с напряжением питания и линейно с рабочей частотой (), снижение тактовой частоты позволяет понизить напряжение ядра и получить существенное сокращение мощности. В гетерогенном SoC кластеры CPU, ядра шейдеров GPU и движки NPU занимают отдельные домены мощности и напряжения. Повышение напряжения и частоты NPU, чтобы уложиться в жесткий срок задержки, потребляет электрический ток и тепловой запас, которые иначе были бы доступны CPU или GPU. Системные регуляторы мощности непрерывно корректируют эти рабочие точки на основе очередей нагрузки, показаний датчиков температуры и целевых сроков кадров.
Когда устойчивые вычисления превышают скорость рассеивания корпуса, платформа запускает тепловой троттлинг. Поскольку специализированные NPU достигают более высокой энергоэффективности (TOPS/Вт) для тензорной математики, чем универсальные ядра, перенос матричных нагрузок на CPU или GPU во время теплового события часто увеличивает общее тепловыделение и усиливает тепловое накопление. Вместо этого среды выполнения управляют тепловыми пределами, ограничивая тактовые частоты, снижая частоту запусков вывода (например, уменьшая частоту модели восприятия с 30 до 15 кадров в секунду) или переключаясь на меньшую, прореженную контрольную точку модели. Миграция задач применяется выборочно, чтобы переносить нетензорную предобработку с локальных горячих точек кремния на кристалле.
Состояние батареи также влияет на планирование выполнения. Когда заряд батареи падает ниже критических порогов или устройство переходит в режим низкого энергопотребления, системный планировщик обменивает точность вывода на время работы батареи: квантует операции до меньших разрядностей (например, переход от 16-битной плавающей точки к 8-битному целому), повышает разреженность выполнения или объединяет асинхронные запросы вывода в батчи, чтобы максимизировать время, которое ядра проводят в глубоких состояниях сна с низким энергопотреблением.
Гетерогенные ИИ-системы автомобилей
Автомобильные вычислительные платформы работают по двойному мандату: они должны обеспечивать сотни тера-операций в секунду (TOPS) для восприятия с нескольких камер и слияния сенсорных данных, одновременно удовлетворяя строгим стандартам функциональной безопасности (например, ISO 26262). В отличие от мобильных систем, где тепловой троттлинг плавно ухудшает пользовательский опыт, автомобильные системы работают при жестких сроках реального времени, и пропуск срока кадра может поставить под угрозу управление автомобилем. Однако не все бортовые ИИ-нагрузки требуют самого высокого уровня безопасности: модели инфотейнмента и комфорта водителя делят вычислительные платформы с критичными к безопасности конвейерами восприятия.
Чтобы поддерживать такое выполнение со смешанной критичностью, автомобильные SoC обеспечивают свободу от взаимного влияния между критичными к безопасности нагрузками (например, автоматическим экстренным торможением) и некритичными приложениями (например, голосовыми помощниками салона). Аппаратно обеспеченная виртуализация, блоки управления памятью ввода-вывода (IOMMU) и резервирование полосы пропускной способности шины памяти изолируют вычислительные ядра и каналы LPDDR. Без резервирования пропускной способности непроверенная модель удобства, потоково читающая веса из DRAM, могла бы насытить каналы памяти и задержать доставку кадра сертифицированному ядру восприятия экстренных ситуаций с сертифицированным временем выполнения в худшем случае (WCET). Операционные системы реального времени планируют критичные конвейеры нейросетей диспетчеризацией по времени, а не очередями приоритета по средней пропускной способности.
Автомобильные архитектуры также решают задачу сквозной задержки в распределенных и централизованных топологиях сенсоров. Автономные платформы одновременно получают высокопропускные потоки данных с камер высокого разрешения, автомобильного радара и лидара. Прием, упаковка и передача этих данных по автомобильному Ethernet (например, 10GBASE-T1) или последовательным линиям десериализатора (SerDes) вносят задержку передачи и джиттер. Алгоритмы слияния сенсоров требуют потоков данных с аппаратными временными метками, синхронизированных по общим микросекундным часам (через IEEE 802.1AS). Ускорители не могут начать межсенсорное слияние, пока не придет самый медленный кадр сенсора во временном окне, поэтому выравнивание сенсоров, накладные расходы сериализации и задержки DMA-приема должны учитываться в бюджете наряду со временем вывода нейросети.
Внешние входы «автомобиль–все» (V2X) вносят недетерминированные задержки связи и переменную скорость доставки пакетов. Поскольку беспроводные сигналы подвержены потере пакетов, многолучевому затуханию и враждебной подмене, критичные к безопасности алгоритмы восприятия не могут рассматривать входы V2X как синхронные потоки сенсоров. Вместо этого конвейеры планирования включают полезную нагрузку V2X как асинхронные контекстные подсказки, ограничивая их влияние, чтобы безопасность автомобиля оставалась гарантированной бортовыми детерминированными сенсорами.
Проблемы программного стека
Гетерогенность переносит основную системную задачу из проектирования кремния в координацию программного обеспечения. Стандартные модели программирования, такие как OpenCL и Vulkan, предоставляют переносимые низкоуровневые абстракции выполнения для вычислительных устройств, но не устраняют необходимость настройки ядер под микроархитектуру. Среды выполнения вывода машинного обучения разбивают вычислительные графы через аппаратно-специфичные делегаты или бэкенды, нацеленные на CPU, GPU, DSP и NPU. Когда модель содержит оператор, не поддерживаемый делегатом NPU, — например, заказную активацию, динамическую форму тензора или нестандартную редукцию, — среда выполнения разбивает граф на подграфы, вставляя запасные пути на CPU или GPU. Каждое пересечение границы требует синхронизации выполнения и преобразования представлений данных, превращая алгоритмический граф во фрагментированную последовательность аппаратных отправок.
Общие подсистемы памяти требуют явного управления кэшем и памятью в некогерентных доменах выполнения. Хотя CPU поддерживают когерентность кэшей между собственными ядрами через аппаратные протоколы отслеживания, мобильные NPU и DSP часто обращаются к системной памяти как некогерентные ведущие устройства шины DMA. Когда CPU записывает входные тензоры в кэшируемую DRAM и передает управление NPU, программное обеспечение должно явно сбросить «грязные» строки кэша CPU в DRAM до начала выполнения на NPU. Аналогично, по завершении работы NPU CPU должен инвалидировать свои строки кэша в диапазоне памяти назначения, чтобы не прочитать устаревшие кэшированные данные. Если неподдерживаемые операторы заставляют граф вывода многократно перебрасываться между CPU и NPU, задержка обслуживания кэша и промежуточные обращения к DRAM туда и обратно могут превысить время выполнения самих операторов.
Среды выполнения справляются с этой сложностью планирования с помощью компиляции заранее, баз профилей, полученных эмпирически, и эвристик динамической диспетчеризации. Телеметрия устройства — мониторинг времени завершения кадров, температуры ядер и разряда батареи — информирует решения среды выполнения о тактовом троттлинге или замене делегатов выполнения. Однако динамическая адаптация не может заменить детерминированное понижение графа для чувствительных к задержке приложений; развертывание требует проверки скомпилированного раздела после понижения уровня на физическом целевом кремнии в худших тепловых условиях и при конкуренции за память.
Гетерогенное ускорение показывает, что эффективность системы — это по существу задача координации, а не перечень специализированных исполнительных блоков. В таксономии D·A·M SoC представляет собой составной слой «Машина», компоненты которого имеют разные иерархии памяти, арифметические сильные стороны и тепловые границы. Железный закон ML-систем диктует, что общее время выполнения и энергопотребление определяются перемещением данных: когда программная координация не может сохранить локальность тензоров или вызывает частые откаты между движками, в энергетических потерях доминирует трафик межсоединений и DRAM, а не арифметика. Максимизация производительности на гетерогенных SoC требует сокращения перемещения данных через границы доменов при сопоставлении каждой алгоритмической операции со специализированным трактом данных, созданным для ее ускорения.
Экологичность аппаратуры
В масштабе парка энергия на полезный вывод становится важным критерием выбора аппаратуры. Эксплуатационные выбросы зависят от пропускной способности нагрузки, измеренной мощности системы, загрузки, накладных расходов на охлаждение и структуры электроэнергии; встроенные выбросы добавляют еще одну составляющую жизненного цикла. Поэтому пиковая производительность на ватт — это показатель предварительного отбора, а не замена сквозной энергии на запрос. Следующий сценарий показывает, как допущения накапливаются при сравнении парка универсальных CPU со специализированными ускорителями.
Иллюстративное сравнение операционной энергии
Задача: при заданном допущении об эквивалентности пропускной способности, как меняется операционная энергия, когда парк CPU заменяют специализированными NPU (нейронными процессорами)?
Допущения: это упрощенное сравнение принимает перечисленные пиковые значения за полезную пропускную способность нагрузки, допускает, что оба парка работают непрерывно на указанной мощности, и не учитывает мощность хоста, охлаждение, встроенный углерод и различия в загрузке. Это расчет чувствительности, а не измеренный результат закупки.
- Вывод на CPU: 100 Вт при 1 TFLOP/s (эффективность 0,01 TFLOP/s/Вт).
- Вывод на NPU: 5 Вт при 10 TFLOP/s (эффективность 2 TFLOP/s/Вт).
- Предполагаемый разрыв пиковой эффективности: в 200 раз.
Расчет:
- Нагрузка: 1 млрд выводов в день.
- Энергия парка CPU: 1 000 серверов CPU × 100 Вт × 24 ч ≈ 2 400 кВт·ч в сутки.
- Энергия парка NPU: 100 чипов NPU × 5 Вт × 24 ч ≈ 12 кВт·ч в сутки.
- Экономия углерода: при 0,429 кг/кВт·ч переход на NPU сокращает выбросы примерно на 373,9 т CO₂ в год.
Системный вывод: специализированные ускорители могут снизить операционную энергию, когда нагрузка использует их эффективный путь и для обеспечения нужной пропускной способности сервиса требуется меньше устройств. Прежде чем использовать результат для закупки или учета углерода, замените эти допущения измеренными запросами в секунду и мощностью по стене.
Перспектива устойчивости подкрепляет центральную тему: выбор аппаратуры определяется не только пиковой скоростью. Энергия на полезный результат, углеродоемкость, встроенное воздействие и совокупная стоимость владения должны стоять рядом с задержкой, пропускной способностью и емкостью памяти. Следующий шаг — выявить заблуждения, которые приводят команды к выбору неверного пути аппаратного обеспечения.
Заблуждения и ловушки
Аппаратное ускорение демонстрирует контринтуитивные характеристики производительности, потому что заголовочные спецификации часто скрывают узкие места, специфичные для нагрузки. Заблуждения и ловушки здесь фиксируют ошибки выбора, масштабирования и оптимизации, которые оставляют дорогие вычислительные ресурсы недозагруженными.
Заблуждение и ловушка
Заблуждение: более специализированная аппаратура всегда дает лучшую производительность, чем универсальные альтернативы.
Специализированные ускорители достигают высокой эффективности только тогда, когда шаблоны доступа нагрузки совпадают с лежащими в основе путями выполнения данных: это центральный принцип совместного проектирования алгоритма и машины. В модели Roofline («Модель Roofline») операция должна превысить точку перехода аппаратуры, чтобы стать вычислительно-ограниченной. У GPU A100 точка перехода составляет 153 FLOP/байт, то есть операции с арифметической интенсивностью ниже этого порога остаются ограниченными памятью, каким бы ни был пиковый показатель чипа в 312 TFLOP/s. Softmax внимания трансформера с арифметической интенсивностью от 2 до 5 FLOP/байт достигает на A100 лишь от 4,1 до 10,2 TFLOP/s (загрузка не более 3,3 процента). CPU с точками перехода около 10–20 FLOP/байт также выполняют это ядро в режиме, ограниченном памятью, но та же арифметическая интенсивность насыщает от 10 до 50 процентов вычислительной мощности CPU. Когда нагрузки демонстрируют нерегулярный доступ к памяти, крошечные батчи или динамический поток управления, массивно параллельные конвейеры выполнения останавливаются на задержке памяти и расхождении потоков. Универсальные CPU с большими иерархиями кэшей, внеочередным выполнением и предсказателями ветвлений в таких условиях часто обеспечивают лучшую задержку и эффективность использования ресурсов. Выбор аппаратуры требует сопоставления арифметической интенсивности нагрузки и регулярности потока данных с точками перехода архитектуры, а не допущения, что специализация гарантирует скорость.
Заблуждение и ловушка
Ловушка: игнорирование ограничений пропускной способности памяти при выборе стратегий ускорения.
Решения о закупке часто ориентируются на пиковую арифметическую пропускную способность, упуская из виду ограничения интерфейса памяти. Перемещение данных за пределами кристалла несет серьезные штрафы по производительности и энергии: выборка операнда из DRAM стоит примерно 640 пДж против 0,5 пДж для обращения к SRAM L1 на кристалле («Понимание стены памяти в ИИ»). Рассмотрим ускоритель с 300 TFLOP/s вычислительной мощности и 2 ТБ/с пропускной способности памяти, что задает точку перехода в 150 FLOP/байт. Ядро нормализации, такое как LayerNorm, с арифметической интенсивностью 1,5 FLOP/байт достигает лишь 3 TFLOP/s (загрузка вычислений 1 процент). Поскольку LayerNorm проводит полные тензоры активаций через память, чтобы вычислить простые статистики редукции, пропускная способность памяти строго ограничивает производительность. Добавление вычислительных блоков без расширения пропускной способности памяти оставляет время выполнения без изменений и тратит площадь кремния впустую.
Заблуждение и ловушка
Заблуждение: выигрыш от аппаратного ускорения масштабируется линейно с добавлением ускорителей.
Распределенное обучение не дает 8-кратной пропускной способности на восьми ускорителях, потому что накладные расходы межчиповой коммуникации снижают параллельную эффективность. Синхронизация градиентов между рангами через кольцевой AllReduce («Масштабирование на несколько кристаллов») требует, чтобы каждый ранг передавал объем, в раз превышающий объем градиентов модели: для восьми устройств это в 1,75 раза больше полезной нагрузки. При межсоединении вроде NVLink с двунаправленной пропускной способностью 600 ГБ/с (вдвое меньше в каждом направлении) передача полезной нагрузки градиентов в 1 ГБ занимает 5,83 мс. Для модели с шагом вычислений 50 мс этот обмен данными добавляет 11,7 процента накладных расходов на коммуникацию до учета программной задержки коллективных операций. Без конвейеризации вычислений и коммуникации узел из восьми ускорителей достигает лишь 7,2-кратного ускорения (параллельная эффективность 89,6 процента). Отстающие устройства, барьерная синхронизация и накладные расходы коллективных протоколов расширяют разрыв между линейными ожиданиями и физическим масштабированием кластера.
Заблуждение и ловушка
Ловушка: планирование емкости ускорителей по спецификациям пиковых FLOP/s.
Пиковые FLOP/s измеряют емкость арифметических блоков при идеальных смесях инструкций и непрерывной доступности операндов, а не реальную пропускную способность приложения. Достижимая производительность зависит от арифметической интенсивности ядра, размеров матриц, объединения обращений к памяти и накладных расходов запуска в среде выполнения. Модель Roofline («Модель Roofline») ограничивает разрыв между пиковыми вычислениями и выполнением, ограниченным пропускной способностью. На A100 GPU с пиком 312 TFLOP/s плотное обучение трансформера поддерживает 120–180 TFLOP/s (от 40 до 60 процентов загрузки FLOP модели). И наоборот, разреженная рекомендательная модель поддерживает лишь 10–30 TFLOP/s (от 3,2 до 9,6 процента загрузки), потому что поиски в разреженных таблицах эмбеддингов порождают несогласованные чтения памяти, из-за которых блоки тензорной арифметики остаются без данных. Определение емкости кластера по пиковым FLOP/s приводит к серьезной нехватке ресурсов; планирование емкости должно опираться на измеренную устойчивую пропускную способность или на проекции ядер, ограниченные Roofline.
Заблуждение и ловушка
Заблуждение: любой рейтинг FLOP/s может оценить нагрузку в низкой точности.
У ускорителей есть отдельные тракты данных для разных точностей, и пиковая пропускная способность резко меняется между ними. H100 дает примерно 989 TFLOP/s в тензорных операциях FP16, но лишь около 67 TFLOP/s в операциях CUDA-ядер FP32: разрыв примерно в 15 раз на одном и том же чипе (Choquette, 2023). Оценка времени обучения по числу FP32, когда нагрузка фактически использует BF16, дает показатели загрузки, которые выглядят серьезно деградировавшими без физической причины, а сопоставление с неверной моделью Roofline классифицирует ядра как вычислительно-ограниченные, когда они ограничены памятью (или наоборот). Всегда сопоставляйте пиковую константу с точностью, которую нагрузка действительно выполняет, и явно указывайте точность при сообщении загрузки FLOP модели.
Заблуждение и ловушка
Ловушка: развертывание вывода с малым батчем на высокопроизводительных ускорителях.
Вывод с малым батчем сильно недозагружает высокопроизводительные ускорители, потому что выполнение одного образца не дает повторного использования параметров. Для плотной линейной проекции с размерностью один запрос () требует потокового чтения всего тензора весов из памяти устройства, чтобы выполнить произведение матрицы на вектор, что дает арифметическую интенсивность всего 1 FLOP/байт. При размере батча повторное использование весов амортизирует передачи памяти по токенам и поднимает арифметическую интенсивность до 204,8 FLOP/байт. При пропускная способность памяти ограничивает достигаемую производительность значением 2,04 TFLOP/s на A100 и 0,3 TFLOP/s на T4. Хотя T4 имеет меньший пик — 65 TFLOP/s и точку перехода 203,1 FLOP/байт, — его фактическая пропускная способность при составляет около одной седьмой от A100 (0,3 против 2,04 TFLOP/s), зато стоимость закупки и тепловой след у него в разы меньше. Развертывание A100 для вывода в реальном времени без батчинга оставляет дорогие вычислительные блоки простаивать; архитекторам систем нужно согласовывать выбор ускорителя с операционными размерами батчей и целями задержки.
Заблуждение и ловушка
Заблуждение: оптимизации под конкретного производителя не несут долгосрочной стоимости переносимости.
Оптимизация исключительно под среду выполнения одного производителя дает немедленную эффективность ядер, но создает серьезную архитектурную привязку («Поддержка компиляторов»). Кодовые базы, насыщенные проприетарными внутренними функциями устройств, ассемблером конкретного вендора и нестандартными раскладками памяти, требуют месяцев инженерного труда для переноса, когда появляются новые и более экономичные ускорители. Этот технический долг задерживает переход на новую аппаратуру и исключает стратегии закупок у нескольких вендоров. Чтобы сохранить гибкость, системы должны изолировать микроядра, настроенные под вендора, за слоями аппаратной абстракции или ориентироваться на промежуточные представления компиляторов (такие как Triton или MLIR). Сохранение переносимых путей выполнения позволяет инфраструктуре следовать за инновациями в аппаратуре, не жертвуя выгодами оптимизации специализированных блоков выполнения.
Проверка осуществимости: можно ли это запустить?
Перед закупкой аппаратуры проверьте каждое физическое ограничение. Эти режимы отказа превращаются в конкретный тест осуществимости:
- Емкость памяти: вычислите и проверьте для модели Llama с 7 миллиардами параметров и весами FP16 объемом 14 ГБ на GPU с 16 ГБ.
- Пропускная способность: вычислите для модели с 70 миллиардами параметров (140 ГБ) при пропускной способности памяти 1 ТБ/с, затем сравните результат с целевой задержкой 50 мс.
- Вычисления: вычислите и сравните его с целевой пропускной способностью. Обработка видео с 30 кадрами в секунду требует завершения вывода за 33,3 мс.
- Размещение на Roofline: для ускорителя с пиком примерно 2 TFLOP/s и пропускной способностью 200 ГБ/с оцените арифметическую интенсивность точки перехода, затем поместите ядро с 10 FLOP/байт относительно нее: ограничено оно вычислениями или памятью и поможет ли ему более высокая тактовая частота?
Этот контрольный список переводит архитектурные принципы в строгую инженерную практику. Оценка системы требует дисциплинированной диагностической привычки: охарактеризовать арифметическую интенсивность нагрузки, определить метрику физического узкого места, сопоставить выполнение с подходящим трактом данных и учесть затраты на межсоединения, масштабирование и переносимость.
Итоги
Аппаратное ускорение совместно проектирует вычислительные движки, иерархии памяти, числовые форматы и потоки данных. Для выбранного интерфейса памяти железный закон сравнивает время вычислений с временем перемещения ; Roofline выражает это соперничество как . Сквозная задержка также включает запуск, синхронизацию, коммуникацию и фиксированные накладные расходы. Ускорители повышают эффективность только тогда, когда поддерживаемые пути используют повторное использование данных локально. Выбор аппаратуры поэтому начинается с измеренного или смоделированного узкого места нагрузки, а не с пикового показателя поставщика.
Перемещение данных стоит дороже вычислений
- Модель Roofline выявляет узкие места: сравните измеренную интенсивность ядра с точкой перехода для конкретной точности целевой платформы (здесь 153 FLOP/байт). Ниже нее сокращайте трафик памяти; выше — повышайте загрузку вычислений.
- Пропускная способность памяти ограничивает производительность: вычислительная мощность GPU выросла быстрее пропускной способности памяти. Многие фазы вывода ограничены памятью, особенно декодирование при малом батче и поиск эмбеддингов, тогда как GEMM с большим батчем могут оставаться вычислительно-ограниченными.
- Совместное проектирование аппаратуры и программного обеспечения умножает производительность: сопоставление алгоритмических шаблонов с возможностями архитектуры, таких как плотный GEMM на систолических или тензорных блоках и поддерживаемая разреженность на разреженных путях, может дать большие улучшения.
- Тензорные ядра требуют совместимого пути: точность, размерности, раскладки и поддержка библиотек должны соответствовать архитектуре. Батч и форма влияют на повторное использование и загрузку, но никакой единый порог батча не гарантирует пиковую производительность.
- Сквозное ускорение останавливается на следующем узком месте: ускорение одного ядра оставляет без изменений запуск, передачи, синхронизацию, коммуникацию и неподдерживаемую работу. Используйте закон Амдала и профилирование, чтобы решить, поможет ли дальнейший кремний, лучшее отображение или меньшее перемещение данных улучшить всю нагрузку.
Ускоритель — это не равномерно более быстрый компьютер; он предоставляет эффективные пути для отдельных операций и потоков данных. Тайлинг, слияние, планирование с учетом иерархии и систолическое выполнение снижают трафик через моделируемый интерфейс только тогда, когда нагрузка, числовой формат и программный путь могут их использовать.
Модель Roofline дает первичную диагностику: используя арифметическую интенсивность и точку перехода, она сужает вероятное узкое место; затем профилирование учитывает задержку, заполненность, коммуникацию и накладные расходы реализации. Результат — проверяемая гипотеза, а не предсказание.
От оптимизации к проверке
Стек оптимизации ML опирается на три взаимодополняющие стратегии эффективности: отбор данных («Отбор данных») минимизирует требования к объему обучающих образцов, сжатие моделей («Сжатие моделей») снижает сложность параметров и точности алгоритма, а аппаратное ускорение максимизирует пропускную способность физической машины. Однако оптимизация без эмпирического измерения остается неполной. Глава «Бенчмаркинг» переходит от теоретических границ FLOP к задержке, измеренной в календарном времени, применяя стандартизованные наборы бенчмарков и статистические протоколы, чтобы проверить утверждения об оптимизации на эксплуатационной реальности.
-
Закон Амдала: отображается на железный закон только после того, как предлагаемое изменение задано точно. Если более быстрый тензорный блок сокращает член вычислений , но оставляет без изменений передачу данных и фиксированную задержку, эти незатронутые члены ограничивают общее ускорение. Другой ускоритель или система памяти может улучшить и пропускную способность. Поэтому неускоренная доля определяется вмешательством, а не постоянной классификацией каждого члена как последовательного. ↩
-
Арифметическая интенсивность: отношение вычислительных операций к байтам, переданным через моделируемый интерфейс памяти (FLOP/байт). Нагрузки выше точки перехода этого уровня аппаратуры, например хорошо разбитые на тайлы умножения матриц с существенным повторным использованием, ограничены вычислениями и могут выиграть от большего числа TFLOP/s. Операции с низкой интенсивностью, включая часть операций внимания и декодирования при малом батче, на этом уровне ограничены пропускной способностью и нуждаются в большей пропускной способности или повторном использовании, а не только в большей вычислительной мощности. ↩
-
TPU (тензорный процессор): первый TPU сделал намеренно узкую ставку, сосредоточив проект на одном систолическом массиве для 8-битного умножения матриц и отказавшись от значительной части механизмов управления, нужных универсальному ядру (Jouppi et al., 2017). Такой выбор дает высокую плотность вычислений на плотном умножении матриц ценой гибкости. Нерегулярный код и код с большим числом ветвлений по-прежнему плохо подходит; то, насколько полно загружен массив, определяют тайлинг компилятора, дополнение нулями и размеры слоев. ↩
-
Intel 8087: сопроцессор реализовал логику арифметики с плавающей точкой прямо в кремнии, избегая медленной многоинструкционной программной эмуляции каждого вычисления. Его выгода зависела от того, сколько времени приложение проводило в поддерживаемых операциях с плавающей точкой, что показывает, почему специализация помогает больше всего, когда ускоряемая работа доминирует в выполнении. ↩
-
AlexNet: 60-миллионная сверточная нейронная сеть (CNN) Крижевского, Суцкевера и Хинтона выиграла ImageNet 2012 с отрывом более десяти процентных пунктов на двух потребительских GPU GTX 580 с 3 ГБ видеопамяти у каждого. Поскольку модель не помещалась в память одного GPU, авторы разделили сеть между двумя картами и ограничили обмен между ними; это ранняя форма параллелизма моделей, которая предвосхитила систематический тензорный и конвейерный параллелизм. Сообщаемое обучение заняло пять-шесть дней (Krizhevsky et al., 2012). ↩
-
DSA (архитектура, специализированная под предметную область): аппаратура, оптимизированная под класс приложений, которая жертвует частью программируемости общего назначения ради эффективности. TPUv1 Google достиг в 15–30 раз более высокой производительности и в 30–80 раз лучшей производительности на ватт, чем современные CPU- и GPU-системы, которые оценивались на вывод-нагрузках Google, благодаря тому, что в центре конструкции стоят систолический массив и память под управлением программного обеспечения (Jouppi et al., 2017). DSA, который хорошо справляется с плотным умножением матриц, может работать хуже CPU на нерегулярных нагрузках, таких как обход графов, поэтому ограничения нагрузки и выигрыш в эффективности должны оправдывать стоимость программного обеспечения, компилятора и экосистемы (Hennessy and Patterson, 2019); (Hennessy and Patterson, 2017). ↩
-
Закон Мура: в иллюстративных допущениях, использованных на «Системном разрыве», вычислительный спрос моделей растет примерно в 6,1 раза в год, а пиковое предложение ускорителей улучшается примерно в 1,7 раза в год, расширяя смоделированный разрыв спроса и предложения примерно в 3,5 раза в год. Опубликованные тенденции вычислений мотивируют расхождение, но построенные темпы являются допущениями, а не прогнозами. Поэтому рисунок показывает, насколько чувствителен системный разрыв к устойчивым различиям в темпах роста, а не фиксированную траекторию будущего. При таком разрыве методы алгоритмической эффективности, такие как сжатие, квантование и разреженность, становятся все более ценными (Amodei and Hernandez, 2018); (Epoch AI, 2024). ↩
-
Масштабирование Деннарда: модель масштабирования 1974 года утверждала, что рабочее напряжение может падать по мере уменьшения размеров транзисторов, сохраняя плотность мощности примерно постоянной (Dennard et al., 1974). Ее распад примерно после 2005 года ограничил дальнейший рост тактовой частоты в рамках расчетной тепловой мощности чипа; литература о темном кремнии оценила, для смоделированных передовых техпроцессов и проектных допущений, что тепловые пределы могут не давать работать одновременно большим долям доступных транзисторов. Эта доля не является универсальной константой, но ограничение по мощности устойчиво: специализированные блоки делают активный бюджет кремния полезнее, выделяя его под классы операций с высокой ценностью (Esmaeilzadeh et al., 2011). ↩
-
Закон Хуанга: наблюдение, что производительность GPU для нагрузок ИИ улучшается благодаря архитектурным новшествам, таким как тензорные ядра, а также масштабированию транзисторов. Нормированный рисунок использует иллюстративные кривые предложения GPU и спроса моделей, чтобы показать, как неравные темпы роста создают расширяющийся системный разрыв; это не прогноз ни одного из темпов (Amodei and Hernandez, 2018); (Epoch AI, 2024); (NVIDIA Corporation, 2020); (Choquette, 2023). ↩
-
Кодек: сокращение от «кодировщик-декодировщик», отражающее двойную функцию аппаратуры. Кодирование (сжатие) требует много вычислений, поскольку ищет оптимальные представления, тогда как декодирование (распаковка) требует пропускной способности, поскольку восстанавливает кадры полного разрешения из сжатых потоков. Выделенный кремний кодеков реализует оба пути в аппаратуре с фиксированной функцией, поэтому ни один из путей не тратит транзисторы на ненужную логику управления общего назначения. ↩
-
ASIC (специализированная интегральная схема): такие схемы достигают предельной эффективности, реализуя один алгоритм прямо в кремнии, часто улучшая производительность на ватт в – раз. Примеры включают криптографическое хеширование для майнинга блокчейна и выравнивание последовательностей в геномике. Компромисс — полная негибкость: если основной алгоритм меняется, ASIC нельзя перепрограммировать, и он устаревает, привязывая проект аппаратуры к той версии задачи, под которую его создали. ↩
-
Задержка против пропускной способности в проектировании ускорителей: обучение обычно использует выполнение, ориентированное на пропускную способность, и большие батчи, чтобы амортизировать работу, тогда как вывод, чувствительный к задержке, должен контролировать задержку одного запроса и хвостовую задержку. Это цель обслуживания, а не универсальное разделение обучения и вывода: пакетный вывод тоже может быть ориентирован на пропускную способность, а малые или интерактивные циклы обучения могут заботиться о задержке шага. Глубина конвейера, задержка накопления батча, настройка ядер и очереди могут сделать путь, ориентированный на обучение, менее подходящим для интерактивного запроса, даже если его пиковая FLOP/s выше, поэтому проект должен соответствовать реальному потоку запросов, возможностям формирования батчей и цели. ↩
-
Scratchpad-память: когда компилятор может определить шаблон доступа тензорного ядра, он может явно разместить тайлы в быстрой локальной памяти под программным управлением. Это избавляет от части механизмов тегов, замещения и когерентности, но передачи, синхронизацию, разбиение на банки и емкость нужно планировать правильно. Scratchpad-память дополняет кэши, а не заменяет их повсеместно, потому что нерегулярные или общие данные все еще могут выигрывать от аппаратного управления. Например, TPU v1 Google использовал 24 МБ буфера Unified Buffer под управлением программного обеспечения для промежуточных активаций, тогда как веса и инструкции шли по другим путям (Jouppi et al., 2017). ↩
-
HBM: поколения A100 и H100 дают 2,0–3,4 ТБ/с пропускной способности памяти устройства благодаря стекованной памяти и широким интерфейсам, тогда как эталонная память GDDR6X, используемая здесь, дает 760 ГБ/с (NVIDIA Corporation, 2020); (Choquette, 2023). Повышение потолка пропускной способности может сдвинуть часть ядер в сторону вычислительно-ограниченной области на диаграмме Roofline, но только если шаблон доступа и арифметическая интенсивность позволяют этим воспользоваться. HBM также повышает стоимость корпуса и системы, поэтому ее ценность зависит от требований нагрузки к пропускной способности. ↩
-
RISC-V (reduced instruction set computer V): открытая ISA позволяет командам аппаратуры добавлять собственные инструкции для ML, включая векторные скалярные произведения, функции активации и операции над разреженными тензорами, не меняя базовую ISA. Компромисс — зрелость программной экосистемы: пользовательские расширения требуют соответствующей поддержки компилятора, библиотек и среды выполнения, что может ограничивать переносимость и увеличивать объем работ по интеграции. ↩
-
Наследие векторов Cray-1: Cray-1 (1975) использовал 64-элементные векторные регистры с конвейеризованными функциональными блоками, что позволяло потоку элементов проходить через арифметические операции без выдачи одной скалярной инструкции на каждый элемент. Современные ускорители распространяют те же принципы широких регистров, конвейерного выполнения и повторного использования данных на векторные и матричные тайлы. ↩
-
Im2col (image-to-column): преобразует свертку в матричное умножение, укладывая значения рецептивных полей в столбцы. Явная материализация может дублировать перекрывающиеся значения и увеличивать объем хранения примерно до площади ядра свертки, прежде чем учитываются эффекты краев, шага и каналов. Промышленные библиотеки часто используют неявный GEMM или прямые ядра свертки, чтобы получить выполнение, дружественное матрицам, без материализации полной расширенной матрицы. ↩
-
Вычисления ML с пониженной точностью: уменьшение ширины операндов вдвое сокращает число байтов на сохраненный элемент и может поддерживать более плотную арифметику, хотя реальная пропускная способность зависит от доступного тракта данных и ядра (Dally et al., 2021); (Dally, 2023). Переход NVIDIA от векторной арифметики Pascal P100 к смешанно-точным тензорным ядрам Volta V100 поднял номинальную пиковую производительность FP16 примерно с 21,2 до 125 TFLOP/s, то есть примерно в 6 раз между этими продуктами (NVIDIA, 2017). Выбор точности должен сохранять численное поведение и использовать эффективный поддерживаемый путь; самый маленький формат не всегда лучший. ↩
-
SM (streaming multiprocessor): физический аппаратный движок, который реализует модель SIMT, используя планировщики варпов для координации множества параллельных потоков. Поддержание достаточного числа активных варпов помогает скрывать задержку инструкций и памяти, но сама по себе заполненность не определяет узкое место. Низкая заполненность может быть вызвана использованием регистров, использованием разделяемой памяти, размерами блоков или недостаточной параллельной работой, тогда как ядро, ограниченное памятью, может иметь высокую заполненность. ↩
-
Варп: на GPU NVIDIA варп — это группа планирования из 32 потоков, которые выполняют общую инструкцию, когда их пути управления совпадают. Если потоки идут по разным путям, аппаратура выполняет нужные пути под разными масками, снижая полезную загрузку линий. Штраф зависит от длины пути и от того, сколько линий идет по каждому пути, поэтому ядра ML часто предпочитают однородный или предицированный поток управления. ↩
-
CUDA (compute unified device architecture): выпущенная NVIDIA в 2006 году CUDA устранила необходимость маскировать вычисления общего назначения под графические операции и открыла GPU для научных и ML-нагрузок через модель программирования, похожую на C. Экосистема, которую она создала, включая cuBLAS, cuDNN и TensorRT, образует программный барьер, способный привязать стек обучения ML к аппаратуре NVIDIA: переход требует переписать или заменить тысячи оптимизированных для GPU ядер, а эта стоимость часто превышает экономию на железе у конкурирующих платформ. Именно такая программная привязка, а не одна лишь кремниевая производительность, помогает объяснить, почему многие крупные стеки обучения ML остаются центрированными на CUDA. ↩
-
Выравнивание размерностей для тензорных ядер: тензорные ядра NVIDIA работают наиболее эффективно, когда размерности матриц кратны значениям, специфичным для точности и архитектуры, например кратны 8 или 16 для распространенных путей FP16/BF16/INT8. Современные cuBLAS и cuDNN все еще могут использовать тензорные ядра для многих невыровненных размерностей, но плохо выровненные формы могут вызвать менее эффективные ядра, потребовать дополнения нулями или снизить эффективную пропускную способность (NVIDIA, 2024); (NVIDIA Corporation, 2021). Поэтому архитекторы моделей часто выбирают размерности эмбеддингов и каналов, например 512, а не 500, а вывод с батчем 1 может не достигать пиковой загрузки тензорных ядер: выравнивание и арифметическая интенсивность совместно определяют, заполнены ли матричные движки аппаратуры. ↩
-
Тензорное ядро: одна инструкция тензорного ядра выполняет полную операцию умножения матриц с накоплением над небольшим тайлом данных на выделенном аппаратном блоке (NVIDIA, 2017); (NVIDIA Corporation, 2020). Такой подход обходит накладные расходы на выборку и планирование десятков отдельных арифметических инструкций на универсальных CUDA-ядрах. Поскольку эти блоки составляют значительную долю заявленной тензорной пропускной способности современного ускорителя, отказ от их использования может оставить нагрузке большую часть теоретического пика кристалла. ↩
-
NPU (нейронный процессор): мобильные NPU добиваются маломощного вывода, реализуя распространенные тензорные операции в аппаратуре с фиксированной функцией или с узко программируемой логикой, а не как полностью универсальные ядра GPU. Такая архитектурная приверженность может дать большой выигрыш энергоэффективности для поддерживаемых ядер, но делает развертывание зависимым от покрытия операторов: неподдерживаемые функции должны уходить на путь CPU или GPU, который для этой нагрузки может быть гораздо менее эффективным (Sze et al., 2017). ↩
-
Структурированная разреженность N:M: соотношение 2:4 (плотность 50 процентов), которое используют разреженные тензорные ядра NVIDIA Ampere, — аппаратно удобный компромисс: в каждой смежной группе из четырех значений сохраняются два ненулевых значения, что сохраняет регулярную индексацию и вдвое сокращает полезную нагрузку по плотным значениям (NVIDIA Corporation, 2020). При 2:4 накладные расходы метаданных достаточно компактны, чтобы хранить их рядом с весами, не перекрывая экономию трафика памяти; именно это ограничение делает заявленный двукратный выигрыш на пути тензорной математики правдоподобным, когда ядра и веса модели соответствуют шаблону. ↩
-
Систолический массив: от греческого systole («сжатие»), заимствовано из кардиологии для передачи ритмичного сокращения. Кунг и Лейзерсон использовали этот термин для массивов, в которых данные продвигаются через соседние процессорные элементы по регулярному расписанию (Kung and Leiserson, 1979). Заполнение конвейера позволяет одновременные волновые фронты и локальное повторное использование. Выигрыш зависит от стационарного операнда, тайла, буферов и загрузки; он не гарантирует фиксированной экономии обращений к DRAM. Нерегулярные нагрузки и плохо выровненные формы подходят хуже, потому что заполнение, опустошение и простаивающие элементы расходуют емкость. ↩
-
Узкое место фон Неймана: разделение хранилища и вычислений требует, чтобы инструкции и данные пересекали интерфейсы, а не оставались в локальных регистрах. В типичных оценках 45 нм (Horowitz, 2014) обращение к DRAM расходует более чем в 20 000 раз больше энергии, чем сложение INT8. Точное соотношение меняется с техпроцессом и операцией, но локальность остается главной проблемой проектирования первого порядка. ↩
-
Разреженность и нерегулярность памяти: неструктурированные разреженные форматы обычно собирают ненулевые элементы через косвенную адресацию, что может ослаблять последовательный доступ и делать накладные расходы метаданных значительными. Структурированная разреженность сохраняет блоки, удобные для аппаратуры, поэтому ее поведение доступа отличается от произвольного прореживания. Без подходящих ядер или поддержки аппаратуры неструктурированная разреженная модель может работать медленнее своего плотного аналога, несмотря на меньшее число арифметических операций. ↩
-
DMA (прямой доступ к памяти): выделенный аппаратный блок, который управляет копированием данных (шаг 1) без прямого управления CPU, освобождая CPU для немедленной выдачи команд вычислений (шаг 2). Эта одновременность критична: без нее ускоритель может простаивать между батчами вычислений, особенно когда перемещение данных с хоста на устройство находится на критическом пути. ↩
-
NVLink (NVIDIA Link): прямое межсоединение GPU с GPU существует затем, чтобы удерживать трафик между ускорителями вне PCIe, когда тензоры должны перемещаться внутри сервера. Его совокупная двунаправленная пропускная способность 600–900 ГБ/с соответствует примерно 300–450 ГБ/с в каждом направлении при сбалансированном полнодуплексном трафике, что в несколько раз выше направленной пропускной способности стандартной линии PCIe, поэтому нагрузки с частым перемещением тензоров между устройствами могут оставаться в быстрой части сужающейся иерархии пропускной способности (NVIDIA Corporation, 2020); (Choquette, 2023). Алгоритмы обучения, которые определяют, сколько тензорного трафика должно проходить по этой связи, рассматриваются позже; здесь нужен только аппаратный факт — разрыв пропускной способности. ↩
-
AllReduce: коллективная операция из MPI, которая агрегирует значения между процессами («reduce») и распределяет результат обратно каждому процессу («all»). Здесь термин указывает, почему пропускная способность между ускорителями важна для распределенных нагрузок обучения. В масштабе алгоритмы, выбор топологии и протоколы среды выполнения определяют, насколько дорогой становится эта синхронизация. ↩ ↩2
-
InfiniBand: его ключевая особенность для масштабирования на несколько узлов — RDMA (удаленный прямой доступ к памяти). С путем, учитывающим GPU, таким как GPUDirect RDMA, и зарегистрированной памятью GPU сетевой адаптер может передавать данные напрямую между GPU разных узлов, не пропуская их через память хоста. Это снижает участие хоста и накладные расходы протокола, поэтому масштабирование чаще ограничено физической пропускной способностью, топологией и реализацией коллективных операций, а не обработкой пакетов, которой управляет CPU. ↩
-
Механизм внимания: Bahdanau, Cho и Bengio ввели внимание для моделей «последовательность в последовательность»; самовнимание трансформера позже позволило каждому токену обращаться ко всем токенам последовательности (Bahdanau et al., 2015); (Vaswani et al., 2017). Материализация полных оценок внимания для последовательности длины требует матрицы , что создает квадратичное промежуточное хранилище. FlashAttention разбивает вычисления на тайлы, чтобы не материализовать эту полную матрицу в HBM (Dao et al., 2022). Кэш ключей и значений при выводе — отдельная тема: его емкость растет линейно с длиной последовательности на слой, хотя на каждом шаге декодирования читается все более длинный кэш (см. раздел «Память и KV-кэш» главы «Обслуживание моделей»). ↩
-
Модель Roofline: введена в Калифорнийском университете в Беркли (Williams et al., 2009) и опирается на более ранние работы 1980-х по сложности ввода-вывода. Их конкретный вклад состоял в том, чтобы сделать компромисс между вычислениями и пропускной способностью наглядным и действенным: характерный график Roofline сразу показывает, ограничено ли ядро вычислениями (упирается в плоский потолок) или памятью (упирается в наклонную линию пропускной способности), и количественно определяет разрыв до аппаратных пределов. Ядро, которое работает только на 50 процентах своего потолка, имеет явный двукратный разрыв загрузки, который нужно закрыть, поэтому модель стала стандартным диагностическим инструментом для оптимизации ускорителей. ↩
-
Объединение обращений к памяти (memory coalescing): аппаратный механизм GPU, который сливает запросы к памяти от потоков одного варпа в одну транзакцию, когда эти потоки обращаются к непрерывной памяти. Раскладка тензора влияет на объединение, но знак эффекта зависит от ядра: NCHW может быть эффективным для некоторых реализаций свертки, тогда как NHWC/channels-last часто предпочтительнее для современных путей свертки и слияния на тензорных ядрах. Неудачный выбор раскладки все же может создать многократный разрыв в производительности, но правильное решение — согласовать раскладку с бэкендом, а не заучивать один универсальный формат. ↩
-
NHWC против NCHW: NHWC перечисляет измерения как батч, высота, ширина, канал; NCHW — как батч, канал, высота, ширина. Физический формат памяти определяет, читают ли соседние потоки соседние адреса, поэтому эффект для производительности зависит от бэкенда. Несоответствие раскладки и аппаратуры — это не микрооптимизация; оно может создать многократный разрыв в производительности, особенно когда преобразование не дает использовать пути свертки или слияния на тензорных ядрах. ↩
-
Слияние ядер: отдельные ядра GPU передают промежуточные результаты через память устройства, хотя кэши могут поглотить часть трафика. Слитое ядро может держать промежуточные значения в регистрах или локальном хранилище и избежать соответствующих циклов записи и чтения во внешней памяти. Итоговое ускорение зависит от поведения кэша, заполненности, накладных расходов на запуск и от того, был ли трафик памяти узким местом; оно не обязательно пропорционально сокращению числа байтов. ↩
-
Тайлинг (блокировка циклов): эта перестройка разбивает вычисление на блоки, размер которых подобран под быстрый локальный уровень. Наивный цикл многократно обращается к одним и тем же элементам; кэши могут перехватить часть обращений, тогда как блокировка намеренно концентрирует повторное использование до вытеснения (Lam et al., 1991). Это сокращение трафика на нижних уровнях — главный источник разрыва между наивным умножением матриц и оптимизированными процедурами GEMM. ↩
-
GEMM: операция — это примитив плотной линейной алгебры, к которому сводятся многие слои глубокого обучения. Оптимизированные библиотеки GEMM, такие как cuBLAS и oneDNN, используют регистровое блокирование, векторизацию и иерархический тайлинг, чтобы приблизиться к аппаратным пределам на благоприятных формах (NVIDIA, 2024); (Intel Corporation, 2021). Современные ИИ-ускорители сильно специализированы под тайлы, похожие на GEMM: тензорные ядра, систолические массивы и матричные расширения существуют, чтобы ускорять этот примитив, поэтому производительность GEMM служит важным предиктором сквозной пропускной способности на разных архитектурах. ↩
-
Эвристика в выборе ядер: практическое правило, которое выбирает перспективную реализацию без исчерпывающего бенчмаркинга всего пространства кандидатов. Размеры тайлов, раскладки, режимы точности, выбор слияния и ограничения формы могут создавать много допустимых вариантов GEMM. Эвристики снижают стоимость настройки, но могут пропустить более быстрого кандидата, поэтому автотюнеры, такие как AutoTVM, профилируют выбранные варианты на целевой аппаратуре. ↩
-
Программируемая пользователем вентильная матрица (FPGA): «программируемая пользователем» означает, что логическую структуру можно настраивать после производства, в отличие от ASIC с фиксированной функцией. FPGA могут повысить производительность для сервисов дата-центров с жесткими требованиями к задержке, реализуя заказные конвейеры под конкретную нагрузку (Putnam et al., 2014). Эта перенастраиваемость делает FPGA привлекательными для быстро развивающихся архитектур ML, где выбор ASIC рискует устареть, однако необходимость в языках описания аппаратуры (Verilog/VHDL) и времена компиляции, измеряемые часами, создают барьер производительности, который ограничивает применение развертываниями, где выигрыш в эффективности оправдывает инженерные затраты. ↩
-
Закон Амдала (предел масштабирования): раздел «Закон Амдала и закон Густафсона» приложения «Основы машины» формализует границу для фиксированной неускоренной доли. Если 5 процентов фиксированной нагрузки остаются неперекрытыми и не зависят от числа устройств, эта модель ограничивает ускорение значением в 20 раз. Распределенное обучение сложнее, потому что коммуникация может перекрываться с вычислениями, а ее стоимость сама может меняться с масштабом, но пример объясняет, почему неперекрытую синхронизацию нужно сокращать или скрывать. ↩
-
NPU (нейронный процессор): специализированные матричные движки NPU оптимизированы под плотные тензорные операции и дают аппаратную основу для описанного распределения нагрузки. Эта специализация создает критическое ограничение для планировщика: любой оператор ИИ, не отображенный на поддерживаемые пути данных NPU, должен «откатиться» на GPU или CPU. Такой откат может свести на нет энергетическое преимущество NPU, усложнить бюджеты задержки реального времени и добавить тепловое давление на мобильные устройства. ↩
Бенчмаркинг
Назначение
Как честно сравнивать системы машинного обучения, когда аппаратура, модели, данные и развертывание влияют друг на друга?
Бенчмаркинг сводит воедино решения, которые уже приняты при отборе данных, сжатии модели и аппаратном ускорении, и проверяет, сохраняются ли их выигрыши в условиях, похожих на развертывание. Каждое решение влияет на одно измерение (задержку, точность, пропускную способность или энергопотребление), но система машинного обучения является результатом всех этих измерений одновременно. Сжатая модель работает быстрее на одном ускорителе и медленнее на другом. Больший размер батча повышает загрузку ускорителя, но может нарушить соглашение об уровне обслуживания по задержке. Краевое устройство может заявлять пиковую пропускную способность, которую троттлинг из-за нагрева заметно снижает при длительной нагрузке. Задача состоит не в том, улучшилась ли локальная метрика, а в том, улучшилась ли вся система в условиях, которые действительно важны. Бенчмаркинг делает такие сравнения систематическими, а не анекдотическими. Он требует определить, что измерять (точность, задержку, пропускную способность, энергию), на каком уровне детализации (отдельное ядро, модель целиком или сквозной конвейер) и при каких условиях (размер батча, распределение входных данных, тепловое состояние, параллельная нагрузка). Без такой структуры команды сравнивают числа, которые никогда не измерялись на одних и тех же условиях, а решения, выглядевшие разумно в таблице, рассыпаются под рабочей нагрузкой. Предыдущие главы оптимизировали модель, отбирали данные и подбирали аппаратуру. Бенчмаркинг проверяет эти оптимизации, сопоставляя заявления с доказательствами и измеряя разрыв между обещанным и поставленным. В терминах D·A·M бенчмаркинг проверяет совместное проектирование: видно, согласованы ли данные, алгоритм и машина или лишь собраны вместе.
Цели обучения
- Объяснить бенчмаркинг как проверку D·A·M, которая показывает, выдерживают ли заявленные оптимизации репрезентативные условия
- Сравнить бенчмарки обучения и вывода по пропускной способности, перцентилям задержки, энергии, точности и охвату нагрузки
- Выбрать микро-, макро- или сквозной уровень детализации в зависимости от проверяемого инженерного решения
- Применить единые правила запуска бенчмарков, чтобы согласовать наборы данных, метрики, конфигурацию аппаратуры и отчетность
- Спроектировать протоколы измерений, которые контролируют границы измерения мощности, распределения входных данных, размеры батчей и статистическую дисперсию
- Оценить качество модели и данных с помощью калибровки, устойчивости, репрезентативности и метрик по срезам
- Диагностировать разрывы между бенчмарком и эксплуатацией, вызванные дрейфом, тепловым троттлингом, динамической нагрузкой и незаметной деградацией
Рамка бенчмаркинга машинного обучения
Модель, квантованная в INT8, может показать ускорение в 2 раза на синтетической нагрузке, но не дать выигрыша при реальных потоках запросов с переменными размерами входа и параллельными запросами. Прореженная модель может сохранить точность на тестовом наборе, но сломаться на крайних случаях, которые бенчмарк не покрывал. Отбор данных обещает более эффективное обучение, сжатие модели обещает меньшие и быстрые модели, а аппаратное ускорение обещает более высокую пропускную способность. Проверка того, что эти утверждения выполняются в эксплуатации, сама по себе является инженерной дисциплиной.
Бенчмаркинг машинного обучения — это эмпирическое измерение нагрузок машинного обучения при заданных условиях. Он используется, чтобы проверить утверждения о компонентах, моделях или сквозных системах по репрезентативным данным, а не только по пиковым спецификациям.
- Значение: разрыв между пиковой и устойчивой производительностью может быть большим. Ускоритель A100 дает 312 TFLOP/s (BF16) в пике, но в иллюстративном сценарии с утилизацией FLOP модели (MFU) 30–50 процентов, то есть отношением вычислительной работы модели в секунду к заявленной пиковой производительности аппаратуры, он выдает 93,6–156 TFLOP/s. Разрыв в 2–3,3 раза возникает из-за задержек памяти, пузырей в конвейере и накладных расходов на запуск ядер. Бенчмаркинг измеряет фактический разрыв для конкретной нагрузки, а спецификации производителя этого не делают.
- Отличие: бенчмаркинг машинного обучения охватывает несколько уровней. Микробенчмарки изолируют отдельные операции, например умножение матриц. Бенчмарки уровня модели оценивают обучение или вывод целиком. Сквозные бенчмарки включают окружающую работу: загрузку данных, предобработку, оптимизацию, ввод-вывод контрольных точек или инфраструктуру обслуживания. Охват измерения должен соответствовать инженерному утверждению.
- Типичная ошибка: распространенное заблуждение состоит в том, что числа бенчмарков — стабильные эталоны. И нагрузка (новые архитектуры моделей), и аппаратура (новые поколения GPU) меняются, поэтому результат, который лидирует в одной версии бенчмарка, часто становится базовой линией в следующей. Сравнение год к году имеет смысл только при неизменной версии бенчмарка.
Бенчмаркинг — место, где физические законы из предыдущих глав сталкиваются с эмпирической реальностью. Разрыв между бенчмарком и эксплуатацией измеряет разницу между ожидаемым по модели и наблюдаемым в эксплуатации поведением. Чтобы его закрыть, нужны измерения, которые превращают теоретические утверждения в проверенное инженерное знание.
Бенчмаркинг машинного обучения охватывает три взаимозависимых измерения, которые напрямую соответствуют компонентам любой развернутой системы. Системный бенчмаркинг проверяет, выполняет ли аппаратура обещанную производительность при реалистичных нагрузках или насыщение пропускной способности памяти и накладные расходы на диспетчеризацию программного обеспечения съедают выигрыш. Бенчмаркинг модели проверяет, сохраняют ли методы оптимизации качество модели на всем распределении входных данных, а не только на отобранных тестовых наборах. Бенчмаркинг данных проверяет, обобщается ли модель на реальные данные со всеми их шумами, смещениями и сдвигом распределения. Каждое измерение может независимо выявить проблемы, невидимые остальным, а система, которая проходит все три проверки, заслуживает гораздо большего доверия при развертывании, чем оцененная по одной оси.
Бенчмарк машинного обучения фиксирует снимок нагрузки и распределения данных, а не постоянную спецификацию. Разрыв между пиковой и устойчивой производительностью тоже не фиксирован: он меняется по мере развития нагрузок и поколений аппаратуры, поэтому любой результат бенчмарка привязан к моменту времени и не является универсальным.
Бенчмарки как движущиеся цели
В традиционных системах (например, SPEC CPU) бенчмарк — это жесткая спецификация. Алгоритм сортировки корректен, если он сортирует список. Корректность абсолютна и неизменна. В системах машинного обучения бенчмарк — это мягкая спецификация: корректность задается конечным набором примеров (ImageNet), а мир меняется. Модель, которая хорошо показывает себя на ImageNet, все равно может уступать на пользовательских фотографиях, снятых через годы после создания бенчмарка.
В архитектуре компьютеров инженеры проектируют под бенчмарк, потому что бенчмарк представляет нагрузку. В инженерии машинного обучения проектирование только под бенчмарк — это переобучение. Устойчивость возникает тогда, когда признается, что бенчмарк — лишь прокси для меняющейся реальности.
Проверка развертывания MobileNetV2 делает трехмерную рамку конкретной. Этот пример проходит через всю главу, потому что охватывает все три измерения оценки и показывает, как каждое из них выявляет проблемы, которые остальные не видят.
Проверка развертывания MobileNetV2
MobileNetV2 (введена в «Состав маячных моделей: биографии моделей») служит маячным примером для проверки всего конвейера оптимизации. MobileNetV2 развивает раздельную по глубине свертку из v1, добавляя инвертированные остаточные связи и линейные узкие места, и сохраняет близкий масштаб параметров (Sandler et al., 2018). Она показывает, где бенчмаркинг решает успех или неудачу развертывания: сжатие уменьшает размер модели, аппаратное ускорение снижает задержку вывода, и только бенчмаркинг покажет, сохранились ли эти выигрыши на всем пути развертывания.
- Сжатие модели («Сжатие моделей»): INT8-квантование уменьшает этот рабочий пример MobileNetV2 с 14 МБ до 3,5 МБ (сжатие в 4 раза)
- Аппаратное ускорение («Аппаратное ускорение»): иллюстративный сценарий EdgeTPU дает вывод за 2 мс против 15 мс на CPU
- Проверка бенчмарком: убедиться, что конвейер работает на практике
Систематическая оценка отделяет задержку EdgeTPU от накладных расходов на предобработку и передачу данных, подтверждает, что INT8-квантование сохраняет точность на краевых случаях вроде необычного освещения, и проверяет, что пропускная способность держится на реальных потоках данных с датчиков смартфона, а не только на отобранных тестовых наборах ImageNet.
Строгая оценка начинается с установки, которая отделяет значимые доказательства от вводящих в заблуждение метрик. Три принципа отличают эффективных практиков.
Во-первых, бенчмарки — это прокси, а не истина. Каждый бенчмарк измеряет конкретные условия, которые могут не совпадать с целевым развертыванием. Система может показывать высокую пропускную способность по образцам в режиме Offline (массовая пропускная способность при доступности всех входных данных) и заметно меньше запросов в секунду (QPS) в режиме Server (запросы с ограничением по задержке, которые поступают во времени). Ключевой вопрос всегда в том, что бенчмарк не измеряет.
Во-вторых, закон Гудхарта действует повсюду.1 «Когда мера становится целью, она перестает быть хорошей мерой». Команды, которые оптимизируют места в рейтингах бенчмарков, часто создают системы, отлично проходящие оценку, но не работающие в эксплуатации. Оптимизации под конкретный бенчмарк нередко ухудшают свойства, важные для развертывания: устойчивость, калибровку и эффективность.
В-третьих, сквозная метрика важнее метрик компонентов. В этом иллюстративном конвейере ускорение вывода в 3 раза на этапе модели длительностью 10 мс внутри запроса в 50 мс дает сквозное улучшение лишь примерно в 1,2 раза, а при усилении давления на память может оказаться и хуже. Эти принципы повторяются в методологии бенчмаркинга и подробно разобраны в разделе «Заблуждения и ловушки».
Ускорение компонента редко сохраняется как сквозное ускорение бенчмарка.
Однако знать, что измерять, — лишь половина задачи. Измерение с ошибками (на неподходящих нагрузках, с предвзятыми базовыми линиями или при неконтролируемых переменных) дает числа, которые кажутся точными, но вводят в заблуждение. История бенчмаркинга в вычислениях полна примеров технически корректных метрик, применявшихся с порочной методикой: от баллов Whetstone, которые компиляторы подгоняли под тест, до выборочно подобранных тестов GPU, которые ничего не говорят об устойчивой нагрузке. Понимание того, как развивалась методология измерений и где она давала сбои, необходимо для проектирования бенчмарков, которые отличают настоящие улучшения от артефактов измерения.
Исторические основы бенчмаркинга2 важны, потому что вскрывают сбои проверки, которые и сегодня повторяются в машинном обучении: оптимизированные метрики перестают предсказывать реальные нагрузки, числа аппаратуры игнорируют устойчивое рабочее состояние, а оценки моделей не учитывают стоимость развертывания. Та же последовательность проверок управляет современной практикой: сначала проверяется, что аппаратура выдает обещанную производительность, затем — что оптимизации модели и данных, построенные на этой аппаратуре, дают обещанный выигрыш.
Исторические основы
В 1976 году, когда Whetstone стал одним из первых стандартизированных бенчмарков, производители начали оптимизировать компиляторы именно под его синтетические циклы с плавающей точкой, и пиковые результаты перестали предсказывать производительность реальных приложений. Похожие подгонки регулярно подрывали оценки по одной метрике и по отдельным компонентам. Чтобы понять, почему современная оценка ML требует таксономии D·A·M (Данные · Алгоритм · Машина), нужно проследить, как развивались методики измерений в истории вычислительной техники. Каждое поколение бенчмарков возникало тогда, когда существующие метрики не выявляли критических узких мест системы, и эти случаи служат прямыми прецедентами для оценки ML.
Прежде чем начнется эта история, важно одно граничное условие: бенчмарк полезен только тогда, когда называет уровень системы, утверждение о котором он проверяет.
Бенчмаркинг как доказательство на разных уровнях
Бенчмарк машинного обучения имеет смысл, только если указано, какой уровень системы он проверяет. Метрики отбора данных, такие как PPD, площадь под кривой обучения (AULC) и коэффициент сжатия данных (DCR), все введены в главе «Отбор данных» и измеряют, может ли меньшее число примеров сохранить сигнал обучения. Метрики сжатия («Сжатие моделей») показывают, сохраняют ли качество меньшее число параметров или более низкая точность. Аппаратные метрики, такие как положение на кривой Roofline и TOPS/W («Аппаратное ускорение»), показывают, эффективно ли машина выполняет нагрузку. Системные бенчмарки, от «Системных бенчмарков» до «Разбора MLPerf по энергопотреблению», связывают эти уровни, проверяя, сохраняются ли локальные улучшения в сквозной нагрузке.
Эта роль на разных уровнях объясняет, почему важна история бенчмарков: измерение производительности развивалось всякий раз, когда практики обнаруживали, что существующие метрики не предсказывают сквозного поведения. Эволюция от ранних синтетических тестов к современным наборам для ML показывает три методологических сдвига: от изолированных ядер к репрезентативным наборам приложений, от пропускной способности по одной метрике к многокритериальным профилям энергии и от универсальных вычислительных метрик к ограничениям выполнения, специфичным для предметной области.
Бенчмарки производительности
Самые ранние вычислительные бенчмарки выявили устойчивую уязвимость эмпирической оценки: подгонку под бенчмарк. Whetstone (Curnow and Wichmann, 1976) использовал синтетическую смесь научных операций, а LINPACK3 (Dongarra et al., 1979) измерял решение плотных линейных систем. Поскольку эти нагрузки опирались на предсказуемые вычислительные циклы, производители компиляторов и аппаратуры могли оптимизировать именно ядра бенчмарка, например разворачивая синтетические циклы или подгоняя блочный обход кэша под точные размеры матриц, и не улучшать при этом производительность общих приложений. SPEC CPU (1989) преодолел это ограничение, оценивая полные переносимые программные наборы, которые нагружают ветвления целых чисел, нерегулярную иерархию памяти и конвейеры вычислений с плавающей точкой (Dixit, 1993). Эта линия напрямую важна для систем ML: заявления о сжатии моделей из «Сжатия моделей» нельзя проверять на изолированных ядрах умножения матриц, их нужно проверять на репрезентативных задачах вроде ResNet-50 и BERT во всей программной среде выполнения.
По мере расширения вычислений в интерактивные и мобильные среды оценка по одной метрике оказалась недостаточной. Графические бенчмарки сопоставляли частоту кадров с качеством отрисовки, а мобильные оценки считали потребление батареи равноправным с задержкой. Этот компромисс нескольких целей повторяется в обслуживании ML, где оптимизация только задержки может вызвать катастрофическое падение точности модели или энергоэффективности («Введение»).
Третий сдвиг произошел тогда, когда распределенные вычисления показали, что микробенчмарки уровня компонентов не предсказывают пропускную способность кластера. Оценка процессора или ускорителя в отрыве не передает динамику выполнения, когда задержка сетевых соединений, накладные расходы на сериализацию и коллективные коммуникации определяют время выполнения. Распределенное обучение ML так же зависит от тесного взаимодействия матричных блоков ускорителей («Аппаратное ускорение»), пропускной способности PCIe между хостом и устройством, конвейеров предвыборки входных данных и синхронизации градиентов по сетевым структурам.
Чтобы учесть эти взаимодействия, DAWNBench (Coleman et al., 2019) первым ввел оценку «время до точности», связав сырую пропускную способность аппаратуры с алгоритмической сходимостью. Максимизировать число обработанных образцов в секунду бессмысленно, если численная нестабильность или неудачный размер батча не дают модели достичь целевой точности на валидации. Эти эмпирические уроки вылились в MLPerf4 (2018), который закрепил измерение всей системы, ограничения по нескольким критериям и репрезентативные нагрузки из области зрения, языка и рекомендательных систем (Mattson et al., 2020); (Reddi et al., 2019).
Бенчмарки энергопотребления
Парадигма оценки по нескольким критериям распространилась на энергоэффективность, когда вычисления вышли за пределы мейнфреймов и охватили мобильные устройства с ограниченным запасом батареи и дата-центры мегаваттного масштаба. Поскольку энергопотребление напрямую определяет время работы батареи на краю сети и операционные расходы в кластерах масштаба склада, энергия стала метрикой оценки первого класса наравне с производительностью. Этот сдвиг породил стандартизированные энергетические бенчмарки, такие как SPEC Power5 для серверов и Green5006 для суперкомпьютеров.
Оценка энергопотребления ML-нагрузок сталкивается с особыми физическими трудностями измерения. Ускорители демонстрируют резкие колебания мощности: переключение между слоями активаций, ограниченными памятью, и блоками матричного умножения с высокой плотностью мощности создает быстрые скачки тока (), которые простые измерители средней мощности не различают. Кроме того, чтобы отделить потребление ускорителя от активности центрального процессора хоста, межсоединений PCIe и вентиляторов охлаждения, нужны строгие границы измерения. MLPerf Power (MLCommons, 2024) решает эти задачи, сочетая стандартизированные нагрузки с жесткой физической методикой измерения и откалиброванными внешними анализаторами мощности.
Измерение энергии выходит за пределы телеметрии аппаратуры и оценивает эффективность алгоритмов. Методы сжатия моделей (прореживание, квантование, дистилляция знаний) снижают энергопотребление, уменьшая число арифметических операций и трафик к памяти вне кристалла, а не полагаясь только на более экономичный кремний. Например, архитектуры MobileNet заменяют стандартные свертки раздельными по глубине свертками, что резко сокращает обращения к DRAM и число операций по сравнению с базовыми сверточными сетями (CNN) вроде ResNet (Howard et al., 2017); (Sandler et al., 2018); (He et al., 2016). Как сказано в «Сжатие моделей» и подсчитано в «Стоимость энергии», чтение операнда из DRAM вне кристалла стоит на порядки дороже арифметической операции, поэтому сокращение трафика памяти на уровне алгоритма — основной рычаг энергоэффективных вычислений.
Бенчмарки для предметных областей
Когда для обхода узких мест универсальных процессоров появились специализированные ускорители, общие бенчмарки перестали отражать ограничения выполнения, специфичные для предметных областей. Три рабочие оси определили эту специализацию и задали, как системы оцениваются в реальных условиях.
Ограничения развертывания определяют приоритеты метрик исходя из физических пределов. Кластеры для обучения в дата-центрах оптимизируют совокупную пропускную способность в рамках мощности стойки и объекта. Напротив, мобильный ИИ работает в жестких порогах теплового троттлинга (обычно до 5 Вт), а встраиваемые микроконтроллеры работают в бюджетах мощности в милливаттах. Эти физические границы, опирающиеся на принципы эффективности из «Введения», определяют, ставит ли бенчмарк на первое место пропускную способность (образцов в секунду) или энергоэффективность (джоулей на вывод).
Требования приложений накладывают функциональные ограничения помимо сырой скорости. Клинические модели ИИ требуют строгой калибровки и интерпретируемости наряду с точностью классификации; высокочастотные торговые системы задают жесткие границы хвостовой задержки вместе с детерминированным выполнением; автономные автомобили требуют ограниченной задержки в худшем случае и формальной проверки функциональной безопасности. Эти требования расширяют критерии оценки за пределы пропускной способности; глава «Ответственная инженерия» формализует соответствующие инженерные принципы безопасности, соответствия требованиям и справедливости.
Условия эксплуатации определяют устойчивость в реальном мире. Краевые устройства должны укладываться в сроки вывода при колебаниях температуры окружающей среды и шумных потоках датчиков; инфраструктура обслуживания в дата-центрах должна выдерживать внезапные всплески запросов и потери пакетов в сети без отбрасывания запросов; узлы промышленного интернета вещей должны работать без присмотра годами. Возможности аппаратного ускорения («Аппаратное ускорение») приносят пользу в эксплуатации только тогда, когда они устойчиво держатся в этих условиях.
Машинное обучение наглядно показывает эту расходящуюся специализацию. Поскольку ML-нагрузки создают сложное взаимодействие между блоками выполнения тензоров, пропускной способностью иерархии памяти и сетями распределенных коммуникаций, никакая отдельная метрика или нагрузка не может описать систему целиком. MLPerf формализует эту специализацию через различные наборы для развертывания: MLPerf Training оценивает масштабирование на несколько узлов и межсоединения высокой пропускной способности по целевому времени до качества (Mattson et al., 2020); MLPerf Inference измеряет пропускную способность и перцентили задержки в рамках соглашений об уровне обслуживания (SLA) для серверных и клиентских систем (Reddi et al., 2019); MLPerf Tiny тестирует сверхмаломощные микроконтроллеры с жесткими ограничениями памяти (Banbury et al., 2021); а сквозной трек MLPerf Power оценивает энергоэффективность во всех средах. Если читать «Варианты набора MLPerf» сверху вниз по колонке ограничений, видно, как метрики подстраиваются под физические пределы: пропускная способность межсоединений кластера уступает место перцентилям задержки на краю сети и, наконец, жестким ограничениям памяти на микроконтроллерах.
| Вариант MLPerf | Целевая область | Ключевые ограничения | Основные метрики |
|---|---|---|---|
| MLPerf Training | Дата-центр | Масштабирование на несколько узлов, межсоединения высокой пропускной способности | Время до качества, пропускная способность (образцов/с) |
| MLPerf Inference | Сервер/край сети | Ограничения SLA по задержке, требования к пропускной способности | QPS, перцентили задержки, сохранение точности |
| MLPerf Tiny | MCU/IoT | Сверхнизкое энергопотребление вывода, ограниченная память | Задержка, точность, энергия на вывод |
| MLPerf Power | Общий для всех сред | Энергетические бюджеты, тепловые ограничения | Производительность/Вт, энергия на запрос |
Варианты набора MLPerf: каждый вариант обращен к своему контексту развертывания, от обучения масштаба дата-центра до вывода на сверхограниченных микроконтроллерах, и измеряет метрики, относящиеся к его сценарию и его рабочим ограничениям.
Во всех вариантах MLPerf Power измеряет полезную работу на ватт, а не только сырую пропускную способность. Доменные наборы гарантируют, что архитектурные оптимизации приводят к успеху развертывания, а не остаются в рамках изолированных синтетических бенчмарков.
Наборы бенчмарков ML унаследовали эти исторические уроки, но ML-нагрузки вносят статистическую и зависящую от данных изменчивость, которой нет в традиционных детерминированных вычислениях. Помимо обычного системного шума, такого как прерывания операционной системы, активность фоновых демонов и троттлинг из-за нагрева, выполнение ML обладает собственной недетерминированностью. Редукция чисел с плавающей точкой в параллельных потоках не ассоциативна, поэтому при смене порядка суммирования возникают небольшие числовые расхождения; конвейеры загрузки данных применяют псевдослучайные аугментации; а стохастический градиентный спуск движется по невыпуклым поверхностям потерь, чувствительным к инициализации весов. Поэтому строгая оценка ML требует явных статистических мер контроля: повторения с несколькими начальными значениями генератора случайных чисел (seed), отчетности о дисперсии и детерминированных правил загрузки данных.
Стандартизация превращает эти эмпирические уроки в общую инженерную методологию. Когда одна команда измеряет задержку вывода с учетом предобработки на хосте, а другая начинает отсчет только после того, как тензоры оказались в памяти ускорителя, или когда измерители мощности проводят разные физические границы вокруг блока питания, полученные числа несопоставимы. Стандартизированные наборы заменяют разрозненное тестирование проверенными обвязками, единообразными границами измерения и проверяемыми правилами подачи результатов, что позволяет обоснованно закупать аппаратуру и сравнивать алгоритмы во всей отрасли. «Эволюция бенчмарков» подытоживает эту историю: от ранних синтетических циклов до многомерной оценки систем ML.
| Бенчмарк | Год | Основной фокус | Ключевые метрики | Урок для бенчмаркинга ML |
|---|---|---|---|---|
| Whetstone | 1976 | Синтетические операции с плавающей точкой | MWIPS | Подгонка под синтетические тесты подрывает достоверность оценки |
| LINPACK | 1979 | Линейная алгебра (матричные операции) | FLOP/s | Изолированные операции не отражают сложность системы и узкие места |
| SPEC CPU | 1989 | Реальные прикладные нагрузки | SPECrate, SPECspeed | Репрезентативные нагрузки показывают истинную производительность развертывания |
| SPEC Power | 2007 | Энергоэффективность серверов | ssj_ops/Вт по уровням нагрузки | Энергоэффективность требует оценки на нескольких уровнях нагрузки, а не только на пике |
| Green500 | 2007 | Энергоэффективность HPC | GFLOP/s на ватт | Рейтинги эффективности дополняют рейтинги сырой производительности |
| MLPerf | 2018 | Системы ML (обучение и вывод) | Время до качества, QPS, задержка, точность | Объединяет все уроки: репрезентативные нагрузки, несколько критериев и систему целиком |
Эволюция бенчмарков: развитие вычислительных бенчмарков от синтетических операций к оценке, специфичной для ML. Каждое поколение устраняло ограничения предшественников; кульминация — MLPerf, который объединяет репрезентативные нагрузки, многокритериальные метрики и измерение интегрированной системы.
Наборы системных бенчмарков
Команда, которая оценивает аппаратуру для краевого развертывания, должна сравнить пять разных систем на кристалле (SoC) для продукта «умная камера». Поставщик A заявляет 8 TOPS при INT8; поставщик B — 15 TOPS при INT4; поставщик C — задержку вывода на собственной модели; поставщик D ссылается на результаты MLPerf двухпоколенной давности; поставщик E дает только пиковую пропускную способность при максимальном размере батча. Ни одну из этих цифр нельзя напрямую сопоставить. Команда не может принять обоснованное решение о закупке, потому что каждый поставщик выделяет выгодную метрику в особых условиях и скрывает реальные рабочие компромиссы. Наборы бенчмарков устраняют эту фрагментацию: они задают единые измерительные обвязки и стандартные правила оценки.
Три урока из истории бенчмарков — репрезентативные нагрузки, многокритериальная оценка и измерение интегрированной системы — сходятся в требовании, уникальном для машинного обучения: управление статистической приближенностью. В традиционных вычислительных бенчмарках допустимые системные оптимизации должны сохранять результаты арифметики побитно. В системах ML низкоуровневые инженерные решения регулярно меняют численный выход: агрессивное квантование весов, прореживание ядер или аккумуляторы пониженной точности обменивают точность на скорость выполнения и меньшую нагрузку на пропускную способность памяти. Поэтому бенчмарк ML не может оценивать время выполнения в отрыве: точность выхода служит неприкосновенным эксплуатационным ограничением. Современные наборы бенчмарков кодируют эти ограничения в стандартизированные рамки, и благодаря этому возможны строгие сравнения между платформами.
Поэтому оценка системы ML требует анализа связанного взаимодействия в пространстве совместного проектирования Данных, Алгоритма и Машины (D·A·M), а не измерения сырой вычислительной пропускной способности. Ранние бенчмарки сосредоточивались главным образом на точности алгоритма на изолированных наборах данных (LeCun et al., 1998). По мере роста моделей узкие места вычислений расширили бенчмаркинг до эффективности выполнения на аппаратуре (Jouppi et al., 2017), а сбои развертывания показали, что узкие места конвейера данных и сдвиги распределения входа определяют поведение в реальном мире (Gebru et al., 2021). Энергопотребление пересекает все три измерения: структура алгоритма задает арифметическую интенсивность и вычислительную сложность (Hernandez and Brown, 2020), микроархитектура машины определяет энергию одной арифметической операции и обращения к памяти, а схемы загрузки данных задают загрузку шины. Надежный набор бенчмарков проверяет все эти измерения одновременно, гарантируя, что заявленные оптимизации сохраняются в эксплуатационных условиях.
Проблемы измерения в ML
ML-системы сочетают несколько источников изменчивости измерений, которые классические программные бенчмарки не были рассчитаны оценивать вместе. Эти колебания возникают и на уровне машины, и на алгоритмическом уровне. Со стороны машины длительное выполнение подводит ускорители к тепловым и энергетическим пределам и запускает динамическое масштабирование напряжения и частоты (DVFS), которое снижает тактовую частоту процессора прямо во время работы. Активность операционной системы хоста, в том числе дрожание планирования потоков, подкачка памяти и конкуренция за шину PCIe при подготовке батчей, дополнительно вносит разброс задержки между запусками. Со стороны алгоритма недетерминированный порядок редукций чисел с плавающей точкой в параллельных потоках, перемешивание мини-батчей и стохастические маски дропаута искажают числовые траектории. Чтобы отличить реальную системную оптимизацию от фонового шума измерений, нужно выделить эти перекрывающиеся источники дисперсии.
Чтобы изолировать изменчивость между запусками, протоколы бенчмарков требуют повторных экспериментов с контролируемыми начальными значениями генератора псевдослучайных чисел (seed). Число запусков должно соответствовать явным целям статистической мощности, а не случайной выборке. Отчетность должна выходить за рамки единственного лучшего из N результатов или отдельных арифметических средних: выборочная дисперсия, стандартные отклонения и доверительные интервалы показывают устойчивость и помогают понять, превышает ли наблюдаемое ускорение фоновое дрожание системы. Без этих мер контроля бенчмаркинг дает вводящие в заблуждение выводы. В обучении с подкреплением заявленные преимущества производительности часто растворяются в статистическом шуме случайной инициализации весов и динамики среды (Henderson et al., 2018). Аналогично, нестандартизованные оценки генеративно-состязательных сетей дают обратный порядок рейтингов при разных начальных значениях генератора, что показывает: неучтенная дисперсия подрывает сравнительные утверждения (Lucic et al., 2018).
Даже когда изменчивость выполнения полностью контролируется, бенчмаркинг сталкивается со структурным ограничением самого набора данных для оценки: емкостью измерения тестового набора. Тестовый набор работает как измерительный прибор с конечной разрешающей способностью. Поскольку точность на конечной выборке — это биномиальная доля, эмпирические оценки несут внутреннюю выборочную дисперсию, которая обратно пропорциональна размеру выборки. Если оптимизация меняет точность на один-два процентных пункта, оценка на слишком маленьком тестовом наборе не может определить, отражает ли изменение реальный алгоритмический эффект или случайное колебание выборки. Как показывает рисунок ниже с индикатором обнаруживаемости и разбирает сопутствующий блокнот, попытка оценить тонкие различия точности на тестовом наборе из тысячи образцов прямо попадает в эту статистическую ловушку достоверности.
Тестовый набор из 1 000 образцов не позволяет надежно увидеть регресс в один пункт.
Статистическая ловушка достоверности
Задача: базовый классификатор набирает 95 процентов, а сжатая версия — 94 процента на 1 000 изображениях. Подтверждает ли это падение на один пункт регресс?
Расчет:
Ожидаемые ошибки: эти оценки соответствуют 50 ошибкам и 60 ошибкам. При биномиальной модели базовой версии число ошибок имеет стандартное отклонение около 7 ошибок.
Интервал разности (95 процентов): пусть и обозначают оценки точности базовой и сжатой моделей, а — число изображений, на которых оценивалась каждая модель. Считая оценки независимыми, стандартная ошибка их разности равна
Наблюдаемая разность в 1 процентный пункт имеет приблизительный интервал от −1 до 3 процентных пунктов, который включает ноль.
Следствие: поскольку интервал включает ноль, результат не доказывает регресса на один пункт. Если обе модели работали с одними и теми же изображениями, сохраните количества расхождений между ними и используйте парный тест, например тест Макнемара; сравнения по отдельным точностям недостаточны. Оценка по 1 825 образцам для одной доли с точностью ±1 процентный пункт не обеспечивает мощности для этого сравнения.
Системный вывод: небольшие бенчмарки демонстрируют то, что по сути является лабораторной ошибкой. Тестовый набор как измерительный прибор должен быть достаточно большим, чтобы соответствовать точности изменения, которое он призван обнаружить.
Помимо статистической мощности, валидность бенчмарка зависит от репрезентативности нагрузки. Синтетические микробенчмарки генерируют однородные тензоры фиксированного размера прямо в памяти с высокой пропускной способностью (HBM) ускорителя. Выполняя непрерывные вычислительно-ограниченные операции обобщенного матричного умножения (GEMM) в изолированном цикле, микробенчмарки измеряют теоретический пик арифметической пропускной способности. Однако они скрывают иерархии памяти и узкие места планирования, которые определяют эксплуатацию. Синтетические нагрузки обходят передачу данных по PCIe между хостом и устройством, конвейеры декодирования входа, динамическое выделение памяти и вытеснение из кэша GPU. Напротив, бенчмаркинг на трассах воспроизводит журналы запросов с отметками времени, записанные на работающих кластерах обслуживания. Производственные трассы сохраняют распределения поступления запросов (пуассоновские и пакетные), переменные длины последовательностей и параллельные потоки запросов. Воспроизведение живых трасс заставляет инфраструктуру обслуживания справляться с динамическим батчингом, выделением кэша ключей и значений (KV) под давлением памяти и задержками в очередях, то есть проверяет систему в условиях эксплуатации, которые скрывают синтетические циклы установившегося режима.
Даже репрезентативная нагрузка может вводить в заблуждение, если метрика оценки не отражает ограничения развертывания. Такой сбой означает разрыв в согласованности метрики. Когда инженерная команда оптимизирует одну алгоритмическую меру качества, например офлайн-BLEU, top-1 точность классификации или перплексию токенов, отрываясь от целевых показателей обслуживания (SLO), метрика перестает измерять реальную пригодность системы к работе. Это расхождение воплощает закон Гудхарта: как только алгоритмический прокси-показатель становится единственной целью оптимизации, он перестает служить мерой здоровья системы в целом. Пример ниже иллюстрирует эту патологию в нейронном машинном переводе (NMT), где офлайн-оптимизация точности создает катастрофический штраф по задержке.
Закон Гудхарта в действии
Сценарий: инженерная команда оптимизирует модель NMT по офлайн-BLEU, увеличивая размер луча поиска (beam search) с 1 до 10.
Диагностика: больший луч дает прирост BLEU на 0,5 пункта на бумаге, но увеличивает число оценок кандидатов в 10 раз, а задержку вывода — с 50 мс до 200 мс (замедление в 4 раза), что выходит за срок обслуживания.
Системный урок: оптимизация офлайн-точности без ограничений по задержке провоцирует сбои по закону Гудхарта. Производственные бенчмарки должны задавать жесткие SLO для задержки обслуживания (например, задержка меньше 100 мс).
Компромисс с переводом обнажает фундаментальное напряжение в пространстве совместного проектирования Данных, Алгоритма и Машины (D·A·M): алгоритмическое изменение (расширение луча в десять раз) умножает вычислительную нагрузку и трафик памяти, давая незначительный прирост качества, но нарушая аппаратные сроки по задержке. Помимо рассогласования метрик, оценка систем на статических наборах данных вносит более глубокое ограничение: фиксированные бенчмарки оценивают выполнение при неизменном распределении входа и скрывают, как системы деградируют при сдвиге распределения в эксплуатации. Поэтому честная оценка ML-системы требует отделить эффективность выполнения инфраструктуры от архитектуры модели и вариаций набора данных. Стандартные наборы вроде MLPerf задают такую базу, фиксируя и веса моделей, и входные наборы данных, что позволяет напрямую и воспроизводимо измерять эффективность выполнения связки «аппаратура — программное обеспечение» на конкурирующих платформах.
Системные бенчмарки
Системные бенчмарки измеряют вычислительную основу, которая обеспечивает возможности моделей: как архитектура аппаратуры, системы памяти и межсоединения влияют на общую производительность. Эта проверка критически важна, потому что спецификации аппаратуры часто описывают теоретические пики, которых прикладные нагрузки не выдерживают. Расхождение настолько распространено, что заявления о пиковой производительности неполны. Системные бенчмарки выявляют эти разрывы, запуская стандартизированные нагрузки ML, а не полагаясь только на пиковые арифметические скорости.
Заблуждение о пиковой производительности
Дэйв Паттерсон часто говорит о пиковой производительности как о «производительности, которую производитель гарантирует, что вы не превысите». Для систем ML разрыв может быть большим из-за стены памяти: модель, ограниченная памятью, оставляет недостижимой значительную часть заявленных FLOP/s, как бы быстро ни работали арифметические блоки. Стандартизированные бенчмарки вроде MLPerf требуют, чтобы системы запускали заданные модели и данные, и показывают устойчивую производительность в задокументированной рабочей точке, а не универсальную скорость для любой нагрузки.
Для ограниченных памятью нагрузок разрыв между пиком и устойчивой производительностью следует из стены памяти; вычислительно-ограниченные нагрузки могут приближаться к пику. Это различие превращает оценку поставщика из догадок в перечень конкретных критериев.
Расшифровка заявлений поставщиков о бенчмарках
При оценке аппаратуры или программного обеспечения по бенчмаркам поставщика проверьте, называет ли заявление нагрузку, границы измерения и условия работы.
- Измеряемая величина: включает ли число задержки предобработку и постобработку, а не только выполнение модели?
- Граница точности: можно ли определить точность, на которой достигнута заявленная пропускная способность, например INT4, INT8 или FP16?
- Граница нагрузки: указаны ли явно модель, размер батча и распределение входных данных, использованные для сравнения?
- Исключенные затраты: учтены ли передачи памяти, загрузка модели, инициализация, устойчивое тепловое поведение и энергопотребление на заявленном уровне производительности?
- Заявлено и достигнуто: при заявленном пике 1 000 TFLOP/s и бенчмарке, который устойчиво выдает 350 TFLOP/s, оцените MFU и скажите, достаточно ли одного этого отношения загрузки, чтобы определить узкое место.
Инженер должен отклонять любое заявление о бенчмарке, если нельзя восстановить его границу нагрузки, точность и исключенные затраты. Заглавное число пропускной способности или задержки становится полезным только тогда, когда его можно сопоставить с реальной моделью, формой батча, перемещением данных, устойчивой рабочей точкой и энергетическим бюджетом.
Аппаратная основа (центральные процессоры, графические процессоры, тензорные процессоры (TPU),7 и специализированные интегральные схемы (ASIC)8) определяет скорость, эффективность и масштаб систем ML. Системные бенчмарки дают стандартизированные методы сравнения аппаратуры на ИИ-нагрузках по вычислительной пропускной способности, пропускной способности памяти, энергоэффективности, покрытию операторов и масштабированию (Reddi et al., 2019); (Mattson et al., 2020).
«Расшифровка заявлений поставщиков о бенчмарках» переводит типичные маркетинговые формулировки в технические оговорки, которые стоят за каждой из них.
| Заявление поставщика | Что это часто означает |
|---|---|
| «До 10 000 изображений в секунду» | Пиковая пропускная способность при максимальном размере батча, INT8, без предобработки |
| «Задержка меньше миллисекунды» | Только вычисления ускорителя, без передачи данных |
| «В 5 раз эффективнее» | Эффективность на операцию, а не эффективность системы в целом |
| «Оптимизировано для ИИ» | Может ускорять только отдельные операции или точности |
Расшифровка заявлений поставщиков о бенчмарках: четыре распространенные маркетинговые формулировки и технические оговорки, которые определяют, описывает ли заявление сквозную производительность, узкое измерение ускорителя или необоснованное сравнение эффективности.
Системные бенчмарки выполняют две функции. Для практиков они позволяют обоснованно выбирать аппаратуру, сравнивая данные по разным конфигурациям. Для производителей они измеряют прирост между поколениями и направляют разработку ускорителей. По мере роста внедрения GPU быстро росла и точность, что показывает, как успехи аппаратуры и алгоритмов могут двигать прогресс вместе.
Бенчмарки систем машинного обучения — это стандартизированные протоколы оценки, которые фиксируют нагрузку и целевое качество, меняя стек «аппаратура — программное обеспечение», и измеряют и , чтобы отделить эффективность инфраструктуры от алгоритмических улучшений.
- Значение: одна и та же модель ResNet-50 может давать очень разную пропускную способность на разных стеках аппаратуры, форматах точности, размерах батча и конфигурациях компилятора, но при этом сообщать одну и ту же точность Top-1 на ImageNet. Системные бенчмарки фиксируют этот разрыв в реализации, который невидим алгоритмическим бенчмаркам, сообщающим только точность.
- Отличие: в отличие от алгоритмических бенчмарков (которые меняют архитектуры моделей и процедуры обучения, чтобы улучшить точность сходимости), системные бенчмарки фиксируют алгоритм и меняют реализацию (библиотеки ядер, форматы квантования, размеры батчей и поколения аппаратуры), чтобы измерить, насколько эффективно связка «аппаратура — программное обеспечение» выполняет член железного закона.
- Типичная ошибка: распространенное заблуждение состоит в том, что результат системного бенчмарка обобщается на любые нагрузки. Ускоритель с высокой загрузкой на ResNet-50 (нагрузке в области зрения, где доминируют вычисления) может показать гораздо меньшую загрузку в рекомендательной системе (нагрузке, ограниченной пропускной способностью памяти). Системные бенчмарки привязаны к нагрузке; ни одна метрика не описывает аппаратную платформу целиком.
Большие батчи переводят вывод трансформеров из режима, ограниченного памятью, в вычислительно-ограниченный.
Чтобы правильно интерпретировать бенчмарк, нужно знать производительностные характеристики целевой аппаратуры. Ограничена ли конкретная ИИ-нагрузка вычислениями или памятью, — важнейшая подсказка для решений по оптимизации. Вычислительная интенсивность, измеряемая в FLOP/байт,9 задает пределы производительности. Рассмотрим NVIDIA A100 с производительностью тензорных ядер FP16 312 TFLOP/s (у FP32 — 19,5 TFLOP/s) и пропускной способностью памяти 2,04 ТБ/с (вариант SXM). Деление пиковых вычислений на пиковую пропускную способность дает порог арифметической интенсивности 153 FLOP/байт. Нагрузки ниже этого порога ограничены пропускной способностью памяти, а выше — вычислительной мощностью. Модель Roofline в «Модель Roofline» дает архитектурную основу для интерпретации этих результатов бенчмарка. Раздел «Модель Roofline» приложения «Основы машины» выводит уравнение Roofline и порог точки перехода из первых принципов, поэтому границу арифметической интенсивности, использованную здесь, можно восстановить для любого ускорителя.
Положение на кривой Roofline10 зависит от нагрузки. В этом расчете для A100 иллюстративная нагрузка прямого прохода ResNet-50 с высокой интенсивностью при большом размере батча имеет арифметическую интенсивность около 300 FLOP/байт, что выше точки перехода A100, и поэтому относится к вычислительно-ограниченным ядрам (He et al., 2016); (Choquette et al., 2021). Операции с меньшей интенсивностью попадают ниже точки перехода, в режим, ограниченный памятью: вывод BERT при размере батча один, если учитывать только трафик загрузки весов, имеет арифметическую интенсивность около 100 FLOP/байт и более низкий потолок производительности, чем пик. Увеличение размера батча переводит ту же нагрузку через точку перехода из режима, ограниченного памятью, в вычислительно-ограниченный режим (Pope et al., 2023). Раздел «Конкретный пример: анализ A100» приложения «Основы машины» проводит расчет от интенсивности к загрузке на A100 полностью, сопоставляя вычислительно-ограниченное ядро умножения матриц с ограниченным памятью поэлементным ядром, поэтому шаги переносятся на любую пару модели и аппаратуры.
Пример расчета вывода BERT показывает, как эти принципы Roofline переходят в конкретные прогнозы развертывания.
Анализ Roofline для вывода BERT
Задача: модель BERT-Base нужно развернуть для вывода на GPU A100. Руководство ожидает высокой загрузки GPU. Какую производительность стоит прогнозировать и как ее повысить?
Шаг 1: пределы аппаратуры.
- Пиковые вычисления: 312 TFLOP/s (тензорные ядра FP16)
- Пропускная способность памяти: 2,04 ТБ/с
- Точка перехода: 312 TFLOP/s ÷ 2,04 ТБ/с = 153 FLOP/байт
Любая нагрузка с арифметической интенсивностью ниже 153 FLOP/байт ограничена памятью, выше — вычислениями.
Шаг 2: характеристики BERT-base.
- Параметры: 110 млн = 220 МБ (FP16)
- FLOP на вывод: около 22 GFLOP (прямой проход при длине последовательности )
- Перемещение данных: около 220 МБ (нужно загрузить все веса из памяти)
- Арифметическая интенсивность: = 100 FLOP/байт (модель только по весам; см. примечание в основном тексте)
Шаг 3: прогноз производительности. Поскольку 100 FLOP/байт меньше 153 FLOP/байт, BERT при батче 1 ограничен памятью:
Шаг 4: оптимизация через батчинг. Увеличим размер батча до 32:
- Те же 220 МБ весов, но в 32 раза больше вычислений
- Новые FLOP: = 704 GFLOP
- Новая интенсивность: = 3 200 FLOP/байт
Поскольку 3 200 FLOP/байт больше 153 FLOP/байт, батч 32 ограничен вычислениями. Если реализация выдает 85 процентов пика:
Системный вывод: размер батча может превратить вывод, ограниченный памятью, в вывод, ограниченный вычислениями, за счет роста арифметической интенсивности. Показанные 85 процентов — допущение об эффективности реализации, а не прогноз модели Roofline. Батчинг также увеличивает задержку, потому что системе приходится ждать, пока накопятся запросы. Это фундаментальный компромисс между пропускной способностью и задержкой, который отражают сценарии MLPerf: SingleStream (батч = 1, оптимизация задержки) и Offline (максимальный батч, оптимизация пропускной способности).
Системные бенчмарки оценивают производительность на разных масштабах: от конфигураций из одного чипа до больших распределенных систем, и охватывают как обучение, так и вывод. На рисунке «Ошибка ImageNet и внедрение GPU» сопоставлены приведенные по источникам частоты ошибок top-5 на ImageNet (Russakovsky et al., 2015); (Krizhevsky et al., 2012) и реконструкция роста использования GPU среди участников соревнования по данным о числе заявок, которые NVIDIA приводила для этого соревнования (Gray, 2015). Два ряда показывают одновременные тенденции, а не причинную оценку того, какая часть роста точности пришла от аппаратуры, а не от алгоритмов, данных или практики обучения.
Ошибка ImageNet и внедрение GPU: приведенные по источникам частоты ошибок top-5 показаны рядом с долей GPU среди участников соревнования. Совпадение во времени не выделяет причинный вклад аппаратуры. Источники частот ошибок: (Russakovsky et al., 2015); (Krizhevsky et al., 2012). (Gray, 2015) приводит число заявок с GPU по годам.
Пример с ImageNet ставит внедрение GPU рядом со снижением частоты ошибок, не выделяя вклада ни одного из них; «Бенчмаркинг модели» возвращается к этой динамике через архитектурные вехи конкретных моделей. Однако эффективный системный бенчмаркинг требует понимать связь между характеристиками нагрузки и загрузкой аппаратуры. Современные ИИ-системы редко достигают теоретического пика производительности из-за взаимодействия вычислительных шаблонов, иерархий памяти и архитектур систем. Этот разрыв между теоретической и достигнутой производительностью определяет, каким должен быть осмысленный системный бенчмарк.
Реалистичные шаблоны загрузки аппаратуры необходимы для практичного проектирования бенчмарков. Как показал предыдущий анализ Roofline, загрузка GPU меняется с размером батча и архитектурой модели: значение 85 процентов для вычислительно-ограниченного случая — допущение, а при одиночном запросе, ограниченном памятью, загрузка составляет 65,4 процента. Эти шаблоны распространяются и на пропускную способность памяти: трансформеры с большим числом параметров и сверточные нагрузки с интенсивными активациями нагружают разные части иерархии памяти и по-разному влияют на достижимую производительность при разных уровнях точности.
Эффективные системные бенчмарки должны измерять реалистичную загрузку, а не теоретический пик, и это требование задает несколько границ охвата. Первое измерение — энергия: производительность на ватт сильно различается между платформами, а недогруженный ускоритель тратит непропорционально много энергии на единицу результата, что бьет и по операционным расходам, и по экологическому следу. Второе — распределение: обучение на нескольких узлах добавляет узкие места коммуникаций, эффекты сетевой топологии и накладные расходы на координацию, которые бенчмарки одного узла не отражают и которые заслуживают отдельного рассмотрения за пределами этой книги. В рамках одной машины, рассматриваемых здесь, бенчмаркинг нескольких GPU фокусируется на коммуникациях внутри узла, утилизации пропускной способности памяти между ускорителями и эффективности синхронизации градиентов между отдельными памятями ускорителей, связанными через NVLink или PCIe. Во всех этих случаях бенчмарк приобретает ценность только тогда, когда его рабочая точка совпадает с рабочей точкой развертывания, а не с той, что указана в спецификации.
Стандартизация силами сообщества
Метрики загрузки аппаратуры теряют смысл для сравнительной оценки систем без жестких, общих границ измерения. Если один бенчмарк включает предобработку данных на хосте и передачи по PCIe, а другой измеряет только выполнение ядра на устройстве, полученные задержки отражают несовместимые системные границы, а не архитектурную эффективность. Точно так же измерение мощности только на шине питания ускорителя не учитывает значительное энергопотребление процессоров хоста и вентиляторов корпуса. Независимые организации не могут решить это расхождение в одиночку, потому что у отдельных поставщиков есть коммерческие стимулы подгонять границы измерения под сильные стороны своей аппаратуры.
Надежные стандарты бенчмарков требуют широкого согласия многих организаций, чтобы исключить избирательную отчетность. В зрелых инженерных областях такое согласие оформляется в работе органов вроде рабочих групп IEEE (IEEE Standards Association, 2024) и технических комитетов ISO/IEC (ISO, 2024), которые задают строгие спецификации измерений, например IEEE 2416 (IEEE Standards Association, 2019) для моделирования энергопотребления систем. В системах машинного обучения, где архитектуры аппаратуры и структуры моделей быстро меняются, консорциумы вроде MLCommons дают операционную рамку, необходимую для поддержки живых наборов бенчмарков. Предоставляя открытые эталонные реализации вместе со строгими правилами проверки соответствия, эти консорциумы гарантируют, что числа производительности, полученные в разных лабораториях, отвечают одной и той же вычислительной работе.
Стандартизация системных бенчмарков требует формализовать таксономию D·A·M, чтобы оценки изолировали Машину без наложения изменений Алгоритма или Данных. Бенчмарк MLPerf Training обеспечивает это разделение, измеряя время обучения до заданного целевого качества, а не сырую пропускную способность в операциях с плавающей точкой или длительность эпохи (Mattson et al., 2020). Платформа, которая достигает высоких TFLOPS за счет агрессивного масштабирования низкой точности, не дает системной выгоды, если численный дрейф ухудшает сходимость модели или требует лишних эпох обучения. В своем закрытом дивизионе стандарт фиксирует и архитектуру модели, и численные гиперпараметры, чтобы наблюдаемый выигрыш производительности происходил от реальной эффективности аппаратуры и компилятора, например от утилизации пропускной способности межсоединений и слияния ядер, а не от непроверенных алгоритмических компромиссов.
Бенчмарк MLPerf Inference переносит эту дисциплину на ограничения развертывания в эксплуатации (Reddi et al., 2019). Ускоритель не может просто сообщать пиковую пропускную способность при бесконечном батчинге, если интерактивный сервис требует гарантированной отзывчивости. Бенчмарк задает разные сценарии оценки для разных физических режимов работы. Для интерактивных сред режим Server подает запросы по пуассоновскому процессу поступления при строгом соглашении об уровне обслуживания (SLA) по 99-му перцентилю задержки, а режим SingleStream измеряет минимальную задержку при размере батча один. Для неинтерактивной пропускной способности режим Offline насыщает вычислительные блоки заранее подготовленными батчами. Стандартизируя эти границы выполнения, бенчмарки сообщества учитывают задержки в очередях и передачи по PCIe между хостом и устройством, не позволяя поставщикам показывать числа пропускной способности, которые рушатся под производственным трафиком.
Стандарты сообщества задают воспроизводимые границы измерения, но не определяют физический масштаб, на котором проводится оценка. Измерение может быть направлено на изолированное ядро умножения матриц или профилировать сквозной запуск обучения на нескольких ускорителях, и каждый масштаб диагностирует свои физические узкие места. Глубина измерения определяет, какие архитектурные ограничения можно выделить, и на этом основана роль уровня детализации бенчмаркинга.
Уровни детализации бенчмаркинга
GPU-ядро, которое работает в 3 раза быстрее в изоляции, может не дать никакого сквозного ускорения, если конвейер загрузки данных не может насытить пропускную способность памяти устройства. Такое несоответствие диагностики делает уровень детализации оценки фундаментальным системным решением. Стандартизация задает, как поддерживать согласованность измерения, а уровень детализации бенчмаркинга задает, какую физическую границу измеряют. Системная проверка охватывает несколько архитектурных масштабов, от отдельных тензорных операций до распределенных производственных конвейеров, и каждый уровень диагностирует свои узкие места:
- Микробенчмарки изолируют отдельные компоненты: время выполнения ядра, утилизацию пропускной способности памяти и численное поведение одного слоя. Они показывают, где возникают низкоуровневые аппаратные неэффективности.
- Макробенчмарки оценивают составные подсистемы модели: сходимость обучения всей модели, пропускную способность конвейера вывода и метрики точности на наборе данных. Они выявляют, какие архитектурные компромиссы возникают при сочетании слоев.
- Сквозные бенчмарки измеряют полные рабочие конвейеры: задержку от запроса клиента до ответа, включая предобработку, время обучения до точности, включая ввод-вывод хранилища, и устойчивость модели на производственных распределениях данных. Они показывают, выполняет ли объединенная система требования сервиса в реальных условиях.
Методы оптимизации работают на разных уровнях детализации: слияние ядер воздействует на микроуровень выполнения, структурное прореживание меняет параметры на макроуровне, а отбор данных определяет сквозное обобщение. Системная проверка должна соответствовать этим границам. Изолированный микробенчмарк может показать значительное ускорение ядра, но макробенчмарк покажет, что возросший объем памяти активаций вынуждает уменьшить размер батча и снижает общую пропускную способность. Аналогично сквозной бенчмарк обнаруживает простои хранилища или десериализации на хосте, которые полностью невидимы на уровне ядра ускорителя.
«Уровни детализации бенчмаркинга» раскладывает эти уровни на стек ML, разделяя оценку на четыре физические области. Каждая область расширяет границу измерения: микробенчмарки изолируют выполнение ядра, макробенчмарки оценивают составные топологии моделей, прикладные бенчмарки включают управление данными на хосте и вспомогательную логику среды выполнения, а сквозные бенчмарки охватывают полное распределенное развертывание.
Уровни детализации бенчмаркинга: четырехпанельная блок-схема с уровнями микро-, макро-, прикладной и сквозной оценки. Каждая панель задает свою область оценки, от изолированных операций ядра до развертывания всей системы, что позволяет целенаправленно оптимизировать каждый уровень стека ML.
Микробенчмарки
Пока сквозные метрики регулируют соглашения об уровне обслуживания, оптимизация конвейера ускорителя требует выделить конкретные математические операции, которые тратят время выполнения и энергию. Микробенчмарки выполняют эту диагностическую роль, оценивая отдельные тензорные операции в изоляции и измеряя аппаратные примитивы, введенные в «Аппаратном ускорении». Когда профилируется медленный сервис вывода, макробенчмарки показывают суммарные нарушения задержки, но только микробенчмарки выявляют, доминирует ли во времени выполнения умножение матриц, проекции самовнимания, копирование памяти через межсоединение хост–ускоритель или поэлементные ядра функций активации.
Тензорные операции — главная цель микробенчмаркинга, потому что умножение матриц и свертки доминируют в арифметическом бюджете глубоких нейронных сетей. Высокооптимизированные библиотеки времени выполнения, такие как cuDNN11 (Chetlur et al., 2014), дают вручную настроенные реализации ядер под конкретные микроархитектуры. Микробенчмарки также оценивают отдельные функции активации (например, ReLU, Sigmoid и GELU) и структурные подмодули (например, проекции многоголового внимания или блоки прямого распространения трансформера) на стандартизированных формах входа. Наборы бенчмарков вроде DeepBench от Baidu (Baidu Research, 2016) формализовали эту методику: они оценивают сырые примитивы GEMM, свертки и коллективных коммуникаций на разных аппаратных платформах и отделяют эффективность выполнения на уровне кремния от накладных расходов диспетчеризации высокоуровневого фреймворка.
Измерение изолированных ядер требует строгого экспериментального контроля. Без дисциплинированных протоколов измерения динамическое изменение частоты аппаратуры, асинхронные очереди выполнения и состояние кэша вносят переходные артефакты, которые искажают время выполнения ядра.
Правила микробенчмаркинга
Чтобы измерять производительность ядра, а не артефакты аппаратуры, следуйте правилам системного детектива:
- Правило прогрева: не измеряйте итерации холодного старта как установившуюся производительность. Современная аппаратура использует DVFS (динамическое масштабирование напряжения и частоты) и динамический разгон; кэши, ядра и тактовые частоты нужно прогреть, прежде чем измеряемый цикл станет отражать устойчивое поведение.
- Правило дисперсии: сообщайте коэффициент вариации (CV) , где и — стандартное отклонение и среднее по повторным запускам. Разбирайтесь со значениями выше допуска протокола для конкретной нагрузки; частыми причинами служат фоновое дрожание ОС, тепловой троттлинг и конкуренция за память. Пять процентов не являются универсальной границей.
- Проверка «скорости света» (SOL): сравните достигнутую пропускную способность с Roofline. Если ядро выдает 10 TFLOP/s на H100 (пик около 989 TFLOP/s FP16 или около 1 979 TFLOP/s FP8 без разреженности), диагностический шаг — найти причину низкой загрузки (часто это задержка запуска ядер из-за слишком большого числа мелких ядер), прежде чем оптимизировать сам код.
- Правило состояния кэша: задавайте состояние кэша в соответствии с утверждением. Сбрасывайте или вытесняйте кэш L2, когда измеряете холодную пропускную способность динамической памяти с произвольным доступом (DRAM); сохраняйте прогретый кэш, когда измеряете повторное использование в установившемся режиме. Иначе номинальный результат DRAM может отражать пропускную способность кэша (около 5–10 ТБ/с), а не DRAM (около 1–2 ТБ/с).
- Правило барьера синхронизации: запуски ядер ускорителя асинхронны относительно центрального процессора хоста. Замер времени операций GPU часами процессора без явного барьера устройства (например,
torch.cuda.synchronize()) измеряет задержку постановки в очередь на хосте, а не выполнение ядра; ставьте барьеры синхронизации сразу до и после измеряемого участка или используйте события меток времени на стороне GPU (cudaEventRecord).
Профилировщик переводит эти правила измерения в физическую диагностику, раскладывая время выполнения ядра на три управляющих члена железного закона: перемещение данных, пропускную способность вычислений и накладные расходы задержки («Железный закон систем машинного обучения»).
Измерение членов железного закона
Переход от теории к трассе означает сопоставление уравнения железного закона из «Железного закона систем машинного обучения» с временной шкалой профилировщика (например, Nsight Systems или PyTorch Profiler).
Измерение члена данных
- Признак: ищите строку «Memory Throughput» или «DRAM Bandwidth».
- Формула: .
- Диагностика: если (например, близко к пику A100 в 2,04 ТБ/с), ядро ограничено памятью. Оптимизация вычислений () ничего не даст.
Измерение достигнутой вычислительной пропускной способности
- Признак: ищите «SM Active» или «Compute Throughput».
- Формула: .
- Диагностика: если И , система находится в «ловушке загрузки»: вероятно, ограничена задержкой (ядра слишком малы) или сеткой (недостаточно потоков).
Измерение члена задержки
- Признак: ищите разрывы (пустое место) между цветными полосами ядер на временной шкале.
- Формула: .
- Диагностика: пилообразный узор (вычисления, разрыв, вычисления, разрыв) указывает на высокие программные накладные расходы. Решение — слияние операторов, описанное в «Слиянии ядер», или CUDA Graphs, которые фиксируют повторяющуюся последовательность запусков GPU, чтобы среда выполнения воспроизводила ее с меньшими накладными расходами на диспетчеризацию центральным процессором.
Пока стандартизированные бенчмарки измеряют совокупную пропускную способность, профилировщики показывают физические механизмы, из-за которых выполнение останавливается. Системная диагностика использует два взаимодополняющих уровня инструментирования: профилировщики фреймворков и профилировщики ядер.
Профилировщики фреймворков
Профилировщики фреймворков, такие как PyTorch Profiler, фиксируют логическую трассу выполнения итерации обучения или вывода. Они отслеживают диспетчеризацию операторов на центральном процессоре хоста, определяют, перекрывается ли подготовка на хосте асинхронно с работой ускорителя, и выявляют, не остаются ли очереди вычислений без данных из-за конвейера загрузчика. Главная диагностическая метрика — разбивка времени шага по загрузке данных, задержке запуска на хосте, вычислениям устройства и коммуникации между устройствами. Эта разбивка показывает, какая подсистема ограничивает задержку итерации, прежде чем исследовать отдельные ядра.
Профилировщики ядер
Профилировщики ядер, такие как NVIDIA Nsight Systems и Nsight Compute, фиксируют физическое выполнение на кремнии ускорителя. Nsight Systems строит общую временную шкалу по потокам центрального процессора, вызовам API CUDA, передачам памяти и длительностям ядер и показывает пузыри сериализации. Nsight Compute проводит углубленный анализ отдельных вызовов ядер: измеряет заполненность варпов мультипроцессоров (SM), остановки выдачи инструкций и эффективность объединения обращений к памяти относительно аппаратного Roofline. Профилировщики ядер берут эти диагностики напрямую из блоков мониторинга производительности (PMU) на кристалле, снимая аппаратные счетчики трафика HBM, доли попаданий в кэш L2 и причины остановок конвейера без искажения динамики выполнения программной инструментацией.
Строгий процесс профилирования идет сверху вниз. Инженер начинает с профилировщика фреймворка, чтобы выделить доминирующий слой на временной шкале выполнения (например, выяснить, что блок многоголового внимания занимает 65 процентов задержки шага). Затем инженер применяет профилировщик ядер, чтобы разобрать этот слой до кремния (например, проверить, что ядро softmax достигает лишь малой доли пиковой пропускной способности памяти из-за несогласованных обращений к DRAM). Такой двухэтапный процесс предотвращает неверно направленную оптимизацию, потому что инженерные усилия направлены на лимитирующее физическое узкое место.
Эти гранулярные измерения позволяют точно оптимизировать ядра, но не показывают, как компоненты взаимодействуют при сборке полных моделей. Этот пробел закрывают макробенчмарки.
Макробенчмарки
Микробенчмарки проверяют, что изолированные операторы достигают высокой вычислительной эффективности и эффективности по памяти. Макробенчмарки определяют, сохраняются ли эти выигрыши, когда слои собраны в полную модель. Сборка слоев вводит физические взаимодействия, которые изолированные бенчмарки не видят: промежуточные тензоры активаций увеличивают пиковый объем памяти, последовательные запуски ядер открывают накладные расходы драйвера CPU на диспетчеризацию, а потоки обращений к памяти от предыдущих операций вытесняют общие строки кэша до того, как их смогут использовать последующие ядра.
Макробенчмарки решают центральную инженерную задачу: оценивают архитектуры моделей и конфигурации среды выполнения на стандартизированных нагрузках. Оценка модели фиксирует компромиссы, которые возникают при сборке слоев: точность обобщения на непросмотренных валидационных данных, динамическое выделение памяти при разных размерах батчей и длинах контекста, а также суммарную пропускную способность при разных шаблонах поступления запросов. Эти измерения взаимодействуют напрямую: архитектура с более высокой точностью может требовать объема активаций, который вынуждает уменьшить размер батча под ограничениями памяти устройства, и тогда падает вычислительная пропускная способность, которая оправдывала ее выбор.
Полную оценку модели требуют стандартизированных наборов данных, фиксированных эталонных задач и воспроизводимых определений метрик. В компьютерном зрении стандартные бенчмарки оценивают модели на ImageNet (Deng et al., 2024), измеряя точность классификации top-1 вместе с задержкой вывода при фиксированных размерах батча. В обработке естественного языка стандартизированные задачи оценивают перевод «последовательность в последовательность» и авторегрессивную генерацию, сопоставляя качество выхода со скоростью генерации токенов при заданных длинах контекста.
Несколько отраслевых наборов обеспечивают воспроизводимые сравнения моделей на разных платформах. Набор MLPerf стандартизирует оценку в дата-центрах, краевых устройствах, мобильных устройствах и микроконтроллерах, как описано в «Бенчмарках вывода MLPerf». Для ресурсно-ограниченных встраиваемых целей MLMark от EEMBC измеряет пропускную способность вывода и энергопотребление при жестких бюджетах памяти, а набор AI-Benchmark (Ignatov and Timofte, 2024) оценивает мобильные системы на кристалле с гетерогенными вычислительными блоками.
Сквозные бенчмарки
Сквозные бенчмарки охватывают весь производственный конвейер, фиксируя все этапы, необходимые для приема сырых данных, получения предсказаний модели и доставки результатов потребителям. Микро- и макробенчмарки сосредоточены на выполнении в ускорителе, но реальные конвейеры обслуживания часто находят основные узкие места за пределами самой модели.
Предобработка данных — первая фаза конвейера, которая превращает сырые внешние входные данные в тензорные представления, готовые для модели. В конвейерах компьютерного зрения прием изображений требует декодирования сжатых форматов (например, распаковки JPEG), изменения размера, обрезки и нормализации цвета. Когда эти шаги выполняются на центральных процессорах хоста без аппаратного ускорения, они могут занимать в несколько раз больше времени, чем вывод модели на современном ускорителе, и простаивающие тензорные ядра ждут передач из памяти хоста. Аналогично в конвейерах для естественного языка токенизация подслов и динамическое дополнение последовательностей на центральном процессоре хоста часто ограничивают пропускную способность обслуживания. Постобработка создает похожие узкие места задержки: в детекции объектов нужны подавление не-максимумов (NMS) и преобразования координат ограничивающих рамок, которые создают последовательные остановки выполнения, если их плохо встроить в граф выполнения.
Инфраструктура распределенной системы накладывает дополнительные ограничения производительности помимо вычислительной сети. Удаленные хранилища ограничивают пропускную способность обучения при чтении больших мультимодальных наборов данных, а насыщение сетевой карты (NIC) в распределенных кластерах тормозит коллективные коммуникации. Сквозные бенчмарки должны измерять пропускную способность конвейера при реалистичных сетевых задержках, параллельных потоках запросов и реальных ограничениях ввода-вывода хранилища, чтобы обеспечить воспроизводимую оценку развертывания как интегрированной системы.
Публичные наборы бенчмарков редко измеряют хранилище, сеть и вычисления в рамках одного единого протокола. MLPerf Training и Inference оценивают сквозные сценарии ближе, чем изолированные тесты операторов, однако их закрытые дивизионы намеренно стандартизируют загрузку входных данных, чтобы изолировать производительность ускорителя от изменчивости хранилища и сети. Поэтому сквозной бенчмаркинг в продакшене остается преимущественно внутренней инженерной практикой, которая опирается на распределенную трассировку и телеметрию эксплуатации на живых распределениях запросов.
Компромиссы уровней детализации и критерии выбора
«Сравнение уровней детализации бенчмарков» сопоставляет диагностический фокус, охват и инженерные компромиссы трех уровней детализации бенчмаркинга. Микробенчмарки изолируют низкоуровневые операции, чтобы направлять оптимизацию ядер и выбор аппаратуры, макробенчмарки оценивают полные модели, чтобы направлять архитектурные решения, а сквозные бенчмарки измеряют полные конвейеры, чтобы производственные развертывания удовлетворяли требованиям реального сервиса.
| Компонент | Микробенчмарки | Макробенчмарки | Сквозные бенчмарки |
|---|---|---|---|
| Фокус | Отдельные операции | Полные модели | Полный системный конвейер |
| Охват | Тензорные операции, слои, активации | Архитектура модели, обучение, вывод | Извлечение, преобразование, загрузка; модель; инфраструктура |
| Пример | Производительность сверточного слоя в cuDNN | ResNet-50 на ImageNet | Промышленная рекомендательная система |
| Преимущества | Точная идентификация узких мест, оптимизация компонентов | Сравнение архитектур моделей, стандартизированная оценка | Реалистичная оценка производительности, системные выводы |
| Ограничения | Может пропускать эффекты взаимодействия | Ограниченные сведения об инфраструктуре | Сложно стандартизировать, часто закрыты |
| Типичное применение | Выбор аппаратуры, оптимизация операций | Выбор модели, сравнение в исследованиях | Оценка производственной системы |
Уровни детализации бенчмарков: разные области бенчмарка нацелены на разные этапы разработки системы ML. Микробенчмарки изолируют отдельные операции для низкоуровневой оптимизации, макробенчмарки оценивают полные модели, чтобы направлять архитектурный выбор, а сквозные бенчмарки оценивают производительность всей системы в эксплуатации.
Выбор одного уровня детализации редко бывает достаточным, потому что бенчмаркинг содержит внутренний компромисс между диагностической изоляцией и точностью отражения эксплуатации. На рисунке «Изоляция и репрезентативность» показан этот спектр: микробенчмарки располагаются на границе высокой изоляции, а сквозные бенчмарки — на границе высокой репрезентативности. Микробенчмарки точно указывают физический предел ядра (например, насыщение пропускной способности памяти или низкую заполненность варпов), но не улавливают давление памяти между слоями или накладные расходы хоста. Напротив, сквозные бенчмарки отражают реальную задержку эксплуатации при живом распределении трафика, но скрывают первопричины, когда резко растет хвостовая задержка.
Изоляция и репрезентативность: ключевой компромисс в гранулярности бенчмаркинга. Микробенчмарки дают высокую диагностическую точность, но ограниченную связь с реальностью, а сквозные бенчмарки отражают реальное поведение системы, но дают менее точные сведения о компонентах. Эффективная оценка ML-системы требует стратегического сочетания всех трех уровней.
Этот компромисс напрямую ложится на таксономию D·A·M. Микробенчмарки оценивают физическую способность Машины () выполнять примитивный Алгоритм (). Макробенчмарки оценивают, как Алгоритм () организует потоки тензорных данных по составным слоям на Машине (). Сквозные бенчмарки оценивают, как прием исходных Данных () из внешнего хранилища и сетевой инфраструктуры взаимодействует и с Алгоритмом, и с Машиной под производственной нагрузкой. Систематическая инженерия производительности требует оценивать все три уровня, чтобы локальные оптимизации ядер переходили в ускорение всей системы.
Выбор подходящего уровня детализации задает физическую границу измерения, но ее задание — лишь первый шаг. Полный бенчмарк также требует определить операционные составляющие: постановку задачи, репрезентативные наборы данных, целевые модели и метрики оценки. Без этих конкретных компонентов измерения на любом уровне детализации не дают выводов, на которые можно опереться в инженерной работе.
Компоненты бенчмарка
Выбор между микро-, макро- и сквозной детализацией определяет, что бенчмарк способен диагностировать, но каждый бенчмарк должен задавать задачу, данные, модель, метрики, обвязку, системный контекст и правила запуска, которые делают результаты интерпретируемыми. Микробенчмарки изолируют конкретные аппаратные ограничения выполнения, например пропускную способность потоковой памяти или пропускную способность тензорных ядер, с помощью синтетических тензорных операций. Макробенчмарки оценивают выполнение полного графа на стандартизированных наборах данных вроде ImageNet. Сквозные бенчмарки охватывают весь конвейер: прием данных, передачи между хостом и устройством, сборку батчей и выполнение вывода. На всех трех уровнях компоненты бенчмарка нельзя выбирать изолированно: каждый из них задает физические и алгоритмические граничные условия для следующего.
Эти компоненты связаны между собой в конвейер оценки, структурированный таксономией D·A·M (Данные, Алгоритм и Машина). Рабочий процесс на рисунке «Компоненты рабочего процесса бенчмарка» проходит девять этапов промышленного бенчмарка обнаружения аномалий звука, от постановки задачи через квантование до развертывания на встраиваемом микроконтроллере ARM. Каждый этап задает граничные условия для следующего: постановка задачи определяет частоту дискретизации звука и представление входа (Данные); свойства набора данных и цель задачи определяют допустимые архитектуры моделей (Алгоритм); а аппаратные пределы микроконтроллера, такие как емкость SRAM, энергетический бюджет и сроки задержки реального времени, диктуют квантование INT8 и компиляцию ядер с эффективным использованием памяти (Машина). Обнаружение аномалий наглядно показывает эту связанность всего стека: бенчмарк, который измеряет только точность классификации или только сырую задержку вывода, пропускает взаимодействия между этапами, где решение на любом этапе сужает пространство допустимых решений на последующих.
Компоненты рабочего процесса бенчмарка: читайте слева направо. Каждый этап задает допущения для следующего и ведет задачу обнаружения аномалий звука от определения проблемы до воспроизводимого запуска бенчмарка на встраиваемом устройстве.
Оценка ML-системы требует совмещать статистические метрики задачи с метриками физической эффективности. Квантование и прореживание уменьшают объем параметров и трафик шины памяти, но меняют численное представление и рискуют ухудшить точность задачи. Бенчмарк, который фиксирует время выполнения без статистической точности (например, AUC или ошибки классификации), вознаграждает агрессивные приближения, которые дают некорректные выходы; и наоборот, отчетность о точности без задержки или потребления памяти скрывает, удовлетворяет ли модель физическим ограничениям целевой системы. Интерпретация этих результатов требует связать арифметическую интенсивность нагрузки (отношение операций к байтам, переданным из памяти) с точкой перехода машины по модели Roofline и определить, снимает ли оптимизация узкое место пропускной способности памяти или узкое место вычислительной пропускной способности.
Обвязка измерений и правила запуска задают экспериментальный контроль, который делает эти оценки воспроизводимыми. Без строгих протоколов выполнения измеренное время отражает шум операционной системы и аппаратуры, а не стоимость выполнения алгоритма. Строгая обвязка бенчмарка задает итерации прогрева кэшей, чтобы выйти на установившееся поведение памяти, фиксирует тактовые частоты процессора, чтобы динамическое масштабирование напряжения и частоты (DVFS) не вносило переходных скачков задержки, закрепляет выделения памяти хоста, чтобы не тратить время на страничные ошибки, и записывает распределения хвостовой задержки (, ) наряду со средней задержкой, чтобы выявить конкуренцию за шину памяти и задержки в очередях. Эти операционные компоненты гарантируют, что измерения отражают истинные физические пределы системы и создают основу для рассмотрения каждого компонента подробно, начиная с постановки задачи.
Постановка задачи
Каждый бенчмарк начинается с фиксации вычислительных и эксплуатационных границ нагрузки. Без явной спецификации задачи оптимизации аппаратуры и программного обеспечения нельзя оценить на равных: изменение разрешения входа, численного типа данных или срока задержки принципиально меняет физическую работу, которую требуется выполнить машине. Как показано на примере системы обнаружения аномалий звука в «Компонентах рабочего процесса бенчмарка», приложение превращает сырые сигналы датчиков в эксплуатационные решения. В любой области, будь то задачи обработки естественного языка, такие как машинный перевод, ответы на вопросы (Hirschberg and Manning, 2015) и классификация текстов, или задачи компьютерного зрения, такие как детекция объектов и сегментация изображений (Everingham et al., 2009); (Lin et al., 2014), полная постановка задачи задает три конкретные спецификации: спецификацию входа, спецификацию выхода и спецификацию производительности.
Спецификации входа и выхода устанавливают контракт перемещения данных и определяют точную область измеряемого выполнения. Спецификация входа фиксирует размерности тензоров, поведение батчинга, численные представления (например, FP16 или INT8) и скорости приема. В конвейере обнаружения аномалий звука потоковая передача одноканального звука с частотой 16 кГц в фиксированных окнах по одной секунде задает жесткую скорость приема и требования к буферу памяти еще до начала извлечения признаков. Спецификация выхода, напротив, определяет границу окончания вычислений. Бенчмарки часто вносят смещение измерения, засекая только прямой проход ускорителя и игнорируя постобработку на центральном процессоре, которая превращает сырые выходы тензоров в пригодные для использования решения. Надежная спецификация выхода определяет, выдает ли система сырые логиты, промежуточные эмбеддинги или окончательные бинарные флаги аномалий, учитывая любые последующие ядра пороговой обработки или редукции, которые потребляют пропускную способность памяти хоста.
Спецификация производительности задает эксплуатационные рамки, которые определяют, жизнеспособна ли оптимизация. Цифры неограниченной пропускной способности бессмысленны, если статистическая точность падает ниже приемлемых порогов, а высокая средняя пропускная способность не спасает систему, которая нарушает соглашения об уровне обслуживания (SLA) по задержке. Для обнаружения аномалий в реальном времени спецификация производительности связывает целевую метрику качества (например, площадь под ROC-кривой) с аппаратными пределами выполнения: детерминированный потолок хвостовой задержки (например, время ответа на уровне 99-го перцентиля ), устойчивая пропускная способность, соответствующая скорости поступления данных, и строгий объем резидентной памяти, который предотвращает нехватку памяти на ускорителях с ограниченным ресурсом. Задавая эти три границы заранее, бенчмарк гарантирует, что последующие этапы, от построения набора данных до настройки обвязки измерений, оценивают оптимизации системы относительно истинных эксплуатационных ограничений развертывания.
Стандартизированные наборы данных
Постановка задачи настолько хороша, насколько хороши данные, на которых ее оценивают. Стандартизированные наборы данных обеспечивают, что все модели проходят проверку в одинаковых условиях, что позволяет напрямую сравнивать разные подходы. Без них каждая команда оценивала бы модели на закрытых данных, и сравнение между лабораториями стало бы невозможным.
В компьютерном зрении эталонными стандартами служат ImageNet (Deng et al., 2024); (Deng et al., 2009), COCO (Lin et al., 2014) и CIFAR-10 (Krizhevsky, 2009); в обработке естественного языка схожую роль играют SQuAD12 (Rajpurkar et al., 2016), GLUE13 (Wang et al., 2018) и WikiText (Merity, 2016); (Merity et al., 2016), каждый из которых охватывает набор уровней сложности и краевых случаев.
Выбор набора данных — первое место, где бенчмарк может потерять связь с реальностью эксплуатации. В примере обнаружения аномалий звука («Компоненты рабочего процесса бенчмарка») набор данных должен включать репрезентативные записи нормальной работы вместе с полноценными примерами аномальных состояний. Для разных аудиозадач существуют специализированные коллекции: ToyADMOS14 (Koizumi et al., 2019) поддерживает контролируемые исследования обнаружения аномалий, а Google Speech Commands (Warden, 2018) — распознавание ключевых слов. Хорошие наборы данных для бенчмарков должны уравновешивать два конкурирующих требования: точно отражать вызовы реального мира и сохранять достаточную сложность, чтобы различать производительность моделей. Упрощенные наборы вроде ToyADMOS ценны для разработки методики, но могут не передавать всей сложности производственных сред.
Выбор модели
Когда задача и набор данных зафиксированы, бенчмарк должен задать архитектуру модели и ее базовые реализации. В системном бенчмаркинге модель определяет нагрузку на выполнение: ее вычислительный граф задает арифметическую интенсивность, объем памяти и топологию коммуникаций. Выбор модели для бенчмарка определяет, отражают ли измеренные различия архитектурную эффективность, оптимизации среды выполнения или чистую мощность ускорителя. Оценка архитектурной модификации требует, чтобы среда выполнения и целевая аппаратура оставались неизменными, как установлено в «Архитектурах нейронных сетей». Наоборот, оценка аппаратных платформ или программных движков выполнения, рассмотренных в «Фреймворках машинного обучения», требует стандартизации на фиксированном репрезентативном графе модели, чтобы различия в пропускной способности отражали эффективность выполнения, а не математические изменения нагрузки.
Базовые модели задают эмпирическую точку отсчета для целевой области. Системные бенчмарки опираются не на игрушечные алгоритмы, а на канонические нагрузки, вычислительные профили и шаблоны доступа к памяти которых хорошо изучены. В обработке языка BERT15 служит стандартной базой, потому что его многоголовое самовнимание и плотные блоки прямого распространения нагружают одновременно матричные умножения, ограниченные вычислениями, и редукции, ограниченные пропускной способностью памяти. Однако спецификация базовой модели не может ограничиваться математическим графом. Две реализации одной архитектуры в разных фреймворках или средах выполнения часто ведут себя по-разному. Различия в слиянии операторов, например в слиянии нормализации и активации непосредственно в выходные эпилоги GEMM, чтобы не обращаться в HBM, а также различия в накладных расходах запуска ядер и поведении аллокатора памяти, могут превышать эффект небольших архитектурных изменений. Поэтому бенчмарк должен стандартизировать реализацию среды выполнения наряду с математической моделью.
Бенчмарк должен оценивать модель в двух различных эксплуатационных режимах, каждый из которых определяется своими физическими узкими местами. При обучении главное ограничение — емкость памяти и пропускная способность межсоединений: хранение активаций прямого прохода, градиентов обратного прохода и состояний оптимизатора на нескольких ускорителях ограничивает размер батча и требует высокоскоростных коллективных коммуникаций. Поэтому бенчмарки обучения измеряют время до точности при фиксированных критериях сходимости, а не только скорость итераций. При выводе обратные проходы и состояния оптимизатора исчезают, и узкое место смещается к хвостовой задержке при строгих соглашениях об уровне обслуживания (SLA) или к пропускной способности памяти во время авторегрессивного декодирования. Перевод модели в производство часто требует снижения точности: квантования весов и активаций из FP32 или BF16 в INT8 или FP8. Квантование вдвое уменьшает трафик памяти и удваивает пропускную способность тензорных ядер, но требует калибровки, чтобы численная ошибка не ухудшила качество на валидации. Поскольку архитектура может эффективно обучаться, но не выдерживать строгих SLA по задержке, бенчмарк должен оценивать оба эксплуатационных режима с помощью отдельных доменных метрик.
Метрики оценки
Метрики оценки16 переводят поведение модели в числа, которые можно сравнивать, ранжировать и использовать для инженерных решений. Задача состоит в выборе правильных чисел: метрика, которая учитывает точность, но игнорирует задержку, может признать победителем модель, слишком медленную для производства; метрика, которая вознаграждает пропускную способность и игнорирует энергию, может оптимизировать бюджет развертывания, которого не существует.
«Таксономия метрик бенчмаркинга ML» классифицирует меры оценки по сбою, который каждая из них выявляет, и контексту развертывания, который она обслуживает.
| Категория | Метрика | Единица | Основной случай применения |
|---|---|---|---|
| Точность | Top-1/Top-5 точность | Процент | Классификация |
| mAP (средняя точность) | Оценка от 0 до 1 | Детекция объектов | |
| BLEU/ROUGE | Оценка от 0 до 100 | Генерация текста (NLP) | |
| Перплексия | Оценка (меньше — лучше) | Языковое моделирование | |
| Пропускная способность | Образцов в секунду | Образцы/с | Пакетный вывод |
| Пропускная способность по токенам | Токены/с | Вывод LLM | |
| Время обучения | Часы/дни | Бенчмарки обучения | |
| Задержка | Задержка p50 | Миллисекунды | Медианное время ответа |
| Задержка p99 | Миллисекунды | Хвостовая задержка (SLA) | |
| Задержка первого токена | Миллисекунды | Отзывчивость LLM | |
| Эффективность | Образцов в секунду на ватт | Образцы/с/Вт | Энергоэффективность |
| Точность на FLOP | Процент/PFLOP | Алгоритмическая эффективность | |
| TCO на вывод | $/вывод | Экономическая эффективность |
Таксономия метрик бенчмаркинга ML: метрики, сгруппированные по категории оценки, единице измерения и основному случаю применения. Метрики точности описывают качество модели, метрики пропускной способности и задержки отражают скорость системы, а метрики эффективности объединяют несколько измерений. Выбор метрики, подходящей для контекста развертывания, часто важнее, чем доведение любой отдельной метрики до максимума.
Метрики из «Таксономии метрик бенчмаркинга ML» выявляют физические компромиссы, которые определяются архитектурой ускорителя. Пропускная способность измеряет совокупную мощность обработки, а задержка измеряет время завершения отдельного запроса. Эти две цели прямо конфликтуют на границе аппаратуры. Максимизация пропускной способности требует объединять запросы в большие батчи, чтобы амортизировать пропускную способность памяти при загрузке весов на несколько входов, повышая арифметическую интенсивность на тензорных блоках. Этот механизм батчинга увеличивает задержку на один образец: отдельные запросы ждут в очереди, пока формируется батч, а большие матричные операции дольше выполняются. Кроме того, средняя арифметическая задержка маскирует поведение хвоста. Дрожание очередей, остановки выделения памяти и тепловой троттлинг ускорителя заставляют времена выполнения расходиться: система со средней задержкой 10 мс может показывать задержку 99-го перцентиля (p99) в 500 мс, которая нарушает соглашения об уровне обслуживания. Поэтому бенчмарки должны сообщать распределения перцентилей (p50, p95, p99), а не средние значения. Составные метрики вроде образцов в секунду на ватт сводят несколько измерений в один скаляр, что облегчает высокоуровневое сравнение, но скрывает, где находятся узкие места. Отчетность по атомарным метрикам (распределениям задержки, пропускной способности и потреблению мощности) наряду с составными показателями позволяет выделить, какое физическое ограничение сдерживает систему.
Метрики конкретной задачи оценивают алгоритмическое измерение, показывая, решает ли модель статистическую задачу. Задачи классификации оценивают точность (долю правильных предсказаний), precision, recall и F1-меру (Sokolova and Lapalme, 2009). Precision и recall отделяют долю истинно положительных срабатываний от ложных тревог, что необходимо при несбалансированных классах. Задачи непрерывной оценки опираются на среднеквадратичную ошибку (MSE) или среднюю абсолютную ошибку (MAE), а генерация последовательностей использует специализированные правила подсчета, такие как BLEU17, который измеряет модифицированную точность n-грамм относительно эталонных человеческих переводов (Papineni et al., 2002).
Метрики задачи оценивают алгоритмическое качество изолированно, но жизнеспособность развертывания зависит от физических ограничений машины. Емкость модели, измеряемая числом параметров и объемом памяти, определяет, помещаются ли веса в SRAM на кристалле или в память ускорителя, или же они переходят через высокоуровневые межсоединения с большой задержкой. Задержка выполнения на один вывод определяет, укладывается ли система в сроки реального времени, а энергопотребление на вывод (в джоулях или милливаттах) ограничивает тепловыделение и время работы батареи. Эксплуатационные задачи поддержания этих метрик в производственных средах рассматриваются в стратегиях развертывания (глава «MLOps»).
Бенчмарки также должны учитывать чувствительность измерений к программным средам выполнения. Как установлено в «Обучении моделей», разные фреймворки по-разному обрабатывают вычисление функции потерь, слияние операторов и накопление градиентов, что меняет опубликованные числа бенчмарков. Тонкие различия реализации, например то, использует ли пакетная нормализация в режиме оценки статистики генеральной совокупности или скользящие моменты мини-батчей, либо как переупорядочиваются неассоциативные сложения чисел с плавающей точкой в ядрах редукции, сдвигают измеряемую точность и задержку настолько, что при узком разрыве между моделями рейтинг бенчмарка может перевернуться.
Эта взаимозависимость статистического качества и аппаратных ограничений хорошо видна на обнаружении аномалий. В промышленном мониторинге сильный дисбаланс классов делает сырую точность обманчивой: если аномалии составляют лишь 0,1 процента рабочих образцов, тривиальная модель, которая постоянно предсказывает нормальную работу, достигает точности 99,9 процента, но не обнаруживает ни одной неисправности. Поэтому бенчмарк должен сообщать площадь под ROC-кривой (AUC), чтобы оценивать различение на всем диапазоне порогов решения, наряду с физическими метриками ресурсов.
Такой подход с несколькими метриками управляет конвейером обнаружения аномалий, который сбалансирован по четырем одновременным ограничениям: размер модели 270 тыс. параметров, помещающийся во встраиваемую SRAM, время обработки 10,4 мс на вывод для поддержания дискретизации в реальном времени, точность обнаружения 0,86 по AUC и энергопотребление 516 мкДж на вывод в рамках целевого бюджета батареи. Оценка по всем четырем осям не дает объявить модель лучшей, если ее выигрыш в точности получен за счет архитектуры, слишком большой для памяти, или слишком прожорливой, чтобы выдержать постоянное развертывание.
Обвязка бенчмарка
Метрики определяют, что измерять, а обвязка бенчмарка определяет, как это измерять. Обвязка — это программный и инструментальный каркас, который подает входы в тестируемую систему, координирует выполнение, собирает трассы времени и мощности и обеспечивает воспроизводимость. В системе ML измерение выполнения до уровня железа требует учитывать асинхронную границу между центральным процессором хоста и ускорителем. Когда программа на хосте запускает шаг вывода или обучения, среда выполнения фреймворка лишь ставит команды в очередь работы ускорителя (например, поток CUDA или буфер команд аппаратуры) и сразу возвращает управление. Наивный таймер, обернутый вокруг вызова на уровне хоста, измеряет только эту диспетчеризацию в очередь длительностью в доли микросекунды, а не реальное выполнение на устройстве. Строгая обвязка вставляет аппаратные барьеры синхронизации или считывает события меток времени на устройстве, так что записанные времена отражают полное выполнение ядер и передачи памяти по шине.
Архитектура обвязки должна соответствовать эксплуатационному режиму целевого развертывания. В серверных средах обвязка создает параллельный поток запросов с помощью генератора нагрузки с открытым циклом, часто задавая интервалы между поступлениями по распределению Пуассона.18 Обвязка с открытым циклом отправляет запросы по независимому расписанию поступления, невзирая на отзывчивость сервера. Такое разделение выявляет задержки в очередях и хвостовую задержку (например, время ответа на уровне p99), когда всплески поступления насыщают доступные вычисления. Напротив, обвязка с замкнутым циклом, которая дожидается ответа перед отправкой следующего запроса, вносит скоординированный пропуск (coordinated omission): она искусственно регулирует трафик и скрывает накопление очереди во время деградации сервера. Наоборот, пакетная обработка офлайн вовсе исключает расписание поступления. Обвязка заранее готовит большие входные батчи в памяти, чтобы насытить исполнительные блоки ускорителя, максимально загрузить пропускную способность памяти и измерить устойчивую пиковую пропускную способность.
Во встраиваемых и краевых развертываниях нагрузки не являются ни стохастическими сетевыми потоками, ни неограниченными пакетными очередями. Входы поступают последовательно от физических датчиков (например, аудиопреобразователя или датчика изображения) по фиксированным аппаратным тактам дискретизации. Обвязка должна подавать эти потоки датчиков через прямой доступ к памяти (DMA) в ограниченные буферы SRAM на кристалле и проверять, что каждый вывод завершается до срока поступления следующего отсчета, иначе буфер переполнится. Кроме того, краевые обвязки должны включать физическую инструментацию, например шунтирующие резисторы или внешние анализаторы мощности, чтобы измерять напряжение и ток в активных циклах выполнения и в состояниях низкого энергопотребления, фиксируя реальную энергию, затраченную на вывод.
Воспроизводимость требует изолировать бенчмарк от вариаций среды выполнения между запусками. Современные ускорители и среды выполнения демонстрируют значительные переходные процессы холодного старта. Первые проходы вывода запускают выделение памяти по требованию, динамическую JIT-компиляцию, инициализацию драйвера и перенос весов из вторичного хранилища в память ускорителя. Воспроизводимая обвязка должна выполнить неизмеряемые итерации прогрева, пока кэши не заполнятся, распределители памяти не стабилизируются и кремний не выйдет на тепловой установившийся режим, и только потом начинать измеряемый цикл. Чтобы предотвратить дрейф измерений, среда испытаний должна фиксировать тактовые частоты ускорителя и центрального процессора, отключая динамическое масштабирование напряжения и частоты (DVFS) и завершая конкурирующие фоновые процессы. Наконец, телеметрия должна минимизировать эффект наблюдателя, записывая метки времени выполнения и счетчики производительности в неблокирующие, заранее выделенные буферы памяти. Так инструментация измерения не отнимает пропускную способность памяти и не меняет конвейер выполнения тестируемой системы.
Спецификации системы
Спецификации системы дополняют обвязку, которая управляет условиями выполнения: они описывают вычислительную среду, то есть физический и программный стек, который задает границы Машины () системы. Без полных спецификаций измеренную пропускную способность или задержку нельзя интерпретировать. Метрика выполнения отражает взаимодействие арифметической интенсивности алгоритма и физических пределов машины: пиковой арифметической пропускной способности, пропускной способности иерархии памяти и задержки межсоединений. Цифра пропускной способности, приведенная без модели ускорителя, пропускной способности памяти или рабочих тактовых частот, скрывает, происходит ли наблюдаемое ускорение от эффективности алгоритма или от более производительного кремния.
Строгие спецификации аппаратуры фиксируют ограничения, которые определяют выполнение ядер и перемещение данных. На уровне ускорителя документация должна содержать микроархитектуру, вычислительные возможности, число активных ядер, базовые и разогнанные тактовые частоты и пределы мощности (расчетная тепловая мощность, TDP), а также иерархию памяти устройства: объем HBM, ширину шины памяти и пиковую пропускную способность памяти. Для многоускорительных конфигураций, масштабируемых от одного до восьми устройств, спецификации должны описывать интерфейс шины между хостом и устройством (например, линии PCIe) и межускорительную структуру: идут ли коммуникации по выделенным линкам «точка — точка» (например, NVLink) или через общие коммутаторы PCIe. Поскольку распределенные коллективные операции, например all-reduce (редукция по всем узлам), ограничены топологией межсоединений и бисекционной пропускной способностью, отсутствие спецификаций межсоединений скрывает источник узких мест коммуникации.
Программный стек не менее важен, поскольку он определяет, как математические операции отображаются на исполнительные блоки. Спецификации должны фиксировать ядро операционной системы, драйверы устройств, низкоуровневые вычислительные среды выполнения (например, CUDA или ROCm) и библиотеки математики поставщика (например, cuBLAS или CUTLASS). На уровне фреймворка учет версий среды выполнения (например, PyTorch или JAX), режимов исполнения (жадного режима eager и компиляции на уровне графа через torch.compile) и оптимизаций слияния ядер отделяет накладные расходы фреймворка от производительности модели. Наконец, спецификации должны количественно описывать эксплуатационные показатели мощности и энергии: устойчивую мощность платы, события теплового троттлинга и энергию на токен или образец. Документирование этих рабочих рамок гарантирует, что измеренное ускорение не является артефактом неограниченного энергопотребления или кратковременного разгона тактовой частоты.
Правила запуска
Спецификации системы описывают, на чем запускается бенчмарк, а правила запуска определяют, как он запускается. Эти процедурные ограничения делают результаты интерпретируемыми и повторяемыми, что сложнее, чем кажется, в области, где стохастические процессы (инициализация весов, перемешивание данных и маски дропаута) означают, что два запуска на одинаковой аппаратуре могут дать разные числа. Протокол может фиксировать начальные значения генератора (seed) и порядок данных, когда изолируются системные эффекты, или требовать повторных запусков и пороги качества, когда стохастическая вариация входит в нагрузку. В любом случае политика начальных значений и известные источники недетерминированности должны быть явными.
Документирование гиперпараметров столь же важно. Изменение скорости обучения может сдвинуть сходимость и итоговую точность, поэтому воспроизводимый результат фиксирует каждую настройку конфигурации, которая может повлиять на исход. Аналогично нужно указывать версии наборов данных, разбиения и предобработку. Когда конфиденциальность или лицензия не позволяют передавать данные напрямую, отчет должен прямо указывать это ограничение и сохранять достаточно сведений о происхождении данных и преобразованиях, чтобы судить о сопоставимости.
Происхождение кода завершает цепочку воспроизводимости. Строгие протоколы бенчмарков сохраняют версию реализации, а не только модель: важен также код предобработки, обучения и оценки, и должно быть указано, может ли этот код быть передан. Эталонные наборы могут распространяться в виде контейнеризованных сред, которые инкапсулируют зависимости и конфигурации, а экспериментальные журналы сохраняют метрики обучения, контрольные точки и любые корректировки в ходе запуска. Вместе эти записи превращают однократное измерение в свидетельство, которое другая команда может проверить и, если доступ позволяет, воспроизвести.
Интерпретация результатов
Получить сырые числа бенчмарка может любой, для их интерпретации нужно понимать условия, в которых они получены, статистическую достоверность и эксплуатационные границы, определяющие, переносятся ли эти числа на поведение в эксплуатации.
Одна отдельная метрика, такая как задержка или точность, редко показывает, успешна ли оптимизация в развертывании. Оценка модели компьютерного зрения на устройстве с ограниченными ресурсами показывает, как пропускная способность, объем памяти и точность модели взаимодействуют при жестких аппаратных границах.
Бенчмаркинг модели компьютерного зрения для краевого развертывания
Сценарий: команда краевого ИИ оценивает MobileNetV2 для фотоловушки на Raspberry Pi 4 при жестких ограничениях по задержке и размеру модели (Sandler et al., 2018).
Диагностика: выполнение в FP32 дает задержку 120 мс (8,3 FPS) и размер 14 МБ. INT8-квантование ускоряет вывод в 3,4 раза до 35 мс (28,6 FPS) и уменьшает размер модели в 4 раза, ценой снижения точности Top-1 на 0,9 процентного пункта.
Системный урок: бенчмаркинг краевых моделей требует оценки многомерных компромиссов между задержкой, точностью и объемом памяти. Квантование позволяет добиться высокой пропускной способности на краю сети, когда умеренное падение точности устраивает требования продукта.
Чтобы перевести числа бенчмарка в инженерные решения, нужны две методологические проверки: архитектурное равенство и статистическая строгость. Во-первых, сравнения должны обеспечивать строгое архитектурное равенство. Сравнение ResNet-50 с MobileNet смешивает эффективность сверточных операторов с числом параметров. Аналогично сравнение выполнения в FP32 и INT8 смешивает алгоритмическую точность с трафиком памяти и пропускной способностью исполнительных блоков: INT8 в 4 раза уменьшает передачи DRAM и выполняется на выделенных конвейерах целочисленной арифметики. Корректные сравнения требуют держать постоянными архитектуру модели, численный формат, размер батча, модель аппаратуры и программную среду выполнения. Во-вторых, измерения должны изолировать установившееся выполнение от артефактов инициализации. Один запуск смешивает накладные расходы холодного старта (компиляцию ядер, страничные ошибки и прогрев кэшей) с устойчивой пропускной способностью. С другой стороны, длительные стресс-тесты могут вызвать тепловой троттлинг и опустить тактовые частоты ускорителя ниже базовых спецификаций. Статистически значимые результаты требуют отбрасывать итерации прогрева, фиксировать дисперсию по нескольким испытаниям и сообщать доверительные интервалы или перцентили задержки вместо отдельных средних. Применение этих критериев к изолированному заявлению о пропускной способности показывает, как пропущенные параметры выполнения скрывают реальное поведение системы.
Интерпретация заявления о бенчмарке
Поставщик заявляет: «Наша система выполняет 10 000 выводов в секунду на ResNet-50». Само по себе это число не годится для планирования развертывания, потому что условия, определяющие его смысл, не указаны.
Смысл заявления определяют четыре не названных условия:
- Размер батча: большие батчи амортизируют передачи весов и повышают загрузку вычислительных блоков, но увеличивают задержку в очереди; батч 1 минимизирует задержку, но оставляет исполнительные блоки недогруженными.
- Точность: выполнение в INT8 использует целочисленные конвейеры с более высокой пропускной способностью и снижает трафик памяти, но требует калибровки, которая может поставить под угрозу численную точность.
- Граница измерения: окно измерения должно указывать, изолирует ли оно чистое выполнение ядер ускорителя или включает передачи между хостом и устройством, декодирование JPEG и преобразования формата тензоров.
- Точность модели: заявление должно указывать, сохраняет ли оптимизированная модель базовую точность на валидации (например, 76,1 процента Top-1 на ImageNet), или ради сырой скорости выполнения пожертвовано качеством задачи.
Пример: «10 000 выводов в секунду на ResNet-50 при размере батча 32, точности INT8, точности Top-1 76 процентов, включая декодирование JPEG, на NVIDIA H100 с TDP 700 Вт».
Системный вывод: чтобы оценить, значима ли разница в производительности, нужны и статистическая строгость, и проверка в контексте. Цифра пропускной способности без размера батча, точности, области измерения и целей по точности — это маркетинговая метрика, а не инженерная спецификация.
Помимо заявлений поставщиков, ограничения развертывания определяют, какие метрики управляют жизнеспособностью системы. В критичных к безопасности приложениях, таких как медицинская визуализация или автономное вождение, прирост точности на 1 процент оправдывает значительные вычислительные затраты; в интерактивном поиске или распознавании речи доминирует хвостовая задержка в жестком соглашении об уровне обслуживания, и небольшой прирост точности не важен, если он нарушает бюджет задержки. Оценка систем также должна защищать от переобучения под бенчмарк, когда оптимизация настраивается на особенности стандартизированного набора в ущерб производственным нагрузкам. Например, агрессивное слияние ядер или тайлинг операторов, настроенные исключительно под фиксированные длины последовательностей в обвязке бенчмарка, могут снизить пропускную способность при работе с динамическими запросами пользователей переменной длины. Надежная интерпретация требует проверять производительность на разных распределениях входа, при различных размерах батчей и в реалистичных рабочих циклах эксплуатации.
Пример бенчмарка
Конвейер обнаружения аномалий на рисунке «Компоненты рабочего процесса бенчмарка» показывает, как компоненты бенчмарка взаимодействуют на этапе выхода. Бенчмарк дает три взаимодополняющих измерения: размер модели 270 тыс. параметров и 10,4 мс на вывод (вычислительные ресурсы), точность обнаружения 0,86 по AUC при различении нормальных и аномальных звуковых шаблонов (эффективность задачи) и энергопотребление 516 мкДж на вывод (эксплуатационная эффективность).
Какая из этих метрик определяет жизнеспособность, полностью зависит от среды развертывания и ее физических ограничений. Энергия на вывод определяет время работы автономных краевых устройств, а также пределы распределения питания и затраты на охлаждение в серверных стойках. Размер модели определяет, полностью ли веса помещаются в быструю SRAM на кристалле или переливаются во внешнюю DRAM; в облачных ускорителях с несколькими арендаторами объем параметров определяет, сколько реплик модели помещается в HBM. Задержка вывода определяет, укладывается ли система в сроки реального времени на потоковом аудио без пропуска кадров, тогда как батчинг обменивает задержку на отдельный образец на более высокую пропускную способность, амортизируя накладные расходы передачи весов на несколько входов. Эти метрики показывают прямые инженерные компромиссы: уменьшение модели ниже 270 тыс. параметров сокращает трафик памяти и время выполнения, но рискует ухудшить точность обнаружения 0,86 AUC. Считается ли набор этих измерений прошедшим бенчмарком, зависит от эксплуатационных рамок: спецификация бенчмарка стандартизирует протокол оценки, а пороги приемки задают требования приложения.
Две категории бенчмарков повторяются в конвейере оптимизации достаточно часто, чтобы заслуживать специальных чек-листов: бенчмарки сжатия, которые прореженная или квантованная модель должна пройти перед развертыванием, и мобильные и краевые бенчмарки, где мощность и тепловые границы жестко ограничивают работу. Каждый из них складывается из задачи, данных, модели, метрик, обвязки и правил запуска и задает свои ограничения. Проверка сжатия требует многометрического протокола, который балансирует уменьшение размера с точностью и задержкой («Проверка сжатия»), а краевое развертывание требует измерения устойчивой мощности в реалистичных тепловых условиях и рабочих циклах («Методы измерения мощности»).
Бенчмарки сжатия
Сжатие нейронных сетей (прореживание, квантование, дистилляция знаний и оптимизация архитектуры) требует специальных бенчмарков, потому что сжатие меняет ландшафт компромиссов: каждый сохраненный байт или исключенная операция должны взвешиваться против возможной потери точности и совместимости с аппаратурой. Самая базовая метрика сжатия — сырое уменьшение размера: число параметров, объем памяти в байтах и требования к сжатому хранению. Но один размер вводит в заблуждение. На ImageNet MobileNetV2 достигает около 72 процентов точности Top-1 при 3,5 млн параметров, тогда как ResNet-50 — 76 процентов при 25,6 млн параметров: примерно в 7,3 раза меньше параметров при сопоставимой точности, или примерно в 6,9 раза больше точности на параметр (Sandler et al., 2018); (He et al., 2016).
Бенчмарки прореживания должны различать структурированные и неструктурированные подходы, потому что на реальной аппаратуре они дают качественно разные результаты. Структурированное прореживание удаляет целые нейроны или фильтры, давая меньшие плотные операции, которые может использовать обычное ядро (Li et al., 2017). Неструктурированное прореживание устраняет отдельные веса и может давать очень разреженные модели, но для реального ускорения нужна специальная поддержка разреженных вычислений, поэтому протоколы бенчмарков должны указывать аппаратную платформу и программную реализацию (Han et al., 2015); (Gale et al., 2019).
Бенчмарки квантования оценивают снижение точности для разных типов данных. В иллюстративном сценарии MobileNetV2 INT8 уменьшает объем весов в 4 раза, а принятые значения задержки дают показанное ускорение; реальная производительность зависит от аппаратуры и реализации. Компромисс между точностью модели и числовой точностью (разрядностью) разобран в «Метриках вывода», а энергетические последствия — в «Границах измерения мощности» (Jacob et al., 2018). Смешанная точность идет дальше, применяя разные уровни точности к разным слоям: критические слои сохраняют FP16, а вычислительно емкие используют INT8 или INT4, что позволяет тонко оптимизировать эффективность. Дистилляция знаний добавляет еще одно измерение: меньшая модель-ученик может сохранить большую часть поведения учителя, уменьшая размер и стоимость вывода, но бенчмаркинг должен проверить, что ученик действительно обобщает, а не просто запоминает выходы учителя (Hinton et al., 2015).
Важно, что ускорение сильно зависит от аппаратной платформы: разреженные модели, модели пониженной точности и эффективные архитектуры дают прирост только тогда, когда целевая среда выполнения имеет ядра, раскладки памяти и поддержку ускорителя, которые их используют. Текущие наборы бенчмарков вроде MLPerf сосредоточены в основном на стандартизированных эталонных моделях, тогда как эксплуатационные развертывания часто используют сжатые или специфичные для аппаратуры варианты. Этот разрыв между тем, что измеряют бенчмарки, и тем, что реально выполняется в эксплуатации, остается одним из самых весомых слепых пятен области.
Мобильные и краевые бенчмарки
В отличие от дата-центров с энергоснабжением на уровне киловатт и активным охлаждением, мобильные и краевые развертывания работают в жестких рамках мощности от милливатт до ватт и при пассивном рассеивании тепла. Бенчмаркинг таких систем требует учитывать взаимозависимый треугольник: энергопотребление, задержка вывода и точность модели, где оптимизация любых двух обычно ухудшает третье. «Ограничения краевого и облачного развертывания» сопоставляет эти эксплуатационные ограничения с облачной средой.
| Ограничение | Влияние в облаке | Влияние на краю |
|---|---|---|
| Мощность | Эксплуатационные расходы | Энергетический бюджет устройства |
| Задержка | Целевой уровень сервиса | Локальный срок ответа |
| Точность | Целевое качество задачи | Баланс с мощностью и задержкой |
Ограничения краевого и облачного развертывания: типичные облачные развертывания рассматривают мощность как эксплуатационные расходы, а задержку как целевой уровень сервиса, тогда как краевые развертывания часто сталкиваются с более жесткими пределами энергии и времени ответа, которые ограничивают достижимую точность.
Рассмотрим смартфонную камеру, которая выполняет детекцию объектов в реальном времени на 30 кадрах в секунду в тепловом бюджете 3–5 Вт. В этих условиях эффективная архитектура вроде MobileNet служит реалистичной целью бенчмарка, тогда как более крупная ResNet нарушит тепловые ограничения, несмотря на ее превосходную точность в облачной оценке. Поэтому краевой бенчмарк должен оценивать точность совместно с устойчивой мощностью и тепловым рассеиванием. Разрыв между пиком и устойчивой производительностью, описанный в «Рамке бенчмаркинга машинного обучения», на краю обостряется по физической причине, которой нет в дата-центре: устройство с пассивным охлаждением не может бесконечно отводить тепло непрерывного вывода через корпус. По мере роста температуры кристалла контроллер динамического теплового управления (DTM) снижает напряжение и тактовую частоту, и устойчивая пропускная способность резко падает ниже пиков пакетного режима. Именно этот тепловой механизм, а не небрежность измерений, делает краевой бенчмаркинг принципиально другим упражнением, чем серверный.
Бенчмаркинг на краю сети
Сценарий: команда краевой инженерии оценивает чип для умного дверного звонка, для которого поставщик заявил спецификацию «1 Вт на ИИ».
Диагностика: ранние испытания в пакетном режиме подтверждают заявления поставщика, но непрерывный цикл вывода накапливает тепло в кристалле, запускает тепловой троттлинг и снижает устойчивую пропускную способность.
Системный урок: короткие пакетные бенчмарки скрывают долгосрочный тепловой троттлинг. Бенчмаркинг краевых ML-нагрузок требует непрерывных испытаний в устойчивом режиме, чтобы отражать реальные аппаратные пределы.
FPS в пакетном режиме обваливается, когда включается тепловой троттлинг.
Проверка реальности краевого бенчмарка
При оценке заявлений о краевом железе четыре фактора определяют, переходят ли заявленные поставщиком числа в реальную производительность:
- Пиковая и устойчивая производительность: поставщик может заявлять пиковую пропускную способность 45 TOPS, а устойчивый тепловой прогон дает ближе к 20 TOPS. Всегда запускайте бенчмарк под устойчивой нагрузкой длительнее 30 с.
- Мощность в покое и в работе: в этом сценарии устройство потребляет 50 мВт в покое и 2 Вт в работе. Маркетинг может приводить мощность в работе, но если приложение выполняет вывод в 1 процент времени, эффективная мощность составит около 69,5 мВт, а не 2 Вт.
- Тепловая оболочка: краевые устройства часто работают в узком бюджете TDP. Превышение его вызывает троттлинг, поэтому отчеты без тепловых условий неполны.
- Сквозная или только ускорителя: бенчмарки NPU часто исключают накладные расходы передачи данных. Перенос данных изображения с камеры на NPU и обратно может превысить время вывода для малых моделей.
Поскольку пассивное рассеивание тепла ограничивает устойчивую мощность, архитекторы мобильных систем на кристалле не могут полагаться на монолитные ядра с высокой частотой. Вместо этого они распределяют выполнение между специализированными вычислительными блоками, настроенными под разные арифметические шаблоны. Такая специализация аппаратуры переводит краевой бенчмаркинг от оценки отдельного ядра к описанию координации нескольких процессоров во всей системе на кристалле.
Координация гетерогенных процессоров
Современная мобильная система на кристалле объединяет на одном кристалле центральные процессоры, графические процессоры, цифровые сигнальные процессоры (DSP) и нейронные процессоры (NPU), которые делят системную память и общий тепловой бюджет. Каждый блок нацелен на свой вычислительный шаблон: центральные процессоры обрабатывают нерегулярный поток управления, динамический батчинг и последовательную постобработку; графические процессоры выполняют параллельные операции с плавающей точкой и неквантованные резервные слои; DSP обрабатывают маломощные потоковые векторные вычисления для постоянного сенсорного мониторинга; а NPU выполняют плотные квантованные матричные умножения (обычно INT8 или INT4) на специализированных систолических массивах или блоках умножения с накоплением.
Бенчмаркинг должен оценивать оркестрацию конвейера, а не пропускную способность изолированного ядра. Например, в сквозном голосовом помощнике сверхмаломощный DSP непрерывно следит за аудио микрофона на предмет слова пробуждения; при обнаружении система будит NPU, чтобы выполнить извлечение акустических признаков и распознавание речи, а затем передает последовательности токенов центральному процессору для понимания языка и логики диалога. Бенчмарки отдельных процессоров оценивают только изолированное время вычислений каждого этапа и пропускают три главных источника накладных расходов системы: задержку пробуждения ускорителей из глубоких состояний сна, конкуренцию за шину, когда несколько движков одновременно обращаются к общей DRAM, и пропускную способность памяти, которую расходует перестановка раскладки тензоров (например, перевод раскладки NCHW центрального процессора в плитчатую NHWC, которую требует NPU). Бенчмарки, которые сообщают только время вычислений, скрывают эти штрафы за перемещение данных и планирование.
Бенчмаркинг батареи и температуры
Разряд батареи зависит от суммарной энергии, израсходованной за время, а не от пиковой мгновенной мощности. Вычислительная фотография выдает всплески в несколько ватт на сотни миллисекунд во время съемки, тогда как фоновая обработка сенсоров должна укладываться в бюджет на уровне милливатт, чтобы обеспечить работу от батареи в несколько дней. Чтобы оценить влияние на батарею, нужно измерить полное энергопотребление на репрезентативных эксплуатационных профилях.
Главная эксплуатационная переменная — коэффициент загрузки нагрузки , то есть доля времени, в течение которого ускоритель активно выполняет вывод. Для мощности в активном режиме и мощности в режиме ожидания средняя мощность равна:
Для прерывистых нагрузок вроде умной камеры дверного звонка () время работы батареи определяют мощность ожидания и мощность удержания памяти, а эффективность активного вывода оказывается второстепенной. Для непрерывных конвейеров вроде видеоаналитики () доминирует энергия активного вывода . Кроме того, повышенные рабочие температуры увеличивают ток утечки полупроводников, и статическое рассеивание мощности растет по мере нагрева устройства. Поэтому бенчмаркинг влияния на батарею требует измерять и активную, и дежурную мощность на протяжении рабочего цикла, одновременно следя за температурой кристалла в многоминутных прогонах.
Координация «край — облако»
Когда краевые устройства переносят вычисления на удаленные серверы по сетям 5G или Wi-Fi, бенчмаркинг должен оценивать совокупный конвейер «край — облако», а не локальное выполнение в отрыве. Хотя сотовые стандарты вроде URLLC19 задают агрессивные целевые значения задержки радиоинтерфейса, реальные сотовые и Wi-Fi каналы вносят джиттер пакетов, хвостовую задержку и кратковременные разрывы связи. Поэтому бенчмарки разделения нагрузки должны оценивать четыре поведения системы в условиях эмулированных сетевых помех: границу решения о локальном или удаленном выполнении, накладные расходы на передачу промежуточных активаций в сравнении с сырыми сенсорными входами, механизмы отката при потере связи (например, переход на компактную модель на устройстве) и политики конфиденциальности, ограничивающие выдачу сырых данных.
В системах, критичных к безопасности и регулируемых стандартами уровня полноты безопасности автомобильных систем (ASIL), это разделение между локальными и удаленными вычислениями ограничено жесткими сроками. Стек восприятия автономного автомобиля, работающий с контурным сроком управления 10–30 мс, не может выдержать многосотмиллисекундную хвостовую задержку широкополосного сотового канала. Вывод, критичный к безопасности, должен выполняться полностью на локальном автомобильном кремнии с закаленным температурным режимом и синхронизацией нескольких датчиков, а каналы «край — облако» должны использоваться только для некритичной телеметрии и обновлений карт.
Во всех облачных дата-центрах и краевых устройствах методика бенчмаркинга делится по фундаментальной эксплуатационной границе: выполняет ли система обучение или вывод. Обучение требует прямых проходов, хранения промежуточных активаций в памяти, обратных проходов для вычисления градиентов и обновления весов модели через распределенные межсоединения. Вывод выполняет только прямые проходы, позволяя среде выполнения сразу отбрасывать промежуточные активации, сливать соседние ядра операторов и квантовать веса в низкоточные целочисленные форматы. Поскольку шаблоны доступа к памяти, арифметические интенсивности и вычислительные зависимости обучения и вывода полностью расходятся, каждому нужна отдельная методика бенчмаркинга.
Обучение и вывод
Один и тот же ускоритель может выйти из строя в противоположных эксплуатационных режимах: прогон обучения может встать, когда синхронизация градиентов между ускорителями насыщает межсоединение, а сервис вывода может нарушить свой SLO, когда всплески запросов создают задержки в очередях. Требования к оценке обучения и вывода настолько различаются, что для каждого существуют отдельные наборы бенчмарков: MLPerf Training и MLPerf Inference (Mattson et al., 2020); (Reddi et al., 2019). Теоретический пик TFLOP/s дает мало сведений о любой из этих нагрузок. Обучение итеративно уточняет параметры на миллиардах образцов («Обучение моделей»), требуя устойчивых вычислений высокой мощности, большой емкости памяти для состояний оптимизатора и эффективных коллективных коммуникаций между ускорителями. Вывод оценивает фиксированные параметры на входящих запросах (глава «Обслуживание моделей») при ограниченном времени ответа, требуя ограниченной хвостовой задержки, минимальной задержки инициализации холодного старта и высокой энергоэффективности; глава «MLOps» связывает эти ограничения обслуживания с развертыванием и мониторингом в эксплуатации.
Это разделение меняет распределение памяти и арифметическую интенсивность. При обучении память устройства должна хранить параметры модели, градиенты, состояния оптимизатора (например, аккумуляторы моментов и дисперсии) и промежуточные активации, сохраненные для обратного распространения. Эти динамические требования к состоянию создают нагрузку на память, которая в разы превышает объем одних весов, и зависят от контрольных точек активаций, численной точности и размеров батча. Обучение опирается на смешанную точность и сжатие градиентов, чтобы снять узкие места емкости и межсоединений. Вывод полностью отбрасывает обратный граф и состояния оптимизатора; спрос на память определяют статические веса и динамические буферы выполнения (например, кэши ключей и значений в авторегрессивных моделях). Поэтому сервисные нагрузки могут применять агрессивное снижение точности (подробно в «Метриках вывода»), квантование после обучения и прореживание весов. Аппаратная загрузка отражает этот контраст: обучение максимизирует насыщение арифметики ускорителя большими батчами, тогда как движки вывода должны обрабатывать непредсказуемые потоки запросов с низкой конкурентностью, которые оставляют исполнительные блоки недогруженными, как показывает анализ Roofline в «Системных бенчмарках».
Энергопотребление учитывается в двух фазах по-разному. Энергия обучения представляет собой капитальные вложения, амортизируемые за весь срок службы модели: крупные прогоны обучения потребляют тысячи мегаватт-часов (обучение GPT-3 потребовало около 1 287 МВт·ч) (Patterson et al., 2021). Энергия вывода непрерывно накапливается вместе с объемом запросов и доминирует в полной стоимости жизненного цикла, когда число запросов растет до миллионов. Энергия на запрос подчиняется физическому соотношению , где — средняя эксплуатационная мощность, а — задержка обслуживания. Например, если измеренная средняя мощность ускорителя в окне вывода составляет 300 Вт, вывод длительностью 10 мс расходует , или около 0,0008 Вт·ч; при 100 мс это уже около 0,0083 Вт·ч. Расчетная тепловая мощность (TDP) ускорителя — это предел охлаждения, а не динамическое энергопотребление, поэтому для точного бенчмаркинга необходимо эмпирически измерять мощность во время выполнения.
Эти различные физические требования формируют методику бенчмарков через призму D·A·M. Бенчмарки обучения оценивают, эффективно ли алгоритмические обновления сходятся при масштабировании через распределенные межсоединения ускорителей под непрерывным приемом данных; главная мера качества здесь — время до целевой точности. Бенчмарки вывода оценивают, удовлетворяет ли фиксированный алгоритмический артефакт перцентилям задержки (например, временам ответа p95 и p99) и целевой пропускной способности при пакетном потоке запросов на выделенной аппаратуре. Поскольку алгоритмическая сходимость при обучении задает верхнюю границу точности модели, оценка эффективности обучения предшествует характеризации вывода в жизненном цикле бенчмаркинга.
Бенчмарки обучения
В одном показательном провале закупки команда покупает более крупный кластер GPU, рассчитывая на пропорциональное ускорение обучения, и обнаруживает, что накладные расходы коммуникации и узкие места памяти ограничивают реальное ускорение. Бенчмарки обучения существуют, чтобы поймать такой разрыв до закупки. Они делятся на три категории: метрики сходимости, которые измеряют прогресс обучения, метрики пропускной способности, которые измеряют вычислительную эффективность, и метрики масштабируемости, которые измеряют производительность распределенных систем.
Бенчмарки обучения ML — это бенчмарки систем машинного обучения, которые измеряют время достижения целевой метрики качества (например, заданной точности на валидации или порога функции потерь) на фиксированном наборе данных и модели и количественно оценивают скорость сходимости на единицу ресурса.
- Значение: бенчмарки обучения выявляют большие разрывы, невидимые в спецификациях аппаратуры. При фиксированных модели и целевом качестве время сходимости может сильно различаться между стеками «аппаратура — программное обеспечение», потому что производительность обучения зависит от всего конвейера: загрузки данных , загрузки вычислений , синхронизации градиентов и накладных расходов на восстановление после сбоев. Спецификация пиковых FLOP/s не отражает ни одного из этих взаимодействий.
- Отличие: в отличие от бенчмарков вывода, которые измеряют задержку на запрос и пропускную способность под нагрузкой, бенчмарки обучения измеряют время до точности по всему циклу оптимизации: загрузку данных, прямой проход, обратный проход, синхронизацию градиентов и шаг оптимизатора. Ограничивающий фактор смещается от вычислений при малом масштабе к коммуникациям при большом.
- Типичная ошибка: распространенное заблуждение состоит в том, что бенчмарки обучения измеряют «насколько быстро работает GPU». При большом масштабе пропускная способность межсоединений для синхронизации градиентов и накладные расходы отказоустойчивости (ввод-вывод контрольных точек, смягчение отстающих узлов) часто определяют результат бенчмарка сильнее, чем пиковые FLOP/s.
Бенчмарки обучения проверяют, дает ли аппаратное ускорение обещанную пропускную способность обучения. Кластеры GPU, поды TPU и стратегии распределенного обучения, рассмотренные в «Аппаратном ускорении», заявляют о впечатляющем ускорении, а бенчмарки обучения показывают, какие заявления выполняются на реалистичных нагрузках. Они оценивают, как конфигурации аппаратуры, механизмы загрузки данных и стратегии распределенного обучения работают при обучении моделей производственного масштаба. Эти бенчмарки жизненно важны, потому что обучение — самая крупная капитальная статья расходов в системах ML, и только строгое измерение времени до точности показывает, приносят ли эти вложения пропорциональную отдачу, а не растворяются в неэффективности масштабирования, узких местах памяти или накладных расходах коммуникации.
Например, крупные модели вроде GPT-3 от OpenAI20 (Brown et al., 2020), которая содержит 175 млрд параметров и обучалась на примерно 570 ГБ отфильтрованного текста CommonCrawl (из исходного набора около 45 ТБ, дополненного другими источниками до 300 млрд обучающих токенов), показывают колоссальные вычислительные потребности современного обучения. Стандартизированные бенчмарки обучения ML дают систематическую оценку базовых систем, чтобы убедиться, что аппаратные и программные конфигурации способны эффективно покрыть эти беспрецедентные потребности.
Мотивация бенчмарков обучения
MLPerf Training (Mattson et al., 2020); (MLCommons, 2024) задает стандартизированную рамку для такого измерения времени до качества. На рисунке «Прогресс MLPerf Training» видно, что улучшение производительности от версии к версии бенчмарка опережает построенную базовую линию закона Мура, а некоторые нагрузки достигают многолетнего ускорения в несколько раз (Tschand et al., 2024). Сравнение иллюстрирует базовый принцип: что измеряется, то и улучшается. Стандартизированная рамка бенчмаркинга создает конкурентное давление, которое ускоряет оптимизацию по всему стеку вычислений ML.
Прогресс MLPerf Training: линии нагрузок показывают накопленную относительную производительность по версиям бенчмарка относительно построенной накопленной базовой линии закона Мура. Последняя точка каждой нагрузки превышает базовую линию на ту же дату, а Mask R-CNN дает наибольший выигрыш на графике — в 48,8 раза. Сравнение отражает совокупный прогресс аппаратуры и программного обеспечения, а не только масштабирование железа. Источник: (Tschand et al., 2024).
Помимо отображения этого прогресса, бенчмарки обучения выявляют неэффективности, которые систематическая оценка делает видимыми: медленную загрузку данных, недогруженные ускорители, избыточные накладные расходы памяти и узкие места коммуникации, которые снижают эффективность масштабирования. Теоретические возможности аппаратуры, описанные в «Аппаратном ускорении» (например, TFLOP/s GPU или тензорная пропускная способность TPU), превращаются в реальное ускорение обучения только тогда, когда бенчмарки подтверждают их в реалистичных условиях.
Бенчмарки обучения выполняют четыре взаимосвязанные функции. Во-первых, они способствуют оптимизации аппаратуры и программного обеспечения, давая сравнения между архитектурами ускорителей и фреймворками (TensorFlow, PyTorch) на стандартизированных задачах без привязки к поставщику и помогая выбирать аппаратуру для дата-центров и облака. Программные оптимизации, включая обучение в смешанной точности21 и эффективную по памяти загрузку данных, также количественно оцениваются. Во-вторых, они оценивают масштабируемость: добавление GPU должно пропорционально сокращать время обучения, но накладные расходы коммуникации, задержки синхронизации и узкие места памяти на практике ограничивают эффективность масштабирования. Бенчмарки обучения измеряют эти потери и показывают, дают ли инфраструктурные вложения пропорциональную отдачу. В-третьих, они обеспечивают учет стоимости и энергии: поскольку крупные прогоны обучения потребляют тысячи мегаватт-часов, бенчмарки, которые отслеживают стоимость прогона и энергопотребление на единицу прогресса, помогают организациям сочетать вычислительную мощность с целями устойчивого развития. Наконец, стандартизированные критерии оценки, контролируемая случайность, правила подачи результатов и аудиты делают сравнения более воспроизводимыми и ограничивают обходные пути, специфичные для реализации.
Метрики обучения
С системной точки зрения бенчмарки обучения оценивают, насколько эффективно модель достигает заданного порога точности. Метрики пропускной способности и масштабируемости имеют смысл только относительно того, достигает ли модель целевой точности; без этого ограничения оптимизация сырой скорости может вводить в заблуждение. MLPerf Training кодифицирует это, задавая конкретные целевые точности для каждой задачи: система, которая обучается быстро, но не достигает цели, считается невалидной, а та, что сходится точно, но слишком медленно, непрактична. Эффективный бенчмаркинг балансирует скорость, эффективность и точность сходимости.
Время и пропускная способность
Одна из главных метрик эффективности обучения — время, требуемое для достижения заданного порога точности. Время обучения измеряет, сколько времени модели нужно, чтобы сойтись к приемлемому уровню производительности, и отражает общую вычислительную эффективность системы. Пусть — точность модели в момент времени обучения , а целевая точность — порог, заданный бенчмарком (например, 75,9 процента точности top-1 для ResNet-50 на ImageNet в MLPerf). Формально эту метрику определяет «время обучения»; она держит бенчмарк сфокусированным на том, как быстро система получает содержательный результат:
Прогон, который никогда не достигает цели, не имеет конечного времени до точности, поэтому сырая скорость обучения не вознаграждает систему, которая не проходит критерий качества бенчмарка.
Пропускная способность,22 которую часто выражают числом обработанных образцов обучения в секунду, дает дополнительную меру производительности системы. Пусть — общее число обработанных обучающих образцов, а — время обучения из «времени обучения». Формула «пропускной способности» делает скорость явной, деля обработанные образцы на время обучения:
Сама по себе пропускная способность не гарантирует содержательного результата: модель может быстро обработать много образцов, не достигнув желаемой точности. Например, MLPerf Training задает целевые показатели качества для каждой нагрузки; результат ResNet-50 на ImageNet будет валидным, только если точность top-1 достигнет 75,9 процента (Mattson et al., 2020); (MLCommons, 2024). Гипотетическая система, которая обрабатывает много изображений в секунду, но не достигает цели, — невалидный результат бенчмарка, тогда как более медленная система, которая эффективно сходится, может быть предпочтительнее. Поэтому пропускную способность нужно оценивать в связи со временем до точности, а не как самостоятельную меру производительности.
Масштабируемость и параллелизм
Масштабируемость измеряет, насколько эффективно производительность обучения растет при добавлении ресурсов. В идеале удвоение числа GPU должно вдвое сокращать время обучения. На практике накладные расходы коммуникации, ограничения пропускной способности памяти и неэффективность распараллеливания ограничивают масштабирование заметно ниже линейного.
Расчет эффективности масштабирования
Задача: команда обучает ResNet-50 на ImageNet. Обучение на одном GPU занимает 24 часа. С 8 GPU обучение занимает 4 часа. Это хорошее масштабирование? Куда делась эффективность?
Шаг 1: определение эффективности масштабирования. Для сильного масштабирования (фиксированный размер задачи, больше процессоров) пусть — время обучения на одном GPU, — время обучения на GPU, а — число GPU. Эффективность «масштабирования» определяется так:
Шаг 2: расчет эффективности. = 24/32 = 75 процентов
При идеальном масштабировании 8 GPU завершили бы обучение за 3 часа (24 часа / 8 GPU). Фактические 4 часа соответствуют 75-процентной эффективности.
Шаг 3: учет потерь эффективности. «Источники потерь эффективности масштабирования» раскладывает «недостающие» 25 процентов на измеримые категории накладных расходов: синхронизацию градиентов, копирование памяти, дисбаланс нагрузки и эффекты размера батча. Каждая категория измеряется отдельным сигналом профилирования.
Источник Пример вклада Измерение Синхронизация градиентов 10–15% Время AllReduce на шаг Копирование памяти (CPUGPU) 3–5% Профилирование передачи данных Дисбаланс нагрузки 2–5% Дисперсия времени шага по GPU Эффекты размера батча 2–5% Большие батчи сходятся иначе Источники потерь эффективности масштабирования: иллюстративная раскладка недостающего бюджета эффективности по измеримым категориям накладных расходов и соответствующий сигнал измерения, которым определяется вклад каждой потери. Фактические проценты зависят от модели, межсоединений, хранилища, графика батчей и реализации фреймворка.
Шаг 4: системный вывод. Эффективность масштабирования падает с ростом , потому что накладные расходы коммуникации растут с числом GPU, а вычисления на один GPU уменьшаются. В этом расчете восемь GPU дают 75-процентную эффективность; при больших масштабах та же арифметика показывает, почему становятся необходимыми сложные коммуникации и оптимизация конвейера входных данных.
MLPerf сообщает сырую производительность, тогда как эффективность масштабирования можно вычислить по сопоставимым заявкам: система с ускорением в 2 раза при эффективности 50 процентов может уступать системе с ускорением в 1,5 раза при эффективности 90 процентов, в зависимости от ограничений по стоимости.
Когда OpenAI обучала крупные модели вроде GPT-3, она использовала большой кластер GPU NVIDIA V100 в распределенной установке (Brown et al., 2020); (Patterson et al., 2021). Системы TPU v4 от Google демонстрируют тот же урок распределенных систем в масштабе дата-центра: добавление вычислительных ресурсов дает больше сырой мощности, но производительность и устойчивость зависят от сетевых коммуникаций, топологии и эксплуатационного управления (Jouppi et al., 2023); (Zu et al., 2024). Бенчмарки вроде MLPerf количественно показывают, насколько хорошо система масштабируется на нескольких ускорителях, и помогают понять, где в распределенном обучении возникают неэффективности.
Параллелизм в обучении делится на параллелизм данных, параллелизм модели и конвейерный параллелизм (см. «Обучение моделей»), и каждый из них создает свои трудности. Параллелизм данных, самый распространенный подход, состоит в разделении обучающего набора данных между несколькими вычислительными узлами. Эффективность этого подхода зависит от механизмов синхронизации и накладных расходов на передачу градиентов. Напротив, параллелизм модели разбивает саму нейронную сеть и требует эффективной координации между процессорами. Бенчмарки оценивают, насколько хорошо система управляет этими стратегиями параллелизма, не ухудшая сходимость по точности. Ключевая метрика для оценки параллелизма — эффективность масштабирования, которая показывает, какая доля добавленной вычислительной мощности превращается в реальное ускорение. Сильное масштабирование проверяет, сокращает ли добавление процессоров время обучения при фиксированном общем объеме работы, тогда как слабое масштабирование пропорционально увеличивает размер задачи вместе с числом процессоров, чтобы нагрузка на одно устройство оставалась постоянной, и измеряет, способен ли кластер обучить более крупные модели или обработать более крупные наборы данных за фиксированный бюджет времени, не давая коммуникациям стать доминирующим узким местом.
Загрузка ресурсов
Эффективность обучения машинного обучения зависит не только от скорости и масштабируемости, но и от того, насколько хорошо используется доступная аппаратура. Вычислительная загрузка показывает, в какой степени блоки обработки, такие как GPU или TPU, активно заняты во время обучения. В современных бенчмарках обучения вычислительная загрузка формально выражается как утилизация FLOP модели (MFU), то есть отношение полезных операций модели в секунду к пиковой производительности машины. MFU противопоставляется доле использования аппаратных FLOP (HFU), которая учитывает все выполненные операции, включая пересчет активаций; пересчет активаций повышает HFU, оставляя MFU прежним, и это показывает, представляют ли лишние FLOP реальный прогресс обучения или работу, затраченную на обход ограничений емкости памяти. Низкая загрузка может указывать на узкие места в перемещении данных, доступе к памяти или неэффективном планировании нагрузки.
Например, при обучении BERT на кластере TPU неэффективность конвейера входных данных может ограничивать общую пропускную способность, даже когда у ускорителей высокая сырая вычислительная мощность. Если извлечение из хранилища или предобработка не успевают, система не может держать TPU полностью загруженными. Профилирование загрузки ресурсов выявляет узкое место, а такие оптимизации, как предвыборка, кэширование и более параллельная обработка входных данных, улучшают устойчивую производительность.
Пропускная способность памяти — еще один критический фактор, потому что модели глубокого обучения часто обращаются к большим объемам данных во время обучения. Если пропускная способность памяти становится ограничивающим фактором, одно только наращивание вычислительной мощности не ускорит обучение. Бенчмарки оценивают, насколько эффективно модели используют доступную память, и проверяют, что скорости передачи данных между хранилищем, основной памятью и вычислительными блоками не становятся узкими местами производительности.
Производительность ввода-вывода тоже напрямую влияет на эффективность обучения, особенно при работе с большими наборами данных, которые не помещаются в память целиком. Бенчмарки оценивают эффективность конвейеров загрузки данных, включая операции предобработки, механизмы кэширования и скорость извлечения из хранилища. Системы, которые не оптимизируют загрузку данных, могут заметно замедляться, независимо от вычислительной мощности.
Энергоэффективность и стоимость
Обучение крупных моделей машинного обучения требует значительных вычислительных ресурсов, что ведет к заметному энергопотреблению и финансовым затратам. Метрики энергоэффективности количественно описывают энергопотребление нагрузок обучения и помогают находить системы, которые оптимизируют вычислительную эффективность и минимизируют потери энергии. Растущее внимание к устойчивому развитию привело к появлению энергетических бенчмарков, например в MLPerf Training, которые измеряют потребление мощности на прогон обучения. Тот же учет мощности управляет и выводом, где точность становится главным рычагом энергии; в «Методах измерения мощности» разобрано, почему квантование INT8 снижает энергию на вывод, воздействуя одновременно на трафик памяти и стоимость арифметики.
Обучение GPT-3, по оценкам, потребило 1 287 МВт·ч электроэнергии (Patterson et al., 2021). Если система достигает той же точности за меньшее число итераций обучения, она напрямую снижает потребление энергии. Бенчмарки, учитывающие энергию, помогают направлять разработку аппаратуры и стратегий обучения, которые оптимизируют энергоэффективность и при этом сохраняют целевую точность.
Стоимость включает не только электроэнергию, но и расходы на аппаратуру, облачные вычисления и обслуживание инфраструктуры. Бенчмарки обучения дают представление об экономической эффективности разных аппаратных и программных конфигураций, измеряя время обучения относительно затрат ресурсов. Организации могут использовать эти бенчмарки, чтобы сбалансировать производительность и бюджетные ограничения при выборе инфраструктуры обучения.
Отказоустойчивость и надежность
Задачи обучения часто идут долго, иногда дни или недели, поэтому отказоустойчивость — важное соображение. Устойчивая система должна переживать неожиданные сбои (аппаратные неисправности, перебои в сети и ошибки памяти), не ставя под угрозу сходимость по точности.
В крупномасштабном облачном обучении отказы узлов — эксплуатационная реальность. Если узел GPU в распределенном кластере выходит из строя, обучение должно продолжаться, не повреждая модель. Производственные системы создают контрольные точки для отказоустойчивости, периодически сохраняя прогресс, чтобы сбой не запускал прогон заново. Однако для обучения больших языковых моделей (LLM) сама контрольная точка становится системным узким местом: одна контрольная точка должна записать на сетевое хранилище веса модели и состояния оптимизатора, что при масштабе 100 миллиардов параметров может означать сотни гигабайт записи до возобновления обучения. Во время такой записи ускорители могут простаивать, и время до точности ухудшается из-за удлинения эффективного времени итерации. Производственные системы обучения LLM решают это, совмещая ввод-вывод контрольных точек со следующим шагом обучения (асинхронные контрольные точки) или используя высокоскоростные параллельные файловые системы, которые сокращают простой. Сам MLPerf Training в первую очередь измеряет время до качества на стандартизированных нагрузках и не бенчмаркирует восстановление после сбоев напрямую, но накладные расходы контрольных точек — существенная часть любого реального устойчивого значения пропускной способности.
Воспроизводимость и стандартизация
Исследования воспроизводимости неоднократно показывали, что скромные выигрыши бенчмарков могут исчезнуть, когда меняются начальные значения генератора случайных чисел, аппаратура, версии фреймворков или детали реализации (Henderson et al., 2018). Этот сбой показывает распространенную проблему: в бенчмарках обучения участвуют стохастические процессы (инициализация весов, перемешивание данных, маски дропаута), которые взаимодействуют с особенностями аппаратуры (округление чисел с плавающей точкой, раскладка памяти, оптимизации компилятора) и дают результаты, которые могут заметно различаться в разных средах.
Более глубокий слой недетерминированности приходит от самой параллельной аппаратуры. Операции вроде параллельных атомарных сложений, которые используются при накоплении градиентов для разреженных эмбеддингов в моделях вроде графовых нейронных сетей, выполняются в недетерминированном порядке между потоками, когда одновременные обновления попадают в одну и ту же ячейку памяти. Порядок суммирования чисел с плавающей точкой меняется от запуска к запуску, и градиенты отличаются побитово даже при одинаковых входах и начальных значениях генератора. Для побитовой воспроизводимости в таких случаях нужно отключить параллельные пути накопления, что снижает пропускную способность обучения: это прямой компромисс между воспроизводимостью и производительностью, который протоколы бенчмарков должны явно учитывать. Без явного контроля над всеми этими источниками изменчивости числа бенчмарка отражают конкретное сочетание условий, а не подлинную способность системы.
MLPerf Training решает эту задачу стандартизированной предобработкой данных, правилами целевого качества и повторными принятыми прогонами, которые описывают стохастическую вариацию (Mattson et al., 2020). Важно не просто получить быстрый прогон, а показать, что заявленная производительность отражает способность системы, а не удачное сочетание стохастических факторов.
Для бенчмарка обучения воспроизводимость — это вся рамка прогона, а не только начальное значение генератора. Достоверный отчет должен сохранять коммит модели, контрольную сумму набора данных, конвейер предобработки, план начальных значений, версии фреймворка и компилятора, политику точности, график батчей, топологию аппаратуры, тепловые и энергетические ограничения и поведение контрольных точек. Он также должен сообщать распределение принятых прогонов, а не один лучший прогон. Только так бенчмарк отделяет реальное улучшение системы от благоприятного сочетания версии программного обеспечения, состояния аппаратуры и стохастического пути обучения.
Оценка производительности обучения
Всесторонний бенчмарк обучения учитывает несколько измерений поведения системы, потому что каждое измерение показывает еще один способ, которым аппаратные инвестиции могут не превратиться в сходимость. «Измерения бенчмарка обучения» сводит основные категории и связанные метрики, которые обычно используют для бенчмаркинга производительности обучения на уровне системы, и дает рамку для понимания того, как системы обучения ведут себя при разных нагрузках и конфигурациях.
| Категория | Ключевые метрики | Пример применения бенчмарка |
|---|---|---|
| Время обучения и пропускная способность | Время до точности (секунды, минуты, часы); пропускная способность (образцов/с) | Сравнение скорости обучения на разных архитектурах GPU |
| Масштабируемость и параллелизм | Эффективность масштабирования (доля от идеального ускорения); накладные расходы коммуникации (задержка, пропускная способность) | Анализ производительности распределенного обучения крупных моделей |
| Загрузка ресурсов | Вычислительная загрузка (процент загрузки GPU/TPU); пропускная способность памяти (ГБ/с); эффективность ввода-вывода (скорость загрузки данных) | Оптимизация конвейеров данных для повышения загрузки GPU |
| Энергоэффективность и стоимость | Энергопотребление прогона (МВт·ч, кВт·ч); пропускная способность на ватт (FLOP/s/Вт) | Оценка энергоэффективных стратегий обучения |
| Отказоустойчивость и надежность | Накладные расходы контрольных точек (время на сохранение); доля успешных восстановлений (процент) | Оценка восстановления после сбоев в облачных системах обучения |
| Воспроизводимость и стандартизация | Разброс между прогонами (процентная разница по точности и времени обучения); согласованность фреймворков (TensorFlow, PyTorch, JAX) | Обеспечение согласованности результатов бенчмарка на разной аппаратуре |
Измерения бенчмарка обучения: ключевые категории и метрики для оценки систем машинного обучения сверх простой скорости. Они охватывают эффективность ресурсов, воспроизводимость и общие компромиссы производительности для разных подходов к обучению и конфигураций инфраструктуры.
Эти измерения взаимодействуют так, как таблицы не могут показать. Более высокая пропускная способность при сниженной точности (например, TF32) бессмысленна, если она увеличивает число итераций, нужных для целевой точности, поэтому главной поправочной метрикой становится время до точности. Эффективность масштабирования может выглядеть почти линейной при малом числе узлов, но снижаться, когда стоимость синхронизации градиентов начинает доминировать. Метрики загрузки ресурсов показывают причину: предобучение BERT с умеренной загрузкой GPU может упираться в конвейер данных, а не в ускорители. Контрольные точки для отказоустойчивости вносят собственные накладные расходы, и нужен баланс между устойчивостью и производительностью.
Во всех измерениях точность измерений зависит от контроля аппаратной изменчивости. Поведение тактовой частоты с разгоном GPU23 и тепловой троттлинг24 может сдвигать результаты настолько, что тонут небольшие заявленные выигрыши, поэтому повторные прогоны и статистическая строгость (как было установлено ранее) необходимы, чтобы отличить реальные различия производительности от шума.
Несмотря на наличие хорошо определенных методик бенчмаркинга, вводящие в заблуждение выводы возникают снова и снова, когда команды принимают одну метрику обучения за замену всему циклу оптимизации. Следующие ловушки показывают, где бенчмарк должен удерживать вместе скорость, сходимость, масштабирование и воспроизводимость.
Провалы бенчмарков обучения обычно начинаются тогда, когда пропускную способность принимают за цель, а не за одну из частей процесса обучения. Система может увеличить число примеров в секунду, используя более низкую численную точность, сокращая синхронизацию или даже обходя некоторые вычисления, но эти изменения помогают, только если сохраняется сходимость. Прогон TF32 может опережать FP32 по времени шага и все равно проигрывать в целом, если численная нестабильность увеличивает число итераций, нужных для целевой точности. Поэтому бенчмарк должен сообщать пропускную способность в связи со временем до точности, гарантируя, что оптимизации скорости не происходят за счет эффективности сходимости.
Масштабирование создает вторую ловушку: результат на малом числе узлов может выглядеть линейным, пока коммуникация и синхронизация не начнут доминировать. Предыдущий расчет для восьми GPU показывает, почему результаты малых узлов нельзя экстраполировать линейно, когда синхронизация становится связывающим фактором.
Как показал расчет эффективности масштабирования в «Масштабируемости и параллелизме» (где 8 GPU дали лишь 75-процентную эффективность), экстраполяция результатов одного узла на кластеры — распространенная ошибка. Опыт Google с кластерами TPU v4 из 4 096 узлов показывает этот эффект в экстремальном масштабе, где трудности синхронизации становятся доминирующим фактором производительности. Надлежащий бенчмаркинг должен измерять эффективность масштабирования явно, а не предполагать линейный рост.
Та же дисциплина относится к сбоям и взаимным помехам. Многие бенчмарки предполагают идеализированные условия, в которых аппаратные сбои, нестабильность сети и помехи между нагрузками не происходят, хотя в масштабе эти события рутинны. Эффективный бенчмаркинг учитывает накладные расходы контрольных точек, эффективность восстановления после сбоев и конкуренцию за ресурсы, а не сообщает только результат в лучшем случае.
Воспроизводимость создает еще одну угрозу. Результаты должны воспроизводиться на разных стеках: прогон TensorFlow с оптимизациями Accelerated Linear Algebra может показывать иную динамику сходимости, чем та же модель, обученная в PyTorch с автоматической смешанной точностью (AMP), потому что арифметика с плавающей точкой, раскладки памяти и стратегии оптимизации могут сдвигать и время обучения, и точность.
Чтобы избежать этих ловушек, нужно оценивать пропускную способность в связи со сходимостью по точности, оценивать эффективность масштабирования целостно и учитывать реальные сбои, а не предполагать идеализированные условия. Однако эффективно обученная модель все равно требует проверки эксплуатационной производительности, и это полностью меняет рамку оценки.
Бенчмарки вывода
Бенчмарки обучения измеряют, как быстро система учится; бенчмарки вывода измеряют, насколько надежно она обслуживает. Этот сдвиг меняет почти все в оценке. Обучение терпит переменное время итераций, пока сходимость идет; вывод требует стабильной задержки, потому что пользователь замечает каждый медленный ответ. Обучение оптимизирует совокупную пропускную способность за часы; вывод должен справляться с непредсказуемыми шаблонами запросов и сроками, заданными сценарием. Обучение в крупных бенчмарках обычно использует выделенную высокопроизводительную аппаратуру, тогда как вывод охватывает среды от GPU дата-центров до мобильных телефонов и микроконтроллеров.
Здесь сходятся главы об оптимизации: ускоренная аппаратура из «Аппаратного ускорения» запускает сжатые модели из «Сжатия моделей», чтобы выдавать предсказания в реальном времени. Бенчмарки вывода показывают, превращаются ли теоретические ускорения в реальное снижение задержки в реалистичных условиях развертывания.
Бенчмарки вывода ML — это бенчмарки систем машинного обучения, которые количественно оценивают способность системы укладываться в ограничения по задержке при заданных уровнях пропускной способности, измеряя статистику задержки, определенную сценарием, пропускную способность (запросов в секунду) и энергоэффективность в репрезентативных сценариях обслуживания.
- Значение: бенчмарки вывода показывают разрыв, специфичный для нагрузки и системы, между неограниченной пропускной способностью и пропускной способностью при соблюдении целевого уровня обслуживания (SLO), например целевой задержки p99. Очереди при высокой нагрузке могут поднять хвостовую задержку выше цели, и этот разрыв невидим без бенчмарка, который проверяет целевые задержки на каждом уровне пропускной способности.
- Отличие: в отличие от бенчмарков обучения, которые измеряют время до точности на фиксированном наборе данных, бенчмарки вывода измеряют время ответа на запрос при реалистичных шаблонах нагрузки, охватывая эффекты очередей, компромиссы батчинга и накладные расходы холодного старта, которые определяют экономику обслуживания в реальном мире.
- Типичная ошибка: распространенное заблуждение состоит в том, что средняя задержка — достаточный бенчмарк. Система с низкой средней задержкой и длинным хвостом p99 может нарушать основанный на перцентилях производственный SLO для самых медленных 1 процента запросов; при высокой частоте запросов этот малый процент становится большим числом затронутых пользователей. Бенчмарк должен сообщать статистику задержки, названную целью сервиса, а не предполагать, что среднее или p99 решают все.
Мотивация бенчмарков вывода
Бенчмарки обучения в крупных масштабах обычно выполняются на выделенной аппаратуре дата-центров, тогда как вывод охватывает сильно различающиеся сценарии развертывания: от приложений реального времени, таких как автономное вождение и разговорный ИИ, до мобильных устройств, систем интернета вещей и встраиваемых процессоров. Это разнообразие касается и аппаратуры: если GPU и TPU доминируют в крупномасштабном обучении, то для вывода часто используют специализированные ускорители, такие как NPU, программируемые логические матрицы (FPGA) и выделенные чипы вывода, например Edge TPU от Google.25 Бенчмарки вывода оценивают, насколько согласованно работают выбор аппаратуры, оптимизация модели и проектирование конвейера данных в этих средах развертывания.
Масштабирование нагрузок вывода между облачными серверами, краевыми платформами, мобильными устройствами и системами TinyML добавляет сложности. «Разница в энергопотреблении систем» показывает большой разброс мощности между этими системами: более десяти порядков величины, от микроватт во встраиваемых устройствах TinyML до сотен киловатт в кластерах обучения дата-центров. Диапазоны репрезентативны, а не исчерпывающи. Этот разброс объясняет, почему ни один бенчмарк не годится для всех контекстов развертывания: метрика, значимая для оптимизации дата-центра (киловатты на стойку), теряет смысл для устройств с батарейным питанием (милливатты на вывод). Бенчмарки вывода должны оценивать компромиссы между задержкой, стоимостью и энергоэффективностью внутри каждого масштаба, чтобы помогать организациям принимать обоснованные решения о развертывании.
Разница в энергопотреблении систем: потребление мощности охватывает более десяти порядков величины в разных типах систем ML, от микроватт в устройствах TinyML через ватты на краю сети до киловатт в дата-центровом выводе и сотен киловатт для кластеров обучения. Диапазоны репрезентативны и зависят от аппаратуры и нагрузки.
Эти различия в развертывании создают практическую мотивацию для бенчмарков вывода: они оценивают узкие места, которые возникают, когда модели переходят от разработки к обслуживанию в эксплуатации. Мотивирующие факторы повторяют факторы для обучения (оптимизация аппаратуры, масштабируемость, стоимость, честное сравнение), но отличаются в деталях. Программные инструменты оптимизации применяют специфичные для вывода приемы, такие как слияние операторов (см. «Сжатие моделей» и «Аппаратное ускорение»), калибровку точности и настройку ядер, и их влияние на задержку, пропускную способность и энергоэффективность нужно измерять в реалистичных условиях, чтобы убедиться, что они дают реальное улучшение без потери точности. Компиляторы с автонастройкой добавляют скрытую переменную: сам компилятор может требовать часов оптимизации на каждую пару модели и аппаратуры, так что результаты бенчмарка отражают бюджет настройки не меньше, чем возможности аппаратуры, и сравнение результатов разных заявок требует нормировать время оптимизации компилятора.
Меняется и характер масштабируемости. Обучение масштабируют добавлением GPU, чтобы сократить время до точности на фиксированной нагрузке, тогда как вывод должен масштабироваться динамически в ответ на колеблющийся спрос пользователей, справляясь со всплесками трафика без нарушения гарантий задержки. Производительность холодного старта, то есть время, за которое модель загружается и начинает обрабатывать запросы, становится самостоятельной проблемой вывода, у которой нет аналога в обучении. Приложения, которые загружают модели по требованию, например бессерверные развертывания ИИ, особенно чувствительны к этим накладным расходам.
Стоимость и энергетический профиль вывода резко отличаются от обучения. Обучение концентрирует стоимость в отдельных прогонах, которые могут повторяться по мере изменения данных, целей или моделей; стоимость вывода накапливается непрерывно вместе с продуктивным трафиком. Запуск неэффективной модели в масштабе может умножить расходы на облачные вычисления, а на устройствах с батареей излишние вычисления непосредственно сказываются на удобстве использования. Бенчмарки, которые измеряют стоимость на запрос вывода и эффективность на ватт, помогают организациям оптимизировать и производительность, и устойчивость на всех платформах развертывания.
MLPerf Inference переносит принципы стандартизированного сравнения, установленные для бенчмарков обучения, на сценарии развертывания, задавая критерии оценки для таких задач, как классификация изображений, детекция объектов и распознавание речи на разных аппаратных платформах. Это гарантирует, что сравнения производительности вывода остаются осмысленными и воспроизводимыми и при этом учитывают ограничения развертывания, такие как требования к задержке и энергоэффективность (Reddi et al., 2019).
Метрики вывода
Например, голосовой помощник должен отвечать достаточно быстро, чтобы пользователи не замечали задержки, а система рекомендаций должна оценить достаточно кандидатов, чтобы не отставать от прокрутки пользователем. Эти ограничения (задержка и пропускная способность) задают рамку производительности, внутри которой должны работать все оптимизации обслуживания. Метрики вывода формализуют эти реальные требования в измеримые величины, и они отличаются от метрик обучения не степенью, а характером, потому что цель оптимизации смещается от скорости сходимости при обучении к предсказуемости задержки при обслуживании. Обучение оптимизирует пропускную способность и время до точности; вывод оптимизирует стабильность задержки, эффективность ресурсов и предсказуемость обслуживания, охватывая как облачные дата-центры, обрабатывающие миллионы запросов, так и краевые устройства, работающие при строгих ограничениях мощности.
Задержка и хвостовая задержка
Задержка (введена в «Системах машинного обучения») — это время, за которое система вывода обрабатывает вход и выдает предсказание. Средняя задержка полезна, но она не отражает высокоперцентильные задержки, которые ухудшают надежность в сценариях с высоким спросом.
Чтобы это учесть, бенчмарки часто измеряют хвостовую задержку,26 которая описывает верхний хвост распределения задержки, а не худший случай. Эти значения обычно сообщают как задержку 95-го перцентиля (p95) или 99-го перцентиля (p99), то есть за заданное время завершаются 95 или 99 процентов выводов. Приложения с жесткими сроками требуют явного анализа пропусков сроков или худшего случая, помимо этих перцентилей.
Эти измерения составляют основу целевых уровней обслуживания (SLO) и соглашений об уровне обслуживания (SLA), которые формализуют ожидания по производительности.
SLO и SLA
SLO и SLA — это спецификации обязательств по производительности для производственных систем обслуживания ML: целевой уровень обслуживания (SLO) — это целевое значение или диапазон для индикатора качества сервиса, а SLA — договор, который задает целевые показатели обслуживания и последствия их невыполнения.
- Значение: SLO по задержке ограничивает член железного закона, задавая цель для указанного показателя задержки. В типичной производственной установке внутренний SLO может быть жестче внешнего SLA, оставляя эксплуатационный запас на кратковременные всплески, окна обслуживания и каскадные сбои.
- Отличие: сам по себе SLO не влечет договорных последствий, тогда как несоблюдение целевого показателя SLA запускает последствия, указанные в соглашении, которые могут включать компенсации или штрафы. Команды часто задают внутренний SLO жестче внешнего соглашения, чтобы оставить эксплуатационный запас, но это практика, а не определяющее требование.
- Типичная ошибка: распространенное заблуждение состоит в том, что выполнение средней задержки удовлетворяет SLO на хвостовую задержку. SLO могут опираться на средние значения, перцентили, доли или другие показатели; когда цель задана на уровне p99 или p99,9, отличное среднее не доказывает соответствия.
Это различие важно на практике: инженерные команды оптимизируют под SLO, а бизнес берет на себя обязательства по SLA. Выбор не той метрики для оптимизации тратит инженерные усилия впустую или нарушает гарантии для клиентов.
Пригодная цель по задержке также фиксирует популяцию запросов и окно измерения. Иначе две команды могут сообщить один и тот же порог перцентиля на разных смесях трафика и прийти к несовместимым выводам о соответствии.
Выбор метрики
Метрика определяет оптимизацию.
Перед тем как окончательно выбрать метрику, примените три правила:
- Пропускная способность или задержка: решите, оптимизирует ли нагрузка стоимость или пользовательский опыт, затем назовите метрику, которую бенчмарк должен удерживать фиксированной.
- Хвостовая задержка: укажите, что p99 показывает, а средняя задержка скрывает.
- Сквозная задержка: перечислите этапы предобработки, выполнения модели и постобработки, которые входят в сообщаемую задержку.
Связь хвостовой задержки с пользовательским опытом в масштабе становится критичной в производственных системах, которые обслуживают миллионы пользователей. Даже небольшое ухудшение p99 создает накапливающийся эффект при большом объеме запросов: если 1 процент запросов получает задержку, в 10 раз большую обычной (например, 1000 мс вместо 100 мс), то на каждый миллион запросов это затрагивает 10 000, что может привести к ошибкам по таймауту, плохому пользовательскому опыту и оттоку клиентов. Поисковые системы и системы рекомендаций демонстрируют эту чувствительность: эксперименты Google с задержкой поиска показали измеримое снижение числа ежедневных поисков на пользователя после серверных задержек в 100–400 мс (Brutlag, 2009), поэтому интерактивные сервисы часто считают ответы быстрее 100 мс практической проектной целью.
Поэтому целевые уровни обслуживания (SLO) в производственных системах опираются на хвостовую задержку, а не на среднюю, чтобы обеспечить стабильный пользовательский опыт. Интерактивные сервисы часто задают цели по задержке в перцентилях, потому что редкие медленные ответы непропорционально сильно влияют на удовлетворенность пользователей. Крупные системы могут отслеживать еще более глубокие хвосты, например p99,9, когда всплески трафика и разброс инфраструктуры влияют на надежность.
Трудность выполнения этих целей по хвостовой задержке в том, что источник хвоста часто архитектурный, а не алгоритмический. Среда выполнения с автоматической сборкой мусора, общий драйвер ядра или ошибка инверсии приоритетов в стеке обслуживания могут вносить всплески задержки, которые никакая оптимизация модели не устранит.
Переписывание Read States в Discord (2019)
Контекст: Discord, платформа для чата в реальном времени с миллионами одновременных пользователей, изначально реализовала сервис Read States на Go; он отслеживал, какие каналы и сообщения прочитал каждый пользователь (Howarth, 2020).
Механизм: проходы принудительной сборки мусора в Go сканировали LRU-кэш, содержавший десятки миллионов записей, и вызывали периодические остановки мира (stop-the-world) каждые две минуты независимо от настройки памяти.
Последствия: хвостовая задержка () резко подскакивала каждые две минуты, ухудшая пользовательский опыт для миллионов активных соединений.
Исправление: в 2019 году Discord переписал сервис Read States на Rust, устранив паузы сборки мусора, и сократил среднее время ответа до микросекунд.
Системный урок: одна только средняя задержка не описывает пользовательский опыт, когда цель сервиса задана на хвосте. Выбор языка среды выполнения может задать нижнюю границу этого хвоста: хранилища признаков, которые отдают эмбеддинги в реальном времени для моделей рекомендаций, могут использовать управляемые среды выполнения, а паузы сборки мусора могут задерживать каждый последующий запрос вывода, ожидающий извлечения. Оптимизация модели не закроет разрыв, узкое место которого лежит в пути извлечения. Инцидент в Discord документирует этот механизм вне ML и показывает, почему весь стек обслуживания должен входить в производственный бенчмарк задержки.
Сквозная и компонентная задержка
Важное различие в бенчмаркинге вывода проходит между компонентной задержкой (время, затраченное на вычисления модели) и сквозной задержкой (полное время от поступления запроса до доставки ответа). Многие бенчмарки сообщают только время вывода модели, скрывая остальные накладные расходы, которые определяют реальный пользовательский опыт. Эти накладные расходы не маргинальны: сериализация, сетевые переходы и время ожидания в очереди могут доминировать в полном времени запроса, и оптимизации одной только модели дают убывающую отдачу.
Ловушка сериализации JSON
Сценарий: исследователи, оценивавшие систему обслуживания с низкой задержкой Clipper, разложили сквозную задержку запроса на сеть, сериализацию на CPU и выполнение модели (Crankshaw et al., 2017).
Диагностика: для легких моделей десериализация JSON на CPU и копирование данных IPC занимают больше времени, чем выполнение нейросети на ускорителе.
Системный урок: отчет об изолированной задержке вывода модели пропускает узкие места сквозного обслуживания. Промышленный бенчмаркинг должен учитывать разбор данных на CPU, сериализацию IPC и накладные расходы сетевого транспорта.
«Разбивка задержки вывода» дает иллюстративную разбивку задержки запроса вывода. Этап вычисления модели, который поставщики сообщают как свой «бенчмарк», занимает 5–100 мс, однако очередь, за которой он стоит, ожидает от 0 до более 1000 мс. Под нагрузкой один компонент, который измеряет бенчмарк, меркнет перед тем, который он не видит, и опубликованное число может быть лишь малой долей того, что реально испытывает пользователь.
| Компонент | Диапазон | Примечания |
|---|---|---|
| Сетевой обход туда и обратно | 10–100 мс | Зависит от региона |
| Разбор запроса | 0,1–1 мс | JSON/protobuf |
| Предобработка входа | 1–50 мс | Токенизация, изменение размера изображения |
| Время ожидания в очереди | 0–1000+ мс | Зависит от нагрузки |
| Вывод модели | 5–100 мс | «Бенчмарк» |
| Постобработка выхода | 0,5–10 мс | Декодирование, форматирование |
| Сериализация ответа | 0,1–1 мс | JSON/protobuf |
Разбивка задержки вывода: разные этапы конвейера вносят вклад в сквозную задержку, а вывод модели (число, которое поставщики обычно сообщают) может составлять лишь часть полного времени запроса. Под нагрузкой основной вклад может давать время ожидания в очереди, поэтому для реалистичной оценки производительности необходимо сквозное измерение. Диапазоны иллюстративны, а не универсальны.
Вклады отдельных компонентов объясняют, почему оптимизация любого отдельного этапа дает убывающую отдачу для сквозной производительности. Это потолок оптимизации, который формализует закон Амдала.
Закон Амдала: потолок оптимизации
Задача: конвейер компьютерного зрения тратит 8 мс на предобработку (декодирование JPEG, изменение размера, нормализацию) и 10 мс на вывод. Если ускорить только вывод в 5 раз, насколько на самом деле улучшится сквозная задержка?
Расчет: оптимизация вывода с 10 мс до 2 мс сокращает полную задержку с 18 мс только до 10 мс, то есть улучшение в 1,8 раза вместо 5 раз. Закон Амдала формализует этот потолок: если предобработка занимает долю от полной задержки, то даже бесконечно быстрый вывод дает ускорение не больше . Если предобработка составляет 44,4 процента полной задержки, доля дает максимальное достижимое ускорение , равное 2,25 раза, независимо от оптимизации модели.
Системный вывод: агрессивная оптимизация модели дает разочаровывающие сквозные результаты всякий раз, когда доминирует немодельная часть. Любое ускорение компонента, заявленное в отрыве, уменьшается, как только рядом измеряют нетронутые этапы, и недобор растет по мере того, как эти этапы занимают большую долю конвейера. Полные бенчмарки должны либо включать предобработку в измерения, либо явно указывать, что заявленные ускорения относятся только к компоненту вывода.
Потолок Амдала показывает, почему важна строгая методика бенчмаркинга. Полный отчет о задержке требует указывать, какие компоненты включены, проводить измерения в реалистичных условиях нагрузки и различать компонентные и сквозные метрики. Прежде чем интерпретировать любой результат бенчмарка, проверьте, что сам подход к измерению корректен.
Пропускная способность и эффективность батчей показывают, может ли система обслуживания использовать имеющуюся аппаратуру, не нарушая ограничений по задержке. Пропускная способность считает, сколько запросов вывода система обрабатывает в секунду; обычно ее выражают в запросах в секунду (QPS) или кадрах в секунду (FPS). Системы с одним экземпляром обрабатывают каждый вход сразу по его поступлении; батчевые системы обрабатывают несколько входов параллельно, используя параллелизм аппаратуры для большей эффективности.
Методика бенчмаркинга
Плохие бенчмарки оптимизируют не то.
Три практики отличают строгие бенчмарки от вводящих в заблуждение:
- Репрезентативные данные: сравните распределение входных данных бенчмарка с распределением в эксплуатации.
- Прогрев: укажите, сколько первых запусков отброшено до записи измерений.
- Изоляция: опишите машину, конкурирующие нагрузки и конфигурацию среды выполнения, использованные при измерении.
Например, облачные сервисы, которые обрабатывают миллионы запросов в секунду, выигрывают от пакетного вывода, когда большие группы входов обрабатываются вместе, чтобы максимизировать вычислительную эффективность. Напротив, робототехнике, интерактивному ИИ и дополненной реальности нужен вывод с низкой задержкой на одном экземпляре, когда система должна немедленно отвечать на каждый новый вход. Бенчмарки должны учитывать и вывод на одном экземпляре, и пакетную пропускную способность, чтобы давать полное представление о производительности вывода в разных сценариях развертывания.
Одной скорости недостаточно, потому что оптимизации вывода могут менять поведение модели. Снижение численной точности может ускорить вычисления и одновременно сократить память и энергию, как показывает иллюстративная оценка энергии MobileNetV2 («Упрощенная оценка энергии INT8 для MobileNetV2»), но вычисления в пониженной точности могут ухудшить точность. Поэтому бенчмарки вывода оценивают, как модели работают при разных численных настройках, например FP32, FP16 и INT8.27 Многие современные ускорители ИИ поддерживают вывод в смешанной точности, позволяя системам выбирать численные представления под требования нагрузки. Методы сжатия моделей28 дополнительно повышают эффективность, но их влияние на точность зависит от задачи и набора данных. Бенчмарки помогают решить, жизнеспособны ли такие оптимизации для развертывания, и гарантируют, что выигрыш в эффективности не покупается неприемлемой потерей точности.
Объем памяти и время загрузки модели определяют, может ли модель запуститься, остаться в памяти и отвечать в рамках среды развертывания. В отличие от обучения, где модели могут занимать несколько ускорителей, вывод часто работает в жестких бюджетах памяти. Общий размер модели определяет требования к хранению, использование RAM отражает рабочую память во время выполнения, а пропускная способность памяти может стать узким местом при передаче данных между вычислительными блоками. Производительность холодного старта становится критичной, когда модели загружаются по требованию, а не держатся в памяти постоянно. В бессерверных средах ИИ,29 где ресурсы масштабируются динамически вместе с входящими запросами, именно время от простоя до активного выполнения определяет, получат ли пользователи приемлемое время ответа.
Время загрузки модели — это длительность, которая нужна, чтобы загрузить обученную модель в память, прежде чем она сможет обрабатывать входы. В некоторых случаях, особенно на устройствах с ограниченными ресурсами, модели приходится часто перезагружать, чтобы освободить память для других приложений. Время первого запроса на вывод тоже важно, потому что оно отражает полную задержку, которую испытывает пользователь при работе с сервисом на базе ИИ. Бенчмарки помогают измерить эти задержки и убедиться, что системы вывода соответствуют требованиям к отзывчивости в реальном мире.
Метрики масштаба развертывания распространяют ту же логику с одного запроса на всю нагрузку. Облачные сервисы должны эффективно обслуживать миллионы одновременных пользователей, динамически выделяя ресурсы по мере колебаний спроса и не жертвуя задержкой; мобильные устройства должны управлять несколькими одновременными моделями ИИ, не перегружая систему. Масштабируемость показывает, насколько хорошо растет производительность вывода при добавлении вычислительных ресурсов. В некоторых случаях добавление GPU или TPU пропорционально увеличивает пропускную способность, но в других сценариях узкие места, такие как ограничение пропускной способности памяти или задержка сети, ограничивают эффективность масштабирования. Бенчмарки также оценивают, насколько хорошо система балансирует несколько одновременных моделей в реальном развертывании, где разные функции на базе ИИ могут работать одновременно без помех.
Энергопотребление замыкает цикл, потому что вывод работает в эксплуатации непрерывно. Мобильные и краевые устройства сталкиваются с самыми острыми ограничениями, где время работы батареи и тепловые пределы ограничивают вычислительные ресурсы. Даже в крупномасштабных облачных средах энергоэффективность напрямую влияет на эксплуатационные расходы и цели устойчивого развития. Энергию одного вывода часто измеряют в джоулях на вывод, что отражает, насколько эффективно система обрабатывает входы при минимальном энергопотреблении. В облачном выводе эффективность обычно выражают в запросах в секунду на ватт (QPS/Вт), чтобы количественно оценить баланс производительности и энергопотребления. Для мобильных приложений ИИ оптимизация энергопотребления вывода продлевает время работы батареи и позволяет моделям эффективно работать на устройствах с ограниченными ресурсами. Снижение энергозатрат также играет ключевую роль в том, чтобы крупномасштабные системы ИИ были экологически устойчивее, согласуя вычислительный прогресс с энергосберегающими стратегиями развертывания.
Оценка производительности вывода
В обучении системы оптимизируют совокупную пропускную способность на крупных офлайн-батчах, распределяя перемещение параметров по сотням или тысячам узлов ускорителей. Вывод работает в противоположном режиме: нагрузки определяются спросом, приходят асинхронно от внешних клиентов и ограничены жесткими соглашениями об уровне обслуживания (SLA) по задержке, емкостью памяти устройства и бюджетами теплового рассеивания. Поэтому оценка системы вывода требует измерять, насколько эффективно она балансирует время ответа, объем обработки и потребление физических ресурсов при шаблонах поступления, представительных для развертывания.
«Метрики производительности вывода» работают как фильтр развертывания: каждая метрика количественно описывает физическое или эксплуатационное ограничение, которое доминирует в конкретной среде обслуживания. Хвостовая задержка ограничивает медленные запросы в интерактивных сервисах, обращенных к пользователю, тогда как системы, критичные к безопасности, требуют детерминированных границ худшего случая или ограниченной вероятности пропуска сроков. С другой стороны, энергоэффективность (запросы в секунду на ватт) определяет краевые ускорители с батарейным питанием, где устойчивые вычисления ограничены емкостью батареи и пассивным теплоотводом, а не пиковой арифметической пропускной способностью.
| Категория | Ключевые метрики | Пример применения бенчмарка |
|---|---|---|
| Задержка и хвостовая задержка | Средняя задержка (мс на запрос); хвостовая задержка (p95, p99, p99,9) | Оценка интерактивной производительности и производительности мягкого реального времени |
| Пропускная способность и эффективность | Запросы в секунду (QPS); кадры в секунду (FPS); пакетная пропускная способность | Сравнение крупномасштабных облачных систем вывода |
| Влияние численной точности | Деградация точности (FP32 и INT8); ускорение от сниженной точности | Баланс между точностью и эффективностью оптимизированного вывода |
| Объем памяти | Размер модели (МБ/ГБ); использование RAM (МБ); загрузка пропускной способности памяти | Оценка осуществимости для краевых и мобильных развертываний |
| Холодный старт и время загрузки | Время загрузки модели (с); задержка первого вывода (с) | Оценка отзывчивости в бессерверном ИИ |
| Масштабируемость | Эффективность под нагрузкой; производительность обслуживания нескольких моделей | Оценка устойчивости систем с динамическим высоким спросом |
| Мощность и энергоэффективность | Потребляемая мощность (Вт); производительность на ватт (QPS/Вт) | Оптимизация энергопотребления для мобильного и устойчивого ИИ |
Метрики производительности вывода: метрики задержки, пропускной способности и использования ресурсов дают количественную основу для оптимизации развернутых систем машинного обучения и выбора подходящих аппаратных конфигураций, балансируя скорость, стоимость и точность в производственных приложениях.
Эти метрики взаимодействуют через фундаментальные аппаратные компромиссы. Максимизация пропускной способности за счет объединения запросов в большие батчи повышает арифметическую интенсивность, амортизируя трафик памяти при загрузке весов на несколько входов. Однако запросы должны ждать в очередях, пока соберутся батчи, что увеличивает задержку ожидания на запрос и нарушает бюджеты задержки реального времени. Аналогично, снижение численной точности с FP32 до INT8 сокращает потребность в пропускной способности памяти на 75 процентов и вдвое или вчетверо увеличивает пиковую скорость арифметики на тензорных ядрах, но рискует ухудшить точность, если шум квантования искажает чувствительные слои. Физическая среда развертывания определяет, какие компромиссы допустимы: гипермасштабные облачные серверы оптимизируют стоимость запроса, работая с высокой пакетной пропускной способностью и высокой загрузкой памяти, тогда как краевые устройства ограничены фиксированной емкостью SRAM и DRAM, временем работы батареи и границами теплового рассеивания.
Поскольку физические ограничения различаются между средами, никакой единый порядок метрик не годится для всех систем. Бенчмаркинг требует установить иерархию приоритетов, которая выводится прямо из контракта развертывания. «Иллюстративные приоритеты метрик по контексту развертывания» показывает, как приоритеты метрик меняются в пяти эксплуатационных контекстах, связывая аппаратные и эксплуатационные ограничения с целями оптимизации.
| Контекст развертывания | Первичный приоритет | Вторичный приоритет | Третичный приоритет | Ключевое проектное ограничение |
|---|---|---|---|---|
| Приложения реального времени | Задержка | Надежность | Объем памяти | Пользовательский опыт требует немедленного ответа |
| Облачные сервисы в масштабе | Пропускная способность (QPS) | Стоимость на единицу | Средняя задержка | Коммерческая жизнеспособность требует огромного масштаба |
| Краевые и мобильные устройства | Энергопотребление | Объем памяти | Задержка | Время работы батареи и ресурсные лимиты доминируют |
| Нагрузки обучения | Время обучения | Загрузка GPU | Эффективность памяти | Скорость исследований определяет темп экспериментов |
| Научные и медицинские | Точность | Надежность | Объяснимость | Корректность нельзя жертвовать ради производительности |
Иллюстративные приоритеты метрик производительности по контексту развертывания: пример порядка приоритетов показывает, как эксплуатационные ограничения меняют выбор бенчмарка и интерпретацию результатов; реальные пороги должны вытекать из спецификации развертывания.
Метрика, которая определяет архитектурный успех в одном контексте развертывания, может быть нерелевантной в другом. Задержка занимает первое место в автономной робототехнике, где конвейеры обработки датчиков должны завершаться в жестких сроках, чтобы сохранять устойчивость автомобиля, тогда как облачные пакетные сервисы принимают более высокую задержку в очереди в обмен на меньшую эксплуатационную стоимость запроса. Аналогично модель, развернутая на краевом устройстве, которая повышает пропускную способность, но потребляет дополнительную мощность, снижает общую полезность системы, когда емкость батареи или тепловой троттлинг становятся связывающим ограничением. Напротив, конвейер медицинской диагностики может рационально пожертвовать скоростью выполнения ради более высокой проверенной точности. Прирост пропускной способности в 2 раза представляет существенную экономическую ценность в гипермасштабном облачном кластере, но почти не дает пользы на устройстве с батарейным питанием, где снижение мощности на 20 процентов продлевает время эксплуатации.
Когда бенчмарки подводят, обычно причина в том, что они измеряют средние значения установившегося режима, а не переходное или наихудшее поведение, которое определяет производственный вывод. Отчет о средней задержке скрывает всплески задержек в очередях, сборку мусора памяти, дрожание планирования потоков и хвостовую конкуренцию; производственные соглашения об уровне обслуживания зависят от хвостовых перцентилей (, и ). Система обслуживания с приемлемым средним временем ответа все равно может вызывать заметные для пользователя остановки, если ее хвостовая задержка нарушает SLA.
Даже бенчмарк, который учитывает хвостовую задержку при постоянной нагрузке, исказит картину для систем по требованию или бессерверных систем, если игнорирует накладные расходы инициализации. В бессерверном обслуживании рабочие экземпляры масштабируются до нуля в периоды простоя. Задержка холодного старта30 измеряет полное время, нужное для выделения аппаратных ресурсов, загрузки весов модели из хранилища в память хоста и ускорителя, инициализации контекстов среды выполнения и выполнения первого запроса на вывод. Бенчмаркинг только прогретых экземпляров скрывает штраф по задержке, который испытывают конечные пользователи после периодов простоя.
Помимо задержек инициализации, бенчмарки вывода вводят в заблуждение, когда операционные метрики приводятся без функциональной проверки.
Оптимизация численной точности порождает серьезную ловушку сопоставимости между платформами ускорителей. Ускорители обеспечивают значительно более высокую пропускную способность операций INT831, чем базовые частоты вычислений с плавающей точкой FP32, но эти пиковые значения осмысленны только тогда, когда бенчмарк проверяет сохранение точности при шуме квантования, подтверждает аппаратную поддержку всех операторов модели и обеспечивает одинаковые определения операций в разных архитектурах.
Масштабирование аппаратуры вносит расходящиеся узкие места между обучением и выводом. Масштабирование распределенного обучения ограничено главным образом синхронизацией градиентов по межузловым межсоединениям, тогда как масштабирование вывода сталкивается с насыщением пропускной способности памяти при генерации токенов, задержкой коллективных коммуникаций при тензорном параллелизме и накладными расходами балансировщика нагрузки при маршрутизации запросов между распределенными репликами обслуживания. На краевых устройствах и плотных корпусах ускорителей устойчивые потоки запросов вызывают тепловой троттлинг и снижают рабочие тактовые частоты ниже номинальных пиковых значений («Аппаратное ускорение»). Бенчмарк, оптимизированный исключительно под пиковую облачную пропускную способность, не учитывает эти тепловые и памятные ограничения, что подчеркивает: наборы оценки должны отражать реальные условия развертывания, а не идеализированные спецификации аппаратуры.
Чтобы учесть эти эксплуатационные реалии, нужны строгие статистические протоколы, а не изолированные циклы выполнения. Корректный бенчмаркинг вывода требует устойчивой длительности прогонов, реалистичных распределений поступления запросов и строгого учета перцентилей задержки. Стандартизированные консорциумы бенчмарков формализуют эти требования в отдельные сценарии развертывания: например, MLPerf Inference сообщает 90-й перцентиль задержки для краевых задач SingleStream, задает порог 99-го перцентиля задержки при максимизации пропускной способности запросов в сценариях Server и измеряет неограниченную пакетную мощность в режимах Offline (Reddi et al., 2019). Эти протоколы, специфичные для сценариев, дают структурированную основу, необходимую для оценки систем машинного обучения по их ограничивающим физическим пределам.
Бенчмарки вывода MLPerf
Чтобы избежать этих ловушек, бенчмаркинг вывода нужно рассматривать как процесс балансировки нескольких приоритетов (задержки, пропускной способности, памяти, энергии и точности), а не оптимизации по одной метрике в отрыве. MLPerf Inference реализует этот баланс через специфичные для развертывания сценарии. MLPerf Inference важен, потому что контекст развертывания меняет смысл результата. Бенчмарк, разработанный MLCommons,32 дает стандартизированную рамку для оценки производительности вывода машинного обучения в разных средах развертывания. MLPerf начинался с бенчмарков обучения в 2018 году; MLPerf Inference добавили позже, чтобы стандартизировать оценку на этапе развертывания по разным сценариям. По мере того как системы машинного обучения расширялись в разнообразные приложения, стало ясно, что универсальный бенчмарк вывода недостаточен. Получившееся семейство бенчмарков MLPerf Inference сопоставляет каждый бенчмарк с типом развертывания, так что результат можно интерпретировать относительно задержки, пропускной способности, памяти и ограничений по мощности, с которыми столкнется система.
MLPerf Inference
MLPerf Inference (Reddi et al., 2019) служит базовым бенчмарком вывода, задавая стандартизированные сценарии для оценки на этапе развертывания в дата-центрах и на краю сети. Заявки делятся на два трека: закрытый дивизион требует строгой структуры модели и эквивалентности точности, чтобы обеспечить прямое сравнение аппаратуры с аппаратурой (apples-to-apples), тогда как открытый дивизион позволяет участникам менять архитектуру модели, алгоритмы квантования или переобучать модели, чтобы показать творческое алгоритмическое совместное проектирование. Бенчмарк оценивает производительность на таких нагрузках глубокого обучения, как классификация изображений, детекция объектов, обработка естественного языка и рекомендательные системы. Эта версия MLPerf широко используется как опорная точка для сравнения ускорителей ИИ, GPU, TPU и CPU, когда правила подачи и сценарий нагрузки соответствуют предполагаемой среде развертывания.
Крупные технологические компании регулярно ссылаются на результаты MLPerf при закупке аппаратуры. При выборе аппаратуры для инфраструктуры систем рекомендаций баллы MLPerf на нагрузках DLRM33 могут помочь выбрать между разными поколениями ускорителей. От поколения к поколению результаты бенчмарков часто показывают существенный прирост пропускной способности, хотя его величина зависит от нагрузки, программного стека и конфигурации системы. Это иллюстрирует, как стандартизированные бенчмарки могут превращаться в весомые инфраструктурные решения.
Эти стандартизированные оценки дают ценные сравнения, но стоимость полного бенчмаркинга ограничивает, кто может участвовать и насколько тщательно оцениваются системы.
Стоимость полного бенчмаркинга
Подача результатов в MLPerf может требовать специальных инженерных усилий, доступа к аппаратуре, настройки, проверки и тщательной документации по всем нужным конфигурациям. Стоимость сильно зависит от нагрузки и охвата, но она достаточно высока, чтобы заявки определялись крупными технологическими компаниями и поставщиками аппаратуры, тогда как небольшие организации опираются на опубликованные результаты, а не проводят собственные полные оценки. Этот барьер мотивирует к более легким внутренним практикам бенчмаркинга, которые организации могут использовать для обоснованных решений без расходов на полноценный стандартизированный бенчмаркинг.
Остальное семейство MLPerf Inference сужает эту базу по контексту развертывания. MLPerf Mobile (MLCommons, 2024) оценивает, может ли модель оставаться отзывчивой в пределах мощности и памяти смартфона (Janapa Reddi et al., 2022), измеряя нагрузки классификации изображений, детекции объектов, сегментации изображений и обработки языка. MLPerf Client (MLCommons, 2026) решает задачу локальных вычислений: могут ли потребительские устройства выполнять ИИ-нагрузки непосредственно, а не полагаясь на облачный вывод. Его нынешний акцент на локальных генеративных и LLM-нагрузках делает центральные процессоры, дискретные GPU и интегрированные NPU частью оцениваемой системы, а не случайным аппаратным окружением. MLPerf Tiny (Banbury et al., 2021) проверяет крайний случай ограничений: встраиваемые системы ИИ со сверхнизким энергопотреблением, такие как устройства интернета вещей, носимые гаджеты и микроконтроллеры. Эти варианты сохраняют ту же дисциплину бенчмарка, но меняют определяющий ресурс: от пропускной способности дата-центра к отзывчивости клиента, мощности мобильного устройства или памяти микроконтроллера.
Сценарии выполнения MLPerf
Одно и то же оборудование может показывать сильно различающиеся результаты бенчмарка в зависимости от того, как поступают запросы, и это объясняет, почему заявления поставщиков часто не предсказывают производительность в эксплуатации. Классический MLPerf Inference определяет четыре сценария выполнения, которые характеризуют разные шаблоны трафика, и каждый требует своей стратегии оптимизации (Reddi et al., 2019). Нынешние клиентские варианты бенчмарка и варианты для генеративного ИИ также включают интерактивные измерения для чувствительных к задержке LLM-нагрузок, где главными становятся такие метрики, как время до первого токена и время на выходной токен (MLCommons, 2026).
SingleStream
SingleStream обрабатывает по одному запросу за раз и измеряет задержку последовательного вывода. Этот сценарий моделирует мобильные и встраиваемые приложения, где с устройством работает один пользователь: приложение камеры смартфона, классифицирующее изображения, голосовой помощник, обрабатывающий речь, или носимое устройство, распознающее жесты. Ключевая метрика — задержка на запрос, а батчинг не дает выгоды, потому что запросы поступают только после того, как предыдущий результат уже использован. Оптимизация сосредоточена на эффективности предобработки и энергопотреблении, а не на пропускной способности.
MultiStream
MultiStream обрабатывает одновременно несколько синхронизированных входных потоков и моделирует сценарии вроде автономных автомобилей с несколькими камерами, которые нужно обрабатывать вместе для пространственного слияния. В отличие от последовательных запросов SingleStream, MultiStream требует обработки кадров со всех датчиков в жестких сроках частоты видео. Главное отличие от режима Server в том, что входы MultiStream поступают синхронно, тогда как запросы Server приходят независимо и непредсказуемо. Ключевое ограничение — синхронизация: все потоки должны завершиться, прежде чем модуль планирования сможет действовать. Оптимизация сосредоточена на обработке дрожания и соблюдении жестких сроков, а не на средней пропускной способности.
Server
Server генерирует запросы по распределению Пуассона и моделирует трафик облачных API, где запросы приходят независимо и непредсказуемо. Этот сценарий описывает веб-сервисы, которые обслуживают миллионы запросов от разных пользователей. В отличие от гарантированного последовательного поступления в SingleStream, трафик Server создает динамику очередей, при которой несколько запросов конкурируют за ресурсы. Ключевые метрики — пропускная способность (запросы в секунду) и хвостовая задержка (p99), а динамический батчинг может повысить эффективность, объединяя запросы, пришедшие в пределах временного окна. Оптимизация балансирует пропускную способность с SLO по задержке.
Offline
Offline предоставляет все входы заранее и измеряет максимальную пропускную способность, когда ограничения по задержке сняты. Этот сценарий описывает конвейеры пакетной обработки: ночную обработку данных, научные вычисления или предварительный расчет рекомендаций. Без требований к задержке системы могут использовать максимальные размеры батчей, чтобы полностью загрузить аппаратуру. Ключевая метрика — чистая пропускная способность (образцов в секунду), а оптимизация полностью сосредоточена на эффективности аппаратуры.
«Сценарии выполнения MLPerf» сопоставляет классические сценарии выполнения и более новый интерактивный сценарий, ориентированный на LLM, с их контекстами развертывания и стратегиями оптимизации.
| Сценарий | Контекст | Стратегия | Фокус |
|---|---|---|---|
| SingleStream | Мобильные приложения, встраиваемые устройства | Без батчинга (батч = 1) | Предобработка, энергоэффективность |
| MultiStream | Автономное вождение, видеоаналитика | Синхронизированное слияние датчиков | Обработка дрожания, гарантии сроков |
| Server | Облачные API, веб-сервисы | Динамический батчинг с таймаутом | Настройка компромисса пропускной способности и задержки |
| Offline | Пакетная обработка, конвейеры данных | Максимальный размер батча | Пропускная способность, загрузка аппаратуры |
| Interactive | Чат, агенты, локальный генеративный ИИ | Потоковая выдача токенов, управление KV-кэшем | Время до первого токена, время на выходной токен |
Сценарии выполнения MLPerf: классические сценарии вывода MLPerf соответствуют разным контекстам развертывания, и каждый требует своей стратегии оптимизации; более новые интерактивные сценарии расширяют рамку на LLM-нагрузки, чувствительные к задержке. SingleStream и MultiStream задают приоритет задержке, Server балансирует пропускную способность и задержку, Offline максимизирует пропускную способность, а Interactive делает упор на отзывчивость на уровне токенов. Соответствие сценария контексту развертывания определяет, какие результаты бенчмарка релевантны.
Каждый сценарий работает как контракт нагрузки: он фиксирует, какую форму задержки или пропускной способности должен сохранять корректный результат.
MobileNetV2 на EdgeTPU
Развивая маячный пример «Проверка развертывания MobileNetV2», заявление об аппаратном ускорении из «Аппаратного ускорения» оценивается на иллюстративном краевом сценарии вывода в стиле SingleStream (Reddi et al., 2019); (Banbury et al., 2021).
Заявление об аппаратном ускорении: в этом иллюстративном сценарии краевого ускорителя вывод MobileNetV2 в INT8 занимает около 2 мс на ускорителе, примерно в 7,5 раза быстрее, чем на CPU класса Cortex-M (около 15 мс). Реальные результаты зависят от покрытия операторов, тактовой частоты, теплового состояния и реализации.
«EdgeTPU против Cortex-M7: сценарий MobileNetV2» приводит допущения иллюстративного сценария в стиле SingleStream.
Метрика CPU (Cortex-M7) EdgeTPU Прямой коэффициент Системный коэффициент Задержка вывода около 15 мс около 2 мс в 7,5 раза быстрее — Сквозная задержка около 18 мс около 6 мс — примерно в 3 раза быстрее Потребляемая мощность около 120 мВт около 500 мВт — примерно в 4,2 раза выше Энергия на вывод около 1,8 мДж около 1 мДж — примерно в 1,8 раза эффективнее EdgeTPU против Cortex-M7: сценарий MobileNetV2. Иллюстративные значения задержки вывода, сквозной задержки, мощности и энергии в стиле SingleStream показывают, как затраты на предобработку сужают заявленное ускорение ускорителя; это не контролируемые измерения.
Что это показывает: при этих допущениях ускорение вывода в 7,5 раза сужается до примерно 3 раз в сквозном измерении, потому что предобработка в обоих случаях выполняется на CPU. EdgeTPU тратит больше активной мощности, но завершает вывод быстрее, поэтому энергия вывода меньше. Для решения о развертывании нужны контролируемые измерения.
Решение о развертывании зависит от нагрузки. Для устройств с батарейным питанием, которые работают редко, одного расчета активного вывода достаточно, чтобы предпочесть EdgeTPU, но полное влияние на батарею зависит от мощности сна, энергии пробуждения, накладных расходов на передачу данных с хоста и от того, добавляет ли ускоритель ток утечки в простое, пока система ждет. Для непрерывной видеоработы более вероятно, что доминировать будет меньшая энергия активного вывода на EdgeTPU.
Результат SingleStream показывает, почему бенчмаркинг требует соотносить сценарий MLPerf с контекстом развертывания: SingleStream делает упор на задержку, тогда как бенчмарки Offline привели бы к другим выводам, оптимизированным под пропускную способность, а не под задержку.
Сценарии объясняют, почему одна и та же аппаратура может показывать сильно различающиеся результаты бенчмарка. В иллюстративном сравнении ускоритель с высокой пропускной способностью в режиме Offline может выдерживать заметно меньшую пропускную способность в режиме Server, когда учитываются ограничения p99 по задержке и накладные расходы очередей, потому что режим Server не всегда может использовать максимальные размеры батчей. Выбирая сценарий для конкретного приложения, гарантируют, что результаты бенчмарка предскажут производительность в эксплуатации. Результат MobileNetV2 делает выбор сценария требованием развертывания, а не вопросом формы отчета.
Бенчмарки обучения измеряют скорость обучения; бенчмарки вывода измеряют скорость обслуживания. Однако у обеих мер есть общее критическое слепое пятно: они ничего не говорят о том, сколько энергии система тратит на достижение этой скорости. Система, которая устанавливает рекорды пропускной способности при потреблении киловатт мощности, может быть экономически неустойчивой или физически непригодной для развертывания на краю сети. Чтобы завершить картину оценки, нужно измерять мощность: энергетическую цену производительности.
Методы измерения мощности
Производитель чипов рекламирует «10 TOPS при 0,5 Вт», но при устойчивой нагрузке вывода тепловой троттлинг снижает фактическую пропускную способность до 3 TOPS при 2 Вт. Без стандартизированного измерения мощности этот разрыв в эффективности в 13,3 раза между паспортными данными и реальностью остается незамеченным до развертывания.
Это измерение эффективности критически важно, потому что в «Аппаратном ускорении» TOPS/Вт была установлена как главная цель проектирования наравне с сырыми TOPS. Бенчмарки мощности проверяют, дают ли ускорители, оптимизированные по эффективности, обещанную экономию энергии. Показатель TOPS/Вт особенно уязвим для подгонки, потому что это отношение двух отдельно заявляемых пиков: поставщик может снять числитель (операции) при размере батча и точности, максимизирующих пропускную способность, а знаменатель (ватты) — в почти простойном рабочем режиме, так что заявленная эффективность описывает состояние, которое чип никогда не занимает под реальной нагрузкой. Бенчмарки мощности закрывают эту лазейку, фиксируя нагрузку и окно измерения и заставляя числитель и знаменатель считываться в одной и той же рабочей точке.
Мощность развертывания охватывает почти восемь порядков: от микроватт до киловатт.
Измерение мощности принципиально отличается от измерения времени выполнения. Задержка — это один интервал, а мгновенная мощность () непрерывно колеблется на протяжении микросекундных фаз выполнения и дрейфует на протяжении минут по мере нагрева кремния, что увеличивает ток утечки, зависящий от температуры. Кроме того, развертывания ML охватывают крайне широкий физический диапазон. Как каталогизировано в «Спектре энергопотребления», представительные системы занимают почти восемь порядков величины: от сопроцессоров распознавания ключевых слов в микроваттах до стоек дата-центров в киловаттах (Henderson et al., 2020).
| Категория | Тип устройства | Энергопотребление |
|---|---|---|
| Сверхмалые | Нейропроцессор принятия решений (NDP) | 150 мкВт |
| Сверхмалые | Микроконтроллер M7 | 25 мВт |
| Мобильные | Raspberry Pi 4 | 3,5 Вт |
| Мобильные | Смартфон | 4 Вт |
| Краевые | Умная камера | 10–15 Вт |
| Краевые | Краевой сервер | 65–95 Вт |
| Облачные | Узел ML-сервера | 300–500 Вт |
| Облачные | Стойка ML-сервера | 4–10 кВт |
Спектр энергопотребления: представительные точки развертывания из этой таблицы охватывают почти восемь порядков величины в потребности мощности: от устройств TinyML уровня микроватт (150 мкВт) до стоек ML-серверов уровня киловатт (10 кВт). «Разница в энергопотреблении систем» расширяет ту же картину до 5,6 мкВт на нижней границе TinyML и примерно до 498 кВт на верхней границе кластеров обучения, охватывая почти одиннадцать порядков величины. Этот огромный диапазон объясняет, почему ни одна техника измерения и ни одна метрика эффективности не применимы универсально: бенчмарк нейропроцессора в 150 мкВт требует принципиально иной инструментации, чем измерение стойки сервера в 10 кВт.
Поскольку мощность меняется от микроватт до киловатт, ни один прибор и ни один протокол измерения не подходят везде. Бенчмарк постоянно включенного нейродатчика требует измерять токи в микроамперах на шинах в милливольтах, тогда как бенчмарк серверной стойки требует измерять высоковольтный трехфазный переменный ток на распределительном щите. Это расхождение заставляет стандарты бенчмарков задавать точные физические границы того, какая аппаратура входит в энергетический учет.
Границы измерения мощности
То, где инженер проводит границу системы, определяет, что считается эффективным. Если бенчмарк измеряет только ядро ускорителя, он игнорирует центральный процессор хоста, который управляет шиной PCIe, внешнюю DRAM, хранящую веса, и вентиляторы охлаждения, которые отводят тепло. «Границы измерения мощности» показывает, как MLPerf задает границы измерения на трех уровнях развертывания: компоненты внутри сплошных зеленых контуров попадают в энергетический учет, а компоненты с красными пунктирными контурами явно исключены (Tschand et al., 2024).
Границы измерения мощности: MLPerf задает системные границы для измерения мощности, от однокристальных устройств до узлов дата-центра целиком, чтобы обеспечить честное сравнение энергоэффективности разной аппаратуры. Эти границы определяют, энергопотребление каких компонентов входит в опубликованные метрики, и влияют на интерпретацию результатов производительности. Источник: (Tschand et al., 2024).
Три уровня на «Границах измерения мощности» отражают разные аппаратные интерфейсы. В развертываниях TinyML весь маломощный системный кристалл (вычислительные ядра, внутреннюю SRAM и блоки управления питанием) попадает внутрь границы и измеряется непосредственно на шине постоянного тока. Выделенные узлы вывода расширяют этот периметр, включая центральные процессоры хоста, карты ускорителей, шины PCIe, локальное хранилище и активные вентиляторы в корпусе, но исключая удаленные сети хранения. Многостоечные развертывания для обучения измеряют вычислительные узлы и коммутаторы межсоединений верхнего уровня стойки, но исключают централизованные чиллеры дата-центра, распределительные щиты уровня объекта (PDU) и разнесенные кластеры хранения.
Граница измерения определяет, какие компоненты учитываются; состав нагрузки определяет, где тратится их энергия. На мобильных устройствах с TensorFlow Mobile перемещение данных составляет 57,3 процента полной энергии вывода (Boroumand et al., 2018), и это показывает, почему одного подсчета операций недостаточно для прогноза энергопотребления. Разобранный пример в блокноте «Почему INT8 экономит энергию» раскладывает энергию вывода MobileNetV2 и показывает, как переход с FP32 на INT8 бьет одновременно по узкому месту перемещения памяти и по затратам на переключение арифметики.
Почему INT8 экономит энергию
Задача: при заданной модели энергии компонентов для 45 нм, насколько замена FP32 на INT8 снижает энергию чтения весов MobileNetV2 и арифметики?
Напомним из «Аппаратного ускорения», что перемещение данных стоит гораздо дороже энергии, чем вычисления над ними (инвариант перемещения энергии, сформулированный в «Инженерии данных» и подсчитанный по оценкам Horowitz (Horowitz, 2014)). Чтобы понять, почему квантование снижает энергопотребление, нужно разложить энергию на физические источники. Два доминирующих фактора определяют энергию вывода: вычислительные операции и обращения к памяти.
Более узкие типы данных обычно требуют меньше энергии переключения и хранения на операцию, поэтому «Энергия операции по точности» показывает разрыв в 18 раз между стоимостью умножения FP32 и INT8:
Точность Энергия умножителя Относительная стоимость FP32 около 3,7 пДж/FLOP 1× FP16 около 1,1 пДж/FLOP 0,3× INT8 около 0,2 пДж/FLOP 0,05× Энергия операции по точности: стоимость энергии одного умножения в FP32, FP16 и INT8 с относительной стоимостью, нормированной к FP32. Показано, почему более узкие типы данных снижают энергию арифметики. Значения соответствуют оценкам для 45 нм из (Horowitz, 2014) и раздела «Числа, которые нужно знать» приложения «Основы машины».
8-битный умножитель в этой компонентной модели для 45 нм тратит примерно в 18 раз меньше энергии, чем 32-битный умножитель с плавающей точкой, потому что более узкая арифметика уменьшает работу переключения и хранения (Horowitz, 2014). Раздел «Числа, которые нужно знать» приложения «Основы машины» собирает оценки на операцию, лежащие в основе этих отношений; абсолютные значения и отношения зависят от схемотехники и технологии производства.
«Энергия доступа к памяти по уровням» расширяет картину на доступ к памяти: стоимость энергии на байт на каждом уровне иерархии.
Уровень памяти Энергия на байт Относительная стоимость Регистр около 0,1 пДж/байт 1× Кэш L1 около 1 пДж/байт 10× Кэш L2 около 5 пДж/байт 50× DRAM около 160 пДж/байт 1 600× Энергия доступа к памяти по уровням: стоимость энергии на байт по иерархии от регистров до DRAM с относительной стоимостью, нормированной к чтению из регистра. Показано, почему трафик памяти вне кристалла доминирует в бюджетах энергии вывода. Значения следуют той же канонической модели оценок энергии, что в (Horowitz, 2014) и разделе «Числа, которые нужно знать» приложения «Основы машины».
Доступ к памяти доминирует: чтение одного байта из DRAM стоит дороже доступа к регистру более чем в 1 600 раз.
Расчет: энергия компонентов следует соотношениям и . Члены FP32 дают 2 243 мкДж + 2 220 мкДж = 4 463 мкДж; члены INT8 дают 561 мкДж + 120 мкДж = 681 мкДж. Отношение итогов дает снижение в 6,6 раза в этой упрощенной модели.
«Упрощенная оценка энергии INT8 для MobileNetV2» объединяет два эффекта в намеренно упрощенной модели MobileNetV2. Она учитывает одно чтение DRAM на вес и относит каждый учтенный FLOP к энергии умножителя, исключая трафик активаций, поведение кэшей, сложение как отдельную стоимость, накладные расходы управления и статическую мощность:
Компонент FP32 (14 МБ) INT8 (3,5 МБ) Экономия Одно чтение веса из DRAM 2 243 мкДж 561 мкДж 4× Вычисления (600 MFLOP) 2 220 мкДж 120 мкДж 18,5× Итого 4 463 мкДж 681 мкДж 6,6× Упрощенная оценка энергии INT8 для MobileNetV2: одно чтение веса плюс энергия умножителя за каждый учтенный FLOP по компонентной модели энергии для 45 нм. Это не измерение вывода на всем устройстве.
Системный вывод: в этой упрощенной модели чтение весов и арифметика вносят сопоставимый вклад в энергию FP32 (2 243 мкДж и 2 220 мкДж), и INT8 снижает оба, сокращая итог с 4 463 мкДж до 681 мкДж. Это объясняет физический механизм возможной экономии, но утверждения о времени работы батареи или энергии на вывод требуют контролируемых измерений мощности всего устройства.
За пределами отдельных серверных узлов крупные развертывания вводят общую инфраструктуру, которая усложняет определение границ. В дата-центрах системы охлаждения и распределения питания составляют от 20 до 30 процентов полного потребления электроэнергии объекта (Barroso et al., 2019). Эти накладные расходы уровня объекта описывает коэффициент эффективности использования энергии (PUE):
Значения PUE варьируются примерно от 1,1 в гипермасштабных объектах с прямым жидкостным охлаждением чипов до более 2,0 в устаревших объектах, которые полагаются на прецизионные кондиционеры машинного зала (Barroso et al., 2019). Если оценка сообщает только энергию, потребленную из розетки сервера, она исключает этот множитель объекта. Кроме того, динамическое масштабирование напряжения и частоты (DVFS) непрерывно меняет мощность процессора и тепловыделение во время выполнения (Kim et al., 2008), создавая тепловые обратные связи, которые меняют сами накладные расходы охлаждения.
Вычислительная эффективность и энергопотребление
Полная мощность в цифровых КМОП-схемах складывается из динамической мощности переключения и статической мощности утечки:
Здесь — коэффициент активности переключения затворов, — физическая емкость нагрузки, — напряжение питания, — тактовая частота, а — ток утечки, зависящий от температуры. Исторически число вычислений на киловатт-час удваивалось примерно каждые 1,5 года — долгосрочная тенденция роста эффективности, известная как закон Кумея (Koomey et al., 2011). Однако внутри одного поколения аппаратуры динамическая мощность ограничивает рост пропускной способности. Повышение тактовой частоты требует масштабировать напряжение питания примерно линейно, чтобы сохранить запас для переключения транзисторов, что дает кубический рост динамической мощности рассеяния:
Удвоение тактовой частоты, чтобы вдвое увеличить скалярную пропускную способность, может обойтись восьмикратным штрафом по динамической мощности (Le Sueur and Heiser, 2010). Этот кубический штраф объясняет, почему современные ускорители ML предпочитают массивные параллельные массивы простых исполнительных блоков на умеренных частотах узким конвейерам на экстремальных частотах.
Поскольку масштабирование частоты быстро упирается в пределы TDP, проектировщики систем оптимизируют эффективность по осям Данных, Алгоритма и Машины. Со стороны алгоритма и данных арифметика целых чисел пониженной точности (INT8 или FP8) напрямую уменьшает емкость переключения в арифметико-логических блоках и сжимает трафик памяти по межсоединениям, сохраняя точность модели и снижая динамическую энергию (Jacob et al., 2018); (Wu et al., 2020); (Gholami et al., 2021). Со стороны машины системы работают вблизи минимума энергетико-временного произведения (EDP), а не на пиковой тактовой частоте. На мобильных устройствах с ограниченной батареей работа в точке пиковой эффективности сохраняет время работы от батареи; в дата-центрах она максимизирует пропускную способность на мегаватт выделенной мощности.
Стандартизированное измерение мощности
Универсальные бенчмарки мощности, такие как SPECpower_ssj2008, измеряют мощность серверов на ступенчатых уровнях нагрузки (от 0 до 100 процентов с шагом 10 процентов), используя транзакционные нагрузки установившегося режима (Lange, 2009). ML-нагрузки, напротив, демонстрируют крайнюю временную изменчивость: мгновенная мощность быстро колеблется между вычислительно-ограниченными матричными умножениями (где систолические массивы или тензорные ядра потребляют пиковый ток) и ограниченными памятью простоями или передачами токенов (где исполнительные блоки ждут выборки из DRAM или межсоединения).
Для описания этих колебаний нужна откалиброванная физическая инструментация. Программные профилировщики могут читать встроенные счетчики энергии, такие как Intel RAPL или NVIDIA NVML, но у этих интерфейсов два недостатка: запросы выборки занимают такты хоста и искажают выполнение, а их внутренние модели редко можно проследить до откалиброванных лабораторных эталонов. Поэтому стандартизированные бенчмарки, такие как MLPerf Power, требуют внешних откалиброванных физических анализаторов мощности (например, анализаторов Yokogawa или Keithley), подключенных через встроенные токовые шунты или датчики Холла к сетевому питанию переменного тока или шинам постоянного тока (Tschand et al., 2024).
Чтобы не допустить наложения (алиасинга) кратковременных пиков на границах ядер длительностью в микросекунды, анализаторы мощности должны выбирать ток и напряжение с частотой в килогерцах и интегрировать мгновенную мощность в полную энергию:
Чтобы артефакты холодного старта не искажали результаты, обвязка бенчмарка выполняет три этапа протокола:
- Фаза прогрева выполняет неизмеряемые выводы, пока буферы инструкций, буферы весов и температуры переходов кремния не выйдут на установившееся тепловое равновесие.
- Окно устойчивого измерения выполняет повторяющиеся выводы в течение минут, чтобы усреднить сдвиги микроархитектурных фаз и тепловой дрейф.
- Синхронизация аппаратуры и программы сопоставляет метки времени мощности анализатора с метками отправки запросов от генератора нагрузки.
Структура нагрузки дополнительно меняет профиль мощности. В трансформерах фаза авторегрессивного декодирования ограничена пропускной способностью памяти и потребляет умеренную среднюю мощность, тогда как фаза предварительного заполнения промпта выполняет большие матричные умножения, которые дают резкие всплески мощности. Рекомендательные модели вроде DLRM, в которых доминируют разреженные выборки из таблиц эмбеддингов в DRAM, тратят больше энергии на передачи по шине памяти, чем на арифметическую логику. Размер батча создает еще один компромисс: большие батчи амортизируют чтение параметров на большее число входов и снижают энергию на вывод, но поднимают мгновенную мощность к тепловому пределу ускорителя. На краю сети результат определяет доля активного времени: для прерывистого детектора ключевых слов, который активен 1 процент времени, базовая мощность сна и утечки расходуют более 90 процентов емкости батареи, и эффективность активного вывода становится второстепенной по сравнению с управлением состоянием низкого энергопотребления.
Разбор MLPerf по энергопотреблению
MLPerf Power (Tschand et al., 2024) переводит сырые электрические измерения в стандартизированные метрики эффективности: завершенные выводы в секунду на ватт при строго заданной границе системы. Этот протокол применяет единые принципы измерения в центрах обработки данных, на краю сети и в сверхмаломощных сценариях, где определяющее ограничение смещается от охлаждения стоек и эксплуатационных расходов к времени работы батареи и сбору энергии в микроваттах.
Стандартизация границы предотвращает вводящие в заблуждение сравнения между архитектурными семействами. Требуя внешних анализаторов мощности, откалиброванного журналирования и фиксированных порогов задержки, MLPerf Power гарантирует, что опубликованные числа эффективности отражают устойчивое выполнение, а не недостижимые кратковременные состояния.
За последовательные раунды подачи бенчмарков с 2021 по 2024 год стандартизированные измерения показали, как архитектурные улучшения, оптимизации компиляторов и арифметика пониженной точности переходят в реальный прирост эффективности в эксплуатации. Результаты дата-центров на рисунке «Рост энергоэффективности дата-центров» иллюстрируют эти нормированные траектории эффективности для разных ML-нагрузок.
Рост энергоэффективности дата-центров: каждая серия нормирована к своей первой построенной версии, поэтому сравнивайте улучшение внутри одной нагрузки, а не абсолютную эффективность между нагрузками. Источник: (Tschand et al., 2024).
RetinaNet и ResNet показывают самый большой прирост на графике: каждая достигает трехкратного роста исходной нормированной эффективности. BERT и GPT-J дают рост примерно в 1,9 раза, DLRM-v2 — примерно в 1,7 раза, Llama 2 — примерно в 1,5 раза, а RNN-T — примерно в 1,3 раза. Эти различия отражают арифметическую интенсивность каждой нагрузки. Сверточные сети со статическими формами и высокой операционной интенсивностью (RetinaNet и ResNet) сразу выиграли от зрелого выполнения INT8 на тензорных ядрах и слияния ядер. Напротив, большие языковые модели (GPT-J и Llama 2) и рекомендательные модели (DLRM-v2) остаются ограниченными пропускной способностью памяти при авторегрессивном декодировании и разреженных выборках эмбеддингов, и выигрыш эффективности там зависит от инноваций подсистемы памяти, а не от масштабирования сырых вычислений.
Протоколы тайминга и инструментация мощности дают сырые данные для бенчмаркинга. Однако сами по себе сырые данные не гарантируют обоснованных выводов. Чтобы превратить измерения в осмысленные сравнения, нужно понимать систематические источники ошибок, смещений и рассогласований, которые могут сделать даже тщательно собранные числа бенчмарка вводящими в заблуждение.
Лучшие практики бенчмаркинга
Стек вывода, который проходит лабораторный прогон в установившемся режиме, все равно может не уложиться в целевые задержки, когда производственный трафик приходит всплесками или когда смесь входов смещается в сторону дорогих примеров. У обучения, вывода и энергоэффективности есть устоявшиеся протоколы измерения, проверенные через MLPerf, но знать, что измерять, недостаточно, без понимания того, чего бенчмарки не улавливают и почему этот разрыв приводит к нарушению целевых уровней обслуживания в эксплуатации.
Бенчмарки делают упрощающие допущения, которые позволяют стандартизированно сравнивать, но расходятся с реальностью эксплуатации. Наборы для обучения фиксируют данные и жестко задают случайность; производственные данные и условия переобучения меняются непрерывно. Наборы для вывода подчеркивают заданный сценарий установившегося режима; производственный трафик показывает всплесковые распределения поступления и переменные длины последовательностей. Бенчмарки мощности контролируют тепловую среду; развернутые ускорители сталкиваются с переменной температурой окружающей среды и устойчивыми тепловыми нагрузками. Четыре категории ограничений — статистические, связанные с развертыванием, системного проектирования и организационные — определяют, переносятся ли результаты бенчмарка в успешное развертывание.
Статистические и методологические проблемы
Результаты бенчмарка надежны ровно настолько, насколько надежен статистический аппарат, который их получает. Три базовые методологические проблемы регулярно подрывают эту надежность.
Неполное покрытие задачи возникает, когда бенчмарк задействует лишь узкую рабочую точку системы. Контролируемые наборы данных, такие как CIFAR-10 (Krizhevsky, 2009), ограничивают входы однородными изображениями низкого разрешения ( пикселя), которые полностью помещаются в кэши на кристалле (L2/L3). Этот небольшой рабочий набор скрывает узкие места пропускной способности HBM и исключает динамическое выделение памяти, накладные расходы запуска ядер и несогласованные обращения к памяти, которые доминируют в производственных конвейерах компьютерного зрения. Модель, которая показывает высокую точность и пропускную способность на однородном уменьшенном бенчмарке, может встать в эксплуатации, когда столкнется с переменным разрешением изображений, произвольными соотношениями сторон и шумом датчиков, которые вынуждают часто перекомпилировать ядра или переходить на резервные пути выполнения.
Статистическая незначимость возникает, когда оценки опираются на слишком мало испытаний, чтобы отличить алгоритмические улучшения от шума измерения, особенно когда сама среда оценки вносит дисперсию. Оценка больших языковых моделей — хороший пример этой уязвимости: оценивают ли кандидатные генерации относительно эталона по человеческим оценкам предпочтения или по протоколу «LLM как судья», баллы сильно меняются в зависимости от формулировки промпта, согласованности модели-судьи и порядка ответов. Заявленное двухпунктовое преимущество может исчезнуть при другом шаблоне промпта или конфигурации судьи. Строгая оценка требует парных статистических тестов и бутстрап-доверительных интервалов по сотням независимых пар промптов. Опускание этих границ доверия скрывает, отражает ли заявленный отрыв подлинный архитектурный прогресс или стохастический шум оценки.
Воспроизводимость создает постоянное системное препятствие при разных программных средах. Результаты измерений заметно колеблются от незначительных изменений в компиляторах, численных средах выполнения или математических библиотеках. Например, замена библиотеки базовой линейной алгебры (BLAS) поставщика на компилятор ядер с автонастройкой меняет размеры плиток блоков потоков, распределение регистров и конфликты банков разделяемой памяти. Кроме того, неассоциативность арифметики с плавающей точкой означает, что параллельные редукции между блоками потоков дают расходящиеся побитовые результаты в зависимости от планирования потоков. MLPerf решает проблему воспроизводимости, предоставляя эталонные реализации, фиксированные начальные значения генератора и проверенные правила подачи. Даже при строгих правилах отслеживание производительности на разных архитектурах ускорителей требует фиксировать версии библиотек, флаги компилятора и среды выполнения, чтобы не допустить незаметного дрейфа конфигурации.
Разрывы между лабораторией и развертыванием
Статистическая строгость гарантирует, что измерения бенчмарка точны, но точные измерения неверного эксплуатационного режима все равно приводят к сбоям в эксплуатации. Наборы бенчмарков должны соответствовать физическим ограничениям развертывания.
Рассогласование с реальными целями возникает, когда бенчмарки изолируют отдельные скалярные метрики, тогда как производственная среда требует балансировать многокритериальные границы Парето. Стандартные бенчмарки вывода обычно оценивают офлайн-пропускную способность, насыщая ускоритель статическими батчами при нагрузке с замкнутым циклом. Производственные серверы, напротив, работают как открытые системы массового обслуживания с всплесковыми пуассоновскими или паретовскими шаблонами поступления. По мере приближения загрузки ускорителя к насыщению задержка в очереди растет нелинейно, и хвостовые задержки ( и ) нарушают жесткие соглашения об уровне обслуживания, даже когда средняя задержка выглядит приемлемо. Кроме того, офлайн-бенчмарки оценивают изолированные модели с выделенным доступом к HBM ускорителя. В эксплуатации многопользовательские движки обслуживания, динамические выделения кэша ключей и значений (KV) для авторегрессивного декодирования и передачи данных между хостом и устройством по PCIe конкурируют за одну и ту же емкость памяти и пропускную способность шины, и эксплуатационная пропускная способность падает ниже лабораторных прогнозов.
Проблемы проектирования систем
Статистическая методология и соответствие развертыванию определяют, как измеряется и на что нацелена производительность. Третья категория ограничений вытекает непосредственно из физической аппаратуры, которая выполняет нагрузку. Поведение ускорителя колеблется в зависимости от тепловых условий, конкуренции за ресурсы операционной системы и микроархитектурной топологии.
Условия среды и эксплуатации меняют результаты бенчмарка через физические механизмы аппаратуры. Ускорители работают при строгих пределах TDP и предельных температурах кремниевого перехода. Когда устойчивые вычисления рассеивают тепло быстрее, чем его может отвести система охлаждения, встроенные контроллеры включают динамическое масштабирование напряжения и частоты (DVFS), снижая тактовую частоту вычислительных блоков и арифметическую пропускную способность. Короткий бенчмарк на холодном, простаивающем ускорителе фиксирует переходные разогнанные частоты, тогда как непрерывное производственное выполнение работает на более низких стационарных частотах и теряет 15–25 процентов пропускной способности. Аналогично, неуправляемые фоновые потоки операционной системы, прерывания центрального процессора хоста и конкуренция за шину PCIe вносят дрожание задержки, которое искажает измерения хвостовой задержки, если среда выполнения не закрепляет потоки за ядрами процессора и не выделяет память отдельно.
«Лотерея аппаратуры»34 (Hooker, 2021) усиливает эту физическую вариативность, связывая алгоритмическую жизнеспособность с поддержкой специализированной аппаратуры. Современные ускорители отдают подавляющую часть площади кристалла блокам плотного матричного умножения (таким как тензорные ядра или систолические массивы), которые опираются на широкие векторные блоки и иерархии памяти с высокой пропускной способностью. Алгоритмические архитектуры, например плотные трансформеры, достигают высокой арифметической интенсивности, переиспользуя веса для пакета токенов, и загружают значительную долю теоретического пика FLOP/s. Напротив, архитектуры, которые опираются на динамический поток управления, мелкозернистую разреженность или передачу сообщений в графе, страдают от несогласованных обращений к памяти и расхождения потоков и недогружают доступный вычислительный кремний. Алгоритмическая производительность на бенчмарке часто отражает не внутреннее математическое превосходство, а то, насколько естественно вычислительный граф модели ложится на доминирующие исполнительные блоки ускорителя.
Зависимость от совместимости с аппаратурой вносит систематические смещения при оценке моделей на разных целевых устройствах. Архитектура, оптимизированная под выполнение на GPU, может показывать худшие результаты на встраиваемом CPU, DSP или специализированном краевом ускорителе с другой шириной векторов, иерархией кэшей и поддержкой квантования. «Компромиссы задержки и точности, зависящие от аппаратуры» делает эту зависимость от аппаратуры наглядной, сравнивая производительность моделей на разных платформах. На конфигурациях CPU uint8 и GPU мультиаппаратные модели близко следуют за базовой линией «MobileNetV3 Large min», достигая примерно 77 процентов точности top-1 на ImageNet там, где базовая линия доходит примерно до 75 процентов. На EdgeTPU и DSP те же мультиаппаратные модели удерживают эти 77 процентов при заметно меньшей задержке, тогда как модель, настроенная только под CPU, потеряла бы эти выигрыши. Это показывает, что «лучшая» модель полностью зависит от целевого устройства развертывания, и такой вывод невозможно сделать по бенчмаркам одной платформы.
Компромиссы задержки и точности, зависящие от аппаратуры: каждая панель показывает точность top-1 на ImageNet по вертикали и использует по горизонтали шкалу задержки, специфичную для целевой платформы. Стрелка связывает MobileNetV3 Large при примерно одинаковой точности на CPU (float) и DSP, показывая сдвиг задержки, зависящий от аппаратуры. Источник: (Chu et al., 2021).
Без бенчмаркинга на разнородных аппаратных конфигурациях проектировщики систем рискуют выбирать архитектуры только потому, что они соответствуют существующим иерархиям памяти и наборам инструкций ускорителей. Оценка моделей на разных исполнительных движках гарантирует, что архитектурные решения отражают фундаментальную вычислительную эффективность, а не артефакты совместного проектирования под конкретную платформу.
Организационные и стратегические проблемы
Технические ограничения (статистический шум, рассогласование с развертыванием, вариативность среды и совместимость с аппаратурой) относятся к механике измерения. Отдельная категория сбоев возникает из человеческих стимулов. Коммерческие закупки и стимулы таблиц лидеров в академической среде создают систематические смещения в том, как проводятся и публикуются бенчмарки. Чтобы смягчить эту организационную динамику, нужны формальные механизмы управления и стандарты общественного аудита, которые сохраняют целостность бенчмарков.
Инженерия бенчмарков
Если лотерея аппаратуры — непреднамеренное следствие специализации аппаратуры, то инженерия бенчмарков — это целенаправленная практика подгонки моделей или систем под особенности конкретных обвязок бенчмарка. Эта практика дает завышенные метрики производительности, которые рушатся в эксплуатации.
Инженерия бенчмарков возникает, когда разработчики настраивают гиперпараметры, конвейеры предобработки или пути выполнения специально для максимизации баллов бенчмарка, а не обобщаемой производительности. Граница между законной оптимизацией системы и инженерией бенчмарков проходит там, где настройка жертвует устойчивостью вне распределения. Например, конвейер вывода может жестко задавать размеры входных тензоров и дополнять батчи специально под шаг памяти плиточной конфигурации GEMM ускорителя; тогда на фиксированных формах бенчмарка достигается пиковая пропускная способность, но на произвольных производственных входах запускаются дорогие откаты на резервные ядра и перераспределения памяти. Точно так же подгонка конвейера оценки под формат вывода автоматической модели оценки дает высокие места в таблице лидеров, которые рушатся при работе с неструктурированным человеческим диалогом.
Контракты на закупку и маркетинговые заявления создают сильные стимулы оптимизировать напрямую под публичные бенчмарки. Когда рейтинги бенчмарков определяют коммерческое внедрение, инженерные усилия концентрируются на оптимизации под тестовую обвязку в ущерб общей полезности: это тот самый сбой по закону Гудхарта, который введен в «Рамке бенчмаркинга машинного обучения» и проиллюстрирован примером с BLEU в «Проблемах измерения в ML».
Смещения и переоптимизация
Системные инженеры, оценивающие результаты бенчмарков, должны отличать законные архитектурные выигрыши от инженерии бенчмарков. Несколько технических практик выявляют этот разрыв. Прозрачность служит первой защитой: заявки, которые публикуют полные флаги компилятора, конфигурации ядер и трассы выполнения, позволяют независимым оценщикам отделить обобщаемые выигрыши эффективности от настройки под конкретную обвязку. Отчетность о парных метриках из контролируемых бенчмарков и нетронутых производственных трасс выявляет расхождения в распределениях задержки и использовании памяти. Кроме того, оценка на нескольких независимо поддерживаемых наборах бенчмарков повышает барьер против переобучения, потому что оптимизация, подогнанная под синтетические особенности одной обвязки, редко переносится на разнообразные тестовые наборы.
Стандартизация и независимая проверка обеспечивают подотчетность. Независимые аудиты проверяют, воспроизводятся ли заявленные ускорения на одинаковой аппаратуре, как показывает сверка «эталон против заявки» в MLPerf («Синтез MLPerf и игра с бенчмарками»). Стресс-тестирование под конкретное приложение оценивает эксплуатационные сбои, которые статические бенчмарки пропускают, например подвергая модели компьютерного зрения неблагоприятным условиям среды или подавая на движки вывода перекошенный трафик запросов. Наконец, бенчмаркинг на разной аппаратуре проверяет, происходят ли выигрыши в производительности из подлинного алгоритмического превосходства или из узкого соответствия иерархии памяти одного ускорителя.
Эволюция бенчмарков
Бенчмарки — не статичные стандарты; они должны эволюционировать вместе с архитектурами моделей и возможностями аппаратуры. Бенчмарк, который эффективно разделяет возможности систем в одном архитектурном поколении, устаревает, когда модели упираются в потолок его точности или когда аппаратные инновации смещают главное узкое место системы. Устаревшие бенчмарки стимулируют переоптимизацию старых вычислительных ядер вместо продвижения эффективности системы.
Этот эволюционный цикл характеризует историю бенчмарков машинного обучения. Ранние бенчмарки глубокого обучения оценивали классификацию изображений и детекцию объектов на сверточных сетях. По мере того как нейронные архитектуры расширялись до больших языковых моделей, рекомендательных систем и генеративного ИИ, статические бенчмарки зрения перестали улавливать внимание на длинном контексте, авторегрессивное декодирование и маршрутизацию разреженных экспертов. В ответ сообщества бенчмарков эволюционировали, чтобы измерять понимание языка (Wang et al., 2018); (Wang et al., 2019) и возможности фундаментальных моделей (Liang et al., 2022).
Эволюция бенчмарков также расширяет измерения. Если ранние бенчмарки сосредоточивались на пропускной способности и точности, то современные системы требуют многокритериальной оценки по энергоэффективности, объему памяти и хвостовой задержке при ресурсных ограничениях. «Спектр производительности» делает эти разнородные требования конкретными, наглядно отображая научные приложения по скорости потока данных и времени вычислений. В частности, датчики Большого адронного коллайдера должны обрабатывать данные со скоростью, приближающейся к байт в секунду, при вычислениях на масштабе наносекунд, тогда как мобильные приложения работают на уровне байт в секунду с более длинными окнами вычислений: разброс примерно в десять порядков по скорости данных и в шесть-семь порядков по времени вычислений. Такой диапазон требований делает необходимыми специализированные бенчмарки. Например, краевые приложения ИИ выигрывают от бенчмарков вроде MLPerf, которые оценивают производительность при ресурсных ограничениях, а научные области нуждаются в собственных бенчмарках «быстрого ML для науки» (Duarte et al., 2022).
Спектр производительности: научные и краевые приложения занимают сильно разнесенные рабочие точки по скорости данных и доступному времени вычислений, что делает необходимыми бенчмарки, привязанные к временным ограничениям и требованиям к перемещению данных каждого приложения. Источник: (Duarte et al., 2022).
Управление эволюцией бенчмарков вводит фундаментальный компромисс между продольной стабильностью и архитектурной актуальностью. Бенчмарки должны оставаться неизменными достаточно долго, чтобы позволить строгие сравнения аппаратуры и программного обеспечения между поколениями. Если бенчмарки меняются слишком часто, отследить исторический прогресс становится невозможно. С другой стороны, бесконечная заморозка бенчмарка ведет к застою метрик и чрезмерной специализации. Современные консорциумы бенчмарков балансируют этот компромисс, работая по фиксированным циклам выпусков, которые вводят новые репрезентативные нагрузки и выводят устаревшие наборы.
Синтез MLPerf и игра с бенчмарками
Игра с бенчмарками возникает, когда компилятор, среда выполнения или аппаратный стек оптимизируется специально под обвязку бенчмарка, а не под общую нагрузку, которую он представляет. В традиции Хеннесси и Паттерсона по количественной архитектуре компьютеров бенчмарки — это активные мишени, а не пассивные инструменты. Динамика Гудхарта, введенная в «Рамке бенчмаркинга машинного обучения», применяется напрямую: когда балл бенчмарка определяет контракты на закупку или маркетинговые заявления, инженерные усилия смещаются к эксплуатации особенностей тестовой обвязки. MLPerf противодействует игре с бенчмарками, сочетая эталонные реализации, строгий аудит заявок, правила точности для закрытого дивизиона и регулярный вывод из обращения устаревших нагрузок, которые иначе бы застоялись.
В количественной архитектуре компьютеров правила запуска должны запрещать три конкретных класса игры с бенчмарками:
- Усечение точности без раскрытия: компилятор незаметно снижает численную точность (например, выполняет промежуточные активации в FP8 или INT8 вместо BF16), чтобы завысить арифметическую пропускную способность, не раскрывая сниженного динамического диапазона и не проверяя, ухудшает ли низкая точность численную устойчивость на производственных нагрузках.
- Сокращение работы и устранение операторов: движок выполнения использует фиксированные тестовые наборы бенчмарка, чтобы пропускать операции, нужные для обычных производственных входов, например обходить удаление динамического дополнения, маскирование токенов за границами или пропуск проверки границ входа.
- Отпечатки бенчмарка: среда выполнения проверяет размеры входных тензоров, хеш-отпечатки наборов данных или шаблоны раскладки памяти, чтобы определить тестовый набор, и запускает зашитые в код заранее настроенные графы выполнения и специальные конфигурации ядер, недоступные для произвольных пользовательских нагрузок.
MLPerf нейтрализует эти уловки структурным разделением заявок, проверкой эквивалентности эталону и рецензируемым аудитом кода. В закрытом дивизионе предобработка, постобработка и архитектура модели должны оставаться строго эквивалентны эталонной реализации, а заявки должны выполнять строгие целевые показатели качества (например, оставаться в пределах 99 процентов точности эталонного FP32). Хотя участникам предлагается внедрять инновации в средах выполнения, раскладках памяти (например, переводе NCHW в NHWC) и слиянии ядер, правила запуска строго запрещают отпечатки входов и необобщаемые уловки. Заявки, которые меняют граф модели или рецепт переобучения, выделяются в открытый дивизион, где изменения явно помечаются и проверяются.
Даже самые строгие системные бенчмарки проверяют только одно измерение готовности развертывания. Рекордная пропускная способность и энергоэффективность на нагрузке MLPerf подтверждают, что стек аппаратуры и среды выполнения обеспечивает высокую вычислительную эффективность, но не могут определить, обобщается ли развернутая модель на реальные распределения или представляет ли базовый набор данных эксплуатационную совокупность. В таксономии D·A·M аппаратная пропускная способность (Машина) — необходимое основание, но точность алгоритма (Алгоритм) и целостность данных (Данные) должны выполняться одновременно. Чтобы завершить стек проверки, нужна оценка по всем трем измерениям таксономии D·A·M: качество данных, возможности модели и эффективность аппаратуры должны согласовываться в условиях эксплуатации.
Оценка модели и данных
Сжатая модель на ускоренной аппаратуре все еще может провалиться, если ее обучили на смещенных данных. Системные бенчмарки могут подтвердить, что аппаратура дает обещанную пропускную способность обучения, задержку вывода и энергоэффективность, но одна проверка аппаратуры не гарантирует успеха развертывания. Конвейер оптимизации из третьей части также включал сжатие моделей («Сжатие моделей») и отбор данных («Отбор данных»), и каждый требует собственной проверки. Два оставшихся измерения рамки закрывают этот пробел: бенчмарки модели проверяют, сохранило ли сжатие точность и критичные свойства модели, а бенчмарки данных проверяют, позволяют ли обучающие данные устойчивое обобщение.
Бенчмаркинг модели
Бенчмарки модели проверяют, сохранили ли методы сжатия из «Сжатия моделей» свойства, важные для развертывания. Эта оценка выходит за рамки общей точности. Прореженная модель может сохранить точность на ImageNet, но потерять устойчивость к состязательным входам. Квантованная модель может сохранить производительность в среднем случае, но ухудшиться на редких, но критичных краевых случаях. Дистиллированная модель может повторить точность учителя, но потерять калибровку. Исторически бенчмарки сосредоточивались почти исключительно на точности, однако сжатие делает многомерную оценку необходимой.
ImageNet связывает бенчмаркинг модели с историей аппаратуры из рисунка «Ошибка ImageNet и внедрение GPU»: частоты ошибок падали по мере того, как архитектуры с поддержкой GPU становились практичными. «Прогресс соревнования ImageNet» прослеживает этот путь от 28,2 процента ошибки в 2010 году до 3,57 процента в соревновании ImageNet Large Scale Visual Recognition Challenge (Russakovsky et al., 2015). Появление AlexNet35 снизило частоту ошибок с 25,8 процента до 16,4 процента. Последующие модели, такие как ZFNet, VGGNet, GoogLeNet и ResNet36, продолжили эту тенденцию, и ResNet достиг 3,57 процента (He et al., 2016). Этот ряд задал базовые линии, с которыми сравниваются методы сжатия моделей: прореженная ResNet должна показать, сколько точности она жертвует ради заданного выигрыша эффективности.
Прогресс соревнования ImageNet: AlexNet отмечает наибольшее однолетнее снижение в ряду; ZFNet, VGGNet, GoogLeNet и ResNet продолжают это снижение, задавая траекторию точности, относительно которой оцениваются последующие компромиссы сжатия. Источники: (Russakovsky et al., 2015); (Krizhevsky et al., 2012); (He et al., 2016).
Метрики точности и их слепые пятна
Самые распространенные метрики моделей (точность, precision, recall, F1) каждая показывает разные стороны поведения модели и скрывает другие, и понимание их слепых пятен необходимо для проверки сжатия. Точность top- измеряет, встречается ли верная метка среди наиболее вероятных предсказаний модели. Точность top-1 строга, top-5 мягка. Разрыв между ними показывает неуверенность модели: модель с точностью top-1 75 процентов и top-5 95 процентов «знает», что ответ среди нескольких кандидатов, но с трудом останавливается на одном. Для развертывания допустимый разрыв зависит от того, могут ли последующие системы использовать ранжированные предсказания или требуют одного ответа.
Precision и recall важны, когда классы несбалансированы или ошибки имеют асимметричную цену (Sokolova and Lapalme, 2009). Модель обнаружения мошенничества с точностью 99 процентов может иметь recall на реальном мошенничестве 10 процентов (ловит одну из десяти мошеннических транзакций), что неприемлемо, несмотря на высокую точность. Precision (доля верных среди предсказанных положительных) и recall (доля найденных среди реальных положительных) выявляют сбои, которые скрывает агрегированная точность.
Агрегированные метрики также скрывают сбои в подгруппах. Модель с общей точностью 95 процентов может давать 60 процентов на критичной демографической подгруппе. Проект Gender Shades (Buolamwini and Gebru, 2018) показал, что коммерческие системы классификации пола по лицу работают заметно хуже на женщинах с более темной кожей, чем на мужчинах со светлой, и это расхождение невидимо для агрегированных бенчмарков. Необходимы дезагрегированные оценки по подгруппам, значимым для развертывания; систематически вопросы справедливости рассмотрены в главе «Ответственная инженерия».
Калибровка: когда важны оценки уверенности
Во многих сценариях развертывания то, насколько уверенна модель, важно не меньше, чем то, что она предсказывает. Оценки уверенности хорошо откалиброванной37 модели соответствуют реальной вероятности верного ответа: когда она говорит «уверенность 90 процентов», она должна быть права в 90 процентах случаев.
Сжатие может сдвигать калибровку даже при сохранении точности, и это критично при проверке методов квантования из «Квантования и числовой точности». Квантованная модель может сохранять заголовочную точность, но становиться чрезмерно уверенной на примерах, в которых она ошибается. Это важно, потому что постобработочные методы калибровки, например температурное масштабирование, могут исправить проблему только тогда, когда калибровка измерена явно (Guo et al., 2017).
Сбои калибровки создают проблемы дальше по конвейеру. Чрезмерно уверенная модель автоматизирует ошибки, которые ей стоило бы передать человеку (предсказывает уверенность 95 процентов, но ошибается в 30 процентах случаев). Недостаточно уверенная модель отправляет на проверку слишком много верных предсказаний вместо того, чтобы автоматизировать решения, с которыми она справится (предсказывает уверенность 70 процентов, но права в 95 процентах случаев). Ожидаемая ошибка калибровки (ECE) измеряет разрыв между уверенностью и точностью по корзинам уверенности; диаграммы надежности визуализируют это соответствие.
Проверка сжатия: граница эффективности и качества
Сжатие моделей («Сжатие моделей») обменивает емкость модели на эффективность. Проверка должна определить, достигло ли сжатие приемлемого компромисса или повредило важные возможности.
Оценка по границе Парето38 показывает, представляет ли сжатая модель хороший компромисс. Построение точности против целевой метрики эффективности (задержки, размера модели, энергии) выявляет границу компромисса. Модели на границе Парето не могут улучшить одну метрику без ухудшения другой; модели ниже границы доминируются лучшими альтернативами.
Доминируемая модель проигрывает по обеим осям границы Парето.
Разные методы сжатия дают разные компромиссы между эффективностью и качеством. Квантование снижает точность, часто сохраняя общую точность (Jacob et al., 2018). Прореживание создает разреженность, сохраняя разный уровень качества на тестовых наборах (Han et al., 2015); (Gale et al., 2019). Дистилляция переносит знания от более крупного учителя или ансамбля в меньшую модель (Hinton et al., 2015). Поскольку эти агрегированные результаты не доказывают сохранения калибровки или поведения на хвосте распределения, проверка должна оценивать эти свойства напрямую (Guo et al., 2017).
Оценка калибровки при сжатии требует стандартизированного протокола. Ожидаемая ошибка калибровки (ECE) сравнивает предсказанную уверенность с эмпирической точностью, но у нее нет универсальных пороговых значений. Метрика зависит от схемы разбиения на корзины, их числа, размера выборки и распределения предсказаний. Поэтому протокол бенчмарка должен зафиксировать оценщик и измерять деградацию относительно несжатой базовой линии при заданном допуске для задачи.
Оптимальность по Парето выделяет недоминируемые варианты, но не доказывает, что какой-либо вариант проходит абсолютный порог качества для развертывания. Допустимая деградация зависит от контекста развертывания: снижение точности на 2 процента может быть приемлемым для системы рекомендаций, где пользователи терпят неидеальные подсказки, но неприемлемым для медицинской диагностики, где каждый ложноотрицательный результат несет серьезные последствия. Производственные ворота приемки должны задать абсолютные пороги точности до сжатия и одновременно проверять агрегированную точность, стабильность калибровки и критичные для развертывания срезы. Маячный пример MobileNetV2 делает этот многомерный протокол проверки конкретным.
Сжатие MobileNetV2 в INT8
Возвращаясь к маячному примеру «Проверка развертывания MobileNetV2», рассмотрим иллюстративный протокол проверки квантования в INT8, опирающийся на архитектуру MobileNetV2 (Sandler et al., 2018) и практику квантования после обучения (Jacob et al., 2018). Значения в «Метриках MobileNetV2 INT8 после сжатия» предполагаемые:
Базовая линия до сжатия: MobileNetV2 достигает точности top-1 на ImageNet 71,8 процента при 3,5 млн параметров (14 МБ в FP32).
В «Метриках MobileNetV2 INT8 после сжатия» после квантования в INT8 до 3,5 МБ агрегированная точность почти не меняется, но ошибка калибровки и точность на краевых случаях выявляют существенную деградацию. ECE модели в INT8 растет с 0,031 до 0,089; приемлема ли эта величина, зависит от допуска для конкретной задачи при фиксированном протоколе ECE.
Метрика FP32 INT8 Приемлемо? Точность top-1 71,8% 70,9% ✓ (снижение на 0,9 п.п.; ниже порога в 1 процентный пункт) Точность top-5 91% 90,4% ✓ Калибровка ECE 0,031 0,089 Нет (ухудшение) Точность на краевых случаях 68,2% 61,4% Нет (снижение на 6,8 п.п.) Метрики MobileNetV2 INT8 после сжатия: иллюстративные значения FP32 и INT8 для точности top-1 и top-5, ошибки калибровки и точности на краевых случаях. Они показывают, как агрегированная точность может скрывать деградацию калибровки и хвостовых случаев.
Определение краевых случаев: изображения с окклюзией более 50 процентов, освещением менее 100 люкс или поворотом более 30° относительно обучающего распределения (примерно 5 процентов реальных входов).
Что это показывает: при этих допущениях средняя точность выглядит приемлемо (снижение на 0,9 процентного пункта), но калибровка ухудшается, а точность на краевых случаях падает на 6,8 процентного пункта. Если развертывание использует пороги уверенности (например, «действовать, только если уверенность больше 85 процентов») или сталкивается с множеством краевых случаев (необычное освещение, частичные окклюзии), INT8-версия MobileNetV2 может подвести, несмотря на успешное прохождение агрегированных бенчмарков.
Исправление: применить температурное масштабирование постфактум, чтобы улучшить калибровку (Guo et al., 2017). Температурное масштабирование обучает один скалярный параметр , на который делятся логиты перед softmax: . Параллельно добавьте в тестовый набор примеры краевых случаев, чтобы непрерывно отслеживать именно этот режим сбоя.
Гипотеза лотерейного билета («Гипотеза лотерейного билета») дает конкретные данные бенчмарка, которые иллюстрируют, как выглядит эффективное по Парето сжатие. Итеративным прореживанием (Frankle and Carbin, 2019) нашли разреженные подсети («выигрышные билеты») в полносвязных и сверточных сетях, которые при обучении в изоляции могут достичь тестовой точности исходной сети. Эти эмпирические результаты показывают нелинейную форму компромиссов сжатия: агрессивное прореживание сохраняет точность до критической степени разреженности, за которой качество резко падает. Проверка сжатия поэтому должна строить эмпирические кривые компромисса для каждой конкретной модели и архитектуры, определяя, где модель находится на границе Парето и дает ли дальнейшее прореживание аппаратную эффективность или только ухудшает точность.
Бенчмарки больших языковых моделей
Рамка оценки сжатия чисто применяется, когда у задачи есть стабильная метка, например точность классификации, mAP детекции или IoU сегментации. Большие языковые модели ломают этот шаблон. Команда может выбрать модель, потому что она хорошо показывает себя на публичном бенчмарке, а потом в эксплуатации выяснить, что модель распознает факты в вопросах с выбором ответа, но не может сгенерировать обоснованный ответ, отвечает слишком медленно для интерактивного продукта или выдает уверенный небезопасный текст, которого бенчмарк никогда не проверял. Бенчмаркинг LLM поэтому начинается с того, что называется сбой развертывания, который оценка должна исключить.
Таксономия метрик в «Таксономии бенчмарков LLM, ориентированной на сбои» организует оценку вокруг этих режимов сбоя, а не вокруг рейтингов таблиц лидеров. Ее строки используют Massive Multitask Language Understanding (MMLU),39 HELM (Holistic Evaluation of Language Models)40 и перплексию41 как примеры оценок, которые отвечают на разные вопросы развертывания:
| Сбой развертывания, который нужно исключить | Метрика или семейство бенчмарков | Что показывает оценка | Чего оценка не доказывает |
|---|---|---|---|
| Модель плохо распознает факты | MMLU (Massive Multitask Language Understanding) | Широкие фактические и предметные знания по пятидесяти семи предметам; оценки интерпретируются относительно уровня случайного выбора в вопросах с вариантами ответа | Может ли модель генерировать обоснованные ответы на открытые вопросы, а не выбирать из вариантов |
| Модель способна, но небезопасна | HELM (Holistic Evaluation of Language Models) | Точность вместе с калибровкой, устойчивостью, справедливостью, предвзятостью, токсичностью и эффективностью | Отражает ли один агрегированный балл риск развертывания; модель может быть сильна по точности и слаба по калибровке, безопасности, стоимости или устойчивости к формулировке промпта |
| Модель хорошо предсказывает свой корпус | Перплексия | Предсказание следующего токена на удержанных данных того же корпуса; перплексия 10 означает, что модель в среднем «путается между 10 вариантами» | Полезны, безопасны или обоснованы ли сгенерированные ответы за пределами этого корпуса |
| Модель ощущается медленной в работе | Задержка первого токена, задержка между токенами и пропускная способность по токенам | Задержка обработки промпта до начала генерации и скорость декодирования после ее начала | Скрывает ли одна цифра пропускной способности плохую интерактивную отзывчивость, особенно когда батчинг повышает пропускную способность, но ухудшает задержку первого токена |
Таксономия бенчмарков LLM, ориентированная на сбои: метрики LLM полезны, когда каждый балл связан со сбоем развертывания, который он призван исключить. Распознавание, целостное поведение, предсказание корпуса и отзывчивость выявляют разные риски, поэтому ни одна отдельная метрика не доказывает готовности к эксплуатации.
Строка про отзывчивость требует конкретной временной привязки, потому что бенчмарки LLM часто сообщают одно агрегированное число пропускной способности, хотя пользователи ощущают генерацию в разных фазах. Модель может достигать высокой агрегированной пропускной способности в токенах в секунду и при этом ощущаться вялой, если первый токен приходит поздно, либо может минимизировать задержку первого токена, но генерировать последующий текст слишком медленно для интерактивного чтения.
Пропускная способность по токенам переводит скорость генерации во время, которое ощущает пользователь: для ответа в 750 токенов при скорости 25 токенов/с нужно 30 секунд, а при 100 токенах/с ответ готов за 7,5 секунды. Поэтому задержку первого токена и задержку между токенами нужно сообщать вместе: первая характеризует начальную отзывчивость, вторая — устойчивую скорость выдачи. Это разделение задержки отражает разные вычислительные режимы: задержку первого токена определяет предварительное заполнение (prefill) промпта, которое обрабатывает токены параллельно и обычно ограничено вычислениями, тогда как задержку между токенами определяет авторегрессивное декодирование, где генерация каждого токена требует заново загрузить все веса модели и тензоры KV-кэша из памяти с высокой пропускной способностью, так что пропускная способность жестко привязана к пропускной способности памяти.
Еще один режим сбоя состоит в том, что балл бенчмарка может отражать запоминание обучающих данных, а не общую способность. Загрязнение бенчмарка — особый риск для LLM: модели, обученные на корпусах веб-масштаба, могут встретить вопросы бенчмарка во время предобучения и завысить баллы за счет запоминания, а не навыка (Xu et al., 2024). Обнаружение утечек превращает этот риск в то, что создатели бенчмарков могут проверить, а не просто подозревать. Временные отложенные выборки используют контент, опубликованный после границы обучения; динамические бенчмарки непрерывно генерируют новые экземпляры; а тесты на загрязнение проверяют, воспроизводит ли модель дословно формулировки бенчмарка. Эти приемы держат бенчмарк привязанным к вопросу развертывания, а не вознаграждают контакт с оценочным набором во время предобучения.
Бенчмаркинг данных
Бенчмарки модели проверяют, сохранила ли модель качество после сжатия. Однако качество модели полностью зависит от данных, на которых ее обучали и оценивали, и эта зависимость создает самый коварный режим сбоя в развертывании ML. Идеально сохраненная модель, обученная на смещенных или нерепрезентативных данных, все равно провалится в эксплуатации. Бенчмарки данных проверяют, позволили ли стратегии эффективности из «Отбора данных» (активное обучение, проектирование учебного плана, аугментацию данных и генерацию синтетических данных) получить обучающие наборы, которые обеспечивают надежное развертывание. Это часто последняя проверка, которая проваливается, и самая трудная для диагностики: модель с отличной точностью на удержанных тестовых данных может рухнуть на производственных входах, которые обучающие данные никогда адекватно не представляли.
В таксономии D·A·M оптимизация Алгоритма и Машины не компенсирует структурных дефектов Данных: кластер ускорителей, работающий на пиковой арифметической интенсивности, просто быстрее вычисляет неверные представления, если обучающее распределение дефектно. Поэтому бенчмарк данных начинается с операционного протокола, а не с агрегированного балла. Протокол задает срез развертывания, который должна обслуживать модель, резервирует устойчивую к утечкам отложенную выборку, проверяет разделение дубликатов и почти дубликатов между разбиениями, задает минимальное покрытие для редких классов и подгрупп, аудирует качество разметки и устанавливает пороги дрейфа, которые определяют, когда бенчмарк перестает представлять производство. Только после того как эти ворота явно заданы, агрегированные метрики становятся интерпретируемыми.
Метрики покрытия
Первый вопрос, на который должен ответить бенчмаркинг данных, — покрывает ли обучающее распределение операционную область, с которой модель столкнется в эксплуатации. Модель не может обобщаться на режимы входа, которых нет в обучающем распределении, а пути, по которым покрытие обучения ломается, часто незаметны.
Баланс классов — самый очевидный режим сбоя. В наборе данных для обнаружения мошенничества с 99 процентами легитимных транзакций и 1 процентом мошеннических модель, которая безусловно предсказывает большинство, достигает точности 99 процентов, но не выполняет операционной задачи. Для смягчения сильного дисбаланса классов нужны перевзвешивание потерь, целевая передискретизация или калибровка порога решения. Более коварен дисбаланс подгрупп внутри классов: набор может иметь сбалансированные положительные и отрицательные классы в целом, но брать отрицательные примеры непропорционально из определенной демографической группы или географического региона. Агрегированные метрики точности маскируют такие систематические локальные сбои. Когда системы взаимодействуют с людьми, необходим аудит представительности по демографическим измерениям (например, возрасту, географии или диалекту), хотя отсутствующие или шумные демографические метаданные часто осложняют обнаружение.
Покрытие признаков выходит за пределы дискретных меток классов в непрерывное пространство операционных вариаций. Баланс классов проверяется непосредственно по статистике меток, тогда как покрытие признаков требует сопоставить физические параметры среды развертывания. Конвейер компьютерного зрения, обученный только на дневных снимках, ломается при низкосветовом шуме датчика; конвейер обработки голоса, обученный на чистых студийных сигналах, деградирует при акустической реверберации и фоновом шуме. Эти вариации среды, включая разное аппаратное обеспечение датчиков, условия освещения и редкие краевые операционные случаи, выходят за пределы дискретных распределений меток. Бенчмаркинг покрытия признаков поэтому требует задать конкретные границы входного пространства вместе с экспертами предметной области до оценки работы модели.
Метрики качества
Даже когда обучающий набор охватывает операционную область, ошибки разметки искажают сигнал учителя. Распространенные ошибки меток, которые последовательно измеряются в пределах от 3 до 6 процентов в канонических наборах бенчмарков, включая ImageNet (Northcutt et al., 2021), не действуют как безобидный шум. Контролируемая оптимизация принимает неверные метки за истину. Если оценочный набор содержит испорченные метки, модель, которая выучивает истинное лежащее в основе распределение, будет наказана, а модель, которая запоминает артефакты разметки, получит завышенный балл.
Для небольших корпусов ручные аудиты по стратифицированным случайным выборкам дают базовые оценки ошибок. В масштабе уверенное обучение (confident learning) находит ошибки разметки алгоритмически: оно оценивает совместное распределение зашумленных аннотаций и истинных скрытых меток по предсказанным вероятностям на внеобучающей выборке. Если модель стабильно приписывает высокую уверенность классу, который противоречит назначенной метке, расхождение выделяет кандидатов в ошибки разметки из обычной неопределенности оптимизации. Пометка этих кандидатов позволяет целенаправленно переразмечать или фильтровать данные, обходя непомерную стоимость полного ручного просмотра.
Согласованность разметчиков измеряет единообразие аннотаторов до обучения модели. Каппа Коэна для двух оценщиков и каппа Флейсса для нескольких измеряют согласие сверх ожидаемого случайного уровня (Cohen, 1960); (Fleiss, 1971). Когда метрики согласия падают ниже установленных порогов для задач с объективной истиной, сбой указывает на неоднозначную таксономию меток, утомление разметчиков или несогласованные инструкции. Хотя качественные шкалы Лэндиса и Коха дают историческую опору (Landis and Koch, 1977), производственным конвейерам нужны пороги согласия, калиброванные непосредственно под допустимый риск конкретного приложения.
Структурная форма шума меток определяет его последствия для дальнейшего конвейера. Случайный шум меток размывает градиентный сигнал между классами, увеличивая сложность выборки, но редко учит связным ложным представлениям. Напротив, систематические ошибки, например постоянная неверная разметка недопредставленного подкласса или связывание метки с артефактом среды, вносят структурированное смещение в веса модели. Если фотографии волков на снегу последовательно помечаются как собаки, модель учится связывать снег с целевым классом. При наличии систематической ошибки разметки сбор большего объема обучающих данных по тому же протоколу разметки не исправляет смещение, а лишь закрепляет ложную ассоциацию с большей уверенностью параметров.
Выравнивание распределения
Бенчмаркинг данных в конечном счете должен оценивать, обобщается ли модель с условий обучения на среды развертывания. Стандартные протоколы оценки предполагают, что обучающая, валидационная и тестовая выборки независимы и одинаково распределены (i.i.d.). В производственных системах это допущение регулярно нарушается: временной дрейф меняет поведение потребителей, деградация датчиков сдвигает характеристики аппаратуры, а географическое расширение вводит неучтенные подгруппы. Когда допущение i.i.d. ломается, точность на удержанной выборке перестает предсказывать эксплуатационную производительность и систематически дает слишком оптимистичную оценку надежности модели.
Этот разрыв между обучением и эксплуатацией количественно измеряет систематический бенчмарк WILDS42 (Koh et al., 2021), который оценивает модели при сдвигах распределения между больничными системами, местами установки фотоловушек и спутниковыми пролетами. На Camelyon17-WILDS сообщаемая базовая линия ERM достигла средней точности 93,2 процента на внутреннем распределении и 70,3 процента на внешнем распределении для невиденных клинических площадок. Это падение качества происходит при неизменных архитектуре, гиперпараметрах и вычислительных затратах обучения, что подтверждает: деградация в развертывании вызвана именно сдвигом распределения, а не недостатком емкости модели.
Чтобы сдвиг распределения не нарушал соглашения об уровне обслуживания, конвейеры обслуживания развертывают статистическое обнаружение сдвига в потоках входящих запросов. Двухвыборочные проверки гипотез, такие как критерий Колмогорова — Смирнова (Berger and Zhou, 2014) для одномерных признаков и maximum mean discrepancy (Gretton et al., 2012) для многомерных эмбеддингов, выявляют ковариатный сдвиг, то есть изменение маргинального распределения входов , даже когда условное распределение целевой переменной не наблюдается. Отслеживание энтропии предсказаний и распределений уверенности дополнительно показывает, когда входы выходят за пределы поддержки обучения, и тогда система может направить аномальные запросы на резервные модели или к проверке человеком до того, как ухудшится качество обслуживания.
Вызовы выравнивания распределения подчеркивают устойчивое напряжение в разработке ML между двумя парадигмами: зафиксировать данные и итерировать модели или зафиксировать модель и итерировать данные. «Парадигмы разработки» ставит эти две парадигмы рядом и показывает, где именно петля обратной связи различается. В подходе, ориентированном на модель, цикл итераций нацелен на архитектуру, а данные остаются статичными; в подходе, ориентированном на данные, архитектура фиксирована, а цикл нацелен на качество данных. Два подхода дополняют друг друга, а не образуют общего рейтинга того, откуда придет улучшение.
Парадигмы разработки: ИИ, ориентированный на модель, итерирует архитектуру при фиксированном наборе данных, тогда как ИИ, ориентированный на данные, итерирует разметку, разнообразие и смещения при фиксированной архитектуре. Двусторонняя стрелка показывает, что подходы дополняют друг друга.
ИИ, ориентированный на данные, отражает важный сдвиг в понимании, оспаривающий допущение «больше данных всегда лучше»: состав набора данных важен наряду с масштабом. Инициативы вроде DataPerf (Mazumder et al., 2023) и DataComp43 появились, чтобы систематически оценивать, как построение набора данных влияет на качество модели. В вычислительно контролируемой постановке DataComp базовый вариант, сохранивший 30 процентов лучших кандидатов из общего пула по фильтрации на основе CLIP, превзошел базовый вариант без фильтрации на агрегированной последующей оценке (Gadre et al., 2023). Результат устанавливает ценность курирования для данного протокола, но не универсальную оптимальную долю.
Насыщение набора данных и динамические бенчмарки
Даже когда протоколы покрытия, качества и выравнивания распределения выполнены, статические бенчмарки сталкиваются с проблемой насыщения набора данных. Когда модели приближаются к эмпирическим верхним границам на фиксированных тестовых наборах, разрывы в таблице лидеров сжимаются, и становится трудно отличить подлинный прогресс возможностей от подгонки под артефакты конкретного бенчмарка. Как показывает хронология на рисунке «Насыщение набора данных», широко отслеживаемые бенчмарки ИИ неоднократно пересекали заявленные человеческие базовые линии, исчерпывая свой запас как дискриминаторы (Maslej et al., 2024).
Насыщение набора данных: нулевая линия обозначает заявленный уровень человеческой производительности; пересечение каждой кривой отмечает возможность, для которой статический бенчмарк имеет меньший оставшийся запас различения. Пересечения не отличают подлинный прирост возможностей от оптимизации под оценочный набор. Источники: (Maslej et al., 2024); (Kiela et al., 2021).
Когда статический бенчмарк насыщается, высокая точность таблицы лидеров может маскировать хрупкие эвристики. Распознавание цифр MNIST (LeCun et al., 1998) рано показало, что модели могут эксплуатировать специфичные для набора артефакты съемки, а не инвариантные признаки; это в итоге привело к вопросу «Мы закончили с ImageNet?» (Beyer et al., 2020). Когда распределение оценки остается замороженным, итеративный выбор модели рискует подгонкой под своеобразные тестовые артефакты, а не улучшением обобщаемой способности решать задачу.
Фреймворки динамического бенчмаркинга, такие как Dynabench44 (Kiela et al., 2021), решают проблему насыщения, непрерывно развивая данные оценки. В этой парадигме human-аннотаторы создают состязательные входы, нацеленные на режимы сбоя текущих лучших моделей, так что бенчмарк продолжает проверять пределы представления. Однако динамические бенчмарки вносят фундаментальный системный компромисс: поскольку распределение оценки меняется между итерациями, продольные сравнения между поколениями моделей трудно калибровать. Статические и динамические бенчмарки поэтому играют взаимодополняющие роли: статические наборы обеспечивают продольную воспроизводимость на стандартизированных задачах, а динамические бенчмарки выявляют новые возникающие границы ошибок.
Целостная оценка «система — модель — данные»
Успешного прохождения системного, модельного и информационного бенчмарков по отдельности недостаточно. Системный бенчмарк может подтвердить производительность аппаратуры, модельный бенчмарк может проверить, что сжатие сохранило качество, а информационный бенчмарк может оценить репрезентативность обучающего набора, однако развернутая система все равно может провалиться, потому что три измерения взаимодействуют. Реальная производительность ИИ возникает из этого взаимодействия, и оптимизация одного измерения может выявить слабости в другом.
Рассмотрим конкретную цепочку сбоев: команда достигает целевой пропускной способности в MLPerf Inference, развернув модель компьютерного зрения, квантованную в INT8, на специализированном ускорителе. Системные бенчмарки проходят. Однако поскольку коэффициенты масштаба и нулевые точки квантования калибровались строго на валидационных образцах ImageNet, развертывание модели на заводском производстве выявляет серьезную деградацию точности. Освещение цеха создает динамический диапазон, который превышает пороги отсечения калибровки и обрезает активации признаков. Целевой бенчмарк качества модели при разных уровнях экспозиции выявил бы эту численную чувствительность. Если проследить сбой вверх по конвейеру, видно, что обучающий конвейер не содержал промышленных изображений: это разрыв в распределении данных, который никакая оптимизация ускорителя или настройка ядер во время выполнения не устранит.
Сцепление измерений означает, что успешный бенчмарк в одной области может быть аннулирован неизмеренным сбоем в другой:
- Успех системы + сбой модели: аппаратура выдает обещанную пропускную способность, но агрессивное сжатие снижает точность ниже порогов развертывания.
- Успех системы + сбой данных: быстрый вывод выполняется на входах бенчмарка, но смещение обучающих данных вызывает серьезные различия точности между демографическими подгруппами.
- Успех модели + сбой системы: модель выдает точные предсказания, но дисперсия хвостовой задержки при параллельной нагрузке нарушает соглашения об уровне обслуживания.
- Успех модели + сбой данных: проверка дает высокую точность на удержанных тестовых наборах, но сдвиг производственного распределения вызывает незаметную деградацию.
Эти режимы сбоя напрямую соотносятся с таксономией D·A·M, введенной в «Введении» («Ландшафт пересечения D·A·M»), хотя линзы бенчмарков не соответствуют трем физическим осям один к одному. Бенчмарки данных оценивают входное распределение и качество, поставляемые обучению; бенчмарки модели оценивают обученные алгоритмические представления и численную устойчивость; а системные бенчмарки выявляют выполнение на аппаратуре, эффективность ядер и трафик межсоединений памяти. Целостная оценка проверяет пересечения, в которых сходятся эти оси. Оптимизации по всему конвейеру третьей части (отбор данных → сжатие модели → аппаратное ускорение) вводят межосевые зависимости, которые изолированные измерения скрывают.
Таксономия D·A·M дает диагностическую рамку для систематического выяснения того, какая ось ограничивает производительность. Раздел «Сводка диагностики» приложения «Таксономия D·A·M» сопоставляет каждую ось с ее связывающим физическим ограничением и путем оптимизации, который его снимает, и дает первый диагностический шаг, когда бенчмарк выявляет недогрузку. «Матрица диагностики узких мест D·A·M» формализует этот подход, пересекая каждую ось D·A·M с тремя фундаментальными типами узких мест; раздел «Таксономия D·A·M» приложения содержит полное руководство по диагностике, включая утилиты профилирования и индикаторы скрининга эффективности.
| Компонент | Ограничен вычислениями | Ограничен памятью | Ограничен вводом-выводом |
|---|---|---|---|
| Данные | Предобработка слишком медленная (аугментация, токенизация) | Набор данных больше ОЗУ (уходит на диск) | Хранилище не может кормить GPU (предел пропускной способности диска) |
| Алгоритм | Модель слишком велика для аппаратуры (FLOP превышают емкость) | Активации превышают память (размер батча ограничен) | Синхронизация градиентов медленнее вычислений (распределенное обучение) |
| Машина | Загрузка GPU насыщена (нужен более быстрый ускоритель) | Пропускная способность памяти насыщена (нужна большая пропускная способность HBM) | Пропускная способность сети/PCIe насыщена (нужны более быстрые линки) |
Матрица диагностики узких мест D·A·M: каждая ячейка описывает симптом ограничения производительности, а строка указывает, какую ось D·A·M нужно исправлять. Когда производительность упирается, эта матрица превращает первый диагностический шаг в проверку по оси: Данные, Алгоритм или Машина.
Применение этой матрицы выделяет корневую причину, когда телеметрия системы расходится с теоретическими пиками аппаратуры. Если ускоритель показывает загрузку GPU лишь 30 процентов при обучении, инженер может преждевременно обвинить архитектуру модели (строка «Алгоритм») и начать хирургическое вмешательство в модель. Профилирование часто показывает другое: рабочие процессы данных на хосте, которые загружают ядра CPU на аугментации изображений или токенизации, не успевают подавать батчи по PCIe (строка «Данные», столбец «Ограничен вычислениями»: «предобработка слишком медленная»). Ускоритель простаивает не из-за алгоритмической неэффективности, а из-за голодания конвейера входа. Обход матрицы предотвращает ошибочно направленные инженерные вмешательства, указывая прямо на связывающую физическую подсистему.
Валидация в контролируемых лабораторных условиях отличается от валидации в эксплуатации. В лаборатории распределения данных фиксированы, шаблоны запросов однородны, а системы работают изолированно. В эксплуатации все три допущения могут нарушиться одновременно: данные дрейфуют, трафик непредсказуемо всплескивает, а параллельные нагрузки конкурируют за общие аппаратные ресурсы. Последнее измерение бенчмаркинга задает вопрос, выдерживают ли лабораторные результаты эксплуатационные условия.
Производственные соображения
Система, которая проходит все три категории бенчмарков, все равно может провалиться в эксплуатации. Трехмерная рамка проверила производительность аппаратуры, качество модели и репрезентативность данных при контролируемых условиях, но эксплуатационные развертывания непрерывно нарушают эти условия. Проверка ML-системы требует измерения ее поведения при динамических нагрузках, меняющихся распределениях данных и конкуренции за аппаратные ресурсы.
От лаборатории к эксплуатации
Лабораторные бенчмарки устанавливают, на что система способна в идеальных условиях. Проверка в эксплуатации определяет, работает ли система правильно сейчас, в реальных условиях.
Этот разрыв возникает, потому что производственные нагрузки нарушают статические допущения, заложенные в лабораторные оценки:
Тихая деградация происходит, потому что модели выдают правдоподобные выходы, не порождая аппаратных исключений или программных кодов ошибок. Традиционное программное обеспечение падает, паникует или возвращает HTTP 500 при недопустимом состоянии. Модель ML, напротив, завершает свои матричные умножения и возвращает корректные тензоры с плавающей точкой, даже когда предсказания деградировали или перестали быть откалиброванными. Сервис рекомендаций, который возвращает неоптимальные ранжирования, не дает никакого аппаратного сигнала о том, что его предсказательная точность рухнула.
Динамические нагрузки вносят очереди и узкие места памяти, которые бенчмарки стационарного режима скрывают. Стек обслуживания, протестированный при стационарных 1 000 QPS, может рухнуть, когда всплески трафика поднимут нагрузку до 10 000 QPS, потому что лабораторные тесты с замкнутым циклом предполагают однородное поступление запросов с минимальным накоплением очереди. Когда частота поступления в эксплуатации превышает мгновенную емкость обслуживания, задержки в очередях растут нелинейно. Планировщики динамического батчинга пытаются поглотить всплеск, накапливая более крупные батчи запросов, но увеличенные батчи требуют дополнительной памяти ускорителя под тензоры активаций и кэши ключей и значений (KV). Если память исчерпана, движок падает с ошибкой нехватки памяти; даже если память держится, время ожидания в очереди выводит хвостовую задержку () за пределы эксплуатационных соглашений об уровне обслуживания.
Сдвиг распределения данных усугубляет эти эксплуатационные проблемы, когда производственные данные уходят от обучающих и валидационных распределений. Модель компьютерного зрения, оцененная на отобранных изображениях бенчмарка, деградирует, когда живой вывод обрабатывает загрузки со смартфонов с артефактами объектива, искажениями сжатия и меняющимся освещением: точность падает, тогда как метрики пропускной способности и задержки выглядят совершенно не затронутыми.
Производственные ограничения также связывают измерения, которые лабораторные бенчмарки оценивают изолированно. В лаборатории точность, задержка, стоимость и утилизация ресурсов оптимизируются вдоль независимых кривых Парето. В развертывании эти ограничения сталкиваются напрямую на аппаратуре: соблюдение строгого SLA по хвостовой задержке во время всплесков трафика требует ограничивать размеры батчей или сбрасывать нагрузку, что снижает арифметическую интенсивность аппаратуры, понижает загрузку ускорителя и увеличивает стоимость обслуживания запроса.
Переход от бенчмарка к развертыванию
Перед развертыванием проверьте выводы бенчмарка в условиях, представительных для эксплуатации. «Чек-лист предразвертывания» называет допущение бенчмарка, производственную реальность, которая его нарушает, и шаг проверки, который закрывает разрыв; чек-лист, который следует за таблицей, превращает эти строки в действия по готовности к выпуску.
| Допущение бенчмарка | Производственная реальность | Подход к проверке |
|---|---|---|
| Однородное поступление запросов | Всплесковые шаблоны трафика | Нагрузочный тест с воспроизведением производственной трассы |
| Чистые, предобработанные входы | Входы переменного качества | Оценка на производственной выборке данных |
| Прогретое состояние системы | Холодные старты, промахи кэша | Измерение производительности холодного старта |
| Изолированное выполнение | Конкуренция за ресурсы | Бенчмарк при реалистичной системной нагрузке |
| Фиксированная версия модели | A/B-тестирование, постепенный выпуск | Установка базовой линии для сравнения |
Чек-лист предразвертывания: каждая строка связывает допущение, заложенное в лабораторные бенчмарки, с производственной реальностью, которая его нарушает, и с шагом проверки, который закрывает разрыв. Система, которая проходит все лабораторные бенчмарки, все равно может провалиться в эксплуатации, если каждая строка этой таблицы не проверена независимо в репрезентативных эксплуатационных условиях.
Чек-лист предразвертывания бенчмарка
Прежде чем развернуть модель на основе результатов бенчмарка:
- Воспроизведите производственные трассы: используйте журналы запросов, чтобы проверить пропускную способность и задержку в реалистичных условиях.
- Протестируйте на производственных данных: возьмите выборку недавних производственных входов (соблюдая конфиденциальность), чтобы убедиться, что точность сохраняется.
- Стресс-тестируйте краевые случаи: найдите наихудшие входы и проверьте, что деградация остается управляемой.
- Установите базовые линии мониторинга: задокументируйте ожидаемые диапазоны метрик для обнаружения аномалий.
- Определите критерии отката: задайте количественные пороги для возврата к предыдущей версии модели.
Мониторинг в эксплуатации как непрерывный бенчмаркинг
Мониторинг в эксплуатации расширяет бенчмаркинг от однократных ворот до непрерывного процесса. Применяются те же принципы (стандартизированные метрики, воспроизводимое измерение, статистическая строгость), но цель смещается от офлайн-квалификации к непрерывной эксплуатационной проверке.
Когда модель запущена, бенчмаркинг становится скользящим сравнением с только что установленными базовыми линиями. Непосредственные проверки остаются конкретными: остается ли входное распределение близким к распределению бенчмарка, остаются ли задержка и пропускная способность в измеренном коридоре, и не выходит ли качество модели за ожидаемый диапазон. Ответ на эти вопросы требует той же дисциплины измерения, что и офлайн-бенчмарк, но теперь измерения поступают непрерывно и на живом трафике.
Операционные среды обслуживания превращают этот цикл измерения в механизмы выпуска и восстановления (глава «MLOps»): поэтапные выкаты, теневую оценку (запуск новой модели рядом с продуктивной без выдачи ее результатов), непрерывную проверку и автоматический откат. Бенчмаркинг задает базовый коридор производительности и пороги сбоя; мониторинг в эксплуатации непрерывно проверяет живую телеметрию относительно этих границ.
Разрыв между условиями бенчмарка и реальностью эксплуатации объясняет, почему команды снова и снова попадают в предсказуемые ловушки. Набор повторяющихся заблуждений показывает, как здравые метрики, примененные неверно, дают вводящие в заблуждение выводы.
Заблуждения и ловушки
Бенчмаркинг создает ложную уверенность, когда стандартизированные измерения скрывают реалии развертывания. Команды полагают, что контролируемые оценки предсказывают производительность в эксплуатации, но реальные системы сталкиваются с изменчивостью, ресурсными ограничениями и многокритериальными компромиссами, которые бенчмарки не могут уловить, и тратят инженерные усилия на системы, оптимизированные под оценку, а не под развертывание.
Заблуждение и ловушка
Заблуждение: производительность на бенчмарке напрямую переносится на производительность реального приложения.
Кажущаяся ясность рейтингов бенчмарков побуждает команды выбирать системы так, будто позиция в таблице лидеров предсказывает поведение в эксплуатации. Это редко так. Как показывает «Проблемы измерения в ML», ML-системы демонстрируют присущую им изменчивость из-за качества данных, сдвигов распределения и ресурсных ограничений, которых нет в контролируемой оценке. В типичном сценарии сбоя языковая модель с точностью на бенчмарке 92 процента падает до 78–82 процентов в эксплуатации, когда обрабатывает пользовательский текст с опечатками, разговорным языком и предметной терминологией. Система вывода со средней задержкой 15 мс на MLPerf в эксплуатации получает задержку p99 в 150–200 мс (ухудшение в 10–13,3 раза) из-за параллельной нагрузки, пауз сборки мусора и изменчивости сети. Команды, которые опираются только на рейтинги бенчмарков, систематически недооценивают сложность развертывания, что ведет к провальным запускам и дорогостоящей переделке.
Средняя задержка бенчмарка занижает производственный хвост примерно на порядок.
Заблуждение и ловушка
Ловушка: оптимизация исключительно под метрики бенчмарка без учета более широких требований системы.
Таблицы лидеров стимулируют агрессивную оптимизацию, но оптимизации, которые поднимают место в рейтинге, часто ухудшают как раз те свойства, которых требует эксплуатация. Это пример закона Гудхарта («Организационные и стратегические проблемы»): когда баллы бенчмарка становятся целями оптимизации, они перестают быть осмысленной мерой качества системы. В одном иллюстративном сценарии команда снижает задержку вывода с 12 мс до 8 мс агрессивным квантованием, улучшая место в рейтинге MLPerf на 15 позиций, но ухудшая калибровку настолько, что оценки уверенности предсказаний становятся ненадежными для последующих решений. Другая команда повышает точность на ImageNet на 2,1 процента тщательной настройкой гиперпараметров, но оптимизированная модель потребляет на 40 процентов больше энергии и на 25 процентов хуже работает на изображениях вне распределения с производственных камер. Организации, которые вознаграждают рейтинги бенчмарков выше успеха развертывания, систематически создают системы, отлично проходящие оценку и проваливающиеся в эксплуатации.
Заблуждение и ловушка
Заблуждение: оценки по одной метрике дают достаточное представление о производительности системы.
Утверждение в одно число выглядит привлекательно просто («точность 94 процента» или «1 200 QPS, быстро»). Но успех в эксплуатации требует балансировать несколько конкурирующих целей, которые любая отдельная метрика скрывает. Современные системы вывода требуют оценки по точности, задержке, пропускной способности, энергии и устойчивости («Метрики вывода»). В одном иллюстративном компромиссе рекомендательная модель с точностью 94 процента и задержкой p99 180 мс не выполняет цели обслуживания, требующие p99 меньше 100 мс, несмотря на отличную точность. И наоборот, система, оптимизированная под пропускную способность 1 200 QPS, достигает этой скорости, потребляя 4,2 Вт, тогда как немного более медленная система при 1 000 QPS потребляет 1,8 Вт (разница в мощности в 2,3 раза). Для краевых устройств с батарейным питанием потеря пропускной способности в 17 процентов дает работу в 2,3 раза дольше. Разные заинтересованные стороны ставят разные метрики на первое место: инженеры ML сосредоточены на точности, команды инфраструктуры на пропускной способности и стоимости, менеджеры продукта на перцентилях задержки. Оптимизация по одной метрике систематически порождает системы, которые отлично работают по одному измерению и не выполняют требований развертывания по остальным.
Заблуждение и ловушка
Ловушка: использование устаревших бенчмарков, которые больше не отражают задач и требований развертывания.
У бенчмарков есть инерция: команды продолжают отчитываться по устоявшимся бенчмаркам, когда результаты перестали давать полезное различение. Насыщение наступает, когда несколько подходов достигают почти одинаковых результатов, и сравнение теряет смысл. Частота ошибок классификации top-5 на ImageNet снизилась с 28,2 процента в 2010 году (Russakovsky et al., 2015) до 3,57 процента к 2015 году (He et al., 2016), резко сократив запас, который измеряла эта метрика. По мере сужения разрывов статистические доверительные интервалы, обсуждавшиеся в «Статистических и методологических проблемах», и значимость результата для развертывания начинают важнее места в таблице лидеров. Меняющиеся контексты развертывания усугубляют проблему: бенчмарки, спроектированные для серверного оборудования, вводят в заблуждение применительно к краевым устройствам с памятью в 10 раз меньше и бюджетом мощности в 100 раз ниже. Эффективный бенчмаркинг требует вывода из употребления насыщенных бенчмарков и разработки рамок оценки, соответствующих реальности целевого развертывания.
Заблуждение и ловушка
Заблуждение: исследовательские бенчмарки предсказывают поведение в эксплуатации при реальном трафике.
Исследовательские бенчмарки существуют, чтобы сравнивать алгоритмы в контролируемых условиях; производственные системы существуют, чтобы обслуживать пользователей в переменных условиях. Считать первые предсказанием производства часто значит получить оптимистичные результаты, потому что исследовательские бенчмарки могут не учитывать конкуренцию за ресурсы, изменчивость качества входов и режимы эксплуатационных сбоев. Неправильное выполнение добавляет отдельный источник ошибок: пропуск прогревочных прогонов может смешать однократную инициализацию, JIT-компиляцию, заполнение кэшей и выделение памяти с задержкой установившегося режима; неуказанное состояние кэша может превратить номинальный бенчмарк памяти либо в измерение повторного использования прогретого кэша, либо в доступ к холодной памяти; а если динамическое масштабирование напряжения и частоты (DVFS) меняется без отчетности о нем, небольшие различия трудно воспроизвести. Производственные системы сталкиваются с параллельной пользовательской нагрузкой, изменчивым качеством входов, сетевой задержкой и сбоями системы, которые ухудшают производительность («Разрывы между лабораторией и развертыванием»). Система, которая в изолированных бенчмарках дает пропускную способность 800 QPS, при производственной нагрузке с загрузкой 90 процентов поддерживает лишь 400–500 QPS (снижение на 37,5–50 процентов) из-за конкуренции в очередях и пауз сборки мусора. Исследовательские бенчмарки сообщают время вывода модели (5–10 мс), тогда как сквозная задержка в эксплуатации включает накладные расходы предобработки, очередей и постобработки, в сумме 50–100 мс. Производственные системы требуют доступности 99,9 процента (43 минуты простоя в месяц) и плавной деградации при сбоях, а этих характеристик исследовательские бенчмарки часто не содержат. Эффективная производственная оценка требует операционных метрик: устойчивой пропускной способности под нагрузкой, времени восстановления после сбоев и полной разбивки задержки.
Заблуждение и ловушка
Ловушка: использование исследовательских бенчмарков как производственных ворот выпуска.
Команды иногда продвигают модель потому, что она прошла исследовательский бенчмарк, и обнаруживают только после запуска, что бенчмарк никогда не проверял эксплуатационный путь. Ворота выпуска для системы обслуживания должны включать нагрузочные тесты, измерения хвостовой задержки, проверки качества данных, учения на сбои и критерии отката. Исследовательские бенчмарки остаются полезными для сравнения алгоритмов, но производственные ворота должны измерять развернутую систему в тех условиях трафика, аппаратуры и сбоев, с которыми она реально столкнется.
Итоги
Бенчмаркинг завершает конвейер оптимизации третьей части, проверяя, какой выигрыш на практике дают отбор данных («Отбор данных»), сжатие моделей («Сжатие моделей») и аппаратное ускорение («Аппаратное ускорение»). Три линзы бенчмарков по отдельности изучают выполнение системы, поведение модели и репрезентативность данных, а затем проверяют, сохраняются ли их допущения, когда полная система работает в условиях развертывания.
Линзы выявляют разные режимы сбоя. Системные бенчмарки выявляют недобор пропускной способности, хвостовую задержку и тепловое поведение. Модельные бенчмарки проверяют точность, калибровку, устойчивость и другие свойства, которые оптимизация может изменить. Бенчмарки данных проверяют покрытие, качество разметки, утечки и соответствие развертыванию. Стандартизированные наборы, такие как MLPerf Training и Inference, дают сопоставимые системные свидетельства; протоколы для модели и данных дают доказательства качества и репрезентативности, которые результат на аппаратуре установить не может.
Подтверждать заявления об оптимизации нужно измерением физического выполнения, а не аналитическими прокси. Измерение времени по часам фиксирует насыщение пропускной способности DRAM, сериализацию запуска ядер и накладные расходы передачи между хостом и устройством, которые подсчет FLOP пропускает. Профилирование перцентилей при параллельной нагрузке выявляет очереди и тепловой троттлинг, которые скрывают средние значения. Оценка нагрузок на репрезентативных производственных данных показывает колебания динамических форм и выделения памяти, которые однородные синтетические входы никогда не вызывают.
Что важно измерять
- Бенчмарки проверяют совместное проектирование: системные, модельные и информационные бенчмарки выявляют недобор аппаратной производительности, потерю качества при сжатии и рассогласование распределений. Система, которая проходит проверку только по одной оси, все равно может провалиться, когда ограничения Данных, Алгоритма и Машины сходятся под производственной нагрузкой.
- Проксирующие числа нуждаются в границах: стандартизированные правила запуска делают сравнения честными, но фиксированные нагрузки все равно остаются прокси. Размер батча, тепловое состояние, распределение входов, параллелизм и окна сроков обслуживания решают, переживет ли лабораторный результат разрыв между бенчмарком и эксплуатацией.
- Гранулярность обменивает диагностику на реализм: микробенчмарки изолируют ядра, макробенчмарки выявляют стоимость на уровне модели, а сквозные бенчмарки отражают поведение, видимое пользователю. Эффективный стек измерений использует все три уровня, чтобы команды видели и симптом, и слой, который его вызвал.
- Хвостовая задержка и есть бенчмарк: интерактивные системы выходят из строя на p95 и p99, прежде чем сдвинется среднее. Отчетность о перцентилях задержки при репрезентативной нагрузке не дает бенчмарку одобрить систему, у которой среднее проходит, а самые плохо обслуживаемые запросы нарушают SLO.
- Закон Амдала ограничивает каждое заявление об оптимизации: более быстрая модель не может обогнать остальной конвейер; если предобработка занимает 50 процентов задержки, бесконечно быстрая модель дает лишь улучшение системы в 2 раза. Измеряйте весь путь запроса, прежде чем радоваться ускорению ядра.
- Эффективность по-прежнему требует доказательств качества: INT8 может сократить объем весов в 4 раза; упрощенная компонентная модель оценивает снижение энергии примерно в 6,6 раза, но измерение всего устройства, калибровка, устойчивость к подгруппам и поведение на краевых случаях определяют, можно ли развернуть сжатую модель.
Каждая глава этой части обещала меньше FLOP, меньшую модель или более высокую пропускную способность. Бенчмаркинг проверяет эти обещания на полной системе. Разрыв между заявленным и измеренным улучшением показывает, где Данные, Алгоритм и Машина были собраны, а не согласованы. Закон Амдала показывает, почему бесконечно быстрая модель все равно может оставить конвейер ограниченным всем остальным, а хвостовая задержка показывает, почему среднее может пройти, когда самые плохо обслуженные запросы проваливаются. Это совместное проектирование, поставленное на подотчетность. Система ML создается инженерным трудом, а не декларируется, и только измерение на реальной нагрузке может отличить одно от другого.
От лаборатории к эксплуатации
Система, которая проходит каждый бенчмарк в контролируемой среде, все равно может провалиться при работе в эксплуатации. Статические бенчмарки не могут полностью уловить всплески трафика, дрейф данных или каскадные сбои под живой нагрузкой. Часть IV выходит из контролируемой среды бенчмарков в эксплуатацию, начиная с главы «Обслуживание моделей».
-
Закон Гудхарта: (Goodhart, 1984) сформулировал исходное наблюдение Банка Англии 1975 года о денежно-кредитной политике; (Strathern, 1997) обобщил его в приведенной выше форме. Исходный контекст был макроэкономическим: когда денежный агрегат становился официальной целью политики, банки меняли поведение, чтобы обыграть показатель, и тот терял прогностическую силу. В машинном обучении тот же сбой возникает структурно: BLEU вознаграждает совпадение n-грамм (Papineni et al., 2002), ImageNet вознаграждает результаты на фиксированном визуальном распределении (Deng et al., 2009); (Recht et al., 2019), а таблицы лидеров могут поощрять настройку под конкретный тестовый набор. ↩
-
Бенчмарк: термин происходит из геодезии, где «bench mark» было горизонтальной меткой на камне, служившей неизменной отметкой высоты. В вычислительную технику он пришел в 1970-х для обозначения стандартных точек сравнения, но геодезическая метафора несет системный урок: так же как измерение высоты бессмысленно без откалиброванной опоры, число пропускной способности ML бессмысленно без контролируемых нагрузок, теплового состояния и настроек точности. ↩
-
Whetstone и LINPACK: Whetstone (Curnow and Wichmann, 1976) назван по лаборатории English Electric в Уэтстоуне (Лестершир), где создавался исходный компилятор ALGOL; LINPACK (Dongarra et al., 1979) был пакетом и бенчмарком для плотных линейных систем, позже использовавшимся в списке Top500. Фиксированный синтетический набор операций Whetstone и узкая направленность LINPACK на линейную алгебру делали каждый из них полезным, но слишком узким по сравнению с разнообразным набором приложений. Бенчмаркинг ML унаследовал ту же уязвимость: подгонка ядра под конкретную модель может переобучиться на одной нагрузке, поэтому MLPerf использует несколько нагрузок из области зрения, языка и рекомендаций (Mattson et al., 2020); (Reddi et al., 2019). ↩
-
MLPerf: запущен в 2018 году консорциумом промышленных и академических организаций; название образовано от «ML» и «Perf» (производительность) и перекликается с традицией SPEC. Принципы MLPerf — репрезентативные нагрузки, измерение всей системы и открытая подача результатов — напрямую отвечают на подгонку, которая преследовала Whetstone и LINPACK: производители, которые раньше могли сообщать пиковую производительность ядра на выбранных размерах задач, теперь должны сообщать сквозную производительность системы на стандартных задачах (Mattson et al., 2020); (Reddi et al., 2019). ↩
-
SPEC Power: введен в 2007 году, измеряет производительность на ватт на 11 уровнях нагрузки от простоя (0 процентов) до 100 процентов с шагом 10 процентов (Lange, 2009). Такая детализация важна для обслуживания ML: нагрузки вывода редко держат 100-процентную загрузку, а серверы, эффективные на пике, но расточительные на частичной нагрузке, раздувают энергетическую стоимость реального развертывания. ↩
-
Green500: начатый в 2007 году как спутник Top500, Green500 ранжирует системы по FLOP/s на ватт, а не по сырой производительности (Feng and Cameron, 2007). Его урок для систем ML методологический: самый экономичный кластер для обучения необязательно самый быстрый, а тот, который дает полезную работу на ватт в нужных нагрузке и границах измерения. ↩
-
TPU (тензорный процессор): специализированная ASIC Google для нейросетевых нагрузок (детали архитектуры в «Аппаратное ускорение»). Модуль TPU v4 (4 096 чипов) дает пиковые 1,1 EFLOP/s в BF16 (Jouppi et al., 2023), но бенчмаркинг TPU требует осторожности: их архитектура систолических массивов благоприятствует регулярным тензорным операциям, поэтому пиковые FLOP/s завышают производительность на нерегулярных нагрузках, таких как разреженное внимание или динамическое управление потоком. ↩
-
ASIC (специализированная интегральная схема): пиковое число TOPS у ASIC относится только к тем операторам, для которых она спроектирована. Один неподдерживаемый слой заставляет откатываться на процессор общего назначения и может свести на нет все преимущество в эффективности. Поэтому первый вопрос в любом бенчмарке ASIC касается покрытия операторов: разрыв между пиковой и достигнутой пропускной способностью — это ограничение совместимости с нагрузкой, а не ограничение аппаратуры. ↩
-
FLOP/s (операций с плавающей точкой в секунду): разрыв между заявленными пиковыми FLOP/s и достигнутыми FLOP/s — главное напряжение в аппаратном бенчмаркинге. A100 заявляет 312 TFLOP/s FP16 на тензорных ядрах, но реальные нагрузки достигают разной доли пика в зависимости от арифметической интенсивности, шаблонов доступа к памяти, точности и накладных расходов среды выполнения. Указание пиковых FLOP/s без контекста загрузки — самое частое искажение в бенчмаркинге. ↩
-
Модель Roofline: (Williams et al., 2009) ввели модель Беркли, названную по визуальной форме ее потолка производительности. Ее точка перехода (пиковые FLOP/s, деленные на пиковую пропускную способность) отделяет нагрузки, ограниченные памятью, от вычислительно-ограниченных и показывает, нужно ли оптимизировать перемещение данных или арифметику. ↩
-
cuDNN (библиотека CUDA для глубоких нейронных сетей): выпущена NVIDIA в 2014 году и содержит вручную настроенные реализации ядер для сверток, пулинга и нормализации. Для бенчмаркинга это значит, что заявленные задержки вывода сильно зависят от версии cuDNN и настроек автонастройки алгоритмов, поэтому версия cuDNN обязательна в любой воспроизводимой спецификации бенчмарка. ↩
-
SQuAD (Stanford Question Answering Dataset): представлен в 2016 году, содержит более 100 000 пар «вопрос — ответ» по материалам Википедии (Rajpurkar et al., 2016). К 2018 году системы ИИ превзошли базовый уровень человека в SQuAD 1.1, равный 91,2 процента F1 (Devlin et al., 2019). Однако этот «сверхчеловеческий» результат показывает типичный сбой бенчмаркинга: экстрактивный формат задачи (ответы — фрагменты текста внутри отрывка) делает ее проще открытых вопросов и завышает воспринимаемые возможности по сравнению с промышленными системами NLP. ↩
-
GLUE (General Language Understanding Evaluation): представлен в 2018 году как широкий бенчмарк понимания языка (Wang et al., 2018). GLUE быстро насытили такие системы, как BERT (Devlin et al., 2019). Это закон Гудхарта в действии: как только GLUE стал целью, оптимизация под таблицу лидеров снизила его способность различать модели. Эта закономерность привела к появлению более трудных последующих оценок, таких как SuperGLUE и BIG-bench. ↩
-
ToyADMOS: создан NTT Communications в 2019 году для обнаружения акустических аномалий и содержит записи звуков работы игрушечных автомобилей, игрушечных конвейеров и других миниатюрных машин (Koizumi et al., 2019). Приставка «toy» здесь намеренная: контролируемая среда делает бенчмарк воспроизводимым, но может создавать разрыв между областями, когда модели переносят в более шумную промышленную среду с другими машинами, датчиками, вибрацией и фоновыми звуками. ↩
-
BERT (двунаправленные энкодерные представления от трансформеров): BERT-Large (340 млн параметров) — нагрузка обработки естественного языка в MLPerf Inference. Бенчмарк фиксирует задачу, данные, целевое качество и применимые сценарии выполнения, чтобы системы можно было сравнивать на одной нагрузке. Задержка BERT по-прежнему зависит от длины последовательности, батчинга и реализации. ↩
-
Метрика: в математике метрика — это функция расстояния, удовлетворяющая строгим аксиомам, включая неравенство треугольника. В ML термин используется свободно для количественных мер вроде BLEU и перплексии, которые являются правилами подсчета баллов, а не математическими метриками. Рейтинги в таблице лидеров могут меняться при изменении протокола оценки, среза данных или весов метрик, поэтому выбор метрики — инженерное решение, которое определяет, какая система побеждает, а не только то, как измеряется производительность. ↩
-
BLEU (bilingual evaluation understudy): предложен в IBM в 2002 году. BLEU измеряет качество перевода через модифицированную точность n-грамм со штрафом за краткость относительно эталонных переводов (Papineni et al., 2002). BLEU — канонический пример закона Гудхарта в ML: оптимизация совпадений n-грамм может вознаграждать поверхностное совпадение слов даже тогда, когда смысл, беглость или полезность при развертывании расходятся с целью. ↩
-
Распределение Пуассона: названо в честь Симеона Дени Пуассона, который сформулировал его в 1837 году, моделируя частоту ошибочных осуждений во французских судах. Распределение описывает независимые события с постоянной средней частотой и служит обычной базой для поступления запросов к серверу. Реальный трафик ML-сервисов часто нарушает эти допущения из-за пакетности, корреляций и меняющихся во времени частот. Поэтому обвязка на пуассоновском потоке может неверно оценить хвостовую задержку, если трассы или стресс-тесты не покрывают такие производственные шаблоны. ↩
-
URLLC (сверхнадежная связь с низкой задержкой): ITU-R задает целевую задержку пользовательской плоскости радиоинтерфейса в 1 мс и доставку 99,999 процента успешных пакетов за 1 мс для пакета в 32 байта при заданных условиях испытаний. Эти цели радиоинтерфейса не являются гарантией сквозной задержки приложения менее 1 мс. Бенчмарки краевого вывода должны сообщать задержку радио или сети и задержку вычислений отдельно и вместе, наряду с качеством модели. ↩
-
GPT-3 (Generative Pre-trained Transformer 3): языковая модель OpenAI 2020 года (175 млрд параметров, 300 млрд обучающих токенов), по оценкам, потребила 3 640 петафлопс-дней на 10 000 GPU V100 (Patterson et al., 2021). Такой масштаб показывает, почему бенчмарки обучения нужны, чтобы прогнозировать эксплуатационную осуществимость запланированного прогона обучения до того, как тратить вычисления. ↩
-
Обучение в смешанной точности: большая часть арифметики выполняется в низкой точности, а накопление там, где это нужно, ведется в более высокой (Micikevicius et al., 2017). Для бенчмаркинга это значит, что прогоны в смешанной и полной точности напрямую несопоставимы, потому что сниженный трафик памяти и допустимые большие батчи могут менять динамику сходимости. MLPerf решает эту проблему, фиксируя целевую точность, так что сопоставимой величиной становится время до точности независимо от стратегии точности. ↩
-
Пропускная способность (throughput): термин пришел из производства, где измерял число единиц продукции за единицу времени, а в вычисления вошел в эпоху пакетной обработки 1960-х годов. Производственное происхождение несет системный урок: пропускная способность и задержка по природе противоположны, потому что батчинг увеличивает пропускную способность (больше единиц в час) ценой ожидания каждой единицы. В обслуживании ML это проявляется как компромисс по размеру батча: большие батчи повышают загрузку GPU, но увеличивают задержку на запрос. ↩
-
Разгон тактовой частоты GPU (boost clock): динамическое масштабирование частоты поднимает тактовые частоты выше базовых, когда позволяют тепловой и энергетический запас. Ловушка бенчмаркинга: короткие прогоны могут зафиксировать производительность при разгоне, тогда как устойчивое обучение ML может установиться на более низких стационарных частотах по мере роста температуры кристалла. Отчет о фазе всплеска завышает пропускную способность, которую может устойчиво выдерживать производственная нагрузка. ↩
-
Тепловой троттлинг: снижение частоты, которое срабатывает, когда температура кристалла превышает безопасные пределы. В краевых устройствах без активного охлаждения троттлинг может начаться во время устойчивого вывода, поэтому пиковые значения пропускной способности из коротких бенчмарков могут искажать устойчивую производительность. ↩
-
Edge TPU (тензорный процессор): специализированный краевой ускоритель ИИ Google с фиксированной функциональностью. Он иллюстрирует ограничение бенчмаркинга, характерное для ускорителей с фиксированной функцией: заявленная пропускная способность относится только к квантованным моделям TensorFlow Lite с поддерживаемыми типами операторов, поэтому модели с неподдерживаемыми операторами откатываются на центральный процессор хоста или требуют переписывания графа, прежде чем результат ускорителя станет осмысленным. ↩
-
Хвостовая задержка: время ответа на высоком перцентиле, например p95 или p99, определяет соответствие производственному SLO или SLA только тогда, когда цель или соглашение задает этот перцентиль. (Dean and Barroso, 2013) показали, что в архитектурах с веерной рассылкой (распространенных в системах рекомендаций) даже 1 процент медленных ответов накапливается: запрос, обращающийся к 100 серверным шардам, имеет примерно 63-процентный шанс, что хотя бы один шард попадет в свой 1-процентный хвост. Бенчмарки, которые сообщают только среднюю задержку, скрывают этот сбой. ↩
-
INT8 (8-битное целое): INT8 находится на агрессивном конце иерархии точности (базовый FP32, FP16 вдвое уменьшает объем весов, INT8 — в четыре раза), и каждый шаг требует все большей осторожности для сохранения точности. Квантование INT8 после обучения обычно использует репрезентативный калибровочный набор данных; точность зависит от модели, покрытия операторов, метода квантования и того, насколько калибровочные данные отражают входы развертывания. Бенчмарки INT8 должны указывать, используют ли они квантование после обучения или обучение с учетом квантования, и документировать процедуру калибровки. ↩
-
Бенчмаркинг сжатия моделей: влияние сжатия нужно измерять одновременно по четырем измерениям: деградация точности, ускорение вывода, уменьшение памяти и экономия энергии. Метод, который уменьшает размер в 10 раз при потере точности 1 процент, все равно может не подойти, если задержка не улучшается пропорционально; например, неструктурированное прореживание сокращает число параметров, но редко ускоряет вывод на плотной аппаратуре, потому что разреженные операции плохо поддерживаются на большинстве GPU. ↩
-
Бессерверный ИИ: модель развертывания, в котором модели масштабируются от нуля экземпляров по требованию. Время холодного старта зависит от модели, среды выполнения, пути хранения, выделения аппаратуры и поставщика. Бенчмарки для прерывистых нагрузок должны указывать, включены ли инициализация и загрузка модели, потому что задержка только на уже запущенном экземпляре может занижать задержку, которую видит пользователь. ↩
-
Задержка холодного старта: время инициализации из состояния простоя включает чтение из хранилища, передачу с хоста на ускоритель и настройку фреймворка. Для модели с 7 млрд параметров в FP16 (около 14 ГБ), уже находящейся в памяти хоста, одна только передача по PCIe 4.0 при эффективной пропускной способности 25 ГБ/с занимает около 560 мс; хранилище и инициализация добавляют к этому. Такая нижняя граница делает смягчение холодного старта (кэширование моделей, упреждающую загрузку) требованием системного проектирования. ↩
-
TOPS (тера операций в секунду): мера сырой вычислительной пропускной способности (триллионов операций в секунду). H100 дает 1 979 TOPS в INT8, тогда как нейронный движок Apple M2 — 15,8 TOPS, а Edge TPU — 4 TOPS, но эти числа смешивают разные типы операций: умножение с накоплением, накопление и активацию. Сравнения TOPS между поставщиками осмысленны только тогда, когда определение операции, точность и предположения о разреженности совпадают, что в спецификациях поставщиков встречается редко. ↩
-
MLCommons: запущен в 2020 году как некоммерческий консорциум, выросший из усилий MLPerf 2018 года; в его состав входят участники из промышленности и академической среды (MLCommons, 2026). Требование публиковать спецификации систем повышает сопоставимость результатов, но не мешает участникам выбирать, какие системы или нагрузки подавать. Опубликованные результаты показывают большие различия в производительности между поставщиками на одинаковых нагрузках, что делает MLCommons ближайшим в этой области аналогом сравнения аппаратуры в духе SPEC. ↩
-
DLRM (модель глубокого обучения для рекомендаций): архитектура рекомендаций Facebook 2019 года сочетает таблицы эмбеддингов для категориальных признаков с многослойными перцептронами для непрерывных признаков (Naumov et al., 2019). DLRM нагружает бенчмарки иначе, чем модели зрения или языка: его таблицы эмбеддингов могут быть настолько большими, что емкость и пропускная способность памяти доминируют над вычислительной пропускной способностью. Поэтому DLRM — полезная рекомендательная нагрузка, ограниченная памятью, в оценке вывода в духе MLPerf; она выявляет ограничения аппаратуры, невидимые для бенчмарков, ограниченных вычислениями (Reddi et al., 2019). ↩
-
Лотерея аппаратуры: термин введен (Hooker, 2021), чтобы описать, как успех алгоритма зависит от соответствия доступной аппаратуре и программному обеспечению. Нагрузки трансформеров выигрывают от плотных матричных операций, которые эффективно отображаются на современные ускорители, тогда как графовые нейронные сети и разреженные модели «смеси экспертов» труднее оценивать, если доступный кремний и программные стеки отдают предпочтение плотным ядрам. Поэтому аппаратно-специфичные таблицы лидеров благоприятствуют архитектурам, согласованным с измеряемой платформой, и могут скрывать альтернативы, которые показали бы иной результат при других аппаратных допущениях. ↩
-
AlexNet: восьмислойная сверточная сеть (60 млн параметров), которая в 2012 году снизила частоту ошибок top-5 на ImageNet с 25,8 до 16,4 процента. Обучалась на двух GPU GTX 580 с 3 ГБ памяти у каждого (Krizhevsky et al., 2012). AlexNet задала парадигму бенчмаркинга, которая до сих пор определяет оценку зрения: точность на фиксированном наборе данных как основная метрика, конфигурация аппаратуры как второстепенная спецификация. Последующие результаты ImageNet унаследовали эту структуру сравнения с базовой линией. ↩
-
ResNet (остаточная сеть): введена (He et al., 2016). Остаточные связи позволили строить сети из более чем 152 слоев и достигли частоты ошибок top-5 на ImageNet 3,57 процента (ансамбль), что превзошло оценочную ошибку человека в контексте соревнования ImageNet (Russakovsky et al., 2015). ResNet-50 стала распространенной эталонной нагрузкой MLPerf Training, потому что ее умеренный размер (25,6 млн параметров) и хорошо изученный вычислительный профиль (8,2 GFLOP на изображение) делают ее чувствительной к оптимизациям и аппаратуры, и программного обеспечения, без необходимости в многоузловых установках (Mattson et al., 2020). ↩
-
Калибровка: от арабского qalib (форма для отливки металла) через латинское calibrare, изначально описывавшего настройку измерительных приборов по известным эталонам. В ML калибровка обеспечивает соответствие предсказанных вероятностей эмпирическим частотам; (Guo et al., 2017) формализовали эту проблему для современных нейронных сетей и показали, что температурное масштабирование — простая и эффективная постобработка. Этимология уместна: как некалиброванный прибор дает точные, но неверные измерения, так и некалиброванная модель дает уверенные, но ненадежные предсказания, и последующие системы, которые пороговой обработкой опираются на оценки уверенности, принимают систематически неверные решения. ↩
-
Граница Парето: названа в честь экономиста (Pareto, 1896). Граница содержит все решения, в которых улучшение одной цели требует ухудшения другой. В бенчмаркинге сжатия форма границы несет диагностическую информацию: крутой участок означает, что выигрыши эффективности достаются дешево (прореживать здесь), а плоский участок означает, что дальнейшее сжатие стоит непропорционально дорогой точности (остановиться здесь). Точки ниже границы строго доминируются и представляют собой потраченную впустую емкость. ↩
-
MMLU (Massive Multitask Language Understanding): введен (Hendrycks et al., 2020) и содержит 15 908 вопросов с вариантами ответа по пятидесяти семи предметам. Ограничение бенчмарка MMLU связано с его форматом: распознавание среди вариантов — не та же задача, что генерация открытого ответа, поэтому балл MMLU нельзя читать как прямое доказательство того, что модель в эксплуатации способна давать обоснованные свободные ответы. ↩
-
HELM (Holistic Evaluation of Language Models): рамка оценки Стэнфорда 2022 года проверила широкий набор моделей по семи измерениям (точность, калибровка, устойчивость, справедливость, предвзятость, токсичность, эффективность) (Liang et al., 2022). Вклад HELM методологический: оценивая модели, которые близки по точности, но расходятся по калибровке или токсичности, он показывает, что таблицы лидеров по одной метрике систематически скрывают режимы сбоя, важные для развертывания. ↩
-
Перплексия: от латинского perplexus (запутанный); в теории информации равна , где — энтропия. Перплексия 10 означает, что модель в среднем «путается между 10 вариантами». Последствия для систем здесь интерпретационные, а не прямой учет памяти: перплексия измеряет предсказание следующего токена на удержанных данных корпуса, тогда как нагрузка на память при обслуживании определяется длиной контекста, размером батча, формой модели и состоянием декодирования; управление KV-кэшем — отдельная задача обслуживания (Kwon et al., 2023). ↩
-
WILDS: бенчмарк Стэнфорда 2021 года из десяти наборов данных с реальными сдвигами распределения: изменения больниц (Camelyon17), сдвиги мест установки фотоловушек для дикой природы (iWildCam) и временной дрейф спутниковых снимков (PovertyMap). Для сообщаемой базовой линии ERM на Camelyon17-WILDS средняя точность упала с 93,2 процента на внутреннем распределении до 70,3 процента на внешнем, что показывает: стандартная оценка на удержанной выборке может завышать производительность, когда допущение i.i.d. не выполняется. ↩
-
DataComp: введен в 2023 году. DataComp фиксирует семейство моделей, код обучения и вычислительный бюджет, а участники меняют построение набора данных. Его трек фильтрации изолирует эффект выбора примеров из общего пула кандидатов, что делает стратегии курирования сопоставимыми без приписывания каждого выигрыша дополнительным вычислениям обучения. ↩
-
Dynabench: платформа Facebook AI Research 2021 года для генерации динамических бенчмарков, где люди создают состязательные входы, обманывающие текущие лучшие модели. Dynabench решает проблему насыщения, когда очень высокая точность на статических бенчмарках может отражать знакомство с тестовым набором, а не устойчивую способность, но вносит собственный компромисс: динамические бенчмарки труднее сравнивать во времени, потому что оценочный набор меняется. Статические и динамические бенчмарки играют взаимодополняющие диагностические роли. ↩
Принципы развертывания
Код может быть корректным, а бенчмарки отличными, и все же система может отказать. Часть IV переходит от контролируемой среды к эксплуатации, где ML-системы сталкиваются с дополнительной угрозой — тихим распадом. ML-система может продолжать выдавать уверенные, хорошо оформленные и ошибочные ответы по мере того, как мир уходит от распределения ее обучения. При развертывании среда данных выходит из-под контроля инженера и может нагрузить обученный алгоритм и обслуживающую машину так, как не предусмотрел ни один тестовый набор. Поэтому надежность — это непрерывный контур управления совместным проектированием D·A·M, а не ворота однократного выпуска. Принципы здесь определяют требования и диагностические модели для этой надежности.
Разрыв верификации
Инвариант: статистическая верификация действительна только на заданной популяции развертывания , при заданном расстоянии задачи , допуске и целевой ошибке , оцениваемых конечно-выборочной процедурой с заявленным уровнем доверия:
Следствие: развертывание — не одностороннее перенесение; это контур управления. Поскольку никакой набор тестов не может покрыть каждый возможный реальный вход, производственные системы должны отслеживать собственную неопределенность и корректно отказывать, когда выходят за пределы известной области производительности.
Разрыв верификации означает, что конечная оценка может лишь приблизительно определить поведение на заданной популяции с неопределенностью. Эти границы могут размываться, когда эксплуатационные данные расходятся с данными, на которых их устанавливали.
Диагностика статистического дрейфа
Инвариант: расхождение между эксплуатационным и базовым распределениями само по себе не определяет, меняется ли точность; на измеренном диапазоне развертывания размеченные исходы могут подчиняться локальной линейной зависимости: где — базовое распределение, — производительность модели на , — статистическое расхождение между текущим и базовым распределениями, а подгоняется по размеченным исходам, а не выводится из одного лишь расхождения. Рассмотрим модель кредитного скоринга, обученную на поведении заемщиков 2020 года. Через два года растут инфляция, меняются процентные ставки и кредитная политика. Система по-прежнему выдает баллы, но статистическая связь между входами и исходами могла измениться; мониторинг размеченных исходов определяет, упала ли реальная точность, в то время как обычные журналы ошибок молчат. В отличие от многих традиционных программных сбоев, которые обычно обнаруживаются по падениям, исключениям или явным сигналам о состоянии сервиса, ML-системы могут отказывать незаметно, потому что среда меняется, даже когда код и инфраструктура остаются прежними. Эта линеаризация первого порядка применима только в пределах измеренного диапазона; зависимость зависит от модели и при сильном дрейфе может быть нелинейной.
Следствие: наблюдаемость должна выходить за рамки системных метрик (задержки, ошибки) и сочетать сигналы статистического дрейфа с размеченными исходами. Система может оставаться работоспособной, пока качество предсказаний меняется, но один лишь мониторинг дрейфа не устанавливает деградации.
Внешний дрейф — не единственная угроза. Даже когда мир неподвижен, сам конвейер обслуживания может расходиться с моделью, проверенной офлайн.
Диагностика перекоса обучения и обслуживания
Инвариант: пути кода обучения и обслуживания могут расходиться на одинаковых входах, и это расхождение измеримо без меток. Для скалярных оценок модели определим расхождение обучения и обслуживания как ожидаемую абсолютную разницу между двумя функциями на заданном распределении сравниваемых входов: Точная связь между и точностью зависит от функции потерь, геометрии границы решения и эксплуатационного распределения. Необъясненное расхождение ослабляет предположение, что офлайн-валидация оценивает поведение в эксплуатации, и может вызывать незаметную потерю точности, но — не универсальное уравнение потери точности. Такое расхождение возникает из-за несогласованной логики предобработки, различий в реализациях библиотек, устаревших значений признаков или изменений состояния среды между двумя путями кода.
Следствие: согласованность признаков — архитектурное требование, а не просто хорошая практика. Хранилища признаков — больше чем кэши; они могут уменьшить перекос, централизуя определения признаков и их выдачу. Командам все равно нужна валидация свежести, корректности на момент времени, а также паритета предобработки, среды выполнения модели и постобработки. Даже тонкие различия (изменение размера в PIL против OpenCV, нормализация в FP64 против FP32) могут накапливаться и порождать незаметную деградацию точности, которую стандартный мониторинг может не обнаружить.
Под всеми этими проблемами надежности лежит неотъемлемое ограничение: время. Система медицинской визуализации, которая обнаруживает опухоли с точностью 99 процентов, но тратит 30 секунд на снимок, может не уложиться в сроки рабочего процесса. Модель восприятия беспилотного автомобиля, которая правильно классифицирует препятствия, но реагирует за 200 мс вместо 50 мс, может не уложиться в срок торможения. Правильный результат может не иметь эксплуатационной ценности, если прибудет слишком поздно. Развернутые модели с чувствительной к задержке работой действуют под дедлайном, и его превышение может функционально равняться отсутствию предсказания.
Принцип бюджета задержки
Инвариант: при последовательном учете пути запроса сквозная задержка равна сумме задержек сети, предобработки, вывода, постобработки и очереди, а развертывание укладывается в свой срок только на заявленной квантили завершения:
Следствие: в обслуживании, чувствительном к задержке, продукт выбирает дедлайн и приемлемую квантиль завершения, например 0,95, 0,99 или 0,999, а пропускная способность оптимизируется в рамках этого ограничения. Системы обслуживания должны реализовывать средства управления хвостовой задержкой (например, динамический батчинг с ограниченной задержкой или хеджированные запросы). Системы обслуживания должны быть готовы пожертвовать общей пропускной способностью ради того, чтобы уложиться в срок самого старого запроса в очереди.
Система может выполнять свои SLO по задержке, обнаруживать измеренные сдвиги распределения и поддерживать согласованность обучения и обслуживания и при этом систематически наносить вред. Предыдущие принципы касаются незаметных сбоев корректности и качества обслуживания; этот принцип касается сбоев, которые ухудшают справедливость через незаметное усиление.
Модель смещения обратной связи
Инвариант: когда выходы влияют на будущие входы, сегодняшнее неравенство становится входом следующего цикла обучения, поэтому неравенство эволюционирует как динамическая система, а не остается неизменным. Пусть обозначает величину неравенства для группы относительно заданной опорной группы после фиксированных интервалов обратной связи. Без эффективного вмешательства и при примерно постоянном безразмерном коэффициенте обратной связи неравенство может эволюционировать так: где — начальная величина неравенства относительно этой опорной группы, а подгоняется для каждого интервала обратной связи. Рассмотрим модель одобрения кредитов, которая чаще отказывает заявителям из исторически недообслуживаемых сообществ. Получившие отказ не могут создать кредитную историю, из-за этого будущие заявки становятся слабее, а доля отказов растет. Точность модели на ее обучающем распределении остается стабильной, но население, которое она обслуживает, изменено ее собственными решениями. При в этих допущениях петля обратной связи самоусиливающаяся; при моделируемая динамика устойчива или затухает. Реальные развертывания могут быть также нелинейными, насыщающимися или меняться из-за вмешательства.
Следствие: справедливость — не постэксплуатационный аудит; это ограничение устойчивости контура управления развертыванием. Там, где значимое воздействие оправдывает это, а сбор или использование групповых атрибутов законны и обоснованы, системы должны отслеживать метрики производительности с разбивкой по релевантным демографическим группам с той же строгостью, что и перцентили задержки, потому что регресс смещения может быть невидим для совокупной точности так же, как нарушение хвостовой задержки невидимо для средней задержки.
Вместе пять принципов задают контур управления развертыванием: он устанавливает, что подтверждают данные, наблюдает за работающей системой и средой, действует только тогда, когда измеренный сбой оправдывает вмешательство, и переоценивает соответствующий критерий сервиса, предсказания или подгруппы. Они отделяют диагноз от реакции. Сигнал сужает расследование, но не предписывает автоматического вмешательства и не доказывает, что качество уже деградировало.
Часть IV делает этот контур конкретным. Обслуживание моделей создает инфраструктуру, которая укладывается в бюджеты задержки при переменном трафике. MLOps обнаруживает дрейф и перекос, сохраняя доказательства, нужные для диагностики и реакции. Ответственная инженерия рассматривает справедливость и обратную связь как измеримую динамику развертывания, а не как разовую проверку соответствия. Книга замыкает эти эксплуатационные механизмы контроля на количественных границах и моделях, разработанных в предыдущих частях.
Обслуживание моделей
Назначение
Почему обслуживание меняет приоритеты оптимизации, которые сделали обучение успешным?
Обучение и обслуживание делают упор на разные эксплуатационные цели. Обучение обычно максимизирует пропускную способность на больших батчах и длинных запусках, а обслуживание должно отвечать на отдельные запросы в пределах целевых задержек. Обучение амортизирует стоимость аппаратуры на множестве примеров, а обслуживание платит налог за каждый запрос, и мелкие неэффективности накапливаются в операционный долг. Поэтому модели, которые эффективно обучаются, могут плохо обслуживаться. У работающей системы есть сквозной бюджет задержки, и очереди, предобработка, сетевая передача и постобработка способны съесть оптимизацию, которая касается только модели. Ориентированные на батчи архитектуры и оптимизации с высоким расходом памяти, призванные загрузить ускорители, могут не подходить для нерегулярного, чувствительного к задержке и дорогого в эксплуатации производственного трафика. Но обслуживание — это не только проблема задержки. Система обслуживания должна справляться с трафиком, который колеблется между пиком и спадом, держать запас на случай отказов, сбрасывать нагрузку или мягко деградировать при перегрузке и оставаться предсказуемой при изменении состава запросов и спроса. Модели, которые показали свою ценность при обучении и выдержали сжатие и бенчмаркинг, в конце концов попадают на уровень обслуживания — стадию развертывания и интеграции жизненного цикла ML. Вопрос смещается от того, работает ли модель, к тому, работает ли она надежно в масштабе и в производственных условиях. Инфраструктура обслуживания — место, где системы машинного обучения встречаются с пользователями, и поддержание этого взаимодействия требует иной инженерии, чем создание самой модели. Здесь же обученный алгоритм встречается с живыми данными в пределах бюджета задержки машины, и на каждом запросе сходятся все три ограничения D·A·M.
Цели обучения
- Объяснить инверсию обслуживания: переход от пропускной способности обучения к задержке отдельного запроса, запасу мощности и хвостовому поведению
- Разложить задержку запроса на сериализацию, предобработку, вывод, очереди, постобработку и накладные расходы сети
- Применить законы теории очередей и простые модели очередей для планирования мощности по перцентильным целевым задержкам
- Диагностировать расхождение обучения и обслуживания и холодные старты, вызванные несовпадением предобработки, загрузки модели или поведением кэша
- Выбрать стратегии батчинга, сброса нагрузки, автомасштабирования и среды выполнения под шаблоны трафика и бюджеты задержки
- Оценить узкие места обслуживания LLM по задержке токенов, памяти KV-кэша и ограничениям непрерывного батчинга
- Рассчитать стоимость одного вывода по точности, загрузке аппаратуры, числу реплик и пропускной способности среды выполнения
Парадигма обслуживания
Обслуживание модели начинается там, где заканчивается бенчмаркинг. Модель, оцененная в синтетических условиях тестовой обвязки, теперь должна генерировать предсказания под живым производственным трафиком. В офлайн-обучении системы максимизируют совокупную пропускную способность, собирая большие батчи, чтобы амортизировать передачу весов из высокоскоростной памяти (HBM) и загрузить матричные арифметические блоки. В онлайн-обслуживании запросы приходят стохастически от независимых клиентов и должны возвращаться в пределах жестких целей уровня обслуживания (SLO). Поэтому главный инженерный приоритет переворачивается: от долговременной пропускной способности к задержке отдельного запроса. Эта инверсия обслуживания перестраивает баланс членов железного закона систем машинного обучения (). Когда приложение не может откладывать запросы ради сборки больших батчей, оно должно обрабатывать маленькие батчи или отдельные входы (). Выполнение маленьких батчей обваливает арифметическую интенсивность и превращает матричные умножения, ограниченные вычислениями, в передачи, ограниченные пропускной способностью памяти (). Одновременно член задержки расширяется за пределы запусков ядер на ускорителе, длящихся микросекунды, и включает сетевую передачу, сериализацию запроса и оркестрацию на стороне хоста. Часто он становится связывающим ограничением для сквозного времени ответа.
Таксономия D·A·M показывает, как эта инверсия меняет каждый слой системы. На уровне данных ограничение смещается с общего объема набора данных на частоту поступления запросов, свежесть полезной нагрузки и переменные размерности последовательностей живых запросов. На уровне алгоритма выполнение становится строго однонаправленным: состояние обратного распространения и память оптимизатора исчезают с ускорителя, но динамические формы входа вносят изменчивость времени выполнения в ранее статические графы операторов. На уровне машины рабочая цель смещается от максимальной загрузки аппаратуры к запасу (headroom). Офлайн-обучение считает простаивающий ускоритель потраченным впустую мощностью, а онлайн-обслуживание считает работу почти на пределе эксплуатационным риском. Поскольку запросы приходят по стохастическим распределениям, длины очередей и времена ожидания растут нелинейно по мере приближения загрузки к 100 процентам. Поддержание достаточного запаса сохраняет свободную мощность, нужную для того, чтобы поглотить кратковременные всплески трафика, не нарушая перцентилей хвостовой задержки. Поэтому обслуживание оптимизирует завершенные запросы при жестком крайнем сроке задержки, а не устойчивую загрузку аппаратуры.
Соблюдение этого крайнего срока задержки определяет, как инженерные команды делят сквозной стек обслуживания. Бюджет задержки запроса включает три последовательных этапа: прием и предобработку на стороне хоста (завершение сети, десериализация полезной нагрузки, токенизация или преобразование признаков), выполнение ядер на ускорителе и последующую постобработку. Любая миллисекунда, потраченная на неоптимизированное получение признаков или задержки в очереди, напрямую вычитается из времени, выделенного самой нейронной сети. Поэтому центральная инженерная задача обслуживания моделей — решить, какие операции должны оставаться на синхронном пути запроса, какие задачи можно вынести в асинхронные фоновые конвейеры и сколько запаса система должна зарезервировать, прежде чем гарантии хвостовой задержки рухнут под нагрузкой.
Нагрузка, задержка и архитектура обслуживания
Пик трафика в «Черную пятницу»
Сценарий: Система обслуживания рекомендаций в интернет-магазине переживает всплеск трафика в 10 раз (10 000 QPS) во время распродаж в «Черную пятницу».
Диагностика: Когда загрузка сервера приближается к 100 процентам, длины очередей растут нелинейно, задержка доходит до 10 с, и клиентские запросы истекают по таймауту.
Системный урок: Высокая средняя пропускная способность не предотвращает коллапса очереди при всплесках трафика. В зависимости от сервиса сохранить цель по хвостовой задержке может помочь сброс нагрузки, мягкая деградация или автомасштабирование, и делать это нужно до того, как загрузка дойдет до точки излома очереди для данной нагрузки.
Системы онлайн-обслуживания обрабатывают переменные потоки запросов без батчинга и при этом работают под жесткими крайними сроками задержки. Когда всплески поступления исчерпывают зарезервированный запас, производительность деградирует нелинейно.
«Взрывной рост хвостовой задержки» показывает, что задержка остается управляемой при умеренной загрузке, а затем быстро растет по мере приближения системы к насыщению. Поэтому чувствительные к задержке системы резервируют запас, а не планируют постоянно насыщенный ускоритель. Раздел «Распределения и длинный хвост» приложения «Основы данных» дает математическое описание распределений с длинным хвостом и объясняет, почему важна задержка на высоких перцентилях, когда SLO охватывает самые медленные запросы. Кривая — простое приближение теории очередей, предназначенное для понимания, а не для конкретной нагрузки.
Взрывной рост хвостовой задержки: задержка запроса в зависимости от загрузки сервиса . Средняя задержка (синяя) и приближение p99 (красная) растут нелинейно по мере приближения загрузки к насыщению; отметка 70 процентов — иллюстративный ориентир планирования, а не точка разрыва, выведенная из модели. Здесь использовано простое приближение M/M/1, введенное позже в разделе о теории очередей (p99 примерно в 4,6 раза больше среднего), поэтому кривая иллюстративна и не привязана к конкретной нагрузке.
Помимо технических пределов задержки, экономика обслуживания тоже быстро изменилась. По мере того как модели становятся эффективнее, а аппаратура — специализированнее, стоимость одного вывода падает.1 Опыт Facebook в масштабе флота показывает, насколько велика эта проблема стоимости обслуживания.
Налог на вывод в Facebook
Сценарий: Производственные системы ML-обслуживания в Meta выполняют десятки триллионов выводов в день в глобальных пользовательских сервисах (Hazelwood et al., 2018).
Диагностика: Повторяющиеся затраты вычислений и энергии на обслуживание вывода многократно превышают первоначальные расходы на офлайн-обучение модели. Живые шаблоны поступления запросов и жесткие границы задержки ограничивают батчинг на GPU.
Системный урок: Архитектуры, дешевые в обучении, могут оказаться неприемлемыми для обслуживания в масштабе флота. Производственная инфраструктура обслуживания требует совместного проектирования аппаратуры и программного обеспечения, чтобы сбалансировать хвостовую задержку, размер батча и совокупную стоимость владения, которая повторяется из месяца в месяц.
Та же экономическая нагрузка видна и в публичных ценах API. Логарифмическая траектория цен в «Дефляции интеллекта» показывает скорость этого обвала стоимости: в ней отслеживаются представительные снимки публичных прайс-листов API как рыночный ориентир. Цены поставщиков часто меняются, поэтому эти точки стоит читать как историческое свидетельство тренда, а не как руководство по текущим закупкам (OpenAI, 2023a; OpenAI, 2023b; OpenAI Developer Community, 2024; OpenAI, 2024; Anthropic, 2024; Google Developers Blog, 2024; DeepSeek, 2024). Каждое падение на порядок меняет то, какие приложения осуществимы.
Дефляция интеллекта: представительные публичные цены на входные токены API за 1 млн токенов ($) во времени (логарифмическая шкала). Восемь точек, соответствующих версиям моделей, — снимки публичных страниц с ценами OpenAI, Anthropic, Google и DeepSeek за 2023–2025 годы; точка Legacy GPT-3.5 — иллюстративная отправная точка, а не задокументированный снимок версии модели. Ряд задуман как индикатор рыночного тренда, а не как контролируемое или актуальное сравнение цен. Цены на обработку API-токенов обрушились на несколько порядков, и это меняет экономику автоматизированных рабочих процессов ИИ.
Две силы теперь формируют проблему обслуживания: хвостовая задержка, которая взрывается после прохождения точки излома очереди, и стоимость вывода, которая падает на порядки по мере роста эффективности. Вместе они заставляют дать формальное определение обслуживания, построенное вокруг задержки, а не пропускной способности.
Обслуживание моделей
Обслуживание моделей — это эксплуатационная фаза, которая предоставляет предсказания моделей конечным пользователям или нижестоящим системам при ограничениях по задержке, пропускной способности, доступности и стоимости.
- Значение: онлайн-обслуживание превращает приоритет пропускной способности при обучении () в ограничение на задержку запроса , что требует стека, спроектированного вокруг перцентиля, который задает его SLO.
- Отличие: в отличие от обучения модели, которое обычно обрабатывает запланированные батчи, обслуживание может обрабатывать стохастические онлайн-запросы, синхронизированные потоки или офлайн-батчи.
- Типичная ошибка: распространенное заблуждение состоит в том, что обслуживание — это «просто прямой проход». На самом деле это системная задача: выполнение модели — лишь один компонент стека, который может включать маршрутизацию запросов, балансировку нагрузки и преобразование данных.
SLO2 задает целевую задержку, которая формирует каждое архитектурное решение в стеке обслуживания и устанавливает жесткий временной бюджет, в пределах которого должна завершиться обработка каждого запроса. Когда сервер вывода получает запрос, выполнение модели составляет лишь один сегмент сквозного конвейера: сетевой прием, десериализация полезной нагрузки, преобразование признаков, планирование очереди и сериализация выхода занимают время до и после работы ускорителя. «Конвейер вывода» показывает, что исходные входы проходят предобработку (классические вычисления), нейросетевой вывод (глубокое обучение) и постобработку (классические вычисления) до получения финальных выходов. Любой из этих этапов может стать узким местом задержки. «Бюджет задержки» количественно показывает, куда уходит время, и выявляет неочевидный результат о том, какие этапы доминируют.
Конвейер вывода: сервисы ML-обслуживания превращают сырые входы в финальные выходы через последовательные этапы: предобработку, вычисления нейронной сети и постобработку. Нейронная сеть — лишь один компонент; предобработка и постобработка делают сквозную задержку зависимой от большего, чем выполнение нейронной сети.
Этот конвейер превращает обслуживание в задачу оркестрации: поскольку каждый этап расходует один и тот же бюджет задержки, оптимизация выполнения ядер на ускорителе дает убывающую отдачу, если преобразование данных или задержки в очередях доминируют. Прежде чем оптимизировать отдельный этап, система должна решить, вычисляются ли предсказания заранее или по запросу.
Статический и динамический вывод
Решение о том, генерируются ли предсказания до пользовательского запроса или во время него, задает фундаментальный компромисс между офлайн-эффективностью аппаратуры и онлайн-гибкостью эксплуатации (Google, 2024). От этого выбора зависит, работает ли ускоритель в режиме, не ограниченном задержкой, или под жесткими крайними сроками задержки интерактивного цикла обслуживания.
Статический вывод
Статический вывод (также называемый офлайн- или пакетным выводом) заранее вычисляет предсказания для ожидаемых входов и сохраняет их в хранилище выборки. Вынос выполнения модели целиком из пути пользовательского запроса меняет нижележащие аппаратные ограничения: поскольку у пакетных заданий нет дедлайнов на уровне миллисекунд, ускорители могут работать на максимальных размерах батча (). Большие батчи максимизируют арифметическую интенсивность, амортизируя передачу весов из HBM на тысячи примеров и не давая вычислительным ядрам простаивать. Когда клиент отправляет запрос (например, пользователь запрашивает ночью сгенерированный рейтинг рекомендаций), система обслуживания выполняет поиск «ключ — значение» с низкой задержкой, а не прямой проход на ускорителе. Основное эксплуатационное ограничение смещается с задержки ускорителя на емкость хранилища и свежесть данных: предвычисление предсказаний по всей области входов масштабируется комбинаторно ( в рекомендательных системах), а устаревшие предсказания сохраняются до следующего обновления батча.
Динамический вывод
Динамический вывод (также называемый онлайн- или реальным временем) вычисляет входы по запросу по мере их поступления. Выполнение по запросу обрабатывает произвольные, ранее не встречавшиеся входы в рамках схемы модели и сразу отражает новые развернутые веса без предвычисления. Однако выполнение модели непосредственно на пути пользовательского запроса подчиняет вывод строгому сквозному бюджету задержки (цели уровня обслуживания, или SLO). Поскольку пользовательские запросы приходят стохастически, среда выполнения обслуживания не может бесконечно откладывать выполнение, чтобы накопить большие батчи. Обслуживание запросов по одному или малыми батчами ( до ) снижает арифметическую интенсивность и делает память узким местом: шина памяти должна передавать веса всех слоев из памяти в регистры ради лишь части вычислительной мощности аппаратуры, что напрямую повышает стоимость одного запроса. Это противоречие между интерактивным временем ответа и эффективностью аппаратуры делает динамическое обслуживание заметно дороже в расчете на запрос, чем офлайн-батчинг (пример «Стоимость задержки»).
Стоимость задержки
Ограничения задержки напрямую определяют инфраструктурные расходы. Рассмотрим GPU-сервер, арендуемый за $4 в час.
Сценарий A (низкая задержка): батч размером 1.
- Задержка: 5 мс.
- Пропускная способность: 200 запр./с.
- Стоимость на миллион запросов: $5,56.
Сценарий B (высокая пропускная способность): батч размером 8.
- Задержка: 10 мс (вдвое больше из-за накладных расходов батчинга).
- Пропускная способность: 800 запр./с (вчетверо больше за счет параллельной эффективности).
- Стоимость на миллион запросов: $1,39.
Системный вывод: снижение задержки с 10 мс до 5 мс увеличивает счет за аппаратуру на 300 процентов. Инженеры должны оценить, создает ли это ускорение достаточную деловую ценность, чтобы оправдать рост стоимости в 4 раза.
Рассмотрим два сценария развертывания классификатора изображений ResNet-50. Статический подход подходит приложению для организации фотографий, которое ночью заранее классифицирует все изображения в библиотеке пользователя. При 10 000 фотографий и 5 мс на вывод пакетная обработка занимает около 50 с, а пользователи при просмотре получают классификацию мгновенно. Динамический подход подходит API модерации контента, которое должно классифицировать загруженные пользователями изображения в реальном времени, причем каждое изображение проходит полный конвейер предобработки, вывода и постобработки при бюджете задержки 100 мс. Производственная система классификации изображений может сочетать оба подхода: часто запрашиваемые изображения, например популярные товары или известные мемы, заранее классифицируются и кэшируются, а новые загрузки запускают динамический вывод.
Два режима поэтому оптимизируют разные режимы работы. Статический вывод максимизирует пропускную способность ускорителя и амортизирует затраты на выполнение во время офлайн-батчей, обменивая емкость хранилища на нулевую задержку вывода во время запроса. Динамический вывод минимизирует хвостовую задержку при стохастической конкурентной нагрузке, принимая меньшую загрузку ускорителя и более высокую стоимость запроса в обмен на обработку произвольных живых входов. Производственные архитектуры часто объединяют оба подхода в многоуровневую схему: статическое предвычисление кэширует частые или высоковероятные запросы, а динамический резерв обрабатывает новые или персонализированные запросы.
Обе модели стоимости, статическая и динамическая, традиционно предполагают фиксированный прямой проход: статический вычислительный граф выполняется один раз на запрос. Новые модели рассуждения меняют эту экономическую логику, сознательно тратя переменное количество вычислений на каждый запрос ради качества ответа.
Взгляд вперед: тратить больше вычислений на запрос
Традиционное обслуживание оптимизирует минимизацию задержки . Здесь цель оптимизации расширяется и включает качество ответа. Некоторые системы вычислений на этапе вывода сознательно тратят больше вычислительных циклов, чтобы повысить качество ответа. Генерация токенов часто ограничена пропускной способностью памяти при малых батчах, но большие батчи или длинные контексты могут сместить узкое место в сторону вычислений или трафика KV-кэша. Такие системы могут генерировать существенно больше токенов на запрос, включая промежуточные токены рассуждений или поиска, что увеличивает суммарные вычисления и энергию на один запрос.
Выполняет ли система один детерминированный прямой проход или расширенную траекторию рассуждений, решение о том, когда вычисляются предсказания, определяет только временное измерение обслуживания. Не менее важно пространственное измерение — где физически выполняется модель, — поскольку физическое размещение определяет ограничения иерархии памяти, сетевые границы и бюджет аппаратуры, доступный стеку обслуживания.
Спектр архитектур обслуживания
Хотя «обслуживание» часто подразумевает сетевой сервер, который обрабатывает API-запросы, архитектурный шаблон зависит от среды развертывания. «Рамка парадигм развертывания» ввела четыре парадигмы развертывания (облако, периферию, мобильные устройства и TinyML) и физические ограничения (световой барьер, стену мощности и стену памяти), из которых они возникают. Архитектурно обслуживание охватывает непрерывный спектр: от централизованных сетевых микросервисов (которые объединяют ускорители, чтобы оптимизировать пропускную способность и стоимость запроса, ценой накладных расходов на сетевые обращения и задержки холодного старта) до встроенного в приложение периферийного обслуживания (которое запускает модели внутри клиентских процессов через прямые вызовы функций, устраняя сетевую задержку и сохраняя приватность, но ценой жестких ограничений памяти и энергопотребления устройства) и далее до выполнения прошивки на голом железе на микроконтроллерах. Эти ограничения не исчезают на этапе обслуживания: обслуживание добавляет к аппаратным пределам, которые обучение могло поглотить терпением, еще и задержки SLO и давление стоимости. Одна и та же модель может требовать разных стратегий обслуживания в зависимости от того, где она выполняется.
Сетевое обслуживание (облако и центр обработки данных)
При сетевом обслуживании модель работает как отдельный сервис (микросервис). Так выглядит облачная парадигма, которую «Облачное ML: вычислительная мощность» описывала как обмен задержки на большую объединенную вычислительную мощность. Основной интерфейс — сеть, по таким протоколам, как HTTP или gRPC, поэтому сетевая передача и сериализация наряду с выполнением модели могут стать связывающими ограничениями. Серверное оборудование, например GPU NVIDIA (V100, A100, H100), тензорные процессоры Google (TPU) и AWS Inferentia, поддерживает высокопроизводительный батчинг и конкурентность, но холодный старт все равно может растягиваться от секунд до минут, потому что запуск контейнера, загрузка модели и прогрев находятся вне пути установившегося вывода.
Встроенное в приложение обслуживание (мобильные устройства и периферия)
При встроенном обслуживании модель работает внутри процесса пользовательского приложения (например, приложения на смартфоне, использующего CoreML или TensorFlow Lite), следуя встроенной парадигме, которую «Периферийное ML: задержка и приватность» и «Мобильное ML: автономный интеллект» разбирали с точки зрения задержки, приватности и автономной работы. Сервера здесь нет. Интерфейс — вызов функции, поэтому оптимизация сосредоточена на энергопотреблении и отзывчивости (SingleStream), а не на пропускной способности общего сервера.
Встроенное выполнение позволяет делать вывод без копирования (zero-copy inference). Когда данные проходят через систему, каждая копия расходует такты процессора и пропускную способность памяти. В облачном обслуживании раздельные физические пространства памяти вынуждают повторные передачи: кадр камеры проходит из буфера сетевого сокета в пользовательское пространство, затем через буфер предобработки в закрепленную оперативную память хоста и по PCIe — в память ускорителя. Мобильный конвейер может исключить эти промежуточные копии, если камера, процессор обработки изображений (ISP), CPU и NPU обмениваются дескрипторами общих буферов в единой системной памяти. В архитектурах system-on-chip (SoC) с единой памятью, таких как процессоры Apple серий A и M или Qualcomm Snapdragon, все вычислительные блоки используют один физический пул DRAM. Когда программа передает дескрипторы буферов вместо дублирования байтов, задержка вывода снижается, а мощность шины памяти падает, хотя преобразования формата все равно могут требовать участия CPU или ISP.
Типичная аппаратура включает мобильные NPU (Apple Neural Engine, Qualcomm Hexagon) и встроенные GPU (NVIDIA Jetson). Если модель уже находится в памяти и скомпилирована, запуск занимает миллисекунды; первый вывод длится дольше, если он вызывает страничные ошибки холодной памяти или компиляцию «на лету» (just-in-time). Тепловой и энергетический бюджет мобильных устройств жестко ограничен пассивным охлаждением (1–10 Вт). Длительный высокопроизводительный вывод насыщает тепловую емкость корпуса устройства, и системный термоконтроллер вынужден снижать тактовую частоту, ухудшая задержку вывода.
Обслуживание на голом железе (TinyML)
При TinyML-обслуживании модель компилируется прямо в прошивку микроконтроллера. Это крайний конец спектра развертывания, который «TinyML: повсеместное восприятие» описывала как повсеместное сенсорное восприятие при бюджетах мощности в микроватты. Многие развертывания не имеют универсальной операционной системы или динамического распределителя памяти: обслуживание выполняется как плотный цикл на голом железе, который опрашивает датчики и вызывает статический интерпретатор. Поскольку статическая оперативная память (SRAM) ограничена сотнями килобайт, оптимизация сосредоточена на выполнении весов модели на месте из энергонезависимой флеш-памяти, а динамические буферы активаций размещаются в заранее выделенной Tensor Arena. Батчинг запросов невозможен при потоках от одиночных датчиков. Типичная аппаратура включает микроконтроллеры серии ARM Cortex-M, ESP32 и специализированные ускорители TinyML. Задержка запуска измеряется микросекундами, когда веса остаются в отображаемой в память флеш-памяти, а буферы выполнения выделены статически; работа укладывается в бюджет мощности от микроватт до милливатт, который обеспечивает работу от батареи в течение месяцев или лет.
Уровни развертывания различаются прежде всего рабочими диапазонами. «Спектр архитектур обслуживания» сравнивает ограничения по задержке, размеру батча, памяти, мощности, обновлению, отказам и мониторингу, которые следуют из каждой среды.
| Характеристика | Облако / ЦОД | Мобильные / периферия | TinyML |
|---|---|---|---|
| Целевая задержка | 10–100 мс | 20–50 мс | 1–100 мс |
| Размер батча | 1–128 (динамический) | 1 (фиксированный) | 1 (фиксированный) |
| Память | 16–80 ГБ VRAM | 2–8 ГБ общей памяти | 256 КБ–2 МБ SRAM |
| Мощность | 300–700 Вт | 1–10 Вт | 1–100 мВт |
| Механизм обновления | Развертывание контейнера | Обновление через магазин приложений | Беспроводное обновление прошивки (OTA) |
| Режим отказа | Повтор / переключение на резерв | Мягкая деградация | Молчаливый сбой или перезагрузка |
| Мониторинг | Полная телеметрия | Ограниченная аналитика | Только сигнал «жизни» (heartbeat) |
Спектр архитектур обслуживания: типичные рабочие диапазоны для облачного, мобильного и TinyML-обслуживания. Диапазоны задержки, размера батча, памяти и мощности — это ориентиры проектирования, а не универсальные пределы; строки об обновлении, отказах и мониторинге описывают типичный режим работы в каждой среде.
ResNet-50 на всем спектре обслуживания
Системный вывод: утверждение «та же модель» вводит в заблуждение. Облачный и мобильный уровни используют один граф ResNet-50, но разные точности и среды выполнения, а TinyML-уровень не может запустить ResNet-50 и подставляет архитектуру, спроектированную под его ограничения. Если считать их одной моделью, скрывается работа, которая делает каждое развертывание возможным.
Применяя эти диапазоны к одной задаче классификации изображений, «Классификация изображений на всем спектре обслуживания» показывает, почему облако и мобильные устройства могут адаптировать ResNet-50, а TinyML должен заменить ее на MobileNetV2.
| Измерение | Облако | Мобильное | TinyML |
|---|---|---|---|
| Формат модели | TensorRT, движок FP16 (51,2 МБ) | TensorFlow Lite, INT8 (25,6 МБ) | Не осуществимо (25,6 МБ); альтернатива: MobileNetV2, INT8 (3,5 МБ) |
| Вывод (батч 1) | 1,4 мс (батч 16: 14 мс) | 12 мс (NPU), 45 мс (CPU) | 120 мс |
| Пропускная способность | 1 143 изобр./с (с батчингом) | около 80 изобр./с (одиночный поток) | около 8 изобр./с |
| Память | 2 ГБ VRAM (батч 32) | 150 МБ пикового объема (общая с приложением) | 320 КБ арены (помещается в 512 КБ SRAM) |
| Энергия на вывод | — | 0,8 мДж (NPU), 4,2 мДж (CPU) | 12 мДж |
Классификация изображений на всем спектре обслуживания: иллюстративное сравнение облачного, мобильного и TinyML-обслуживания для одной и той же задачи классификации изображений. Видно, как формат модели, задержка, пропускная способность, объем памяти и энергетический бюджет различаются в разных контекстах развертывания.
Уровень балансировщика нагрузки
Когда трафик превышает возможности одной машины, облачные развертывания и развертывания в центрах обработки данных, которые запускают несколько реплик одной модели, требуют дополнительного инфраструктурного уровня: балансировщика нагрузки. Производственные системы обслуживания размещают балансировщики между клиентами и серверами моделей, обеспечивая три важные функции инфраструктуры обслуживания.
Балансировщик нагрузки для обслуживания выполняет три основные задачи. Во-первых, распределение запросов направляет входящий трафик доступным репликам модели по таким алгоритмам, как round-robin или наименьшее число соединений; отведение трафика от медленных или перегруженных реплик напрямую сдерживает хвостовую задержку. Во-вторых, мониторинг работоспособности проверяет готовность реплики, инспектируя как живость процесса, так и состояние инициализации модели. Он подтверждает, что веса загружены и прогревочные проходы завершены, прежде чем пропустить трафик. В-третьих, поддержка развертывания позволяет проводить поэтапные выкаты, постепенно переводя трафик между версиями модели, а не переключая его резко. Раздел «Развертывание модели» главы «MLOps» расширяет эти механизмы переключения трафика до полных стратегий проверки.
Для обслуживания на одной машине с несколькими экземплярами модели, например при запуске нескольких сессий ONNX Runtime, очередями запросов управляют фреймворк и операционная система. Полная сложность балансировки нагрузки становится необходимой при масштабировании до распределенных систем вывода, где несколько машин обслуживают одну модель. Детали алгоритмов распределения запросов и архитектур с множеством реплик относятся к этому распределенному контексту.
В планировании мощности для одной машины единица обслуживания соответствует пропускной способности модели на физическом узле. Динамика очередей, разобранная в «Теория очередей», определяет это базовое поведение и задает границы загрузки, при которых горизонтальное масштабирование становится обязательным.
Балансировщики нагрузки распределяют запросы между репликами, но предсказуемая задержка требует также контроля того, что происходит внутри каждой машины. Операционная среда вносит собственные источники изменчивости.
Детерминированная задержка и изоляция ресурсов
Один шумный сосед возмущает каждую нагрузку, которая делит с ним узел.
Сервер вывода не работает в выделенной пустоте. На одном хосте операционная система мультиплексирует аппаратуру между фоновыми демонами телеметрии, агентами журналирования и рабочими потоками ядра. Когда эти неизолированные процессы конкурируют за ресурсы выполнения, они время от времени вытесняют конвейер вывода. Эти шумные соседи — основной источник джиттера задержки (latency jitter), при котором физическое время выполнения одинаковых прямых проходов непредсказуемо колеблется. Эта конкуренция раздувает хвостовую задержку на 99-м перцентиле (p99), даже когда средняя загрузка аппаратуры остается низкой. Конкуренция за ресурсы, таким образом, расширяет хвостовую задержку через разброс времени обслуживания. Это физическая деградация, отличная от накопления задержки в очереди, которое разбирается в «Взрывном росте хвостовой задержки».
Для детерминированной производительности нужно устранить помехи от эвристик разделения времени, которые операционная система использует по умолчанию. Системы обслуживания, такие как Clockwork, показывают, что время выполнения глубоких нейронных сетей (DNN) по своей природе предсказуемо вплоть до субмиллисекундных допусков, если аппаратная конкуренция систематически устранена (Gujarati et al., 2020). Привязка потоков к ядрам (CPU affinity, закрепление потоков) задает базовую границу вычислений: рабочие потоки вывода привязываются к назначенным физическим ядрам. Без закрепления планировщик ОС периодически переносит потоки между ядрами, инвалидируя приватные кэши L1 и L2, и выполнение останавливается, пока строки заново загружаются из общего кэша L3 или DRAM. В многосокетных архитектурах перенос потоков через границы неоднородного доступа к памяти (NUMA) наказывает еще сильнее: инструкциям приходится обращаться к памяти через межсокетные соединения, добавляя десятки наносекунд задержки на каждую транзакцию. Закрепление потоков за конкретными ядрами и привязка их выделений памяти к локальным узлам NUMA сохраняют присутствие данных в кэше и устраняют межсокетный трафик шины.
Даже при закрепленных ядрах CPU задержка доступа к памяти остается уязвимой для подсистемы виртуальной памяти. При нехватке памяти на хосте ядро может выгружать неактивные диапазоны адресов на диск. Когда CPU или движок прямого доступа к памяти (DMA) через PCIe обращается к выгруженному адресу, выполнение останавливается на миллисекунды, пока контроллер хранилища возвращает физическую страницу в DRAM. Блокировка памяти (mlock) заставляет ядро закрепить заданные диапазоны виртуальных адресов в физической оперативной памяти хоста. Это отключает вытеснение страниц и гарантирует немедленный доступ к весам, буферам подготовки входов и выгруженным блокам KV-кэша, которые находятся в памяти хоста. Такая гарантия меняет гибкость физической памяти хоста на детерминизм, поскольку закрепленные страницы не могут быть отобраны другими процессами. Поскольку mlock действует строго на таблицы страниц хоста, он не распространяется на HBM ускорителя, которая выделяется напрямую драйвером ускорителя.
Помимо запланированных процессов, асинхронные аппаратные прерывания создают еще один источник вытеснения длительностью в доли миллисекунды. Когда сетевая карта (NIC) получает пакетные всплески, она запускает запросы аппаратных прерываний (IRQ), которые заставляют обрабатывающее ядро CPU немедленно приостановить выполнение пользовательского пространства и обработать обработчики прерываний ядра. Если операционная система направляет эти прерывания на ядра, которые выполняют цикл отправки движка вывода, CPU приостанавливает отправку команд ускорителю. Поскольку GPU обрабатывает короткие слои вывода за микросекунды, даже кратковременные остановки отправки на CPU опустошают аппаратный кольцевой буфер команд ускорителя и вызывают пузыри в конвейере, когда вычислительные блоки простаивают в ожидании следующего дескриптора ядра. Экранирование прерываний (interrupt shielding) ограничивает привязку IRQ выделенными служебными ядрами, не давая входящему сетевому трафику и дисковой активности вытеснять поток отправки на GPU.
Изоляция физических ядер, блокировка памяти хоста и экранирование линий прерываний устраняют шум операционной системы и превращают неровные пути выполнения в предсказуемые детерминированные прямые проходы. Однако обеспечение детерминизма времени обслуживания на одном узле решает лишь половину задачи обслуживания. Аппаратная изоляция гарантирует, что ядро ускорителя выполняется без вмешательства хоста, но последовательная обработка одиночных запросов оставляет огромные тензорные вычислительные конвейеры сильно недогруженными. Чтобы достичь высокой пропускной способности в пределах крайних сроков задержки, внутренняя программная архитектура движка обслуживания должна координировать нерегулярные асинхронные потоки запросов в структурированные батчи, которые насыщают аппаратуру.
Архитектура системы обслуживания
Пока изоляция хоста обеспечивает детерминированное выполнение отдельных ядер, производственное обслуживание сталкивается с рассогласованием на границе системы. Пользовательские запросы приходят стохастически: всплесками с интервалом в миллисекунды, затем секундами тишины. Вычислительные движки ускорителя, напротив, требуют непрерывных потоков однородных плотных батчей, чтобы насытить пропускную способность памяти и функциональные блоки. Чтобы закрыть этот разрыв, нужна специализированная архитектура обслуживания, которая отделяет сетевой прием от планирования выполнения, поглощает всплески поступления и упаковывает нерегулярные входы в плотные батчи, не нарушая SLO задержки.
Внутренняя архитектура и поток запросов
Сервер вывода3 (например, NVIDIA Triton или TensorFlow Serving) работает как специализированный планировщик среды выполнения, который управляет конкурентностью, памятью устройства и переносом данных между CPU хоста и ускорителями. Вместо того чтобы вызывать выполнение модели синхронно при поступлении запроса, сервер пропускает входящие запросы через выделенные подсистемы, которые изолируют сетевую обработку клиентов от вычислений ускорителя. Каждый запрос проходит многоэтапный конвейер, спроектированный так, чтобы максимизировать пропускную способность аппаратуры и ограничивать задержку в очереди. «Анатомия сервера вывода» разделяет шесть этапов, так что роль каждого компонента в поглощении трафика, постановке в очередь, батчинге и выполнении на ускорителе становится явной.
Анатомия сервера вывода: современный сервер вывода отделяет сетевую обработку от выполнения на ускорителе через поэтапный конвейер. Каждый этап изолирует отдельную задачу, от поглощения всплесков трафика до формирования эффективных батчей, поэтому ускоритель остается сильно загруженным, несмотря на нерегулярные шаблоны поступления.
Эта архитектура выполняет три основные функции.
Первая — управление конкурентностью. Движки обслуживания используют асинхронные циклы событий (такие как epoll или kqueue) и пулы рабочих потоков, чтобы обрабатывать тысячи одновременных клиентских TCP-соединений без блокировки потоков выполнения. Изоляция сетевого ввода-вывода клиентов гарантирует, что медленные или зависшие передачи по сети никогда не вызовут простоя вычислительного конвейера ускорителя.
Вторая — преобразование запросов. Сервер декодирует сериализованные сетевые полезные нагрузки в непрерывные выровненные буферы памяти, соответствующие раскладке тензора, которую требует базовый движок выполнения. Например, четырехмерные тензоры изображений могут использовать формат NCHW4 или NHWC. На современных ускорителях блоки матричного умножения (тензорные ядра, Tensor Cores) загружают векторы каналов из 8 или 16 элементов объединенными (coalesced) транзакциями памяти, которые благоприятствуют раскладке «каналы последними» (NHWC). Если входящие полезные нагрузки приходят в NCHW, сервер или хост должен выполнить явное ядро транспонирования (torch.permute или собственное CUDA-транспонирование). Поскольку транспонирование тензора не выполняет никаких операций с плавающей точкой ( FLOP/байт), оно строго ограничено пропускной способностью памяти, расходует пропускную способность памяти хоста или PCIe и напрямую подтачивает бюджет задержки.
Третья — управление жизненным циклом модели. Среда выполнения распределяет память устройства (VRAM), закрепляет буферы памяти хоста для DMA, загружает контрольные точки параметров модели и выполняет прогревочные прямые проходы, чтобы скомпилировать графы выполнения и инициализировать контексты CUDA до пропуска живого клиентского трафика. Корпоративные реестры моделей, канареечные выпуски и политики отката относятся к главе «MLOps». Движок обслуживания управляет локальным состоянием: проверяет, что активные экземпляры модели прогреты, находятся в памяти ускорителя и готовы к отправке.
Планировщик (scheduler) координирует переход между буферизацией запросов и выполнением на ускорителе, реализуя динамический батчинг («Оптимизация пропускной способности»). При размере батча вывод жестко ограничен пропускной способностью памяти: ускоритель должен перенести все параметры модели из HBM в SRAM на кристалле, чтобы выполнить один прямой проход, и вычислительные блоки простаивают. Объединение запросов в одновременный батч амортизирует побайтовые передачи при чтении весов модели на все входов и повышает арифметическую интенсивность ().
Чтобы сбалансировать задержку отдельного запроса с эффективностью батчевых вычислений, планировщик настраивает время пребывания в очереди через окно батчинга (или порог тайм-аута). Нулевое окно дает чистое выполнение FIFO без задержки в очереди, но подвергает ускоритель недозагрузке и ограничению по памяти при малом батче. Напротив, ограниченное окно (например, 2–5 мс) позволяет планировщику буферизовать поступающие запросы, пока очередь не достигнет целевого размера батча или не истечет тайм-аут. Этот механизм обменивает ограниченную задержку в очереди на более высокую арифметическую интенсивность, амортизируя трафик шины памяти и повышая устойчивую пропускную способность кластера.
Протоколы взаимодействия и сериализация
По мере того как ядра ускорителя проходят агрессивную компиляцию (через TensorRT, TorchDynamo или собственные ядра), время выполнения на устройстве часто опускается ниже одной миллисекунды. По закону Амдала, когда время вычислений сокращается, накладные расходы хоста на прием, передачу и десериализацию полезной нагрузки становятся доминирующим членом сквозной задержки.
Узкое место сериализации
Полезные нагрузки ML принципиально отличаются от полезных нагрузок обычных веб-API: они состоят из многомерных массивов чисел с плавающей точкой (таких как тензоры изображений, плотные векторы эмбеддингов или логиты последовательностей токенов). Хотя текстовый JSON повсеместен в веб-сервисах, сериализация плотных числовых массивов в текст несет серьезные штрафы по CPU и памяти. Накладные расходы сериализации возникают потому, что парсеры JSON должны последовательно просматривать каждый байт, проверять синтаксис, выделять узлы в куче и вызывать процедуры преобразования строки в число с плавающей точкой (такие как strtod). Каждое 32-битное число с плавающей точкой раздувается с 4 исходных байтов до 7–15 ASCII-символов с учетом знаков препинания. Кроме того, сырые двоичные данные (например, сжатый JPEG или сырые байты изображения) требуют кодирования Base64, чтобы передаваться внутри строк JSON, что добавляет 33 процента размера еще до начала разбора.
Двоичные форматы сериализации, такие как Protocol Buffers5 и FlatBuffers,6 обходят эту налоговую нагрузку текстового преобразования. Массивы чисел с плавающей точкой передаются напрямую как упакованные потоки байтов IEEE 754 без ASCII-преобразования и без кадрирования Base64. Кроме того, FlatBuffers организует сериализованные записи с внутренними относительными смещениями, что обеспечивает десериализацию без копирования (zero-copy): приложение обслуживания читает размерности тензора, типы данных и байтовые смещения прямо из сетевого приемного буфера, не выделяя промежуточного объектного графа в куче.
REST и gRPC
Выбор транспортного протокола определяет жизненные циклы соединений и мультиплексирование сокетов. Традиционные REST API обычно используют HTTP/1.1 с полезными нагрузками JSON. При HTTP/1.1 конкурентные запросы требуют открытия нескольких параллельных TCP-соединений, и каждое из них несет трехстороннее рукопожатие, согласование TLS и разгон окна медленного старта TCP. Кроме того, HTTP/1.1 страдает от блокировки по головному элементу (head-of-line blocking) на транспортном уровне: запросы на одном соединении должны обслуживаться последовательно. Хотя REST API могут переходить на HTTP/2 или двоичные кодировки, сочетание HTTP/1.1 и JSON создает значительные накладные расходы на сокеты и конкуренцию за разбор на CPU при обслуживании высокопроизводительных тензорных нагрузок.
Напротив, gRPC (gRPC Remote Procedure Call)7 сочетает транспорт HTTP/2 с сериализацией Protocol Buffers. HTTP/2 устанавливает одно долгоживущее TCP-соединение и мультиплексирует сотни одновременных потоков запросов и ответов с помощью двоичного кадрирования. Эта архитектура устраняет установку соединения для каждого запроса и блокировку по головному элементу на транспортном уровне, а Protobuf обеспечивает строго типизированные контракты и эффективно сериализует двоичные тензорные полезные нагрузки. Поэтому gRPC — стандартный протокол для внутренней связи микросервисов в кластерах обслуживания моделей, где основными критериями проектирования являются низкая задержка, компактные проводные полезные нагрузки и двунаправленная потоковая передача токенов.
Конкретное сравнение полезных нагрузок показывает, как формат сериализации меняет размер на проводе и накладные расходы разбора на CPU хоста.
Сериализация: JSON и Protobuf
Рассмотрим полезную нагрузку запроса, которая содержит 1 000 чисел с плавающей точкой (например, вектор эмбеддинга).
- JSON: занимает около 9 КБ в сети. Для разбора требуется около 50 мкс.
- Protobuf: занимает около 4 КБ в сети. Для разбора требуется около 5 мкс.
Расчет: переход одного запроса на двоичную полезную нагрузку экономит 50 мкс − 5 мкс = 45 мкс времени разбора. Для этой иллюстративной системы, которая обрабатывает 10 000 запросов в секунду, экономия накапливается до 10 000 × 45 мкс = 0,45 с процессорного времени, высвобождаемого каждую секунду реального времени. Это 45 процентов одного ядра, освобожденного только от накладных расходов сериализации.
Системный вывод: выигрыш в 10 раз по времени разбора делает gRPC/Protobuf, FlatBuffers или другой двоичный протокол сильным кандидатом для высокопроизводительных внутренних микросервисов, когда сериализация заметна в бюджете задержки.
Выбор архитектуры определяется системными ограничениями. REST поверх HTTP/1.1 остается практичным для публичных периферийных шлюзов, где широкая совместимость с клиентами и читаемость для отладки важнее сырой эффективности передачи. Внутри границ кластера gRPC поверх HTTP/2 с двоичной сериализацией становится обязательным, когда высокий объем запросов, мультиплексирование постоянных соединений или потоковая передача токенов грозят исчерпать такты CPU хоста на налог сериализации.
Выбор протокола и архитектура процессов задают структурный каркас сервера вывода. Однако для оценки реальной операционной производительности нужно проследить, как задержка накапливается, когда отдельные запросы проходят каждый этап этого конвейера выполнения.
Жизненный цикл запроса
Один HTTP-запрос с JPEG-изображением поступает на сервер вывода. Между моментом, когда первый байт входит в сетевой стек, и моментом, когда полезная нагрузка с результатом классификации уходит обратно, запрос проходит шесть различных этапов конвейера. Каждый этап расходует часть сквозного бюджета задержки, поэтому для целенаправленной настройки производительности необходима детальная декомпозиция по фазам.
Бюджет задержки
Для систем динамического вывода инверсия обслуживания, установленная в «Парадигме обслуживания», создает бюджет задержки, который определяет проектирование системы (Gujarati et al., 2020). Система обслуживания с задержкой на уровне секунд на запрос может не выполнить многие интерактивные SLO, даже если она обеспечивает отличную пропускную способность.
Значимые метрики расширяются от совокупной пропускной способности и средней задержки до распределения задержек. Среднее и p50 описывают центр распределения, а p95 и p99 выявляют медленный хвост. Если средняя задержка составляет 50 мс, а p99 — две секунды, порог p99 в 40 раз превышает среднюю задержку, поэтому около 1 процента запросов занимают не меньше двух секунд. Важно ли такое хвостовое поведение, зависит от сервиса и его пользователей, поэтому целевые перцентили должны выводиться из SLO, а не из традиции.8
Управление этими ограничениями на перцентили требует разложить полное допустимое время ответа на бюджет задержки, который распределяет время между каждой фазой обработки.
Бюджет задержки
Бюджет задержки — это время, выделенное этапам запроса в рамках сквозного крайнего срока. SLO также задает требуемый квантиль завершения.
- Значение: бюджет работает как система ограничений с нулевой суммой: любая миллисекунда, потраченная на сериализацию или накладные расходы сети, напрямую уменьшает задержку , доступную для вывода модели.
- Отличие: SLO задержки связывает крайний срок (например, ) с квантилем завершения ( или ). Показатель уровня сервиса (SLI) — это измеренная величина, по которой оценивают цель. Пропуск внутреннего SLO расходует запас надежности; превышение внешнего порога SLA может запустить компенсации, определенные договором. Скачки хвостовой задержки могут возникать из-за очередей, формирования батчей, состояния кэша, взаимного влияния или перемещения данных.
- Типичная ошибка: распространенное заблуждение состоит в том, что у «модели» весь бюджет. В иллюстративной разбивке из «Бюджет задержки ResNet-50» остаток расходуется на жизненный цикл запроса (DNS, TLS, балансировку нагрузки, сериализацию).
Каждый запрос обслуживания распадается на три фазы, каждая из которых расходует часть бюджета задержки. Предобработка преобразует сырой вход, например байты изображения или текстовые строки, в тензоры, готовые для модели. Вывод выполняет вычисления модели. Постобработка преобразует выходы модели в ответ для пользователя.
Хвостовая задержка и бюджет
Обслуживание оптимизирует хвостовую задержку под нагрузкой. Используйте эту контрольную точку, чтобы отделить эффекты очередей и батчинга до выбора оптимизации.
- Поведение очереди: используйте «Взрывной рост хвостовой задержки», чтобы описать, почему задержка растет нелинейно по мере приближения загрузки к насыщению.
- Хвост и среднее: можете ли вы объяснить, почему средняя задержка не может подтвердить соблюдение SLO на уровне p99?
- Бюджет задержки: при SLO на уровне p99 в 50 мс и 18 мс, потраченных на предобработку, передачу и постобработку, сколько остается на вывод?
Вывод — лишь один сегмент бюджета задержки; предобработка сопоставима с ним по величине.
Более быстрая аппаратура не означает автоматически более быстрого обслуживания. На практике предобработка и постобработка могут доминировать в общей задержке, когда вывод выполняется на оптимизированных ускорителях. Оптимизация исключительно фазы вывода дает убывающую отдачу, если окружающий конвейер остается узким местом из-за операций CPU.
Анализ распределения задержки
Чтобы понять, где накапливается задержка, нужно независимо инструментировать каждый этап конвейера обслуживания. При классификации изображений сквозное время запроса смешивает декодирование изображения на хосте, передачи по шине PCIe, вычисления на ускорителе и разбор выхода на хосте. Измерение каждой фазы в отдельности показывает, где на самом деле расходуется бюджет задержки.
ResNet-50: разбивка бюджета задержки
«Бюджет задержки ResNet-50» подробно описывает разбивку задержки по фазам для иллюстративного запроса обслуживания ResNet-50.
Фаза Операция Время Доля Предобработка Декодирование JPEG 3 мс 30% Предобработка Изменение размера до 1 мс 10% Предобработка Нормализация (mean/std) 0,5 мс 5% Передача данных Копирование CPU→GPU 0,5 мс 5% Вывод Прямой проход ResNet-50 5 мс 50% Постобработка Softmax + top-5 0,1 мс ~1% Итого 10,1 мс 100% Бюджет задержки ResNet-50: иллюстративная разбивка по фазам одного запроса обслуживания. Предобработка и передача данных вместе сопоставимы по стоимости с самим прямым проходом ResNet-50. Проценты показывают, где инженерные усилия окупаются в этом сценарии. Доли по фазам округлены до целых и могут не давать в сумме ровно 100.
Системный вывод: в этом иллюстративном бюджете обслуживания ResNet-50 предобработка занимает 44,6 процента задержки, хотя вывод модели — самая вычислительно интенсивная фаза. Если TensorRT сократит вывод до предполагаемых 2 мс, предобработка будет доминировать с долей 63,4 процента.
Сценарий ResNet-50 представляет вывод, ограниченный вычислениями: плотная арифметика сверток доминирует в прямом проходе. Однако смена архитектуры модели может перенести связывающее ограничение с блоков арифметических вычислений на пропускную способность памяти. Этот фундаментальный сдвиг хорошо виден в рекомендательных системах.
Маячный пример: обслуживание DLRM
Сценарий: обслуживание DLRM при бюджете задержки p99 в 10 мс.
Анализ: в то время как этап модели ResNet-50 определяется вычислениями сверточной нейронной сети, основная стоимость этапа модели DLRM — обращения к памяти таблиц эмбеддингов. Узкие места сквозного обслуживания все равно требуют измерить весь путь: предобработку, вывод, постобработку и перемещение данных. «Задержка обслуживания DLRM» разбивает запрос на рекомендацию по фазам.
Фаза Операция Время Узкое место Разбор входа Разбор запроса 0,5 мс CPU Выборка эмбеддингов Выборка более 100 плотных векторов 6 мс пропускная способность памяти Вывод Прямой проход MLP 1,5 мс Вычисления Постобработка Ранжирование и фильтрация 1 мс CPU Итого 9 мс Задержка обслуживания DLRM: иллюстративная разбивка по фазам запроса рекомендации при бюджете p99 в 10 мс. Она противопоставляет выборки эмбеддингов DLRM, ограниченные пропускной способностью памяти, прямому проходу ResNet-50, ограниченному вычислениями. Добавление вычислений на этапе вывода не помогает, пока связывающим ограничением остается пропускная способность таблиц эмбеддингов.
Системный вывод: в DLRM этап «Вывод» (многослойный перцептрон, MLP) составляет лишь около 17 процентов задержки. Большая часть времени уходит на выборки эмбеддингов, то есть на извлечение 128-мерных векторов из таблиц размером в терабайты. Это нагрузка, ограниченная пропускной способностью и емкостью памяти, где добавление вычислений не помогает, пока таблицы эмбеддингов не начнут обслуживаться быстрее.
Вместе «Бюджет задержки ResNet-50» и «Задержка обслуживания DLRM» показывают один и тот же общий сбой: прямолинейные усилия по оптимизации направлены туда, где применима экспертиза в ML (квантование модели, прореживание), тогда как связывающее ограничение находится в другом месте (декодирование изображений на CPU для ResNet-50, пропускная способность памяти для таблиц эмбеддингов DLRM). Закономерность обобщается: в любой системе обслуживания, где модель составляет меньше половины общей задержки, оптимизации одной только модели дают убывающую отдачу, какими бы большими ни были ускорения отдельных частей. Закон Амдала задает потолок. Количественный подход к обслуживанию позволяет увидеть эти скрытые узкие места до того, как инженерные усилия будут распределены неправильно.
Количественный подход к обслуживанию
Анализ: закон Амдала задает этот потолок (раздел «Закон Амдала и закон Густафсона» приложения «Основы машины» содержит формальный вывод). Предобработка (4,5 мс) и передача данных (0,5 мс) занимают 49,5 процента общей задержки. Ускорение модели в 10 раз (5 мс → 0,5 мс) дает лишь сквозное ускорение в 1,8 раза (снижение задержки с 10,1 мс до 5,6 мс). Концентрация исключительно на оптимизациях модели, таких как квантование или прореживание, дает убывающую отдачу, когда во времени выполнения доминируют этапы вне модели.
Механизм: специализированные ускорители (например, TPU и тензорные ядра) заменяют сложную управляющую логику плотными массивами умножения с накоплением, повышая достигаемую пропускную способность для совместимых ядер. Поэтому аппаратное ускорение становится экономическим требованием для многих сервисов обслуживания с высокой пропускной способностью или низкой задержкой.
Системный вывод: профилируйте до оптимизации. Если доминирует предобработка, конвейеры с ускорением на GPU (NVIDIA DALI) могут оказаться эффективнее квантования модели.
Перенос предобработки ближе к ускорителю может сократить излишние передачи CPU→GPU, но сквозной выигрыш зависит от конкретного конвейера. Эффективная оптимизация начинается с самых больших потребителей времени.
Счет за налог на обслуживание
Помимо выполнения прямого прохода модели, каждый запрос платит инфраструктурный «налог» системе хоста и сетевому стеку. Когда поступает запрос на вывод, он проходит через сетевой интерфейс, переходит между пространством ядра и пространством пользователя, десериализуется из сетевых протоколов в буферы памяти, ставится в очередь на сборку батча и копируется по шине PCIe в память устройства-ускорителя. Аппаратное ускорение сжимает матричные вычисления на порядки, но эти операции на стороне хоста выполняются на универсальных CPU и шинах ввода-вывода. Поэтому по мере оптимизации моделей этот неинференционный налог обслуживания составляет все большую долю общей задержки.
Проблема убийственных микросекунд
Барроуз, Паттерсон и коллеги выявили критический разрыв в том, как вычислительные системы обрабатывают задержку на разных временных масштабах (Barroso et al., 2017). Простои на наносекундном масштабе (например, промахи кэша) скрываются аппаратным параллелизмом на уровне инструкций, а задержки на миллисекундном масштабе (например, дисковый ввод-вывод или сетевые RPC) скрываются переключением контекста потоков операционной системой. Операции микросекундного диапазона (1–100 мкс) попадают в неудобный промежуток: они слишком длинны, чтобы ожидать в активном цикле на ядре CPU без траты вычислительных тактов и энергии, и слишком коротки, чтобы операционная система переключилась на другой поток, не заплатив накладными расходами планирования, которые превышают само ожидание.
Инфраструктура обслуживания работает прямо в этом режиме убийственных микросекунд. По представительным диапазонам из «Счета за налог на обслуживание» сериализация (50–500 мкс), диспетчеризация (10–50 мкс) и копирование данных (100–500 мкс) по отдельности невелики, но для сервиса вывода с задержкой 5 мс эти накладные расходы в микросекундном масштабе вместе съедают от 3,2 до 21 процента бюджета задержки еще до учета сетевых задержек и задержек в очередях. Ни один накладной расход сам по себе не оправдывает оптимизацию, но вместе они определяют, выполняет ли система свой SLO.
| Компонент налога | Типичная стоимость | Характер масштабирования | Как снизить налог |
|---|---|---|---|
| Сетевой ввод-вывод | 1–5 мс | Линейно от размера полезной нагрузки | Сжатие, размещение в одном регионе |
| Сериализация | 50–500 мкс | Линейно от размера полезной нагрузки | gRPC/Protobuf (вместо JSON) |
| Очередь | 0,1–10 мс | Растет лавинообразно вблизи предела | Динамический батчинг, автомасштабирование |
| Диспетчеризация | 10–50 мкс | Постоянно на батч | Слияние ядер (меньше запусков) |
| Копирование данных | 100–500 мкс | Линейно от размера тензора | Zero-Copy / общая память |
Счет за налог на обслуживание: типичная разбивка источников задержки, не связанных с выводом. Отдельные компоненты, такие как сериализация, могут быть меньше 1 мс, но они складываются. При верхних границах показанных диапазонов этот налог может сравняться с вызовом модели длительностью 5 мс. Цель инженера — измерить реальный путь запроса и снизить связывающие издержки с помощью двоичных полезных нагрузок, постоянных соединений и меньшего числа копий.
Фреймворк бюджета задержки дает систематический подход к этой составной проблеме. Измерение идет первым. Без инструментирования по фазам инженеры не могут отличить узкое место предобработки от узкого места сериализации, и усилия по оптимизации уходят на самый заметный компонент (модель), а не на самый дорогой. Когда измерение показало реальное распределение времени, инженерные усилия должны распределяться пропорционально. Фаза, которая занимает 50 процентов задержки, заслуживает большего внимания, чем фаза в 5 процентов, независимо от того, какую из них легче оптимизировать. Архитектурные изменения, такие как предобработка на GPU или агрессивный батчинг, могут переносить работу между фазами целиком, иногда устраняя узкое место, а не просто уменьшая его.
Компромиссы разрешения и размера входа
Разрешение входа влияет и на задержку предобработки, и на задержку вывода, но связь различается в зависимости от того, ограничена ли система вычислениями (арифметической пропускной способностью) или памятью (перемещением данных). Система, ограниченная вычислениями, замедляется по мере роста вычислений; система, ограниченная памятью, замедляется по мере роста переданных байтов. Одного соответствия емкости недостаточно, чтобы снять стоимость пропускной способности. Анализ Roofline в «Модель Roofline» раскрывает это различие подробно, что делает его необходимым для обоснованных решений о разрешении.
Для моделей, в которых доминируют свертки и которые ограничены вычислениями, «Пропускная способность при разрешении» дает приближение первого порядка, в котором пропускная способность обратно пропорциональна квадрату разрешения:
Удвоение разрешения с 224 до 448 дает оценку масштабирования вычислений в 4 раза; иллюстративный сценарий дает замедление в 3,6 раза с учетом фиксированных накладных расходов. Более высокое разрешение может повышать арифметическую интенсивность сверток, потому что веса переиспользуются на большем числе пространственных позиций, но то, станет ли вся модель ограниченной вычислениями, зависит от байтов, которые переносят ее ядра.
«Разрешение и модельная арифметическая интенсивность» показывает, как рост разрешения амортизирует фиксированный трафик весов в этой упрощенной модели и при этом оставляет нерешенным вопрос об узком месте исполняемого ядра.
| Разрешение | Предполагаемый член активаций | Модельная арифм. интенсивность | Классификация узкого места |
|---|---|---|---|
| 12,5 МБ | 64,4 FLOP/байт | Не установлено | |
| 36,7 МБ | 137 FLOP/байт | Не установлено | |
| 65,3 МБ | 183,9 FLOP/байт | Не установлено | |
| 102,0 МБ | 218,4 FLOP/байт | Не установлено |
Разрешение и модельная арифметическая интенсивность: эта оценка делит FLOP на байты весов плюс одно предполагаемое чтение и запись масштабированного члена активаций. Она не учитывает совокупный трафик промежуточных тензоров, кэша и рабочей памяти, поэтому пересечение точки перехода V100 не устанавливает узкое место исполняемого ядра.
Стратегии выбора разрешения в эксплуатации
Разные контексты развертывания задают различные требования к разрешению, которые определяются их доминирующими ограничениями. Мобильное приложение может принять более низкое разрешение (), когда задержка и время работы от батареи важнее небольшого выигрыша в точности. Некоторые задачи медицинской визуализации используют или выше, когда диагностические детали оправдывают дополнительные вычисления. Конвейер восприятия может использовать низкое разрешение на широком поле и кадрировать высокое разрешение для мелкозернистого распознавания. Публичный API, напротив, может приводить произвольные загрузки к фиксированному контракту или выбирать среди проверенных профилей разрешения. Адаптивное разрешение полезно только тогда, когда политика выбора и каждый выбранный профиль сохраняют требования к качеству задачи.
Адаптивное разрешение
Адаптивное разрешение позволяет производственным системам динамически выбирать разрешение в зависимости от содержимого. Один подход запускает легковесный классификатор на , чтобы определить тип содержимого, а затем выбирает подходящее для задачи разрешение: документы — , пейзажи — , лица — . В этом иллюстративном сценарии политика дает пропускную способность, выросшую в 1,4 раза, при сохранении 99,2 процента точности по сравнению с фиксированным высоким разрешением. Такой шаблон меняет стоимость предобработки на работу легковесного классификатора ради экономии на выводе основной модели.
Анализ задержки до сих пор был посвящен последовательной обработке: один запрос завершается, прежде чем начнется следующий. Этапы предобработки, вывода и постобработки используют разные аппаратные ресурсы. Это разделение создает возможность обрабатывать несколько запросов одновременно.
Загрузка аппаратуры и конвейеризация запросов
Оптимизация каждого этапа запроса в отдельности упускает важную возможность: этапы используют разные аппаратные ресурсы. Анализ бюджета задержки в «Бюджете задержки» показывает, что вывод модели — лишь один компонент жизненного цикла запроса. С точки зрения аппаратуры главная цель системы обслуживания — максимизировать коэффициент загрузки (duty cycle) ускорителя, то есть долю времени, в течение которой GPU выполняет полезные вычисления.
В последовательной системе обслуживания ускоритель простаивает во время сетевого ввода-вывода и предобработки на CPU. Системы обслуживания используют конвейеризацию запросов (request pipelining), чтобы совмещать эти этапы и обеспечивать GPU непрерывным потоком тензоров.
Совмещение ввода-вывода и вычислений
Две временные диаграммы в «Конвейеризации запросов» иллюстрируют эффект конвейеризации. В последовательном случае (A) каждый запрос должен завершить весь свой жизненный цикл (сеть предобработка на CPU вывод на GPU постобработка), прежде чем начнется следующий, а серые простои оставляют GPU неиспользуемым более 50 процентов времени. В конвейерном случае (B) эти разрывы исчезают.
Конвейеризация запросов: конвейеризация скрывает задержку, совмещая независимые операции на разных аппаратных ресурсах. В конвейерном исполнении (B) CPU обрабатывает данные следующего запроса, пока GPU выполняет вывод текущего. Это может повысить коэффициент загрузки ускорителя и пропускную способность без изменения модели.
Конвейеризация опирается на неблокирующие аппаратные очереди и асинхронные потоки исполнения. Вместо того чтобы блокироваться до завершения ядра GPU, поток CPU на хосте ставит в очередь потока ускорителя передачи памяти и запуски ядер и сразу начинает предобработку следующего входящего запроса. DMA-движок ускорителя и вычислительные ядра выполняют эти операции из очереди независимо, совмещая предобработку на хосте с выполнением на устройстве.
Системная метрика: коэффициент загрузки аппаратуры
Системная эффективность показывает, насколько полно система обслуживания насыщает свой узкий ресурс, обычно вычислительные ядра GPU или пропускную способность памяти. «Системная эффективность» определяет этот коэффициент загрузки аппаратуры.
Если запрос ResNet-50 занимает в сумме 10 мс (5 мс на GPU, 5 мс на CPU), последовательная система достигает лишь 50 процентов эффективности. Конвейеризация всего двух запросов приближает эффективность к 100 процентам (при условии, что CPU успевает за GPU). Если CPU слишком медленный, чтобы кормить GPU, система становится ограниченной CPU, и дальнейшая оптимизация модели не дает прироста пропускной способности. Это закон Амдала из раздела «Закон Амдала и закон Густафсона» приложения «Основы машины», примененный к обслуживанию: если предобработка занимает 50 процентов задержки, максимальное ускорение составляет 2 раза, как бы быстро ни работала модель. Аппаратная траектория делает этот потолок все жестче. Вычислительная производительность ускорителей (FLOP/s) растет гораздо быстрее, чем однопоточная производительность CPU в последовательных поколениях аппаратуры, поэтому часть вывода в конвейере сокращается, а часть предобработки, ограниченная CPU, не меняется. Система, которая была ограничена вычислениями на старом ускорителе, после обновления аппаратуры может стать ограниченной CPU. Причина не в том, что предобработка замедлилась, а в том, что модель стала намного быстрее, а CPU — нет.
Постобработка
Жизненный цикл запроса завершается постобработкой, которая преобразует сырые выходные тензоры ускорителя в структурированные ответы приложения. Этот этап проходит через физическую границу между ускорителем и CPU хоста. Поскольку клиентские приложения не могут напрямую использовать буферы памяти устройства, выходные тензоры должны пересечь межсоединение (обычно шину PCIe), чтобы попасть в память хоста. От того, как движок обслуживания делит вычисления по этой границе, зависит, завершается ли постобработка за микросекунды или останавливает весь конвейер обслуживания.
От логитов к предсказаниям
Модели классификации выдают ненормализованные логиты по пространству меток. Чтобы превратить эти числовые оценки в практические предсказания, нужны редукция, фильтрация и калибровка. Простейшая редукция — выбор argmax, который извлекает индекс наибольшего логита. Пороговая фильтрация отбрасывает предсказания ниже эмпирического порога уверенности и возвращает предсказания только тогда, когда модель достигает целевой точности. Когда приложениям нужны ранжированные альтернативы, извлечение top- выбирает наибольших оценок вместе с индексами их классов. Калибровка вероятностей масштабирует сырые оценки (например, через температурное масштабирование), чтобы оценки уверенности на выходе отражали эмпирическую точность.
Системная эффективность требует, чтобы операции редукции выполнялись непосредственно на ускорителе, а не на CPU хоста. Выполнение softmax, argmax или выбора top- в памяти устройства сокращает полезную нагрузку до пересечения шины PCIe. Например, в классификации ResNet-50 запуск top- на GPU сокращает передаваемую полезную нагрузку с 1 000 логитов float32 (4 000 байт) до пяти значений и пяти целочисленных индексов. Для классификации изображений ResNet-50 «Постобработка ResNet-50» прослеживает этот путь исполнения от тензорных операций на GPU до поиска меток на CPU и форматирования ответа.
Постобработка ResNet-50: нормализует сырые логиты в вероятности, извлекает предсказания top- и форматирует ответ API.
# Нормализуем сырые логиты в вероятности
# Вход: тензор logits формы (1, 1000), по одному баллу на каждый класс ImageNet
probs = torch.softmax(logits, dim=-1) # Нормализация к сумме 1 на GPU
# Извлекаем top-5 предсказаний для ответа с несколькими классами
# topk возвращает (значения, индексы), отсортированные по вероятности
top5_probs, top5_indices = probs.topk(5) # операция на GPU
top5_probs = top5_probs.squeeze(0).tolist()
top5_indices = top5_indices.squeeze(0).tolist()
# Сопоставляем индексы классов с читаемыми метками
# imagenet_labels: список из 1000 имен классов из соответствия synset
labels = [imagenet_labels[i] for i in top5_indices] # поиск на CPU
# Формируем ответ с предсказаниями и метаданными для контракта API
response = {
"predictions": [
{"label": label, "confidence": float(prob)}
for label, prob in zip(labels, top5_probs)
],
"model_version": "resnet50-v2.1", # отслеживание версии на стороне клиента
"inference_time_ms": 5.2, # наблюдаемость для мониторинга задержки
}
В «Постобработке ResNet-50» общее время постобработки составляет около 0,1 мс, что несущественно по сравнению с предобработкой и выводом. GPU выполняет нормализацию и редукцию top-5, поэтому последующий вызов .tolist() передает через PCIe лишь десятки байт. Однако .tolist() вынуждает синхронное копирование с устройства на хост, блокируя поток хоста до завершения потока GPU. В конвейерных серверах высокой пропускной способности такие барьеры синхронизации нужно планировать аккуратно, чтобы не останавливать поток CPU, пока тот подает следующие запросы. Подгонка калибровочного отображения — офлайн-задача. Применение простого подобранного отображения онлайн обычно недорого, но оно ценно только тогда, когда последующие решения требуют оценок уверенности, эмпирический смысл которых проверен.
Форматирование выхода
Производственные системы упаковывают предсказания так, чтобы они соответствовали контрактам API на уровне приложения. Эти контракты задают схемы сериализации JSON, форматирование чисел с плавающей точкой, коды ошибок и значения по умолчанию, когда пороговая фильтрация отклоняет всех кандидатов. В средах выполнения на Python повторяющаяся сериализация JSON и выделение строк могут расходовать неожиданно много тактов CPU хоста при высокой конкурентности, превращая шаг форматирования микросекундного масштаба в узкое место CPU. Серверы высокой пропускной способности решают это, делегируя сериализацию нативным средам выполнения на C++ или двоичным протоколам, таким как Protocol Buffers. Метаданные ответа, включая версию модели и время выполнения вывода, дополняют полезную нагрузку и позволяют вести последующий мониторинг.
Трассировка изолированного запроса показывает собственное время выполнения каждой фазы конвейера. В производстве, однако, несколько запросов приходят одновременно и конкурируют за общие ускорители, ядра CPU и шины памяти, а очереди вносят задержки, которые многократно превышают время самих вычислений.
Теория очередей
Когда потоки поступления колеблются, теория очередей формализует, как конкуренция за общие физические ресурсы (очереди выполнения на ускорителе, передачи PCIe от хоста к устройству и шины памяти) ухудшает распределения задержек. Ее законы объясняют, почему, казалось бы, хорошо обеспеченные сервисы вывода испытывают резкий нелинейный взрыв задержек по мере приближения загрузки к пределу мощности.
Закон Литтла
Планирование мощности начинается с фундаментального вопроса о размере: при ожидаемой интенсивности поступления и измеренном среднем времени отклика сколько одновременных запросов находится в системе в любой момент? Ответ определяет, сколько памяти нужно зарезервировать под буферы запросов и состояния активаций, прежде чем решать, сколько ускорителей выделить. Закон Литтла (раздел «Закон Литтла» приложения «Основы машины») решает этот вопрос конкурентности, связывая среднюю популяцию в системе с пропускной способностью, а модели очередей предсказывают, как время отклика ухудшается по мере приближения к насыщению. Вместе они дают количественную основу планирования мощности.
Обозначения: L и задержка
В теории очередей обозначает время отклика, или время в системе на запрос; только время ожидания в очереди — это . Здесь обозначает среднее число запросов в системе, — интенсивность поступления, а — загрузку обслуживания. Индексы отличают обозначения очередей от параметра чувствительности в уравнении деградации и не дают обозначению загрузки занимать голое . В последующих уравнениях бюджета задержки (таких как «Налог на батчинг» и «Задержка батчинга») описательные члены называют компоненты бюджета, например ожидание и вычисления. В анализе батчинга, который следует («Компромиссы задержки и пропускной способности при динамическом батчинге»), соответствует компоненту ожидания в очереди , а включает время вывода.
Сформулированный Джоном Д. К. Литтлом, закон Литтла9 устанавливает точное соотношение между тремя макроскопическими метриками в любой устойчивой системе очередей:
где — среднее число запросов, находящихся в системе, — интенсивность поступления (запросов в секунду), а — среднее время, которое каждый запрос проводит от поступления до завершения.
Важно, что закон Литтла выполняется независимо от распределения поступлений, распределения времени обслуживания или дисциплины планирования: требуется лишь, чтобы система была устойчивой и чтобы запросы не создавались и не уничтожались внутри нее. Для сервиса вывода, рассчитанного на 1 000 QPS при среднем времени отклика 50 мс, закон Литтла задает среднюю популяцию запросов в полете, которую должны выдерживать буферы памяти хоста и рабочие потоки.
Закон Литтла: расчет мощности
Задача: сколько запросов в среднем находится в системе при 1 000 QPS?
Расчет: закон Литтла дает , поэтому средняя популяция равна пропускной способности, умноженной на среднее время в системе (раздел «Закон Литтла» приложения «Основы машины» выводит закон).
Дано:
- Целевая пропускная способность : 1 000 QPS.
- Среднее время в системе : 50 мс (0,05 с).
Расчет: = 1 000 QPS 0,05 с = в среднем 50 одновременных запросов
Системный вывод: в среднем система держит 50 запросов в состоянии батча и очереди. Ограничение батча GPU в 32 само по себе не делает 1 000 QPS невозможным, поскольку запросы в очереди могут находиться в памяти хоста. Осуществимость определяют скорость обслуживания, поведение очереди и хвостовое распределение.
Поскольку «закон Литтла» связывает три переменные, ограничение любых двух определяет третью. Если сервис вывода в среднем тратит 10 мс на запрос и держит в среднем 50 одновременных запросов , устойчивая интенсивность поступления должна составлять запросов в секунду. И наоборот, если память хоста ограничивает конкурентность в среднем 10 запросами, а среднее время в системе остается 10 мс, система не может превысить пропускную способность в 1 000 запросов в секунду без сброса трафика.
Налог на батчинг: граница «задержка — пропускная способность»
Закон Литтла связывает глубину очереди с пропускной способностью, но не учитывает налог на батчинг: намеренную задержку, которую вводят ради максимальной загрузки аппаратуры.
При размере батча вывод нейронной сети жестко ограничен пропускной способностью памяти. Ускорители должны передать гигабайты весов модели из HBM в SRAM на кристалле, чтобы выполнить матрично-векторные умножения, и достигают лишь доли своей пиковой производительности в FLOP/s. Батчинг входов превращает эти операции в общее матричное умножение (GEMM), переиспользуя веса на разных входах и повышая арифметическую интенсивность. Однако для сбора запросов более ранние поступления приходится держать во входной очереди.
Когда сервер вывода использует батчинг фиксированного размера, запускаемый запросами, он вводит два различных источника задержки. Задержка формирования батча — это время, которое каждый запрос ждет, пока батч заполнится: первый запрос ждет дольше всех, последний — не ждет вовсе. Раздувание времени вывода — рост времени вывода , когда ускоритель обрабатывает образцов вместо одного. Получающийся фронт Парето «задержка — пропускная способность» задает рабочую область, в которой прирост пропускной способности требует платить налог задержкой ответа. При стационарных пуассоновских поступлениях «Налог на батчинг» приближает среднюю задержку на запрос для размера батча и интенсивности поступления :
«Налог на батчинг» формализует компромисс между пропускной способностью ускорителя и задержкой отдельного запроса. Рост повышает арифметическую интенсивность и амортизирует пропускную способность памяти на входы, но раздувает задержку в очереди на каждый запрос. Конкретно: при 500 QPS переход от батча 1 к батчу 32 увеличивает время ожидания с 0 мс до 31 мс, что дает общий штраф по задержке в 23 раза (с 2 мс до 46 мс). Выбор поэтому является экономической оптимизацией: операторы выбирают наибольший размер батча, который максимизирует пропускную способность запросов и эффективность аппаратуры, не нарушая SLO задержки .
Связь загрузки и задержки
Закон Литтла описывает среднюю загруженность системы в установившемся режиме, но не показывает, как ведет себя задержка, когда трафик приближается к емкости системы. Модель очереди M/M/1 количественно определяет запас, необходимый, чтобы предотвратить коллапс задержки (Harchol-Balter, 2013).10 Для системы с пуассоновскими поступлениями и экспоненциальным временем обслуживания «Время в системе M/M/1» дает среднее время в системе:
где — интенсивность поступления, — интенсивность обслуживания (запросов в секунду, которые сервер способен обработать), а — загрузка (доля времени, в течение которой сервер занят).
Поскольку знаменатель содержит , задержка растет нелинейно по мере приближения загрузки к единице.11 Небольшой прирост трафика вблизи насыщения вызывает сильное обратное давление и задержки в очередях.
Стандартная формулировка M/M/1 предполагает экспоненциально распределенное время обслуживания. Для скомпилированных нейронных сетей, обрабатывающих батчи фиксированного размера и статические размерности тензоров, время выполнения почти постоянно, и очередь M/D/1 лучше описывает среднюю задержку в очереди. Здесь модель M/M/1 сохраняется, потому что дает решения в замкнутой форме и обеспечивает консервативный запас безопасности. В производственных условиях переменная длина входа, динамическое формирование батчей, предобработка на CPU и поиск в KV-кэше вносят вариативность времени выполнения, которая быстро нарушает детерминированные предположения.12
«Связь загрузки и задержки» количественно описывает эту связь и показывает, как среднее время в системе быстро умножается по мере приближения загрузки к 100 процентам.
| Загрузка | Кратность задержки | Пример (время обслуживания 5 мс) |
|---|---|---|
| 50% | 2× | 10 мс |
| 70% | 3,3× | 17 мс |
| 80% | 5× | 25 мс |
| 90% | 10× | 50 мс |
| 95% | 20× | 100 мс |
Связь загрузки и задержки: среднее время в системе (ожидание плюс обслуживание) как кратность времени обслуживания для очереди M/M/1. При загрузке 50 процентов время в системе вдвое превышает время обслуживания, при 90 процентах — в 10 раз. Этот нелинейный рост объясняет, почему системы, хорошо работающие при умеренной нагрузке, внезапно нарушают SLO при росте трафика: переход с 80 до 90 процентов загрузки удваивает задержку.
Многосерверные соображения
Один узел обслуживания — базовый строительный блок инфраструктуры вывода. Динамика очереди на одном узле определяет насыщение ресурсов и задает базовые характеристики производительности, которые сохраняются при горизонтальной репликации по кластеру.
Оценка изолированного узла в предположениях M/M/1 задает запас, необходимый перед масштабированием, и проверяет, может ли один ускоритель выдержать пиковый трафик без нарушения целевых уровней обслуживания. Производственное профилирование должно проверить, происходят ли реальные узкие места из-за насыщения вычислений, порогов динамического батчинга, предобработки на хосте или задержек выделения памяти.
Когда трафик превышает возможности одного узла, архитектура масштабируется горизонтально: несколько независимых узлов обслуживания стоят за балансировщиком нагрузки, и каждый содержит полный одинаковый экземпляр модели. Модель M/M/c расширяет анализ одного сервера на параллельных рабочих потоков и показывает, как объединенная мощность поглощает всплески поступлений, когда запросы равномерно распределены. Улучшения хвостовой задержки на практике сильно зависят от алгоритмов диспетчеризации, дисперсии времени обслуживания для разнородных входов и запасов загрузки на каждой реплике. Важно, что горизонтальная репликация архитектурно отличается от параллелизма моделей (шардирования тензоров или конвейера): репликация дублирует модель на независимых узлах, чтобы конкурентно обслуживать разные запросы без синхронизации между устройствами, тогда как параллелизм моделей разбивает одну модель между несколькими ускорителями, связанными высокоскоростными межсоединениями (например, NVLink), чтобы совместно выполнить один запрос.
Хвостовая задержка
Производственные SLO обычно задают целевые перцентили (p95, p99), а не средние значения, потому что хвостовая задержка определяет пользовательский опыт для самых медленных запросов (Dean and Barroso, 2013). Для очереди M/M/1 задержка p99 выражается так:
Средняя задержка скрывает хвостовую конкуренцию: при загрузке 70 процентов средняя задержка составляет лишь 3,3 времени обслуживания, тогда как задержка p99 достигает 15,3 времени обслуживания . Для моделей с детерминированным обслуживанием, таких как M/D/1, хвостовые значения требуют численного расчета, а не простого универсального множителя. Суть для систем остается та же: оценка кластера обслуживания по средней задержке скрывает сильную деградацию хвоста.
Проблема хвоста при масштабе
Анализ Дина и Барросо (Dean and Barroso, 2013) показывает, почему хвостовая задержка становится критичной, когда системы масштабируются за пределы одной машины. Когда запрос ветвится на параллельных бэкендов (например, при запросе к ансамблю моделей, поиске по шардированным индексам эмбеддингов или распараллеливании этапов конвейера), общий пользовательский запрос завершается только тогда, когда завершается самая медленная подзадача. Если у каждой подзадачи вероятность уложиться в порог задержки составляет 99 процентов, вероятность того, что все бэкендов уложатся в , равна . При ветвлении в цель укладываются лишь запросов; при эта вероятность падает до , то есть почти две трети пользовательских запросов испытывают хвостовую задержку. Этот эффект «хвоста при масштабе» делает контроль дисперсии хвоста одного узла существенным для производительности всей системы.
Прежде чем изучать программные способы снижения задержки, такие как хеджирование, инженеры систем должны выделить достаточную мощность ускорителей, чтобы выполнять SLO хвостовой задержки при пиковой нагрузке. Применение модели хвостового времени отклика M/M/1 к развертыванию ResNet-50 делает процесс выделения мощности конкретным.
Планирование мощности ResNet-50
Рассмотрим проектирование системы обслуживания ResNet-50 с такими требованиями:
- Целевая задержка p99: 50 мс
- Ожидаемый пиковый трафик: 5 000 QPS
- Время обслуживания (TensorRT FP16): 5 мс
Шаг 1: найти безопасную загрузку. Из «p99-задержки» следует 4,6 время обслуживания / . Требование мс при времени обслуживания 5 мс дает (максимальная загрузка 54 процента). Здесь используется консервативная граница p99 M/M/1 из показанного уравнения, а не корректировка среднего ожидания M/D/1, применяемая к SLO хвостовой задержки.
Шаг 2: рассчитать требуемую интенсивность обслуживания.
Шаг 3: определить число GPU. В этой модели M/M/1 интенсивность одного GPU составляет 200 запр./с.
Нужно GPU = 9 259,3 запр./с / 200 запр./с = 46,3 → 47 GPU
Шаг 4: добавить запас на дисперсию. Этот сценарий добавляет 30 процентов запаса на всплески трафика и дисперсию: итоговое число = 47 × 1,3 = 61,1, округлено вверх до 62.
Шаг 5: проверить отказоустойчивость. Запас в 30 процентов учитывает дисперсию трафика, но производственным системам нужна и отказоустойчивость. При 62 GPU потеря одного оставляет 61 GPU для обработки 5 000 QPS. Загрузка после отказа равна 5 000 QPS / (200 запр./с × 61) = 41,0%.
Это заметно ниже безопасного порога загрузки в 54 процента, что подтверждает выполнение резервирования N+1. При более строгих требованиях к отказоустойчивости резервирование N+2 (переносящее два одновременных отказа) потребовало бы 49 GPU при том же безопасном пороге загрузки или около 64 GPU, если запас 30 процентов должен сохраниться после двух одновременных отказов.
Результат: выделить 62 GPU V100 для обслуживания 5 000 QPS при задержке p99 в 50 мс с отказоустойчивостью N+1.
Анализ очередей объясняет подход к планированию мощности, подробно описанный в «Планировании мощности», и напрямую связан со сценарием MLPerf Server. «Сценарии выполнения MLPerf» объясняет, что результат MLPerf Server действителен, только если прогон удовлетворяет ограничению по перцентильной задержке; в противном случае целевой QPS нужно снизить и прогон повторить.
Методы, устойчивые к хвостовой задержке
Устранить все источники вариативности задержки часто непрактично. Вместо этого производственные системы применяют методы, которые терпят вариативность и при этом выполняют SLO (Dean and Barroso, 2013; Dean, 2012). Полезная организация — по режимам отказа: отстающей реплике нужна гонка, ветвлению — раннее обнаружение, перегрузке — контроль допуска или мягкая деградация, а лавине повторов — скоординированный сброс нагрузки.
Для отстающей реплики система может устроить гонку с медленным путем. При хеджировании, если запрос не завершился за ожидаемое время, система отправляет дубликат запроса на другой сервер.13 Клиент использует тот ответ, который пришел первым, а второй отменяет. Для обслуживания ML это означает поддержку нескольких реплик модели и маршрутизацию медленных запросов на альтернативные реплики. При устойчивом распределении задержки порог, заданный на исторический 95-й перцентиль, запускает дубликаты примерно для 5 процентов запросов; коррелированные замедления могут повысить эту долю и сделать хеджирование источником усиления перегрузки вместо снижения хвоста.
Обычные уже запущенные ядра вывода нельзя дешево прервать на середине выполнения. Когда хеджированный запрос завершается, дубликат нужно отменить, но если вывод на GPU уже начался, варианты отмены включают проверку флага отмены перед запуском вывода, принятие потерянных вычислений для уже запущенного ядра или приоритизацию запросов, которая понижает приоритет дубликата. Поскольку хеджирование обычно применяется лишь к малой хвостовой доле запросов, накладные расходы от редких потерянных вычислений остаются управляемыми, когда порог срабатывания настроен консервативно.
Связанные запросы (tied requests) делают ту же гонку агрессивнее: запрос ставится сразу в несколько очередей серверов с координацией, которая отменяет остальные копии, как только один сервер начинает обработку. Это позволяет не ждать обнаружения медленного ответа перед хеджированием и может сократить задержку в очереди, когда доступно несколько готовых реплик. Но это создает дубликаты в очередях, поэтому механизм координации должен отменять проигравшие копии до того, как они займут дефицитное время ускорителя.
Системам с ветвлением нужна другая точка вмешательства, потому что один медленный бэкенд может остановить весь распределенный запрос. Канареечные запросы сначала отправляют запрос на небольшое подмножество из одного-двух серверов.14 Если они возвращаются в ожидаемый срок, система отправляет запрос остальным. Если канареечный запрос медлит, система может повторить его в другом месте или использовать кэшированные результаты, прежде чем запускать полное ветвление. Этот прием превращает потенциальную проблему усиления хвостовой задержки в сигнал раннего предупреждения.
Когда проблема в перегрузке кластера, а не в одном отстающем узле, гонка между бэкендами только усугубляет глубину очереди, добавляя дублирующую работу. Система должна вместо этого защищать задержку принятых запросов через мягкую деградацию или контроль допуска. Мягкая деградация (graceful degradation) возвращает результаты меньшей точности, чтобы сохранить пропускную способность: конвейеры классификации переходят на кэшированные приближения, генеративные модели обрезают длину декодирования, а ансамбли моделей вычисляют только часть своих членов. Динамическое сокращение активных членов ансамбля уменьшает время обслуживания (), что повышает интенсивность обслуживания и снижает загрузку обратно ниже точки излома очереди («Взрывной рост хвостовой задержки»). Это обменивает контролируемое снижение точности на сохранение SLO вместо неконтролируемого коллапса задержки. Контроль допуска (admission control) задает еще более жесткую границу: когда входная очередь превышает заданный порог, сервер немедленно отклоняет лишние запросы с кодом HTTP 503, а не принимает работу, которая обречена нарушить крайний срок задержки.
Порог отказа нужно настраивать, балансируя занятость ускорителя и задержку в очереди. Практическая отправная эвристика — ограничить глубину очереди двумя-тремя квантами обслуживания на рабочий поток (для четырех рабочих потоков — лимит входной очереди 8–12 запросов). Адаптивный контроль допуска ужесточает этот лимит, когда наблюдаемая задержка p99 приближается к SLO, и расширяет его, когда запас позволяет. Скомпилированный вывод фиксированной формы дает относительно узкие распределения времени обслуживания, но переменная длина входа, динамическое формирование батчей и конкуренция за общую шину памяти вносят дисперсию, которая требует непрерывной эмпирической калибровки, а не жестких статических пределов.
Каскадный отказ возникает, когда все реплики одновременно испытывают перегрузку. Если верхние балансировщики нагрузки повторяют отклоненные запросы на других репликах, которые тоже перегружены, трафик повторов усиливает перегрузку. Скоординированный сброс нагрузки решает это, разделяя информацию о загрузке между репликами и позволяя принимать системные решения о том, какие запросы принимать. Когда глобальная нагрузка превышает емкость, реплики совместно отклоняют одну и ту же долю запросов, а не отклоняют их независимо и не вызывают повторы.
Эти методы становятся необходимыми в масштабе, когда усиление ветвлением делает задержку отдельного сервера видимой для пользователей. Однокомпьютерные системы обслуживания могут реализовать хеджированные и связанные запросы между потоками GPU или репликами модели. Хотя этот анализ очередей предполагает обработку «первым пришел — первым обслужен» (FIFO), производственные фреймворки обслуживания часто реализуют дисциплины приоритетов, такие как кратчайшая задача первой (shortest-job-first) или планирование с учетом дедлайнов, чтобы смягчить хвостовую задержку для разнородных распределений запросов (Harchol-Balter, 2013).
Очереди и запас до SLO
SLO задержки обеспечиваются не одним только быстрым выводом, а запасом.
- Закон Литтла: можете ли вы использовать , чтобы объяснить, почему рост глубины очереди означает рост задержки, даже если время вычислений на запрос не меняется?
- Обрыв загрузки: можете ли вы объяснить, почему задержка растет нелинейно при приближении загрузки к единице и почему производственные системы ориентируются на консервативную , а не на «100 процентов занятости»?
- Ожидание и вычисления: при заданном сквозном бюджете задержки можете ли вы отделить от и объяснить, какое из них в первую очередь предсказывает теория очередей?
- Планирование мощности: можете ли вы объяснить, почему цифра пропускной способности «настоящая» только тогда, когда запросы под нагрузкой еще укладываются в перцентильный SLO задержки?
- Оценка запаса: чтобы удержать p99 ниже 50 мс при 2 000 запросах в секунду, оцените, какую среднюю популяцию запросов в полете это подразумевает, и как быстро сокращается этот запас, когда превышает 0,7.
Политики очередей и устойчивости к хвосту управляют установившейся обработкой запросов. Однако они предполагают, что экземпляры обслуживания уже инициализированы, а входящие данные соответствуют предположениям офлайн-обучения. Эти предпосылки часто нарушаются при холодных стартах, скачках автомасштабирования и тихой порче признаков.
Управление жизненным циклом модели
Оптимизации установившейся очереди мало что дают, когда кластер обслуживания не инициализируется должным образом или выдает искаженные предсказания. В типичном развертывании только что выделенная реплика простаивает 35 секунд, компилируя движок TensorRT, а тонкое расхождение предобработки между PIL и OpenCV незаметно съедает пять процентных пунктов точности классификации. Чтобы устранять эти сбои жизненного цикла, нужен систематический контроль по двум операционным фазам: паритет обучения и обслуживания и инициализация при холодном старте.
Перекос обучения и обслуживания
Модель, которая хорошо показала себя на валидации, может незаметно деградировать после развертывания. Это явление, известное как перекос обучения и обслуживания (training-serving skew), представляет один из самых тонких режимов отказа в производственном ML, поскольку его не видно ни в мониторинге задержки, ни в трекинге исключений (Sculley et al., 2015; Baylor et al., 2017).
Перекос обучения и обслуживания
Перекос обучения и обслуживания — это расхождение распределений между средами обучения и вывода, которое вызвано несогласованной логикой или состоянием.
- Значение: он нарушает требование согласованности и может приводить к незаметной деградации точности, когда функции преобразования различаются .
- Отличие: в отличие от дрейфа данных, который представляет собой внешний сдвиг среды, перекос обучения и обслуживания — внутренний сбой инженерного стека.
- Типичная ошибка: распространенное заблуждение состоит в том, что перекос «находят», высматривая ошибки. На самом деле он невидим для исключений: система работает безупречно, задержка низкая, но предсказания статистически неверны.
Раздел «Хранилища признаков» главы «MLOps» разбирает диагностику перекоса, мониторинг и организационную профилактику. Его специфическое для обслуживания проявление — расхождение предобработки: конвейер вывода в реальном времени обрабатывает сырые данные иначе, чем пакетный конвейер обучения, что является типичным режимом отказа, когда обучение ведется на Python/Pandas, а обслуживание — на C++/Java или оптимизированных серверах вывода. В отличие от дрейфа данных, это расхождение вносится внутренне и часто предотвратимо через общие преобразования, тесты паритета и аккуратную инженерию.
ResNet-50: перекос предобработки изображений
Сценарий: сервисы обслуживания моделей компьютерного зрения ResNet-50 испытывают незаметную деградацию точности предсказаний между офлайн-обучением и онлайн-конвейерами обслуживания.
Диагностика: конвейер обслуживания реализовывал предобработку на C++/OpenCV (
cv2.INTER_LINEAR, порядок BGR), тогда как обучение использовало Python/PIL (PIL.BILINEAR, порядок RGB, другие константы нормализации).Системный урок: расхождение предобработки вызывает незаметный перекос обучения и обслуживания без исключений во время выполнения. Стандартизация конвейеров преобразования данных в средах обучения и обслуживания предотвращает порчу распределения входов.
Холодный старт и динамика инициализации
Даже при гарантированном математическом паритете между конвейерами обучения и обслуживания только что выделенный экземпляр обслуживания не может обрабатывать запросы, пока его состояние не будет развернуто в иерархии памяти аппаратуры (Romero et al., 2021). Эта задержка инициализации, известная как холодный старт, определяет отзывчивость системы при развертываниях, событиях автомасштабирования и восстановлении после отказов.
Холодный старт
Холодный старт — это задержка инициализации, которая возникает при создании новой реплики модели.
- Значение: он представляет фиксированную стоимость наполнения состоянием (загрузки весов, компиляции графов), которая может занимать секунды или минуты и фактически блокирует способность системы эластично масштабироваться в ответ на всплески трафика.
- Отличие: в отличие от задержки вывода , которая является стоимостью одного запроса, холодный старт — стоимость инициализации, которая платится при создании реплики или экземпляра модели, включая развертывание, масштабирование, восстановление и загрузку модели по требованию.
- Типичная ошибка: распространенное заблуждение состоит в том, что холодный старт — это «просто загрузка весов». На самом деле он включает компиляцию графа и выделение памяти, которые часто занимают больше времени, чем сама передача данных, ограниченная пропускной способностью .
Полная задержка холодного старта складывается из разных физических операций вдоль критического пути инициализации. Сначала загрузка весов передает сериализованные параметры из постоянного хранилища через сеть или подсистему ввода-вывода хоста в память хоста и, наконец, по шине PCIe в HBM GPU. Компиляция графа преобразует вычислительный граф фреймворка в машинный код, специфичный для устройства, выполняя слияние операторов и автонастройку ядер матричного умножения под архитектуру конкретного ускорителя. Выделение памяти резервирует арены памяти устройства для буферов активаций и промежуточных данных. Наконец, выполнение прогрева15 выдает синтетические выводы, чтобы заполнить кэши ядер, подготовить аллокаторы памяти фреймворка и принудительно выполнить отложенную инициализацию до прихода живого трафика.
Создание контекста CUDA16 составляет первую фиксированную стоимость на временной шкале инициализации устройства. Прежде чем запускать ядро GPU или выделять память устройства, среда выполнения должна создать контекст на уровне драйвера: внутреннюю управляющую структуру, которая управляет виртуальными адресными пространствами, загруженными бинарными файлами ядер и очередями аппаратных событий. Создание контекста требует синхронного обмена с драйвером режима ядра и выделяет десятки-сотни мегабайт памяти устройства под служебные данные. Диапазон 0,3–0,5 с в «Временной шкале холодного старта ResNet-50» отражает типичную среду центра обработки данных. Ленивая загрузка CUDA откладывает загрузку модулей ядер, чтобы сократить эту первую паузу, но лишь переносит штраф задержки на первый выполненный вывод (NVIDIA, 2026a).
В многопроцессных развертываниях обслуживания, где несколько рабочих процессов делят один ускоритель, копирование отдельных контекстов CUDA тратит и емкость памяти, и время инициализации. Служба CUDA Multi-Process Service (MPS)17 устраняет эту избыточность, направляя клиентские процессы через общий управляющий демон, который объединяет их операции в один аппаратный контекст. Это позволяет ядрам из разных процессов выполняться одновременно на потоковых мультипроцессорах без накладных расходов на переключение контекста при разделении времени (NVIDIA, 2026d). Системный компромисс — снижение изоляции отказов: поскольку клиентские процессы разделяют адресные пространства внутри сервера MPS, необработанное фатальное исключение в одной реплике может обрушить общий сервер и завершить все совместно размещенные экземпляры.
ResNet-50: временная шкала холодного старта
«Временная шкала холодного старта ResNet-50» показывает длительность каждой фазы холодного старта ResNet-50:
Фаза Длительность Примечания Загрузка весов (SSD) 0,5 с 98 МБ весов FP32 из локального хранилища Загрузка весов (S3) 3–5 с Сетевая задержка доминирует для облачного хранилища Контекст CUDA 0,3–0,5 с Инициализация драйвера GPU и настройка памяти Компиляция TensorRT 15–30 с Преобразует модель PyTorch в оптимизированный движок Прогрев (10 выводов) 0,2 с Запускает оставшуюся ленивую инициализацию Накладные расходы среды 0,4 с Запуск процесса, перехватчики фреймворка и настройка среды Итого (локально, оптимизировано) ~1,5 с С предкомпилированным движком TensorRT, прогретый контейнер Итого (облако, первое развертывание) ~35 с Включая компиляцию из холодного состояния Временная шкала холодного старта ResNet-50: иллюстративные длительности фаз загрузки весов, создания контекста CUDA, компиляции TensorRT и прогрева, с итогами для оптимизированного локального случая и случая первого развертывания в облаке. Видно, где находится доминирующая стоимость.
Системный вывод: предкомпиляция моделей и хранение оптимизированного движка устраняют 30-секундную фазу компиляции при последующих развертываниях.
Без прогрева первый живой запрос принимает на себя отложенную компиляцию JIT, выделение памяти драйвером и накладные расходы на запуск ядер. Запрос, у которого установившееся время выполнения составляет 5 мс, может простаивать 500 мс при неустраненном холодном старте и нарушать строгие SLO. Контроль этих накладных расходов инициализации требует систематического выбора между стратегиями загрузки из хранилища, памяти и среды выполнения.
Стратегии загрузки
Разные стратегии загрузки обменивают длительность холодного старта на производительность обслуживания и эффективность памяти. Самый простой подход, полная загрузка, читает всю модель в память до начала обслуживания. Это максимизирует скорость вывода, поскольку все веса сразу доступны, но удлиняет холодный старт и ограничивает размер модели доступной памятью. Подход уместен, когда задержка холодного старта допустима, а модели спокойно помещаются в память.
Отображение в память (memory mapping) предлагает альтернативу: файлы модели отображаются в адресное пространство процесса, а страницы подгружаются при обращении. Это может сократить лишнее копирование и уменьшить видимое время запуска, но плотная модель в конечном счете затрагивает почти все свои веса, поэтому отложенные страничные ошибки могут перенести задержку загрузки на первые запросы. Выгода больше для редко используемых компонентов или репозиториев моделей, которые загружают подмножества по требованию; сервисы с чувствительной к задержке обработкой все равно заранее подгружают или прогревают страницы, нужные на пути запроса.
Третья стратегия, ленивая инициализация, откладывает компиляцию и выделение памяти до первого использования. Это минимизирует время запуска, но переносит задержку на первый запрос. Производственные системы часто сочетают ленивую инициализацию с синтетическими прогревочными запросами, чтобы запустить инициализацию до прихода реального трафика.
Инфраструктура кэширования моделей
Производственные системы кэшируют веса моделей на уровне инфраструктуры, чтобы сократить холодный старт в типичных сценариях развертывания. Один подход, встраивание весов в образ контейнера, упаковывает веса модели прямо в образ контейнера. Это дает один артефакт развертывания и устраняет сетевую загрузку при запуске, но создает большие образы (часто 10–50 ГБ), которые замедляют загрузку контейнеров и занимают место в реестре. Подход лучше всего работает для моделей, которые редко обновляются.
Для организаций с множеством моделей и частыми обновлениями более гибкой альтернативой служит общая файловая система (EFS, GCS FUSE) с версионированными весами моделей. Несколько реплик могут читать одни и те же артефакты, не встраивая каждую версию в контейнер. Обновления все равно требуют явного атомарного переключения версии и выката, поскольку изменение файлов под работающими репликами подорвало бы воспроизводимость. Компромисс в том, что сетевая задержка влияет на холодный старт, а доступность файловой системы становится критической зависимостью.
Когда задержка холодного старта критична для высоконагруженных моделей, локальное кэширование на SSD узла заранее заполняет локальные SSD узлов вывода часто используемыми моделями. Такой подход обеспечивает быструю загрузку с накопителей NVMe (Non-Volatile Memory Express) со скоростью 500 МБ/с и выше без зависимости от сети, но требует управления кэшем для обработки обновлений моделей и ограничений емкости. Редкие обновления благоприятствуют встраиванию в контейнер, частые обновления — общим файловым системам, а развертывания, критичные к производительности, выигрывают от локального кэширования с фоновым обновлением.
Обслуживание нескольких моделей
Производственные системы часто обслуживают несколько моделей с одной машины: разные версии моделей для A/B-тестирования, компоненты ансамбля или совершенно разные модели, которые делят инфраструктуру. Память GPU становится лимитирующим ресурсом, и требуются аккуратные стратегии управления.
Три стратегии решают задачу управления памятью при нескольких моделях. Разделение во времени загружает одну модель за раз и переключает их в зависимости от маршрутизации запросов: такой подход прост, но вносит задержку переключения. Совместное использование памяти разделяет память GPU между моделями, ограничивая число одновременно выполняемых экземпляров, но позволяя держать в памяти больше моделей. Виртуализация моделей, как в фреймворках вроде Triton, отделяет жизненный цикл модели от кода приложения через репозиторий моделей и управляющие API для загрузки, выгрузки и версионирования моделей (NVIDIA, 2024b; NVIDIA, 2026b; NVIDIA, 2026c). Выбор зависит от шаблонов запросов: если модели получают трафик равномерно, подходит одновременная загрузка; если трафик всплесками и зависит от модели, разделение во времени с явной предзагрузкой снижает среднюю задержку и одновременно максимизирует загрузку GPU.
Выполнение в нескольких потоках
Когда на одном GPU должно одновременно работать несколько моделей или несколько экземпляров одной модели, аппаратура должна разделить ресурсы между ними. Технология NVIDIA Multi-Instance GPU18 обеспечивает аппаратную изоляцию, разделяя A100 на до семи независимых экземпляров GPU, каждый с выделенными памятью и вычислительными ресурсами (NVIDIA, 2026e). MIG доступен на A100, A30 (до четырех экземпляров), H100, H200 и новых дата-центровых GPU. Для более старых GPU, таких как V100 или T4, планирование потоков CUDA обеспечивает разделение во времени без аппаратной изоляции. Выбор зависит от того, что важнее: стабильная задержка с MIG или максимальная загрузка с общими потоками.
Подкачка моделей и память хоста
Когда совокупный размер всех моделей превышает емкость памяти GPU, система обслуживания должна подкачивать модели между оперативной памятью хоста (DRAM) и памятью устройства (VRAM) по требованию. Это вносит новую составляющую задержки, которую определяет пропускная способность шины PCIe.
Для модели объемом 10 ГБ по PCIe Gen4 x16 (теоретическая пропускная способность 32 ГБ/с) загрузка занимает не менее 312,5 мс до десериализации, настройки графа или прогрева. Как показывает рисунок ниже, эта сырая задержка передачи более чем в 6 раз превышает жесткие цели уровня обслуживания — например, крайний срок в 50 мс, — что делает подкачку моделей по требованию непригодной на интерактивном пути запроса.
Загрузка модели намного выходит за пределы жесткого SLO обслуживания.
Чтобы ускорить этот путь передачи, системы используют закрепленную память (pinned memory, page-locked оперативная память хоста). Движки DMA GPUDirect требуют, чтобы физические страницы памяти оставались на неизменных физических адресах на протяжении всей передачи. Стандартная память хоста, выделенная обычными аллокаторами кучи, является подкачиваемой (pageable): менеджер виртуальной памяти ОС может в любой момент переместить физические страницы или выгрузить их в резервное хранилище. Поэтому передача данных из подкачиваемого буфера заставляет драйвер CUDA выполнять двухэтапное копирование: CPU сначала синхронно копирует данные в промежуточный закрепленный буфер подготовки, а затем движок DMA передает этот буфер по PCIe в память GPU. Выделение весов модели непосредственно в закрепленной памяти хоста через cudaHostAlloc устраняет это копирование CPU, позволяя DMA-контроллеру GPU передавать веса по шине PCIe на полной пропускной способности канала. Физический компромисс — исчерпание памяти хоста: закрепленную память нельзя выгрузить или отобрать у ОС при нехватке памяти, и она навсегда закрепляет физическую оперативную память, которая недоступна другим процессам. Поэтому системы высокой пропускной способности закрепляют активные веса моделей и кольцевые буферы ввода-вывода, а резервные контрольные точки моделей оставляют в подкачиваемой памяти.
Когда модель загружена, прогрета и выдает предсказания, согласованные с обучением, следующим рычагом оптимизации становится группировка запросов. Динамический батчинг напрямую определяет баланс между эффективностью аппаратуры и хвостовой задержкой в формулировках теории очередей.
Оптимизация пропускной способности
Рассмотрим типичный классификатор ResNet-50 на GPU V100 при размере батча один. Каждый прямой проход загружает все параметры модели из HBM, чтобы обработать один вход. Это дает низкую арифметическую интенсивность, а накладные расходы на запуск ядер доминируют в выполнении. GPU достигает лишь 15 процентов загрузки аппаратуры и 200 изображений в секунду. Обработка 32 изображений сразу дает 95 процентов загрузки и 1 280 изображений в секунду, то есть рост пропускной способности в 6,4 раза на той же аппаратуре. Причина в том, что загруженные веса переиспользуются для входов в кэше на кристалле, амортизируя и потребности в пропускной способности памяти, и накладные расходы на запуск ядер. Батчинг19 — главный рычаг улучшения экономики обслуживания, но его операционные ограничения резко отличаются в обучении и в обслуживании (Crankshaw et al., 2017). Обучение-батчи максимизируют пропускную способность, объединяя сотни или тысячи образцов без ограничения задержки отдельного образца. Обслуживание-батчи должны балансировать насыщение ускорителя и крайние сроки отдельных запросов, не давая ни одному раннему входу слишком долго ждать формирования батча. Сервер вывода разрешает это противоречие через динамический батчинг: он подстраивает размер батча во время выполнения под поступающие запросы.
Динамический батчинг
Динамический батчинг — это оптимизация обслуживания ML, которая обменивает задержку на пропускную способность при стохастических шаблонах поступления.
- Значение: буферизуя запросы в окне батчинга, планировщик амортизирует фиксированные накладные расходы на несколько входов и переводит систему от режима, ограниченного памятью , к режиму, ограниченному вычислениями .
- Отличие: в отличие от батчей обслуживания фиксированного размера, динамический батчинг подстраивает фактический размер батча во время вывода под поступающий трафик, тайм-аут и ограничение максимального размера батча.
- Типичная ошибка: распространенное заблуждение состоит в том, что батчинг «всегда помогает». На самом деле существует граница Парето «задержка — пропускная способность»: если окно батчинга слишком велико, возросшая задержка в очереди может нарушить SLO системы раньше, чем будет получен выигрыш в пропускной способности.
Почему батчинг помогает
Современные ускорители достигают пиковой эффективности только при достаточных размерах батча (Shen et al., 2019). Один запрос вывода оставляет большую часть вычислительных блоков простаивать, поскольку GPU спроектированы для параллельного выполнения на тысячах потоков. Батчинг амортизирует фиксированные затраты на несколько запросов и обеспечивает параллельное выполнение по измерению батча.
При малых размерах батча доминируют два фиксированных расхода. Накладные расходы на запуск ядра20 — это время, которое CPU тратит на подготовку работы и отправку ее GPU. Каждый слой нейронной сети обычно требует отдельного запуска ядра: CPU должен собрать параметры ядра, скопировать их в память, доступную GPU, и подать GPU сигнал начать выполнение. Эти накладные расходы обычно составляют 5–20 мкс на ядро и не зависят от размера батча. У ResNet-50 около пятидесяти слоев, поэтому один только запуск ядер добавляет 250–1000 мкс на вывод. При батче 1 эти накладные расходы могут превышать фактическое время вычислений; при батче 32 те же накладные расходы амортизируются на тридцать два изображения. Загрузка весов читает параметры модели из памяти GPU (VRAM) в вычислительные блоки. При батче 1 GPU читает все веса, чтобы обработать одно изображение, что дает низкую арифметическую интенсивность и простой исполнительных блоков. При батче 32 то же чтение весов обрабатывает тридцать два изображения, и операционная интенсивность выше в 32 раза. Измерение эффективности батчинга на конкретной модели показывает, как эти фиксированные затраты амортизируются на практике.
Большие батчи повышают эффективность аппаратуры, но увеличивают задержку на запрос. На практике оптимальный размер батча зависит и от SLO задержки, и от интенсивности поступления запросов. Инженерный вопрос количественный: найти наибольший размер батча, который еще укладывается в заданный SLO задержки. В сценарии ResNet-50, количественно описанном в «Развертке батчинга ResNet-50», батч размером 8 с окном батчинга 5 мс имеет наихудшую пользовательскую задержку около 14 мс (5 мс ожидания плюс 9 мс вывода), что ниже бюджета SLO в 20 мс. Это дает пропускную способность обслуживания в 4,4 раза выше, чем обслуживание с батчем 1 на той же аппаратуре, при условии, что устойчивая нагрузка достаточна, чтобы заполнить окно батчинга. Построение этой зависимости в «Точке излома пропускной способности и задержки» показывает излом, после которого дополнительный батчинг перестает окупать свою задержку: пропускная способность уже выходит на плато, тогда как задержка начинает резко расти, поэтому батчинг за этой точкой обменивает скромный прирост емкости на задержку в очереди.
Точка излома пропускной способности и задержки: размер батча в сравнении с пропускной способностью (синяя) и задержкой (оранжевая). Пропускная способность растет с размером батча по мере улучшения загрузки аппаратуры, но в конце концов насыщается. Задержка остается относительно ровной до излома, после которого резко растет из-за очередей. Значения иллюстративны и зависят от модели и аппаратуры.
Излом на «Точке излома пропускной способности и задержки» отмечает точку, где синяя кривая пропускной способности начинает выходить на плато, как раз когда оранжевая кривая задержки начинает резкий подъем. Это иллюстративный излом, а не универсальный оптимум: выбранная рабочая точка зависит от SLO задержки, процесса поступления и цели по стоимости. Числа представительны, но не привязаны к одному бенчмарку.
Эффективность батчинга ResNet-50
«Развертка батчинга ResNet-50» иллюстрирует компромисс «пропускная способность — задержка» для сценария ResNet-50 на V100 при размерах батча от одного до тридцати двух. Размеры батча, измеренные времена вывода и загрузка GPU — исходные данные сценария; столбцы вычислений и пропускной способности на изображение выводятся из них.
Расчет: для строки с батчем 8 деление задержки батча на размер батча дает вычисления на изображение: 9,1 мс ÷ 8 изображений ≈ 1,1 мс на изображение. Деление размера батча на задержку батча дает пропускную способность: 8 изображений ÷ 9,1 мс ≈ 879 изобр./с. Эти два соотношения применимы к каждой производной строке.
Размер батча Время вывода Вычисления на изображение Пропускная способность Загрузка GPU 1 5 мс 5 мс 200 изобр./с 15% 4 7,2 мс 1,8 мс 556 изобр./с 42% 8 9,1 мс 1,1 мс 879 изобр./с 65% 16 14 мс 0,9 мс 1 143 изобр./с 85% 32 25 мс 0,8 мс 1 280 изобр./с 95% Развертка батчинга ResNet-50: иллюстративные вычисления на изображение, пропускная способность и загрузка GPU при размерах батча от одного до тридцати двух на V100. Пропускная способность вырастает в 6,4 раза от батча 1 до батча 32, а загрузка GPU поднимается с 15 процентов до 95 процентов, тогда как чистое время вывода растягивается с 5 мс до 25 мс.
Показанные времена — это чистое время вывода без ожидания в очереди. «Шаблоны трафика и стратегия батчинга» разбирает, как воспринимаемая пользователем задержка включает ожидание в окне батчинга.
Системный вывод: батч 32 дает в 6,4 раза большую пропускную способность, чем батч 1. Однако воспринимаемая пользователем задержка включает и ожидание в очереди, и время вывода. При окне батчинга 10 мс и выводе 25 мс общая задержка достигает 35 мс против 5 мс при батче 1.
Выигрыш эффективности от батчинга имеет цену: запросы должны ждать, пока батч сформируется. Буферизация создает прямое противоречие между оптимизацией пропускной способности (большие батчи) и минимизацией задержки (немедленная обработка). То, как системы обслуживания балансируют эти конкурирующие требования при колеблющемся трафике, определяет выбор стратегии батчинга.
Статический и динамический батчинг
Статический батчинг фиксирует размерность батча на этапе компиляции и удерживает выполнение, пока в очереди не накопится ровно запросов. В офлайн-пакетной обработке и обучении статические формы позволяют компиляторам выделять статические буферы памяти и выдавать оптимизированные вычислительные ядра, которые максимизируют переиспользование весов и арифметическую интенсивность. В интерактивном обслуживании клиентские запросы, однако, приходят стохастически. При низкой или колеблющейся интенсивности поступления статический батчинг подвергает запросы неограниченной задержке в очереди, пока батч не заполнится. И наоборот, установка малого фиксированного размера батча, чтобы сократить задержку, оставляет вычислительные блоки ускорителя недозагруженными и не позволяет амортизировать передачи весов из памяти высокой пропускной способности при всплесках трафика.
Динамический батчинг отделяет формирование батча от детерминированности поступлений: входящие запросы буферизуются за планировщиком с двойным триггером (Olston et al., 2017; NVIDIA, 2024b). Вместо бесконечного ожидания фиксированной формы тензора среда обслуживания отправляет батч ускорителю, как только выполнено одно из двух условий: очередь накопила максимальный размер батча или истекло окно тайм-аута относительно самого старого буферизованного запроса. При всплесках трафика очередь почти мгновенно заполняется до , что дает высокую арифметическую интенсивность при минимальной задержке в очереди. Когда интенсивность поступления падает, окно тайм-аута заставляет отправить недозаполненный батч (), ограничивая задержку в очереди ценой эффективности вычислений на запрос. Окно тайм-аута и максимальный размер батча образуют главные операционные рычаги: короткие окна ставят задержку выше эффективности ускорителя, тогда как большие окна максимизируют пропускную способность системы, когда объем запросов это позволяет.
Компромиссы задержки и пропускной способности при динамическом батчинге
Динамический батчинг вводит количественно измеримое противоречие между оптимизацией пропускной способности и ограничениями задержки. При перегрузке механизмом становится рост очереди, а не замедление вывода, что позволяет принимать систематические решения о конфигурации вместо настройки методом проб и ошибок.
Почему задержка растет под нагрузкой
Закон Литтла связывает долгосрочные средние только пока очередь устойчива («Закон Литтла»). По мере приближения интенсивности поступления к максимальной интенсивности обслуживания глубина устойчивой очереди и задержка быстро растут. Если превышает емкость на протяжении длительного интервала, конечного установившегося режима не существует: накопленная очередь растет, пока трафик не упадет, емкость не вырастет или работа не будет отклонена. Поэтому контроль допуска может сохранить задержку при перегрузке, а масштабирование или деградация обслуживания тоже помогают, когда они доступны.
«Задержка батчинга» раскладывает полную воспринимаемую пользователем задержку батчевого запроса на два компонента:
где — время ожидания в очереди батчинга (соответствует в общем бюджете задержки), а — время вывода для размера батча (включает и части и ). Окно батчинга ограничивает время ожидания (), а размер батча определяет время вычислений, амортизируя передачи весов из памяти и повышая арифметическую интенсивность на исполнительных блоках ускорителя.
Количественный анализ батчинга
Для фиксированных календарных окон при стационарных пуассоновских поступлениях моменты поступления запросов равномерно распределены внутри каждого окна. Запрос, пришедший в момент , ждет , пока окно закроется, поэтому «Среднее ожидание» дает среднее ожидание в половину окна:
Окно батчинга в 20 мс добавляет среднее ожидание 10 мс (до 20 мс для первого поступления в окне; более поздние поступления ждут меньше) независимо от достигнутого размера батча. При средней задержке SLO 50 мс и выводе 5 мс среднее ожидание расходует 20 процентов бюджета задержки еще до начала вычислений. Хвостовые SLO должны закладывать полное окно.
Распределение размера батча
Для фиксированных календарных окон число запросов, собранных за , следует распределению Пуассона со средним . «Распределение размера батча» формализует эту связь:
Здесь — неотрицательное целое число поступлений в окне.
«Вариативность размера батча» количественно описывает эту изменчивость и показывает, как размер батча колеблется при разных уровнях трафика с фиксированным окном 10 мс:
| Интенсивность поступления | Средний батч | Стандартное отклонение | ||
|---|---|---|---|---|
| 50 QPS | 0,5 | 0,7 | 61% | 39% |
| 200 QPS | 2 | 1,4 | 14% | 14% |
| 500 QPS | 5 | 2,2 | 0,7% | 3% |
| 1 000 QPS | 10 | 3,2 | 0,005% | 0,3% |
Вариативность размера батча: при низком трафике фиксированные окна часто содержат ноль запросов, поэтому батч GPU не запускается. При умеренном трафике размеры батчей заметно колеблются вокруг среднего. Высокий трафик дает более стабильный батчинг, а вероятность того, что батчи достигают как минимум двойного среднего размера, падает с ростом трафика (с 39 процентов при 50 QPS до 0,3 процента при 1 000 QPS), что отражает закон больших чисел.
Стратегия максимизации пропускной способности
Оптимизация пропускной способности требует отделить задержку отдельного запроса от насыщенной емкости обслуживания. Запрос ждет формирования батча, а затем платит время обслуживания сформированного батча. При устойчивой нагрузке, однако, формирование батча может перекрываться с выполнением предыдущего батча, поэтому емкость определяется временем обслуживания готового батча:
В «Пропускной способности батча» — предлагаемая интенсивность поступления, а — насыщенная емкость обслуживания для размера батча . Числитель растет линейно с размером батча, а время обслуживания часто растет сублинейно на полезном диапазоне, потому что более крупные батчи амортизируют фиксированные накладные расходы на запуск ядер и передачи весов из DRAM. Это смещает выполнение от матрично-векторных операций, ограниченных пропускной способностью памяти, к матрично-матричному умножению, ограниченному вычислениями. Окно батчинга по-прежнему входит в задержку запроса и в режимы низкого трафика, где ожидаемый размер батча ограничен поступлениями в течение окна, примерно .
Для ResNet-50 на GPU V100 время обслуживания приблизительно масштабируется как (фиксированные 5 мс накладных расходов плюс 0,6 мс на изображение в батче). Эта линейная аппроксимация передает главный тренд; фактические времена обслуживания могут немного отклоняться из-за эффектов иерархии памяти. При окне батчинга «Анализ пропускной способности батчинга» расширяет развертку чистого вывода из «Развертки батчинга ResNet-50»: задержка включает полную верхнюю границу ожидания в окне, тогда как насыщенная пропускная способность учитывает только время обслуживания:
| Размер батча | Время обслуживания | Полная задержка | Пропускная способность | Эффективность |
|---|---|---|---|---|
| 1 | 5,6 мс | 15,6 мс | 179 изобр./с | Низкая |
| 4 | 7,4 мс | 17,4 мс | 541 изобр./с | Умеренная |
| 8 | 9,8 мс | 19,8 мс | 816 изобр./с | Хорошая |
| 16 | 14,6 мс | 24,6 мс | 1 096 изобр./с | Высокая |
| 32 | 24,2 мс | 34,2 мс | 1 322 изобр./с | Максимальная |
Анализ пропускной способности батчинга: сценарный анализ пропускной способности ResNet-50 на V100 при окне батчинга 10 мс. Пропускная способность растет в 7,4 раза от батча 1 до 32 (с 179 изобр./с до 1 322 изобр./с), но полная задержка более чем удваивается (с 15,6 мс до 34,2 мс). Оптимальная конфигурация зависит от того, какое ограничение связывает систему: SLO задержки или целевая пропускная способность.
Выигрыши пропускной способности в «Анализе пропускной способности батчинга» напрямую восходят к члену с фиксированными накладными расходами в железном законе, установленном в «Железном законе производительности обучения»: батчинг амортизирует работу на несколько запросов.
Железный закон эффективности батчинга
Контекст: В обслуживании батчинг повышает пропускную способность, амортизируя фиксированную работу планирования и запуска ядер на батч. Он может также амортизировать трафик весов на несколько запросов, тогда как ожидание в очереди остается отдельной статьей задержки. Удерживая член перемещения данных вне этого иллюстративного сравнения двух членов, «Время вычислений» выделяет вычисления и фиксированные накладные расходы:
Анализ:
- Случай 1 (батч 1): накладные расходы (5 мс) вычисления (0,6 мс). Эффективность ≈ 10 процентов. GPU в основном ждет.
- Случай 2 (батч 32): накладные расходы (5 мс) вычисления (19,2 мс). Эффективность ≈ 79 процентов. GPU занят вычислениями.
Системный вывод: увеличивайте размер батча, пока фиксированные накладные расходы не станут пренебрежимо малыми (меньше 10 процентов общего времени) или пока SLO задержки не запретит дальнейшее ожидание. За этой точкой дополнительный батчинг дает минимальный прирост пропускной способности, но налагает линейный штраф за очередь.
Эти три результата складываются в одну рабочую модель динамического батчинга: окно задает среднее ожидание, равное половине его длины; пуассоновские поступления заставляют реализованный размер батча колебаться вокруг ; а насыщенная емкость обслуживания растет с размером батча, пока фиксированные накладные расходы не амортизированы. Ни одна из этих связей пока не обеспечивает соблюдение SLO задержки. Чтобы обеспечить это ограничение, нужно идти от жесткого бюджета перцентилей назад и найти наибольший батч, который окно может безопасно сформировать.
Оптимизация при ограничении задержки
Когда SLO задержки задает связывающее ограничение, оптимизационная задача сводится к поиску наибольшего размера батча, который выполняет SLO. Для целевой задержки и среднего времени ожидания «Максимальный размер батча» определяет наибольший допустимый размер батча с помощью приближения первого порядка для средней задержки:
В этом иллюстративном сценарии ResNet-50 с SLO задержки p95 в 50 мс сравнение консервативного окна батчинга с агрессивным показывает, как предполагаемые конфигурации обменивают время ожидания, бюджет вывода и насыщенную емкость. «Иллюстративный компромисс окон батчинга» ставит две конфигурации рядом.
| Показатель | Консервативное ( = 5 мс) | Агрессивное ( = 25 мс) |
|---|---|---|
| Среднее ожидание | 2,5 мс (максимальное ожидание = 5 мс для первого запроса в окне) | 12,5 мс |
| Бюджет задержки на вывод | 47,5 мс (планирование по средней задержке; хвостовые SLO должны закладывать полное окно) | 37,5 мс |
| Предел размера батча | 32 изображения | 48 |
| Предполагаемая насыщенная емкость | ~1 140 изобр./с | ~1 280 изобр./с |
Иллюстративный компромисс окон батчинга: как две предполагаемые конфигурации батчинга обменивают среднее ожидание, бюджет вывода, предел размера батча и насыщенную емкость.
Агрессивная конфигурация предполагает на 12,3 процента большую насыщенную емкость, но увеличивает среднее ожидание батчинга на 10 мс, а вклад максимального ожидания в окне — на 20 мс. Последнее не является оценкой p99 задержки.
Анализ нарушений SLO
Вариативность размера батча может вызывать нарушения SLO, даже когда средняя задержка выглядит безопасной. Запрос в фиксированном окне видит себя и остальные поступления, поэтому . Сочетание полного окна с p99 размера батча, который видит запрос, дает консервативную оценку в «Консервативной оценке задержки»:
При = 500 QPS и = 10 мс средний размер батча, который видит запрос, равен 6, а его p99 — 12. Средняя задержка составляет 13,6 мс; консервативная оценка — 22,2 мс.
Оценка в 1,63 раза превышает среднюю задержку. Это не p99 задержки запроса, поскольку полное ожидание в окне и p99 размера батча не обязаны приходиться на один и тот же запрос.
Компромисс «задержка — пропускная способность»
Единственная цифра «скорости вывода» не определена, пока не назван размер батча, потому что размер батча выбирает, в каком режиме и на каком узком месте работает система.
- Режим батча 1: ориентирован на задержку. Накладные расходы запуска или трафик памяти часто ограничивают путь запроса. Этот режим управляет интерактивными сценариями реального времени, например подсказками при вводе и робототехникой.
- Режим батча N: ориентирован на пропускную способность. Большие батчи амортизируют накладные расходы и трафик весов и могут сместить узкое место в сторону вычислений. Этот режим управляет офлайн-обработкой и сервисами с высоким трафиком.
Два режима оптимизируют противоположные величины, поэтому модель, которая «быстра» при батче 1, может быть далека от пиковой пропускной способности, и наоборот. Поэтому любая цифра задержки или пропускной способности должна указывать, измерена ли она при задержке одного потока (батч 1) или при максимальной пропускной способности (батч N).
Адаптивные окна батчинга
Та же зависимость от размера батча определяет, как система обслуживания вообще формирует свои батчи. Фиксированные окна батчинга расходуют бюджет задержки впустую при высоком трафике, когда большие батчи формируются быстро. «Адаптивное окно батчинга» показывает, как адаптивные стратегии подстраивают окно под глубину очереди.
В иллюстративном сценарии, где трафик колеблется между 200 и 1000 QPS, фиксированное окно 10 мс дает среднюю задержку 15 мс при 650 изобр./с, а адаптивная эвристика — 11 мс при 680 изобр./с. Взаимодействие размера окна и пределов батча создает пространство возможных конфигураций, каждая из которых представляет собой свой баланс пропускной способности и задержки.
Адаптивное окно батчинга: эвристически подстраивает тайм-аут батча в зависимости от глубины очереди, интенсивности поступления и оставшегося бюджета задержки.
def adaptive_batching_window(
queue_depth, arrival_rate, slo_ms, service_ms, fixed_overhead_ms
):
"""Вычисляет эвристическое окно батчинга.
Основано на текущем состоянии системы.
"""
target_batch_size = 16 # целевой размер батча, подобранный под развертывание
# Быстрый путь: батч готов, закрываем немедленно, чтобы минимизировать задержку
if queue_depth >= target_batch_size:
return 0
# Вычисляем максимально допустимое ожидание из оставшегося бюджета p99.
max_wait_ms = max(0, slo_ms - service_ms - fixed_overhead_ms)
# Оцениваем время накопления целевого батча при текущей
# интенсивности поступления.
# arrival_rate — число запросов в секунду, поэтому переводим
# секунды в миллисекунды.
if arrival_rate > 0:
requests_needed = target_batch_size - queue_depth
estimated_wait_ms = requests_needed / arrival_rate * 1000.0
# Возвращаем минимум из оценки ожидания и SLO-ограниченного максимума
return min(estimated_wait_ms, max_wait_ms)
return max_wait_ms # Низкий трафик: используем оставшийся бюджет для накопления батча
Недоминируемые конфигурации батчинга образуют фронт Парето, на котором рост пропускной способности требует принять более высокую задержку. В «Иллюстративном фронте Парето батчинга» показаны пять иллюстративных конфигураций:
| Окно (мс) | Макс. батч | Средняя задержка | Задержка p99 | Пропускная способность | Конфигурация |
|---|---|---|---|---|---|
| 2 | 16 | 8 мс | 18 мс | 890 изобр./с | Сверхнизкая задержка |
| 5 | 32 | 10 мс | 22 мс | 1 140 изобр./с | Сбалансированная |
| 10 | 32 | 15 мс | 35 мс | 1 240 изобр./с | Умеренная задержка |
| 20 | 64 | 23 мс | 52 мс | 1 310 изобр./с | Оптимизированная под пропускную способность |
| 50 | 128 | 38 мс | 98 мс | 1 350 изобр./с | Максимальная пропускная способность |
Иллюстративный фронт Парето батчинга: пять предполагаемых конфигураций обменивают хвостовую задержку на пропускную способность. От первой к последней предполагаемая пропускная способность растет на 52 процента, а предполагаемая задержка p99 увеличивается в 5,4 раза по сравнению с исходной.
Практические рекомендации по настройке
Фронт Парето из «Иллюстративного фронта Парето батчинга» показывает, почему настройка должна идти назад от бюджета задержки: за точкой излома расширение окна дает все меньший прирост пропускной способности при резко растущей хвостовой задержке. В разобранном сценарии резервирование 30 процентов SLO под ожидание в батчинге дает . Другая нагрузка может выделить иную долю после учета сети, предобработки, вывода и постобработки. Оценка трафика должна учитывать пики и длительность всплесков, а не полагаться только на среднее. Память GPU задает отдельный потолок размера батча через активации и рабочее пространство среды выполнения. Наконец, мониторинг реализованных распределений размера батча и времени ожидания показывает, выполняется ли предполагаемая модель поступлений и подходит ли фиксированное или адаптивное окно.
Для иллюстративной системы обслуживания ResNet-50 с SLO в 50 мс и трафиком 500 QPS расчет превращает допущения о SLO и интенсивности поступлений в два настраиваемых параметра: окно батчинга и максимальный размер батча. «Практическая конфигурация батчинга» резюмирует итоговую конфигурацию и смоделированную рабочую точку.
| Величина | Значение | Инженерная роль |
|---|---|---|
| Бюджет задержки на батчинг | 15 мс | Доля SLO, доступная для задержки в очереди. |
| Максимальное окно | 15 мс | Верхняя граница, которую задает бюджет задержки. |
| Ожидаемый батч, который видит запрос | 7 | Средний батч, который видит поступающий запрос. |
| p99 батча, который видит запрос | 13 | Хвостовой размер батча при пуассоновских поступлениях. |
| Предполагаемый батч, ограниченный памятью | 32 | Ограничение сценария для памяти ускорителя. |
| Выбранная конфигурация | = 12 мс, = 32 | Практическая настройка для развертывания. |
| Консервативная хвостовая оценка | 24,8 мс | Полное окно плюс время обслуживания батча p99, который видит запрос. |
| Иллюстративная насыщенная емкость | 1 176,9 изобр./с | Оценка с предполагаемым коэффициентом эффективности 0,89. |
| Обслуживаемая пропускная способность | 500 изобр./с | Нагрузка, ограниченная поступлениями, которую обрабатывает конфигурация. |
Практическая конфигурация батчинга: распределение 30 процентов задает максимальное окно 15 мс; этот иллюстративный сценарий выбирает окно 12 мс ниже этой границы и предполагает предел батча 32. Указанная задержка — консервативная оценка, а не p99 задержки запроса.
Непрерывный батчинг
Авторегрессионные модели, такие как большие языковые модели, генерируют выход токен за токеном. Поскольку каждый новый токен зависит от накопленной истории последовательности, генерация идет последовательно. Стандартный динамический батчинг предполагает одинаковую длину выхода и фиксирует батч на весь цикл генерации. Когда длины последовательностей различаются, такая статическая фиксация снижает эффективность ускорителя. Если одна последовательность из восьми в батче заканчивается после десяти токенов, а другие требуют 100 токенов, то 90 процентов вычислений и пропускной способности памяти, выделенных слоту этой последовательности, тратятся впустую на токены-заполнители или маскированные фиктивные операции, пока не закончится самая медленная последовательность (Yu et al., 2022).
Непрерывный батчинг21 (также называемый батчингом на уровне итераций) устраняет этот налог на простой слотов, пересматривая состав батча на каждой итерации декодирования (Yu et al., 2022; Kwon et al., 2023). Вместо фиксации статического батча, который сохраняется на протяжении сотен прямых проходов, движок обслуживания перепроверяет принадлежность к батчу на каждом шаге генерации токена. Когда последовательность выдает свой токен конца последовательности, планировщик немедленно освобождает этот слот исполнения и добавляет поступивший запрос в батч для следующего прямого прохода. Активные последовательности продолжают декодирование без прерывания, сохраняя высокую загрузку ускорителя при работе с нагрузкой переменной длины.
Серверные среды выполнения, такие как vLLM22 и TensorRT-LLM, повышают пропускную способность двумя механизмами: возвращают впустую потраченные вычисления от завершенных последовательностей и сокращают время ожидания в очереди для новых поступлений (Kwon et al., 2023; NVIDIA, 2026f). Однако динамическое принятие новых запросов создает системное столкновение между предзаполнением промпта и декодированием токенов. Вычислительно тяжелое предзаполнение промпта на сотнях токенов имеет высокую арифметическую интенсивность и монополизирует потоковые мультипроцессоры GPU на десятки миллисекунд. Декодирование же токенов ограничено пропускной способностью памяти и выполняется по одному токену за раз. Когда движок выполняет предзаполнение в той же итерации, что и активное декодирование, потоки декодирования останавливаются, вызывая сильные всплески межтокенной задержки (inter-token latency, ITL). Sarathi-Serve устраняет эту интерференцию через разбиение предзаполнения на части и батчинг без простоев (Agrawal et al., 2024). Разбивая длинные промпты на фрагменты фиксированного размера (например, по 512 токенов) и совместно планируя один фрагмент рядом с активными запросами декодирования на каждом шаге, планировщик ограничивает время выполнения итерации и сохраняет устойчивый темп генерации токенов.
Непрерывный батчинг смещает главное узкое место обслуживания в сторону управления памятью. Поскольку генерация трансформера добавляет состояния внимания на каждом шаге, KV-кэш каждого активного запроса динамически растет в HBM ускорителя. Когда последовательности разной длины делят память, непрерывное выделение порождает сильную внешнюю фрагментацию. Если завершенная последовательность из 100 токенов освобождает свой кэш, поступивший запрос на 150 токенов не может занять освобожденную память, потому что ему нужен больший непрерывный диапазон адресов. Со временем физическая память дробится на мелкие несвязные промежутки, и новые последовательности не могут стартовать, даже когда общая свободная емкость кажется достаточной. Эта фрагментация памяти может терять 40–50 процентов доступной памяти в наивных реализациях, сильно ограничивая одновременный размер батча, который определяет пропускную способность обслуживания.
PagedAttention
PagedAttention возвращает потери KV-кэша, которые возникают при непрерывном выделении.
PagedAttention,23 представленный в vLLM, снимает эту стену памяти, применяя к памяти ускорителя страничную организацию виртуальной памяти операционной системы (Kwon et al., 2023). При статическом непрерывном выделении резервирование памяти под максимальную длину последовательности заранее порождает внутренние потери, а освобожденные области могут быть слишком малы или расположены так, что не удовлетворяют новому непрерывному резерву. Вместо выделения одной непрерывной области на каждую последовательность PagedAttention делит KV-кэш на блоки фиксированного размера, которые отображаются через таблицу блоков. Поэтому кэш последовательности может занимать несмежные физические блоки. Когда последовательность завершается, ее блоки возвращаются в общий пул свободных блоков для повторного использования. Вместо того чтобы копировать несмежные блоки во временный непрерывный буфер перед вычислением внимания, специальное CUDA-ядро PagedAttention обходит таблицу блоков напрямую и подгружает несмежные блоки в SRAM на кристалле во время умножения «запрос — ключ». Устраняя фрагментацию выделения, PagedAttention снижает потери KV-кэша до менее чем 4 процентов и позволяет существенно повысить одновременность батча на той же аппаратуре ускорителя (Kwon et al., 2023).
PagedAttention возвращает физическую емкость памяти, но обслуживание авторегрессионных моделей в масштабе выявляет дополнительные узкие места: задержку проверки токенов и потоковую передачу весов, ограниченную пропускной способностью памяти.
Обслуживание LLM: за пределами основ
KV-кэш, который хранит контекст внимания, масштабируется с длиной последовательности и размером батча и часто превосходит по потреблению памяти сами веса модели. Такие методы, как спекулятивное декодирование, используют небольшие черновые модели, которые предлагают несколько токенов, а целевая модель проверяет их параллельно. В оцененных нагрузках T5-XXL ускорение составило примерно 2–3 раза (Leviathan et al., 2023), но выигрыш варьируется. Квантование только весов (например, веса INT4 с активациями FP16) особенно важно для вывода LLM, ограниченного пропускной способностью памяти (Lin et al., 2024).
Эти оптимизации LLM напрямую опираются на базовую механику обслуживания: модели очередей определяют тайм-ауты планирования, динамика батчинга задает кривые «пропускная способность — задержка», а пониженная точность ограничивает трафик памяти. Продвинутые разделы расширяют эту механику на совместное использование префиксов несколькими арендаторами во флоте и на многоузловое выполнение с тензорным параллелизмом.
Хотя непрерывный батчинг максимизирует пропускную способность при обслуживании языковых моделей для нескольких арендаторов, батчинг не является универсально оптимальным. Планировщики и динамические аллокаторы памяти вносят сложность координации и накладные расходы на синхронизацию, которые могут ухудшать производительность в средах, критичных к задержке, или при ограниченных ресурсах. В частности, три операционных ограничения делают предпочтительной обработку отдельных запросов. Во-первых, при сверхнизкой целевой задержке p99 даже короткая задержка на батчинг съедает недопустимую долю бюджета задержки. Во-вторых, если среды выполнения не поддерживают рваные тензоры или страничную память, батчинг входов переменной длины требует заполнения до длины самой длинной последовательности в батче, тогда как обработка отдельных запросов полностью устраняет потери на заполнение. Наконец, память становится ограничивающей, когда веса модели уже занимают большую часть физической памяти ускорителя: при почти полной загрузке одновременные активации батча и динамические выделения KV-кэша рискуют вызвать прерывания из-за нехватки памяти, что вынуждает среду выполнения обрабатывать запросы по одному.
Ограничения аффинности сессий
Аффинность сессий — маршрутизация последовательных запросов клиента на одну и ту же физическую реплику — возникает, когда состояние обслуживания находится в локальной памяти ускорителя, а не восстанавливается при каждом вызове. В диалоговых моделях это резидентное состояние определяется в основном KV-кэшем. Когда ход выполняется на реплике, высокоскоростная память этой реплики (HBM) сохраняет спроецированные ключи и значения для всех предыдущих токенов промпта и генерации. Маршрутизация хода на другую реплику отбрасывает этот локальный объем памяти и заставляет новый узел заново вычислять всю префиксную последовательность с нуля. Это избыточное предзаполнение расходует пропускную способность памяти и такты тензорных ядер, которые иначе продвигали бы активные итерации декодирования, и напрямую раздувает время до первого токена (time-to-first-token).
Параллельное физическое ограничение действует при персонализированном обслуживании с донастроенными модулями низкоранговой адаптации (LoRA). Пока веса базовой модели закреплены в HBM устройства, адаптеры отдельных пользователей должны динамически загружаться в память. Если входящие запросы одного пользователя разбросаны по нескольким репликам, каждый узел должен многократно передавать тензоры адаптеров по шине PCIe от хоста к устройству или получать их по сети, вытесняя другие активные рабочие наборы в памяти. Конвейеры предобработки с состоянием, такие как словари токенизатора и нормализация на уровне сессии, несут тот же штраф, требуя избыточных выделений памяти на CPU и перестроений кэшей каждый раз, когда выполнение переходит через границы узлов.
Строгая аффинность вступает в прямое противоречие с динамическим батчингом. Планировщики непрерывного батчинга максимизируют пропускную способность ускорителя, упаковывая одновременные запросы в объединенные матричные умножения и повышая операционную арифметическую интенсивность пропорционально размеру батча (). Когда запросы закреплены за определенными репликами, пул кандидатов для батчинга у планировщика фрагментируется по кластеру. Реплика, назначенная простаивающей или малоактивной пользовательской сессии, должна либо обрабатывать недозаполненные батчи, что снова сводит арифметическую интенсивность к режиму, ограниченному пропускной способностью памяти, либо ждать токенов, соответствующих аффинности. Чтобы предотвратить этот обвал загрузки, производственные маршрутизаторы используют мягкую аффинность. При мягкой аффинности входной шлюз отдает приоритет реплике, держащей кэш, когда емкость позволяет, но перенаправляет запросы на другие узлы, когда локальные задержки в очереди превышают физическую задержку, необходимую для передачи весов адаптера или пересчета префиксных токенов.
Шаблоны трафика и стратегия батчинга
Стратегия батчинга критически зависит от того, как поступают запросы. Разные контексты развертывания демонстрируют разные шаблоны поступления, а бенчмарк вывода MLPerf задает четыре стандартизированных сценария, которые приближают несколько распространенных случаев, как подробно объясняет «Сценарии выполнения MLPerf».
Серверный трафик (пуассоновские поступления)
Сценарий MLPerf Server моделирует трафик вывода, похожий на облачный и API-трафик, с пуассоновскими поступлениями (Reddi et al., 2019).24 В этой модели числа событий в непересекающихся интервалах независимы, а средняя интенсивность поступления постоянна. «Ожидаемый размер батча» выражает ожидаемое число событий в фиксированном календарном окне с интенсивностью и шириной :
Для фиксированных календарных окон дисперсия равна среднему, поэтому размеры батчей заметно колеблются при умеренном трафике. При запросов в секунду и мс ожидаемое число равно двум, но примерно 14 процентов окон не содержат запросов (и не запускают работу GPU), тогда как в других может оказаться четыре и более.
Полезная эвристика для окна батчинга уравновешивает стоимость ожидания и выигрыш пропускной способности. «Оптимальное окно» выражает одно такое правило:
где — задержка SLO, — время обслуживания (в секундах), а — интенсивность поступления (в запросах в секунду), что делает второй член размерно согласованным в секундах. Форма с квадратным корнем — локальная эвристика модели стоимости: она уравновешивает фиксированный выигрыш на батч и стоимость ожидания, которая растет с интервалом между поступлениями. Это не аналитический оптимум именно для обслуживания ML; производственные системы калибруют окно эмпирически по наблюдаемому трафику. Из «Оптимального окна» следует контринтуитивный результат: при росте трафика оптимальное окно уменьшается, тогда как достижимые размеры батчей по-прежнему растут. «Адаптивный к трафику батчинг» демонстрирует это явление на четырех уровнях трафика.
По мере роста QPS окно батчинга сокращается, а размер батча растет.
| Интенсивность поступления | Оптимальное окно | Средний размер батча | Примерная задержка |
|---|---|---|---|
| 100 QPS | 15,8 мс | 1,6 | 40,8 мс |
| 500 QPS | 7,1 мс | 3,5 | 32,1 мс |
| 1 000 QPS | 5 мс | 5 | 30 мс |
| 5 000 QPS | 2,24 мс | 11,2 | 27,2 мс |
Адаптивный к трафику батчинг: более высокий трафик допускает более короткие окна при одновременном получении более крупных средних батчей. Значения вычислены по «Оптимальному окну» при SLO 50 мс и допущении о времени обслуживания 25 мс, поэтому столбец задержки — приблизительный бюджет «обслуживание плюс окно», а не измеренный производственный p99.
Потоковый трафик (коррелированные поступления)
Автономные автомобили, видеоаналитика и робототехнические системы получают входы от нескольких синхронизированных сенсоров. Шестикамерный пример делает дедлайн синхронизации конкретным.
Обслуживание многокамерного автономного автомобиля
Сценарий: система машинного зрения автономного автомобиля обрабатывает видеопотоки с шести камер при жестком кадровом дедлайне реального времени 33 мс.
Диагностика: джиттер поступления сенсоров вызывает переменные задержки сборки многокамерного батча, что угрожает пропуском кадрового дедлайна. Бюджет синхронизации 12 мс и правила запасного варианта (повторное использование предыдущих кадров по тайм-ауту) ограничивают задержку.
Системный урок: синхронизированные потоки с несколькими сенсорами задают детерминированные дедлайны реального времени. Конвейеры обслуживания должны реализовывать явные политики тайм-аута синхронизации, чтобы джиттер сенсоров не нарушал бюджеты задержки.
Жесткие бюджеты задержки делают синхронизированную обработку многокамерных кадров трудной. «Временная шкала многокамерного кадра» показывает поэтапную временную шкалу одного синхронизированного набора кадров с шести камер, работающих на 30 кадрах в секунду в пределах кадрового дедлайна 33 мс. Захват сенсоров и джиттер сетевых поступлений съедают 15 мс до начала вывода. Пакетная обработка всех шести потоков камер в одном вызове GPU завершается за 10 мс (при мс), оставляя 7 мс на последующую постобработку, планирование и проверки безопасности. Если джиттер поступления сдвигает сборку батча за 15 мс, конвейер нарушает свой дедлайн реального времени.
| Время | Событие |
|---|---|
| мс | Камеры начинают захват кадра N |
| мс | Кадр камеры 1 поступает |
| мс | Кадры камер 2–5 поступают |
| мс | Кадр камеры 6 поступает (джиттер) |
| мс | Начинается пакетный вывод (6 изображений) |
| мс | Вывод завершен |
| мс | Результат готов для модуля планирования |
Временная шкала многокамерного кадра: поэтапная шкала одного синхронизированного набора кадров с шести камер при 30 кадрах в секунду. Кадры поступают в течение 7 мс, вывод не может начаться, пока не придет последний кадр в 15 мс, а результат доходит до модуля планирования в 32 мс, оставляя 1 мс запаса внутри дедлайна 33 мс.
Трафик одного пользователя (последовательные поступления)
Потоковый трафик коррелирует поступления через синхронизацию сенсоров, фиксируя размер батча и дедлайн извне. На противоположном конце спектра интерактивные мобильные и периферийные приложения обрабатывают один поток запросов за раз, и возможности батчить независимые запросы не возникает. Сценарий MLPerf SingleStream отражает эту последовательную форму обслуживания. Здесь цель оптимизации смещается с бюджета синхронизации под кадровым дедлайном на задержку отдельного запроса и потребление энергии при жестком тепловом ограничении. Для смартфонного конвейера машинного зрения, смоделированного ниже, главная инженерная цель — не формирование батча, а минимизация задержки по фазам и рассеиваемой энергии.
Ограничения мобильного обслуживания
Облачные сервисы часто делают акцент на стоимости флота и задержке; мобильное обслуживание добавляет три тесно связанных ограничения. Первое — энергетический бюджет, который пропускная способность сама по себе не отражает, поскольку каждый вывод расходует заряд батареи. В смоделированном конвейере 2,98 мДж при 22 кадрах в секунду дают около 66 мВт только на путь вывода, не считая камеры, дисплея, ISP и накладных расходов ОС, которые добавляются к этой сумме в полном фото-приложении. Тепловой троттлинг может усугублять это ограничение, когда устойчивая мощность системы достигает тепловой границы конкретного устройства. Ограничения памяти замыкают набор, поскольку модель делит оперативную память с приложением и операционной системой. Время перезагрузки зависит от хранилища устройства, среды выполнения и состояния модели; квантование и загрузка с отображением в память («Стратегии загрузки») могут сократить объем и работу при запуске, но не устраняют эти зависимости.
ResNet-50: мобильное обслуживание
«Мобильный конвейер ResNet-50» раскладывает задержку и энергию по фазам для одного мобильного вывода компьютерного зрения для одного пользователя:
Фаза Длительность Энергия Примечания Чтение буфера камеры 8 мс 0,08 мДж Системный API Декодирование JPEG (CPU) 15 мс 1,5 мДж Однопоточно Изменение размера и нормализация 5 мс 0,4 мДж Предобработка на CPU Вывод на NPU 12 мс 0,8 мДж Загрузка 82% Постобработка и интерфейс 5 мс 0,2 мДж Отрисовка результата Итого 45 мс 2,98 мДж устойчиво 22 FPS Мобильный конвейер ResNet-50: иллюстративные задержка и энергия по фазам для мобильного вывода компьютерного зрения одного пользователя. Видно, что декодирование JPEG на CPU доминирует в энергетическом бюджете, хотя этап вывода на NPU несет вычисления модели. Цели оптимизации смещаются от пропускной способности к энергии на вывод на периферии.
Узел мобильного обслуживания определяется четырьмя метриками:
- Энергия на вывод: 2,98 мДж позволяют получить около 12,1 млн выводов на батарею 10 Вт·ч (типичный смартфон).
- Смоделированная мощность вывода: 2,98 мДж / 45 мс = 66 мВт, без учета остальной части устройства, поэтому это не гарантия неограниченной работы.
- Компромисс NPU и CPU: переход на CPU заменяет этап вывода на NPU длительностью 12 мс и 0,8 мДж этапом на CPU длительностью 45 мс и 4,2 мДж; полный конвейер вырос бы с 45 мс и 2,98 мДж примерно до 78 мс и 6,4 мДж до учета дополнительных накладных расходов системы.
- Объем памяти: пиковые 150 МБ (модель и активации), которые конкурируют с памятью приложения.
Системный вывод: в этом иллюстративном конвейере мобильный NPU достигает загрузки 82 процента при размере батча один, тогда как в примере дата-центра загрузка составляет 15 процентов. Контраст специфичен для нагрузки и аппаратуры, но он показывает, почему мобильный ускоритель, спроектированный под потоковое выполнение одного запроса, может работать эффективно без батчей, которые амортизируют большой серверный GPU.
Эти физические ограничения делают оптимизацию периферийного обслуживания принципиально иной, чем оптимизацию в дата-центре. Вместо максимизации совокупной пропускной способности батчей цель состоит в том, чтобы поддерживать выполнение в реальном времени в узких тепловых и энергетических рамках, не вызывая аппаратного троттлинга и не оставляя фоновые приложения без системной памяти.
Сводка шаблонов трафика
Адаптивный к трафику батчинг подстраивает окно батчинга по мере изменения глубины очереди и интенсивности запросов. «Шаблоны трафика и стратегии батчинга» связывает четыре сценария MLPerf с типичными контекстами развертывания и распространенными стратегиями батчинга.
Эти сценарии — абстракции бенчмарка, а не предписания для развертывания. Рабочая политика батчинга по-прежнему должна следовать текущей конкурентности, дедлайнам и ограничениям мощности сервиса.
| Сценарий | Контекст | Стратегия | Фокус |
|---|---|---|---|
| Server | Облачные API, веб-сервисы | Динамический батчинг с тайм-аутом | Настройка окна, кривая «загрузка — задержка» |
| MultiStream | Автономное вождение, видеоаналитика | Синхронизированное слияние сенсоров | Работа с джиттером, гарантии дедлайнов |
| SingleStream | Мобильные приложения, встроенные устройства | Без батчинга () | Предобработка, энергоэффективность |
| Offline | Пакетная обработка, конвейеры данных | Максимальный размер батча | Пропускная способность, загрузка аппаратуры |
Шаблоны трафика и стратегии батчинга: четыре сценария вывода MLPerf приближают разные контексты развертывания. Серверный трафик (облачные API) использует динамический батчинг с тайм-аутом; MultiStream приближает синхронизированные входы сенсоров; SingleStream обрабатывает запросы по одному; Offline использует большие батчи в пределах емкости памяти, чтобы максимизировать пропускную способность.
Каждый из этих шаблонов развертывания — будь то обслуживание облачного API-трафика в сценарии Server, синхронизация слияния сенсоров в MultiStream или пакетные конвейеры с доминирующей пропускной способностью в офлайн-выводе — опирается на общее базовое допущение: каждый запрос дает один выход фиксированного размера, например одну метку класса, один ограничивающий прямоугольник или один вектор эмбеддинга. Это допущение определяет математику очередей, анализ фронта Парето и настройку адаптивного окна. Самая быстрорастущая категория нагрузок обслуживания, однако, полностью нарушает это допущение. Большие языковые модели генерируют выход токен за токеном, причем каждый токен зависит от всех предыдущих. Один запрос может породить сотни или тысячи токенов за секунды, но должен ощущаться отзывчивым с первого токена. Этот фундаментальный переход от выхода фиксированного размера к потоковому выходу переменной длины опирается на непрерывный батчинг и страничное управление KV-кэшем для авторегрессионной генерации. Он вводит метрики, разделенные на фазы предзаполнения и декодирования, стратегии декодирования, которые обменивают качество выхода на задержку на токен, и оптимизации памяти, такие как кэширование префиксов промпта и выгрузка, которые используют общий контекст между запросами.
Батчинг и шаблоны трафика
Батчинг — главный рычаг экономики обслуживания, но оптимальная стратегия зависит от контекста.
- Компромисс «задержка — пропускная способность»: можете ли вы объяснить, почему батч 32 дает в 6 раз большую пропускную способность, чем батч один, но производственная система с SLO 20 мс все равно может выбрать батч восемь?
- Динамический и статический батчинг: можете ли вы описать, почему статический батчинг (ожидание полного батча) не работает при переменном трафике и как динамический батчинг с временным окном решает эту проблему?
- Соответствие шаблону трафика: для заданного сценария развертывания (например, облачный API, автономный автомобиль, мобильное приложение) можете ли вы выбрать подходящий сценарий MLPerf и объяснить, почему эта стратегия батчинга подходит?
- Адаптивные окна: можете ли вы объяснить, почему оптимальное окно батчинга уменьшается, когда трафик растет, даже если размеры батчей увеличиваются?
Обслуживание LLM
Большие языковые модели заметно усиливают три свойства, которых нет в обслуживании с фиксированным выходом: авторегрессионная генерация25 (каждый токен зависит от всех предыдущих, поэтому выход по своей природе последователен), выход переменной длины (длина ответа неизвестна в момент запроса, что осложняет предположения о фиксированном батче) и состояние в памяти (KV-кэш растет с каждым сгенерированным токеном и создает динамическое давление на память). Вместе эти свойства образуют качественно иную задачу обслуживания. Перцентили p50, p95 и p99, которые используются для обслуживания классификации, по-прежнему важны, но относятся к разным фазам запроса: начальной обработке промпта и последующей генерации токенов. Те же принципы теории очередей, компромиссы батчинга и бюджеты задержки остаются применимыми; обслуживание LLM добавляет поверх них специфичные для области методы.
Метрики производительности: TTFT и TPOT
TTFT и TPOT находятся в разных режимах узких мест.
Генеративные модели выдают поток токенов, а не один выходной тензор. Такой потоковый характер требует специальных метрик производительности LLM, которые отражают переход от предзаполнения (обработки промпта и заполнения его KV-кэша) к декодированию (генерации выхода). Две ключевые меры — время до первого токена (time to first token, TTFT) и время на выходной токен (time per output token, TPOT): они описывают отзывчивость и средний темп генерации. Межтокенная задержка (inter-token latency, ITL) измеряет распределение пауз между отдельными потоковыми токенами; TPOT, напротив, усредняет интервал после первого токена по всему выходу.
Метрики производительности LLM
Метрики производительности LLM отделяют начальную отзывчивость от темпа потоковой авторегрессионной генерации.
- Значение: они раскладывают воспринимаемую пользователем задержку на время до первого токена (TTFT), работа которого часто ограничена вычислениями, и время на выходной токен (TPOT), работа которого при малых батчах часто ограничена пропускной способностью.
- Отличие: в отличие от метрик фиксированного выхода (например, сквозной задержки), метрики LLM измеряют плавность генерации, учитывая, что опыт пользователя зависит от ритма поступления токенов.
- Типичная ошибка: распространенное заблуждение состоит в том, что «быстрая модель» имеет низкий TTFT. На самом деле модель может иметь быстрый TTFT, но медленный TPOT (если узким местом служит стена памяти ), что дает неприятный пользовательский опыт: ответ начинается быстро, а затем «заикается».
Эти метрики отражают разные аспекты пользовательского опыта, поэтому интерактивные сервисы часто задают отдельные цели для TTFT, TPOT или ITL и для совокупной пропускной способности.
Целевые показатели задержки обслуживания LLM
Интерактивным сервисам LLM обычно нужны отдельные SLO для отзывчивости, плавности генерации и пропускной способности флота. Приведенные значения — иллюстративные ориентиры, а не универсальные требования:
- TTFT: менее 500 мс (для промпта из 1000 токенов)
- TPOT: менее 50 мс (что эквивалентно примерно 20 токенам в секунду и быстрее скорости чтения человеком)
- Пропускная способность: более 1000 токенов в секунду суммарно по активным репликам обслуживания
Единая цифра «задержки» поэтому скрывает разделение на предзаполнение и декодирование. TTFT — это бюджет пустого экрана, TPOT — бюджет потока чтения, а совокупная пропускная способность сервиса, измеряемая как сумма токенов в секунду по активным репликам, определяет, выполняются ли эти цели под общей нагрузкой.
Стратегии декодирования
Соблюдение этих целей по TPOT зависит не только от пропускной способности памяти: алгоритм выбора каждого токена тоже влияет на задержку на токен и качество выхода. Генеративным моделям нужны стратегии декодирования, которые балансируют качество, разнообразие и задержку. Выбор стратегии декодирования сильно влияет и на качество выхода, и на вычислительную стоимость.
Самый простой подход, жадное декодирование, выбирает на каждом шаге токен с наибольшей вероятностью ценой одного прохода модели на токен. Оно быстрое, но может давать повторяющийся выход, поскольку не может исправить ранние решения. Лучевой поиск (beam search) поддерживает несколько кандидатов последовательности и выбирает полную последовательность с высокой оценкой, увеличивая работу и состояние декодера по сравнению с жадным декодированием. Выборка с температурой, top- и top- (также называемая nucleus sampling) вносит контролируемую случайность ради разнообразия (Holtzman et al., 2020). Стоимость обслуживания любой стратегии зависит от ее реализации и от распределения длин выхода, которое должен поглотить непрерывный батчинг.
Интерактивные сервисы LLM обычно возвращают токены по мере их создания, а не ждут полной генерации. Такой потоковый ответ меняет пользовательский опыт: двухсекундная генерация воспринимается как отзывчивая, когда токены идут непрерывно, но кажется сломанной, когда пользователь смотрит на пустой экран две секунды. Потоковая передача требует поддержки инфраструктурой инкрементальных ответов и рендеринга на клиенте. Профиль задержки соответственно меняется: TTFT определяет, когда начинает появляться выход (отзывчивость), а TPOT определяет воспринимаемую скорость генерации (плавность). Когда генерация идет потоком токен за токеном, единица обслуживания меняется с одного предсказания фиксированного выхода на последовательность с состоянием, объем памяти которой растет на каждом шаге.
Память и KV-кэш
Генеративный вывод требует управления KV-кэшем26 — состоянием в памяти, которое растет с длиной последовательности. Предзаполнение создает записи кэша для токенов промпта, и каждый декодированный токен добавляет еще одну запись. При одновременных последовательностях переменной длины это динамическое состояние может занять большую часть доступной памяти ускорителя и породить потери на выделение, если им не управлять явно.
Кэширование префиксов и выгрузка памяти
Техники непрерывного батчинга и PagedAttention, рассмотренные в «Непрерывном батчинге», решают задачи планирования запросов и страничного управления кэшем. Оставшееся давление на память можно дополнительно снизить архитектурными стратегиями, которые используют шаблоны запросов. Кэширование префиксов (prefix caching) хранит состояния KV общих префиксов инструкций (например, системного промпта на 2000 токенов или общего контекста генерации с поиском, RAG), позволяя независимым запросам переиспользовать результат предзаполнения для одинакового префикса. Для запросов, которые делят префикс из токенов, сэкономленная работа предзаполнения составляет примерно шагов по токенам при условии попаданий в кэш, вытеснения и накладных расходов реализации. Для многоходовых диалогов тот же принцип позволяет последующему ходу обрабатывать только новый суффикс, переиспользуя совместимое предыдущее состояние.
Энергетическая стоимость чата
Задача: сколько энергии тратит чат-сервис на базе H100 на один сгенерированный токен и на ответ из 500 токенов?
По мере масштабирования LLM джоули на токен становятся метрикой эксплуатации первого класса наряду с задержкой. Если H100 потребляет свою расчетную тепловую мощность (TDP) в 700 Вт, оценка для этого сценария следует из пропускной способности и мощности (Choquette, 2023):
- Пропускная способность: 114 одновременных запросов 8 токенов/с на запрос ≈ 912 токенов/с.
- Мощность: 700 Вт (GPU) + 300 Вт (хост и накладные расходы) = 1000 Вт.
- Энергия на токен: 1000 Вт / 912 токенов/с ≈ 1,0965 Дж/токен.
Системный вывод: при этих допущениях ответ из 500 токенов расходует ≈ 548,2 Дж.
- Для сравнения, зарядка смартфона расходует ≈ 40 000 Дж.
- Кипячение чашки воды расходует ≈ 100 000 Дж.
Главный способ снизить Дж/токен — повысить загрузку аппаратуры и устранить избыточные вычисления. Если GPU работает при загрузке 10 процентов из-за плохого батчинга, он все равно потребляет около 300 Вт, а хост добавляет еще 300 Вт, и энергия на токен растет до 6,6 Дж/токен (примерно в 6 раз больше базового значения). Архитектурные оптимизации вроде кэширования префиксов также позволяют пропустить энергоемкую фазу предзаполнения для общего контекста, напрямую снижая энергетический след приложений поиска с генерацией (RAG) и чат-приложений. Урок для обслуживания в том, что эффективность — это не только метрика задержки или стоимости: она также определяет, сколько энергии расходует каждый полезный токен.
Когда совокупный KV-кэш превышает VRAM GPU, системы могут применить выгрузку KV-кэша (KV cache offloading). Эта стратегия переносит неактивные или низкоприоритетные окна контекста в оперативную память CPU хоста или на NVMe SSD, освобождая VRAM для активной генерации. Стоимость обратной загрузки снизу ограничена объемом перенесенных байтов, деленным на пропускную способность PCIe или NVMe, до добавления программных накладных расходов и очередей. Выгрузка поэтому предотвращает сбои из-за нехватки памяти и позволяет использовать большие окна контекста, но создает риски аффинности, инвалидации и задержки горячего декодирования, которые нужно явно закладывать в бюджет. Продвинутые методы, включая спекулятивное декодирование27 и распределенный параллелизм, при котором один запрос делится между несколькими устройствами или машинами, рассматриваются в специализированных разделах о крупномасштабных системах.
Основы обслуживания LLM
Обслуживание LLM вводит ограничения, которых нет в традиционном обслуживании моделей.
- TTFT и TPOT: можете ли вы объяснить, почему эти метрики отражают разный пользовательский опыт, почему предзаполнение часто ограничено вычислениями, а декодирование при малом батче — пропускной способностью, и перевести цель TPOT 50 мс в токены в секунду?
- Стена памяти: можете ли вы объяснить, почему добавление вычислительных ядер почти не улучшает задержку, когда генерация токенов ограничена пропускной способностью, и почему более быстрая память, меньшие модели или батчинг могут изменить границу? (Пример Llama-3 в разделе «Производственный пример: обслуживание Llama 3 с 8 млрд параметров» количественно описывает эту связь.)
- Непрерывный батчинг: можете ли вы объяснить, почему традиционный статический батчинг тратит вычисления впустую при разной длине последовательностей и как батчинг на уровне итераций решает эту проблему?
- PagedAttention: можете ли вы объяснить проблему фрагментации памяти в управлении KV-кэшем и то, как блоки фиксированного размера, расположенные несмежно, сокращают потери на резервирование?
- Кэширование префиксов: можете ли вы объяснить, как кэширование состояний KV общих префиксов инструкций сокращает избыточные вычисления и ускоряет приложения RAG и многоходовые диалоги?
Энергетический расчет чата делает загрузку частью бюджета обслуживания LLM: стоимость каждого сгенерированного токена зависит от того, как запросы делят машину. В отличие от вывода с фиксированным выходом, энергия LLM растет с длиной ответа. Каждый шаг декодирования один раз передает веса для активного батча, поэтому батчинг амортизирует этот трафик на несколько последовательностей. Учет выбросов углерода дополнительно требует коэффициента выбросов и определенной границы системы.
Энергоэффективность зависит от тех же механизмов батчинга, памяти и кэша префиксов, которые определяют задержку LLM, поэтому полезным итогом будет список ограничений, а не одна скалярная метрика.
Выбор среды выполнения вывода
Динамический батчинг и планирование запросов определяют, как выводы группируются и ставятся в очередь, но базовый движок выполнения должен вычислить полученные тензорные операции на физической аппаратуре. Динамика генерации токенов, введенная в «Обслуживании LLM», и бюджеты задержки, установленные в «Бюджете задержки», достижимы, только если среда выполнения эффективно отображает операции на исполнительные блоки ускорителя и иерархии памяти. Среда выполнения вывода (inference runtime) — программный слой, который оркестрирует тензорные операции и управляет аппаратными ресурсами, — может существенно изменить задержку и пропускную способность при неизменной архитектуре модели. Инженерия среды выполнения состоит из двух фаз: выбор определяет движок выполнения, а настройка подгоняет этот движок под целевую модель, аппаратуру, формы входов и распределение задержки.
Экосистема сред выполнения и настройка
Выбор движка начинается с связывающего системного ограничения, а не с фреймворка, на котором обучалась модель. Когда важнее скорость развертывания и совместимость с фреймворком, модели PyTorch и TensorFlow могут обслуживаться напрямую через свои родные среды выполнения без промежуточного шага экспорта. Это сохраняет поддержку произвольного управления потоком Python и пользовательских операторов обучения, хотя нестандартные операции, отсутствующие аппаратные бэкенды и накладные расходы интерпретатора Python могут ограничивать производственную пропускную способность. Среды выполнения фреймворков ставят гибкость и широкое покрытие операторов на первое место, тогда как специализированные движки вывода меняют эту общность на целевые преобразования графа и меньшие накладные расходы выполнения.
torch.export и SavedModel из TensorFlow предоставляют сериализованные вычислительные графы для трансформации и оптимизации графа заранее (ahead-of-time), сохраняя совместимость с фреймворком. TorchScript остается устаревшим форматом для существующих развертываний.
Универсальная оптимизация
Когда ключевым ограничением становится переносимость между аппаратными платформами, ONNX Runtime28 предоставляет промежуточный аппаратно-независимый слой выполнения (Microsoft, 2024). Модели экспортируются в формат ONNX, после чего ONNX Runtime применяет не зависящие от цели оптимизации графа и делегирует подграфы аппаратно-специфичным провайдерам выполнения. Такая архитектура позволяет развертывать один формат на CPU, GPU и специализированных ускорителях (ASIC).
Переносимость все равно требует профилирования размещения операторов через границы выполнения. Если экспортированная модель содержит операцию, которая не поддерживается провайдером выполнения целевого ускорителя, среда выполнения переходит на провайдер выполнения CPU по умолчанию. Такой откат вынуждает синхронные копии данных через межсоединение «хост — ускоритель» (например, PCIe) и сериализует выполнение на CPU хоста. Это сохраняет численную корректность, но разрушает ожидаемое преимущество по задержке. Поэтому профилирование должно проверять назначение провайдеров и покрытие операторов по всему графу, а не только убеждаться, что экспортированный артефакт выполняется без ошибок.
Специализированные движки вывода
Когда бюджеты задержки или стоимость обслуживания связывают сильнее, чем переносимость, специализированные движки, такие как TensorRT29 для GPU NVIDIA и OpenVINO30 для аппаратуры Intel, оптимизируют графы под конкретные микроархитектуры (NVIDIA, 2024a; Intel Corporation, 2026; Chen et al., 2018). Вместо поддержки переносимых абстракций эти компиляторы специализируют ядра непосредственно под регистровые файлы, иерархии кэшей и блоки матричного выполнения аппаратуры.
Слияние слоев31 объединяет несколько последовательных операций в одно ядро GPU, чтобы устранить трафик внешней памяти. Рассмотрим стандартный блок компьютерного зрения: свертка пакетная нормализация активация ReLU (rectified linear unit). Выполненная наивно, эта последовательность требует трех отдельных запусков ядер и двух промежуточных циклов записи и чтения в глобальную память устройства (HBM). Поскольку пакетная нормализация и ReLU имеют низкую арифметическую интенсивность, передача этих промежуточных карт признаков по шине памяти насыщает пропускную способность памяти. На этапе компиляции компилятор обслуживания сначала сворачивает линейные параметры пакетной нормализации непосредственно в веса и смещение свертки ( и ), полностью устраняя операцию нормализации. Затем компилятор сливает свертку и последующую ReLU в одно ядро: блоки потоков читают входную карту признаков из HBM один раз, вычисляют умножение с накоплением матриц в регистрах и разделяемой памяти, применяют активацию ReLU прямо в регистрах и записывают обратно в HBM только итоговый активированный результат.
Автонастройка ядер (kernel auto-tuning) измеряет варианты и выбирает оптимальный алгоритм для каждой операции на целевой микроархитектуре. Одну двумерную свертку можно выполнить прямой сверткой, преобразованием GEMM (im2col), минимальной фильтрацией Винограда (эффективной для малых фильтров ) или быстрыми преобразованиями Фурье (эффективными для больших пространственных фильтров), а также десятками вариантов размера тайлов. Поскольку победившая стратегия зависит от размеров фильтра, размера батча и емкости регистров и разделяемой памяти ускорителя, компилятор замеряет кандидатов на целевой аппаратуре и кэширует ядро с наименьшей задержкой, обменивая время компиляции заранее на предсказуемую задержку обслуживания.
Эти оптимизации дают существенное ускорение относительно ненастроенного базового варианта фреймворка, но требуют явной компиляции графа и могут ограничивать динамические размерности тензоров. Иллюстративное сравнение сред выполнения, которое следует, количественно описывает один такой спектр оптимизаций.
ResNet-50: сравнение сред выполнения
«Иллюстративное сравнение сред выполнения вывода» дает иллюстративный сценарий среды выполнения ResNet-50/V100 при батче один:
Среда выполнения Задержка Ускорение Примечания PyTorch (eager) 8,5 мс 1× База, без оптимизаций TorchScript 6,2 мс 1,4× JIT-компиляция ONNX Runtime 5,1 мс 1,7× Кроссплатформенная TensorRT FP32 2,8 мс 3× Специфичная для NVIDIA TensorRT FP16 1,4 мс 6,1× Ускорение на тензорных ядрах TensorRT INT8 0,9 мс 9,4× Требует калибровки Иллюстративное сравнение сред выполнения вывода: предполагаемая задержка и производное ускорение для ResNet-50 при батче один в PyTorch eager, TorchScript, ONNX Runtime и TensorRT на V100.
Системный вывод: в этом иллюстративном сравнении TensorRT INT8 дает ускорение в 9,4 раза и требует данных для калибровки квантования и развертывания, специфичного для NVIDIA.
Этот компромисс между оптимизацией и совместимостью определяет выбор движка. Более высокая специализация дает лучшую эффективность аппаратуры, но усложняет развертывание, ограничивает динамическое управление потоком и может вносить численные отклонения от базовой линии обучения. Инженерный выбор зависит от бюджетов задержки, операционных ограничений и того, как часто меняются архитектуры моделей.
После выбора движка выполнения настройка подгоняет распределение ресурсов под аппаратный контур. Для вывода на CPU размер пула потоков должен соответствовать топологии физических ядер: недозагрузка оставляет исполнительные блоки простаивать, а перегрузка вызывает трэшинг кэша CPU, задержки планирования ОС и конкуренцию за блокировки между доменами NUMA. Для ускорителей статическое предварительное выделение памяти создает рабочие области активаций фиксированного размера при инициализации, убирая из критического пути запроса выделения памяти во время выполнения (cudaMalloc) и ошибки таблицы страниц. Приоритет провайдеров выполнения определяет, какой аппаратный бэкенд обрабатывает каждый подграф операторов, а уровни оптимизации графа балансируют время сборки и свертку констант с алгебраическим упрощением. Производственные развертывания должны тестировать эти конфигурации по всему распределению задержки (, ), а не полагаться на значения фреймворка по умолчанию.
Выбор точности для обслуживания
На GPU NVIDIA V100 тензорные ядра ускоряют матричные операции FP16, тогда как вычисления INT8 выполняются на обычных целочисленных АЛУ (через векторные инструкции DP4A). В иллюстративном сценарии обслуживания перевод модели ResNet-50 с FP32 на INT8 утраивает пропускную способность вывода, теряя менее 0,4 процентного пункта точности top-1. Эта динамика связывает численную точность напрямую с экономикой инфраструктуры. Выбор точности опирается на методы квантования, разобранные в «Квантовании и числовой точности». Раздел «Численные представления» приложения «Основы машины» сравнивает лежащие в основе числовые форматы (FP32, FP16, BF16, FP8, INT8) и их компромиссы между точностью и диапазоном, а раздел «Целочисленное квантование» того же приложения подробно излагает математику симметричного и асимметричного целочисленного квантования. На уровне обслуживания инженерия точности вводит операционные ограничения: достоверность данных калибровки, чувствительность слоев к живым входам и динамическую диспетчеризацию точности.
Связь точности и пропускной способности
Для операций, ограниченных пропускной способностью памяти, снижение точности повышает пропускную способность, уменьшая объем байтов, переданных по шине памяти. «Пропускная способность при смене точности» дает верхнюю границу, которая учитывает только пропускную способность и получается при снижении точности:
Фактическое ускорение зависит от соотношения вычислений и памяти, состава операторов, пропускной способности аппаратных инструкций и выравнивания матриц. Оно оказывается ниже границы, которая учитывает только пропускную способность, всякий раз, когда связывающим становится арифметическая пропускная способность или выравнивание памяти. Низкоточные ядра достигают пиковой арифметической эффективности, только когда размеры матриц совпадают с тайлами исполнения на уровне варпов ускорителя (например, кратны 8 или 16 элементам). Если размеры не совпадают с аппаратными тайлами, такие библиотеки, как cuBLAS и cuDNN, дополняют тензоры заполнением или переходят на более медленные пути выполнения. «Тензорные ядра» описывает архитектуры тензорных ядер и ограничения выравнивания, которые задают эти границы. Компромиссы точности для стандартной модели компьютерного зрения показывают, как эти теоретические пределы проявляются на практике.
ResNet-50: компромиссы точности на V100
«Иллюстративный компромисс точности на V100» дает иллюстративные допущения о задержке, памяти и точности для ResNet-50 в FP32, FP16 и двух путях INT8, а также загрузку тензорных ядер там, где она поддерживается:
Точность Задержка Память Точность модели Загрузка тензорных ядер Калибровка FP32 2,8 мс 98 МБ 76,13% 0% Нет FP16 1,4 мс 49 МБ 76,13% 85% Нет INT8 (PTQ) 0,9 мс 25 МБ 75,80% Н/Д 1 000 образцов INT8 (QAT) 0,9 мс 25 МБ 76,05% Н/Д Дополнительное обучение Иллюстративный компромисс точности на V100: предполагаемые задержка, объем памяти и точность ResNet-50 в FP32, FP16 и INT8 (PTQ и QAT), а также загрузка тензорных ядер там, где она поддерживается.
Системный вывод: в этом иллюстративном сценарии INT8 дает ускорение в 3,1 раза и теряет 0,33 процентного пункта точности при PTQ. QAT возвращает большую часть этой потери, но требует переобучения.
Ограничения выбора точности
Выбор точности ограничен чувствительностью слоев, данными калибровки и политикой среды выполнения. Не все слои одинаково переносят пониженную точность. Для скалярного равномерного квантователя с битами по калиброванному диапазону шаг и граница ошибки округления внутри диапазона из «Ошибки квантования» равны
для значений, которые не были отсечены. Значения вне калиброванного диапазона отсекаются и вносят дополнительную ошибку насыщения. Ошибка выхода слоя или задачи зависит от распределения активаций и чувствительности последующих слоев, поэтому ее нужно измерять, а не выводить из универсального закона нормы. Этот механизм объясняет, почему первый сверточный слой и финальный слой классификации обычно сохраняют в FP16, тогда как промежуточные слои переносят INT8. Первые слои обрабатывают низкоразмерные сырые входы (например, 3 RGB-канала) до того, как представления расширяются в переполненные пространства признаков, способные поглотить шум квантования. Финальные слои классификации выдают сырые логиты, где небольшие численные возмущения напрямую сдвигают границы решений и меняют предсказания top-.
Квантование после обучения создает зависимость от данных. Набор данных калибровки определяет пороги отсечения и масштабные коэффициенты , которые используются для преобразования в INT8, поэтому он должен соответствовать статистическому профилю живого трафика обслуживания, а не произвольным обучающим или валидационным разбиениям. Несовпадение распределений калибровки и обслуживания вызывает избыточное отсечение или недополнение (underflow) и ухудшает сквозную точность задачи. Это операционная ловушка, разобранная в разделе «Заблуждения и ловушки».
Производственные архитектуры обслуживания могут превращать точность из статической настройки компиляции в динамическую политику среды выполнения. Когда очереди запросов короткие и система имеет достаточный запас задержки относительно цели уровня обслуживания (SLO), движок может диспетчеризовать запросы в FP16, чтобы максимизировать точность задачи. Во время всплесков трафика, которые угрожают насыщению очереди, движок может динамически перейти на INT8, чтобы сохранить границы задержки. Аналогично запросы, которые дают низкую уверенность классификации при INT8, можно выборочно перепроверить в FP16. Такая динамическая диспетчеризация реализует адаптивные компромиссы «качество — задержка» при колеблющейся интенсивности поступления запросов.
Выбор точности имеет прямые последствия для размера инфраструктуры: при иллюстративном улучшении пропускной способности в 3 раза кластер из 30 GPU в FP32 обслуживает ту же нагрузку с 10 GPU в INT8, при сохранении задержки в очереди. Инженерия точности поэтому является дисциплиной определения размера инфраструктуры, напрямую связывая численное представление с капитальными затратами на кластер и энергопотреблением.
Оптимизация на уровне узла
Выбор среды выполнения и настройка точности работают на уровне модели: они определяют, какие вычисления выполняются и в каком числовом формате. Между моделью и кремнием, однако, лежит слой выполнения, который включает компиляцию графа, передачи по шине памяти и координацию CPU и ускорителя. Тогда как бенчмарки уровня модели оценивают изолированные прямые проходы на синтетических входах, оптимизация на уровне узла нацелена на сквозной путь запроса на конкретной физической машине. Реальные выигрыши по задержке и пропускной способности зависят от того, какая аппаратная граница связывает выполнение.
Когда классификатор изображений с бенчмарком модели менее миллисекунды демонстрирует неожиданную задержку в эксплуатации, измеренная трассировка выполнения обычно выявляет узкие места на четырех основных физических границах:
- Граница «граф — ядро»: перевод вычислительных графов в многочисленные мелкозернистые запуски ядер влечет накладные расходы сериализации драйвера и заставляет промежуточные тензоры проходить через HBM устройства. Компиляторы графов сливают соседние операции в составные ядра, которые сохраняют промежуточные активации в SRAM на кристалле или в регистровых файлах.
- Граница «хост — ускоритель»: ускорители простаивают, когда процессор хоста не ставит работу в очередь раньше, чем она понадобится исполнению. Копии без конвейеризации через межсоединение между хостом и устройством (например, PCIe) и блокирующие вызовы синхронизации останавливают вычислительные конвейеры ускорителя.
- Граница выполнения на CPU: конвейеры предобработки на хосте и вывод на CPU деградируют, когда выполняются через интерпретируемый скалярный код, а не через векторные блоки SIMD (single instruction, multiple data) и выделения памяти, локальной для узла NUMA.
- Граница «хранилище — десериализация»: инициализация реплик обслуживания требует потоковой загрузки тензоров весов из постоянного хранилища в память хоста. Форматы, требующие рекурсивной десериализации объектов, становятся узким местом для выполнения на CPU и создают всплески задержки холодного старта, которые мешают автомасштабированию.
Каждая граница представляет собой отдельное физическое ограничение, на котором выполнение останавливается из-за пропускной способности памяти, перемещения по шине или управляющих накладных расходов, а не из-за пиковой арифметической производительности.
Компиляция графа во время выполнения
Специализированные движки вывода («Выбор среды выполнения вывода») превосходят базовые варианты фреймворка в eager-режиме, потому что среды обслуживания предоставляют статические топологии выполнения и ограниченные профили форм входов. Когда последовательности операторов и размерности тензоров фиксированы до поступления входящих запросов, компиляторы переносят стоимость оптимизации из обработки запросов во время выполнения в офлайн-подготовку развертывания.
Основной арифметический выигрыш дает слияние операторов, которое развивает оптимизации уровня движка из «Специализированных движков вывода». В несливаемом графе выполнения последовательные поэлементные операции, например свертка, за которой следуют сложение смещения и функция активации, запускаются как изолированные ядра ускорителя. Каждое отдельное ядро должно загрузить входы из глобальной памяти устройства (HBM или GDDR) и записать промежуточный выход обратно по шине памяти. Поскольку поэлементные операции имеют низкую арифметическую интенсивность ( операций на переданный байт), насыщение шины памяти замедляет выполнение, а вычислительные блоки простаивают. Слияние операторов объединяет эти соседние узлы в одно составное ядро и сохраняет промежуточные активации в быстрых регистрах на кристалле или разделяемой памяти (SRAM). Устраняя избыточные обращения к глобальной памяти, слияние резко сокращает трафик памяти и амортизирует накладные расходы запусков ядер на более крупные вычислительные блоки.
Статические графы выполнения также позволяют свертку констант на этапе компиляции. В обслуживании модели параметры неизменяемы. Компиляторы вычисляют поддеревья выражений, которые целиком состоят из статических весов и констант, до развертывания. Например, параметры пакетной нормализации () можно алгебраически свернуть непосредственно в матрицу весов и вектор смещения предшествующего линейного или сверточного слоя. Это полностью устраняет запуски ядер слоя нормализации и связанный с ним трафик памяти, убирая вычислительную работу из каждого живого запроса без изменения математического результата.
Планирование памяти применяет структурную оптимизацию к раскладке памяти, а не к арифметике. Реактивное выделение во время обработки запроса запускает блокировки аллокатора фреймворка, поиски в куче и изменения таблиц страниц операционной системы. В статическом графе времена жизни тензоров детерминированно известны от входа до выхода. Компилятор среды выполнения заранее вычисляет точные смещения буферов, позволяя непересекающимся промежуточным тензорам переиспользовать одну и ту же физическую арену памяти. Такое заранее рассчитанное переиспользование буферов ограничивает совокупное потребление памяти, предотвращает фрагментацию памяти и устраняет простои на выделение во время выполнения.
Компромисс по времени компиляции
Компиляция «на лету» (just-in-time) откладывает оптимизацию графа, пока среда выполнения не увидит конкретные формы входов и пути выполнения. Эта видимость во время выполнения позволяет агрессивно специализировать ядра для динамического управления потоком и переменных длин последовательностей, но вносит накладные расходы компиляции прямо в путь обслуживания, порождая многосекундные всплески задержки на первых запросах.
Компиляция заранее (ahead-of-time) выполняет анализ графа, слияние ядер и автонастройку под аппаратуру до развертывания. Предварительная сборка артефакта выполнения гарантирует предсказуемое выполнение с низкой задержкой уже с первого запроса, но ограничивает движок заранее заданными профилями форм и требует явного дополнения или компиляции нескольких профилей для входов динамического размера.
Когда ограничения развертывания или профили нагрузки исключают выделенные ускорители, оптимизация смещается от ядер GPU к кремнию хоста, где скорость выполнения определяют векторизация и иерархия памяти.
Оптимизация вывода на CPU
Развертывание вывода на CPU остается практичным для легковесных моделей, разреженных или всплесковых потоков запросов, которые не могут насытить ускоритель, и приложений, где задержка передачи от хоста к устройству доминирует над общим временем вычислений. Современные серверные CPU32 (например, Intel Xeon и AMD EPYC) включают широкие векторные регистры SIMD и матричные ускорители (включая AVX-512 и AMX). Универсальные интерпретаторы Python и скалярные реализации оставляют эти исполнительные блоки простаивать. Специализированные среды выполнения, такие как OpenVINO, отображают операторы нейронной сети на оптимизированные микроядра, которые разбивают матричные операции на тайлы по кэшам L1/L2 и используют упакованные инструкции fused multiply-add (FMA) (Intel Corporation, 2026).
Многосокетные серверные архитектуры вводят ограничения NUMA33. Контроллеры памяти физически распределены по сокетам CPU и связаны когерентными межсоединениями (такими как Intel UPI или AMD Infinity Fabric). Доступ к памяти, подключенной к удаленному сокету, дает существенно более высокую задержку и меньшую пропускную способность, чем доступ к локальному каналу. Сервер вывода должен учитывать NUMA: рабочие потоки нужно закреплять за выделенными физическими ядрами, а тензоры весов и буферы запросов, которые эти потоки трогают, должны находиться в узлах памяти, локальных для этого сокета. Поскольку веса моделей (от сотен мегабайт до десятков гигабайт) регулярно превышают емкость L3-кэша одного сокета, каждый прямой проход стримит веса из основной оперативной памяти. Несогласованные размещения по сокетам заставляют постоянно стримить веса через более медленное межсокетное межсоединение, что порождает сильную деградацию хвостовой задержки.
Для легковесных моделей, оцениваемых при размере батча один, CPU часто превосходит дискретный GPU. Когда ускоритель обрабатывает изолированный запрос, фиксированные накладные расходы на передачу входов по шине PCIe хоста (несколько микросекунд), сериализацию очереди драйвера и накладные расходы запуска ядра (5–15 мкс на ядро) легко превышают время арифметического выполнения. CPU обрабатывает запрос напрямую в локальном кэше без передач по шине и задержек очереди драйвера. Определение операционной границы перехода требует эмпирического измерения для архитектуры модели, арифметической интенсивности, размера батча и ограничений задержки.
Сериализация моделей и быстрая загрузка
Системы автомасштабирования работают как замкнутые контроллеры, которые выделяют или снимают реплики обслуживания в ответ на спрос трафика. Во время всплесков спроса задержка холодного старта («Холодный старт и динамика инициализации») определяет, как быстро новые реплики становятся готовыми к приему трафика. Для моделей размером в несколько гигабайт длительность холодного старта в основном определяется потоковой загрузкой сериализованных весов модели из постоянного хранилища в память хоста. Архитектурный выбор формата сериализации определяет, ограничен ли этот этап пропускной способностью чтения хранилища или накладными расходами разбора на CPU.
Устаревшие контрольные точки PyTorch, загружаемые через torch.load(), упаковывают веса в zip-архив с метаданными объектов, закодированными в формате pickle. Десериализация pickle заставляет CPU последовательно интерпретировать поток опкодов сериализации, выделять отдельные объекты Python (словари, обертки метаданных и заголовки тензоров) и копировать байты тензоров из буферов распаковки в новую память. Даже при ограниченных режимах загрузки, призванных снизить риски выполнения произвольного кода, проход десериализации остается ограниченным CPU и несет значительные накладные расходы на копирование памяти.
Тензорно-ориентированный формат34 обходит построение объектов под управлением интерпретатора. Safetensors организует контрольные точки с легковесным заголовком, содержащим метаданные тензоров, за которым следуют непрерывные несжатые буферы байтов тензоров, выровненные по границам памяти. Поскольку двоичная раскладка на диске повторяет раскладку массивов в памяти, среда выполнения использует отображение в память (mmap(2), введенное в «Стратегиях загрузки»), чтобы отобразить блоки файла непосредственно в виртуальное адресное пространство процесса. Страницы виртуальной памяти подгружаются в RAM хоста по требованию или заранее читаются последовательно операционной системой, что устраняет пересоздание объектов Python и буферы копирования в пользовательском пространстве. В системах с дискретными ускорителями передача этих тензоров по PCIe или NVLink все равно требуется до начала вычислений, но загрузка на хост без копирования устраняет узкое место десериализации CPU из бюджета инициализации реплики.
Скорость загрузки: Safetensors против Pickle
Сценарий: серверная реплика вывода загружает контрольную точку модели размером 5 ГБ во время событий масштабирования холодного старта.
Диагностика:
torch.load()(Pickle) в PyTorch требует пересоздания объектов на CPU и занимает 15 с на инициализацию. Отображение в память Safetensors обходит разбор на CPU и загружает веса за 1,5 с (в 10 раз быстрее).Системный урок: тензорно-ориентированные форматы с отображением в память могут сократить пересоздание на CPU и накладные расходы eager-копирования во время холодного старта. Пропускная способность хранилища, страничные ошибки, инициализация среды выполнения и передача на ускоритель по-прежнему входят в бюджет масштабирования.
Профилирование узла обслуживания
Оптимизация без эмпирических измерений вырождается в спекулятивный подбор методом проб и ошибок. Метрика системной эффективности, определенная в «Системной эффективности», дает конкретную цель: максимизировать долю реального времени, в течение которой ускоритель выполняет полезные математические операции. Профилировщики временной шкалы, такие как PyTorch Profiler и NVIDIA Nsight Systems (nsys), делают эту цель практической, записывая параллельные потоки CPU, вызовы среды выполнения ОС, передачи памяти и аппаратные очереди GPU на синхронизированной временной шкале.
Эффективный анализ трассировки идет от узких мест аппаратной загрузки обратно к логике приложения:
- Простои вычислений (пузыри): пустое пространство на дорожке выполнения GPU указывает на голодание аппаратуры. Вычислительные варпы простаивают, пока CPU хоста завершает предобработку запроса (например, токенизацию или декодирование изображения), страничные ошибки при подкачке весов по требованию или блокирующую синхронизацию между потоками.
- Фрагментация запусков ядер: плотная последовательность микроядер, каждое из которых выполняется меньше 5–10 мкс, указывает на узкие места сериализации драйвера. CPU не может ставить запуски ядер в командную очередь достаточно быстро, чтобы держать конвейер GPU заполненным, поэтому неслитые операторы становятся первыми кандидатами на компиляцию графа.
- Простои передач на межсоединении: синхронные
MemcpyHtoDна основном потоке CUDA указывают на неконвейеризованное перемещение данных от хоста к устройству. Чтобы устранить этот простой, нужно выделить закрепленную (page-locked, pinned) память хоста и выполнять асинхронные передачи на выделенных потоках копирования, совмещая передачу по шине с параллельным выполнением на ускорителе для предыдущих запросов.
Цикл профилирования
Сценарий: узел вывода демонстрирует высокую хвостовую задержку p99 при низкой средней загрузке вычислений GPU.
Диагностика: профилирование временной шкалы (Nsight Systems / PyTorch Profiler) выявляет большие простои между крошечными ядрами GPU, которые вызваны узкими местами предобработки на стороне хоста и накладными расходами запуска ядер.
Системный урок: оптимизация узла обслуживания требует эмпирического профилирования временной шкалы. Итеративное выявление узких мест трассировки (накладных расходов запуска ядер, простоев копирования между хостом и устройством) направляет целевые оптимизации, такие как слияние операторов и закрепленная память.
«Влияние оптимизаций на уровне узла» резюмирует типичные методы оптимизации на уровне узла вместе с их основными целевыми метриками и инженерными затратами. Таблица служит матрицей решений, а не исчерпывающим списком: инженерные усилия следует направлять только на строку, которая устраняет связывающее узкое место, выявленное на измеренной трассировке выполнения.
| Метод | Целевая метрика | Иллюстративный выигрыш | Стоимость внедрения | Лучше всего для |
|---|---|---|---|---|
| Слияние операторов | Задержка и пропускная способность | в 2–5 раз | Средняя (компилятор) | Слои, ограниченные памятью |
| INT8-квантование | Пропускная способность | в 3–4 раза | Высокая (калибровка) | Узлы с интенсивным выводом |
| Компиляция графа | Задержка | в 1,5–3 раза | Низкая (одна строка) | Модели со статическим графом |
| Загрузка без копирования | Время запуска | в 10–50 раз | Низкая (формат файла) | Автомасштабирование и холодный старт |
| Закрепление на CPU | Хвостовая задержка (p99) | снижение на 20–50% | Низкая (конфигурация) | Приложения, критичные к задержке |
Влияние оптимизаций на уровне узла: иллюстративные диапазоны для сопоставления методов с измеренными узкими местами. Реальные выигрыши и стоимость внедрения зависят от модели, среды выполнения, аппаратуры и нагрузки.
Эта диагностическая иерархия гарантирует, что инженерные ресурсы устраняют структурные узкие места на всем пути запроса, а не применяют изолированные микрооптимизации. Четырехуровневая контрольная точка аудита структурирует эту приоритизацию от внешних границ сервиса до ядер устройства.
Иерархия оптимизации
Оптимизация вывода идет по пути запроса снаружи внутрь через четыре структурных уровня:
- Бюджет системы: если сквозной SLO составляет 20 мс, а сетевая передача и сериализация съедают 6 мс, достаточен ли оставшийся бюджет в 14 мс для обработки приложением, выполнения модели и очередей, и какой инструмент трассировки подтвердит эту разбивку?
- Уровень приложения: агрегирует ли система обслуживания одновременные запросы в динамические батчи, чтобы амортизировать накладные расходы фиксированного планирования и загрузки памяти?
- Уровень модели: компилируется ли граф модели в оптимизированный статический движок среды выполнения (например, TensorRT или ONNX Runtime), чтобы устранить накладные расходы интерпретатора фреймворка?
- Уровень ядра: сливаются ли операторы, ограниченные памятью, в составные ядра, чтобы минимизировать обращения к памяти высокой пропускной способности (HBM)?
Экономика и планирование
Батчинг, настройка точности, слияние операторов и компиляция графа могут сократить задержку, повысить емкость или снизить стоимость уже выполненного вывода. Однако развертывание в производстве требует ответа на вопрос уровня флота: сколько машин, какого типа и при какой совокупной стоимости. Команда, которая добивается 1 200 изображений в секунду на V100, все равно должна понять, дает ли 8 V100 по $3 в час каждая или 24 T4 по $0,53 в час каждая более низкую стоимость при цели 5 000 QPS и выполнении того же SLO. Стоимость инфраструктуры обслуживания растет с устойчивым объемом запросов (Zhang et al., 2019), тогда как стоимость обучения определяется собственным бюджетом данных, модели и оптимизации. Удешевление публичных API, показанное в «Дефляции интеллекта», иллюстрирует это давление: по мере падения цены за токен эффективность инфраструктуры становится главным рычагом экономической жизнеспособности.
Стоимость одного вывода
Стоимость одного вывода — это выделенная стоимость обслуживания, деленная на число завершенных выводов, которые удовлетворяют целевой характеристике сервиса. В числитель могут входить выделенное время CPU или ускорителя, емкость памяти, передача данных, хранение и оркестрация. При высокой загрузке полезная пропускная способность распределяет эту выделенную стоимость по многим запросам. При низкой загрузке оплаченная емкость простаивает, поэтому тот же часовой счет делится на меньшее число успешных выводов. Применение этой схемы к ResNet-50 показывает, как почасовая цена и устойчивая валидная пропускная способность складываются в удельную стоимость.
Экономика GPU и CPU
В разобранном анализе стоимости AWS в «Стоимости одного вывода» инстансы с GPU стоят больше в час, но дают гораздо более высокую параллельную пропускную способность. Точка перехода зависит от характеристик модели и требований к задержке.
Вывод на CPU имеет экономический смысл для небольших моделей с малым числом параметров и простыми операциями, когда требования к задержке ослаблены (допустимы сотни миллисекунд), когда объем запросов низок или сильно меняется (бронирование GPU тогда расточительно) или когда операции модели плохо распараллеливаются. Вывод на GPU привлекателен, когда модели велики и содержат удобные для параллелизма операции, требования к задержке строги (десятки миллисекунд), а объем запросов высок и достаточно стабилен, чтобы поддерживать загрузку, и когда батчинг может амортизировать накладные расходы запуска ядер GPU на каждый вывод.
Помимо установившихся стоимостей, на экономику масштабирования влияет время запуска. Запуск инстанса, загрузка образа, инициализация драйвера, загрузка модели, компиляция и прогрев могут делать реплики ускорителей готовыми медленнее, чем реплики CPU, хотя точные времена зависят от платформы и артефакта развертывания. Если трафик растет быстрее, чем полезная емкость может подключиться, SLO по задержке могут не выполняться, несмотря на достаточную емкость в конечном счете.
Когда реплики ускорителей имеют долгую задержку готовности, предиктивное масштабирование или пул прогретых реплик может быть надежнее чисто реактивного масштабирования. Для модели, которая приемлемо работает на обоих типах устройств, гибридная схема может держать постоянно включенную емкость ускорителей для базовой нагрузки и переполнение на CPU для всплесков, обменивая другой профиль удельной стоимости и задержки на более быструю резервную емкость. Эта гибридная схема GPU+CPU — один из экземпляров более широких шаблонов из раздела «Гибридные архитектуры»; работает ли она, зависит от совместимости модели и идентичной семантики выходов в средах выполнения.
ResNet-50: анализ стоимости
«Иллюстративное сравнение стоимости вывода ResNet-50 в облаке» дает иллюстративный сценарий в духе AWS для почасовой стоимости, пропускной способности и стоимости на миллион изображений при обслуживании ResNet-50:
Тип инстанса Стоимость в час Пропускная способность Стоимость на 1 млн изображений c5.xlarge (CPU) $0,17 50 изобр./с $0,94 g4dn.xlarge (T4 GPU) $0,53 400 изобр./с $0,37 p3.2xlarge (V100 GPU) $3,06 1 200 изобр./с $0,71 Иллюстративное сравнение стоимости вывода ResNet-50 в облаке: предполагаемая почасовая стоимость и насыщенная пропускная способность, с производной стоимостью на миллион изображений для инстансов CPU, T4 и V100.
Системный вывод: инстанс с GPU T4 имеет самую низкую удельную стоимость при этих допущениях. V100 не выигрывает у T4 по удельной стоимости при заявленных скоростях полной загрузки. Облачные цены различаются по регионам и меняются со временем; для производственного планирования сверяйтесь с актуальными ценами.
Планирование мощности
Решение «GPU или CPU» задает стоимость одного вывода, но для определения того, сколько инфраструктуры выделить, нужно сочетать анализ стоимости с основами теории очередей из «Теории очередей». Планирование мощности переводит три входа в спецификации инфраструктуры: шаблоны трафика (пиковая частота запросов, суточные и недельные циклы, прогнозы роста), задержки SLO (целевые p50, p95, p99) и характеристики модели (распределение времени вывода при разных размерах батча) (Harchol-Balter, 2013).
Разобранный пример в «Теории очередей» демонстрирует полный рабочий процесс: исходя из SLO p99 в 50 мс и цели 5 000 QPS, по «p99-задержке» выводится консервативный порог безопасной загрузки M/M/1 в 54 процента и определяется число GPU с запасом: 62 V100. Этот сценарий выделяет пиковую нагрузку плюс 30 процентов запаса; производственные запасы зависят от нагрузки и политики. Автомасштабирование может сокращать расходы в периоды низкого трафика, соблюдая цели задержки в пиках. Глава «MLOps» развивает уровень операционной политики вокруг этих расчетов обслуживания. Цифры пропускной способности имеют смысл, только если они сопровождаются гарантиями задержки. Как показал учет валидного QPS в «Теории очередей», емкость нужно рассчитывать на запросы, которые действительно выполняют SLO, а не на сырой объем запросов.
Производственный пример: обслуживание Llama 3 с 8 млрд параметров
Помимо резидентных весов, память KV-кэша часто оказывается одной из самых больших статей емкости при обслуживании больших языковых моделей, и «Взрыв KV-кэша» показывает почему. Построенный для модели масштаба 70 млрд параметров, чтобы усилить эффект, кэш растет линейно с длиной контекста и размером батча, пока длинные контексты не исчерпают память, оставшуюся после загрузки весов и рабочего пространства среды выполнения. Профиль Llama 3 с 8 млрд параметров, разобранный в остальной части этого раздела, подчиняется той же физике, но с большим запасом, поэтому инженер может разместить эту нагрузку на одном GPU и рассуждать о ней сквозь весь путь запроса.
Профиль нагрузки
Следующие фиксированные допущения о нагрузке определяют эталонный случай, который используется во всех расчетах задержки, памяти и экономики в этом разделе; вместе они ограничивают последующий анализ:
- Модель: Llama 3 с 8 млрд параметров (квантована до 4 бит с помощью учитывающего активации квантования весов (AWQ); о методах квантования см. «Квантование и числовая точность») (Dubey et al., 2024; Lin et al., 2024).
- Аппаратура: один GPU NVIDIA H100 SXM5 (80 ГБ HBM3, пропускная способность 3,35 ТБ/с) (Choquette, 2023).
- Характеристики запроса: входной промпт из 1000 токенов (предзаполнение), генерируемый ответ из 256 токенов (декодирование).
- Целевые SLO: TTFT 200 мс, TPOT 20 мс.
Взрыв KV-кэша: использование FP16 KV-кэша в зависимости от длины контекста для модели класса 70 млрд параметров с GQA. На смоделированном A100 веса INT4 объемом 35,3 ГБ оставляют 50,6 ГБ под KV-кэш до накладных расходов среды выполнения. Батч 32 достигает этого бюджета кэша примерно на 4,8 тыс. токенов, что заставляет выбирать между размером батча и длиной контекста.
Более длинные контексты поэтому требуют меньших одновременных батчей или большей памяти и снижают эффективность пропускной способности. Эти допущения делают кейс достаточно узким для расчета, сохраняя два ограничения обслуживания, которые важнее всего: бюджет предзаполнения для времени до первого токена и бюджет декодирования для каждого сгенерированного токена.
Декомпозиция задержки
Сквозная задержка запроса определяется двухфазной моделью выполнения авторегрессионных трансформеров, с применением метрик TTFT и TPOT, определенных в «Метриках производительности: TTFT и TPOT». Предзаполнение определяет, быстро ли пользователь увидит ответ на промпт; декодирование определяет, продолжает ли сгенерированный поток двигаться после старта.
Физика генерации токенов
Вспомним инвариант энергии перемещения, количественно описанный в «Энергия перемещения и вычисления над 32-битным значением»: перемещение бита в 100–1 000 раз дороже вычисления над ним. На этапе декодирования этот закон определяет физическую «стоимость слова».
Физика: при декодировании с батчем один и весами INT4 арифметическая интенсивность, определяемая весами, приблизительно равна FLOP на параметр, деленным на байта на параметр, то есть FLOP/байт. Это намного ниже точки излома H100, поэтому смоделированный шаг ограничен пропускной способностью памяти. Большие батчи декодирования переиспользуют поток весов между последовательностями и повышают арифметическую интенсивность (Pope et al., 2023). Нижняя граница пропускной способности при батче один задается уравнением «Время генерации токена»:
Следствие: каждая генерация токена расходует энергию на перемещение весов модели из HBM в регистры вычислений. На A100 с 80 ГБ (2,04 ТБ/с, HBM2e) у той же модели теоретический нижний предел потоковой передачи весов составляет около 1,97 мс на токен. Пока декодирование ограничено пропускной способностью, добавление вычислительных ядер почти не улучшает задержку; более быстрая память, меньшие модели или лучший батчинг и управление кэшем меняют эту границу.
Фаза предзаполнения (время до первого токена)
Модель обрабатывает промпт из 1000 токенов параллельно. При заявленном в расчете допущении об эффективности вычислений 40 процентов оценка TTFT со стороны модели составляет 41,9 мс, что заметно укладывается в SLO 200 мс и оставляет остаток бюджета на сетевой прием, токенизацию и очередь.
Фаза декодирования (время на выходной токен)
Модель генерирует 256 токенов последовательно. При батче один эта фаза ограничена пропускной способностью памяти: каждый шаг передает тензор весов объемом 4 ГБ из VRAM. Батчевый шаг амортизирует этот поток на свои активные последовательности.
Деление тензора весов объемом 4 ГБ на пропускную способность 3,35 ТБ/с дает теоретический нижний предел: 1,2 мс. С учетом налога на диспетчеризацию по слоям из расчета получается смоделированный TPOT 1,57 мс. Эти накладные расходы диспетчеризации отражают совокупную стоимость запуска 8–10 отдельных ядер GPU (RMSNorm, RoPE, проекции, внимание, многослойный перцептрон, MLP) на каждый из 32 слоев модели. При батче один запуск примерно 250–300 малых ядер добавляет несколько миллисекунд накладных расходов на отправку CPU—GPU и драйвер, которые движки обслуживания смягчают, записывая граф декодирования в единый CUDA Graph. Генерация всех 256 токенов поэтому занимает 256 токенов × 1,57 мс = 0,40 с.
Память и пропускная способность
При 4-битных весах, занимающих 4 ГБ, остальные примерно 81,9 ГБ доступны под KV-кэш и рабочее пространство среды выполнения. Каждый токен требует примерно 0,131 МБ KV-кэша FP16 в конфигурации Llama 3 с 8 млрд параметров; хотя AWQ сжимает веса до 4 бит, KV-кэш остается в 16-битной точности. Этот объем на токен прямо следует из архитектуры: хранение 16-битных тензоров ключей и значений по слоям с головами группированного внимания размерности требует на токен на последовательность, сокращая объем кэша до четверти от стандартного многоголового внимания с 32 головами. Деление резерва в 72 ГиБ (около 77 ГБ) на эту стоимость на токен дает емкость около 0,6 млн токенов, поэтому при 1256 токенах GPU может держать одновременный батч примерно из 469 запросов.
Удельная экономика
Рассмотрим типичную стоимость аренды H100 SXM5 примерно в $3 в час. Взяв минимум из емкости изолированного предзаполнения и емкости удержания KV-кэша, получаем оптимистичный потолок пропускной способности 45,2 млн токенов в час и нижнюю границу удельной стоимости $0,066 за миллион токенов. Этот расчет не моделирует конкуренцию за ресурсы между предзаполнением и декодированием и не учитывает емкость батчевого декодирования.
Для больших языковых моделей емкость памяти (размер незанятой VRAM, выделенной под KV-кэш) определяет максимальное число одновременно удерживаемых запросов, тогда как вычисления предзаполнения и пропускная способность декодирования определяют реализованную пропускную способность токенов и стоимость при конкретном смеси трафика. Пропускная способность памяти ограничивает задержку декодирования при малых батчах; большие батчи амортизируют перемещение параметров и сдвигают предел в сторону вычислений или трафика KV-кэша.
Физические ограничения определяют экономику обслуживания на всем стеке: бюджеты задержки делятся на фазы предзаполнения и декодирования, теория очередей диктует размер батча и запас емкости, а пропускная способность памяти ограничивает пропускную способность декодирования. Неверное толкование этих взаимодействий ведет прямо к операционным заблуждениям и ловушкам, которые идут дальше.
Заблуждения и ловушки
Обслуживание переворачивает приоритеты обучения способами, которые нарушают интуицию из пакетной обработки. Нелинейная связь между загрузкой и задержкой, скрытые затраты на предобработку и незаметные режимы отказа перекоса обучения и обслуживания приводят к нарушению SLO, потере усилий на оптимизацию и деградации точности, которую не видит стандартный мониторинг.
Заблуждение и ловушка
Заблуждение: Снижение задержки вывода модели пропорционально снижает задержку, которую воспринимает пользователь.
Инженеры, которые оптимизируют вывод модели, ожидают пропорционального улучшения задержки, воспринимаемой пользователем, но системы обслуживания вносят источники задержки, которых нет в офлайн-бенчмарках. Под нагрузкой доминирует задержка в очереди: «Время в системе M/M/1» показывает, что при загрузке 80 процентов и времени обслуживания 5 мс среднее ожидание составляет 20 мс еще до начала вывода. Сокращение вывода с 5 мс до 2 мс меняет время обслуживания, но также смещает загрузку с 80 до 32 процентов, снижая ожидание в очереди с 20 мс до 0,9 мс: улучшение очереди в 21,2 раза, которое затмевает выигрыш вывода в 3 мс. Эта нелинейная связь между скоростью вывода и поведением очереди означает, что ускорение на уровне системы (с 25 мс до 2,9 мс, то есть в 8,5 раза) намного превышает ускорение на уровне модели (с 5 мс до 2 мс, то есть в 2,5 раза). Даже снижение времени обслуживания на 20 процентов может дать заметное улучшение для пользователя при высокой загрузке, поскольку снижает и загрузку, и прямое время вычислений. Оптимизация обслуживания требует анализа полного бюджета задержки, включая сериализацию, очередь, предобработку и постобработку, в реалистичных условиях нагрузки, а не профилирования задержки вывода в отрыве.
Заблуждение и ловушка
Ловушка: Эксплуатация инфраструктуры обслуживания при высокой загрузке ради максимальной экономической эффективности.
Команды стремятся к загрузке 90 процентов, чтобы минимизировать простаивающую емкость. В эксплуатации задержка нелинейно деградирует по мере приближения загрузки к емкости. «Время в системе M/M/1» показывает, что при загрузке 90 процентов среднее время в системе в 10 раз превышает время обслуживания. Переход с 70 до 90 процентов загрузки сокращает смоделированную стоимость инфраструктуры на 22,2 процента, но утраивает среднюю задержку. Для сервиса вывода с временем обслуживания 5 мс смоделированная задержка p99 растет примерно с 76,7 мс до примерно 230 мс при допущениях M/M/1. В этом сценарии работа при загрузке 60–70 процентов сохраняет заметно больше запаса по задержке, чем 90 процентов. Производственную цель нужно выбирать по измеренному процессу поступлений, распределению времени обслуживания, SLO, резерву на отказы и цели по стоимости.
Заблуждение и ловушка
Заблуждение: Точность при обучении гарантирует точность при обслуживании.
Инженеры полагают, что одинаковые веса модели сохраняют производительность на валидационном наборе. В эксплуатации различия предобработки могут сдвинуть входы за пределы обучающего распределения. «Перекос обучения и обслуживания» объясняет, как интерполяция при изменении размера, численная точность и время получения признаков могут создать перекос при одинаковых весах. Иллюстративный сценарий здесь снижается с 95 процентов до 90 процентов, то есть на 5 процентных пунктов; эти значения не являются сообщенным производственным инцидентом. Производственным системам нужны согласованная предобработка и мониторинг качества задачи, потому что проверки задержки и исключений не могут обнаружить этот сбой.
Заблуждение и ловушка
Ловушка: Оценка производительности системы обслуживания по средней задержке.
Инженеры следят за средней задержкой, потому что она плавно меняется и ее просто вычислить. Однако среднее не показывает, нарушается ли перцентиль, заданный SLO. Как показывает «Хвостовая задержка», при загрузке 70 процентов и времени обслуживания 5 мс средняя задержка составляет 16,7 мс, но смоделированный p99 достигает 76,7 мс, то есть разрыв в 4,6 раза, невидимый мониторингу по среднему. Поэтому сервисы сообщают о соответствующем распределении задержки и перцентиле SLO, а не только о среднем.
Заблуждение и ловушка
Заблуждение: Более крупные батчи обслуживания всегда повышают пропускную способность, не влияя на SLO задержки.
Инженеры максимизируют размер батча, полагая, что насыщение GPU улучшает экономику при производственной нагрузке. В системах обслуживания, однако, батчинг вводит компромисс «задержка — пропускная способность», которым управляет динамика очередей и которого нет в офлайн-бенчмарках. Накопление запросов в более крупные батчи увеличивает время ожидания для ранних поступлений: окно батчинга в 10 мс означает, что первый запрос ждет 10 мс до начала вывода, прямо добавляясь к задержке p99. В представительном сценарии ResNet-50/V100 из «Шаблоны трафика и стратегия батчинга» увеличение размера батча с 16 до 32 повышает пропускную способность лишь на 12 процентов, но почти удваивает время вывода на батч: с 14 мс до 25 мс. Кроме того, переменные размеры входов внутри батча могут создать накладные расходы заполнения, которые расходуют вычисления на токены-заполнители. «Компромиссы задержки и пропускной способности при динамическом батчинге» показывает, почему при жестких целях p99 большие батчи могут нарушать SLO: когда задержка формирования батча плюс возросшее время вывода на батч превышают бюджет задержки. Оптимизация батчей обслуживания требует совместной настройки размера батча, тайм-аута батча и конкурентности относительно SLO задержки при реалистичных шаблонах трафика, а не максимизации пропускной способности в отрыве.
Заблуждение и ловушка
Ловушка: Калибровка квантованных моделей на нерепрезентативных данных.
Команды могут калибровать модель на удобной выборке, даже когда она не представляет поддерживаемое распределение развертывания. Квантование после обучения определяет масштабные коэффициенты INT8 по диапазонам активаций в данных калибровки, поэтому репрезентативное покрытие важно. Иллюстративный сценарий здесь снижается с 76,1 процента до 72,9 процента, то есть на 3,2 процентного пункта; это не сообщенный производственный инцидент. Эффективное квантование требует калибровки и проверки на данных, представительных для входов, которые сервис должен обрабатывать.
Заблуждение и ловушка
Заблуждение: Задержка холодного старта важна только для первого запроса.
Инженеры оптимизируют установившуюся задержку, полагая, что большинство запросов попадает в прогретые экземпляры. Холодные старты могут накапливаться во время всплесков трафика, развертываний и восстановления. В этом иллюстративном сценарии каждому из 10 экземпляров нужно 30 с компиляции, всего 300 секунд экземпляра; параллельный прогрев делает емкость полезной примерно через 30 с. Предполагаемая задержка холодного запроса составляет 500 мс против 5 мс в установившемся режиме.
Заблуждение и ловушка
Ловушка: Масштабирование без бюджета на прогретый пул или поэтапную загрузку.
Политики автомасштабирования, которые учитывают только установившиеся реплики, занижают емкость, нужную во время всплесков трафика и развертываний. Системам обслуживания нужны прогретые пулы (заранее инициализированные резервные реплики), поэтапная загрузка моделей или контроль допуска, чтобы новые реплики становились полезными до того, как пользовательские запросы начнут на них опираться. Бюджет должен включать компиляцию, загрузку весов, инициализацию кэшей и время проверки работоспособности, потому что именно эти шаги определяют, добавляет ли горизонтальное масштабирование емкость или еще один источник хвостовой задержки.
Итоги
Обслуживание переводит проверенную модель в эксплуатационную нагрузку. Онлайн-запросы добавляют к проблемам пропускной способности, знакомым по обучению, распределение задержек, очереди, вариативность трафика и резерв на отказы. Закон Литтла связывает устойчивую долгосрочную популяцию, интенсивность поступления и время отклика; модель M/M/1 дает намеренно простое описание нелинейного роста задержки вблизи насыщения. Ни одна из них не заменяет измерений, но вместе они превращают запас и емкость в явные гипотезы, которые может проверить нагрузочное тестирование.
Эффективная оптимизация обслуживания измеряет полный путь запроса, а не только вывод модели. Выбор протокола и сериализации важен, когда транспорт составляет заметную долю бюджета; предобработка важна, когда она слишком медленно кормит ускоритель; батчинг имеет смысл только тогда, когда поступления и SLO допускают ожидание. Перекос обучения и обслуживания добавляет другой режим отказа: сервис может оставаться быстрым и без ошибок, пока несогласованные преобразования незаметно меняют его предсказания.
Парадигма развертывания, выбранная в «Рамке парадигм развертывания», меняет допустимый путь запроса. Облачный API может использовать динамический батчинг при измеренном процессе поступления, синхронизированные сенсоры задают кадровый дедлайн, а мобильная нагрузка одного потока может выбрать батч один ради отзывчивости и энергии. Сценарии MLPerf дают стандартизированные приближения этих форм; проектирование для производства все равно начинается с собственного трафика сервиса, его аппаратуры и цели.
Переворот приоритетов обучения
- Обслуживание — это экономика задержки: обучение вознаграждает пропускную способность на длинных запусках, а обслуживание распределяет фиксированный бюджет на каждый запрос между сериализацией, предобработкой, очередью, выводом, постобработкой и сетью. Оптимизация только задержки модели пропускает те этапы, которых на самом деле ждет пользователь.
- Загрузка превращается в ожидание: в приближении M/M/1 из этой главы среднее время в системе растет с пятикратного времени обслуживания при загрузке 80 процентов до десятикратного при 90 процентах. Запас не дает умеренным всплескам трафика превратиться в нарушения SLO.
- Быстрые модели выявляют налоги конвейера: когда вывод становится быстрым, декодирование изображений, токенизация и другая предобработка могут доминировать в общей задержке. Связывающей оптимизацией становится путь запроса, а не ядро нейронной сети.
- Батчинг определяется трафиком, а не привычкой: веб-поступления, смоделированные пуассоновским процессом, могут использовать динамический батчинг, синхронизированным сенсорам нужны выровненные батчи, а мобильным нагрузкам одного потока почти не представляется возможностей батчинга. Полезное окно превращает доступный запас задержки в пропускную способность, не нарушая SLO.
- Перекос ломает точность без ошибок: методы изменения размера, порядок нормализации, данные калибровки или определения признаков, которые различаются между обучением и обслуживанием, могут изменить эффективное распределение входов модели. Общие преобразования, тесты паритета и мониторинг производственных срезов снижают этот риск.
- Обслуживание LLM — это управление памятью: декодирование часто читает веса из VRAM для каждого сгенерированного токена, поэтому задержка токена ограничена пропускной способностью, если батчинг не меняет это ограничение. Раскладка KV-кэша, PagedAttention, непрерывный батчинг, точность и выбор среды выполнения определяют и одновременность, и стоимость на токен.
- Выбор среды выполнения превращается в счета за инфраструктуру: точность, компиляция графа, слияние операторов и среда выполнения обслуживания напрямую переводятся в число реплик и стоимость одного вывода. Квантование и специализированные среды выполнения могут заметно снизить требуемую емкость обслуживания, если сохраняют точность и подходят под целевую аппаратуру.
Оптимизация на уровне узла связывает операции модели с машиной, которая их выполняет. Профилирование показывает, действительно ли компиляция, слияние операторов, точность, локальность, сериализация или загрузка связывают путь запроса. Выигрыш важен, только если он переживает производственные формы входов, проверки точности и вариацию задержки. Планирование мощности переводит эту валидную пропускную способность в число реплик и удельную стоимость, как показывает пример Llama 3 в разделе «Производственный пример: обслуживание Llama 3 с 8 млрд параметров». Более быстрое ядро, которое не сокращает выделенную емкость и не улучшает SLO, не дает экономического выигрыша.
Обучение оценивается по полезной выполненной работе; онлайн-сервис — по тому, выполняют ли запросы свою цель по задержке. Каждый этап тратит один и тот же ресурс: сериализацию, предобработку, очередь, модель и ответ. Данные определяют размер входа и форму поступлений, алгоритм определяет вычисления и состояние, а машина определяет интенсивность обслуживания и стоимость перемещения данных. Очередь связывает все три нелинейно, поэтому система, укладывающаяся в бюджет при умеренном трафике, может его нарушить после небольшого всплеска. Инженерия обслуживания поэтому распределяет бюджет по пути запроса, сохраняет запас на вариативность и отказы и проверяет, что нужная доля запросов завершается до дедлайна.
От узла к фабрике
Один узел обслуживания хрупок: модели дрейфуют, обновления должны доходить до пользователей без прерывания, а реплики должны вести себя как единая надежная система. Глава «MLOps» расширяет предмет заботы от запроса до производственной фабрики: CI/CD управляет артефактами; реестры моделей и хранилища признаков согласуют обслуживание с обучением; наблюдаемость выявляет дрейф задержки и точности; а откат не дает плохим релизам превратиться в постоянные сбои.
-
Парадокс Джевонса: Уильям Стэнли Джевонс отметил в 1865 году, что повышение эффективности паровых машин на угле увеличило общее потребление угля, поскольку паровая энергия стала экономически выгодной для применений, которые раньше были слишком дорогими (Jevons, 1865). То же может происходить и с выводом ИИ: каждое снижение стоимости в 10 раз открывает классы приложений, которые были экономически невозможны при прежней цене, и совокупный спрос растет сильнее, чем выигрыш в эффективности. Поэтому более дешевый вывод может увеличить, а не уменьшить общий спрос на парк GPU. В ИИ эффективность и спрос часто дополняют друг друга, а не заменяют. ↩
-
Целевой уровень обслуживания (SLO) и соглашение об уровне обслуживания (SLA): SLO — это внутренняя цель (например, «задержка p99 ниже 50 мс»), а SLA — внешнее договорное обязательство, нарушение которого может повлечь компенсации или штрафы. Команды часто задают SLO строже, чем SLA, чтобы сохранить запас безопасности. Для обслуживания ML на SLO могут влиять как качество задачи, так и задержка вывода, что создает многомерные цели: улучшение одного измерения (например, развертывание более крупной модели ради точности) может нарушить другое (задержку). ↩
-
Сервер вывода: TensorFlow Serving от Google (Olston et al., 2017) помог утвердить разделение логики модели и инфраструктуры обслуживания; Triton от NVIDIA (NVIDIA, 2024b) расширяет этот шаблон на несколько фреймворков моделей и бэкендов. Ключевая инженерная идея в том, что планировщик и динамический батчер превращают нерегулярный трафик одиночных запросов в выполнение, удобное для ускорителя, и повышают загрузку, когда бюджеты задержки допускают батчинг. Точный прирост загрузки зависит от модели, аппаратуры, интенсивности поступления и настроенного окна батчинга. ↩
-
NCHW и NHWC (раскладки тензоров в памяти): эти аббревиатуры кодируют порядок измерений четырехмерных тензоров изображений: N (батч), C (каналы), H (высота) и W (ширина). В непрерывном тензоре NCHW каждая плоскость канала непрерывна; в NHWC каналы для одной пространственной позиции расположены рядом. Оптимизированные ядра могут предпочитать любую раскладку, а семантическое несоответствие может перепутать значения, даже если число элементов правильное. Поэтому код обслуживания должен явно указывать и смысл измерений, и любое преобразование физической раскладки. ↩
-
Protocol Buffers (Protobuf): Protobuf использует заранее заданную схему (из файла
.proto), чтобы кодировать структурированные данные в компактный двоичный формат (Protocol Buffers Authors, 2026). Поскольку схема несет имена и типы полей, полезная нагрузка на проводе не должна повторять их, как это делает JSON. Однако проводной формат все еще не совпадает с расположением объекта C++ в памяти, поэтому требуется шаг разбора, и он не дает такого же прямого доступа без копирования, на который нацелен FlatBuffers. ↩ -
FlatBuffers: слово «flat» в названии описывает конструкцию: двоичный буфер может служить и сериализованным представлением, и читаемой структурой данных, избавляя от отдельной фазы разбора или распаковки для поддерживаемых шаблонов доступа (FlatBuffers Authors, 2026). Для ML-вывода это может дать доступ без копирования к метаданным тензора: система обслуживания читает формы тензоров и смещения прямо из буфера, а не выделяет второе объектное представление. ↩
-
gRPC (gRPC Remote Procedure Call): gRPC сочетает транспорт HTTP/2 с языком описания интерфейсов и форматом сообщений, чаще всего Protocol Buffers (gRPC Authors, 2026). Важное преимущество для обслуживания — сочетание типизированных контрактов, постоянных мультиплексированных соединений, поддержки потоковой передачи и компактных двоичных сообщений. Выигрыш по размеру и задержке по сравнению с REST/JSON зависит от формы полезной нагрузки, реализации клиента и сервера, а также от того, является ли сериализация заметной долей сквозного бюджета задержки. ↩
-
Хвостовая задержка: в отличие от средних значений, перцентильные задержки выявляют влияние выбросов, характерных для обслуживания ML, например промахов кэша модели или пауз сборщика мусора. Эти редкие запросы с высокой задержкой могут непропорционально ухудшать удовлетворенность пользователей и бизнес-результаты. Поскольку величина зависит от нагрузки, сервисы проверяют целевые перцентили (p95, p99) по собственным пользователям и SLO. ↩
-
Закон Литтла: Джон Д. К. Литтл (1961) доказал, что выполняется для устойчивых долгосрочных средних при согласованных границах системы независимо от распределения поступлений, распределения обслуживания и дисциплины планирования. Эта универсальность служит опорой для планирования мощности ML: формула не требует предположений о пуассоновских поступлениях или экспоненциальном обслуживании. Однако нужны корректно определенные долгосрочные средние и согласованные определения интенсивности поступления, времени в системе и популяции. ↩
-
Очередь M/M/1: теория очередей возникла из анализа Агнера Крарупа Эрланга в 1909 году для Копенгагенской телефонной станции, где поступления вызовов моделировались как не имеющие памяти (пуассоновские). Предположение M/M/1 об экспоненциальном времени обслуживания вносит больше дисперсии, чем показывают многие нагрузки ML-вывода фиксированной формы. При той же загрузке и среднем времени обслуживания ее среднее ожидание в очереди вдвое больше значения для M/D/1; отношение для полного времени отклика приближается к двум только при высокой загрузке. Поэтому модель — полезное консервативное приближение, а не универсальное описание трафика вывода. ↩
-
Сверхлинейное расхождение задержки: точка излома планирования часто появляется задолго до полного насыщения. В уравнении среднего времени отклика M/M/1 , где — загрузка. Член расходится при : при среднее время отклика уже в 3,3 раза больше базового времени обслуживания, а при — в 10 раз. Точный рабочий предел — выбор политики и нагрузки, но попытка довести очередь, чувствительную к задержке, до насыщения создает непропорциональный рост задержки. ↩
-
Нотация Кендалла: в обозначении A/S/c (поступление / обслуживание / серверы) «M» означает марковский (без памяти) процесс, а «D» — детерминированный. M/M/1 консервативна относительно M/D/1 для среднего времени ожидания в очереди, когда времена обслуживания почти детерминированы, но ни одна из моделей не заменяет измерение процесса поступления, дисперсии времени обслуживания или хвостового поведения реальной производственной нагрузки. ↩
-
Хеджирование: термин заимствован из финансов, где встречная ставка снижает риск. Здесь избыточный запрос — ставка против медленного сервера. Это не бесплатно: в ML-системах проигравший хеджированный запрос может по-прежнему занимать время ускорителя, если вывод уже начался, поскольку обычные ядра GPU нельзя дешево отменить на середине выполнения. Поэтому политика хеджирования должна учитывать дублирующую работу наравне с выигрышем по задержке. ↩
-
Канарейка: название происходит от практики угольных шахт (начало 1900-х — 1980-е) использовать птиц, у которых высокий метаболизм делал их чувствительными к ядовитым газам раньше, чем концентрация становилась смертельной для людей. В обслуживании ML канареечные запросы выполняют ту же функцию раннего предупреждения для запросов с ветвлением: проверяя 1–2 бэкенда до запуска полного ветвления, система обнаруживает медленные или отказывающие реплики до того, как один отстающий остановит весь распределенный запрос вывода. Это важная защита, когда ширина ветвления означает, что хвостовая задержка растет вместе с максимумом времен отклика всех бэкендов. ↩
-
Прогрев: термин заимствован из компиляции «на лету» (just-in-time, JIT), где первые выполнения компилируют горячие пути в оптимизированный машинный код. Для обслуживания ML прогревочные выводы запускают компиляцию ядер CUDA, автонастройку алгоритмов cuDNN и выделение пулов памяти, которые фреймворки откладывают до первого использования. Без прогрева первый живой запрос несет всю эту настройку и может быть на порядки медленнее установившегося режима. При событиях автомасштабирования это означает, что новые реплики могут нарушать SLO в первые несколько секунд трафика. ↩
-
CUDA (compute unified device architecture): параллельная платформа вычислений NVIDIA (Nickolls et al., 2008), названная по цели объединить разнородные модели шейдеров GPU в единую архитектуру общего назначения. До CUDA программирование GPU требовало маскировать вычисления под графические операции. Контекст CUDA — структура данных, которая отслеживает выделения памяти, загруженные ядра и состояние устройства, — служит для среды выполнения шлюзом к ресурсам GPU для каждого процесса. В бессерверных или быстро масштабирующихся системах обслуживания создание контекста и ленивая загрузка модулей могут стать заметными частями задержки холодного старта (NVIDIA, 2026a). ↩
-
CUDA MPS (multi-process service): MPS создает управляющий демон, который позволяет работе CUDA из разных процессов перекрываться на GPU. Это может повысить загрузку и снизить накладные расходы на переключение контекста, когда отдельные процессы недоиспользуют ускоритель (NVIDIA, 2026d). Для обслуживания нескольких моделей MPS может помочь репликам эффективно делить потоковые мультипроцессоры GPU. Компромисс — изоляция отказов: клиенты разделяют состояние GPU, которым управляет MPS, поэтому аппаратное разбиение с помощью Multi-Instance GPU (MIG) дает более сильную изоляцию ценой фиксированной гранулярности разделов. ↩
-
MIG (multi-instance GPU): представленный вместе с архитектурой NVIDIA A100 (NVIDIA Corporation, 2020) и описанный для поддерживаемых дата-центровых GPU (NVIDIA, 2026e), MIG разбивает один физический GPU на независимые экземпляры, каждый с выделенными вычислительными ресурсами и памятью. В отличие от программного совместного использования (MPS или разделения времени), MIG обеспечивает аппаратную изоляцию между разделами. Компромисс — гранулярность: разделы должны следовать фиксированным профилям, поэтому ресурсы нельзя делить произвольно. Для обслуживания нескольких моделей MIG снижает риск влияния соседей на общем оборудовании, но гарантии SLO для каждой модели по-прежнему зависят от политики планировщика, нагрузки и выбранного профиля раздела. ↩
-
Батч (batch): от старофранцузского bache («количество, испеченное за один раз»). В вычислительной технике термин вошел в 1950-х годах для заданий, которые обрабатываются вместе без участия человека. Употребление в обслуживании ML сохраняет исходный компромисс: группировка запросов амортизирует фиксированные затраты (запуск ядра, перемещение весов) на несколько входов, но онлайн-запрос может ждать, пока батч сформируется. Обучение может использовать батчи из сотен или тысяч образцов, если позволяет память; размеры батчей обслуживания варьируются от одного до гораздо больших значений в зависимости от модели, интенсивности поступления и SLO задержки. ↩
-
Ядро (GPU): CUDA заимствовала этот термин из операционных систем около 2007 года, поскольку функции GPU представляют вычислительное «ядро» параллельных алгоритмов. В отличие от ядер ОС, которые работают непрерывно, ядра GPU — дискретные единицы параллельной работы, которые запускает CPU. Каждый запуск несет 5–20 мкс накладных расходов, не зависящих от размера батча: это несущественно для больших батчей обучения, но доминирует при обслуживании с батчем 1, где 50-слойная модель накапливает 250–1000 мкс чистых накладных расходов запуска на вывод. ↩
-
Непрерывный батчинг: также называемый «батчингом на уровне итераций» (Yu et al., 2022), а в NVIDIA TensorRT-LLM — «in-flight batching» (NVIDIA, 2026f). Различие в гранулярности планирования. Традиционный батчинг фиксирует батч на всю последовательность генерации (потенциально сотни итераций), тогда как непрерывный батчинг пересматривает его на каждом шаге генерации токена, что напоминает вытесняющее планирование процессов в ОС в отличие от исполнения до завершения. Такая более тонкая гранулярность сокращает потери от последовательностей переменной длины, где слот батча, занятый завершенной последовательностью, простаивает, пока не закончатся все остальные. ↩
-
vLLM (virtual large language model): открытая система обслуживания, которая реализует непрерывный батчинг через свой алгоритм PagedAttention (Kwon et al., 2023). Вдохновленный виртуальной памятью ОС, этот метод снижает сильную фрагментацию KV-кэша и потери на резервирование, которые ограничивают статический батчинг. Сохраняя потери KV-кэша низкими, vLLM может обслуживать большие эффективные батчи на той же аппаратуре. ↩
-
PagedAttention: название прямо отсылает к страничной организации виртуальной памяти ОС, впервые реализованной на компьютере Atlas в Манчестере (1962) для решения того же класса задач выделения памяти: программам требовалось больше памяти, чем физически доступно, а непрерывное выделение расходовало место впустую (Kilburn et al., 1962). Представленный на SOSP 2023, PagedAttention применяет эту почти шестидесятилетнюю абстракцию к памяти KV-кэша GPU. До него системы обслуживания LLM теряли 60–80 процентов памяти KV-кэша из-за фрагментации и избыточного резервирования. PagedAttention сокращает потери до менее 4 процентов, что дает в 2–4 раза большую пропускную способность на той же аппаратуре (Kwon et al., 2023). ↩
-
Пуассоновский процесс: назван в честь французского математика Симеона Дени Пуассона (1781–1840). Эта стохастическая модель описывает события, которые происходят непрерывно и независимо с постоянной средней частотой. В фиксированных календарных окнах дисперсия равна среднему, поэтому при запр./с и окне 10 мс ожидаемое число равно двум, и примерно 14 процентов окон пусты, хотя эффективный планировщик не запускает для них работу GPU. Таймер, запускаемый запросом, вместо этого начинается с одного запроса и считает только дополнительные поступления в течение окна. ↩
-
Авторегрессионность: от греческого auto- (сам) и латинского regressus (возврат). Выход «регрессирует» сам на себя. Джордж Удни Юл ввел авторегрессионные модели в 1927 году для анализа циклов солнечных пятен. В языковом моделировании каждый выходной токен обусловлен всеми ранее сгенерированными токенами, что создает последовательную зависимость и исключает параллелизм, который используется при обучении. Декодирование часто ограничено пропускной способностью весов при малых батчах; большие батчи амортизируют поток весов и могут сместить узкое место в сторону вычислений или трафика KV-кэша (Pope et al., 2023). ↩
-
KV-кэш (key-value cache): чтобы избежать избыточной работы, система кэширует векторы ключей и значений предыдущих токенов, которые остаются действительными на протяжении всей генерации. Именно этот проектный выбор вызывает описанный динамический рост памяти: размер кэша растет линейно с каждым сгенерированным токеном, что делает управление памятью главным ограничением. Для расчета из этого примера с группированным вниманием (GQA) для модели класса 70 миллиардов параметров KV-кэш FP16 составляет около 0,33 МБ на токен на последовательность. Группированное внимание (grouped-query attention, GQA), которое используется в семействе моделей Llama, например в Llama 3, делит головы ключей и значений между несколькими головами запросов и сокращает кэш по сравнению с полным многоголовым вниманием (Dubey et al., 2024). Батч из 32 запросов при контексте 8000 токенов поэтому требует примерно 80 ГБ только под KV-кэш, а без группированного или многозапросного внимания эта величина еще во много раз больше. ↩
-
Спекулятивное декодирование: маленькая «черновая» модель авторегрессионно генерирует кандидатов токенов, а большая целевая модель затем проверяет предложенный блок параллельно (Leviathan et al., 2023). Параллельная проверка возможна, потому что черновая модель заранее угадывает все токенов. Вместо последовательной генерации целевая модель оценивает весь -токенный блок за один прямой проход с каузальным вниманием, действуя как мини-предзаполнение, ограниченное вычислениями, и заменяет матрично-векторных операций, ограниченных пропускной способностью памяти, одной параллельной оценкой «матрица — матрица». Когда предложения черновой модели принимаются с долей , эффективная пропускная способность может расти с числом принятых токенов за шаг проверки. Это ломает последовательное авторегрессионное узкое место на уровне среды выполнения, а не архитектуры. ↩
-
ONNX Runtime: движок вывода Microsoft, который работает как слой абстракции над аппаратурой: одна и та же модель ONNX может выполняться на CPU, GPU NVIDIA, GPU AMD или специализированных ускорителях через подключаемые провайдеры выполнения. ONNX Runtime применяет оптимизации графа, такие как свертка констант, устранение избыточных узлов и слияние операторов. Производительность относительно настроенного движка под конкретную цель, например TensorRT, зависит от нагрузки, провайдера выполнения и аппаратуры. ↩
-
TensorRT: компилятор и среда выполнения вывода NVIDIA, которые оптимизируют модели заранее для конкретной микроархитектуры (например, Hopper или Blackwell) (NVIDIA, 2024a). Требование фазы сборки под конкретную цель позволяет компилятору генерировать слитые ядра, выбирать пути выполнения тензорных ядер, специфичные для микроархитектуры, и оптимизировать раскладку памяти (например, NC/32HW32). Получающийся непереносимый движок снижает задержку выполнения на запрос и минимизирует число ускорителей, нужных для целевой пропускной способности. ↩
-
OpenVINO (open visual inference and neural network optimization): инструментарий вывода для аппаратуры Intel, который конвертирует, оптимизирует и запускает модели на целевых устройствах Intel CPU, GPU и NPU (Intel Corporation, 2026). Специализация под прямое выполнение на аппаратуре отходит от переносимых гарантий выполнения универсальных фреймворков и позволяет компилятору выдавать векторные инструкции, настроенные под архитектуру (например, AVX-512 или AMX), и использовать исполнительные блоки низкоточных целочисленных вычислений. Хотя ускорение зависит от набора операторов и целевого процессора, такая специализация может сделать обслуживание на CPU или периферии экономически жизнеспособным для моделей, чувствительных к задержке. ↩
-
Слияние слоев: аналогично слиянию циклов в оптимизации компиляторов, где соседние циклы по одному массиву объединяются, чтобы уменьшить трафик памяти. Слияние ядер применяет тот же принцип к операциям GPU: последовательные ядра, которые записывают промежуточные тензоры в HBM и читают их обратно, объединяются в одно ядро, которое может держать данные в регистрах. ↩
-
SIMD: из таксономии архитектур вычислительных систем Майкла Флинна (1966). SIMD позволяет одной инструкции одновременно работать с несколькими элементами данных. AVX-512 Intel обрабатывает шестнадцать значений FP32 в 512-битном векторе, а AMX добавляет операции над матричными тайлами. Достижимая доля пика зависит от типа данных, формы матрицы, поведения памяти и реализации, но оптимизированные векторные ядра дают многократное ускорение относительно скалярного выполнения. ↩
-
NUMA (non-uniform memory access, неоднородный доступ к памяти): в многосокетных серверах локальный доступ к памяти дает меньшую задержку и большую пропускную способность, чем доступ к памяти удаленного сокета через межсокетную структуру. Закрепление потоков вывода за выделенными ядрами без размещения выделений тензоров рядом приводит к тому, что трафик памяти идет через межсоединение, вызывая сильные штрафы задержки, когда прямые проходы, ограниченные памятью, превышают емкость L3-кэша CPU. ↩
-
Safetensors: название подчеркивает безопасность: в отличие от неограниченной десериализации pickle, этот формат не кодирует исполняемые объекты Python (Hugging Face, 2026). Он хранит тензоры как непрерывные сырые байты с небольшим заголовком и поддерживает загрузку с отображением в память. В локальном примере бенчмарка этот путь в 10 раз быстрее сравниваемого пути контрольной точки PyTorch; результат зависит от нагрузки и хранилища и не включает передачу на дискретный ускоритель. ↩
MLOps
Назначение
Почему ML-система может одновременно быть полностью доступной и полностью ошибочной?
Обычный мониторинг часто быстро обнаруживает сбои, регрессии задержки и потери доступности, но семантические ошибки могут оставаться незамеченными в любой программной системе. ML-системы добавляют еще один скрытый режим отказа. Модель, которая испытывает дрейф данных, может продолжать выдавать внешне обычные предсказания, пока точность падает, и при этом не вызывать никаких тревог, потому что каждая проверка работоспособности (задержка, пропускная способность, доступность) остается в норме. Серверная инфраструктура доставляет модели в продакшен; эксплуатация помогает удерживать их корректность после того, как они там оказались. Качество модели может ухудшаться, потому что мир меняется: поведение клиентов сдвигается, появляются новые категории товаров, сезонные закономерности эволюционируют, а распределение, на котором училась модель, расходится с тем, с которым она сталкивается теперь. Дрейф не является неизбежностью, но для развернутых моделей это постоянный риск. В отличие от задержки или доступности, корректность может стать наблюдаемой только после появления меток или результатов последующих этапов, поэтому обнаружение деградации часто требует неидеальных сигналов и явного расследования, а не одного порога. Управление этим требует непрерывного мониторинга, который отслеживает качество предсказаний наряду с состоянием системы, сигналов дрейфа, которые запускают расследование, переобучения, когда результаты это подтверждают, и стратегий развертывания, которые проверяют новые версии моделей на производственном трафике до полного выката. Разрыв между разработкой и продакшеном — это не препятствие, которое преодолевают однажды, а состояние, которым управляют бессрочно. Операции машинного обучения (MLOps) существуют потому, что безотказная работа без измеренной точности все равно может давать неверные ответы в масштабе. Они делают совместное проектирование D·A·M непрерывным, потому что среда данных может оставаться движущейся мишенью долго после первоначального развертывания.
Цели обучения
- Объяснить, почему ML-системы могут оставаться доступными, пока качество предсказаний незаметно деградирует при сдвиге распределения
- Диагностировать технический долг на границах «данные–модель», «модель–инфраструктура» и «мониторинг в продакшене»
- Проектировать хранилища признаков, реестры и конвейеры CI/CD, которые сохраняют согласованность обучения и обслуживания и воспроизводимый откат
- Применять модель устаревания при переобучении, чтобы выбирать учитывающие стоимость триггеры и интервалы переобучения
- Внедрять многоуровневый мониторинг дрейфа, перекоса, деградации, бизнес-метрик и свежести данных
- Сравнивать канареечное, сине-зеленое и теневое развертывание, а также откат с точки зрения риска выпуска модели в продакшен
- Оценивать операционную зрелость и инвестиции, используя критичность модели, операционный риск и организационную готовность
Обзор MLOps
После того как модель построена, оптимизирована, измерена и обслуживается, система все еще должна оставаться корректной. Бенчмарк фиксирует производительность в конкретный момент времени; инфраструктура обслуживания отвечает на запросы за миллисекунды. Команда развертывает систему в продакшене, и первая неделя выглядит отлично. Трудности начинаются на второй неделе.
Распределения данных смещаются, поведение пользователей меняется, и мир уходит от условий, в которых обучалась модель. ML-модели, которые успешны на этапе разработки, могут не добиться устойчивого использования в продакшене, если после развертывания нет ответственного владельца и мониторинга. Первопричина — операционное несоответствие: мониторинг, ориентированный на доступность, отслеживает время работы сервера, задержку запросов и долю успешных запросов, тогда как мониторинг ML должен также отслеживать статистическое состояние, включая точность во времени, сдвиг входного распределения и качество предсказаний по сегментам. Модель может сильно деградировать, не выбрасывая никаких исключений, не вызывая никаких инфраструктурных тревог и сохраняя полную доступность.
Дисциплина, которая делает эти невидимые отказы видимыми, — операции машинного обучения (MLOps). MLOps объединяет мониторинг, автоматизацию и управление в производственные архитектуры, которые обнаруживают деградацию, запускают переобучение и поддерживают работоспособность системы на протяжении всего операционного срока жизни модели. Она унаследовала линию автоматизации и эксплуатации DevOps (Kreuzberger et al., 2023), но решает другой класс отказов. Обычные сервисы часто можно протестировать на детерминированных путях выполнения кода, тогда как ML-системы зависят от распределений обучающих данных, выученных параметров и условий среды, которые непрерывно смещаются.
Проблема второй недели принимает конкретную форму в иллюстративном сценарии развертывания. Представим систему прогнозирования спроса для сервиса совместных поездок. Первоначальные измерения показывают точность 94 процента, задержку p99 15 мс и сильные результаты на тестовых сегментах. К четвертой неделе точность упала до 88 процентов, но метрики инфраструктуры не показывают ничего плохого. К восьмой неделе менеджер продукта замечает, что диспетчеризация водителей неэффективна; расследование показывает, что модель не адаптировалась к новой акции конкурента, которая изменила поведение пользователей. Модель требовала переобучения шесть недель назад, но никакая система не следила за этой деградацией. MLOps предоставляет основу, чтобы обнаруживать такой дрейф, запускать переобучение и проверять новые модели до того, как пользователи почувствуют последствия.
Операционное несоответствие напрямую связано с аналитическими основами книги. Если бенчмаркинг дает датчики системы, то MLOps — это полноценная система управления. Она закрывает разрыв верификации из уравнения разрыва верификации («разрыв верификации»), непрерывно перекалибруя модель относительно меняющегося мира. MLOps может эксплуатировать локально подобранное уравнение деградации («деградация»), когда парные данные о дрейфе и результатах показывают, что изменение распределения предсказывает потерю точности; одна только расходимость не доказывает неизбежного распада. Кроме того, она формализует интерфейсы и обязанности между традиционно изолированными областями (наука о данных, инженерия машинного обучения и системная эксплуатация (Amershi et al., 2019)) с помощью непрерывного переобучения, A/B-оценки, поэтапного выката и стандартизированного отслеживания артефактов, которое поддерживает воспроизводимость и аудируемость.
Развертывание, мониторинг и сопровождение одной производственной ML-системы определяют базовую операционную единицу: узел ML — полную систему из конвейеров данных, вычисления признаков, обучения модели, инфраструктуры обслуживания и мониторинга для одного приложения машинного обучения. Эксплуатация платформы в большем масштабе (управление сотнями моделей, зависимостями между моделями, координацией нескольких регионов и инженерией ML-платформы в масштабе организации) — это продвинутые темы, которые опираются на эти основы для одной модели.
Сопровождение узла ML требует сохранения наблюдаемости на каждом интерфейсе. Технический долг накапливается, когда эти границы размываются; хранилища признаков, конвейеры CI/CD и отслеживание экспериментов обеспечивают воспроизводимость, необходимую для локализации сбоев. Когда воспроизводимые данные и артефакты на месте, непрерывный мониторинг, обнаружение дрейфа и канареечное развертывание защищают качество предсказаний от сдвига среды.
Операционная задача одной модели распадается на три различных интерфейса. Интерфейс «данные–модель» — это передача между инфраструктурой данных и обучением модели; его цель — согласованность признаков, чтобы конвейеры обучения и обслуживания вычисляли признаки одинаково. Интерфейс «модель–инфраструктура» — это переход от обученных весов к масштабируемому сервису; его задача — паритет окружений, потому что модель, которая работает в блокноте, может отказать в продакшене из-за несовпадения версий, зависимостей или среды выполнения. Интерфейс «мониторинг в продакшене» — это петля обратной связи, которая обеспечивает самокоррекцию и возвращает статистическую телеметрию1 из продакшена в обучение, поскольку ML-системы могут деградировать через дрейф, не падая.
Эти интерфейсы определяют, как компоненты инфраструктуры распределяют ответственность. Хранилища признаков стабилизируют вычисление признаков на границе «данные–модель». Реестры моделей и конвейеры развертывания сохраняют передачу «модель–инфраструктура». Мониторы дрейфа, триггеры переобучения и политики управления замыкают петлю «мониторинг в продакшене» раньше, чем скрытая деградация станет бизнес-проблемой.
Работа с этим путем обратной связи требует отличать MLOps от традиционного DevOps, устанавливать базовые принципы, которые управляют производственными решениями, и выделять паттерны долга, которые накапливаются, когда эти границы нарушаются.
Принципы и основы
Производственный релиз ML выходит за рамки диффа кода: распределения данных, выученные параметры, срезы для оценки и петли мониторинговой обратной связи становятся объектами релиза, которые меняют поведение во время выполнения. MLOps опирается на DevOps, чтобы управлять этими зависящими от данных требованиями на этапах разработки и развертывания (Kreuzberger et al., 2023); (Amershi et al., 2019). Традиционные конвейеры CI/CD проверяют детерминированный исходный код, конфигурации, модульные тесты и манифесты инфраструктуры, тогда как операции ML должны управлять артефактами, статистическая валидность которых зависит от происхождения данных и среды выполнения, которые их породили.
DevOps автоматизирует интеграцию и поставку детерминированного программного обеспечения. MLOps распространяет эту дисциплину на статистические рабочие процессы, зависящие от данных, которые охватывают получение данных, предобработку, распределенное обучение, оценку, развертывание и непрерывный мониторинг через итеративную петлю, связывающую проектирование системы, разработку модели и работу в продакшене.
MLOps
Операции машинного обучения (MLOps) — это инженерная практика вывода ML-систем в продакшен через CI/CD, оркестрацию рабочих процессов, воспроизводимость, версионирование, совместную работу, непрерывное обучение и оценку, мониторинг и петли обратной связи (Kreuzberger et al., 2023).
- Значение: Цена незамкнутой петли проявляется в устаревших предсказаниях, незаметной деградации точности и затянувшемся восстановлении. Пороги дрейфа, триггеры переобучения и целевые значения среднего времени восстановления (MTTR) — это величины, специфичные для конкретного развертывания, калиброванные по ценности предсказаний, задержке меток, риску валидации и стоимости вычислений для переобучения. Центральная инженерная дисциплина — замкнутый контур управления: измерить сдвиг распределения, оценить стоимость устаревания, запускать переобучение только тогда, когда ожидаемый прирост точности превышает стоимость выполнения и риск выката, и проверять заменяющие модели до продвижения.
- Отличие: DevOps следит за функциональной корректностью, пропускной способностью системы и доступностью инфраструктуры. MLOps вводит статистический контроль предсказательной корректности, которая может незаметно деградировать, пока время работы сервера, задержка запросов и HTTP-коды остаются полностью здоровыми.
- Типичная ошибка: Распространенное заблуждение состоит в том, что переобучение на новых данных автоматически устраняет сдвиг распределения. Переобучение без диагностики того, какое распределение сдвинулось — входные признаки (), условные распределения меток () или оба, — сохраняет исходные режимы отказа или усиливает смещение сбора данных. При ковариатном сдвиге и общей поддержке перевзвешивание выборок или стратифицированная повторная выборка восстанавливают калибровку; концептуальный дрейф требует свежих меток и адаптации модели.
Структуру бесконечной петли на «Итеративном цикле MLOps» стоит проследить, чтобы увидеть, как операционная телеметрия возвращает эмпирические данные в проектирование и инженерию, формируя непрерывную форму работы дисциплины:
Итеративный цикл MLOps: мониторинг и запуск триггеров возвращают производственные данные в проектирование и разработку модели, превращая требования, инженерию, тестирование и развертывание в непрерывный операционный цикл.
Операционная сложность и финансовый риск внедрения машинного обучения без дисциплинированных операционных инструментов ясно проявляются в сервисе рекомендаций. Новая модель ранжирования сначала повышает конверсию, но постепенный дрейф данных понемногу ухудшает качество предсказаний. Поскольку традиционный мониторинг отслеживает время работы сервера, задержку запросов и долю успешных HTTP-запросов, а не точность вывода, потери остаются невидимыми до тех пор, пока через несколько месяцев обзор совокупной выручки их не выявит. MLOps предоставляет операционные средства контроля, которые выявляют эти скрытые статистические сбои до того, как они накопятся в значительный финансовый ущерб.
Базовые принципы
Этот сбой в рекомендациях иллюстрирует системную закономерность: без дисциплинированного операционного контроля даже точные модели незаметно выходят из строя в продакшене. Диагностика такого инцидента требует структурированной последовательности операционных проверок. Когда выручка падает, первым приоритетом становится восстановление развернутого состояния модели, что требует воспроизводимости. Следующий приоритет — определить, сохраняют ли конвейеры данных, задания обучения, пути обслуживания и сервисы мониторинга четкие границы, позволяющие локализовать дефект, что требует разделения ответственности. Если признаки онлайн-обслуживания расходятся с признаками офлайн-обучения, согласованность обеспечивает инвариант, который предотвращает повторяющийся перекос. Если дрейф начинается раньше, чем жалуются пользователи, наблюдаемая деградация превращает скрытый сбой в действенный сигнал тревоги. Наконец, когда переобучение возможно, но вычислительно дорого, автоматизация с учетом стоимости оценивает, оправдывает ли вмешательство затраты вычислений и риск выката. Эти принципы определяют контроли в операционной последовательности, которую команда инженеров выполняет, чтобы локализовать и устранить сбои в продакшене.
Воспроизводимость
Воспроизводимость требует, чтобы каждый артефакт2, влияющий на поведение модели, был версионирован и прослеживаем. Этот принцип распространяется за пределы репозиториев кода и охватывает входные наборы данных, схемы признаков, конфигурации гиперпараметров и среды выполнения. «Воспроизводимость модели» формально выражает эту зависимость:
где обозначает неизменяемый хеш версии, а фиксирует недетерминированность выполнения. Точное воспроизведение требует зафиксировать все четыре версионированных входа вместе со стартовыми значениями генератора случайных чисел (seed), порядком выборок загрузчика данных, детерминированными редукциями на GPU (которые исключают дрейф чисел с плавающей точкой из-за неассоциативных асинхронных атомарных сложений) и одинаковыми архитектурами аппаратного ускорителя.
Разделение ответственности
Разделение ответственности декомпозирует системы MLOps на отдельные функциональные слои, которые могут развиваться независимо, как показывает «Разделение ответственности в MLOps»:
| Слой | Ответственность | Изменяется при |
|---|---|---|
| Слой данных | Вычисление, хранение и обслуживание признаков | Эволюции схемы данных |
| Слой обучения | Разработка модели, оптимизация гиперпараметров | Развитии алгоритмов |
| Слой обслуживания | Вывод, масштабирование, управление задержкой | Паттернах трафика |
| Слой мониторинга | Обнаружение дрейфа, отслеживание качества | Бизнес-требованиях |
Разделение ответственности в MLOps: каждый слой решает отдельную задачу и развивается со своей скоростью — слои данных, обучения, обслуживания и мониторинга. Такое разделение позволяет масштабировать и обновлять их независимо и уменьшает радиус поражения при необходимых изменениях.
Императив согласованности
Архитектурные границы в «Разделении ответственности в MLOps» позволяют обновлять среды выполнения обслуживания без переобучения моделей, менять пороги оповещений без повторного развертывания и изменять конвейеры приема данных, сохраняя контракты интерфейсов. Эта архитектурная независимость безопасна только тогда, когда обучение и обслуживание обрабатывают признаки одинаково, поэтому паритет обучения и обслуживания становится императивом согласованности. Финансовые последствия этого расхождения описывает уравнение стоимости перекоса:
где — доля запросов, затронутых перекосом обучения и обслуживания, — общий объем запросов за расчетный период, а — средняя бизнес-стоимость одного ошибочного предсказания.
Для системы, которая обслуживает 1 000 000 запросов в день, при этом 1 процент ошибок из-за перекоса стоит $0,10 каждая, годовая стоимость перекоса достигает $365 000. Это показывает, почему механизмы согласованности — инвестиции с измеримой финансовой отдачей. Общие хранилища признаков, унифицированные библиотеки извлечения признаков на C++ или Rust, которые вызываются одинаково при офлайн-обучении и онлайн-обслуживании, и автоматические тесты валидации схемы обеспечивают этот паритет непосредственно на границе системы.
Наблюдаемая деградация
Наблюдаемая деградация требует, чтобы ML-системы делали скрытые сбои видимыми через непрерывные измерения. Точность модели деградирует вдоль непрерывного статистического спектра, а не отказывает как дискретное двоичное падение. Временная сигнатура наблюдаемого сбоя — внезапный спад, постепенный дрейф или локализованное угасание в конкретной когорте — определяет и механизм обнаружения, и операционный ответ.
Автоматизация с учетом стоимости
Автоматизация с учетом стоимости уравновешивает вычислительные затраты и выигрыш в точности. Пусть — ожидаемый прирост точности в процентных пунктах, — денежная ценность одного процентного пункта прироста за горизонт решения, — стоимость вычислений и труда одного запуска переобучения, а — ожидаемая стоимость сбоя валидации и выката. «Решение о переобучении» описывает этот компромисс:
Неравенство работает как операционный барьер решения, а не как неограниченный триггер: автоматизированный конвейер должен запускать переобучение только тогда, когда эмпирические данные показывают, что ожидаемый прирост точности превышает стоимость выполнения и риск выката. Этот экономический компромисс управляет триггерами переобучения, порогами валидации и шлюзами выката; «Конвейеры обучения» формализует эту модель для расчета оптимальных каденций переобучения.
Чтобы решить, когда вмешиваться, каждую сигнатуру отказа нужно сопоставить с подходящей телеметрией и операционной контрмерой, как показано в «Типы деградации»:
| Тип деградации | Механизм обнаружения | Стратегия реакции |
|---|---|---|
| Внезапное падение точности | Пороговые оповещения | Диагностика; откат, если причина в выпуске |
| Постепенный дрейф | Анализ трендов | Диагностика, затем переобучение, если оправдано |
| Деградация подгруппы | Мониторинг когорт | Целевой сбор данных |
| Рост задержки | Отслеживание перцентилей | Масштабирование инфраструктуры |
Стратегии обнаружения деградации: четыре сигнатуры отказа сопоставлены с детекторами и операционными реакциями. Внезапные падения требуют немедленной диагностики и могут потребовать отката, тогда как постепенная или подгрупповая деградация требует диагностики перед переобучением или целевым сбором данных.
Каждый базовый принцип становится операционным, только будучи привязанным к конкретной измеримой метрике («Сводка принципов MLOps») — от хешей артефактов до чистой ценности переобучения:
| Принцип | Ключевая идея | Основная метрика |
|---|---|---|
| Воспроизводимость | Версионировать все артефакты | Полный хеш артефакта |
| Разделение ответственности | Независимая эволюция слоев | Показатель связанности слоев |
| Согласованность | Обучение равно обслуживанию | Доля перекоса признаков |
| Наблюдаемая деградация | Делать сбои видимыми | Время обнаружения |
| Автоматизация с учетом стоимости | Оптимизировать полную стоимость | Чистая ценность переобучения |
Сводка принципов MLOps: краткий справочник по пяти базовым принципам, которые определяют все решения в инструментах и практике MLOps.
Как эти принципы проявляются на практике, зависит от нагрузки. Рекомендательная система дрейфует ежедневно по мере смены предпочтений пользователей; модель TinyML, развернутая на встроенном оборудовании, может работать без изменений месяцами. Стратегия мониторинга должна соответствовать архетипу.
Стратегия мониторинга по архетипам
Доминирующие режимы отказа и приоритеты мониторинга различаются у разных архетипов нагрузок. «Стратегия мониторинга по архетипу нагрузки» сравнивает четыре репрезентативных архетипа по паттерну дрейфа, метрике мониторинга и примерному триггеру переобучения:
Архетип Доминирующий паттерн дрейфа Основная метрика мониторинга Пример триггера переобучения ResNet-50 (вычислительный зверь) Визуальный сдвиг распределения (освещение, камера, новые классы объектов) Точность на отложенной выборке (эталонная истина доступна) Точность падает более чем на 2% от базового уровня (ежемесячно для стабильных областей) GPT-2 (пожиратель полосы пропускания) Дрейф словаря, сдвиг тем, новые сущности Перплексия на живом трафике (эталонная истина не нужна) Перплексия растет более чем на 10%; обнаружен новый словарь (еженедельно для новостных областей) DLRM (разреженный разброс) Сдвиг поведения пользователей, обновление каталога, холодные товары Разница CTR/CVR относительно исторических когорт Вовлеченность падает более чем на 5%; обновление каталога (ежедневно для e-commerce) DS-CNN (жесткое ограничение) Изменение акустической среды (сдвиг уровня шума) Коэффициент заполнения (пробуждения в час) + доля ложных срабатываний Ложные пробуждения более 1%; разряд батареи выше спецификации (ежеквартально, OTA-обновление) Стратегия мониторинга по архетипам нагрузки: иллюстративные отправные точки для стратегии мониторинга. Реальные пороги нужно калибровать по задержке меток, объему трафика, бизнес-риску и бюджету усталости от оповещений в конкретном развертывании.
Системный вывод: доступность эталонной разметки и физические узкие места определяют дизайн мониторинга. Модели компьютерного зрения, ограниченные вычислениями (ResNet-50), которые ограничены , отслеживают точность на отложенной выборке; языковые и рекомендательные модели с интенсивным использованием памяти (GPT-2, DLRM), ограниченные , могут опираться на перплексию или неявные клики; модели для микроконтроллеров (DS-CNN), ограниченные жесткой задержкой и лимитами энергии, отслеживают коэффициент заполнения и частоту ложных пробуждений. Каденция переобучения ограничена задержкой меток, доступом к развертыванию, стоимостью валидации и скоростью наблюдаемых изменений.
Эти принципы отвечают на повторяющиеся эксплуатационные сбои: концептуальный дрейф,3 проблемы качества данных (Schelter et al., 2018) и скрытую деградацию после развертывания. Эти факторы порождают расхождение между MLOps и традиционным DevOps: состояние системы нельзя измерить одной только доступностью или задержкой. Операционная дисциплина требует мониторить статистические свойства распределений данных и выходов модели, перенося внимание с базовой доступности сервера на предсказательную корректность.
MLOps координирует более широкую экосистему заинтересованных сторон и вводит специализированные практики, такие как версионирование данных,4 версионирование моделей и непрерывный статистический мониторинг, которые выходят за рамки традиционной программной инженерии. Такой расширенный охват превращает эксплуатацию модели в непрерывную петлю обратной связи, а не в линейный конвейер выпуска, что сопоставлено по измерениям в таблице «MLOps и DevOps»:
| Аспект | DevOps | MLOps |
|---|---|---|
| Цель | Оптимизация процессов разработки и эксплуатации программного обеспечения | Оптимизация жизненного цикла моделей машинного обучения |
| Методология | Непрерывная интеграция и непрерывная поставка (CI/CD) для разработки ПО | Похожа на CI/CD, но ориентирована на рабочие процессы машинного обучения |
| Основные инструменты | Системы контроля версий (Git), инструменты CI/CD (Jenkins, Travis CI), управление конфигурацией (Ansible, Puppet) | Инструменты версионирования данных, инструменты обучения и развертывания моделей, конвейеры CI/CD, адаптированные для ML |
| Основные задачи | Интеграция кода, тестирование, управление выпусками, автоматизация, инфраструктура как код | Управление данными, версионирование моделей, отслеживание экспериментов, развертывание моделей, масштабируемость рабочих процессов ML |
| Типичные результаты | Более быстрые и надежные выпуски ПО, улучшенное взаимодействие команд разработки и эксплуатации | Эффективное управление и развертывание моделей машинного обучения, улучшенное взаимодействие специалистов по данным и инженеров |
MLOps и DevOps: MLOps распространяет принципы DevOps на специфические требования систем машинного обучения, включая версионирование данных и моделей, а также непрерывный мониторинг качества модели и дрейфа данных. MLOps объединяет более широкий круг заинтересованных сторон и делает упор на воспроизводимость и масштабируемость за пределами традиционных процессов разработки ПО.
Петля MLOps
MLOps не линейна, она циклична.
Петля обратной связи
- Замыкание петли: как производственные метрики (например, сигналы дрейфа) запускают новые циклы обучения?
- Триггер переобучения: можно ли отличить сигнал дрейфа, который требует расследования, от данных о результатах, которые требуют переобучения?
Артефакты
- Версионирование: версионируете ли вы данные, код, модель и среду вместе?
Каждая итерация операционной петли может вводить зависимости данных, взаимодействия моделей и дрейф конфигурации, невидимые для стандартного тестирования ПО. Эти накапливающиеся издержки составляют технический долг: инженерная концепция, которая превращает скрытые статистические режимы сбоя в измеримые обязательства.
Если традиционный DevOps занимается пропускной способностью развертывания и масштабированием сервисов, MLOps должна выделять технический долг и обслуживать его, прежде чем он дестабилизирует систему обслуживания. Размывание границ показывает, почему модульный дизайн конвейера обязателен; каскады исправлений показывают, почему строгое версионирование артефактов и мгновенный откат необходимы; необъявленные потребители оправдывают обязательные схемы признаков и контрактные тесты. Эти паттерны долга дают диагностический словарь и конкретные режимы отказа, которые мотивируют специализированную инфраструктуру MLOps, рассматриваемую в остальной части книги.
Технический долг
Скрытые режимы отказа в продакшене конкретно проявляются как технический долг (Sculley et al., 2015): сдвиги распределения вышестоящих данных, петли обратной связи и непроверенные зависимости конвейера вызывают деградацию точности, которая накапливается со временем. Эти сбои незаметно накапливаются на границах систем и требуют операционных архитектур, которые учитывают статистическое поведение и зависимости данных наряду с традиционными программными контрактами. Метафора технического долга, впервые предложенная в программной инженерии в 1990-х,5 сравнивает упрощения в реализации с финансовым долгом: краткосрочная скорость поставки обменивается на постоянные издержки сопровождения и системный риск (Cunningham, 1992). В ML-системах этот долг выходит за пределы исполняемого кода и включает статистические зависимости и непроверенные потоки данных. Систематические рубрики оценки, такие как ML Test Score (Breck et al., 2017), дают основу для количественной оценки этого долга и проверки готовности к продакшену на границах данных, моделей и инфраструктуры.
Технический долг в ML
Технический долг в машинном обучении — это накапливающаяся стоимость сопровождения и изменений, которую создают неявные зависимости данных, спутанные признаки и необъявленные потребители в ML-системах; возникающие обязательства могут также проявляться как незаметная деградация точности.
- Значение: Анализ Google производственных ML-систем утверждает, что код модели — лишь малая часть окружающей системы; более крупная операционная поверхность включает сбор данных, извлечение признаков, конфигурацию, инфраструктуру обслуживания, мониторинг и управление процессами (Sculley et al., 2015). Специфические для ML драйверы долга усиливают это: изменение одного входного признака может незаметно сдвинуть выученное представление всех остальных признаков (запутывание), модель, обученная исправлять ошибки другой модели, создает хрупкую цепочку зависимостей (каскады исправлений), а нижестоящие системы, которые используют выходы модели без явных контрактов, становятся необъявленными потребителями, которые незаметно ломаются при обновлении модели.
- Отличие: ML-технический долг включает системные зависимости и зависимости на уровне данных, которые ревью кода и обычные тесты, сосредоточенные на коде, могут пропустить. Он может замедлять разработку и ухудшать качество предсказаний, даже когда метрики доступности остаются в норме.
- Типичная ошибка: Распространенное заблуждение состоит в том, что «лучший код» решает проблему технического долга в ML. На деле это проблема системной архитектуры: долг накапливается, когда предположения обучающего распределения (диапазоны признаков, смысл меток, свежесть данных) не закреплены как контракты времени выполнения на границе системы.
Расчет точки безубыточности делает динамику стоимости технического долга конкретной. Команды часто сопротивляются инвестициям в автоматизацию, потому что ручные процессы кажутся быстрее на ранней стадии разработки, но это преимущество исчезает, как только повторяющиеся ручные вмешательства превышают первоначальную стоимость автоматизации.
Накопленная ручная работа догоняет разовую инвестицию в автоматизацию примерно на двадцатой неделе.
Ручные операции быстро упираются в потолок производительности, потому что код модели составляет лишь небольшую долю реального развертывания. Как показано на «Скрытой инфраструктуре ML-систем», операционная поверхность охватывает десять взаимосвязанных компонентов — от проверки данных до управления машинными ресурсами, каждый из которых способен накапливать скрытые обязательства. Хотя основной код ML занимает один блок, остальные девять требуют непрерывного операционного обслуживания.
Скрытая инфраструктура ML-систем: код ML — один из десяти компонентов, расположенных вокруг ML-системы в центре, наряду со сбором данных, проверкой данных, извлечением признаков, конфигурацией, управлением машинными ресурсами, инфраструктурой обслуживания, мониторингом, инструментами анализа и инструментами управления процессами. Важно число: моделирование занимает один блок, а остальные девять составляют операционную поверхность, которую также должно нести развертывание. Источник: (Sculley et al., 2015).
Совокупная стоимость ручных операций
Задача: зачем строить автоматизированные конвейеры, если ручное переобучение быстрее?
Механизм: ручная работа накапливается со временем.
- Ручное переобучение: 4 часа инженерного времени в неделю.
- Построение конвейера: 80 инженерных часов (однократно).
Расчет:
- Результат: 80 инженерных часов 4 часа в неделю = 20 недель.
- Ловушка: это предполагает, что модель никогда не меняется.
- Ограничение: дополнительные признаки могут увеличить ручные усилия.
- Последствия: через 1 год ручная команда по-прежнему тратит 4 часа в неделю на сопровождение. В этом упрощенном расчете команда с конвейером несет 0 повторяющихся часов.
Контекст: центральный закон системной инженерии состоит в том, что стоимость сопровождения системы на протяжении всей ее жизни может превышать стоимость ее создания. В ML технический долг особенно опасен, потому что он часто управляется данными, а не кодом: идеально написанный код все равно может отказать, если обрабатываемые им данные сместятся. Измерение — граница управления: без телеметрии команда не может сказать, сокращает ли работа по сопровождению долг или просто скрывает его.
Системный вывод: автоматизация решает проблему ограничения емкости, а не только скорости. Ручная команда в конце концов достигает точки, когда сопровождение существующих моделей мешает ей развертывать новые. MLOps отвечает систематической наблюдаемостью и автоматизацией. Без инфраструктуры мониторинга, которая делает скрытые сбои видимыми, команда накапливает долг и строит систему, которой все труднее управлять.
Хотя автоматизация решает повторяющиеся операционные издержки ручного переобучения, она не может предотвратить архитектурное разложение. Развернутые системы накапливают скрытую сложность через системные режимы сбоя, которые возникают из статистических связей, а не из детерминированной логики. «Таксономия технического долга ML» сопоставляет шесть паттернов долга в областях данных, моделей и инфраструктуры, фиксируя режимы сбоев, которые операционные архитектуры должны изолировать.
Таксономия технического долга ML: шесть паттернов долга расходятся от скрытого технического долга: долг конфигурации, петли обратной связи, долг данных, долг конвейера, каскады исправлений и размывание границ. Окружающие подписи обозначают связанные с ними паттерны отказов.
Размывание границ
Растворение границ системы — основной режим отказа статистического программного обеспечения. В традиционном ПО модульная инкапсуляция дает четкую изоляцию: компоненты взаимодействуют через типизированные API, поэтому внутренние реализации могут меняться, а поведение системы остается детерминированным. ML-системы размывают эти границы, потому что поведение компонента зависит от эмпирического распределения входящих данных, а не от синтаксических определений интерфейсов. Изменение форматирования или нормализации на входе может пройти все модульные тесты и при этом незаметно сдвинуть распределения признаков и ухудшить точность нижестоящей модели. Такая неявная связанность через конвейеры данных создает незаметные для мониторинга зависимости между инженерией признаков, конвейерами обучения и конечными точками обслуживания.
Это размывание порождает запутывание: зависимости между признаками и компонентами становятся настолько переплетенными, что локальные изменения требуют глобальной координации. Этот режим отказа отражает принцип CACE: Change Anything Changes Everything (изменение чего угодно меняет все). Когда у систем нет строгих распределительных границ, корректировка одного кодирования признака или порога фильтрации данных меняет выученные веса во всей модели. Например, изменение стратегии разбиения непрерывного признака на интервалы сдвигает дисперсию и структуру ковариаций признака, из-за чего ранее откалиброванная модель начинает работать хуже и вынуждает к повторным калибровкам нижестоящих сервисов.
Защита от размывания границ требует архитектурной модульности, которая обеспечивается во время выполнения. Компонентам нужны явные контракты данных, которые фиксируют статистические инварианты: допустимые диапазоны признаков, допуски на пропуски и пороги дрейфа. Разделение приема данных, генерации признаков и логики вывода создает границы проверки, на которых распределения данных можно проверить до того, как они достигнут весов модели. Поскольку размывание границ остается незаметным на этапе прототипирования, явные контракты схем и проверки инвариантов — единственная надежная защита от ползучей статистической связанности.
Каскады исправлений
Если размывание границ не устранено, инженерные вмешательства часто запускают каскад исправлений: исправление конкретного дефекта модели вспомогательной заплаткой вносит вторичные ошибки в другом месте, и требуются новые компенсирующие исправления, которые дестабилизируют весь конвейер. В ML-системах такие каскады особенно опасны, потому что изменения распространяются через статистические зависимости, а не через детерминированные ветви кода. Переобучение модели, чтобы исправить конкретный кластер ложноположительных срабатываний, может ухудшить точность на ранее стабильных когортах. Добавление вспомогательной модели, которая переопределяет предсказания на граничных случаях, вводит некалиброванные остатки, искажающие работу нижестоящих потребителей. Каждая заплатка запускает последующие исправления, и затраты инженеров быстро превышают стоимость переобучения на чистых данных.
«Каскады исправлений» делает структуру каскада видимой как цепочку зависимых моделей. Каждая модель обучена исправлять ошибки предыдущей: модель B компенсирует остаточные ошибки модели A, модель C компенсирует ошибки модели B и так далее по всей цепочке. Такая конструкция держится, пока не изменится модель выше по цепочке. Когда модель A переобучают, чтобы устранить один режим отказа, каждая нижестоящая модель, настроенная на ее прежнее поведение, сразу становится недействительной, и каждую нужно исправлять заново. Красные дуги прослеживают это распространение и показывают, как ремонт, который выглядел локальным, затрагивает всю цепочку. Изменение вверху вызывает наибольший объем переработки, тогда как изменение внизу почти ничего не стоит. Для операционной команды один запрос на изменение может запустить согласованное переобучение всей цепочки.
Каскады исправлений: каждая модель обучена исправлять ошибки предыдущей, образуя цепочку зависимостей. Изменение верхней модели сразу делает недействительными все нижестоящие исправления, превращая локальный ремонт в каскадную переработку по всей цепочке, причем каждое последующее исправление требует собственного цикла переобучения.
Это распространение превращает локальные ремонты моделей в зависимости инженерии на всем жизненном цикле. Частым источником выступает последовательная разработка моделей: тонкая настройка или повторное использование уже существующей модели ускоряет первоначальное развертывание, но связывает нижестоящую систему со скрытыми допущениями и смещениями представления исходной модели. Со временем унаследованные свойства превращаются в жесткие архитектурные ограничения, которые усложняют будущие обновления.
Например, дообучение существующей модели оттока клиентов для новой линейки продуктов наследует кодирование признаков и пороги калибровки базовой модели. Если новый продукт демонстрирует другие паттерны вовлеченности пользователей, заплатка в виде вспомогательных правил постобработки создает хрупкий многоступенчатый конвейер. Когда точность падает, инженерные команды обнаруживают, что корневой отказ находится на несколько слоев выше, в исходных соглашениях о разметке.
Смягчение каскадов исправлений требует баланса между повторным использованием компонентов и переработкой. Тонкая настройка снижает первоначальные затраты вычислений и сбора данных, тогда как обучение с нуля дает полный контроль над допущениями модели и устраняет зависимости от ошибок вышестоящей модели. Архитектурное решение зависит от сходства задач, согласованности ковариат и постоянной стоимости сопровождения цепочки моделей. Там, где зависимые модели неизбежны, системы должны разделять их с помощью артефактов моделей с закрепленными версиями и замороженных промежуточных представлений.
Проблемы интерфейсов и зависимостей
Размывание границ и каскады исправлений порождаются зависимостями интерфейсов, которые обходят формальные программные контракты. Традиционные зависимости ПО объявляются через инструкции импорта, менеджеры пакетов и схемы RPC, что позволяет инструментам статического анализа строить графы зависимостей. В системах машинного обучения зависимости прячутся внутри потоков данных. Когда выход модели A записывается в хранилище данных, а затем поступает как обучающий признак для модели B, связанность существует только в конвейере данных и невидима для статического анализа кода.
Скрытая связанность часто проявляется как необъявленные потребители: нижестоящие сервисы используют предсказания модели без формальной регистрации и соглашений об уровне обслуживания. Когда вышестоящую модель переобучают или распределение ее выходов сдвигается, эти незарегистрированные потребители молча ломаются. Например, кредитная оценка риска, которую использует автоматизированная маркетинговая система, может изменить пул заявителей и вернуть сдвинутые распределения в будущие запуски обучения, порождая неконтролируемое смещение отбора. Эту уязвимость усиливает долг зависимостей данных, который накапливается, когда ML-конвейеры принимают неверсионированные таблицы, нестабильные признаки из вышестоящих источников или сигналы с волатильными распределениями.
Устранение долга интерфейсов требует границ, которые обеспечивает инфраструктура: строгой аутентификации и регистрации для конечных точек предсказаний моделей, машиночитаемых контрактов схем для хранилищ признаков и автоматического отслеживания происхождения данных, которое регистрирует потребителей до предоставления доступа на чтение.
Проблемы эволюции системы
Даже хорошо спроектированные ML-системы с документированными интерфейсами сталкиваются с проблемами эволюции, которых нет в детерминированном программном обеспечении.
Самая коварная из этих динамик — петля обратной связи, в которой развернутая модель влияет на распределение данных, на которых обучаются ее преемники. Рекомендательные системы наглядно иллюстрируют этот паттерн: предлагаемый контент определяет вовлеченность пользователей, клики формируют последующие обучающие выборки, и модель усиливает собственные прошлые выборы, лишая невыбранный контент показов. В продакшене этот режим отказа часто проявляется как растущее расхождение качества между демографическими когортами: недопредставленные группы получают субоптимальные предсказания, порождая искаженные журналы вовлеченности, которые дальше ухудшают представленность когорт в последующих запусках переобучения. Чтобы обнаружить петли обратной связи, нужен мониторинг, стратифицированный по когортам, который отслеживает распределения ошибок по пользовательским сегментам, а не полагается на агрегированные метрики валидации.
За повторяющиеся циклы развертывания рабочие процессы накапливают долг конвейера и конфигурации, превращаясь в джунгли из импровизированных клеевых скриптов и расходящихся файлов гиперпараметров. Когда у конвейеров нет модульных интерфейсов, команды копируют существующие скрипты вместо рефакторинга хрупких загрузчиков данных, создавая избыточные конвейеры, которые обрабатывают одни и те же сырые входы с тонкими несоответствиями. Усугубляет ситуацию то, что быстрое прототипирование часто встраивает бизнес-логику прямо в скрипты подготовки признаков. Управление эволюцией конвейеров требует движков оркестрации рабочих процессов с неизменяемыми определениями ориентированных ациклических графов (DAG), строгой валидацией параметров и версионированием конфигураций, которое ведется в той же системе контроля версий, что и код модели.
Долг кода и архитектуры
Помимо статистической связанности и потоков данных, ML-системы накапливают технический долг на уровне кода, который парализует рефакторинг инфраструктуры (Sculley et al., 2015).
На уровне реализации клеевой код часто доминирует в производственных репозиториях. Для передачи тензоров и записей между универсальными ML-фреймворками, специализированными конвейерами признаков и движками обслуживания с низкой задержкой пишутся огромные обертки интеграции. В продакшене этот шаблонный код может занимать до 95 процентов кодовой базы, тогда как основная ML-логика составляет всего 5 процентов. Возникающая жесткая связь с API конкретных фреймворков создает серьезные издержки сопровождения: даже небольшие обновления фреймворка вынуждают переписывать обширную интеграционную обвязку. Изоляция сторонних библиотек за стабильными внутренними интерфейсами не дает внешней текучке API распространяться по всему стеку обслуживания.
Быстрые эксперименты дополнительно обременяют кодовые базы мертвыми экспериментальными путями выполнения. Исследовательские итерации оставляют устаревшие ветви, альтернативные преобразования признаков и отброшенную логику оценки. В отличие от традиционного мертвого кода, который статические анализаторы помечают, а компиляторы удаляют, экспериментальные ветви ML часто остаются исполняемыми во время работы, потому что их охраняют динамические флаги конфигурации. Эти спящие ветви расширяют матрицу тестов, усложняют регрессионную проверку и затемняют точный граф выполнения, работающий в продакшене. Соблюдение графиков устаревания и удаление выведенных из эксплуатации флагов признаков не дает экспериментальным остаткам дестабилизировать среду обслуживания.
В основе обоих паттернов лежит долг абстракций: традиционная программная инженерия опирается на зрелые абстракции, такие как объекты, интерфейсы и модули, тогда как инженерии машинного обучения не хватает универсальных абстракций для таких понятий, как признак, срез обучающей выборки или состояние жизненного цикла модели. Без стандартизированных примитивов команды часто заново изобретают самодельные абстракции или вовсе отказываются от инкапсуляции. Компоненты инфраструктуры, такие как хранилища признаков, реестры моделей и стандартизированные сервисы предсказаний, смягчают этот долг, предоставляя единые абстракции для преобразования признаков, происхождения артефактов и маршрутизации вывода.
Помимо этих структурных паттернов, (Sculley et al., 2015) выделяют системные запахи, которые сигнализируют о нарастающем долге: Plain-Old-Data Type Smell (передача непроверенных сырых чисел с плавающей точкой и массивов строк вместо предметных типов с проверкой инвариантов), Multiple-Language Smell (склейка Python, SQL, C++ и shell-скриптов на границе обучения и обслуживания) и Prototype Smell (перенос одноразовых исследовательских блокнотов прямо в продакшен-обслуживание без повторной инженерии). Рассмотрение погашения долга как обычной операционной дисциплины, а не как экстренного вмешательства, не дает этим запахам кода снизить эффективность кластера.
Технический долг на практике
Эти паттерны долга — не теоретические крайние случаи; они представляют собой доминирующие режимы отказа производственных ML-развертываний в масштабе. Когда статистические зависимости и потоки данных без контрактов взаимодействуют с реальными рабочими средами, неуправляемый технический долг непосредственно переходит в системные сбои и коммерческие провалы.
Производственные паттерны долга
Первая пара примеров показывает связанность через поведение модели. Система рекомендаций YouTube иллюстрирует, как крупные рекомендательные системы учатся на шумных сигналах пользовательского поведения, а цели ранжирования, равный вес каждого пользователя и живая A/B-оценка становятся частью проектирования системы, а не деталями офлайн-оценки (Covington et al., 2016). Процесс оценки жилья и покупки недвижимости Zillow в ходе его проекта iBuying показал вариант каскада исправлений.6 Допущения об оценке и запасах распространились на решения о покупках; последующие исправления затем дестабилизировали решения о запасах и ценах, что вынудило повторно проверять модели и в конце концов привело к полному откату, когда в 2021 году компания свернула направление iBuying.
Вторая пара примеров показывает связанность через владение и конфигурацию. Системы автоматизации вождения, критичные к безопасности, иллюстрируют риск необъявленных потребителей с другой стороны: когда выходы автоматизированного управления, ожидания водителя и обязанности подсистем не описаны достаточно четко, операционные сбои могут пересекать границы компонентов, вместо того чтобы оставаться локальными (National Transportation Safety Board, 2017). Итерации ленты новостей Facebook показывают конфигурационную версию той же проблемы управления. Быстрые эксперименты и изменения ранжирования требуют прослеживаемых настроек и явных целей; иначе поведенческие изменения после развертывания трудно поддаются аудиту (Engineering, 2016); (Mosseri, 2018).
Эти инциденты — предсказуемые последствия развертывания вероятностных систем принятия решений без инфраструктуры, которая делает связанность видимой. YouTube, Zillow, системы автоматизации вождения, критичные к безопасности, и Facebook каждый демонстрирует свой паттерн долга: петли обратной связи, каскады исправлений, необъявленных потребителей и разрастание конфигурации.
Эти средства контроля — не изолированные точечные решения, а структурные границы. Смягчение технического долга требует сквозной инфраструктуры MLOps: реестров признаков, которые навязывают схемы во время выполнения, хранилищ метаданных, которые отслеживают происхождение моделей и данных, автоматизированных конвейеров CI/CD, которые проверяют статистические свойства, и платформ наблюдаемости, которые выявляют сдвиг распределения раньше, чем незаметные ошибки распространятся дальше по системе.
Инфраструктура разработки
Инфраструктура разработки превращает паттерны долга, диагностированные ранее, в точки принудительного исполнения. Схема признаков, которая дрейфует вверх по потоку, не исправляется одной лишь панелью мониторинга; ей нужны общий контракт, версионированный артефакт и путь развертывания, который отклоняет несовместимые изменения до того, как они достигнут продакшена. «Инфраструктура MLOps как устранение долга» сопоставляет каждый компонент с базовым принципом («Базовые принципы») и конкретным режимом отказа.
| Компонент инфраструктуры | Реализуемый принцип | Решаемый паттерн долга |
|---|---|---|
| Хранилища признаков | Императив согласованности | Долг зависимостей данных, перекос обучения и обслуживания |
| Системы версионирования | Воспроизводимость через версионирование | Долг конфигурации, каскады исправлений |
| Конвейеры CI/CD | Автоматизация с учетом стоимости | Долг конвейера, размывание границ |
| Системы мониторинга | Наблюдаемая деградация | Петли обратной связи, незаметные сбои |
Инфраструктура MLOps как устранение долга: каждый компонент инфраструктуры отвечает на класс технического долга, наблюдаемого в производственных ML-системах. Хранилища признаков могут уменьшать перекос обучения и обслуживания за счет повторного использования определений и значений признаков; системы версионирования обеспечивают воспроизводимость; конвейеры CI/CD автоматизируют средства контроля выката; системы мониторинга могут выявлять скрытую деградацию раньше, чем это заметят пользователи.
Эти эксплуатационные компоненты охватывают границу между высокоуровневыми алгоритмическими абстракциями и низкоуровневым выполнением на машине. Как показано на «Слоях стека MLOps», стек системы разделяет ответственность на пять уровней: ML-модели, фреймворки, оркестрация, инфраструктура и аппаратное обеспечение. Хотя модели и фреймворки выражают тензорные вычисления математически, они не знают о состоянии кластера, аппаратных сбоях или дрейфе входного распределения. Оркестрация моделей и инфраструктура закрывают этот разрыв: оркестрация управляет происхождением данных, вычислением признаков и обслуживанием моделей, а инфраструктура планирует ресурсы ускорителей, управляет уровнями хранения и собирает телеметрию времени выполнения, чтобы обеспечивать контракты устранения долга, выявленные в «Инфраструктуре MLOps как устранении долга».
Слои стека MLOps: пять колонок организуют стек ML-системы: ML-модели и приложения, ML-фреймворки и платформы, оркестрация моделей, инфраструктура и аппаратное обеспечение. MLOps охватывает задачи оркестрации от управления данными до обслуживания моделей и задачи инфраструктуры от планирования заданий до мониторинга, поддерживая автоматизацию, воспроизводимость и масштабируемое развертывание.
Инфраструктура и подготовка данных
В операционной системе машинного обучения данные — не статичный вход для компиляции, а активная физическая зависимость, которая непрерывно течет от внешнего приема до выполнения на ускорителе. От первоначального приема до онлайн-вывода инфраструктура данных должна гарантировать качество, математическую согласованность и сквозную прослеживаемость как при офлайн-обучении, так и при обслуживании в реальном времени. Эти эксплуатационные требования требуют систем, которые формализуют преобразование признаков и версионирование артефактов на протяжении всего жизненного цикла машинного обучения.
Управление данными
Технический долг машинного обучения во многом проистекает из неуправляемых границ данных: неверсионированные наборы данных размывают границы системы, несогласованное вычисление признаков запускает каскады исправлений, а недокументированные зависимости данных создают скрытых нижестоящих потребителей. Опираясь на основы инженерии данных из «Инженерия данных», сбор, предобработка и преобразование признаков становятся формализованными эксплуатационными контрактами. Там, где инженерия данных оптимизирует корректность одного конвейера и пропускную способность приема, управление данными в MLOps отвечает за согласованность между конвейерами и гарантирует, что офлайн-обучение и онлайн-обслуживание вычисляют математически идентичные признаки. Управление данными выходит за пределы первоначальной подготовки и охватывает непрерывный жизненный цикл артефактов данных.
Три принципа организуют инфраструктуру, которая устраняет эти первопричины: согласованность, свежесть и качество. Каждый принцип мотивирует конкретные инструменты, а не наоборот.
Видео (DeepLearningAI): Конвейеры данных
Первое требование — согласованность данных: каждый артефакт, влияющий на поведение модели, от сырых наборов данных до инженерных признаков, должен быть версионирован и воспроизводим. Без версионирования команды не могут проследить, какие данные породили какую модель, и отладка или откат становятся невозможными. Реализация обычно сочетает версионирование кода, версионирование наборов данных и долговечное объектное хранилище. DVC (Data Version Control) (Iterative, 2024), Git (Torvalds and Hamano, 2024), Amazon S3 (Amazon Web Services, 2024) и Google Cloud Storage (Google Cloud, 2024) — примеры такого паттерна, но важен инвариант: сырые и обработанные артефакты должны оставаться адресуемыми по версии. «Версионирование и происхождение» разбирает детали реализации, включая интеграцию с Git, отслеживание метаданных и сохранение происхождения. На уровне признаков хранилище признаков может уменьшать перекос, централизуя определения признаков и пути обслуживания в обучающих и обслуживающих конвейерах, но паритет все равно требует проверки. Платформа Michelangelo компании Uber популяризовала этот паттерн в составе крупной производственной ML-платформы, а впоследствии Feast сделал его доступным как открытую инфраструктуру хранилищ признаков (Hermann and Del Balso, 2017); (Gojek and Google, 2019). «Хранилища признаков» подробно описывает паттерны реализации для согласованности обучения и обслуживания.
Согласованности недостаточно, если базовые данные устарели. Свежесть данных гарантирует, что модели обучаются и обслуживаются на актуальных данных, а не на устаревших снимках. Автоматизированные конвейеры данных поддерживают свежесть, непрерывно преобразуя сырые данные в пригодные для анализа форматы через структурированные этапы: прием, валидацию схемы, дедупликацию, преобразование и загрузку. Оркестраторы рабочих процессов, такие как Apache Airflow (Apache Software Foundation, 2024) и Prefect (Prefect Technologies, Inc., 2024), вместе с фреймворком преобразования dbt (dbt Labs, 2024) делают эти этапы явными, планируемыми и проверяемыми как код. Когда конвейер управляется таким образом, потоки данных могут развиваться вместе с требованиями модели без потери версионирования, модульности или интеграции с CI/CD.
Третий принцип, качество данных, определяет, остаются ли входы, поступающие в модель, точными, полными и согласованно размеченными. В системах обучения с учителем качество разметки задает верхнюю границу производительности модели независимо от ее емкости. Платформы аннотирования, такие как Label Studio (HumanSignal, 2024), поддерживают командную разметку с встроенными журналами аудита и историей версий, обеспечивая проверку, которая нужна, когда онтологии разметки эволюционируют или требуют исправления в нескольких циклах обучения.
В системе предиктивного обслуживания промышленного оборудования эти три принципа работают согласованно. Непрерывный поток телеметрии принимается и соединяется с историческими журналами обслуживания через расписанный конвейер, управляемый в Airflow (свежесть). Полученные признаки, скользящие средние по окну и агрегаты частот вибрации, сохраняются в хранилище признаков как для офлайн-переобучения, так и для онлайн-вывода с низкой задержкой (согласованность). Валидация схемы, проверки диапазонов датчиков, тесты пропусков и аудит меток отбрасывают поврежденные записи телеметрии до того, как они попадут в обучающую выборку (качество), а версионирование наборов данных и интеграция с реестром моделей сохраняют прослеживаемость от сырых журналов датчиков до предсказаний развернутой модели. Организованное вокруг этих трех принципов, управление данными создает эксплуатационную основу для воспроизводимости модели и надежности в продакшене.
Хранилища признаков
Долг зависимостей данных и перекос обучения и обслуживания, которые разобраны в «Техническом долге», имеют общую первопричину: несогласованное вычисление признаков на разных этапах конвейера. Без единого слоя признаков определения признаков обычно реализуются дважды: специалист по данным вычисляет user_session_length на Python с пакетной агрегацией по историческим журналам, а инженер систем переписывает расчет на Java или C++, чтобы уложиться в задержки онлайн-обслуживания. Возникают тонкие различия: один вариант использует календарное время между сырыми событиями, а другой учитывает время обработки на сервере и отфильтровывает простои. Модель обучается на одном определении, а обслуживается с другим, что приводит к незаметной деградации точности в продакшене. Хранилища признаков7 устраняют это расхождение, создавая слой абстракции между инженерией данных и машинным обучением и реализуя императив согласованности через единый источник истины для преобразований признаков. В конвейерах без такой абстракции продублированная логика признаков в разных средах вносит перекос обучения и обслуживания, временную утечку данных и дрейф распределения.
Хранилища признаков разрешают фундаментальное системное противоречие между пропускной способностью пакетной обработки и задержкой онлайн-доступа, поддерживая два синхронизированных уровня хранения за единым API. Офлайн-обучению нужны высокопроизводительные последовательные чтения по терабайтам или петабайтам исторических журналов, которые оптимизированы для колоночных форматов хранения (например, Parquet) на распределенном объектном хранилище или в хранилищах данных. Напротив, онлайн-выводу нужны точечные выборки по ключу сущности (например, user_id) за доли миллисекунды, ограниченные жесткими целями уровня обслуживания (SLO) по хвостовой задержке. Онлайн-хранилище обслуживает такой паттерн доступа, используя хранилища «ключ — значение» в памяти или распределенные (например, Redis или Cassandra). Хотя физические движки различаются, чтобы соответствовать этим паттернам доступа, оба читают из одной и той же версионированной логики преобразований.
Извлечение исторических признаков должно строго соблюдать корректность на момент времени (предотвращая временную утечку данных или «путешествие во времени»). При генерации обучающих примеров для события, которое произошло в момент , хранилище признаков должно восстановить значения признаков именно такими, какими они были в , исключая обновления, которые поступили позже. Если обучающий запрос выполняет наивное соединение с последним снимком признаков, он вносит в исторические признаки будущее состояние. Модель выучивает ложные корреляции, которые физически недоступны при онлайн-выводе в реальном времени, и точность в продакшене обрушивается. Автоматизируя соединения на момент времени (as-of join) по журналам событий с временными метками, хранилище признаков обеспечивает временную причинность в обучающих выборках, сохраняя при этом единые определения признаков для офлайн- и онлайн-окружений.
Помимо согласованности, хранилища признаков поддерживают версионирование, управление метаданными и повторное использование признаков между моделями. Модель обнаружения мошенничества и модель кредитного скоринга часто зависят от пересекающихся признаков транзакций, которые можно централизованно поддерживать, проверять и разделять. Интеграция с конвейерами данных и реестрами моделей сохраняет происхождение: когда определение признака в вышестоящем источнике обновляется или выводится из эксплуатации, нижестоящие модели можно автоматически выявить и запланировать для переобучения.
Перекос обучения и обслуживания: диагностика и профилактика
Перекос обучения и обслуживания (формально определенный в «перекос обучения и обслуживания») проявляется эксплуатационно через несогласованности хранилища признаков и расхождение конвейеров. «Категории перекоса обучения и обслуживания» сводит типичные причины и методы их обнаружения:
| Тип перекоса | Пример | Метод обнаружения |
|---|---|---|
| Предобработка признаков | Нормализация использует разные статистики | Статистическое сравнение распределений признаков |
| Обработка пропусков | Обучение заполняет пропуски средним, обслуживание — нулем | Валидация схемы с явной обработкой пустых значений |
| Зависящие от времени признаки | Признаки вычисляются с разными временными границами | Валидация временных меток в конвейерах признаков |
| Дрейф версий библиотек | Различия версий NumPy или Pandas | Сравнение хешей окружения |
Категории перекоса обучения и обслуживания: каждая категория требует своих методов обнаружения и профилактики. Перекос схемы и предобработки возникает из расхождения кода и требует проверки паритета; общая логика признаков, включая хранилище признаков там, где это уместно, может их уменьшить, тогда как перекос распределения данных требует статистического мониторинга относительно базовых обучающих значений. Перекос по времени требует тщательного анализа свежести признаков в контекстах обучения и обслуживания.
Пример перекоса обучения и обслуживания
Производственная рекомендательная система показывает, как расхождение признаков проявляется в развертывании. Через месяц после выката модель демонстрирует снижение точности на 8 процентов, хотя код модели и ее веса не менялись. Сравнение распределений признаков показывает, что user_session_length имеет эмпирическое среднее 45 минут в обучающей выборке, но всего 12 минут при онлайн-выводе. Сбой восходит к перекосу определения признака: офлайн-конвейер обучения вычислял календарную длительность от первого события до последнего в сеансе, тогда как онлайн-путь обслуживания считал только время активной работы в приложении после фильтрации периодов простоя. Модель выучила границы решений на распределении признака, которое инфраструктура обслуживания никогда не выдает.
Хранилища признаков устраняют это расхождение, централизуя логику признаков в единое версионированное определение и опираясь на конвейеры данных из «Инженерии данных». «согласованность хранилища признаков» демонстрирует архитектуру: обучение материализует исторические признаки с корректностью на момент времени, обслуживание выполняет точечные выборки в реальном времени, и оба конвейера привязаны к одному и тому же хешу версионированного определения, а не к независимым путям кода.
Согласованность хранилища признаков: единое извлечение снижает перекос обучения и обслуживания за счет общих версионированных определений признаков в обоих конвейерах.
feature_definitions = registry.load(version="2026-06-01")
training_features = feature_definitions.materialize_historical(
entities=training_entities,
at_event_time=True,
names=["user.session_length", "user.purchase_history"],
)
serving_features = feature_definitions.lookup_online(
entities=[{"user_id": 12345}],
names=["user.session_length", "user.purchase_history"],
)
assert training_features.schema == serving_features.schema
assert (
training_features.definition_hash
== serving_features.definition_hash
)
Благодаря централизованному определению session_length офлайн- и онлайн-конвейеры выполняют идентичную логику преобразования, хотя автоматизированные интеграционные тесты все равно должны проверять паритет значений. Централизованные реестры также записывают метаданные и происхождение, что позволяет быстро диагностировать проблемы, когда определения признаков эволюционируют (Hermann and Del Balso, 2017); (Gojek and Google, 2019).
Как количественно показано в «Императиве согласованности», ошибки из-за перекоса в продакшен-масштабе могут приводить к убыткам в сотни тысяч долларов в год. Централизованные хранилища признаков распределяют инженерные затраты на эту инфраструктуру между несколькими моделями и сервисами, переводя архитектурную согласованность в измеримую эксплуатационную экономию.
Хранилище признаков Michelangelo компании Uber
Сценарий: платформа Michelangelo компании Uber обслуживала продакшен-модели, такие как расчетное время прибытия, и использовала общую инфраструктуру признаков для офлайн-обучения и онлайн-предсказаний (Hermann and Del Balso, 2017). Раздельные реализации одной и той же логики признаков создали бы перекос обучения и обслуживания.
Диагностика: общий контракт признаков снижает вероятность того, что пакетный и онлайн-конвейеры будут по-разному интерпретировать признак, однако раздельные офлайн- и онлайн-хранилища по-прежнему требуют проверки корректности на момент времени и паритета.
Системный урок: хранилища признаков устраняют один из основных источников перекоса обучения и обслуживания, централизуя версионированные определения признаков и пути доступа к ним. Они не устраняют перекос полностью: корректность на момент времени, свежесть и паритет офлайн- и онлайн-данных по-прежнему требуют явных тестов.
Обнаружение перекоса в CI/CD
Конвейеры непрерывной интеграции должны проверять согласованность признаков до развертывания. «проверка перекоса» задает шлюз, который сравнивает распределения офлайн-обучения с выборками онлайн-обслуживания с помощью двухвыборочного теста Колмогорова — Смирнова и блокирует развертывание, если какой-либо признак расходится сверх заранее заданного порога. Двухвыборочный тест Колмогорова — Смирнова измеряет максимальное вертикальное расстояние между эмпирическими функциями распределения (eCDF) обучающей и обслуживающей выборок: . Порог означает, что накопленные вероятности не расходятся больше чем на 10 процентных пунктов ни в одной точке носителя признака; это дает беспараметрическую меру расхождения для непрерывных признаков без эмпирического разбиения на интервалы. Такой шлюз превращает расхождение распределений в автоматизированный провал теста перед выкатом в продакшен. Однако порог нужно калибровать относительно размера выборки и чувствительности признака; прохождение проверки распределения подтверждает статистическое согласие, но не может проверить семантический паритет или корректность на момент времени.
Проверка перекоса признаков: эта функция сравнивает распределения признаков при обучении и обслуживании с помощью теста Колмогорова — Смирнова и отклоняет развертывание, если какой-либо признак расходится сверх настраиваемого порога.
def validate_no_skew(
training_features, serving_features, threshold=0.1
):
"""Отклонить развертывание, если распределения признаков расходятся."""
for feature in training_features.columns:
ks_stat = ks_2samp(
training_features[feature], serving_features[feature]
)
if ks_stat.statistic > threshold:
raise SkewDetectedError(
f"Перекос признака {feature}: KS={ks_stat.statistic:.3f}"
)
Версионирование и происхождение
Отслеживание происхождения и версионирование реализуют принцип воспроизводимости, формализованный в «Базовых принципах». В традиционной программной инженерии бинарный исполняемый файл детерминированно компилируется из исходного кода и конфигураций сборки. В системах машинного обучения поведение модели является совместным продуктом кода, конфигурации гиперпараметров и снимка обучающего набора данных. Изменение любой отдельной зависимости порождает совершенно другой артефакт модели. Инфраструктура MLOps управляет этим многомерным пространством зависимостей, обеспечивая криптографическое версионирование каждого компонента конвейера.
Версионирование данных решает проблему изменчивости наборов данных, записывая адресуемые по содержимому хеши для снимков сырых данных и промежуточных таблиц признаков, чтобы любой исторический прогон обучения можно было точно воссоздать. Версионирование моделей регистрирует обученные веса как неизменяемые артефакты вместе с гиперпараметрами обучения, метриками оценки и манифестами зависимостей окружения. Реестры моделей8 управляют состояниями жизненного цикла таких артефактов (например, «подготовка», «продакшен» или «выведена из эксплуатации») и предоставляют графы происхождения, которые прослеживают полную цепочку зависимостей от сырых принятых записей до развернутых конечных точек предсказаний (MLflow Project, 2026); (Google Cloud, 2024).
Эти механизмы строят граф происхождения ML-системы. Граф задает журнал аудита, который необходим для диагностики сбоев в продакшене: нужно понять, отклонилось ли распределение входящих запросов от обучающих базовых значений, менялись ли вычисления признаков выше по конвейеру, или среда обслуживания загрузила непроверенную контрольную точку весов. Формализуя происхождение как явный архитектурный контракт, системная инженерия превращает разбор инцидентов из ручных эвристик в детерминированный анализ первопричин.
Непрерывные конвейеры и автоматизация
Хранилища признаков и системы версионирования решают проблему согласованности данных статически: они гарантируют, что признаки вычисляются корректно на момент времени. Автоматизация позволяет этим системам развиваться непрерывно, синхронизируя предобработку данных, обучение, оценку и выпуск в интегрированные рабочие процессы, которые реагируют на новые данные, меняющиеся цели и эксплуатационные ограничения (Orr et al., 2021); (Google Cloud, 2026).
Конвейеры CI/CD
Хранилища признаков и системы версионирования отвечают за данные-сторону согласованности; конвейеры CI/CD отвечают за процессную сторону, гарантируя, что изменения проходят через проверенные этапы, а не через импровизированные развертывания. Конвейеры ML CI/CD должны справляться со сложностью, которой нет в традиционном ПО: зависимостями данных, рабочими процессами обучения моделей и версионированием артефактов, которое связывает изменения кода с изменениями статистического поведения.
Типичный конвейер ML CI/CD состоит из согласованных этапов: получение обновленного кода, предобработка входных данных, обучение модели-кандидата, валидация качества, упаковка модели и развертывание в среде обслуживания. В некоторых случаях конвейеры также включают триггеры для автоматического переобучения по дрейфу данных или деградации качества. Кодифицируя эти шаги, конвейеры CI/CD9 сокращают ручное вмешательство, обеспечивают проверки качества и поддерживают непрерывное улучшение развернутых систем.
ML-ориентированный CI/CD использует два уровня инструментов по одной причине. Универсальный оркестратор CI/CD (Jenkins, CircleCI (CircleCI, 2024) или GitHub Actions (GitHub, Inc., 2024)) управляет событиями системы контроля версий и логикой выполнения, но ML-слой должен дополнительно версионировать данные, проверять метрики моделей по порогам и запускать переобучение. Поэтому команды добавляют ML-платформу или оркестратор рабочих процессов (Kubeflow (Authors, 2024), Metaflow (Netflix, 2024) или Prefect (Prefect Technologies, Inc., 2024)), которые предоставляют абстракции более высокого уровня для этих задач.
Без такой автоматизации развертывание модели вырождается в ручной процесс, склонный к ошибкам: инженер переобучает модель локально, копирует артефакты на промежуточный сервер и переводит их в продакшен без гарантии, что данные, код или гиперпараметры совпадают с тем, что было проверено. Стоимость таких импровизированных рабочих процессов растет вместе с размером команды и частотой развертываний, порождая дрейф конфигурации и незаметные регрессии, которые проявляются только тогда, когда модель уже выдала неверные предсказания.
«Конвейер CI/CD для ML» показывает, как типичный конвейер непрерывного обучения проходит от приема и валидации набора данных через преобразование, обучение и настройку, оценку, валидацию модели и регистрацию модели. Процесс запускает триггер переобучения, тогда как репозитории наборов данных, моделей, метаданных и артефактов сохраняют входы и выходы, необходимые для прослеживания происхождения.
Конвейер CI/CD для ML: читайте вложенные этапы в порядке выполнения. Триггер переобучения запускает новый прогон, а связанные репозитории сохраняют набор данных, модель, метаданные и артефакты, необходимые для воспроизведения и управления. Адаптировано по рекомендациям Google Cloud по конвейерам непрерывной поставки и автоматизации MLOps (Google Cloud, 2026).
Рассмотрим модель классификации изображений, которая активно разрабатывается. Когда разработчик фиксирует изменения кода в репозитории GitHub (GitHub, Inc., 2024), конвейер Jenkins запускается: он получает указанную версию набора данных, выполняет предобработку признаков и запускает обучение модели. Эксперименты отслеживаются с помощью MLflow (Databricks, 2024), который записывает кривые потерь и регистрирует артефакты модели. После успешной автоматической офлайн-валидации модель упаковывается в контейнер и развертывается на промежуточном кластере под управлением Kubernetes (Cloud Native Computing Foundation, 2024). Если кандидат проходит промежуточную валидацию, конвейер выполняет канареечный выкат (подробно описанный в «Валидации модели»), постепенно переводя продакшен-трафик запросов на новую модель и отслеживая задержку вывода и долю ошибок. Если обнаруживается регрессия качества, трафик автоматически откатывается к предыдущей контрольной точке модели.
CI/CD становится основополагающим, когда системы регулярно выпускают модели или несут значимый продакшен-риск, превращая импровизированные эксперименты в структурированное, повторяемое развертывание. Масштабирование за пределы одного конвейера требует переиспользуемых компонентов и явных контрактов артефактов.
Производственные ML-конвейеры Google TFX
Сценарий: производственный опыт Google послужил мотивом для TensorFlow Extended (TFX) — набора переиспользуемых компонентов для продакшен-конвейеров машинного обучения (Baylor et al., 2017). По мере роста числа конвейеров импровизированная передача данных между этапами затрудняет валидацию, отслеживание происхождения и воспроизводимость.
Диагностика: каждый этап нуждается в явной валидации и метаданных, чтобы развернутую модель можно было проследить до данных, преобразований, кода и оценки, которые ее породили.
Системный урок: одна только оркестрация направленного ациклического графа не обеспечивает воспроизводимость. Стандартизированные компоненты и ML Metadata (MLMD) сохраняют происхождение через записанные входы и преобразования.
Конвейеры обучения
Конвейеры CI/CD оркестрируют общий рабочий процесс, но само обучение требует специализированной вычислительной инфраструктуры. Обучение модели опирается на примитивы распределенного выполнения, рассмотренные в «Обучении моделей». В MLOps действия обучения становятся компонентами воспроизводимого конвейера, поддерживающего непрерывные эксперименты и развертывание в продакшен.
Такие фреймворки, как TensorFlow (Abadi et al., 2016), PyTorch (Paszke et al., 2019) и Keras (Chollet and others, 2024), предоставляют модульные компоненты для архитектур моделей и процедур оптимизации, перенося критерии выбора фреймворка из «Фреймворков машинного обучения» в продакшен. Эксплуатационная дисциплина определяет, какие исследовательские процедуры обучения становятся версионированными, протестированными заданиями переобучения и при каких триггерах выполнения.
Помимо масштабируемости, эксплуатационная целостность требует строгой воспроизводимости. Скрипты обучения и конфигурации окружения версионируются с помощью таких инструментов, как Git (Torvalds and Hamano, 2024), и хранятся на платформах вроде GitHub (GitHub, Inc., 2024). Интерактивные среды, например блокноты Jupyter (Project Jupyter, 2024), ускоряют первоначальное прототипирование, объединяя код, встроенные визуализации и состояние выполнения, однако запуск их без изменений в продакшен-конвейерах создает серьезные эксплуатационные риски.
Блокноты в продакшене
Автоматизированные конвейеры CI/CD предполагают детерминированное и воспроизводимое выполнение кода, но блокноты Jupyter нарушают это предположение из-за постоянного состояния ядра. В интерактивной сессии ячейки можно выполнять не по порядку, создавая скрытые зависимости памяти, которые нельзя воспроизвести при чистом перезапуске интерпретатора. Типичный продакшен-сбой возникает, когда разработка опирается на ячейки, выполненные в последовательности 1-3-2, а запланированный пакетный исполнитель, который выполняет их сверху вниз (1-2-3), падает из-за неопределенных переменных или измененных промежуточных тензоров.
Трудности тестирования усугубляют эту уязвимость состояния. Стандартные средства модульного тестирования и фреймворки имитации плохо работают с интерактивными документами блокнотов. Проверки внутри ячеек редко параметризуются или подключаются к тестовым раннерам, поэтому блокноты оказываются значительно менее протестированными, чем модульный код на Python.
Эксплуатация блокнотов требует специальных инструментальных вмешательств. Papermill обеспечивает параметризацию и безголовое выполнение блокнотов, внедряя конфигурации времени выполнения и выполняя ячейки сверху вниз как отдельные этапы конвейера (Papermill Project, 2026). Аналогично nbconvert преобразует проверенные блокноты в статические исполняемые скрипты Python для продакшен-окружений (Project Jupyter, 2026), удаляя исследовательские черновые ячейки и открывая код для линтеров и CI-тестов.
Стоимость незаметных сбоев
Задача: оправдано ли построение автоматизированной системы обнаружения дрейфа?
Сценарий: рассмотрим механизм рекомендаций товаров, который приносит $50 млн годовой выручки.
Режим отказа: ошибка развертывания вызывает перекос обучения и обслуживания и снижает качество рекомендаций на 5 процентов. Это пропорционально снижает конверсию.
Анализ стоимости:
- Ручные операции (ежемесячный обзор):
- Время обнаружения: около 4 недель (28 дней).
- Потери выручки: $50 млн 0,05 28 дней / 365 дней ≈ $191 780,8.
- Автоматизированный MLOps (ежедневные проверки):
- Время обнаружения: 1 день.
- Потери выручки: $50 млн 0,05 1 день / 365 дней ≈ $6 849,3.
Системный вывод: один незаметный сбой без MLOps обходится на $184 931,5 дороже. При четырех инцидентах в год, как в этом сценарии, сокращение времени обнаружения (TTD) позволяет избежать почти $739 726 годовых потерь.
Расчет стоимости в «Стоимость незаметных сбоев» количественно оценивает инженерный компромисс. Хотя извлечение кода из блокнотов в проверенные модули создает накладные расходы на рефакторинг, это не дает скрытым допущениям о состоянии вызвать перекос обучения и обслуживания в продакшене. Когда незаметные сбои стоят сотни тысяч долларов за инцидент, дисциплинированное выделение кода предобработки и обучения напрямую защищает выручку.
Когда логика обучения модуляризована, автоматизированные конвейеры могут выполнять систематический поиск по пространству проектирования моделей. Рабочие процессы включают распределенную оптимизацию гиперпараметров (Ranjit et al., 2019); (Li et al., 2017), поиск архитектуры нейронной сети (Elsken et al., 2019) и отбор признаков (scikit-learn developers, 2024), координируя несколько параллельных прогонов обучения на пулах ускорителей.
Масштабирование таких автоматизированных нагрузок требует значительных вычислительных мощностей, что отражено в спросе корпоративной облачной инфраструктуры (Gartner, 2024). Это связано с паттернами оркестрации рабочих процессов, рассмотренными в «Рабочем процессе машинного обучения», которые координируют многоэтапные задания в распределенных кластерах. Облачные платформы предоставляют экземпляры с высокопроизводительными ускорителями по требованию, включая узлы GPU и Tensor Processing Unit (TPU).10 Команды либо строят собственные графы оркестрации, либо используют управляемые платформы, такие как Vertex AI Fine Tuning (Google Cloud, 2024), чтобы адаптировать базовые модели к предметным задачам. Кроме того, физическое выделение ускорителей и пропускная способность региональных межсоединений ограничивают места, где могут выполняться крупномасштабные конвейеры обучения (Lehdonvirta et al., 2025).
Когда конвейеры обучения автоматизированы и воспроизводимы, возникает инженерный компромисс: частота выполнения. Поскольку отправка заданий на кластеры с несколькими ускорителями несет значительные вычислительные издержки, триггеры конвейера не могут работать непрерывно без экономического обоснования.
Схема решения о переобучении
Автоматизированные конвейеры обучения вводят критическое эксплуатационное решение: каденцию выполнения. Решение о том, когда переобучать модель, требует баланса между деградацией точности и расходами на вычисления. Существует три распространенные стратегии, каждая из которых несет свои системные компромиссы. «Иллюстративные графики переобучения по областям» приводит примерные графики для разных областей: от ежедневного переобучения для быстро меняющегося предсказания кликов по рекламе до ежеквартальных обновлений для стабильных приложений медицинской визуализации:
| Область | Иллюстративный график | Обоснование |
|---|---|---|
| Предсказание кликов по рекламе | Ежедневно | Интересы пользователей быстро меняются |
| Обнаружение мошенничества | Еженедельно | Схемы атак постоянно эволюционируют |
| Прогнозирование спроса | Ежемесячно | Сезонные закономерности меняются медленно |
| Медицинская визуализация | Ежеквартально | Клинические проявления заболеваний стабильны |
Иллюстративные графики переобучения по областям: это отправные точки; фактические частоты зависят от наблюдаемых темпов дрейфа и бизнес-влияния, и организации обычно калибруют их по эксплуатационному опыту.
Эти графики — отправные точки, а не неизменяемые правила. В политике переобучения по расписанию запуск конвейера происходит с фиксированной календарной частотой — ежедневно, еженедельно или ежемесячно — независимо от поступающей телеметрии качества. Такую стратегию просто автоматизировать, и она гарантирует, что накопившиеся обучающие данные периодически включаются в модель. Однако она тратит машинные часы ускорителей в спокойные периоды и медленно реагирует, когда сдвиги распределения происходят между плановыми интервалами.
В политике переобучения по триггеру запуск конвейера инициируется, когда системы мониторинга обнаруживают статистический дрейф или деградацию качества выше заранее заданных порогов. Такой подход экономит вычисления, обучая модель только при необходимости, но он сильно зависит от потоков меток с низкой задержкой или точных прокси-метрик, чтобы не допускать запаздывающих реакций и ложных срабатываний переобучения.
В политике непрерывного переобучения веса модели обновляются постепенно по мере поступления размеченных записей, с помощью потоковых микропакетов или алгоритмов онлайн-обучения. Эта стратегия минимизирует запаздывание устаревания, но резко повышает риск валидации: испорченные, нерепрезентативные или состязательные данные могут быстро отравить параметры модели раньше, чем автоматические детекторы аномалий или инженеры успеют вмешаться.
Выбор стратегии зависит от четырех физических и эксплуатационных ограничений: стоимости вычислений на переобучение, задержки конвейера валидации, возможности автоматического отката и задержки поступления меток. Повторная оптимизация модели на узлах с несколькими ускорителями несет ощутимые энергетические и кластерные затраты; триггерные политики требуют статистически надежных прокси-сигналов, когда настоящие метки приходят с большой задержкой; а каждый конвейер непрерывного развертывания нуждается в надежных механизмах канареечного выката и отката. Политика переобучения — это инженерная оптимизация, которой управляют эксплуатационные компромиссы, а не произвольные эвристики.
Экономические и валидационные ограничения становятся исполняемыми в листинге «Решение о переобучении по триггеру»: функция принятия решения запускает прогон, только когда оцененная выгода превышает риски переобучения, валидации и выката, а данные валидации свежие.
Решение о переобучении по триггеру: решение объединяет потерю качества, дрейф признаков, сдвиг предсказаний и стоимость переобучения, поэтому автоматическое переобучение срабатывает только тогда, когда ожидаемая польза превышает эксплуатационный риск.
quality_loss = baseline_accuracy - current_accuracy
feature_drift = max(population_stability_index(features))
prediction_shift = distribution_distance(
baseline_predictions, live_predictions
)
benefit = estimate_value_recovered(
quality_loss=quality_loss,
feature_drift=feature_drift,
prediction_shift=prediction_shift,
)
risk = retraining_cost + validation_cost + rollout_risk
if benefit > risk and validation_data_is_fresh():
schedule_retraining_run()
Шлюз разделяет обнаружение дрейфа и разрешение на переобучение: дрейф входит в оценку выгоды, тогда как свежие данные валидации и положительная чистая ценность определяют, будет ли автоматизация действовать. Для полного иллюстративного сценария, который рассматривается далее, параметры дают оптимальный интервал около одного дня.
Количественная экономика переобучения
Решение о переобучении модели уравновешивает стоимость устаревания точности и расходы на переобучение. Когда данные об исходах допускают локально экспоненциальную аппроксимацию, подобранная скорость деградации задает измеримый временной масштаб.11 Его период полураспада12 описывает, когда подобранная точность падает до половины начального значения, однако он не определяет экономически оптимальный интервал переобучения. Вывод в «оптимальном интервале переобучения» отличает подобранный период полураспада от экономически оптимального интервала переобучения.
Оптимальный интервал переобучения
Задача: как часто команде переобучать модель, чтобы максимизировать прибыль?
Механизм: точность модели убывает со скоростью из-за дрейфа данных.
- : суточный объем запросов (трафик).
- : денежная ценность запроса при единичном изменении доли точности. При этом соглашении означает, что 1 процентный пункт точности стоит за запрос.
- : фиксированная стоимость одного прогона переобучения, включая вычисления и операционные накладные расходы.
Формула: аппроксимация из «оптимального интервала переобучения» дает оптимальный интервал переобучения , который минимизирует сумму потерь от устаревания и затрат на обучение:
Расчет: рассмотрим модель-маяк для обнаружения мошенничества ():
- Трафик : 1 000 000 транзакций в день.
- Полезность : $0,50 за запрос при единичном изменении точности.
- Стоимость переобучения : $5 000.
- Скорость дрейфа : 2 процента в день.
Системный вывод: если трафик высок, а точность ценна, команда не может позволить себе ждать. Конвейер нужно автоматизировать. Если меньше времени ручного развертывания команды, система находится в состоянии постоянного технического долга.
Формализация этой оптимизации требует вывести функцию полной стоимости из первых принципов, разложив расходы системы на потери от устаревания и накладные расходы на переобучение.
Функция стоимости устаревания
Точность модели может ухудшаться со временем, создавая стоимость устаревания. Для экономического планирования команда может аппроксимировать наблюдаемое влияние в устойчивом локальном режиме как экспоненциальный процесс деградации. Здесь — временная скорость деградации при допущении, что измеренная деградация накапливается равномерно; она не определяется одной лишь расходимостью распределений. Экспоненциальная модель — это упрощение, которое позволяет провести аналитический экономический расчет. Пусть — точность в момент после последнего обучения, а — начальная точность. «Деградация точности» описывает эту аппроксимированную ситуацию, где скорость зависит от волатильности области и наблюдаемых исходов:
Стоимость устаревания накапливается в зависимости от объема запросов за период и ценности единичного изменения доли точности. Интегрируя мгновенную потерю точности по интервалу переобучения , получаем стоимость устаревания:
Интеграл накапливает стоимость по времени от 0 до , а замкнутая форма получается подстановкой «деградации точности» вместо .
Функция стоимости переобучения
Каждое переобучение несет фиксированные расходы: вычисления, валидацию и накладные расходы на развертывание. «Стоимость переобучения» раскладывает их на составляющие:
где — стоимость самого прогона обучения, — стоимость оценки новой модели перед выпуском, — стоимость ее внедрения в продакшен, а — ожидаемая стоимость возможной регрессии новой модели.
Если растянуть переобучение слишком сильно, стоимость устаревания выходит из-под контроля.
Оптимальный интервал переобучения
Оптимальный интервал переобучения минимизирует полную стоимость за единицу времени, как показывает формула минимизации:
При допущении разложение экспоненты в ряд Тейлора дает аппроксимацию с квадратным корнем, которая использовалась в предыдущем приблизительном расчете. Точнее, разложение второго порядка сводит скобочный член устаревания к . Деля полную стоимость на , получаем среднюю стоимость в единицу времени ; дифференцирование по и приравнивание производной к нулю уравновешивает предельные потери от устаревания и амортизированные затраты на настройку, непосредственно давая экономический интервал с квадратным корнем из «оптимального интервала переобучения». С параметрами из «Параметров решения о переобучении» аппроксимация помещает экономический оптимум около одного дня; точный оптимум требует минимизации формулы минимизации без разложения.
| Параметр | Значение | Описание |
|---|---|---|
| 1 000 000 | Транзакций в день | |
| $0,50 за запрос | Ценность запроса при единичном изменении точности | |
| 0,95 | Начальная точность | |
| 0,02 | Суточная скорость деградации (2 процента в день) | |
| Стоимость переобучения | $5 000 | Полные расходы на переобучение |
Параметры решения о переобучении: примерные значения для системы обнаружения мошенничества, которая обрабатывает 1 000 000 транзакций в день.
Анализ чувствительности
При аппроксимации с квадратным корнем масштабируется как квадратный корень из этих параметров. «Чувствительность интервала переобучения» показывает, что четырехкратное изменение стоимости переобучения, объема запросов или скорости деградации сдвигает приближенный интервал в два раза.
| Изменение | Эффект для |
|---|---|
| Стоимость переобучения выросла в 4 раза | интервал длиннее в 2 раза |
| Объем запросов вырос в 4 раза | интервал короче в 2 раза |
| Скорость деградации выросла в 4 раза | интервал короче в 2 раза |
Чувствительность интервала переобучения: в аппроксимации с квадратным корнем четырехкратное изменение входа сдвигает интервал лишь в два раза, и направления различаются. Более дорогое переобучение удлиняет интервал, тогда как больший объем запросов или более быстрая деградация его сокращают.
Ограничения модели
Эта замкнутая схема дает приближение первого порядка для эксплуатационного планирования, но ее полезность зависит от нескольких упрощающих допущений. Во-первых, формулировка с экспоненциальной деградацией предполагает постепенный дрейф с устойчивой скоростью ; внезапные ковариатные сдвиги или острые сбои данных требуют немедленного статистического обнаружения точек изменения, а не гладких моделей деградации. Во-вторых, формулировка предполагает постоянную предельную ценность за пункт точности, тогда как реальная полезность часто имеет нелинейные пороги или асимметричные штрафы. В-третьих, модель рассматривает события переобучения как независимые, статические перезапуски, не учитывая перенос обучения между циклами переобучения. Наконец, инфраструктурные расходы моделируются как фиксированные суммы, тогда как рыночные цены на прерываемые облачные экземпляры, очереди и эластичная доступность вычислений вносят динамические колебания. Несмотря на эти границы, вывод привязывает каденцию переобучения к экономическим компромиссам, а не к произвольным календарным графикам. Параметры улучшаются за счет эмпирической калибровки по историческим данным телеметрии по мере накопления эксплуатационного опыта. Делая компромиссы между затратами и выгодой явными и измеримыми, эта схема реализует автоматизацию с учетом стоимости («Базовые принципы»), обосновывая инфраструктурные инвестиции и пороги мониторинга, опирающиеся на измеримое бизнес-влияние.
Валидация модели
Конвейеры обучения производят модели-кандидаты; валидация модели определяет, какие кандидаты заслуживают развертывания в продакшен. В отличие от исследовательской оценки, где модель, обогнавшая бенчмарк на статичном тестовом наборе, может считаться успешной, продакшен-валидация должна оценивать эксплуатационную готовность в репрезентативных условиях и задавать механизмы мониторинга и отката, которые понадобятся после того, как распределение изменится.
Процесс оценки начинается с тестирования производительности на отложенном тестовом наборе, выбранном из того же распределения, что и продакшен-данные. Основные метрики, такие как точность, площадь под кривой (AUC), precision, recall и F1-мера (Rainio et al., 2024), вычисляются и отслеживаются во времени, чтобы выявлять деградацию от дрейфа данных (IBM, 2024). Три согласованные панели на «Влиянии дрейфа данных» наглядно показывают этот паттерн деградации. Верхняя панель представляет поступающие данные во времени, окрашенные по типу. Средняя панель показывает связанное изменение: распределение признака (sales_channel) постепенно сдвигается от преимущественно онлайновых к преимущественно офлайновым транзакциям. Нижняя панель показывает, как точность модели снижается на том же интервале. Эта визуализация передает главную задачу валидации модели: нужно отслеживать входы вместе с выходами, чтобы понимать, почему меняется качество.
Влияние дрейфа данных: в этом иллюстративном сценарии поступающие выборки сдвигаются от преимущественно онлайновых к все более офлайновым продажам, а точность модели падает на том же интервале. Совместный мониторинг входов и результатов помогает понять, связан ли сдвиг распределения с потерей точности.
Помимо статической оценки, продакшен-конвейеры используют контролируемые стратегии развертывания, которые открывают веса-кандидаты для живой среды обслуживания и одновременно ограничивают радиус поражения. Один из широко принятых методов — канареечное тестирование (Fowler, 2014), при котором новая модель получает небольшую долю продакшен-трафика. Во время такого ограниченного выката конвейеры телеметрии отслеживают задержку вывода, стабильность системы и распределения предсказаний. Например, платформа электронной коммерции направляет модель-кандидат рекомендаций на 5 процентов живого трафика запросов и отслеживает CTR, задержку p99 и дрейф предсказаний относительно базовой модели. Только после того, как кандидат покажет статистическую стабильность без регрессий задержки, его продвигают на весь продакшен-трафик.
Оценка кандидатов в одинаковых эксплуатационных условиях — предпосылка обоснованного решения о продвижении: кандидат, который показывает видимый прирост метрик лишь потому, что его оценивали на другом срезе трафика или в другом временном окне, смешивает качество модели с разбросом данных. Облачные ML-платформы поддерживают контролируемую оценку через повторное воспроизведение запросов, теневое обслуживание и синтетическое нагрузочное тестирование. Такие платформы, как Weights & Biases (Weights & Biases, Inc., 2024), фиксируют точные артефакты обучения, конфигурации гиперпараметров и метрики оценки, которые нужны, чтобы решения о продвижении были воспроизводимыми и аудируемыми на протяжении всего жизненного цикла модели.
Автоматизированные шлюзы валидации защищают от регрессий по основным агрегированным метрикам, но продакшен-валидация также требует аудита срезов и поведения на длинном хвосте. Автоматизированные наборы тестов часто скрывают тяжелые падения производительности на недопредставленных подгруппах или на критичных для безопасности граничных случаях. Продакшен-архитектуры сочетают автоматизированный шлюз с проверкой политик, особенно для моделей, которые развертываются в регулируемых областях. Эта многоступенчатая дисциплина валидации связывает офлайн-оценку с живым продакшен-мониторингом и гарантирует, что модели-кандидаты удовлетворяют инвариантам точности, задержки и безопасности, прежде чем получить неограниченный серверный трафик.
Интеграция инфраструктуры
Инфраструктура разработки решает две из трех критических системных задач. Хранилища признаков и версионирование данных снижают рассогласованность на интерфейсе «данные–модель», централизуя и отслеживая доступ к признакам при обучении и обслуживании. Конвейеры CI/CD, реестры моделей и шлюзы валидации стабилизируют интерфейс «модель–инфраструктура», автоматизируя переход от обученных весов к контейнеризированным сервисам со способностью к откату.
Это лишь две трети эксплуатационной задачи. Модель, которая проходит все шлюзы валидации и чисто развертывается, все равно может незаметно отказать в продакшене, когда распределения входов сдвинутся. Третий критический интерфейс, мониторинг в продакшене, требует практик, направленных не на построение моделей, а на сохранение предсказательной корректности во времени.
Эксплуатация в продакшене
У развернутой модели есть операционный период полураспада. Обычные программные бинарные файлы сохраняют детерминированную корректность, пока выполняются лежащие в основе инварианты аппаратного обеспечения, тогда как ML-модели связывают детерминированную матричную арифметику с внешним нестационарным распределением данных. Когда живые входные признаки отходят от обучающего многообразия, предсказания незаметно деградируют, даже если проверки здоровья кластера — от HTTP-кодов ответа до задержки хвоста () — остаются полностью зелеными. Эксплуатация в продакшене реализует интерфейс «мониторинг в продакшене», чтобы сделать это незаметное угасание видимым и пригодным для действий. Сочетая постепенную маршрутизацию трафика с обнаружением дрейфа во время выполнения, эксплуатационная инфраструктура изолирует сбойные версии моделей и запускает смягчение до того, как ошибочные выводы распространятся на нижестоящие системы.
Развертывание и обслуживание моделей
Обученная и проверенная модель должна быть интегрирована в продакшен-среду, которая отдает предсказания в масштабе. Развертывание превращает статичную контрольную точку в версионированный воспроизводимый исполняемый артефакт; обслуживание выделяет память ускорителей, подготавливает входные батчи и планирует вычислительные ядра, чтобы удовлетворять целевые показатели задержки (SLO) при динамичной нагрузке запросов. Вместе эти системы вводят модель в эксплуатацию внутри продакшен-экосистемы ПО.
Развертывание модели
Рассмотрим модель обнаружения мошенничества, которая в среде разработки достигает точности (precision) 99,2 процента. Инженер экспортирует веса, копирует их на продакшен-сервер и обнаруживает, что модель помечает каждую транзакцию как легитимную: на продакшен-сервере стоит другая версия библиотеки извлечения признаков, и она выдает входы, которых модель никогда не видела. Этот сценарий показывает, почему развертывание — задача системной инженерии, а не простая передача файла. Упаковка, тестирование и отслеживание ML-моделей для надежного продакшен-развертывания требуют рассматривать веса модели, зависимости времени выполнения и конфигурацию предобработки как единую развертываемую единицу. Контейнеризация артефакта модели и среды обслуживания13 упаковывает пользовательские зависимости, библиотеки времени выполнения и переменные окружения в неизменяемый образ, обеспечивая паритет окружений между разработкой и узлами кластера.
Продакшен-развертыванию нужны фреймворки, которые управляют упаковкой моделей, версионированием и интеграцией с инфраструктурой обслуживания. Такие инструменты, как MLflow и реестры моделей, управляют этими артефактами развертывания (Chen et al., 2020), тогда как специализированные фреймворки обслуживания (подробно описанные в «Обслуживании моделей») отвечают за оптимизацию времени выполнения и требования к масштабированию. Перед полномасштабным выкатом команды развертывают обновленные модели в промежуточные или QA-среды14, чтобы тщательно проверить производительность.
Теневые развертывания15 асинхронно дублируют живой продакшен-трафик на модель-кандидат, не возвращая ее выводы пользователям. Это позволяет сравнивать задержку и выходы без прямого воздействия на пользователей, но точность по-прежнему требует меток или другой эталонной истины. Канареечные развертывания16 направляют небольшую, постепенно наращиваемую долю пользовательского трафика, чтобы выявлять регрессии под живой нагрузкой. Сине-зеленые развертывания17 поддерживают параллельные среды для переключения на уровне маршрутизатора и быстрого отката. Каждая стратегия снижает свой риск выпуска, но ни одна не устраняет необходимость в проверенных процедурах отката и продакшен-мониторинге.
Ошибка Knight Capital (2012)
Контекст: Knight Capital Group была крупным маркет-мейкером на рынке акций США, на который приходилось более 17 процентов объема NYSE. В августе 2012 года операционное развертывание обновило программное обеспечение маршрутизации ордеров SMARS на семи из восьми продакшен-серверов, но пропустило восьмой (U.S. Securities and Exchange Commission, 2013).
Механизм: развертывание переиспользовало двоичный флаг функции, который активировал устаревший код Power Peg на необновленном восьмом сервере. Устаревший сервер вошел в неограниченный цикл, передавая запросы родительских ордеров со скоростью .
Последствия: за 45 минут маршрутизатор выполнил более 4 миллионов несанкционированных сделок, охватывающих более 397 миллионов акций, и понес убыток в $460 млн. Фирма уцелела только благодаря экстренному спасательному финансированию, привлеченному через несколько дней, а в течение нескольких месяцев утратила независимость в ходе поглощения.
Реакция: инцидент обосновывает атомарную проверку развертывания на продакшен-узлах, явные механизмы управления жизненным циклом флагов функций и автоматические выключатели (circuit breakers), которые ограничивают ущерб, способный нанести неисправный выпуск.
Системный урок: автоматизированное развертывание — это проблема физического контроля, в которой дрейф конфигурации между разнородными узлами приводит к отказу всей службы. Развертывания ML разделяют эту самую уязвимость: несоответствие версии в реестре моделей, несинхронизированные схемы признаков или частичная маршрутизация канарейки могут заполнить продакшен поврежденными запросами вывода раньше, чем сработают телеметрические оповещения.
Чтобы избежать сценария отказа Knight Capital, системы ML выкатываются постепенно, а не переключают трафик атомарно, однако поэтапное развертывание открывает поведение, зависящее от нагрузки. Когда канареечные развертывания выявляют аномалии при повышенных долях трафика — например, исчерпание памяти, переполнение очереди или рост задержки хвоста p99, которые появляются при 30 процентах трафика и оставались незаметными при 5 процентах, — изоляция требует систематической отладки по всему стеку. Эффективная диагностика требует сопоставления нескольких сигналов: метрик производительности из «Бенчмаркинга», анализа распределения данных для выявления дрейфа и сдвигов важности признаков, которые могли бы объяснить деградацию. Команды поддерживают наборы инструментов отладки, включая фреймворки анализа A/B-тестов, инструменты атрибуции признаков и анализаторы срезов данных, которые выявляют, какие подгруппы страдают от деградации производительности.
Этот цикл диагностики должен напрямую соединяться с конвейером выпуска. Интеграция с CI/CD автоматизирует развертывание и откат, но только тогда, когда откат спроектирован как часть механизма выката, а не рассматривается как аварийный скрипт.
Стратегии отката и механизмы безопасности
Возможность отката18 — это страховочная сеть, которая позволяет уверенно развертывать модели. Без надежного отката команды становятся неохотными к развертываниям и замедляют темп итераций. Эффективный откат требует планирования трех различных сценариев:
Самый быстрый уровень — немедленный откат — устраняет критические сбои, обнаруженные сразу после развертывания: ошибки обслуживания, скачки задержки или очевидные сбои предсказаний. Он требует держать предыдущую версию модели загруженной и прогретой, чтобы трафик переключался без задержки холодного старта. Быстрый откат обрабатывает деградацию производительности, обнаруженную по метрикам канарейки вскоре после развертывания; для этого нужна интеграция с реестром моделей, который сохраняет предыдущие версии пригодными для развертывания с минимальными изменениями конфигурации. Отложенный откат решает тонкие проблемы, выявленные по бизнес-метрикам или отзывам пользователей после полного развертывания, когда откат должен учитывать зависящие от модели данные, такие как состояние персонализации или кешированные эмбеддинги, накопленные за время работы новой модели.
«Паттерны отката по сценариям» сводит шаблоны реализации для каждого типа отката:
| Тип отката | Триггер | Реализация | Работа с состоянием |
|---|---|---|---|
| Немедленный | Ошибки обслуживания, сбои | Горячий резерв с мгновенным переключением | Без состояния, особой обработки нет |
| Быстрый | Деградация метрик канарейки | Повторное развертывание через реестр | Очистить кеши, перезапустить сессии |
| Отложенный | Снижение бизнес-метрик | Полное повторное развертывание с миграцией | Мигрировать состояние, при необходимости переиграть |
Паттерны отката по сценариям: каждый тип отката требует своей инфраструктурной поддержки и стратегии работы с состоянием. Немедленный откат требует всегда прогретых резервов; отложенный откат может потребовать процедур миграции данных.
Тестирование отката
Процедуры отката, которые никогда не тестировались, могут не сработать, когда они понадобятся, и такой пробел часто обнаруживается во время активного инцидента, когда когнитивная нагрузка и временное давление максимальны. Сбой может проистекать из зависимостей конфигурации, несовместимого состояния или неясной ответственности. Периодические учения по откату выявляют эти пробелы до того, как они станут важны. Автоматические критерии отката могут сократить время реакции, но пороги нужно калибровать под конкретный сервис и защищать от «флаппинга» (многократного переключения туда и обратно). Восстановленная модель также должна давать согласованное поведение, а не предсказания, испорченные устаревшими кешами или несовместимым состоянием признаков. Пошаговые регламенты (runbook) гарантируют, что реагирующему не обязательно быть тем человеком, который проектировал развертывание.
Откат с состоянием и без состояния
ML-системы различаются по наличию состояния, а это напрямую определяет сложность отката. Для рабочих нагрузок без состояния, таких как табличная классификация и статическая регрессия, откат требует только замены весов модели или возврата маршрутизации к предыдущему контейнеру, поскольку отдельные выводы не разделяют контекст выполнения. Напротив, модели с состоянием, включая последовательные рекомендательные системы, ранжировщики поиска на основе сессий и диалоговые системы, накапливают временное пользовательское состояние. Откат таких нагрузок может потребовать сброса сессий, прослоек совместимости схем для кешированных векторов контекста или явной миграции состояния. Сохранение версионированных контрольных точек на границах развертывания смягчает эту проблему, однако чистое восстановление остается архитектурным свойством, которое нужно проверять эмпирически, а не считать само собой разумеющимся. Например, двухбашенные рекомендательные и поисковые сервисы часто заранее вычисляют и хранят плотные эмбеддинги пользователей и товаров в быстрых кешах с низкой задержкой; если модель v2 меняет латентное векторное пространство или размерность эмбеддингов, эти кешированные векторы становятся математической бессмыслицей для откаченной модели v1. Поэтому откат с состоянием должен координировать атомарную инвалидацию кеша или переключение между пространствами имен разных версий вместе с повторным развертыванием весов, чтобы не допустить оценки запросов в несовместимых векторных пространствах. Самый сложный режим отказа возникает в системах с петлями обратной связи: когда плохие предсказания загрязняют журналы признаков или потоки кликов, которые используются для переобучения, в период деградации откат серверного двоичного файла оставляет загрязненные данные в корпусе переобучения, и их нужно удалить или изолировать до восстановления прежнего поведения.
A/B-тестирование для валидации модели
A/B-тестирование обеспечивает статистическую основу для решений о развертывании, сравнивая версии модели в контролируемых условиях. В отличие от канареечных развертываний (которые проверяют эксплуатационную стабильность), A/B-тесты измеряют, улучшает ли новая модель бизнес-результаты с статистической уверенностью.
Настройка эксперимента и правила решения
Корректный A/B-тест устанавливает четыре контроля, которые обеспечивают статистическую обоснованность решений о развертывании:
Во-первых, единица рандомизации определяет, делится ли трафик по идентификатору пользователя или по отдельному запросу. Хеширование на уровне пользователя сохраняет согласованность между сессиями ценой больших требований к выборке, тогда как разбиение по запросам максимизирует пропускную способность выборки, но рискует показать одному пользователю попеременно разные варианты модели.
Во-вторых, рамка статистической мощности определяет объем трафика, необходимый для выявления значимых различий. При общем приближении нормального распределения с равной дисперсией пусть — требуемое число пользователей на вариант, — минимально обнаруживаемый эффект, — стандартное отклонение исхода, а и — положительные критические значения стандартного нормального распределения для выбранной двусторонней доверительной вероятности и мощности. В разобранном сценарии используются доверительная вероятность 95 процентов и мощность 80 процентов. «Размер выборки A/B-теста» переводит эти проектные цели в требуемый трафик до запуска.
При относительном приросте 2 процента от базовой конверсии 5 процентов (от 5 до 5,1 процента) и мощности 80 процентов эксперименту нужно примерно 745 644 пользователя на вариант. При 25 000 пользователей на вариант тест способен обнаружить лишь гораздо больший прирост, примерно 0,5 процентного пункта в абсолютном выражении.
В-третьих, защитные метрики (guardrail) задают эксплуатационные и поведенческие границы, которые не должны ухудшаться, даже если основная метрика растет. Модель рекомендаций, которая повышает CTR на 10 процентов, но при этом увеличивает задержку ответа p99 на 500 мс, нарушает системные защитные ограничения и рискует вызвать каскадные тайм-ауты в нижестоящих сервисах.
В-четвертых, фиксированный горизонт оценки требует проводить тест до достижения заранее зарегистрированного размера выборки и минимальной длительности, что захватывает циклическую недельную сезонность. Остановка эксперимента в момент, когда впервые появляется значимость, раздувает частоту ложноположительных результатов из-за повторных подглядываний; ранняя остановка требует заранее заданного последовательного плана с откалиброванными границами расходования альфа.
Эти средства контроля задают статистические рамки, однако ML-системы добавляют режимы отказа, которые обычные веб-эксперименты могут скрывать. События конверсии могут приходить через дни после предсказания, создавая отложенную обратную связь: рекомендация, показанная в понедельник, может привести к покупке в пятницу, поэтому окно атрибуции должно быть частью дизайна теста. Эффекты новизны также могут завышать ранние показатели, когда пользователи реагируют на свежие рекомендации, поэтому зрелые эксперименты включают период прогрева перед измерением.
Рекомендательные системы и системы ранжирования добавляют эффекты интерференции: показ товара одному пользователю может повлиять на то, что остается доступным или заметным для другого, нарушая допущение о независимости, на котором основан стандартный анализ A/B-тестов. Гетерогенность сегментов создает вторую проблему анализа: общий нейтральный результат может скрывать сильный положительный эффект для одной когорты и отрицательный для другой. Эти сложности не отменяют A/B-тестирование, но они делают защитные метрики, анализ сегментов и заранее зарегистрированные решения частью эксперимента, а не постфактум-интерпретацией.
«Матрица решений A/B-теста» переводит эти ограничения в решение о развертывании:
| Основная метрика | Защитные метрики | Решение |
|---|---|---|
| Значимое улучшение | Все пройдены | Выкатить новую модель |
| Значимое улучшение | Часть не пройдена | Исследовать компромиссы, возможно, нужна итерация модели |
| Нет значимого изменения | Все пройдены | Результат неубедительный; оставить текущую модель, если только заранее заданный тест эквивалентности или ненизшей эффективности не поддерживает изменение |
| Значимое ухудшение | Не применимо | Не выкатывать; исследовать первопричину |
Матрица решений A/B-теста: решения о развертывании должны учитывать и основные метрики, и защитные метрики. Улучшения, которые достигаются ценой нарушения защитных ограничений, требуют тщательного анализа компромиссов, а не автоматического развертывания.
Матрица решений надежна, только если методика оценки зарегистрирована заранее, до запуска. Команды должны установить ожидаемые размеры эффектов, единицу рандомизации, окна атрибуции, пороги защитных метрик и минимальную длительность работы до того, как увидят продакшен-трафик.
Промежуточная оценка требует такой же строгости. Методы снижения дисперсии, например CUPED (Controlled-experiment Using Pre-Experiment Data), уменьшают дисперсию метрик, корректируя результаты по ковариатам, измеренным до эксперимента, и ускоряют принятие решений без потери статистической мощности. Автоматизированные аналитические конвейеры защищают границу решения от ручных ошибок вычисления, а архивирование отрицательных результатов сохраняет эмпирические свидетельства против повторения непродуктивных архитектур.
Решение A/B-теста имеет значение, только если механизм выпуска может продвинуть, задержать или откатить именно тот артефакт, который был протестирован. Реестры моделей, такие как реестр моделей Vertex AI (Google Cloud, 2024), служат централизованными хранилищами для сохранения и управления обученными моделями и их версиями. Каталоги моделей выполняют иную роль: если реестры управляют внутренними версионированными артефактами развертывания, то каталоги, такие как Vertex AI Model Garden (Google Cloud, 2026), индексируют внешние семейства моделей и базовые модели (например, Llama 2 (Touvron et al., 2023)) для оценки, дообучения и первичного выбора.
Конечные точки вывода открывают проверенную модель для живого трафика. Легковесные сервисы часто используют REST API поверх HTTP/1.1 для оценки в реальном времени, тогда как высокопроизводительные системы применяют двоичные RPC-протоколы, такие как gRPC поверх HTTP/2, чтобы устранить узкие места JSON-сериализации и уменьшить нагрузку на разбор на CPU. В зависимости от требований к производительности системы обслуживания настраивают выделенные экземпляры ускорителей (например, GPU или TPU) либо используют бессерверный вывод19, который масштабирует вычислительные ресурсы до нуля в простое.
Чтобы сохранять происхождение и аудируемость, команды отслеживают артефакты моделей, включая скрипты, веса, журналы и метрики, с помощью таких инструментов, как MLflow20 (Databricks, 2024). Вместе реестры, конечные точки, отслеживание происхождения и распределенные фреймворки оркестрации, такие как Ray21, превращают результаты A/B-тестов в контролируемые продакшен-изменения: протестированную модель можно продвинуть, наблюдать и откатить, не теряя происхождения.
Оптимизация формата модели
Неоптимизированная модель PyTorch в eager-режиме отправляет операторы как отдельные запуски ядер через интерпретатор Python, многократно пересылая промежуточные тензоры активаций через память высокой пропускной способности (HBM) и неся накладные расходы на запуск, которые раздувают задержку p99 далеко за строгие SLO. Оптимизация формата компилирует динамический граф вычислений в статическое представление, настроенное под оборудование: оно объединяет соседние ядра, сворачивает константные веса и удаляет мертвый код. «Выбор среды выполнения вывода» и «Выбор точности для обслуживания» подробно описывают лежащие в основе среды выполнения и выбор численной точности, однако эксплуатация этих форматов требует управления процессом конвертации и валидации.
Первая эксплуатационная граница — представление. Open Neural Network Exchange (ONNX) — широко используемый формат обмена для переносимости моделей, но выбор среды выполнения и провайдера исполнения определяет целевое оборудование, поддерживаемые операторы и доступные оптимизации. ONNX Runtime делает упор на общий API для нескольких бэкендов, а TensorRT специализирует выполнение для GPU NVIDIA; реальную производительность нужно измерять для конкретной модели и оборудования. Типичный процесс экспортирует модель PyTorch в ONNX, выполняет очистку графа (сворачивание констант и удаление мертвого кода), объединяет совместимые операторы, выбирает точность и на каждом шаге проверяет численное и прикладное поведение относительно исходной модели. Репрезентативные варианты из «Фреймворков оптимизации моделей» различаются переносимостью, охватом оборудования и механизмами оптимизации.
| Фреймворк | Исходные форматы | Целевое оборудование | Ключевые оптимизации |
|---|---|---|---|
| ONNX Runtime | PyTorch, TF, Keras, scikit | CPU, GPU, NPU | Оптимизация графа, слияние операторов, квантование |
| TensorRT | ONNX, TF, PyTorch | Только GPU NVIDIA | Автонастройка ядер, калибровка точности, слияние слоев |
| OpenVINO | ONNX, TensorFlow/TFLite, PyTorch, PaddlePaddle | CPU, GPU и NPU Intel | Сжатие модели, асинхронное выполнение, кеширование |
| TF-TRT | TensorFlow | GPU NVIDIA | Интеграция TensorRT внутри графа TensorFlow |
| Core ML | TensorFlow, PyTorch | Apple Neural Engine, GPU, CPU | Единый формат для устройств Apple, вывод на устройстве |
| TFLite | TensorFlow, Keras | CPU мобильных устройств, GPU, Edge TPU | Квантование, поддержка делегатов, сжатие модели |
Фреймворки оптимизации моделей: шесть репрезентативных фреймворков различаются поддерживаемыми исходными форматами, целевым оборудованием и механизмами оптимизации. TensorRT и TF-TRT специфичны для NVIDIA, тогда как ONNX Runtime и OpenVINO охватывают несколько классов процессоров.
Устойчивый архитектурный компромисс — это переносимость против пиковой производительности: каждый прирост пропускной способности ускорителя оплачивается обязательствами перед специализированной средой выполнения и ограничениями на операторы. Численная точность образует вторую эксплуатационную границу. Снижение точности через квантование (например, с FP32 или FP16 до INT8 или FP8) удваивает пропускную способность арифметики и снимает нагрузку на пропускную способность памяти тензорных ядер. С эксплуатационной точки зрения главное препятствие при квантовании — убедиться, что представления INT8 или FP8 сохраняют численную точность на живом нестационарном производственном трафике, а не только на статичных срезах калибровки. Механика посттренировочного квантования (PTQ), обучения с учетом квантования (QAT) и смешанной точности рассмотрена в «Сжатии моделей», а выбор точности во время выполнения описан в «Выборе точности для обслуживания».
Развертывание оптимизированных моделей поэтому требует валидации, которая нацелена на режимы отказа, которые оптимизация может незаметно вносить. Рассмотрим команду, которая развертывает модель, квантованную в INT8, проверив только прирост пропускной способности: точность классификации падает на редких, но дорогих граничных случаях, и деградация остается незамеченной неделями, потому что агрегированные метрики остаются в пределах SLO. Первый слой валидации — численная эквивалентность: оптимизированные выходы сравниваются с исходной моделью на репрезентативном тестовом наборе с порогами расхождения, заданными для конкретного приложения. Эта проверка необходима, но недостаточна, потому что редкие входы, примеры вне распределения и случаи, специфичные для подгрупп, могут выявить артефакты квантования, которые скрывают агрегированные тестовые метрики.
Второй слой — эксплуатационная валидация. Объем памяти нужно измерять при пиковой загрузке среды выполнения, включая динамические выделения во время вывода, поскольку некоторые оптимизации обменивают рост памяти времени выполнения на скорость вычислений. Поведение прогрева зависит от среды выполнения: Accelerated Linear Algebra (XLA) может компилировать ядра JIT при первом запуске, тогда как TensorRT выбирает тактики и собирает движок до развертывания; загрузка такого движка все равно может добавлять задержку запуска. Совместимость версий среды выполнения замыкает цикл: конфигурации развертывания требуют явной фиксации версий, потому что даже незначительные изменения среды выполнения могут влиять и на характеристики производительности, и на численную корректность.
Обслуживание вывода
Сериализованный файл модели на диске приносит пользу, только если он сочетается с инфраструктурой выполнения, которая принимает сетевые запросы, подготавливает входы, планирует вычисления на ускорителе и возвращает предсказания в строгих границах задержки. Эксплуатация инфраструктуры обслуживания в гипермасштабе — например, десятки триллионов выводов в сутки, о которых сообщается для парков серверов (Hazelwood et al., 2018), — требует непрерывного управления жизненным циклом наряду с формальными SLO, описанными в «Обслуживании моделей».
Промышленные фреймворки обслуживания, такие как TensorFlow Serving (Olston et al., 2017), NVIDIA Triton Inference Server (NVIDIA, 2024) и KServe (KServe Community, 2024), предоставляют стандартизированные механизмы для развертывания, версионирования и масштабирования моделей. С эксплуатационной точки зрения ключевое решение — какой фреймворк лучше всего подходит к контексту развертывания: TensorFlow Serving для рабочих процессов, нативных для TensorFlow, Triton для многофреймворкового обслуживания на GPU и KServe для нативных для Kubernetes сред, которым нужно масштабирование до нуля.
Какой бы парадигмой обслуживания ни пользовались (онлайновой, офлайновой или почти онлайновой, как описано в «Спектре архитектур обслуживания»), вывод модели часто составляет лишь долю общей сквозной задержки. Разложение бюджета задержки показывает, лежит ли эксплуатационное узкое место в модели или в другом месте пути запроса.
Бюджет задержки
У сервиса SLO по p99 составляет 100 мс, бюджет вывода модели — 45 мс; оставшиеся 55 мс должны покрыть все остальные этапы пути запроса. «Компоненты бюджета задержки» распределяет бюджет по жизненному циклу запроса:
Компонент Доля бюджета Бюджет p99 Рычаг оптимизации Сетевой RTT 15% 15 мс Пограничное развертывание, пул соединений Извлечение признаков 25% 25 мс Кеширование признаков, предвычисление Разбор запроса 5% 5 мс Бинарные протоколы (gRPC), оптимизация схемы Вывод модели 45% 45 мс Квантование, батчинг, дистилляция модели Постобработка 5% 5 мс Асинхронная обработка, кеширование результатов Сериализация ответа 5% 5 мс Эффективные форматы (Protobuf, MessagePack) Компоненты бюджета задержки: репрезентативное распределение SLO p99 в 100 мс по жизненному циклу запроса. Вывод модели составляет 45 процентов общей задержки, оставляя большую часть сети, извлечению признаков, разбору, постобработке и сериализации. Столбец рычагов оптимизации показывает, где можно уменьшить каждый компонент.
Системный вывод: оптимизация одной только модели часто дает меньше 50 процентов возможного выигрыша по задержке. Модель, которая работает в 2 раза быстрее, сокращает этот пример со 100 мс до 77,5 мс — сквозное улучшение лишь в 1,3 раза, потому что вывод занимает 45 процентов общей задержки.
Системное мышление требует сквозного анализа. Применяйте таксономию D·A·M, чтобы диагностировать первопричину в разрезе Данных (накладные расходы на извлечение признаков, стоимость сериализации), Алгоритма (слишком много слоев, неоптимизированный граф) и Машины (насыщение пропускной способности памяти, тепловой троттлинг). Измеряйте сквозную производительность и оптимизируйте связывающее узкое место. Если извлечение признаков выходит за свой бюджет, никакая оптимизация модели не обеспечит SLO.
Помимо бюджета задержки, эксплуатация обслуживания требует выбора инфраструктурных техник под то ограничение, которое вскрыл бюджет. «Техники систем обслуживания» сводит репрезентативные стратегии для инфраструктуры ML как сервиса; организующий вопрос — лежит ли узкое место в задержке очереди, емкости, маршрутизации, накладных расходах оркестрации или прогнозировании задержки.
| Техника | Описание | Пример системы |
|---|---|---|
| Планирование запросов и батчинг | Группирует запросы вывода для повышения пропускной способности и снижения накладных расходов | Clipper (Crankshaw et al., 2017) |
| Выбор экземпляра и маршрутизация | Динамически назначает запросы вариантам модели по ограничениям | INFaaS (Romero et al., 2021) |
| Предиктивное автомасштабирование | Добавляет мощность до всплесков спроса, чтобы выполнять SLO по задержке | MArk (Zhang et al., 2019) |
| Автомасштабирование | Подстраивает число экземпляров модели под нагрузку | INFaaS |
| Оркестрация моделей | Координирует выполнение между компонентами модели или конвейерами | AlpaServe (Li et al., 2023) |
| Прогнозирование времени выполнения | Прогнозирует задержку для оптимизации планирования запросов | Clockwork (Gujarati et al., 2020) |
Техники систем обслуживания: масштабируемая инфраструктура ML как сервиса опирается на техники вроде планирования запросов и выбора экземпляра, чтобы оптимизировать использование ресурсов и снижать задержку при высокой нагрузке. Основы теории очередей и стратегии батчинга см. в «Обслуживании моделей».
Эти стратегии составляют основу облачного обслуживания. Пограничное развертывание сохраняет ту же эксплуатационную цель, но меняет ограничения: откат, телеметрия и управление обновлениями должны работать на устройствах с ограниченной мощностью, памятью и связью.
Развертывание Edge AI
Рассмотрим датчик дыма с ML-моделью, которая отличает дым от готовки от дыма от пожара. Когда эта модель деградирует, инженер не может просто подключиться к устройству по SSH, откатить его к предыдущей версии и перезапустить. Устройство висит на чьем-то потолке с перебоями Wi-Fi, батарейкой-таблеткой и 256 КБ памяти. Каждое эксплуатационное допущение облачного MLOps (мгновенный откат, централизованное логирование, мониторинг в реальном времени) приходится переосмыслить.
Edge AI воплощает этот сдвиг: ML-вывод происходит у источника данных или рядом с ним, а не в централизованной облачной инфраструктуре (Reddi et al., 2019). Нагрузки, которые определяются жесткими сроками задержки, каналами с ограниченной пропускной способностью, гарантиями приватности данных или бюджетами мощности менее ватта, требуют выполнять вывод прямо на периферийном кремнии. Эта эксплуатационная парадигма вводит три взаимозависимых системных ограничения: лимиты ресурсов, иерархическое многоуровневое выполнение и отказоустойчивые механизмы обновления по воздуху (OTA).
Ограничения ресурсов определяют большинство решений о развертывании на периферии. Пограничным устройствам нужны агрессивные методы оптимизации моделей, описанные в «Сжатии моделей» (квантование, прореживание, дистилляция знаний), чтобы уложиться в бюджеты памяти и мощности развертываний класса микроконтроллеров (Warden and Situnayake, 2020); (David et al., 2021). Бюджеты мощности охватывают четыре порядка величины: от милливатт для датчиков IoT до десятков ватт в автомобильных системах, что требует планирования вывода с учетом мощности и управления тепловым режимом. Некоторые жесткие приложения реального времени, критичные к безопасности, задают детерминированные временные требования, которые требуют анализа худшего времени выполнения (WCET) в неблагоприятных условиях, включая тепловой троттлинг и конкуренцию за память.
Бюджеты мощности на периферии охватывают датчики, шлюзы и автомобили на несколько порядков.
Эти ограничения формируют естественную иерархию развертывания из трех уровней. Обработка на уровне датчиков выполняет немедленную фильтрацию данных и извлечение признаков на устройствах класса микроконтроллеров, потребляющих 1 – 100 мВт. Обработка на периферийном шлюзе выполняет промежуточный вывод на прикладных процессорах с бюджетами мощности 1 – 10 Вт. Облачная координация управляет распространением моделей, агрегированным обучением и сложными рассуждениями, которые требуют ресурсов класса GPU. Эта иерархия позволяет оптимизировать систему целиком: вычислительно дорогие операции переносятся наверх, а решения, критичные к задержке, остаются локальными.
Два контекста развертывания заслуживают особого внимания. TinyML нацелен на вывод на микроконтроллерах при жестких ограничениях памяти и мощности порядка милливатт и требует специализированных движков, таких как TensorFlow Lite Micro и CMSIS-NN (David et al., 2021); (Lai et al., 2018). Архитектуры моделей должны проектироваться совместно с аппаратными ограничениями, отдавая предпочтение компактным операторам, квантованию и стратегиям прореживания, степень агрессивности которых зависит от устройства и целевой точности. Mobile AI распространяет пограничное развертывание на смартфоны с умеренной вычислительной мощностью, используя NPU и вычислительные шейдеры GPU, чтобы соблюдать ограничения интерактивной задержки и времени работы от батареи через планирование с учетом мощности.
Обновления и мониторинг завершают эксплуатационную картину для периферии. Обновления модели по воздуху (OTA) позволяют обслуживать физически недоступные системы. Конвейеры OTA нуждаются в безопасной доставке моделей, проверке артефактов и механизмах отката; дельта-обновления или дифференциальные обновления могут сократить объем передачи, когда устройствам не нужно получать полный артефакт модели. На микроконтроллерах и встраиваемых целях отказоустойчивый откат OTA физически опирается на двухбанковую флеш-память: операционная система загружается из банка A, пока кандидат модели и среда выполнения записываются в банк B. Активный аппаратный сторожевой таймер (watchdog) отслеживает первые выводы после обновления; если новая модель вызывает сбои памяти, зависания или нарушает бюджеты задержки, загрузчик автоматически возвращает выполнение к банку A, не давая физически недоступным устройствам превратиться в «кирпичи». Планирование обновлений должно учитывать режимы связи устройств, доступность питания и операционную критичность.
Мониторинг требует адаптации к средам с ограниченными ресурсами: легковесные системы телеметрии собирают ключевые метрики (задержку вывода, потребление энергии, индикаторы точности), минимизируя накладные расходы. Мониторинг здоровья отслеживает состояние устройства (тепловой режим, уровень батареи, качество связи), чтобы предсказывать потребность в обслуживании. Паттерны координации «периферия–облако» позволяют адаптивно переносить нагрузку между уровнями в зависимости от текущей загрузки, состояния сети и требований к задержке. Кеширование признаков на периферийных шлюзах сокращает избыточные вычисления, а федеративное обучение позволяет пограничным устройствам вносить вклад в обновления модели вместо передачи сырых обучающих записей. Сырые обновления параметров остаются уязвимыми для атак инверсии градиентов и восстановления данных, если их не дополнить дифференциальной приватностью или протоколами безопасной агрегации.
Плавная деградация (graceful degradation) — определяющий эксплуатационный паттерн для Edge AI. Когда тепловые пределы или разряд батареи ограничивают аппаратную мощность, среды выполнения на периферии должны динамически сбрасывать нагрузку: понижать частоту дискретизации входа, обходить спекулятивные ветви выполнения или переходить к простым эвристическим моделям, чтобы гарантировать непрерывную безопасную работу.
Вывод моделей в продакшен — лишь половина эксплуатационной задачи. Успешно развернутая модель может деградировать из-за сдвига распределения или поврежденных входных признаков, не вызывая ошибок времени выполнения; это и есть незаметные режимы отказа, характерные для систем машинного обучения. Надежный мониторинг, реагирование на инциденты и практики дежурств замыкают этот цикл.
Управление ресурсами и мониторинг
Развертывание и обслуживание выводят модели в продакшен. Чтобы поддерживать их в рабочем состоянии, нужны две взаимодополняющие дисциплины: управление ресурсами (выделение и масштабирование вычислений, хранилища и сети) и мониторинг (наблюдение за поведением системы и выявление деградации до того, как ее заметят пользователи).
Управление инфраструктурой
Проиллюстрируем проблему тремя сбоями. Модель работает на промежуточном стенде, но падает в продакшене, потому что кто-то вручную выделил другой тип GPU. Задание обучения аварийно завершается, потому что эксперимент коллеги занял всю доступную память. Сервис вывода не может масштабироваться, потому что его квоты ресурсов задали неформальным сообщением полгода назад. У этих сбоев общая первопричина: инфраструктура управляется ручными процессами, а не кодом.
Масштабируемая и устойчивая инфраструктура — основа эксплуатации ML-систем, а инфраструктура как код (IaC) — практика, которая делает ее надежной. IaC рассматривает конфигурацию инфраструктуры как программное обеспечение (под контролем версий, проверяемое, тестируемое и исполняемое автоматически), а не настраиваемое вручную через графические интерфейсы или командную строку. Этот подход привносит дисциплину программной инженерии в управление ресурсами: изменения отслеживаются, конфигурации можно протестировать до развертывания, а окружения можно надежно воспроизвести.
Конкретный инструмент инфраструктуры важен меньше, чем контракт, который он навязывает. Terraform (HashiCorp, 2014), AWS CloudFormation (Amazon Web Services, 2024) и Ansible (Hatcher, 2024) — распространенные способы версионировать определения инфраструктуры рядом с кодом приложения. В настройках MLOps именно версионированное определение позволяет команде воспроизвести тип GPU, сетевую политику, права доступа к хранилищу и лимиты масштабирования, используемые в среде обучения или обслуживания, в AWS (Amazon Web Services, 2024), Google Cloud Platform (Google Cloud, 2024), Microsoft Azure (Microsoft, 2024) или локальной инфраструктуре.
Управление инфраструктурой охватывает весь жизненный цикл ML. Во время обучения скрипты IaC выделяют вычислительные экземпляры с ускорителями GPU или TPU, настраивают распределенное хранилище и развертывают контейнерные кластеры. Поскольку определения инфраструктуры хранятся как код, их можно аудировать, переиспользовать и встраивать в конвейеры CI/CD, обеспечивая согласованность окружений.
Контейнеризация дает ту же границу воспроизводимости для зависимостей времени выполнения. Docker (Merkel, 2014) упаковывает модель, библиотеки и код обслуживания в изолированную единицу, а системы оркестрации, такие как Kubernetes (Cloud Native Computing Foundation, 2024), управляют этими единицами в кластерах. Эксплуатационная ценность — не название контейнера, а возможность многократно развертывать один и тот же артефакт, при этом выделение ресурсов, масштабирование и управление здоровьем остаются явными.
Чтобы справляться с изменениями интенсивности нагрузки, включая всплески при подборе гиперпараметров и наплывы трафика предсказаний, команды опираются на эластичность облака и автомасштабирование.22 Облачные платформы поддерживают предоставление ресурсов по требованию и горизонтальное масштабирование. Механизмы автомасштабирования (Amazon Web Services, 2024) автоматически корректируют вычислительную мощность на основе метрик использования, позволяя командам оптимизировать одновременно производительность и экономическую эффективность.
Инфраструктура в MLOps не ограничивается облаком. Многие развертывания охватывают локальные, облачные и пограничные среды в зависимости от задержки, приватности или нормативных ограничений. Надежная стратегия управления инфраструктурой должна учитывать это разнообразие, предлагая гибкие целевые среды развертывания и единое управление конфигурацией во всех средах.
Инфраструктура как код решает, как воспроизводимо выделять ресурсы, однако операторам все равно нужно решить, когда и сколько мощности выделять. Нагрузки ML нарушают допущения обычного веб-предоставления ресурсов. Задания обучения требуют высококонкурентных всплесков по распределенным топологиям ускорителей, что создает трение между эффективностью использования кластера и временем до результата. Сервисы вывода требуют устойчивого базового выделения с быстрым эластичным расширением, чтобы поглощать всплески запросов при строгих SLO по хвостовой задержке.
Паттерны загрузки аппаратуры
Выделение ресурсов ускорителей — лишь первая половина задачи; использовать их эффективно можно, только правильно интерпретируя аппаратные метрики, а не принимая их на веру. Стандартные метрики загрузки GPU могут вводить операторов в заблуждение, потому что приводимые проценты отражают временную занятость, а не активное выполнение. Такие инструменты, как nvidia-smi, сообщают долю времени, в течение которого хотя бы один варп был активен на любом потоковом мультипроцессоре (SM). Ядро, простаивающее сотни тактов в ожидании выборок из HBM или передач по PCIe от хоста к устройству, отображается как 100-процентно активное, маскируя серьезное насыщение пропускной способности памяти или голодание конвейера за внешне здоровой цифрой загрузки.
Чтобы отличить выполнение вычислений от простоев из-за памяти или конвейера, нужно оценивать эффективность выполнения SM наряду с пропускной способностью памяти и насыщением ввода-вывода. «Паттерны загрузки GPU» различает эти сигнатуры загрузки и указывает соответствующую стратегию оптимизации для каждой:
| Паттерн | Загрузка GPU | Загрузка пропускной способности памяти | Стратегия оптимизации |
|---|---|---|---|
| Ограничено вычислениями | >85% | <70% | Большие размеры батчей, тензорный параллелизм внутри узла |
| Ограничено памятью | 50–85% | >85% | Уменьшить размер модели, квантовать, оптимизировать доступ к памяти |
| Ограничено вводом-выводом (I/O) | <50% | <50% | Улучшить конвейер данных, предзагружать входы, использовать SSD |
| Недостаток батчей | Переменная (пиками) | Переменная | Динамический батчинг, очередь запросов на одном сервере |
Паттерны загрузки GPU: разные сигнатуры загрузки требуют разных оптимизаций. Высокая загрузка GPU при низкой пропускной способности памяти указывает на нагрузки, ограниченные вычислениями, которым выгоден параллелизм. Высокая пропускная способность памяти при умеренной загрузке GPU говорит о нагрузках, ограниченных памятью, которым нужна оптимизация модели.
Целевые показатели загрузки по нагрузкам
Репрезентативные целевые показатели загрузки зависят от характеристик нагрузки и отражают различия в допустимой задержке и чувствительности к стоимости между режимами эксплуатации. Для пакетного обучения операторы стремятся к устойчивой загрузке GPU выше 80 процентов; более низкие значения обычно указывают на узкие места предвыборки данных, несогласованный доступ к памяти или слишком маленькие микробатчи. В отличие от этого, онлайн-вывод ориентируется на загрузку 50–70 процентов при медианной нагрузке, намеренно оставляя запас мощности 30–50 процентов, чтобы поглощать непредсказуемые всплески трафика без нарушения SLO по хвостовой задержке; работа оборудования вывода почти на пределе мощности каскадно превращает задержки очередей в тайм-ауты p99. Для пакетного вывода, где запросы выдерживают значительное ожидание в очереди и офлайн-планирование, целевые значения поднимаются выше 85 процентов, чтобы максимизировать пропускную способность и амортизировать стоимость ускорителя.
Эти цифры служат отправными точками для диагностики, а не универсальными порогами: одно и то же показание загрузки сигнализирует о здоровом запасе в пуле онлайн-обслуживания и о недопустимом простое мощности в пакетном конвейере.
Эффекты иерархии памяти
Производительность обслуживания моделей критически зависит от использования иерархии памяти GPU. Данные должны проходить через несколько уровней памяти с сильно различающейся пропускной способностью (раздел «Иерархия памяти» приложения «Основы машины» показывает полную иерархию задержек по спектру хранения), что количественно описывает «Иерархия памяти GPU и пропускная способность». Кеш L2 — это аппаратно управляемый кеш для небольшого активного рабочего набора, а не уровень размещения выбранных весов. Полные параметры модели обычно находятся в HBM; более крупные модели могут выгружать параметры или состояние в память хоста или хранилище, и тогда задержка передачи часто доминирует над временем вывода. Раздел «Числа, которые нужно знать» приложения «Основы машины» сводит текущие спецификации ускорителей и пропускные способности HBM, на которые опираются эти цифры обслуживания, поэтому емкости и пропускные способности интерфейсов в «Иерархии памяти GPU и пропускной способности» восходят к документированным значениям для каждого поколения, тогда как пропускная способность кеша L2 на кристалле — приближенная величина, которую производители напрямую не публикуют:
| Уровень памяти | Пропускная способность | Типичное содержимое |
|---|---|---|
| L2-кеш (40 МБ на A100) | ~3 ТБ/с | Кешированный рабочий набор |
| Память GPU HBM2e (80 ГБ) | ~2 ТБ/с | Модель |
| PCIe Gen4 x16 к CPU | ~32 ГБ/с | Активации |
| Системная RAM (512 ГБ) | ~200 ГБ/с | Батчи входов |
| NVMe SSD | ~7 ГБ/с | Подкачка модели |
Иерархия памяти GPU и пропускная способность: каждый уровень обменивает емкость на скорость. L2 кеширует небольшой активный рабочий набор, тогда как полные параметры модели обычно находятся в HBM. Выгрузка в память хоста или хранилище может поддерживать модели, которые превышают память GPU, но задержка передачи может доминировать во времени вывода.
Для обслуживания больших языковых моделей (LLM) на одном GPU или сервере KV-кеш (хранящий ключи и значения внимания для каждого токена) часто становится узким местом памяти; дизайн PagedAttention в vLLM был мотивирован именно этим давлением на обслуживание (Kwon et al., 2023). Для модели в стиле Llama 2 с 70 миллиардами параметров и группированным вниманием (grouped-query attention) (Touvron et al., 2023), имеющей 80 слоев, 8 KV-голов, контекст 4 096 токенов и записи кеша в FP16, каждая активная последовательность хранит около 1,3 ГБ KV-кеша. Восемь одновременных последовательностей, таким образом, занимают около 10,7 ГБ до учета запаса планировщика, фрагментации или активаций, что ограничивает число запросов, которые один узел может объединить в батч. Мониторинг загрузки KV-кеша на каждом узле обслуживания позволяет планировать емкость. Вблизи предела памяти планировщик может ставить запросы в очередь или отклонять их, уменьшать размер батча или сокращать допустимый контекст, и каждый из этих шагов имеет свою цену для задержки или качества обслуживания.
Отслеживание стоимости одного вывода
Пусть — выставленная стоимость обслуживающего GPU за один час, а — его устойчивая пропускная способность за тот же интервал. «Стоимость вывода» переводит эти аппаратные метрики в бизнес-значимую стоимость одного вывода:
Для иллюстративного GPU, который стоит $3 в час и обрабатывает 50 000 выводов в час, стоимость составляет $0,06 за 1 тыс. выводов. Отслеживайте эту метрику во времени: изменения могут отражать ценообразование, состав нагрузки или эффективность.
Мониторинг модели и инфраструктуры
Управление инфраструктурой выделяет ресурсы; мониторинг наблюдает за их поведением. Модульные тесты могут проверить детерминированные компоненты, но сами по себе не установят предсказательную производительность на уровне популяции, которую нужно оценивать статистически. Мониторинг реализует наблюдаемую деградацию («Базовые принципы»), превращая это теоретическое ограничение в эксплуатационную практику. Как только мониторинг выявляет симптом (нарушение соглашения об уровне обслуживания (SLA) по задержке, пропускная способность ниже цели или постепенный рост памяти), раздел «Диагностика узкого места» приложения «Таксономия D·A·M» сопоставляет этот симптом с доминирующим членом D·A·M и подсказывает оператору, какие оптимизации сдвинут связывающее ограничение, а какие будут потрачены впустую на инфраструктуру обслуживания. Без непрерывного мониторинга и более глубокой наблюдаемости (observability), которую он обеспечивает (способности выводить внутреннее состояние по выходам), развернутая модель остается черным ящиком, медленно дрейфующим к неактуальности.
Эффективный мониторинг охватывает и состояние инфраструктуры, и статистическое поведение модели. Со стороны инфраструктуры метрики отслеживают насыщение оборудования, выделение памяти и распределения задержек. Со стороны модели команды отслеживают метрики оценки, такие как точность, precision, recall и сдвиги матрицы ошибок (scikit-learn developers, 2024), по потокам живых предсказаний.
Фундаментальное ограничение статистического мониторинга — задержка обнаружения дрейфа: как быстро статистический тест может подтвердить, что качество предсказаний деградировало. Скорость подтверждения определяется частотой поступления выборок и требованиями к статистической мощности. Сервисы с низким трафиком могут ждать дни или недели, пока накопится достаточно размеченных исходов, чтобы отличить реальное снижение качества от случайного шума. Этот разрыв во времени — не инженерный недостаток, который инструменты могут устранить; это прямое следствие конечной частоты выборок, столкнувшейся с мощностью проверки гипотез. Поэтому архитектуры мониторинга должны разделять сдвиги входного распределения (обнаруживаемые сразу по неразмеченным данным вывода) и сдвиги границы решения (обнаруживаемые только после прихода эталонных меток).
Скорость обнаружения дрейфа ограничена частотой выборки.
Задержка обнаружения дрейфа
Задача: модель с точностью 95 процентов может упасть на 5 процентных пунктов. Политика мониторинга выделяет бюджет в 1 000 размеченных примеров; точное требование зависит от теста, мощности, шума меток и зависимости. Сколько времени займет сбор?
Расчет:
- Бюджет доказательств: 1 000 размеченных примеров.
- Случай высокой частоты: при 1 размеченном исходе в секунду сбор займет 1 000 секунд ≈ 16,7 минуты.
- Случай низкой частоты: при 100 размеченных исходах в день сбор займет 10 дней.
Системный вывод: обнаружение ограничено поступлением размеченных исходов, которое может сильно отставать от трафика. В доменах с малым объемом или задержанными метками может понадобиться дни или недели, поэтому системы с высокими ставками дополняют статистический мониторинг проактивными аудитами моделей.
Когда телеметрия сигнализирует о деградации, диагностика первопричины и выполнение отката требуют строгого отслеживания происхождения (lineage tracking) внутри реестра моделей. Там, где это практично, каждая зарегистрированная версия модели должна ссылаться на неизменяемые дайджесты кода обучения, снимка набора данных, гиперпараметров и сериализованных артефактов весов. Эта цепочка позволяет выполнять воспроизводимые откаты к проверенным контрольным точкам, но она не может гарантировать побитовую воспроизводимость, если версии драйверов, библиотеки CUDA или недетерминированные ядра редукции различаются по парку кластеров.
Деградация сама возникает по двум различным осям сдвига распределения23, которые системы мониторинга должны разделять.
Концептуальный дрейф возникает, когда связь между признаками и целевыми значениями сдвигается (меняется ), изменяя границу решения, даже если входные признаки выглядят нормально.
Дрейф данных24 — это сдвиг распределения входных признаков (меняется ), например сезонные изменения освещения или меняющиеся характеристики датчиков в автономном вождении.
Обе формы дрейфа мотивируют формальное определение:
Дрейф данных
Дрейф данных — это изменение входного распределения . Ковариатный сдвиг — частный случай, в котором меняется, а остается стабильным. Более широкая таксономия дрейфа из «Обнаружения дрейфа данных и реакции на него» также включает концептуальный дрейф, при котором меняется ; оба измерения могут возникать вместе.
- Значение: это нарушает допущение об одинаковом распределении и может вызвать размывание точности по мере роста расхождения распределений . При ковариатном сдвиге и допущениях о покрытии носителя взвешивание по важности или переобучение на текущих размеченных данных могут восстановить качество.
- Отличие: устаревание модели описывает наблюдаемое снижение качества со временем; код модели может не меняться. Дрейф данных — одна из возможных внешних причин наряду с концептуальным дрейфом и изменениями окружающего конвейера.
- Типичная ошибка: мониторинг одних только выходов модели может пропустить входной дрейф или принять безобидные изменения выходов за потерю качества. Статистика входных признаков ( через PSI, тесты KS или расстояние Вассерштейна, Earth Mover’s Distance (EMD)) может дать более раннее предупреждение, чем оценка по размеченным данным, поскольку обратная связь с эталонной истиной часто запаздывает.
Из-за дрейфа развернутая модель ведет себя как стареющий запас, а не как статичное программное обеспечение. Статистический риск дрейфа формализует эту опасность: операторы моделируют падение точности через эмпирическую расходимость,
где подбирается для каждого развертывания по историческим данным о деградации. Хотя это не универсальный закон, отслеживание расхождения распределений дает операционный опережающий индикатор деградации до того, как потери точности накопятся в бизнес-влияние.
«Кривая стареющего актива» иллюстрирует этот эксплуатационный компромисс, сопоставляя две политики обслуживания. Плановая политика (оранжевая пилообразная линия) переобучает модель через фиксированные 90-дневные интервалы независимо от реального состояния модели: она попеременно тратит вычисления, когда качество стабильно, и обслуживает деградировавшие предсказания, когда дрейф ускоряется раньше графика. Напротив, триггерная политика (зеленая линия) запускает переобучение только тогда, когда отслеживаемое качество пересекает порог дрейфа, поддерживая нижнюю границу точности и избегая ненужных заданий обучения.
Кривая стареющего актива: иллюстративный экспоненциальный спад точности при двух политиках обслуживания, обе нарисованы пилообразными линиями. Плановая политика сбрасывается каждые 90 дней независимо от точности и опускается ниже порога дрейфа перед каждым сбросом, тогда как триггерная политика сбрасывается только при пересечении этого порога и поэтому удерживает более высокий минимум. Ни один из ритмов не является универсальным.
Обе кривые превращают дрейф из абстрактной статистической задачи в выбор эксплуатационной политики. Переобучение по расписанию легко планировать, но оно может происходить слишком рано или слишком поздно; переобучение по триггеру требует более сильной телеметрии, зато связывает вмешательство с наблюдаемой деградацией.
Многоуровневый мониторинг и количественная оценка дрейфа
Расхождение распределений может сопровождать падение точности, но чтобы определить направление и величину деградации, нужны эталонные метки, которые часто приходят с существенной задержкой. В продакшене сбои обслуживания относятся к двум принципиально разным физическим режимам: непосредственным аппаратным узким местам выполнения и постепенному дрейфу распределений. Чтобы разделить их, нужны два различных слоя телеметрии: метрики инфраструктуры, которые показывают, ограничена ли сама система обслуживания вычислениями, памятью или вводом-выводом, и метрики распределений и исходов, которые связывают движение данных с качеством модели.
Первый слой — мониторинг на уровне инфраструктуры, который отслеживает такие показатели, как загрузка CPU и GPU, пропускная способность памяти, потребление диска, сетевая задержка и доступность сервисов. Одного измерения загрузки GPU недостаточно: ускоритель, который показывает большое время выполнения, может по-прежнему простаивать в ожидании передач из DRAM или по PCIe, тогда как низкая загрузка часто сигнализирует о узком месте предобработки на хосте. Сопоставление времен выполнения ядер с загрузкой пропускной способности памяти и глубиной очередей входного конвейера позволяет отличить поведение, ограниченное вычислениями, памятью и вводом-выводом.
Железный закон в продакшен-мониторинге
Эти паттерны загрузки напрямую соотносятся с железным законом ML-систем («Железный закон ML-систем»). Мониторинг показывает, какой член доминирует:
- Ограничено вычислениями (высокая загрузка GPU, низкая загрузка пропускной способности памяти): ограничено . Оптимизируйте ядра, используйте тензорные ядра или обновите оборудование.
- Ограничено памятью (умеренная загрузка GPU, высокая загрузка пропускной способности памяти): ограничено . Оптимизируйте квантованием, прореживанием или батчингом.
- Ограничено вводом-выводом (низкая загрузка GPU, низкая загрузка пропускной способности памяти): ограничено задержкой конвейера данных. Исправляйте DataLoader, а не модель.
Железный закон одновременно служит диагностической схемой для продакшен-систем. Когда нарушаются SLO по задержке, панель мониторинга указывает, какой член нужно исследовать.
Метрики энергоэффективности (например, выводов на джоуль или FLOP/s на ватт, в зависимости от нагрузки) добавляют нормированный по стоимости взгляд, который позволяет планировать смешанные нагрузки. Мониторинг температуры аналогично влияет на эксплуатационное планирование, особенно при длительной высокой нагрузке, когда тепловой троттлинг понижает частоты аппаратуры и вызывает скачки хвостовой задержки, нарушающие SLO. Конвейер телеметрии MLOps включает метрики теплового запаса, чтобы направлять трафик на доступные ускорители до начала троттлинга. Движки временных рядов, такие как Prometheus25 (Cloud Native Computing Foundation, 2024), Grafana (Labs, 2024) и Elastic (Elastic NV, 2024), собирают и визуализируют эти эксплуатационные метрики по всему парку серверов.
Сбор этих сигналов в продакшен-масштабе вводит серьезные ограничения сети и хранилища: захват несжатой телеметрии на каждый запрос может насытить ту самую сетевую инфраструктуру, которая обслуживает модель. Эти накладные расходы вынуждают сознательно выбирать между детализацией мониторинга и эксплуатационными расходами на инфраструктуру.
Экономика наблюдаемости
Компромисс: «измерить все» физически невозможно в масштабе. Пусть — расширенное число рядов, — частота выборки на ряд, — байты на выборку, а — длительность хранения; и — специфичные для провайдера цены приема и хранения. «Стоимость наблюдаемости» объединяет эти члены в ставку эксплуатационных расходов:
Произведение — это ставка эксплуатационных расходов, а не разовая стоимость настройки.
Оба объема данных следуют из одной и той же двухшаговой арифметики. При полной детализации телеметрия каждого запроса попадает в поток: 1 млн запросов в секунду 1 КБ на запрос = 1 ГБ/с. Сохранение одной трассы из 60 запросов снижает средний объем приема до 16,7 МБ/с; пакетная отправка выбранных трасс каждые 60 с меняет время доставки, но не среднюю байтовую скорость. «Выборка трасс и стоимость наблюдаемости» сопоставляет оба режима с их влиянием на стоимость.
Выборка Гранулярность Объем данных (1 млн запр./с) Влияние на стоимость Все трассы Микровсплески ~1 ГБ/с Высокое (нужен выделенный кластер) 1 из 60 трасс Тренды ~16,7 МБ/с Ниже (зависит от политики) Выборка трасс и стоимость наблюдаемости: сохранение одной трассы из 60 запросов дает разницу в объеме данных в 60 раз при 1 млн запросов в секунду и 1 КБ на запрос. Интервалы пакетирования сами по себе сокращения не дают.
Системный вывод: сохраняйте 1 процент успешных запросов и 100 процентов ошибок. Агрегатные счетчики мониторьте каждую секунду, а высококардинальные скетчи — каждые 60 с; «Мониторинг качества данных» показывает, как рассчитать бюджет инфраструктуры.
Механизмы оповещений превращают эти эксплуатационные сигналы в упреждающее вмешательство раньше, чем незаметная деградация распространится дальше по системе. Устойчивое падение точности модели запускает расследование дрейфа; оповещения инфраструктуры сигнализируют о насыщении памяти, тепловом троттлинге или снижении пропускной способности сети. Задержка этих оповещений определяет окно необнаруженного сбоя. Оповещения должны фиксировать версию модели, затронутую подгруппу входов и окно агрегации, которое сработало, чтобы реагирующие могли изолировать и воспроизвести состояние сбоя.
Мониторинг рекомендаций в масштабе
Сценарий: рассмотрим высокопроизводительный потоковый сервис рекомендаций, задержка которого оставалась в пределах SLO, тогда как качество рекомендаций снижалось по мере изменения поведения пользователей.
Диагностика: традиционные метрики инфраструктуры (загрузка CPU, доля HTTP-ошибок) оставались зелеными, тогда как CTR модели падал, потому что глобальные метрики маскировали локализованную деградацию подгрупп.
Системный урок: одна только телеметрия инфраструктуры не может обнаружить статистический сбой модели. Высокопроизводительным системам рекомендаций нужны отслеживание подгрупп на уровне когорт и контрфактическая оценка, чтобы выявлять локализованный дрейф точности.
Мониторинг качества данных
Телеметрия инфраструктуры отслеживает доступность системы, но модели отказывают незаметно, когда получают поврежденные или сдвинутые данные. К тому времени, когда бизнес-метрики ниже по потоку ухудшаются, повреждение данных в вышестоящих источниках может длиться днями или неделями. Мониторинг качества данных выявляет эти дефекты входа до вывода, тогда как мониторинг выходов и результатов подтверждает, искажают ли сдвиги распределения точность предсказаний. Первый барьер на входе — исполняемая валидация: листинг «Проверка схемы данных» иллюстрирует ожидания к схеме, которые отвергают некорректные пачки до вывода и превращают неявные допущения о данных в исполняемые программные контракты.
Валидация входных данных: правила проверки схемы проверяют наличие столбцов, типы данных, пустые значения и статистические границы, чтобы поймать проблемы качества данных до того, как они распространятся на вывод модели.
schema.require_column("user_id")
schema.require_type("timestamp", "datetime")
schema.require_non_null("feature_a")
schema.require_range("age", min_value=0, max_value=120)
schema.require_mean_between(
"purchase_amount", min_value=10, max_value=1000
)
Валидация входных данных
Валидация схемы26 выявляет структурные дефекты на этапе приема. Эти проверки обеспечивают наличие столбцов, строгую типизацию данных, ограничения на пустые значения и инварианты числовых границ.
Мониторинг распределения признаков
Валидация схемы выявляет структурное повреждение (отсутствующие столбцы, неверные типы, пустые значения), но не может обнаружить более тонкий режим отказа, когда данные приходят в правильном формате, но из сдвинутого распределения. Признак, описывающий возраст пользователя, может пройти все проверки схемы, в то время как его среднее незаметно смещается с 32 до 45 лет за три месяца, когда маркетинг привлекает более взрослую аудиторию. Этот сдвиг распределения снижает точность модели задолго до того, как появится какая-либо структурная аномалия.
Постепенная долгосрочная деградация особенно коварна, потому что она обходит грубые пороги обнаружения: небольшие ежедневные изменения метрики качества накапливаются в существенную деградацию за год, не задевая ежемесячных оповещений. Сезонные закономерности усложняют картину: модель, обученная летом, может хорошо работать осенью, но отказать в зимних условиях, которых она никогда не наблюдала. Обнаружение такой постепенной деградации требует многомасштабного мониторинга: базовых показателей качества на нескольких временных горизонтах (ежедневном, еженедельном, ежеквартальном), сравнения по скользящим окнам, которое выявляет медленные тренды, и сезонных профилей, учитывающих циклические колебания.
Статистические меры расстояния количественно оценивают это расхождение, сравнивая распределения обслуживания с обучающими базовыми значениями. «Пороги распределения признаков» задает репрезентативные пороги оповещений для трех распространенных метрик: индекс стабильности популяции (PSI) подходит для категориальных и бинированных признаков, статистика Колмогорова — Смирнова (KS) — для непрерывных распределений, а дивергенция Дженсена — Шеннона дает симметричное и ограниченное сравнение вероятностных распределений.
| Метрика | Порог оповещения | Область применения |
|---|---|---|
| PSI | PSI > 0,25 | Категориальные и бинированные признаки |
| Статистика Колмогорова — Смирнова | KS > 0,1 | Непрерывные распределения признаков |
| Дивергенция Дженсена — Шеннона | JS > 0,1 | Вероятностные распределения |
Пороги распределения признаков: исходные точки для обнаружения дрейфа, которые на практике калибруются под чувствительность каждого признака и бизнес-влияние. Пороги PSI 0,1 и 0,25 — распространенные условные значения мониторинга скоринговых карт, тогда как пороги KS и JS нужно калибровать под признак, размер выборки и стоимость пропущенного дрейфа. Более высокие пороги снижают усталость от оповещений, но рискуют пропустить постепенный дрейф.
PSI27 количественно оценивает сдвиг распределения, сравнивая ожидаемые (обучающие) и фактические (обслуживающие) частоты по фиксированным бинам (раздел «Измерение дрейфа (расхождение)» приложения «Основы данных» развивает математические основы дивергенции Кульбака — Лейблера, PSI и теории информации для мониторинга систем). Здесь — число фиксированных бинов, а и — выровненные строго положительные доли бинов, которые в каждом распределении в сумме дают единицу. PSI формализует метрику:
Продакшен-мониторам нужна задокументированная политика для пустых бинов, например сглаживание Лапласа, потому что любой пустой бин в знаменателе дает неопределенный логарифм. Мониторы также должны сохранять фиксированные границы бинов между периодами сравнения; PSI — это сигнал дрейфа, а не автоматический триггер переобучения.
Для дискретных или бинированных распределений другим вариантом сравнения служит дивергенция КЛ. Пусть — отслеживаемое распределение обслуживания, а — эталонное обучающее распределение. Дивергенция КЛ задает локальное обозначение , специфичное для КЛ; в других местах этой книги обозначает общую статистическую дивергенцию в уравнении деградации:
Поскольку дивергенция КЛ асимметрична и становится бесконечной, когда при , операционные мониторы должны сохранять направление и применять явную политику носителя, например сглаживать ранее не встречавшиеся бины. Алгебраически PSI совпадает с симметричной дивергенцией Кульбака — Лейблера (также известной как дивергенция Джеффриса), выражаемой как , что гарантирует положительный вклад в дрейф для сдвигов вероятности в любом направлении. Аналогично дивергенция Дженсена — Шеннона избегает бесконечного роста дивергенции КЛ на непересекающихся распределениях, оценивая расхождение относительно среднего распределения ; она дает гладкое симметричное расстояние, строго ограниченное значениями от 0 до 1. На практике демографическая миграция может выглядеть незаметной на некалиброванной гистограмме, но порождает выраженную метрику дрейфа. В рекомендательной системе, которая отслеживает возраст пользователей, сдвиг в сторону более взрослых когорт дает поинтервальное разложение PSI, показанное в таблице «Пример расчета PSI»:
| Возрастной бин | Обучение | Обслуживание | Разность | ln(Обслуживание/Обучение) | Вклад |
|---|---|---|---|---|---|
| 18–25 | 15% | 12% | -0,03 | -0,223 | 0,0067 |
| 26–35 | 25% | 22% | -0,03 | -0,128 | 0,0038 |
| 36–45 | 20% | 18% | -0,02 | -0,105 | 0,0021 |
| 46–55 | 18% | 20% | +0,02 | +0,105 | 0,0021 |
| 56–65 | 12% | 15% | +0,03 | +0,223 | 0,0067 |
| 66+ | 10% | 13% | +0,03 | +0,262 | 0,0079 |
Пример расчета PSI: распределение возраста пользователей при переходе от обучения к обслуживанию, разложенное по шести возрастным бинам. Суммарный PSI равен 0,029, что заметно ниже порога предупреждения 0,1, хотя несколько бинов сдвинулись на 3 процентных пункта. Суммарный PSI отражает совокупное движение по бинам; действие зависит от откалиброванного порога, размера выборки и бизнес-стоимости.
Суммирование вкладов шести бинов дает суммарный PSI, равный 0,029 (стабильно). Колонки обучения и обслуживания показаны в процентах, а колонка разности выражена в долях, поэтому сдвиг на 3 процентных пункта выглядит как . Хотя отдельные бины сдвинулись на 3 процентных пункта, совокупный дрейф заметно ниже порога предупреждения 0,1. Эксплуатационное действие зависит от откалиброванного порога, размера выборки и бизнес-стоимости.
Мониторинг свежести данных
Хранилища признаков и конвейеры данных могут устареть, не вызывая явных ошибок. Мониторинг свежести данных ловит этот режим отказа, а конфигурация оповещения о свежести показывает настройку, которая отслеживает свежесть признаков и запускает резервное поведение, когда данные устаревают.
Конфигурация оповещения о свежести данных: эта конфигурация отслеживает признак user_purchase_history на предмет устаревания, оповещает команды эксплуатации через PagerDuty и Slack и подставляет значения по умолчанию, когда признак превышает допустимый возраст.
# Пример конфигурации оповещения о свежести
feature: user_purchase_history
max_staleness: 6h
alert_channels: [pagerduty, slack]
on_stale:
action: fallback_to_default
default_value: []
Политика свежести превращает устаревание из незаметного дефекта данных в явный резервный сценарий; тот же контракт «обнаружить и реагировать» должен охватывать каждый слой стека мониторинга.
Стек мониторинга
Мониторинг ML многоуровневый, а не монолитный. Вопросы этого чек-листа проверяют, можно ли отследить каждый симптом до ответственного слоя.
- Загрузка инфраструктуры: можно ли отличить отказ при 0 процентах загрузки GPU от отказа из-за очереди при 100 процентах?
- Пропускная способность трафика: можно ли определить, указывает ли внезапное падение QPS на сбой маршрутизации выше по потоку или на изменение спроса на стороне клиента?
- Свежесть данных: можно ли обнаружить устаревшие признаки до того, как правдоподобно выглядящие предсказания отразят вчерашний мир?
- Дрейф данных: можно ли с помощью PSI или дивергенции KL решить, все еще ли продакшен-данные напоминают обучающее распределение?
- Точность модели: можно ли учитывать задержанные эталонные метки при интерпретации оповещений о точности?
- Смещение когорт: можно ли с помощью когортного анализа поймать сбои подгрупп, которые скрывает агрегированная точность?
Тот же стек должен мониторить вышестоящие зависимости, которые питают ML-систему: задержку репликации базы данных, водяные знаки приема в хранилище признаков и статус завершения конвейера. В одном репрезентативном инциденте сервис рекомендаций обнаружил существенный сдвиг признака user_lifetime_value в течение двух дней и проследил аномалию до миграции базы данных, которая незаметно изменила окно агрегации. Без мониторинга распределений на уровне входа такое повреждение вышестоящих данных ухудшает предсказания модели на протяжении недель, прежде чем метрики эталонных исходов обнажат сбой.
Модель стоимости мониторинга
Инфраструктура наблюдаемости несет расходы, которые растут вместе с детализацией мониторинга. Понимание этих расходов позволяет рационально решать вопрос о глубине мониторинга относительно бюджетных ограничений.
Составляющие стоимости
Расходы на мониторинг делятся на четыре категории, как раскладывает «Стоимость мониторинга»:
Четыре члена — составляющие стоимости в одном и том же расчетном окне: прием данных, хранение, вычисления запросов или дашбордов и вычисление правил оповещений. Разделять их важно, потому что каждый масштабируется своей ручкой управления.
«Составляющие стоимости мониторинга» задает репрезентативные допущения о стоимости единицы для каждой составляющей. Перевод этих удельных стоимостей в конкретную оценку бюджета проясняет реальные расходы на мониторинг даже одной продакшен-модели:
| Составляющая | Иллюстративная удельная стоимость | Фактор масштабирования |
|---|---|---|
| Прием метрик | $0,10–0,50 за миллион точек данных | |
| Хранение логов | $0,50–2,00 за ГБ в месяц | |
| Вычисления запросов | $0,01–0,05 за запрос | |
| Оценка оповещений | $0,001–0,01 за проверку |
Составляющие стоимости мониторинга: иллюстративные удельные стоимости, использованные в расчетном примере. Стоимость масштабируется по-разному для каждой составляющей: прием метрик растет с кардинальностью (числом уникальных рядов метрик), хранение — со сроком хранения, а расходы на запросы — с характером использования дашбордов.
Бюджет мониторинга одной модели
Задача: какие месячные расходы на прием, хранение и запросы возникают при мониторинге одного ML-узла при этих допущениях?
Переменные:
- одна модель с 3 вариантами развертывания (продакшен, канарейка, промежуточная среда), каждый передает 50 метрик;
- метрики выбираются каждые 15 секунд;
- требование к хранению: 30 дней;
- 2 дашборда (здоровье модели, инфраструктура), 3 члена команды, обновление каждые пять минут.
Прием метрик:
- точек данных в месяц: 3 50 (4 выборки/мин 60 24 30 дней) = 25,9 млн;
- стоимость при $0,30 за миллион: $7,8 в месяц.
Хранение:
- при 8 байтах на точку после сжатия: 25,9 млн 8 байт = 0,2 ГБ;
- стоимость при $1 за ГБ: $0,21 в месяц.
Вычисления запросов:
- запросов в месяц: 2 дашборда 3 пользователя (12 запросов/час 8 часов/день 22 дня) = 12 672 запроса в месяц;
- стоимость при $0,02 за запрос: $253,4 в месяц.
Итого: около $261,4 в месяц на один ML-узел. Оценка оповещений и накладные расходы платформы не учтены.
Системный вывод: при этих допущениях стоимость растет линейно с числом одинаковых узлов; в масштабе платформы оптимизация стоимости запросов становится все важнее.
Стратегии оптимизации стоимости
Каждая составляющая стоимости из «Стоимости мониторинга» соответствует своему архитектурному способу смягчения. Главный драйвер и — кардинальность метрик: метки с высокой кардинальностью, такие как user_id или request_id, вызывают комбинаторный взрыв состояний в индексах временных рядов, который затмевает сырые расходы на вычисления. Отбрасывание или хеширование измерений с высокой кардинальностью до приема дает немедленную экономию на хранении и приеме. Второй драйвер стоимости хранения — временное разрешение: сохранять сырые метрики с шагом 15 секунд на протяжении 30 дней редко оправданно. Многоуровневая политика хранения (телеметрия высокого разрешения для отладки недавних инцидентов и агрегированные сводки с пониженной частотой для исторического анализа трендов) сохраняет диагностическую точность и заметно сокращает объем хранимых данных. Для нагрузка от дашбордов накапливается через циклы автообновления в десятках неконтролируемых пользовательских сессий; консервативные интервалы обновления и автоматическая пауза неактивных сессий ограничивают нагрузку на запросы. Наконец, растет с частотой вычисления правил: объединение перекрывающихся пороговых проверок в составные многоусловные правила минимизирует накладные расходы движка правил и одновременно устраняет усталость от оповещений.
Оценка затрат и выгод
Обосновывать инвестиции в мониторинг по сравнению со стоимостью инцидентов позволяет коэффициент выгоды и затрат мониторинга из уравнения окупаемости мониторинга:
Если средняя стоимость инцидента составляет $50 000 (простой, время инженеров и репутация), а мониторинг предотвращает 5 инцидентов в год при годовой стоимости мониторинга $50 000:
Эта схема помогает обосновывать инвестиции в мониторинг и определять, какие метрики заслуживают детального наблюдения, а какие — грубой выборки. Сами системы мониторинга требуют планирования устойчивости, чтобы не создать эксплуатационных слепых зон. Когда основная инфраструктура мониторинга отказывает (Prometheus перестает работать или Grafana становится недоступной), команды рискуют работать вслепую в критические периоды. Поэтому продакшен-реализации MLOps поддерживают резервные пути мониторинга: вторичные сборщики метрик, которые активируются при отказе основной системы, локальное логирование, которое сохраняется, когда централизованные системы выходят из строя, и проверки сердцебиения (heartbeat), которые обнаруживают отключения системы мониторинга.
Надежные продакшен-развертывания внедряют перекрестный мониторинг, когда внешняя инфраструктура наблюдения (watchdog) следит за самими конвейерами телеметрии, так что сбои наблюдения вызывают немедленные оповещения по альтернативным каналам. Такая архитектура эшелонированной защиты предотвращает сценарий незаметного отказа, когда одновременно выходят из строя и модели, и их системы телеметрии. Автоматический выключатель (circuit breaker)28 добавляет еще один барьер: он автоматически уводит трафик от отказывающего сервиса, когда его доля ошибок превышает порог. Координация этих барьеров между множеством реплицированных сервисов, с консенсусными оповещениями и агрегацией метрик между регионами, — задача масштаба парка, которая возникает, когда модель реплицируется между регионами, и выходит за рамки одного узла, рассматриваемого здесь.
Реагирование на инциденты и эксплуатационные практики
Мониторинг и обнаружение дрейфа выявляют аномалии; реагирование на инциденты, отладка и структурированные графики дежурств переводят эти статистические сигналы в своевременные инженерные действия, образуя эксплуатационную петлю обратной связи, которая поддерживает надежность продакшена.
Реагирование на инциденты в ML-системах
В 2:00 ночи дежурный инженер получает оповещение: CTR рекомендаций упал на 12 процентов за последний час. Нет трассировки стека, нет журнала ошибок, нет упавшего процесса — только статистический сигнал о том, что что-то изменилось. Реагирующий должен различить четыре возможные первопричины: сбой вышестоящего конвейера данных, дрейф модели, сезонный паттерн трафика или статистический шум. Такая неоднозначность характерна для ML-инцидентов: симптомы могут проявляться как деградация метрик результатов или качества предсказаний, а не как явные ошибки, поэтому реагирование на инцидент должно учитывать статистическую неопределенность.
Классификация серьезности задает основу для приоритизации реакции в этой неоднозначной обстановке. «Классификация серьезности инцидентов для ML-систем» определяет четыре уровня приоритета со временем реакции: от P0 (полные отказы, требующие реакции за 15 минут) до P3 (незначительные аномалии, допускающие расследование в течение 24 часов).
После присвоения серьезности процесс реагирования на инцидент идет по структурированному чек-листу, порядок которого сужает поиск на каждом шаге:
- Обнаружение определяет, какой сигнал мониторинга вызвал оповещение.
- Оценка влияния определяет, какая доля трафика затронута.
- Реагирующие просматривают недавние изменения, чтобы выяснить, развертывались ли какие-либо модели, признаки или конвейеры данных.
- Оцениваются варианты смягчения: откат, включение резервного режима или снижение трафика.
- Анализ первопричины определяет, связана ли проблема с моделью, данными или инфраструктурой.
| Уровень | Критерий | Время реакции | Пример |
|---|---|---|---|
| P0 | Полный отказ модели, ошибки обслуживания | 15 минут | Модель возвращает пустые предсказания |
| P1 | Значимая деградация точности (более 10%) | 1 час | CTR рекомендаций падает на 15% |
| P2 | Умеренный дрейф, локальное влияние | 4 часа | У одного признака PSI > 0,3 |
| P3 | Незначительные аномалии, без влияния на пользователей | 24 часа | Задержка обучающего конвейера |
Классификация серьезности инцидентов для ML-систем: время реакции отражает срочность и потенциальное бизнес-влияние каждого уровня серьезности.
Для инцидентов P0 и P1 требуется документирование разбора (postmortem). В разборе должны быть хронология, первопричина, влияние на пользователей и превентивные меры. Специфичные для ML элементы включают выяснение того, какой пробел мониторинга позволил проблеме дойти до продакшена, и какая валидация позволила бы поймать ее раньше.
Отладка модели: от обнаружения к диагностике
Реагирование на инциденты сортирует и смягчает проблему; отладка модели выявляет первопричины. Мониторинг обнаруживает, что что-то не так; отладка определяет, почему. Отладка ML должна учитывать вероятностные и зависящие от данных отказы в дополнение к обычным программным дефектам. Неверное предсказание не вызывает исключения и не порождает трассировку стека, поэтому систематическая отладка необходима для эффективного устранения ML-инцидентов.
Дерево решений отладки
Когда качество модели падает, пройдите по этим диагностическим вопросам по порядку. Раздел «Диагностика в эксплуатации» приложения «Таксономия D·A·M» задает систематическую диагностическую матрицу, которая сопоставляет симптомы осям D·A·M (Данные · Алгоритм · Машина).
Отладку продакшена начинают с оси данных D·A·M.
- Дело в данных? Проверьте сбои вышестоящих конвейеров данных, изменения схемы, пропущенные значения или сдвиги распределений. Данные часто оказываются первым местом для проверки, потому что многие продакшен-сбои ML возникают из-за меняющихся входов, меток или конвейеров признаков.
- Это перекос обучения и обслуживания? Сравните значения признаков или выходы предобработки для совпадающих примеров на обучении и обслуживании. KS или PSI могут выявить расхождение распределений, но не могут установить его причину.
- Это конкретная подгруппа? Разрежьте качество по ключевым измерениям (география, тип устройства, сегмент пользователей). Деградация, локализованная в одном срезе, указывает на проблему покрытия данных или разметки.
- Это временной эффект? Постройте график качества во времени. Внезапные падения делают приоритетными проверки недавних развертываний и сбоев данных; постепенное снижение может согласовываться с дрейфом, но одно только время не устанавливает причину.
- Дело в модели? После проверки причин в данных и конвейере изучите поведение модели через анализ предсказаний и атрибуцию признаков.
Анализ срезов
Эта последовательность делает анализ срезов первым углубляющим шагом, как только обнаружена глобальная деградация, потому что он проверяет, сосредоточена ли кажущаяся системная проблема на самом деле в подгруппе. Метрики производительности, агрегированные по всему трафику, могут маскировать серьезные проблемы в подгруппах: анализ срезов раскрывает эту маскировку, а «Пример анализа срезов» показывает, как общая точность может скрывать тяжелую деградацию в отдельных сегментах.
| Сегмент пользователей | Доля трафика | Точность | Влияние |
|---|---|---|---|
| Пользователи десктопов | 45% | 94% | Номинально |
| Мобильные (iOS) | 30% | 92% | Номинально |
| Мобильные (Android) | 20% | 88% | Незначительная деградация |
| Пользователи планшетов | 5% | 62% | Серьезно, расследовать |
| Итого | 100% | 91% | Маскирует проблему с планшетами |
Пример анализа срезов: общая точность 91 процент выглядит приемлемой, но пользователи планшетов (5 процентов трафика) получают точность 62 процента — серьезную деградацию, замаскированную агрегацией. Эффективная отладка требует систематического анализа срезов по ключевым измерениям.
Атрибуция признаков для отладки
Когда анализ срезов выявляет проблемный сегмент, методы атрибуции признаков помогают определить, на какие признаки модель опиралась в неверных предсказаниях. Рабочий процесс отладки на основе SHAP демонстрирует, как использовать значения SHAP (оценки атрибуции признаков, которые показывают, насколько каждый входной признак повлиял на отдельное предсказание) для анализа ошибочных предсказаний внутри конкретного среза.
Рабочий процесс отладки на основе SHAP: этот код отбирает ошибочные предсказания для планшетов, вычисляет значения SHAP для их выходов и строит атрибуции признаков для выбранных примеров.
# Рабочий процесс отладки на основе SHAP
import shap
# Выбираем ошибочные предсказания из проблемного среза
errors = predictions[
(predictions.actual != predictions.predicted)
& (predictions.device_type == "tablet")
]
# Вычисляем значения SHAP для ошибочных случаев
explainer = shap.Explainer(model)
shap_values = explainer(errors[feature_columns])
# Строим атрибуции признаков для выбранных ошибок
shap.summary_plot(shap_values, errors[feature_columns])
График атрибуции показывает признаки, на которые модель опиралась в проблемном срезе, но не устанавливает, были ли эти признаки причиной ошибок. Диагностика устаревших признаков, пробелов в покрытии или семантического сдвига требует проверки происхождения признаков и продакшен-распределений.
Признаки-зомби
Долгоживущие продакшен-модели часто накапливают признаки, у которых угасли исходные владельцы, семантика или назначение. Признак может быть помечен как устаревший в коде приложения, но при этом продолжать поступать через хранилище признаков, обучающий набор данных или сериализованный контракт входов модели. Модель может научиться его игнорировать, распределить сигнал между дубликатом или зависеть от артефакта предобработки, которым уже никто не владеет. Поэтому удаление такого признака больше не является локальной уборкой: это изменение совместимости, которое может затронуть переобучение, обслуживание, мониторинг и последующий анализ.
Признаки в ML-системах не исчезают лишь потому, что владельцы кода перестали о них думать. Неиспользуемый объем полезной нагрузки признаков раздувает накладные расходы на сериализацию и расходует пропускную способность памяти , не повышая точность. Без явных политик устаревания и управления хранилищем признаков модели накапливают «мертвый код», который ухудшает и усложняет отладку (Sculley et al., 2015).
Признаки-зомби показывают, что атрибуция может выявить то, от чего модель больше не должна зависеть. Для отдельных ошибочных предсказаний контрфактический анализ добавляет дополняющий взгляд: минимальное изменение, которое переломило бы одно решение.
Контрфактический анализ
Для отдельных ошибочных предсказаний контрфактический анализ находит минимальное изменение, которое переломило бы предсказание: если бы session_duration составляла 45 секунд вместо 12, модель предсказала бы «вовлечен» вместо «ушел». Это показывает, какие границы признаков определяют решения и имеют ли эти границы смысл. Контрфакты, которые требуют неправдоподобных изменений («возраст пользователя должен был бы быть −5 лет»), часто указывают на проблемы инженерии признаков.
Эти методы (деревья решений, анализ срезов, атрибуция признаков и контрфакты) образуют набор инструментов для отладки. Чтобы применять их последовательно, команды кодифицируют процесс.
Чек-лист отладки
Систематическая отладка следует шестифазному чек-листу: воспроизвести, изолировать, провести бисекцию, атрибутировать, валидировать и предотвратить. Порядок намеренный, потому что каждая фаза сужает пространство поиска для следующей. Воспроизведение идет первым, потому что сбой ML, который нельзя воспроизвести на отложенных данных, часто зависит от данных, и это наблюдение перенаправляет расследование на уровень данных таксономии D·A·M. Как только сбой воспроизведен, изоляция выделяет минимальный набор входов, который его вызывает, превращая расплывчатую жалобу «модель ошибается» в конкретное, проверяемое условие.
Бисекция затем использует историю версий: если сбой коррелирует с недавним развертыванием, сравнение версий модели указывает, какое изменение внесло регрессию. Атрибуция признаков применяет эти методы интерпретируемости, чтобы выявить входные факторы, которые управляют ошибочным поведением. Валидация замыкает причинную петлю, подтверждая, что предполагаемая первопричина при исправлении действительно устраняет сбой и что это подлинное исправление, а не случайное улучшение.
Заключительная фаза, предотвращение, превращает каждый устраненный инцидент в правило мониторинга или проверку валидации, систематически закрывая разрыв между обнаружением и повторением. Такое накопительное укрепление со временем может сокращать повторяющиеся режимы отказа, потому что каждый инцидент усиливает инфраструктуру наблюдаемости.
Отладка ML-систем требует одновременно систематической методологии и предметной экспертизы. Самая результативная отладка часто исходит от инженеров, которые понимают и архитектуру модели, и бизнес-контекст ее предсказаний.
Практики дежурства для ML-систем
Техники отладки из «Отладки модели» работают, когда инженер активно расследует проблему в рабочее время. Однако продакшен-системы выходят из строя в 3:00 ночи по выходным, и отвечающий может быть не тем, кто построил модель. Отладка устраняет отдельные инциденты; практики дежурства поддерживают эксплуатационное здоровье во времени, обеспечивая, что кто-то с нужной экспертизой всегда доступен и подготовлен к реагированию. Дежурство для ML-систем требует специализированных практик сверх традиционной эксплуатации ПО, потому что ML-инциденты часто проявляются как постепенная деградация, а не как жесткие сбои. Традиционный инженер ПО, получивший оповещение, обычно может проследить трассировку стека до первопричины за несколько минут. ML-инженер, столкнувшийся с падением точности на 3 процента, должен сначала определить, представляет ли изменение статистический шум, законный концептуальный дрейф или критический сбой, требующий немедленного отката. Это различие требует статистического контекста, а не простого анализа журналов.
Эта неоднозначность усиливается задержкой видимости влияния. В отличие от скачков задержки, которые сразу появляются на дашбордах, деградация ML может проявиться в бизнес-метриках через часы или дни. Модель рекомендаций, которая начала выдавать немного худшие подсказки в понедельник, может не дать измеримого эффекта на выручку до пятницы, а к тому времени окно для простой диагностики уже закроется. Зависимости между системами дополнительно осложняют реагирование: ML-проблемы часто возникают в вышестоящих системах данных, которыми владеют разные команды, и требуют координации через организационные границы во время реагирования на инцидент. Самая глубокая трудность в том, что эффективное реагирование требует понимания поведения модели, а не только здоровья инфраструктуры. Администратор базы данных может перезапустить упавший сервис, не понимая его бизнес-логики, но ML-инженер не может осмысленно отлаживать деградацию точности, не понимая зависимостей модели от признаков и ожидаемых паттернов поведения.
Эти трудности мотивируют многоуровневые структуры эскалации, которые сопоставляют экспертизу со сложностью инцидента. «Структура дежурства ML» показывает одну из возможных структур: первичные реагирующие справляются с рутинными проблемами по стандартизированным регламентам, а пути эскалации ведут к специалистам, способным на более глубокое расследование. Параллельная роль дежурного по данным может сократить время решения, когда первопричина лежит в вышестоящей системе данных.
| Уровень | Ответственный | Обязанности |
|---|---|---|
| Уровень 1 (первичный) | ML-инженер | Первичная сортировка, стандартные регламенты, решения об эскалации |
| Уровень 2 (эскалация) | Старший ML-инженер или специалист по данным | Сложная отладка, расследование между системами, проблемы конкретных моделей |
| Уровень 3 (критический) | Руководитель ML-платформы | Архитектурные решения, крупные инциденты, эскалация к поставщикам |
| Дежурство по данным (параллельно) | Инженер данных | Проблемы конвейеров данных, проблемы хранилища признаков, вышестоящие зависимости |
Структура дежурства ML: многоуровневая эскалация с параллельным дежурством по данным обеспечивает эффективное реагирование на инциденты. Уровень 1 решает рутинные проблемы по регламентам; уровень 2 занимается сложной отладкой; уровень 3 управляет критическими инцидентами, требующими архитектурных решений.
Эффективное дежурство сильно зависит от качества регламентов. Каждая продакшен-модель ML должна иметь документацию, охватывающую назначение модели, владельца и бизнес-критичность, а также ее обычные рабочие параметры: ожидаемые диапазоны задержки, пропускной способности и точности, которые определяют здоровое поведение. Исторические инциденты и способы их решения служат шаблонами для типичных паттернов сбоев, а диагностические команды позволяют быстро оценить состояние: как проверить недавние предсказания, распределения признаков и оценки уверенности модели. Важно, что регламенты должны указывать критерии эскалации (когда будить уровень 2, а когда откатывать без согласования) и процедуры отката с пошаговыми инструкциями и ожидаемым временем восстановления. Регламенты, написанные в спокойный период, экономят критические минуты во время инцидентов в 3:00 ночи.
Даже хорошо спроектированный мониторинг может порождать избыточные оповещения, которые подрывают эффективность дежурства. Усталость от оповещений, склонность игнорировать или отклонять оповещения после слишком большого числа ложных срабатываний, представляет серьезный эксплуатационный риск. Команды борются с усталостью через консолидацию: связанные оповещения группируются, так что одновременный дрейф нескольких признаков порождает одно уведомление, а не десятки. Адаптивные пороги, которые учитывают недельные и сезонные паттерны, не дают предсказуемым колебаниям вызывать ненужные вызовы. Редко действенные оповещения следует выводить из эксплуатации или перекалибровывать. Когда временное отключение оповещений необходимо, механизмы подотчетности (требование создать последующую задачу перед тем, как отложить оповещение) не дают оповещениям быть навсегда проигнорированными.
Передача смены — еще одна критическая практика, которая отличает зрелые эксплуатационные процессы. Заступающим дежурным инженерам нужен контекст об активных инцидентах и их текущем статусе, о недавних развертываниях, которые могут вызвать отложенные проблемы, о предстоящих запланированных изменениях, таких как миграции данных или обновления моделей, и о любых подавленных оповещениях вместе с обоснованием. Без структурированной передачи контекст теряется между сменами, и заступающие инженеры тратят время на повторный поиск информации, которую их предшественники уже собрали.
Устойчивые практики дежурства должны также учитывать выгорание. Дежурство в ML несет особый стресс из-за неоднозначности инцидентов: неопределенность относительно того, представляет ли оповещение реальную проблему, требует постоянной бдительности. Организации смягчают выгорание, ограничивая число последовательных дней дежурства, предоставляя компенсационные выходные после инцидентов высокой серьезности, проводя регулярные обзоры ротации, чтобы выравнивать нагрузку между членами команды, и инвестируя в автоматизацию, которая снижает рутинную работу. Цель — сделать дежурство устойчивым на протяжении многих лет эксплуатации, а не укомплектовывать его как запоздалую мысль.
Видео (DeepLearningAI): Мониторинг моделей
Одних технических возможностей мониторинга недостаточно для эксплуатационного успеха. Самые продвинутые дашборды не работают, если никто не отвечает за реакцию на оповещения, а самые подробные регламенты пылятся, если структура команды не поддерживает их использование. Эксплуатация ML в продакшене требует организационной инфраструктуры, параллельной технической: четкого управления, определенных ролей и коммуникационных практик, которые обеспечивают межфункциональную координацию.
Управление и координация команды
Регламенты дежурства решают задачи реального времени, но продакшен-системам ML также нужно проактивное управление, которое обеспечивает поведенческие и нормативные инварианты. Управление моделями задает критерии проверки, которым модели должны удовлетворять до получения живого трафика вывода. Непроверенные модели рискуют давать предвзятые выводы или необъяснимые решения, которые нарушают законодательные нормы и политики организации. В рамках операционного конвейера управление обеспечивает три конкретные цели: прозрачность через аудируемое происхождение обучающих данных и проверяемые веса моделей, справедливость через ограниченный паритет качества между защищенными подгруппами пользователей и соответствие через соблюдение требований к приватности, хранению и аудируемости. Хотя «Ответственная инженерия» подробно описывает статистические метрики и алгоритмы интерпретируемости, необходимые для этих свойств, MLOps предоставляет инфраструктуру автоматизированной проверки для их обеспечения на протяжении всего жизненного цикла развертывания.
Управление ML охватывает весь жизненный цикл артефакта. На этапе разработки автоматизированные конвейеры фиксируют схемы признаков, происхождение обучающих данных и конфигурации гиперпараметров. До развертывания шлюзы предрелизной валидации оценивают устойчивость к данным вне распределения и демографический паритет. Оказавшись в продакшене, системы мониторинга должны отслеживать дрейф справедливости (временные сдвиги в частоте ошибок по демографическим или арендаторским подгруппам) наряду с общей деградацией точности. Кодирование этих политик управления прямо в автоматизированных конвейерах CI/CD заменяет ad hoc ручную проверку программными проверками выпуска.
Конкретно, шлюз продвижения в реестре моделей требует подписанного контракта признаков, записанного хеша происхождения обучающих данных, метрик подгрупп выше политических порогов, SLO канарейки с критериями автоматического отката и назначенного владельца артефакта, прежде чем модель перейдет из промежуточной среды в продакшен. Этот шлюз превращает управление из организационного совещания по проверке в инвариант выпуска, который обеспечивает та же механика CI/CD, что и развертывает модель.
Политики управления определяют критерии выпуска, но эксплуатационная надежность зависит от исполнения через организационные границы. Поскольку системы машинного обучения охватывают инженерию данных, статистическое моделирование и распределенную инфраструктуру обслуживания, передачи ролей являются наиболее подверженными сбоям интерфейсами в эксплуатационном жизненном цикле. Версионированные хранилища экспериментов и централизованные реестры моделей обеспечивают общую основу, необходимую для воспроизводимых переходов между исследованиями и продакшен-инженерией. На уровне данных формальные спецификации схем и графы происхождения (DAG) гарантируют, что специалисты по данным и инженеры платформы разделяют одинаковые допущения о семантике признаков, обработке пустых значений по умолчанию и задержке поступления меток.
Названия и границы различаются в разных организациях, но одна распространенная декомпозиция использует пять ролей из «Матрицы ролей в ML-команде». Таблица сопоставляет каждую роль с основной обязанностью, не подразумевая, что каждой организации нужны пять отдельных должностей:
| Роль | Основной фокус | Ключевые результаты | Точки взаимодействия |
|---|---|---|---|
| Специалист по данным | Разработка моделей, эксперименты, выбор алгоритма | Обученные модели, результаты экспериментов, эталонные показатели производительности | Передает ML-инженеру для продакшенизации |
| ML-инженер | Продакшен-системы ML, конвейеры обучения, инфраструктура обслуживания | Развернутые модели, конвейеры обучения, системы обслуживания | Получает от специалиста по данным; работает с инженером платформы над инфраструктурой |
| Инженер данных | Конвейеры данных, инженерия признаков, качество данных | Конвейеры признаков, системы качества данных, хранилища признаков | Предоставляет данные специалисту по данным; поддерживает хранилище признаков для ML-инженера |
| Инженер платформы | Инфраструктура MLOps, инструменты, автоматизация | Конвейеры CI/CD, системы мониторинга, вычислительная инфраструктура | Обеспечивает работу ML-инженера; поддерживает общую инфраструктуру |
| DevOps/SRE | Надежность, реагирование на инциденты, здоровье системы | SLO/SLA, процедуры дежурства, регламенты | Поддерживает все роли; отвечает за здоровье продакшена |
Матрица ролей в ML-команде: четкие границы ролей предотвращают пробелы и пересечения. Специалисты по данным сосредоточены на качестве модели, а ML-инженеры занимаются продакшенизацией. Инженеры данных отвечают за конвейеры данных, а инженеры платформы — за инструменты MLOps. SRE обеспечивают общую надежность системы.
Четкие определения ролей важнее всего в точках передачи, где артефакты переходят от одного специалиста к другому. Самый уязвимый переход происходит между специалистами по данным и ML-инженерами: исследовательский скрипт из блокнота часто не работает в продакшен-окружении из-за недокументированных шагов предобработки данных, жестко заданных локальных путей к файлам, скрытого порядка выполнения состояния или незафиксированных зависимостей библиотек. Аналогично передача от ML-инженеров к SRE (Beyer et al., 2016) требует проверенных дашбордов мониторинга, активных правил оповещений, документированных регламентов и протестированных процедур отката. Инженеры данных взаимодействуют с создателями моделей через контракты признаков — формальные спецификации схемы данных, SLO свежести и инварианты распределений, которые не дают изменениям вышестоящих конвейеров проявиться как незаметные сбои предсказаний спустя недели. Команды устраняют эти риски интерфейсов, требуя стандартизированных образов контейнеров, герметичных манифестов сборки и автоматических проверок воспроизводимости до перехода любого артефакта на следующий этап.
Коммуникация с заинтересованными сторонами
Пока межфункциональные передачи регулируют внутреннее исполнение инженерных задач, коммуникация с заинтересованными сторонами устанавливает операционный контракт между техническими командами и организационными лицами, принимающими решения. В отличие от детерминированных программных сервисов со статичной семантикой отказов, системы машинного обучения демонстрируют вероятностные выходы, сложные компромиссы «задержка–точность» и непрерывный дрейф распределений. Когда заинтересованные стороны оценивают модели, опираясь на традиционные программные допущения, неизбежно возникает рассогласование в отношении ожидаемой надежности, бюджетов задержки и затрат на сопровождение.
Частая коммуникационная ошибка — ничем не ограниченный запрос «сделать модель точнее». Точность модели нельзя масштабировать независимо от стоимости системы: повышение точности валидации на два процентных пункта часто требует перехода к существенно большей архитектуре модели, более высоких вычислительных затрат FLOP на образец, роста требований к пропускной способности памяти и нарушения строгих SLO задержки вывода. Опираясь в обсуждениях улучшений на фронт Парето, команда вынуждена принимать явные решения между точностью модели, бюджетами задержки вывода, стоимостью вычислений на обучение и расходами на получение данных.
Перевод статистических метрик в операционное влияние требует связывания ошибок классификации с экономическими или эксплуатационными последствиями. Традиционные метрики оценки, такие как точность, ROC-AUC или F1-мера, оценивают ошибки геометрически или симметрично. В продакшене же ошибки классификации имеют крайне асимметричную стоимость: в конвейере автоматического обнаружения мошенничества ложноположительное срабатывание создает трение для пользователя при оплате, тогда как ложноотрицательное пропускает прямую, невосстановимую денежную кражу.
«Кривая бизнес-стоимости» иллюстрирует эту асимметричную экономическую реальность. Когда ложноотрицательные ошибки стоят в пять раз дороже ложноположительных, оптимальная граница решения заметно сдвигается влево от симметричного порога классификации 0,50, принимая более высокий уровень ложных тревог ради минимизации катастрофических пропусков.
Кривая бизнес-стоимости: иллюстративный индекс стоимости с равновзвешенными классами в зависимости от порога классификации. Технические метрики, такие как ROC-кривые, скрывают экономическую реальность: ошибки имеют разную цену. Здесь ложноотрицательная ошибка (пропущенное мошенничество) стоит $500, а ложноположительная (заблокированный пользователь) — $100. Система помечает транзакцию как мошенническую, когда ее оценка превышает порог, поэтому меньший порог помечает больше транзакций. Поскольку пропуск мошенничества в 5 раз дороже, оптимальный порог сдвигается левее центра: система становится агрессивнее в пометке подозрительных транзакций, принимая больше ложноположительных срабатываний, чтобы минимизировать дорогие пропуски. При равных стоимостях оптимум находился бы на пороге 0,50; асимметрия сдвигает его к порогу . Ожидаемая стоимость по популяции также взвесила бы каждый член по распространенности класса. MLOps настраивает пороги по мере изменения стоимостей и распространенности.
Эксплуатационные инциденты требуют структурированных коммуникационных протоколов, которые передают техническую серьезность без двусмысленности. Когда системы мониторинга обнаруживают дрейф распределения или регрессия вывода запускает автоматический откат, эксплуатационные отчеты о статусе должны прямо излагать эмпирические свидетельства: метрику статистической расходимости, конкретную демографическую или арендаторскую когорту, которую это затронуло, цель отката канарейки и оценку сроков восстановления. Отмахиваться от аномальных распределений выходов как от временного шума без статистической проверки гипотез — значит позволить незаметным семантическим сбоям проникнуть в продакшен-решения.
Обоснование выделения аппаратных ресурсов аналогично требует связывания возможностей оборудования со скоростью разработки и мощностью обслуживания. Запрос дополнительных узлов с ускорителями нужно формулировать в терминах масштабирования пропускной способности и скорости итераций: выделение узла с 8 GPU позволяет завершать распределенные прогоны обучения с параллелизмом данных за часы, а не за дни, что напрямую ускоряет циклы итераций и валидации моделей. Кроме того, инженерные графики должны отражать реальные продакшен-узкие места: извлечение данных, инженерия признаков и валидация конвейера обычно занимают гораздо больше календарного времени, чем оптимизация гиперпараметров.
Рассмотрим команду обнаружения мошенничества, которая оценивает предлагаемое обновление модели. Когда заинтересованные стороны запрашивают улучшение доли выявленных случаев, инженерная команда формулирует инициативу как конкретный системный компромисс: повышение доли выявленных мошеннических денег с 92 процентов до 94 процентов требует интеграции внешних конвейеров признаков, увеличения длительности обучения на две недели и принятия на 30 процентов более высоких инфраструктурных расходов. Взамен обновление, по оценкам, предотвращает $2 млн годовых потерь от мошенничества, а при отдельном допущении о снижении на 20 процентов устраняет 50 000 ложноположительных оповещений в месяц.
Формулировка улучшений модели вокруг финансового эффекта, бюджетов задержки и расходов на вычисления закрепляет эксплуатационное управление в проверяемых инженерных компромиссах. Связывая автоматические инварианты выпуска CI/CD со структурированной коммуникацией о стоимости ошибок, инженерные команды обеспечивают, что продакшен-развертывания остаются одновременно технически надежными и экономически обоснованными.
Видео (DeepLearningAI): Проблемы развертывания
ML Test Score
Оценка готовности к выпуску требует явного каталога структурных паттернов долга, которые делают модель небезопасной для обслуживания даже тогда, когда метрики офлайн-валидации выглядят приемлемо. ML-системы выходят из строя в продакшене не только из-за алгоритмической деградации, но и из-за незаметного разложения интерфейсов, необъявленных потребителей и непроверенных зависимостей конвейера. «Паттерны технического долга» классифицирует эти основные паттерны долга вместе с их первопричинами, симптомами сбоев и стратегиями смягчения, задавая режимы отказа, которые рубрика готовности к продакшену должна обнаруживать и предотвращать.
| Паттерн долга | Основная причина | Ключевые симптомы | Стратегии смягчения |
|---|---|---|---|
| Размывание границ | Жестко связанные компоненты, неясные интерфейсы | Изменения каскадируют непредсказуемо, нарушения принципа CACE | Навязывать модульные интерфейсы, проектировать инкапсуляцию |
| Каскады исправлений | Последовательные зависимости моделей, унаследованные допущения | Исправления в вышестоящей модели ломают нижестоящие системы, эскалирующие переделки | Осторожные компромиссы между повторным использованием и переработкой, четкое версионирование |
| Необъявленные потребители | Неформальный обмен выходами, незарегистрированные зависимости | Тихие поломки после обновлений модели, скрытые петли обратной связи | Строгий контроль доступа, формальные контракты интерфейсов, мониторинг использования |
| Долг зависимостей данных | Нестабильные или недоиспользуемые входы данных | Сбои моделей из-за изменений данных, хрупкие конвейеры признаков | Версионирование данных, отслеживание происхождения, анализ «исключения одного» |
| Петли обратной связи | Выходы модели влияют на будущие обучающие данные | Самоусиливающееся поведение, скрытая деградация качества | Мониторинг по когортам, канареечные развертывания, архитектурная изоляция |
| Долг конвейера | Ad hoc рабочие процессы, отсутствие стандартных интерфейсов | Хрупкое исполнение, дублирование, бремя сопровождения | Модульный дизайн, инструменты оркестрации рабочих процессов, общие библиотеки |
| Долг конфигурации | Фрагментированные настройки, слабое версионирование | Невоспроизводимые результаты, тихие сбои, непрозрачность настройки | Контроль версий, валидация, структурированные форматы, автоматизация |
| Долг прототипа | Ярлыки быстрого прототипирования, жесткая связь кода и логики | Негибкость при масштабировании систем, трудности совместной работы команды | Гибкие основы, намеренное отслеживание долга, плановый рефакторинг |
Паттерны технического долга: ML-системы накапливают различные формы технического долга из зависимостей данных, взаимодействий моделей и меняющихся эксплуатационных контекстов. Основные паттерны долга, их причины, симптомы и рекомендуемые стратегии смягчения помогают практикам систематически распознавать эти проблемы и устранять их.
Качественное понимание режимов отказа не предотвращает эксплуатационных сбоев; шлюзы развертывания требуют формальной рубрики оценки технического долга, которая превращает субъективные споры о готовности в измеримые инженерные ограничения. ML Test Score (Breck et al., 2017) структурирует эту оценку по четырем эксплуатационным категориям: тесты данных, тесты модели, тесты инфраструктуры и тесты мониторинга. Рубрика задает 28 бинарных или градуированных тестов — по семь на категорию, — каждый из которых оценивается от 0 (не протестировано) до 1 (автоматизировано и отслеживается). Вместо усреднения этих оценок в единый компенсирующий агрегат составной балл следует принципу самого слабого звена:
где каждая оценка категории . Развертывание с исчерпывающей офлайн-валидацией модели (), но без продакшен-телеметрии (), получает общую оценку 0. Оператор минимума отражает реальность ML-систем: немониторируемый путь обслуживания незаметно выдает поврежденные предсказания независимо от точности офлайн-бенчмарка.
Оценка распределяет продакшен-риск по слоям Данных, Алгоритма и Машины системы. Набор тестов для данных проверяет, что распределения признаков соответствуют заявленным схемам, границы приватности не нарушаются и каждый признак оправдывает свою задержку вывода и занимаемую память. Набор для модели подтверждает, что архитектуры и конфигурации гиперпараметров находятся под контролем версий, границы устаревания соблюдаются и улучшения офлайн-бенчмарков переходят в рост живых метрик. Набор для инфраструктуры проверяет детерминированную воспроизводимость обучения при разных начальных значениях генератора случайных чисел (seed), паритет путей обслуживания между конвейерами обучения и вывода и механизмы автоматического отката. Набор для мониторинга проверяет, что изменения схем, нарушения инвариантов, перекос обучения и обслуживания и устаревшие веса порождают действенные оповещения раньше, чем деградировавшие предсказания повлияют на системы ниже по потоку. «Чек-лист ML Test Score» сводит репрезентативные тесты по каждой категории:
| Категория | Тест | Пример реализации |
|---|---|---|
| Тесты данных | Ожидания к признакам зафиксированы в схеме | Great Expectations, TFX Data Validation |
| Все признаки полезны (неиспользуемых нет) | Анализ важности признаков, абляционные исследования | |
| Стоимость признака не превышает его пользы | Анализ компромисса задержки и точности | |
| Конвейер данных имеет подходящие средства контроля приватности | Обнаружение PII, журналирование доступа | |
| Тесты модели | Спецификация модели проверена и внесена в систему контроля версий | Конфигурации моделей под контролем Git |
| Офлайн- и онлайн-метрики коррелируют | A/B-валидация офлайн-улучшений | |
| Все гиперпараметры настроены | Автоматический перебор гиперпараметров с записью результатов | |
| Устаревание модели измеряется и ограничено | Мониторинг деградации производительности | |
| Тесты инфраструктуры | Обучение воспроизводимо | Фиксированные seed, версионированные данные, зафиксированные зависимости |
| Модель можно откатить к предыдущей версии | Реестр моделей с версионированием | |
| Пути кода обучения и обслуживания проверены на согласованность | Интеграционные тесты хранилища признаков | |
| Качество модели валидируется до обслуживания | Автоматические шлюзы валидации в CI/CD | |
| Тесты мониторинга | Изменения зависимостей порождают оповещения | Мониторинг схемы данных |
| Инварианты данных выполняются при обучении и обслуживании | Тесты сравнения распределений | |
| Признаки обучения и обслуживания не перекошены | Обнаружение перекоса обучения и обслуживания | |
| Устаревание модели запускает переобучение | Автоматические конвейеры переобучения |
Чек-лист ML Test Score: репрезентативные тесты готовности к продакшену из рубрики ML Test Score. Исходная рубрика содержит 28 тестов, сгруппированных в четыре раздела по семь тестов; оценки разделов показывают, связан ли продакшен-риск с валидацией данных, валидацией модели, инфраструктурой или мониторингом, а не скрывают слабость в едином общем итоге. По данным (Breck et al., 2017).
Поскольку составной балл ограничен минимальной категорией, аудиты надежности должны в первую очередь заниматься узкой подсистемой, которая ограничивает общий балл. Вложение инженерных усилий в расширение набора тестов модели с 5 до 6 баллов при том, что покрытие мониторинга остается на уровне 1, не дает никакого прироста общей безопасности продакшена. Регулярные аудиты по этой рубрике систематически показывают, происходят ли риски надежности из непроверенных входных конвейеров, расхождения распределений офлайн и онлайн или неинструментированных путей обслуживания, и направляют усилия на рефакторинг структурного долга, который напрямую угрожает доступности продакшена.
Проектирование и рамка зрелости
Организация, которая развертывает свою первую ML-модель, может полагаться на блокнот Jupyter, запускаемый вручную, задание cron по расписанию и минимальный мониторинг. Зрелое предприятие запускает тысячи моделей через автоматизированные конвейеры с обнаружением дрейфа, канареечными развертываниями и непрерывной валидацией. Оба занимаются «MLOps», но разрыв между ними составляет порядки величины по надежности, экономической эффективности и скорости развертывания. Эмпирические обзоры продакшен-развертываний показывают, что сбои систем сосредоточены вокруг зависимостей данных, границ конвейеров и слепых зон мониторинга, а не вокруг базовых архитектур моделей (Paleyes et al., 2022). Эксплуатационная зрелость дает системную рамку для оценки этого пути: организации эволюционируют от ad hoc экспериментов к полностью автоматизированным операциям, и определение того, где система находится на этом континууме, управляет распределением ресурсов эффективнее, чем неразборчивое внедрение инструментов.
Уровни зрелости
Пока ML Test Score оценивает отдельные технические практики, эксплуатационная зрелость измеряет их системную интеграцию. Инструменты жизненного цикла, такие как MLflow, решают задачи изолированных этапов конвейера (Zaharia et al., 2018), но зрелость отражает, насколько согласованно данные, алгоритмы и аппаратура выполнения взаимодействуют между обучением и обслуживанием. Хотя эксплуатационная зрелость существует как континуум, разбиение систем на отдельные уровни зрелости проясняет, как рабочие процессы переходят от исследовательских прототипов к инфраструктуре продакшен-класса.
На самом низком уровне рабочие процессы ad hoc: обучение запускается вручную на локальных рабочих станциях, извлечение признаков встроено в одноразовые скрипты, а развертывание опирается на ручную передачу файлов. По мере роста зрелости рабочие процессы становятся воспроизводимыми: команды вводят конвейеры под контролем версий, централизованные хранилища артефактов и плановые пакетные задания. На самом высоком уровне системы становятся масштабируемыми: декларативная инфраструктура как код, непрерывные конвейеры валидации и наблюдаемость в реальном времени отделяют итерацию модели от продакшен-обслуживания.
«Прогрессия зрелости» сводит эту архитектурную прогрессию от разрозненного выполнения к единому управлению жизненным циклом.
| Уровень зрелости | Характеристики системы | Типичные результаты |
|---|---|---|
| Ad hoc | Ручная обработка данных, локальное обучение, нет контроля версий, неясное владение | Хрупкие рабочие процессы, трудно воспроизвести или отладить |
| Воспроизводимый | Автоматизированные конвейеры обучения, базовый CI/CD, централизованное хранение моделей, некоторый мониторинг | Улучшенная воспроизводимость, ограниченная масштабируемость |
| Масштабируемый | Полностью автоматизированные рабочие процессы, интегрированная наблюдаемость, инфраструктура как код, управление | Высокая надежность, быстрая итерация, ML продакшен-класса |
Прогрессия зрелости: эксплуатационные практики машинного обучения эволюционируют от ручных, хрупких рабочих процессов к полностью интегрированным автоматизированным системам, влияя на воспроизводимость и масштабируемость. Ключевые характеристики и результаты на каждом уровне зрелости подчеркивают архитектурную связность и интеграцию жизненного цикла для построения поддерживаемых систем обучения.
Рассмотрим, как система обнаружения мошенничества эволюционирует по этим уровням зрелости:
- Ad hoc: специалист по данным обучает модель в блокноте Jupyter, экспортирует ее в файл pickle и передает инженеру, который развертывает ее на одном сервере. Когда точность падает, специалист по данным переобучает модель вручную, снова запуская блокнот со свежими данными. Отладка требует присутствия исходного специалиста по данным, потому что никто другой не понимает шагов предобработки.
- Воспроизводимый: скрипт обучения находится под контролем версий, плановое задание Jenkins переобучает модель ежемесячно. Признаки вычисляются в SQL-скрипте, который инженерия поддерживает отдельно. Модель развертывается через контейнер с базовым мониторингом точности. Когда SQL признаков меняется, специалист по данным должен вручную проверить, что модель все еще работает.
- Масштабируемый: обучение и обслуживание используют одно хранилище признаков, что снижает перекос. Конвейер CI/CD проверяет дрейф, когда PSI превышает 0,2, переобучает модель, если это подтверждают данные, валидирует новую модель относительно базовой и разворачивает ее через канареечный выпуск. Мониторинг отслеживает точность по каждому продавцу и запускает расследование, когда деградируют конкретные сегменты. Все происхождение от сырых данных до продакшен-предсказания поддается аудиту.
Переход между уровнями зрелости требует существенных инженерных инвестиций, однако снижение среднего времени восстановления (MTTR) и незаметных сбоев, которое при этом достигается, оправдывает стоимость для критически важных сервисов. Оценка организации по этому спектру выделяет конкретные архитектурные узкие места (например, ручную передачу данных или непроверенную логику предобработки) до того, как они накопятся в продакшен-простои.
Следствия для проектирования системы
Организационная зрелость задает конкретные архитектурные ограничения. По мере того как команды продвигаются по уровням, лежащая в основе система переходит от монолитных скриптов к модульным, разделенным сервисам.
В средах с низкой зрелостью системы жестко связаны: преобразования данных встроены прямо в скрипты обучения моделей, конфигурации ведутся неформально, а обслуживание зависит от сериализованных артефактов с неявными зависимостями окружения. Хотя такие конструкции облегчают быстрое исследовательское прототипирование, у них нет четких границ отказов. На более высокой зрелости явные абстракции разделяют компоненты D·A·M: конвейеры признаков вычисляют преобразования независимо через версионированные схемы, модели предоставляют API вывода, управляемые контрактами, а среды обслуживания работают в изолированных контейнерах с воспроизводимыми аппаратными целями выполнения. Замкнутые петли обратной связи позволяют потокам данных, обновлениям алгоритмов и вычислительным ресурсам адаптироваться без ручного вмешательства.
«Стек зависимостей доступности» иллюстрирует структурный стек зависимостей, определяющий продакшен-системы ML. Видимая доступность сервиса представляет лишь верхний уровень эксплуатационного здоровья. Ниже ватерлинии лежат незаметные режимы отказа, которые ухудшают качество вывода, не вызывая традиционных инфраструктурных оповещений: ковариатный сдвиг, повреждение схемы в вышестоящих источниках и локализованная деградация сегментов. Надежная эксплуатационная рамка должна параллельно отслеживать все три области: здоровье данных, здоровье модели и здоровье сервиса.
Стек зависимостей доступности: ватерлиния отделяет видимую доступность сервиса от сбоев здоровья данных и модели, которые могут оставаться скрытыми, пока сервис доступен; окружающие подписи организуют поверхность мониторинга на здоровье данных, модели и сервиса.
Три области мониторинга напрямую соответствуют различным механизмам системных сбоев:
- Сбои здоровья данных — например, дрейф схемы, всплески пустых значений и устаревание признаков — нарушают распределительные инварианты, принятые при обучении, не меняя бинарники обслуживания.
- Сбои здоровья модели — например, потеря точности, дрейф калибровки оценок и вырожденные петли обратной связи — происходят незаметно, потому что движок вывода продолжает возвращать синтаксически корректные тензоры с низкой задержкой.
- Сбои здоровья сервиса — например, фрагментация памяти, дрейф зависимостей и сбои оркестрации контейнеров — угрожают традиционной доступности и пропускной способности.
Поскольку сбои данных и модели оставляют стандартные HTTP-проверки здоровья и статус процесса зелеными, мониторинг одной только доступности не отражает истинного эксплуатационного состояния ML-системы.
Паттерны проектирования и антипаттерны
Самая совершенная инфраструктура выходит из строя без организационных паттернов, необходимых для ее эффективной эксплуатации. Хранилище признаков не может предотвратить перекос обучения и обслуживания, если никто не владеет определениями признаков; автоматизированный мониторинг не может поймать дрейф, если оповещения направляются не той команде. По мере роста сложности ML-систем организационные паттерны должны эволюционировать, чтобы соответствовать им.
В зрелых средах организационный дизайн делает упор на четкое владение и дисциплину интерфейсов. Команды платформы отвечают за общую инфраструктуру и конвейеры CI/CD, а доменные команды сосредоточены на разработке моделей и согласовании с бизнесом. Интерфейсы между командами (определения признаков, схемы данных и цели развертывания) формально специфицированы и версионированы.
Один из эффективных паттернов — централизованная команда MLOps, которая предоставляет общие сервисы нескольким группам разработки моделей. Такие структуры поддерживают согласованность и сокращают дублирование усилий. В качестве альтернативы некоторые организации выбирают федеративную модель, встраивая инженеров MLOps в продуктовые команды и поддерживая центральную архитектурную функцию для системной интеграции.
Антипаттерны возникают, когда ответственность раздроблена. Подход «сначала инструменты» (внедрение инфраструктурных инструментов без предварительного определения процессов и ролей) приводит к хрупким конвейерам и неясной передаче работы. Изолированные эксперименты, когда специалисты по данным работают обособленно от продакшен-инженеров, порождают модели, которые трудно развернуть или эффективно переобучить.
Организационный дрейф — еще один вызов. По мере роста команд незадокументированные рабочие процессы закрепляются, а издержки координации растут. Организационная зрелость должна развиваться вместе со сложностью системы через каналы коммуникации, определения ролей и структуры подотчетности, которые укрепляют модульность и наблюдаемость.
Организационным структурам нужны соответствующие технические архитектуры, чтобы поддерживать надежность системы. Если традиционные распределенные системы справляются с аппаратными сбоями или разделами сети, то ML-системы вводят зависимости с состоянием от меняющихся распределений данных и общих ресурсов ускорителей.
Обычные автоматические выключатели срабатывают, когда тайм-ауты RPC или доля ошибок HTTP 5xx превышают заданный порог. В контексте обслуживания ML выключатели должны отслеживать статистические инварианты: аномальные распределения входов (например, внезапные сдвиги границ признаков или рост доли пропущенных признаков) или коллапс распределения выходов. При срабатывании выключатель обходит модель и отдает предсказания из детерминированного эвристического резерва, кешированной таблицы поиска или более простой базовой модели, не давая поврежденным выводам каскадно распространиться на нижестоящие транзакционные системы.
Аналогично паттерны переборок (bulkhead)29 изолируют модели-кандидаты или канарейки от основных путей обслуживания. На многотенантном аппаратном обеспечении ускорителей неограниченная экспериментальная модель, страдающая от прерывания из-за нехватки памяти, утечки памяти или исчерпания пула потоков, может уронить общую среду обслуживания или заблокировать шину PCIe. Принудительное применение переборок через ограничения памяти контейнеров, изолированные очереди рабочих потоков и выделенные аппаратные разделы гарантирует, что экспериментальные нагрузки не смогут снизить основную продакшен-пропускную способность. Обычные ошибки предсказания модели — это семантические отказы, а не византийские сбои; отказоустойчивость по Византийскому протоколу30 дает лишь ограниченную аналогию для произвольных отказов компонентов.
Алгоритмы консенсуса обеспечивают согласие между узлами; они не могут определить, верно ли предсказание модели, когда эталонная истина задержана или недоступна. Репликация модели на нескольких узлах или голосование между членами ансамбля дает избыточность против аварийных сбоев, но не может устранить незаметные семантические ошибки, если все реплики разделяют одни и те же индуктивные смещения или слепые зоны обучающего распределения. Тем не менее эти паттерны надежности помогают отличать устойчивые реализации MLOps от хрупких, когда их гарантии применяются в пределах своей области.
Контекст MLOps
Стандартные эксплуатационные паттерны должны адаптироваться к физическим и организационным ограничениям. Каждая ML-система работает в конкретном контексте, который формирует реализацию: физические ограничения (граничные вычисления, бюджеты мощности), нормативные требования (здравоохранение, финансы) или организационный масштаб (размер команды, распределение навыков). Стандартный конвейер CI/CD может быть невыполним без прямого доступа к хосту; мониторинг может требовать косвенных сигналов или обнаружения аномалий на устройстве; сбор данных может ограничиваться правилами приватности. Эти адаптации — проявления зрелости в условиях ограничений, а не отступления от базовых принципов.
На самых высоких уровнях эксплуатационной зрелости практики для одной модели становятся строительными блоками для более широких платформенных возможностей. Организации, которые эксплуатируют много ML-узлов одновременно, объединяются в платформенные архитектуры, предоставляющие общую инфраструктуру, централизованное управление и эффект масштаба. Переход от отдельных ML-узлов к инфраструктуре платформенного масштаба вводит качественно иные задачи (распределение ресурсов между моделями, системная наблюдаемость и отказоустойчивость между взаимозависимыми конвейерами), которые выходят за рамки эксплуатации одного узла. Надежные практики ML-узла остаются обязательным условием успеха платформы, потому что пробелы в мониторинге, тестировании или развертывании одной модели умножаются по всему портфелю моделей.
Экономика инвестиций в MLOps
Эксплуатационные выгоды MLOps становятся убедительными, только когда инвестиции соответствуют продакшен-ценности модели. Для одного ML-узла решение состоит в том, оправдывают ли скорость развертывания, сокращение инцидентов и покрытие мониторингом эксплуатационные расходы; для портфеля та же экономика складывается в инвестиции в платформу.
Инвестиции в MLOps для одной модели
Для одной продакшен-ML-системы первый порог — годовая стоимость того, чтобы узел был наблюдаемым, развертываемым и восстанавливаемым. «Инвестиции в MLOps для одной модели» сводит основные категории расходов:
| Компонент | Иллюстративное допущение | Обоснование |
|---|---|---|
| Настройка конвейера CI/CD | $10–30 тыс. единовременно | Сокращает время развертывания с дней до часов |
| Мониторинг и оповещения | $2–10 тыс. в год | Выявляет деградацию до влияния на пользователей |
| Хранилище признаков (базовое) | $5–20 тыс. в год | Устраняет один источник перекоса обучения и обслуживания |
| Реестр моделей | $0–5 тыс. в год | Обеспечивает откат и аудиторские журналы |
| Инженерное время | 1–2 человеко-месяца на настройку | Первичная автоматизация и интеграция |
Инвестиции в MLOps для одной модели: иллюстративные исходные данные для планирования эксплуатации одной продакшен-ML-системы. Инструменты с открытым кодом (MLflow, Feast) могут снизить программные расходы; управляемые облачные сервисы обменивают более высокую удельную стоимость на меньшие накладные расходы инженеров.
Расчет окупаемости для одной модели
Порог окупаемости затем зависит от критичности модели: модель, приносящая выручку, может оправдать большие эксплуатационные расходы, потому что предотвращенные инциденты и экономия времени развертывания имеют измеримую ценность. «Окупаемость MLOps» формализует этот расчет для одного узла:
где «предотвращенные инциденты» — число продакшен-сбоев, которые инструменты предотвращают за год, а «средняя стоимость инцидента» — потери на один сбой, поэтому их произведение задает ценность предотвращенных инцидентов; «экономия времени» — часы инженеров, которые автоматизация возвращает за год, а «почасовая стоимость» — полная ставка труда, поэтому их произведение задает ценность возвращенного труда; знаменатель — годовая стоимость самих инструментов. Коэффициент выражает каждый доллар инвестиций в вернувшиеся доллары.
Для модели, которая приносит $1 млн годовой выручки при:
- 4 инцидентах в год, предотвращенных (по $25 тыс. каждый), экономия $100 тыс.;
- 20 часах в месяц экономии времени развертывания (по $150 в час), экономия $36 тыс.;
- инвестициях в MLOps $30 тыс. в год:
Когда инвестировать больше
Коэффициент выгоды и затрат 4,53 означает, что инвестиции оправданы не элегантностью инструментов, а тем, что модель достаточно дорога, так что предотвращение инцидентов и сокращение развертываний перевешивают годовые расходы на платформу. Отдача от практик MLOps для одной модели складывается по мере того, как команды добавляют новые модели. Переход от эксплуатации нескольких независимых ML-узлов к построению централизованной платформы подчиняется совсем иной экономике, включающей амортизацию общей инфраструктуры, накладные расходы команды платформы и затраты на координацию между моделями.
Для эксплуатации одной модели инвестируйте в MLOps пропорционально критичности модели. Модель, которая приносит $10 млн годовой выручки, оправдывает большую эксплуатационную строгость, чем внутренняя аналитическая модель. Мониторинг, происхождение и воспроизводимое развертывание часто становятся первыми инвестициями. Добавляйте хранилище признаков, когда общие определения признаков и паритет офлайн- и онлайн-данных становятся существенной проблемой, а автоматизацию переобучения включайте только тогда, когда данные подтверждают триггер и цикл валидации может локализовать плохое обновление.
Эти экономические компромиссы и принципы архитектурной зрелости проявляются в самых разных реальных развертываниях. В «Примерах из практики» продакшен-кейсы показывают, как организации балансируют воспроизводимость, наблюдаемость и автоматизированное переобучение с конкретными ограничениями задержки и пропускной способности.
Примеры из практики
Эксплуатационные ограничения ML-систем определяются физическими рамками аппаратуры обслуживания и последствиями отказов для приложения. Носимое устройство с питанием от батареи работает в бюджетах мощности в милливаттах, с ограниченной памятью SRAM на устройстве и узкой полосой телеметрии по Bluetooth Low Energy. Напротив, клиническое ПО работает под законодательными требованиями аудируемости, границами ошибок, критичных к безопасности, и контролем регуляторных изменений в рамках руководств FDA по жизненному циклу (U.S. Food and Drug Administration, 2025). Эти несхожие среды диктуют, как инженерные команды управляют конвейерами данных, артефактами моделей и аппаратным выполнением на протяжении всего жизненного цикла. Граничные архитектуры тратят инженерный бюджет на преодоление аппаратной асимметрии между высокопроизводительными облачными кластерами обучения и микроконтроллерами, тогда как клинические системы тратят этот бюджет на отслеживание происхождения, мониторинг когорт и валидационные шлюзы с участием человека в контуре.
Пример, вдохновленный Oura, в «Граничном дизайне, вдохновленном Oura» моделирует эти граничные ограничения на опубликованных данных офлайн-оценки и служит архитектурным исследованием, а не аудитом проприетарных продакшен-конвейеров обновления по воздуху. В этом граничном рабочем процессе эталонные метки сна происходят из полисомнографии (PSG), то есть многоканальных физиологических записей лабораторного уровня. Несмотря на контрастные режимы эксплуатации, и граничные, и клинические развертывания должны удовлетворять одним и тем же базовым дисциплинам MLOps. «Принципы MLOps по примерам из практики» сопоставляет эти базовые принципы в двух средах и показывает, как физические ограничения аппаратуры и регуляторные требования меняют механизмы реализации, не меняя базовых эксплуатационных требований.
| Принцип | Граничный дизайн, вдохновленный Oura | ClinAIOps |
|---|---|---|
| Воспроизводимость | Версионированные синхронизированные наборы данных носимого устройства и PSG | Журналы аудита, происхождение решений |
| Разделение ответственности | Независимые слои данных, обучения и обслуживания с граничным конвейером развертывания | Отдельные этапы клинической валидации и выкладки с изоляцией соответствия нормативам |
| Согласованность | Предобработка, выровненная по PSG, при обучении и на устройстве | Стандартизированные клинические конвейеры данных, обеспечивающие паритет обучения и обслуживания |
| Наблюдаемая деградация | Обнаружение аномалий на устройстве, ограниченная телеметрия | Мониторинг, специфичный для когорт, отслеживание исходов |
| Автоматизация с учетом стоимости | Триггеры переобучения с учетом батареи, CI/CD для граничных систем, балансирующих точность и стоимость ресурсов | Автоматические обновления моделей со шлюзами с участием человека, балансирующие стоимость обновления и риск для пациента |
Принципы MLOps по примерам из практики: сопоставление пяти базовых принципов MLOps с гипотетическим граничным дизайном, вдохновленным Oura, и рамкой ClinAIOps, показывающее, как предметные ограничения меняют реализацию, не меняя того, какие принципы применимы.
Граничный дизайн, вдохновленный Oura
Кольцо Oura дает эмпирическую основу для этого примера граничного MLOps. Опубликованное клиническое исследование подтверждает сбор данных и оценку стадий сна по нескольким датчикам (Altini and Kinnunen, 2021), тогда как версионирование, телеметрия, обновление по воздуху и контроль жизненного цикла представляют гипотетическую архитектуру, а не отчет о проприетарной продакшен-системе Oura. Работа в рамках милливаттного бюджета мощности и жестких ограничений памяти носимого кольца делает каждый эксплуатационный компромисс видимым так, как системы масштаба облака его скрывают.
Контекст и мотивация
Как миниатюрное потребительское носимое устройство, кольцо непрерывно регистрирует физиологические сигналы: акселерометрию для движения, оптическую фотоплетизмографию (PPG) для частоты пульса и вариабельности сердечного ритма и термисторы с отрицательным температурным коэффициентом для температуры кожи. По этим сырым потокам датчиков встроенные модели классифицируют четыре стадии сна (бодрствование, легкий сон, глубокий сон и сон с быстрыми движениями глаз, REM) и выдают ежедневные оценки восстановления. Поскольку миниатюрная батарея емкостью 15–22 мАч не может выдерживать непрерывную потоковую передачу по Bluetooth Low Energy (BLE) без разрядки за несколько часов, архитектура разделяет вычисления на три уровня: извлечение признаков на кольце, вывод модели на сопутствующем телефоне и историческую агрегацию в облачном масштабе.
Центральной целью было повысить точность классификации стадий сна до уровня полисомнографии (PSG),31 клинического золотого стандарта. Модели только по акселерометру давали точность четырехстадийной классификации сна 57 процентов, поскольку сигналы движения сами по себе не отличают тихое бодрствование от легкого сна или REM-сна. Поскольку эксперты-оценщики PSG согласуются друг с другом примерно на 82–83 процентах, разрыв в качестве между сенсорикой движения одного типа и клиническим консенсусом выявил физические пределы акселерометрии. Добавление сигналов вегетативной нервной системы (частота сердечных сокращений и вариабельность сердечного ритма) наряду с циркадными признаками температуры подняло точность классификации до 79 процентов. Полученный прирост в 22 процентных пункта закрывает примерно 84,6–88 процента разрыва между базовым уровнем и согласием людей, хотя согласие между оценщиками отражает неоднозначность меток, а не строгий теоретический предел относительно арбитрированного эталона.
Построение этого многодатчикового конвейера потребовало привязать телеметрию носимого устройства к клиническим стандартам через исследование с участием 106 участников с трех континентов (Altini and Kinnunen, 2021). Каждый участник носил кольцо Oura и одновременно проходил лабораторную PSG, что дало 440 ночей данных и 3 444 часа синхронизированных записей, которые сопоставили сырые потоки носимых датчиков с валидированными аннотациями сна. Масштаб и демографическое разнообразие выборки охватывали физиологические различия по возрасту, полу и базовому здоровью, а также поведенческие различия, необходимые для обобщения на реальную популяцию пользователей.
Консолидация синхронизированных данных акселерометра, температуры, оптической PPG и клинических записей сна позволила согласовать временное выравнивание и спецификации инженерии признаков. Продакшен-граничный рабочий процесс требует строгого версионирования наборов данных и отслеживания происхождения через ревизии аппаратуры датчиков, частоты дискретизации и процедуры цифровой фильтрации, чтобы не допустить перекоса обучения и обслуживания между конвейерами разработки на Python и встроенным выводом на C.
Когда синхронизированные клинические данные были готовы, офлайн-исследование моделей количественно оценило вклад каждой дополнительной модальности измерения. Оценка четырех конфигураций признаков при 5-кратной кросс-валидации подтвердила, что сочетание температуры, вариабельности сердечного ритма и циркадной периодичности поднимает точность четырехстадийной классификации до 79 процентов, с базового уровня 57 процентов для одного акселерометра (Altini and Kinnunen, 2021). Хотя эти офлайн-приросты демонстрируют ценность слияния многих датчиков, их развертывание на встроенном устройстве вводит эксплуатационные требования, выходящие за рамки исходного исследования: воспроизводимое квантование модели, валидацию численной конвертации и строгие бюджеты энергии времени выполнения.
После офлайн-валидации основная системная задача смещается от статистической точности к безопасности развертывания и эффективности времени выполнения. Граничная архитектура должна разделить выполнение по границам аппаратуры: облегченная фильтрация и классификация движения работают непрерывно в SRAM микроконтроллера, тогда как более тяжелые многоступенчатые модели последовательностей выполняются во время синхронизации с телефоном. Чтобы сохранять целостность конвейера на тысячах физических устройств, инструментарий MLOps требует автоматизированных конвейеров квантования (например, преобразования весов float32 в int8 с откалиброванными масштабными коэффициентами), криптографически подписанных артефактов моделей и отказоустойчивой доставки OTA32.
Граничный MLOps работает в физических ограничениях, отличных от серверных конвейеров: точность модели должна проектироваться совместно со строгим сроком службы батареи, ограниченной полосой радиосвязи, границами памяти на устройстве и почти полным отсутствием меток истины в реальном времени. В архетипе DS-CNN (жесткое ограничение) из «Стратегии мониторинга по архетипам нагрузки» здоровье отслеживается по эксплуатационным прокси (коэффициентам заполнения датчиков, аномалиям задержки вывода и распределениям уверенности классификации), а не по проверенным исходам. Чтобы в поле удержать скачок от 57-процентной точности акселерометра до 79-процентной точности при нескольких датчиках, требуется строгое управление конфигурацией, охватывающее версии прошивки датчиков, процедуры DSP-предобработки и квантованные веса сети.
Эти физические ограничения напрямую соответствуют пяти базовым принципам MLOps, представленным в «Принципах MLOps по примерам из практики». Версионированные наборы данных носимых устройств и PSG обеспечивают воспроизводимость, связывая каждый развернутый артефакт модели с точными лабораторными записями и калибровками прошивки датчиков, на которых он обучался. Многоуровневая программная архитектура обеспечивает разделение ответственности, изолируя драйверы встроенных датчиков от движков вывода и агрегаторов на телефоне, так что схемы квантования, топологии моделей и резервные режимы экономии батареи можно обновлять независимо. Общие ядра извлечения признаков обеспечивают согласованность между офлайн-обучением и выполнением на устройстве, устраняя перекос обучения и обслуживания, вызванный разными численными библиотеками или округлением чисел с плавающей точкой. Телеметрия с сохранением приватности поддерживает наблюдаемую деградацию, передавая агрегированные эксплуатационные диагностики (ежедневный коэффициент заполнения датчиков, разряд батареи, количество исключений вывода и энтропию классификации) без потоковой передачи сырых чувствительных биометрических данных с устройства пользователя. Наконец, развертывание по воздуху задает границу для автоматизации с учетом стоимости: каждое обновление должно показать, что его прирост точности перевешивает стоимость батареи на радиоприем, циклы перезаписи флеш-памяти и эксплуатационный риск изменения программного обеспечения на носимом устройстве, работающем непрерывно на пользователе.
Носимый граничный случай показывает, как физические пределы ресурсов (милливатты, килобайты и полоса радиосвязи) определяют дизайн MLOps. Когда машинное обучение переходит из персонального велнеса в регулируемое здравоохранение, главное инженерное ограничение смещается от физики аппаратуры к безопасности пациента, клинической валидации и алгоритмической подотчетности — эксплуатационной области ClinAIOps.
Пример ClinAIOps
В потребительском носимом оборудовании инженерные рамки ограничены милливаттами, объемом памяти и полосой радиосвязи. Когда машинное обучение переходит от фитнес-трекинга к регулируемой медицинской помощи, определяющим ограничением становятся уже не физика аппаратуры, а безопасность пациента и клиническая ответственность. При непрерывном терапевтическом мониторинге (CTM)33 носимые датчики передают физиологическую телеметрию, чтобы направлять персонализированные медицинские вмешательства. Универсальные фреймворки MLOps обеспечивают автоматизацию жизненного цикла: оркестрацию конвейеров, отслеживание артефактов и мониторинг доступности. Однако стандартные эксплуатационные конвейеры предполагают, что предсказания можно оценивать по статистическим прокси-метрикам и развертывать автономно. В клинической среде автоматизированные предсказания напрямую влияют на здоровье человека, поэтому автономное исполнение недопустимо.
ClinAIOps (Chen et al., 2023) адаптирует принципы MLOps к этим ограничениям, формализуя границы между алгоритмическим выводом и клинической ответственностью. Вместо того чтобы рассматривать человеческий надзор как внешнее препятствие, ClinAIOps встраивает петли обратной связи многих заинтересованных сторон прямо в архитектуру обслуживания. Рамка распределяет эксплуатационный контроль между тремя участниками (пациентами, клиницистами и инженерами машинного обучения), каждый из которых работает в своем временном масштабе и через явные шлюзы безопасности.
Петли обратной связи
Три взаимосвязанные петли обратной связи обеспечивают безопасную адаптивную интеграцию машинного обучения в клиническую практику. «Петли обратной связи ClinAIOps» показывает их как круговой поток между тремя заинтересованными сторонами. Пациенты передают данные непрерывного мониторинга с носимых датчиков и получают ограниченные рекомендации, поддержанные ИИ. Клиницисты получают сводки, оповещения и рекомендации, сгенерированные ИИ, а затем применяют клиническое суждение, задавая схемы терапии и лимиты одобрения. Разработчики ИИ получают непрерывную обратную связь от пациентов и клиницистов и используют сигналы реальной эффективности и рабочих процессов, чтобы улучшать модели и процессы развертывания. Внешняя петля, связывающая все три стороны, представляет полный цикл управления.
Петли обратной связи ClinAIOps: циклическая схема координирует пациентов, клиницистов и разработчиков ИИ, поддерживая непрерывное улучшение модели и безопасную клиническую интеграцию. Пациенты и клиницисты используют выходы ИИ в процессах ухода, а разработчики ИИ получают обратную связь от обеих групп, чтобы уточнять модели и процессы. Источник: (Chen et al., 2023).
Каждая петля обратной связи работает в своем временном масштабе, балансируя оперативность и клиническую проверку. Петля лечения пациента выполняется непрерывно в реальном времени: она фиксирует телеметрию датчиков и передает ограниченные корректировки для самостоятельного управления состоянием пациентом. В асинхронном надзорном ритме петля клинического надзора просматривает агрегированные тренды, задает эксплуатационные границы и проверяет рекомендации по лечению до вмешательства. Наконец, петля обратной связи разработчика передает телеметрию и паттерны отмен клиницистов обратно инженерным командам, запуская офлайн-переобучение и калибровку интерфейсов.
Петля лечения пациента
Петля лечения пациента выполняет локальный вывод над высокочастотными физиологическими потоками, которые фиксируют носимые устройства, например непрерывные мониторы глюкозы или оптические датчики пульса. Граничная среда обслуживания сопоставляет поступающие векторы признаков с недавней историей пациента из электронных медицинских карт.
Чтобы сохранить безопасность пациента, рекомендации следуют многоуровневой модели исполнения. Незначительные корректировки, которые строго укладываются в границы, заданные клиницистом, сразу показываются пациенту. Существенные изменения, а также рекомендации, созданные, когда неопределенность модели превышает допустимый запас, блокируются от автоматической доставки и передаются клиницисту. Такая структура обеспечивает быструю адаптацию к динамическим физиологическим состояниям и гарантирует, что автономное исполнение никогда не выйдет за пороги, разрешенные клиницистом.
Петля клинического надзора
Петля клинического надзора обеспечивает надзорный контроль над автоматизированным выводом. Вместо того чтобы нагружать медицинский персонал непрерывной сырой телеметрией датчиков, пакетные конвейеры агрегации сжимают временные ряды в продольные сводки: циркадную дисперсию, многодневные тренды и метрики качества сигнала.
Когда система формирует рекомендацию по лечению, например корректирует дозу антигипертензивного препарата для пациента с устойчивыми гипотоническими показаниями, клиницист оценивает предложение вместе с диагностическими факторами, которых носимая модель не наблюдает. Клиницист может одобрить, изменить или отклонить рекомендацию. Это решение записывается в аудируемый журнал событий и выполняет двойную эксплуатационную роль: оно обеспечивает клиническую ответственность в точке оказания помощи и создает проверенные, размеченные экспертом надзорные данные для последующей тонкой настройки модели. Клиницисты также обновляют эксплуатационные пороги, которыми управляется петля лечения пациента, перекалибровывая границу между автоматизированными рекомендациями и обязательной проверкой.
Обратная связь для разработчиков и координация пациента с клиницистом
Петля обратной связи разработчика связывает клиническую практику с инженерной инфраструктурой. Когда непрерывное журналирование данных и выявление низкоуровневых трендов переходят к конвейеру ИИ, консультации пациента с клиницистом смещаются от рутинного сбора измерений к целевой клинической оценке и постановке целей.
Эксплуатационная телеметрия, которая формируется в ходе этих взаимодействий, дает инженерным командам прямую видимость продакшен-поведения. Отмены решений, частота отказов и сообщения о нежелательных событиях выявляют ковариатный сдвиг в конкретных демографических срезах или деградацию датчиков на разных ревизиях аппаратуры. Инженеры используют эту обратную связь, чтобы запускать целевые конвейеры переобучения, уточнять схемы валидации данных и устранять проблемы удобства использования, которые вызывают усталость от оповещений у клинического персонала.
Пример: гипертония
Лечение гипертонии показывает, как эти три эксплуатационные петли координируют помощь на практике. Артериальное давление непрерывно колеблется под действием нагрузки, стресса и циркадных циклов, что требует индивидуальной долгосрочной фармакологической коррекции, которая выигрывает от непрерывного терапевтического мониторинга.
Инфраструктура данных
Исследовательские системы оценивают систолическое давление косвенно по ЭКГ, фотоплетизмографии (PPG),34 времени прохождения пульсовой волны и признакам частоты сердечных сокращений (Zhang et al., 2017). В продакшен-рабочих процессах эти сигналы дополняются потоками акселерометра, которые выявляют артефакты движения, и самоотчетными журналами приема лекарств. Точность требует строгой калибровки и регуляторного разрешения; заявления о датчиках потребительского класса нельзя считать клинически надежными без формальной проспективной валидации. Когда поток данных должным образом валидирован для целевой когорты, он объединяется с электронными медицинскими картами, чтобы дать контекст признаков для вывода.
Реализация петель
«Петли управления гипертонией» показывает две из трех петель обратной связи в верхней части и координацию «пациент–клиницист» внизу. Левая верхняя панель иллюстрирует петлю лечения пациента: пациент следит за артериальным давлением и получает ограниченные рекомендации по титрованию, которые система ИИ может выдавать в пределах порогов безопасности, заданных клиницистом; существенные изменения требуют явного одобрения. Правая верхняя панель изображает петлю клинического надзора: продольные сводки трендов поступают от системы ИИ к клиницисту, который задает лимиты одобрения и получает оповещения о клинически значимых рисках, таких как устойчивая гипотония или гипертонический криз. Нижняя панель отражает координацию «пациент–клиницист», которая возникает, когда рутинный сбор данных переходит к петле ИИ: приемы смещаются к разговорам более высокого уровня о факторах образа жизни и совместном принятии решений. Третья петля (обратная связь разработчика) на рисунке не показана; она описана в «Петлях обратной связи» как канал, по которому сигналы реальных рабочих процессов от пациентов и клиницистов улучшают модели и интерфейсы.
Петли управления гипертонией: три панели, подписанные «пациент–ИИ», «клиницист–ИИ» и «пациент–клиницист», каждая содержит двусторонний обмен. ИИ выдает ограниченные корректировки доз в пределах лимитов, которые задает клиницист, и эскалирует тяжелые показания; это выводит ситуацию на панель «пациент–клиницист» для просмотра трендов, проверки нежелательных событий и решений о лечении. Петля обратной связи разработчика ClinAIOps на этих панелях не отображена и обсуждается в тексте. Источник: (Chen et al., 2023).
Три панели задают инженерную границу клинической автоматизации: рутинный мониторинг и небольшие корректировки выполняются автоматически в пределах порогов, заданных клиницистом, тогда как острые эскалации, нежелательные события и изменения схем лечения требуют явного разрешения человека. Эта граница — точка, в которой обычные практики MLOps требуют дополнительной клинической координации, кратко описанной далее.
Сравнение MLOps и ClinAIOps
Случай с гипертонией иллюстрирует эксплуатационные различия между стандартными программными конвейерами и развертываниями в здравоохранении. Универсальный MLOps обеспечивает технические средства контроля жизненного цикла: автоматизированное тестирование, непрерывную интеграцию, реестры моделей и мониторинг дрейфа. ClinAIOps распространяет эту основу на регулируемые социотехнические среды, где выходы напрямую влияют на медицинские вмешательства. «Клинические эксплуатационные практики ИИ» сравнивает оба подхода по восьми эксплуатационным измерениям.
| Акцент универсального MLOps | Расширение ClinAIOps | |
|---|---|---|
| Фокус | Технический жизненный цикл модели | Принятие решений человеком и ИИ |
| Заинтересованные стороны | Команды ML, данных, платформы и эксплуатации | Добавляет пациентов, клиницистов и клиническое управление |
| Петли обратной связи | Мониторинг, переобучение и выпуск | Добавляет обратную связь по лечению, клиницисту и разработчику |
| Цель | Надежные, управляемые эксплуатационные процессы ML | Безопасная, эффективная и подотчетная поддержка ухода |
| Процессы | Автоматизированные конвейеры и эксплуатационные средства контроля | Интегрирует клинические рабочие процессы и человеческие шлюзы |
| Соображения по данным | Происхождение, качество, свежесть и контроль доступа | Добавляет согласие, клиническое происхождение и защищенные данные |
| Валидация модели | Предиктивные, эксплуатационные метрики и метрики срезов | Добавляет клиническую полезность, безопасность и исходы когорт |
| Реализация | Техническая интеграция и эксплуатационное владение | Добавляет клиническую ответственность и стимулы заинтересованных сторон |
Клинические эксплуатационные практики ИИ: универсальный MLOps предоставляет технические средства контроля жизненного цикла; ClinAIOps расширяет их клиническими рабочими процессами, доказательствами, надзором человека и подотчетностью.
Главное различие таблицы в том, что клиническое развертывание меняет распределение риска. Статистическая точность — необходимое условие, но она не защищает от ответственности, когда ошибочное предсказание определяет медицинское вмешательство. Поэтому рамка ClinAIOps меняет определяющее ограничение: с эффективности устройства на клиническую ответственность. Модель участвует в оказании помощи, но не может владеть клиническими решениями. Каждая рекомендация и последующее действие клинициста должны быть прослеживаемы до исходных сенсорных входов, версии модели и метаданных вывода; иначе система не сможет поддержать регуляторный аудит или ретроспективный анализ инцидентов. Разделение ответственности перестает быть архитектурным предпочтением и становится инвариантом безопасности: прием данных с датчиков, оценка вывода, клиническая диагностика и обновление параметров должны быть разделены явными программными контрактами и шлюзами одобрения человеком.
То же требование подотчетности меняет мониторинг. Стандартизированные клинические конвейеры данных поддерживают паритет обучения и обслуживания, но клиническая валидация требует оценивать рекомендации модели относительно стандарта ухода и эффектов, специфичных для когорт. Наблюдаемая деградация выходит за рамки статистических потерь и задержки и включает клинические метрики: доли достижения контроля артериального давления, нежелательные события, отмены решений клиницистом и различия между подгруппами. В этом режиме многоуровневые петли обратной связи — не нежелательная эксплуатационная задержка; это намеренные архитектурные средства контроля, которые балансируют автоматическую адаптацию на периферии с юридической и этической подотчетностью. Экономия с учетом стоимости строго работает внутри этих шлюзов: модели обновляются, только когда подтвержденная клиническая польза перевешивает стоимость валидации и риски для пациентов, а предсказания с низкой уверенностью запускают детерминированный откат к клинической проверке человеком.
Обобщение примеров из практики
Граничный дизайн, вдохновленный Oura, и пример ClinAIOps отделяют устойчивые принципы MLOps от ограничений развертывания, которые меняют их реализацию. Гипотетический жизненный цикл кольца — это случай ресурсного контура: эксплуатационная система должна сохранять воспроизводимость, согласованность и наблюдаемую деградацию, тогда как батарея, телеметрия и слабая эталонная истина ограничивают то, что можно измерить и обновить на устройстве. ClinAIOps — это случай контура подотчетности: те же принципы применяются, но доминируют валидация, аудиторские журналы и человеческие шлюзы, потому что модель влияет на клинические действия.
Общий инженерный урок в том, что зрелость MLOps — это не накопление инструментов. Это умение выявить определяющее ограничение, выбрать эксплуатационные средства контроля, которые ему соответствуют, и сохранить доказательства при изменении модели. Продакшен-системы ML выходят из строя, когда команды применяют эксплуатационную интуицию, ориентированную на код, не учитывая статистическое поведение и смещение распределений, что выявляет распространенные заблуждения и эксплуатационные ловушки.
Заблуждения и ловушки
Эксплуатация продакшен-систем машинного обучения при традиционных программных допущениях порождает особые режимы отказа. Следующие заблуждения и ловушки показывают, где стандартная интуиция программной инженерии расходится со статистической реальностью развернутых моделей.
Заблуждение и ловушка
Заблуждение: MLOps — это просто применение традиционных практик DevOps к моделям машинного обучения.
Инженеры часто полагают, что стандартные конвейеры CI/CD переносятся на машинное обучение без изменений. Традиционный DevOps автоматизирует компиляцию кода, модульное тестирование и развертывание артефактов при инварианте, что одинаковый исходный код дает одинаковое поведение бинарного файла. В ML-системе код — лишь одна из осей триады D·A·M. Выполнение модели зависит совместно от кода, больших развивающихся наборов данных и вычислительного бюджета ускорителей. Как подробно описано в «Конвейерах CI/CD», ML-конвейеры вводят переобучение с состоянием, шлюзы валидации по нескольким метрикам и неизменяемую регистрацию артефактов. Стандартные движки CI/CD не умеют нативно отслеживать происхождение данных, оркестрировать хранилища признаков или обнаруживать дрейф распределений. Когда команды применяют DevOps без ML-специфичных адаптаций, они максимизируют вычислительную доступность кластера обслуживания, оставляя статистическое поведение без мониторинга. Система достигает высокой доступности и низкой задержки, но незаметно выдает деградировавшие предсказания из-за непроверенных сдвигов данных и перекоса обучения и обслуживания.
Заблуждение и ловушка
Ловушка: рассматривать развертывание модели как разовое событие, а не как непрерывный процесс.
Рассмотрение развертывания как финальной вехи предполагает, что развернутые веса навсегда остаются согласованными с распределением продакшен-входов. В отличие от скомпилированных бинарных файлов, семантика выполнения которых остается фиксированной, качество модели деградирует по мере того, как реальные распределения смещаются. Мониторинг статистических индикаторов, таких как PSI («Мониторинг качества данных»), дает раннее предупреждение о дрейфе признаков и отличает безобидную дисперсию от изменения распределения, требующего действий. Пересечение порога предупреждения требует эксплуатационной диагностики, а не непроверенного переобучения. Как установлено в «Конвейерах обучения», планирование обновлений — это экономическая задача балансировки: оптимальный интервал переобучения взвешивает фиксированные вычислительные и инженерные затраты против бизнес-потерь, накопленных из-за объема запросов , ценности единицы точности и скорости устаревания . Эксплуатация продакшен-модели требует рассматривать развертывание как непрерывный контур управления, который балансирует сигналы мониторинга и экономику переобучения.
Заблуждение и ловушка
Заблуждение: автоматическое переобучение обеспечивает оптимальную производительность модели без надзора человека.
Автоматизация исполнения конвейера не устраняет необходимости в эксплуатационном управлении. Замкнутые конвейеры переобучения работают без семантического понимания; если прием данных из вышестоящих источников сталкивается с аномалиями схемы, испорченными метками или внезапным дрейфом датчика, автоматическое переобучение встраивает эти ошибки прямо в обновленные веса модели. Кроме того, автоматические шлюзы валидации обычно оценивают совокупные потери на отложенной тестовой выборке, что легко скрывает серьезные регрессии качества на критичных срезах или редких граничных случаях. Например, переобучение модели ранжирования на трафике выходных может ухудшить качество для чувствительных к задержке будних нагрузок, где распределения пользовательских запросов расходятся. Устойчивые архитектуры MLOps отделяют автоматическое исполнение конвейера от автоматического продвижения в продакшен, применяя канареечные развертывания, шлюзы регрессии по срезам и подпись человека, когда метрики валидации отклоняются от ожидаемых исторических границ.
Заблуждение и ловушка
Ловушка: сосредоточиться на технической инфраструктуре, пренебрегая согласованием организации и процессов.
Инвестиции в инструменты MLOps без определения организационных интерфейсов ведут к разрозненному эксплуатационному владению. Системы машинного обучения соединяют две разные инженерные культуры: разработчиков моделей, оптимизирующих офлайн-метрики точности, и инженеров платформы, которые управляют бюджетами задержки на уровне хоста, емкости памяти и пропускной способности. Когда организации рассматривают развертывание как передачу работы между изолированными командами, сортировка первопричин останавливается во время продакшен-инцидентов. Инженеры инфраструктуры проверяют здоровье контейнеров и загрузку GPU, не видя распределений предсказаний модели, а авторы моделей смотрят на офлайн-кривые обучения, не понимая ограничений времени выполнения при обслуживании. Такие инструменты, как хранилища признаков и реестры, обеспечивают техническую основу, но надежность требует организационного согласования: единых SLO, охватывающих статистическую точность и задержку обслуживания, совместных регламентов дежурства и общей подотчетности за регрессии в продакшене.
Заблуждение и ловушка
Заблуждение: обучение и обслуживание автоматически остаются согласованными, как только конвейеры созданы.
Создание первоначального сквозного конвейера не гарантирует постоянного паритета обучения и обслуживания. Перекос обучения и обслуживания возникает из фундаментальных архитектурных расхождений между офлайн- и онлайн-путями выполнения. Обучение обычно выполняется как офлайн-пакетный рабочий процесс (например, распределенные SQL-запросы или конвейеры Spark), оптимизированный для высокопроизводительного сканирования исторических журналов, тогда как онлайн-обслуживание работает в микросервисах с низкой задержкой и ограничениями в миллисекундах. Поддержание двух реализаций преобразований признаков в этих средах неизбежно вносит численные расхождения, различия в семантике пропущенных значений или смещение заглядывания вперед (lookahead bias) в исторических соединениях. Как показано в разделе «Хранилища признаков», хранилища признаков снижают это расхождение, унифицируя логику преобразований и синхронизируя пакетные хранилища и хранилища точечных выборок. Однако одни только программные конвейеры не гарантируют согласованности; эксплуатационная проверка требует непрерывных проверок паритета распределений и утверждений о схемах между офлайн-журналами признаков и входами онлайн-вывода, чтобы поймать расхождение до того, как оно ухудшит нижестоящие решения.
Заблуждение и ловушка
Ловушка: предполагать, что всеобъемлющий мониторинг предотвращает все продакшен-инциденты.
Дашборды и пороги оповещений не могут предотвратить продакшен-простои, вызванные незаметными сбоями данных. Мониторинг по своей природе пассивен: он обнаруживает деградацию только после того, как испорченное состояние распространится по системе. Кроме того, отслеживание одних только выходных метрик оставляет критичные слепые зоны вдоль конвейера данных. Как показано в «Мониторинге качества данных», измерение задержки сервиса и распределений предсказаний не выявляет входные аномалии, такие как устаревание признаков. Сервис вывода может сохранять номинальное время ответа и нормальные диапазоны предсказаний, потребляя устаревшие эмбеддинги пользователей из-за задержки репликации вышестоящей базы данных или сбоев вытеснения кеша. К тому времени, когда бизнес-метрики ниже по потоку ухудшаются, испорченные предсказания уже повлияли на пользователей. Надежность продакшена требует оборонительных граничных средств контроля наряду с пассивной наблюдаемостью: строгого соблюдения схемы входа, проверок свежести признаков и автоматических выключателей, которые переходят на детерминированные эвристики, когда качество входа опускается ниже эксплуатационных допусков.
Заблуждение и ловушка
Заблуждение: точность — первый продакшен-сигнал, который стоит отслеживать.
Команды часто настраивают дашборды точности как главный эксплуатационный сигнал, предполагая, что деградация проявится там первой. На практике точность по эталонной истине почти всегда запаздывающий индикатор. В продакшен-средах, таких как обнаружение мошенничества, конверсия рекламы или кредитный андеррайтинг, эталонные метки приходят с существенной задержкой; их накопление через возвраты платежей или историю погашений часто занимает недели или месяцы. Опора только на дашборды точности оставляет систему работать вслепую на протяжении всего окна задержки меток. Более того, агрегированная точность может оставаться обманчиво стабильной, даже когда входные распределения расходятся в критичных подгруппах. Как подробно описано в «Мониторинге качества данных», мониторинг распределений входных признаков с помощью метрик вроде PSI или дивергенции Кульбака — Лейблера (KL) дает немедленные опережающие индикаторы без меток. Эти статистические сигналы обнаруживают сдвиги распределений в реальном времени, позволяя провести инженерную диагностику до того, как деградация точности проявится в бизнес-результатах.
Заблуждение и ловушка
Ловушка: направлять опережающие оповещения в другой канал, чем оповещения о точности.
Отделение опережающих оповещений от основных каналов реагирования на инциденты нейтрализует их эксплуатационную ценность. Когда инженерные команды направляют предупреждения о дрейфе распределений и свежести данных на информационные дашборды или каналы низкого приоритета, оставляя вызовы дежурных исключительно для падений точности ниже по потоку, ранние предупреждения игнорируются. Оповещения о дрейфе накапливаются незамеченными, пока точность не обрушится и не заставит провести экстренное реагирование. Опережающий индикатор полезен эксплуатационно только тогда, когда он связан с активным, закрепленным за кем-то путем реагирования с откалиброванными уровнями серьезности и явными диагностическими регламентами. Эксплуатационная цель — использовать опережающие статистические сигналы, чтобы запускать диагностику первопричины: проверку целостности конвейера признаков и валидацию входных схем, — так чтобы метрики точности подтверждали эксплуатационное здоровье, а не объявляли о неуправляемом сбое.
Наблюдаемость в продакшен-машинном обучении выходит далеко за рамки пассивной телеметрии дашбордов. Она требует замкнутых эксплуатационных контуров по всей архитектуре D·A·M: соблюдения целостности входных данных и стабильности признаков, ограничения поведения модели автоматизированными шлюзами валидации и прямой передачи опережающих индикаторов инженерам, наделенным диагностическими регламентами, до того как незаметная статистическая деградация повредит продакшен-системы.
Итоги
MLOps существует потому, что системы машинного обучения вводят режимы отказа, принципиально отсутствующие в детерминированном программном обеспечении. Упавший сервер или сетевой тайм-аут сразу окрашивают дашборды доступности в красный цвет и побуждают операторов к корректирующим действиям. Деградировавшая модель создает незаметный статистический режим отказа: инфраструктура обслуживания возвращает ответы 200 OK в пределах сроков задержки, но точность предсказаний незаметно и неуклонно снижается. Эксплуатационные практики, построенные только для времени работы сервера, не способны наблюдать этот статистический распад. Операции машинного обучения закрывают этот разрыв, рассматривая качество модели как динамическую переменную времени выполнения, а не как статичный артефакт развертывания.
Пять базовых принципов («Базовые принципы») задают рамку оценки, которая применима независимо от масштаба и предметной области. Воспроизводимость через версионирование устраняет первопричину многих продакшен-инцидентов: непрослеживаемые артефакты, включая версии данных, сдвиги конфигурации и дрейф окружения, делают отладку невозможной, а откаты ненадежными. Разделение ответственности сдерживает радиус поражения при изменениях, не давая размыванию границ и каскадам исправлений превращать локальные исправления в системные регрессии. Императив согласованности нацелен на перекос обучения и обслуживания — незаметную эрозию точности, которая возникает, когда вычисление признаков расходится между офлайн-конвейерами обучения и онлайн-системами обслуживания; хранилища признаков централизуют определения признаков и пути обслуживания, однако паритет по-прежнему требует непрерывной валидации. Наблюдаемая деградация превращает абстрактную проблему незаметного сбоя в действенные оповещения через многоуровневый мониторинг, который отслеживает свежесть данных, распределения признаков, выходы модели и бизнес-метрики. Наконец, автоматизация с учетом стоимости заменяет произвольные графики переобучения подобранной моделью стоимости устаревания , практическое применение которой зависит от ее базовых допущений.
Компоненты инфраструктуры реализуют эти принципы на трех критических эксплуатационных границах. Хранилища признаков и версионирование данных управляют интерфейсом «данные–модель», снижая несогласованность обучения и обслуживания. Конвейеры CI/CD и реестры моделей управляют интерфейсом «модель–инфраструктура», обеспечивая воспроизводимость и возможность отката. Системы мониторинга, рамки реагирования на инциденты и практики дежурств управляют интерфейсом «мониторинг в продакшене», делая деградацию наблюдаемой и пригодной для действий. Фреймворк решения о переобучении обеспечивает автоматизацию с учетом стоимости, связывая измеренную деградацию с экономическими порогами. Предметные ограничения меняют как реализуются эти принципы, не меняя какие принципы важны: граничный дизайн, вдохновленный Oura, использует улучшение офлайн-точности исследования с 57 до 79 процентов, чтобы обосновать средства контроля валидации и обновлений с учетом ресурсов, а не заявлять о непроверенном продакшен-жизненном цикле. Аналогично ClinAIOps показывает, почему клинические развертывания с высокими ставками требуют средств контроля плавной деградации и надзора человека, а три петли обратной связи работают как архитектурные паттерны, а не как эксплуатационные накладные расходы.
Идеально доступна, идеально неверна
- ML-системы незаметно отказывают без мониторинга исходов: качество модели деградирует по мере роста расхождения распределений , хотя одна лишь расходимость не определяет потерю точности. Поскольку узел обслуживания может сохранять идеальную доступность, пока предсказания перестают быть верными, отслеживание эталонных исходов необходимо, а не опора только на проверки здоровья сервера.
- Перекос обучения и обслуживания искажает вывод без сбоев: хранилища признаков снижают перекос, унифицируя определения и преобразования признаков в разных средах, но поддержание паритета по-прежнему требует непрерывной валидации онлайн- и офлайн-конвейеров данных.
- Переобучение — это инженерная оптимизация, а не догадка: подобранная модель стоимости устаревания балансирует вычислительные затраты переобучения против падения качества предсказаний, связывая частоту обновлений с количественной экономикой при заявленных допущениях.
- Выкатывайте через поэтапный выпуск с заранее проверенным откатом: канареечные, сине-зеленые и теневые развертывания распределяют риск выпуска по продакшен-трафику, опираясь на многоуровневые процедуры отката, которые нужно проверять регулярными эксплуатационными учениями.
- Распределяйте инвестиции в инфраструктуру по системному риску: инструментирование и непрерывное развертывание формируют исходную эксплуатационную базу. Системы с высокими последствиями оправдывают большую эксплуатационную строгость; хранилища признаков и автоматизированное переобучение следует добавлять по мере роста перекоса и масштаба.
- Пять принципов переносимы между областями: воспроизводимость, разделение ответственности, согласованность, наблюдаемая деградация и автоматизация с учетом стоимости остаются инвариантами для разных приложений; предметные ограничения меняют только их конкретные механизмы и реализации инструментов.
- Эксплуатационная зрелость организационная в той же мере, что и архитектурная: управление одной моделью качественно отличается от управления парком продакшен-систем. Базовые принципы масштабируются, но эксплуатационная сложность растет вместе с размером парка, поэтому общие стимулы и совместные графики дежурств так же важны, как инструменты.
Эта эксплуатационная дисциплина отличает инженерию продакшен-ML от экспериментов на этапе разработки. Когда развернутая модель деградирует, систематическое инструментирование позволяет практикам локализовать режим отказа: выявить дрейф данных по расхождению распределений, перекос обучения и обслуживания по аудитам паритета предобработки, долг конфигурации по происхождению артефактов и петли обратной связи по временному отслеживанию выходов. Рассмотрение продакшен-ML как упражнения «развернул и забыл» игнорирует эти различные динамики и позволяет моделям выдавать недействительные выводы месяцами, пока дашборды инфраструктуры остаются зелеными.
Эта эксплуатационная реальность укореняет инженерию ML в таксономии D·A·M. В традиционном ПО код на кремнии выполняется детерминированно; в ML-системе код модели и аппаратура ускорителя остаются побайтово идентичными, тогда как ось данных непрерывно смещается под ними. Соответствие между моделью и миром — не инженерное состояние, достигаемое однажды при развертывании, а постоянная плата, которую вносят непрерывно через телеметрию, шлюзы валидации и переобучение, откалиброванное по стоимости. Поэтому надежность системы должна измеряться исходами предсказаний, а не одним лишь временем работы сервера, ведь самый опасный режим отказа в продакшене — зеленый дашборд, маскирующий дрейфующую модель.
От надежности к ответственности
ML-система может быть эффективной, масштабируемой и надежной и при этом наносить вред, усиливая смещения или утекая данные. Даже 99,9 процента времени безотказной работы и задержка менее 10 мс не доказывают, что ее решения ответственны. «Ответственная инженерия» рассматривает последнее ограничение: согласование технической оптимизации с человеческими ценностями, чтобы развернутые системы служили людям, на которых они влияют.
-
Телеметрия: путь обратной связи, который может сделать деградацию модели видимой до того, как она станет бизнес-проблемой. Сбои и коды ошибок выявляют некоторые программные отказы, но семантические ошибки могут оставаться незамеченными в любом приложении. ML-системы добавляют сдвиг распределения, который может остаться необнаруженным без статистической телеметрии, такой как распределения признаков, уверенность предсказаний и индикаторы дрейфа. Одни только метрики доступности не выявили бы эту деградацию. ↩
-
Артефакт: веса модели — это реализованные результаты обучения; входные данные и случайность, которые их породили, в общем случае нельзя восстановить по параметрам. Поэтому версионирования одного только кода недостаточно, а даже версионирование кода, данных, конфигурации и среды может не гарантировать точного повторения, если ядра или обучение недетерминированы. ↩
-
Концептуальный дрейф: исследования дрейфа концепции и потоков данных формализовали проблему, в которой целевая зависимость модели может измениться после развертывания (Widmer and Kubat, 1996); (Gama et al., 2014). В состязательных областях, таких как обнаружение спама, мошенничества и злоупотреблений, распределение может активно адаптироваться к модели, поэтому непрерывный мониторинг и переобучение становятся структурным требованием, а не операционной роскошью. ↩
-
DVC (Data Version Control): DVC приносит версионирование в стиле Git к наборам данных и артефактам моделей (Iterative, 2024), закрывая брешь в артефактах, которую формализует «воспроизводимость модели»: без версионирования данных член невосстановим, и никакая комбинация коммитов кода не может воссоздать развернутую модель. ↩
-
Технический долг: опыт Уорда Каннингема WyCash 1992 года ввел метафору долга для поспешного кода и отложенной консолидации (Cunningham, 1992); в ML долг может незаметно накапливаться через зависимости данных и моделей, которые тесты и ревью, сосредоточенные на коде, могут не выявить. Конвейер может оставаться неизменным, в то время как мир, который он моделирует, меняется. Рубрика ML Test Score (Breck et al., 2017) делает этот долг явным через 28 тестов готовности к продакшену, сгруппированных в разделы данных, модели, инфраструктуры и мониторинга. ↩
-
Провал iBuying у Zillow: Zillow сообщила о плане свернуть Zillow Offers в ноябре 2021 года, включая списание запасов в третьем квартале и сокращение персонала (Zillow Group, 2021). Этот провал иллюстрирует долг каскада исправлений в масштабе: ошибки ценообразования, решения о закупках и обратная связь по запасам могут усиливать друг друга, создавая петлю, которую не сможет разорвать ни один отдельный цикл переобучения. ↩
-
Хранилище признаков: платформа Michelangelo компании Uber описала централизованное хранилище признаков для совместного использования и обслуживания признаков в продакшен-моделях (Hermann and Del Balso, 2017). В таком масштабе гарантия согласованности должна выполняться в рамках бюджета онлайн-задержки: отличие хранилища признаков от общей библиотеки кода признаков в том, что общий путь признаков также должен быстро отдавать свежие признаки для вывода в реальном времени. ↩
-
Реестр моделей: предотвращает «обход реестра» — режим отказа, при котором недокументированная продакшен-модель расходится с обученным артефактом из-за другой предобработки, устаревшего формата сериализации или ручных срочных правок, внесенных прямо в конечную точку обслуживания. Без реестра, который навязывает версионированные неизменяемые артефакты с запрашиваемыми метаданными и состоянием, откат во время инцидента требует поиска нужных весов в импровизированном хранилище артефактов под давлением обстоятельств. ↩
-
Идемпотентность: это свойство гарантирует, что повторный запуск этапа конвейера не порождает дублирующихся видимых снаружи эффектов, конфликтующих регистраций или повторных действий по развертыванию. Получение одинаковых моделей из одинаковых входов — отдельное свойство, детерминированность и воспроизводимость, и этап
trainingможет его нарушать из-за случайности, например инициализации весов. Поэтому продакшен-системы сочетают стабильные идентификаторы запусков и атомарную публикацию для идемпотентности с фиксированными начальными значениями генераторов случайных чисел, детерминированными ядрами, фиксированными версиями библиотек и контролируемым порядком данных для воспроизводимости. ↩ -
Экономика облачного обучения ML: стоимость обучения GPT-3 оценивалась в миллионы долларов при расчете по часам работы GPU V100 (Li, 2020). Стоимость дообучения зависит от размера модели, провайдера, набора данных и числа шагов обучения. Прерываемые экземпляры, такие как AWS Spot Instances и Google Cloud Spot VMs, снижают цену экземпляров, но вносят компромисс: их могут прервать или вытеснить, поэтому для отказоустойчивого обучения нужна инфраструктура контрольных точек и возобновления (Amazon Web Services, 2026); (Google Cloud, 2026). ↩
-
Системная энтропия: подобранная скорость деградации может заметно различаться между развертываниями и должна оцениваться по данным об исходах. Более короткий временной масштаб деградации требует более чуткого мониторинга, но сам по себе не требует непрерывного обучения; задержка меток, риск валидации, стоимость переобучения и возможности отката определяют эксплуатационную каденцию. ↩
-
Период полураспада (из ядерной физики, где он измеряет время распада половины радиоактивного образца): в эксплуатации ML это удобная метафора, а не универсальный закон. Для экспоненциальной аппроксимации из «деградации точности» период полураспада равен . Каденция переобучения также зависит от трафика, ценности, стоимости переобучения и риска; сезонные, резкие или состязательные изменения требуют более богатого процесса дрейфа. ↩
-
Контейнеризация для развертывания ML: Docker (Merkel, 2014) упаковывает код с зависимостями в переносимые единицы; Kubernetes (Burns et al., 2016) оркестрирует эти единицы в кластерах. Контейнеризация частично решает член из «воспроизводимости модели», фиксируя пользовательские зависимости как версионированный артефакт; ядра хостов, драйверы и аппаратное обеспечение остаются внешними зависимостями. ↩
-
Промежуточная валидация: в ML промежуточная проверка добавляет вероятностные проверки адекватности к традиционной функциональной и эксплуатационной валидации. Модель может пройти модульные тесты и все равно отказать в продакшене, потому что тестовые данные не отражают распределение развертывания. Поэтому шлюзы выката должны сравнивать статистику предсказаний, срезы оценки и бизнес-ограничения с откалиброванными порогами, а не полагаться только на модульные тесты. ↩
-
Теневое развертывание: экономически оправдано, когда ожидаемое снижение потерь при выкате превышает стоимость теневой инфраструктуры для дублированного вывода, результаты которого не отдаются в обслуживание. ↩
-
Канареечное развертывание: направляет небольшую долю живого трафика на модель-кандидат, используя ее как сигнальный датчик состояния продакшена. Специфическая для ML трудность в том, что «отказ» — это статистическая деградация, а не детерминированный сбой: обнаружение малой разницы в точности с высокой уверенностью может потребовать тысяч выводов. Это создает напряжение между скоростью решения и статистической мощностью, которое и определяет минимальную длительность канарейки. ↩
-
Сине-зеленое развертывание: поддерживает две сопоставимые продакшен-среды, «синюю» (обслуживает текущий трафик) и «зеленую» (запускает модель-кандидат), а затем переключает трафик изменением маршрутизации, когда зеленая среда проходит валидацию. Поскольку откат — это переключение трафика, а не поэтапное опустошение, восстановление для сервисов без состояния может быть быстрее постепенной канарейки. Компромисс — дополнительная инфраструктура на время переключения, поэтому сине-зеленое развертывание выигрывает у канареечного, когда допустима краткосрочная дублирующая мощность, а статистическая валидация по сегментам дорога. ↩
-
Откат (из управления транзакциями баз данных): это действие «отмены» для развертываний в ML осложняется зависящим от модели состоянием (например, кешированными эмбеддингами), которое может быть несовместимо между версиями модели. Такое несоответствие может затянуть восстановление и способствовать нежеланию развертывать и замедлению итераций. ↩
-
Бессерверный вывод ML: экономичность этого варианта возникает из-за того, что вычислительные ресурсы выделяются только по запросу и масштабируются до нуля в простое, устраняя стоимость постоянной конечной точки. Это создает прямое напряжение с целями производительности: первый запрос после простоя несет штраф задержки «холодного старта», пока модель загружается в память. Для крупных моделей эта задержка может быть достаточно долгой, чтобы нарушить бюджеты задержки реального времени, если только сервис не держит прогретую мощность или не использует среду выполнения, предназначенную для быстрой загрузки. ↩
-
MLflow: открытый фреймворк MLOps, который сочетает хранение артефактов (S3/GCS) с базами метаданных (PostgreSQL), чтобы записывать прогоны гиперпараметров, хеши бинарных моделей и переходы между стадиями развертывания. Компромисс: централизация отслеживания происхождения против узких мест соединений с базой данных при массовом параллельном переборе гиперпараметров. ↩
-
Ray: распределенная вычислительная платформа из UC Berkeley (Moritz et al., 2018), которая предоставляет единый интерфейс задач и акторов с распределенным планировщиком и отказоустойчивым хранилищем. Более широкий урок MLOps в том, что фрагментированная инфраструктура создает точки трансляции, где логика предобработки, константы нормализации, версии токенизаторов или форматы артефактов могут незаметно расходиться. Общие абстракции выполнения могут снизить эту фрагментацию, но перекос обучения и обслуживания все равно требует явных проверок согласованности данных, признаков и кода обслуживания. ↩
-
Автомасштабирование для ML: автомасштабирование корректирует мощность по сигналам спроса (Amazon Web Services, 2024), но обслуживание ML добавляет ограничения, которых нет у сервисов без состояния. Решения об автомасштабировании должны учитывать время загрузки модели (накладные расходы холодного старта), фрагментацию памяти GPU и поведение батчинга наряду с загрузкой CPU. Слишком медленное наращивание нарушает SLO по задержке; слишком агрессивное сокращение вызывает повторные холодные старты, которые ухудшают задержку p99. ↩
-
Задержка обнаружения дрейфа: изменение можно оценить по достаточному числу входных выборок без меток, хотя обнаружение не происходит мгновенно. Изменение , как правило, требует размеченных исходов, которые в областях с высокими ставками (медицинская диагностика, обнаружение мошенничества, юридические решения) могут занять дни, недели или месяцы. Прокси-метрики, такие как распределения уверенности предсказаний и энтропия выходов, могут дать несовершенные ранние предупреждения, которые обменивают частоту ложных тревог на скорость обнаружения. ↩
-
Ковариатный сдвиг: поправки взвешивания по важности для ковариатного сдвига предполагают, что носитель обучающего распределения покрывает распределение развертывания: каждый входной пример развертывания мог появиться в обучении, просто с другой вероятностью. Когда развертывание содержит по-настоящему внераспределительные входы (новые категории товаров, новые демографические группы, состязательные входы), поправка может не сработать, и модель может давать уверенно неверные выходы без сигнала тревоги. Поэтому покрытие носителя — скрытое допущение, которое определяет, понадобится ли коррекция дрейфа или полное переобучение. ↩
-
Prometheus: Prometheus периодически опрашивает цели и хранит временные ряды для агрегации. Интервалы опроса и вычисления правил вместе влияют на задержку оповещений и могут пропускать короткие отклонения. Мониторинг температуры по каждому ускорителю позволяет точно маршрутизировать нагрузку ценой больших объемов данных, тогда как агрегаты на уровне сервера могут маскировать троттлинг отдельных компонентов. ↩
-
Валидация схемы: правила из листинга «Проверка схемы данных» предотвращают незаметные нарушения контракта данных, например когда столбец признака меняет тип с целого на вещественный. Без такого барьера на уровне входа мониторинг модели ниже по потоку не может отличить ошибку качества данных от настоящей регрессии качества, и это маскирует первопричину. Несоответствие схемы в критичном признаке может сделать недействительной в остальном корректную пачку предсказаний. ↩
-
PSI (индекс стабильности популяции): PSI широко используется в мониторинге кредитных скоринговых карт для сравнения ожидаемых и наблюдаемых популяций по бинам; Yurdakul and Naranjo анализируют его статистические свойства (Yurdakul and Naranjo, 2020). Общепринятые полосы 0,1 и 0,25 — полезные эксплуатационные условности, а не универсальные статистические законы. Операции ML приняли PSI, потому что он работает с бинированными категориальными или непрерывными признаками и дает интерпретируемый показатель дрейфа, который могут проверить и неспециалисты. ↩
-
Паттерн автоматического выключателя (circuit breaker): автоматическое обнаружение отказов, которое «размыкается», когда доля ошибок превышает заданные пороги, и перенаправляет трафик с отказывающего сервиса. В ML-системах паттерн требует существенной адаптации: деградация точности предсказаний требует иных порогов, чем сбои доступности сервиса, потому что модель, которая возвращает правдоподобные, но неверные предсказания, не выдает сигнала об ошибке, и выключатель оказывается слеп к самому опасному режиму отказа. ↩
-
Паттерн переборок (bulkhead): этот паттерн разделяет системные ресурсы, чтобы локализовать отказы в изолированных зонах. В обслуживании ML переборка выделяет фиксированную память ускорителя, оперативную память хоста и пулы рабочих потоков экспериментальным версиям модели, не позволяя прерыванию из-за нехватки памяти или утечке памяти в канарейке завершить общий процесс обслуживания. ↩
-
Отказоустойчивость по Византийскому протоколу: классическая византийская модель касается узлов, которые могут вести себя произвольно или посылать противоречивые сообщения. В синхронной неаутентифицированной постановке, или в модели устных сообщений, для устойчивости к византийским сбоям нужно не менее участников (Lamport et al., 1982). Ансамбли ML являются лишь аналогией, потому что ошибки предсказаний могут коррелировать, а согласие не устанавливает семантическую корректность. ↩
-
Полисомнография (PSG): многопараметрическое исследование сна, которое дает клинические эталонные данные для этой задачи классификации. Эта «истина» по своей природе шумна: эксперты, интерпретирующие одни и те же записи PSG, согласуются друг с другом примерно на 82–83 процентах (Altini and Kinnunen, 2021). Согласие между оценщиками показывает неопределенность меток, но не накладывает предела точности относительно фиксированного или арбитрированного эталона. ↩
-
Обновления по воздуху (OTA): механизм, которым оптимизированные модели развертываются на устройствах, уже находящихся в поле, без физического доступа. Минимизация объема артефакта через квантование и прореживание напрямую сокращает энергию передачи по Bluetooth и время радиопередачи. Атомарная подготовка обновления и процедуры отката гарантируют, что прерванная беспроводная передача или несовпадение контрольной суммы не могут повредить флеш-память устройства или оставить его в невосстанавливаемом состоянии. ↩
-
Непрерывный терапевтический мониторинг (CTM): подход здравоохранения, в котором носимые датчики собирают физиологические данные в реальном времени и позволяют персонализировать корректировку лечения. CTM заставляет MLOps столкнуться с ограничениями, которых нет в типичных развертываниях: петли обратной связи должны включать одобрение человеком в контуре для решений, критичных к безопасности, переобучение требует меток, подтвержденных клиницистом, а не неявных сигналов, а обновления моделей должны соответствовать нормативным требованиям до развертывания. Эти ограничения перестраивают каждый принцип MLOps, превращая CTM в стресс-тест для эксплуатационной зрелости. ↩
-
Фотоплетизмография (PPG): оптический метод, который по изменениям зарегистрированного света после освещения ткани выводит изменения объема крови. Для эксплуатации ML PPG создает проблему качества данных, которой нет в контролируемых условиях: артефакты движения от движения запястья портят сигнал, порождая паттерн дрейфа данных, при котором одно и то же физиологическое состояние дает разные входные распределения в зависимости от активности пользователя. Модели должны либо отфильтровывать испорченные окна до вывода, либо учиться устойчивости к шуму движения, а мониторинг должен отличать реальные физиологические изменения от сдвига распределения, вызванного артефактами. ↩
Ответственная инженерия
Назначение
Почему система, которая делает ровно то, что ей велели, все равно может причинять вред?
Эксплуатация ставит цели низкой задержки, высокой доступности и устойчивого качества предсказаний. Ответственная инженерия спрашивает, описывают ли эти цели правильное поведение, кому служит система и какие издержки спецификация оставляет неизмеренными. ML-система может выполнять требования по задержке, пропускной способности и совокупной точности и при этом воспроизводить историческую дискриминацию, поощрять вредное вовлечение, расходовать энергию без оправдания или использовать данные без достаточных средств защиты конфиденциальности и подотчетности. Такая система не сломалась: она эффективно оптимизирует неполную спецификацию. Пропущенные ограничения проявляются в неравномерных результатах для разных групп населения, в совокупной стоимости и выбросах за весь срок службы, в решениях, которые люди не могут понять или оспорить, и в свидетельствах, которые нельзя восстановить после причинения вреда. Если эти последствия не определены как требования до развертывания и не отслеживаются после него, обычные проверки работоспособности могут оставаться зелеными, пока вред накапливается. Ответственная инженерия рассматривает их как сбои системы, которые нужно диагностировать, измерять и смягчать с той же строгостью, что и регрессии задержки или точности. Для этого широкие обязательства нужно перевести в проверяемые границы, задокументированные допущения, прослеживаемые данные и пути реагирования, которые остаются выполнимыми в продакшене. В терминах D·A·M ответственность расширяет определение корректности: данные нужно проверять на закодированный вред и законность использования, алгоритмы должны быть ограничены обоснованными требованиями к результатам и эффективности, а машинная инфраструктура должна отслеживать, документировать и обеспечивать соблюдение этих границ на протяжении всего жизненного цикла системы.
Цели обучения
- Объяснить, как оптимизированные ML-системы могут усиливать вред через прокси-переменные, петли обратной связи и сдвиг распределения
- Применить диагностику «данные–алгоритм–машина», чтобы локализовать сбои ответственности в данных, целях алгоритма или инфраструктуре мониторинга
- Вычислять метрики справедливости по матрицам ошибок и сравнивать компромиссы на фронте Парето «справедливость–точность»
- Проектировать оценку по подгруппам, стресс-тестирование и мониторинг, которые выявляют сбои, специфичные для подгрупп, до развертывания
- Анализировать совокупную стоимость, доминирование вывода и углеродный след как измеримые ограничения ответственности
- Строить карточки моделей, паспорта данных, записи о происхождении данных и журналы аудита для подотчетности
- Оценивать решения по конфиденциальности, контролю доступа и соответствию требованиям с точки зрения нормативных требований и человеческого контроля
Ответственность как системная инженерия
В 2014 году Amazon создала инструмент для подбора персонала на основе ИИ1. Он занижал оценки резюме, в которых встречалось слово «women’s» (как в словосочетании «капитан шахматного клуба для женщин»), и понижал кандидатов, окончивших женские колледжи. Система точно оптимизировала заявленную цель: находить кандидатов, похожих на тех, кого уже нанимали. У нее не было ни сбоя выполнения, ни ошибки оптимизации; исторические практики найма закодировали гендерное смещение, которое градиентный спуск систематически воспроизводил в масштабе.
Если MLOps — это контур управления для надежности, то ответственная инженерия — контур управления для безопасности. MLOps следит за состоянием системы в работе и запускает переобучение, когда прогностическая пропускная способность падает. Ответственная инженерия отслеживает распределения результатов и запускает вмешательство, когда система порождает вред. В терминах системной инженерии модель может пройти верификацию (точно соответствовать заданной цели обучения), но провалить валидацию (не удовлетворять эксплуатационным, безопасностным или правовым требованиям) (National Aeronautics and Space Administration, 2016). Сбой вызван неполной спецификацией, а не ошибкой в исполнении компилятора или численной оптимизации.
Традиционная программная инженерия изолирует дефекты внутри модулей, хотя общие зависимости по-прежнему могут распространять ошибки. Системы машинного обучения вводят зависимость от данных: данные проходят через общие представления, поэтому испорченные или смещенные входы меняют плотные матрицы параметров, которые обслуживают каждый последующий вывод. Смещенный обучающий набор не вызывает ошибку компиляции или аварийное завершение во время выполнения; он незаметно сдвигает границы решений по всей системе. «Таксономия D·A·M» из приложения формализует диагностическую схему, которая локализует, на какой из трех осей D·A·M возникает сбой: нерепрезентативные или смещенные входы (данные), несогласованные формулировки функции потерь (алгоритм) или слепые зоны телеметрии в инфраструктуре обслуживания (машина). Благодаря этому ответственность становится архитектурным инвариантом, а не исправлением, которое делают после развертывания.
Ответственная инженерия расширяет определение корректности для систем машинного обучения. Традиционная корректность (численная устойчивость, ограниченная задержка и высокая доступность сервиса) остается необходимой, но недостаточной. Продакшен-система должна удовлетворять более широким эксплуатационным границам: ограниченным различиям ошибок между демографическими срезами, обоснованным затратам энергии и проверяемой родословной данных. Такое расширенное понятие корректности применяет инженерную дисциплину к режимам отказа, которые агрегированные метрики качества игнорируют. Всплеск p99-задержки запускает автоматические оповещения на операционной панели, а регрессия справедливости по демографическим группам остается невидимой для агрегированных метрик потерь, пока не причинит реальный вред (принцип «Модель смещения обратной связи»). Оба случая требуют строгой телеметрии и автоматического регрессионного тестирования.
Соблюдение расширенной корректности требует аппаратной и инфраструктурной поддержки данных, способной измерять то, что скрывают агрегированные бенчмарки. Бюджеты энергии и занимаемые ускорителями площади, которые количественно описаны в этой книге, напрямую переводятся в выбросы углерода, и поэтому оптимизация эффективности становится физическим ограничением ответственности наравне с задержкой обслуживания. Инфраструктура управления данными, включая политики контроля доступа, отслеживание родословной данных и неизменяемые журналы аудита, делает эти эксплуатационные границы обязательными в продакшене. Однако прежде чем строить эти средства контроля, архитекторы систем должны выделить, где и почему математическая сходимость расходится с безопасностью системы: структурный разрыв между минимизацией скалярной функции потерь и реальными результатами.
Инженерный разрыв ответственности
Модель кредитования, которая одобряет 95 процентов квалифицированных заявителей из группы большинства, но отказывает 40 процентам одинаково квалифицированных заявителей из группы меньшинства, может при этом иметь низкие агрегированные потери. Разрыв ответственности между этой технической корректностью и ответственными результатами — центральная проблема инженерии систем машинного обучения, к которой существующие методы тестирования не были приспособлены. Разрыв проявляется через конкретные механизмы: прокси-переменные, петли обратной связи и сдвиг распределения. Каждый из них причиняет вред по своему пути, который обычный мониторинг оставляет невидимым.
Когда оптимизация удается, а системы терпят неудачу
Провал инструмента подбора персонала Amazon иллюстрирует этот разрыв на оси данных таксономии D·A·M (см. рисунок ниже). Сбой вызван историческим обучающим сигналом, а не дефектом алгоритма или программного обеспечения. Модель, обученная на десятилетии исторических данных о найме, добросовестно оптимизировала заданную цель, но эти исторические паттерны закодировали гендерное смещение, которое система воспроизводила в оценках кандидатов (Dastin, 2018).
Провал Amazon — сбой по оси данных: смещенный исторический сигнал.
В рамках эмпирической минимизации риска модель минимизировала функцию классификационных потерь, выявляя корреляции на уровне токенов в корпусе резюме. Поскольку исторически технические сотрудники были в основном мужчинами, токены, связанные с женскими колледжами, организациями или активностями, имели отрицательные статистические корреляции с положительными метками найма. Алгоритм оптимизации точно извлек эмпирическое распределение обучающих данных, но это распределение отражало исторические практики найма, а не компетентность кандидатов. Многомерные текстовые представления кодируют и усиливают эти статистические закономерности, встраивая социальные смещения непосредственно в последующие векторные представления (Bolukbasi et al., 2016).
Amazon попыталась исправить ситуацию, удалив из конвейера обучения явные признаки пола и гендерно окрашенные термины. Это вмешательство не обеспечило непредвзятости рекомендаций: в многомерных пространствах признаков сохраняются прокси-переменные, которые несут демографический сигнал.2 Удаление отдельных атрибутов не затрагивает коррелирующие признаки: почтовые индексы коррелируют с расой через жилую сегрегацию, имена заявителей — с этнической принадлежностью, а использование медицинских услуг — с социально-экономическим положением. В конвейере резюме Amazon даже после удаления явных гендерных терминов оставшаяся лексика, включая учебу в определенных колледжах или участие в отдельных студенческих организациях, продолжала кодировать паттерны, коррелирующие с полом (Dastin, 2018). Поэтому удаление защищенных атрибутов из обучающих данных недостаточно, чтобы гарантировать справедливость.
Эффективное исправление требует архитектурных вмешательств на протяжении всего жизненного цикла системы, а не поверхностного фильтра данных. На уровне оценки тестирование по демографическим подгруппам количественно показывает различия в распределении оценок до развертывания. На уровне алгоритма состязательное устранение смещения, при котором вспомогательная сеть пытается предсказать защищенные атрибуты по промежуточным представлениям, а основная модель штрафуется за сохранение этого сигнала, может подавить чувствительные признаки, но все равно требует постоянной проверки по подгруппам. На операционном уровне ручная проверка пограничных оценок защищает только тогда, когда проверяющие обучены, наделены полномочиями и подлежат аудиту, а не используются для формального одобрения выводов модели. Наконец, на уровне мониторинга отслеживание итоговых решений о найме во времени выявляет непропорциональное воздействие, которое скрывают офлайн-метрики потерь. Поскольку встроить эти защиты в существующий конвейер оказалось технически невыполнимо, Amazon закрыла проект (Dastin, 2018).
Аудит алгоритма рецидивизма COMPAS (2016)
Контекст: COMPAS — инструмент оценки рисков, который используется в американских судах для прогноза повторных правонарушений при решениях о залоге и приговоре (Angwin et al., 2016).
Механизм: оптимизация калибровки между популяциями с разными базовыми уровнями рецидивизма вынуждала к математическим компромиссам между предиктивным паритетом и балансом ошибок между расовыми группами.
Последствия: чернокожие обвиняемые, которые не совершили повторного правонарушения, ошибочно помечались как высокорисковые почти вдвое чаще, чем белые обвиняемые (44,9 процента против 23,5 процента), тогда как белые рецидивисты гораздо чаще ошибочно получали низкий риск.
Реакция: аудит показал, почему одной калибровки недостаточно, чтобы решить, приемлемо ли распределение ошибок. Любой юрисдикции, которая использует такие оценки, нужны явная политика о том, какие критерии справедливости важны, независимая проверка по группам и анализ того, как оценка входит в процесс принятия решений.
Системный урок: оценки были примерно откалиброваны по расе, но нарушали равенство шансов, потому что доли ложноположительных и ложноотрицательных результатов не совпадали между группами. Формальные результаты показывают, что калибровка и паритет ошибок конфликтуют при разных базовых частотах, поэтому ответственная инженерия требует явного выбора того, какое ограничение справедливости важно.
Инструмент подбора персонала Amazon и система оценки рисков COMPAS3 иллюстрируют главный тезис этого раздела: успех оптимизации может сосуществовать с катастрофическим сбоем системы. Ни одна из моделей не страдала от программной ошибки или сбоя оборудования. В обоих случаях алгоритм оптимизации работал правильно относительно заданной цели. Сбой был архитектурным: неполной постановкой задачи. Когда техническая цель (минимизация эмпирической ошибки предсказания или достижение статистической калибровки) расходится с спецификацией системы (справедливые и обоснованные результаты для пользовательских популяций), высокая математическая точность относительно функции потерь напрямую усиливает вред.
Стандартная продакшен-телеметрия не способна обнаружить сбои спецификации. Конвейеры мониторинга отслеживают эксплуатационные инварианты (задержку вывода, использование памяти, пропускную способность и агрегированные потери на валидации), и все они остаются в норме, пока модель систематически неравномерно распределяет ошибки между подгруппами. Конвейер может удовлетворять техническую верификацию (строго соответствовать своему коду и функции потерь), но полностью провалить валидацию системы (нарушая эксплуатационные и общественные требования). Чтобы предотвратить тихие сбои спецификации, метрики ответственности должны стать частью основного тестового контура: нужно проверять, служит ли функция потерь обоснованным прокси для истинной цели системы, и обеспечивать паритет долей ошибок по подгруппам до развертывания.
Ответственный дизайн
Ответственность — это свойство системы, а не свойство модели.
Режимы отказа
- Согласованность целей: проверьте, является ли функция потерь обоснованным прокси для истинной цели системы.
- Непропорциональное воздействие: сравнивайте доли ошибок по подгруппам, а не полагайтесь на агрегированную точность.
Проверка
- Пре-мортем: до развертывания спросите: «Если эта система вызовет скандал через шесть месяцев, что, вероятно, пошло не так?»
Тихие режимы отказа
Одно изменение выше по потоку; многие затронуты незаметно.
Рассмотрим модель сепсиса в больнице, которая начинает рекомендовать агрессивное лечение пациентам с низким риском после того, как изменение рабочего процесса электронной медицинской карты (EHR) повлияло на то, как регистрируются витальные показатели. Как показывает рисунок выше, единственное изменение выше по потоку распространяется по радиусу поражения системы без всякого оповещения: уверенность модели остается высокой, задержка вывода укладывается в соглашение об уровне обслуживания, а все проверки работоспособности показывают норму. Сбой незаметен: распределение входных данных сместилось, но конвейер эксплуатационного мониторинга не имеет механизма для обнаружения дрейфа распределения.
Сдвиг распределения
Сдвиг распределения, введенный в «Введение» и переведенный в практику обнаружения дрейфа в «MLOps», возникает, когда распределение при развертывании отличается от распределения, на котором модель разрабатывали или оценивали. Стандартная минимизация эмпирического риска обычно предполагает, что обучающее и эксплуатационное распределения совпадают. Ковариатный сдвиг меняет при стабильном ; сдвиг меток меняет при стабильном ; концептуальный дрейф меняет .
- Значение: статистики расхождения, например дивергенция Дженсена — Шеннона , измеряют изменение распределения, а не деградацию точности. Полезные пороги оповещений нужно калибровать эмпирически для каждой задачи, представления, процесса разметки и среды развертывания, а затем соотносить с наблюдаемыми результатами, когда метки доступны. Значение , равное 0,1, может быть безвредным для одного пространства признаков и серьезным для другого, а мониторинг расхождения входов может пропустить концептуальный дрейф.
- Различие: сдвиг распределения описывает изменение между условиями разработки и развертывания. Он не означает, что выученное отображение было верным в момент обучения, и не каждый сдвиг снижает качество.
- Распространенная ловушка: сдвиг распределения — зонтичный термин с несколькими перекрывающимися таксономиями. Мониторинг одного только может обнаружить некоторые ковариатные изменения, но не может установить, остается ли стабильным; обнаружение концептуального дрейфа обычно требует размеченных результатов или обоснованных прокси.
Этот сценарий с сепсисом иллюстрирует класс сбоев, который мониторинг, сосредоточенный на доступности, обнаружить не может. В традиционных программных системах катастрофические сбои обычно громкие: исключение нулевого указателя прерывает выполнение, ошибка сегментации останавливает процесс, а исчерпанный пул сокетов возвращает сетевой таймаут. Системы машинного обучения вводят статистические режимы отказа, при которых испорченные или деградировавшие выходы неотличимы от корректных предсказаний. Тензоры с плавающей точкой продолжают проходить через ядра матричного умножения, выполнение на ускорителе укладывается в бюджеты задержки, а последующие сервисы получают структурно корректные ответы.
Сдвиг распределения — первый крупный механизм этой тихой деградации (операционные методы обнаружения и мониторинга дрейфа подробно описаны в «MLOps»). Сбой носит внешний характер: физическое распределение входов изменилось после обучения, но у модели нет внутренней телеметрии, чтобы заметить расхождение. Переобучение на свежих данных может частично восстановить точность при сдвиге распределения. Однако переобучение не устраняет второй, более фундаментальный механизм тихого сбоя, который сохраняется даже тогда, когда распределение данных абсолютно стационарно: рассогласование метрик.
Рассогласование метрик возникает, когда функция цели оптимизирует наблюдаемую прокси-метрику, которая расходится с ненаблюдаемым результатом, который система должна обеспечивать. Как показывает рисунок ниже, это расхождение описывает закон Гудхарта: как только прокси-метрика становится целью оптимизации, она перестает быть надежной мерой истинной цели.
За точкой излома прокси отрывается от цели.
Разрыв согласованности
Модель оптимизирует прокси-метрику (клики), потому что истинная метрика (удовлетворенность пользователя) не наблюдаема, и эти две метрики могут резко расходиться. Закон Гудхарта предупреждает, что оптимизация меры может ослабить ее связь с исходной целью. В иллюстративной системе может начинаться с 0,8; как только ранжирование максимизирует клики, оно может найти кликбейт с высоким числом кликов и низкой удовлетворенностью, и корреляция может упасть до 0,2.
Концептуально, если считать метрики нормированными на общей шкале, «разрыв согласованности» описывается так:
Если модель повышает клики на 20 процентов, но снижает удовлетворенность на 5 процентов, знаковый разрыв согласованности растет.
Системный вывод: инженеры не могут напрямую оптимизировать ненаблюдаемую цель. Им нужна обоснованная валидация прокси; рандомизированные контрольные выборки (holdout) могут оценить причинные эффекты только тогда, когда их результаты измеряют цель или обоснованный суррогат.
Разрыв согласованности иллюстрирует сбой, возникающий по оси алгоритма: функция потерь оптимизирует неверно заданную цель, поэтому даже модель, которая обобщает с нулевой ошибкой на тесте, порождает результаты, противоречащие целям организации или общества. Сдвиг распределения, напротив, возникает по оси данных: логика модели остается неизменной, но распределение входов уходит от обучающего. Оба сбоя тихие, но требуют противоположных инженерных ответов: переработки функции потерь в одном случае и мониторинга входов с переобучением в другом. Их смешение тратит инженерные ресурсы на неэффективные исправления. Чтобы выделить первопричину тихих сбоев, инженеры системы применяют таксономию D·A·M, введенную в «Введение» и формализованную в «Таксономии D·A·M» из приложения.
Таксономия D·A·M
Когда система причиняет вред, используйте таксономию D·A·M, чтобы найти первопричину. Сбои ответственности редко бывают «ошибками алгоритма»; это структурные дефекты по одной из трех осей:
- Данные (информация): отражают ли обучающие данные исторические смещения? (например, инструмент подбора персонала Amazon, который учился на смещенной истории). Сбой находится в топливе.
- Алгоритм (логика): оптимизирует ли функция цели прокси для вреда? (например, оптимизация «вовлеченности» усиливает поляризацию). Сбой находится в чертеже.
- Машина (физика): оправдывает ли энергетическая стоимость общественную пользу? (например, обучение огромной модели для тривиальной задачи). Сбой находится в двигателе.
Определение доминирующего сбоя в таксономии указывает первое исправление, которое стоит проверить: более качественную курацию (данные), более безопасные цели (алгоритм) или более эффективную инфраструктуру (машина). Реальные сбои могут затрагивать несколько осей, поэтому вмешательство все равно нужно оценивать сквозным образом.
Пока таксономия D·A·M выделяет где возникают сбои, инженерия эксплуатации требует понимать, когда и как различные режимы отказа проявляются в продакшен-телеметрии. «Иллюстративная таксономия режимов отказа ML-системы» классифицирует сбои ML-систем по задержке обнаружения, пространственному радиусу поражения и мерам восстановления. Если традиционные падения инфраструктуры и узкие места пропускной способности сразу вызывают оповещения, статистические сбои действуют тихо: они сохраняются днями или месяцами, пока технические проверки работоспособности остаются зелеными.
| Тип сбоя | Иллюстративное время обнаружения | Иллюстративный охват | Возможная реакция | Пример |
|---|---|---|---|---|
| Аварийное завершение | Немедленно | Полный | Перезапуск после устранения причины | Ошибка нехватки памяти |
| Деградация производительности | Минуты | Полный | Снятие конкуренции за ресурсы | Всплеск задержки из-за конкуренции за ресурсы |
| Качество данных | Часы–дни | Частичный | Может понадобиться исправление данных | Испорченные входы из вышестоящей системы |
| Сдвиг распределения | Дни–недели | Частичный или полный | Может потребоваться адаптация | Изменение популяции из-за нового пользовательского сегмента |
| Нарушение справедливости | Недели–месяцы | Подгруппа | Может потребоваться переработка | Усиление смещения в исторических паттернах |
Иллюстративная таксономия режимов отказа ML-системы: время обнаружения, охват и реакция зависят от приложения; в таблице приведены типичные случаи. Тихие сбои, такие как проблемы качества данных, сдвиг распределения и нарушения справедливости, могут требовать проактивного мониторинга, потому что не обязательно вызывают традиционные оповещения.
Петля обратной связи YouTube (рассмотренная как паттерн технического долга в «Производственные паттерны долга») иллюстрирует этот паттерн в масштабе: Ribeiro et al. (2020) проанализировали пути радикализации на YouTube и обнаружили переход от умеренных категорий каналов к более экстремальным, а также досягаемость этих категорий через рекомендации.4 Более широкий системный урок в том, что петли обратной связи могут работать точно так, как спроектированы, и при этом порождать результаты, противоречащие общественным ценностям. Поэтому цели рекомендаций нужно проверять на последствиях для пользователей и общества, а не только на прокси вовлеченности.
Перестройка ленты новостей Facebook дает поучительный контраст с петлей обратной связи YouTube: инженерная команда намеренно пожертвовала краткосрочными метриками вовлеченности, чтобы остановить отрыв прокси и защитить долгосрочное удержание пользователей (Mosseri, 2018).
Смещение прокси в ленте новостей
Сценарий: Facebook перевела цели ранжирования ленты новостей с краткосрочных прокси вовлеченности (клики, время просмотра) на метрики содержательного социального взаимодействия (Mosseri, 2018).
Диагностика: оптимизация только по краткосрочным прокси вовлеченности отрывала выходы ранжирования от долгосрочного благополучия пользователей и усиливала кликбейт и пассивное потребление.
Системный урок: метрики вовлеченности — это прокси ценности, а не сама ценность. Алгоритмы рекомендаций требуют многоцелевой оптимизации с явными ограничениями безопасности, чтобы предотвратить коллапс прокси.
Когда рассогласование прокси пересекается с демографической неоднородностью, тихие сбои проявляются как структурная дискриминация. Сдвиг распределения часто выглядит как несоответствие когорт: модели, оцененные на агрегированных бенчмарках, ненадежно работают на конкретных демографических подгруппах, и при этом не срабатывает тревога по агрегированной ошибке. Когда цель обучения оптимизирует прокси, отражающий исторические неравенства, модель кодирует эти различия в своих границах решений. Именно этот механизм заставил экспериментальный инструмент подбора персонала Amazon понижать резюме со словом «women’s», а затем проявился с опасными для жизни последствиями в клинической сортировке пациентов.
Ловушка прокси-переменной (2019)
Контекст: в 2019 году Зиад Обермейер (Ziad Obermeyer) и его коллеги из Калифорнийского университета в Беркли проанализировали коммерческий алгоритм Optum, который системы здравоохранения использовали, чтобы включать пациентов со сложными потребностями в программы управления помощью для пациентов группы высокого риска. Они изучили примерно пятьдесят тысяч пациентов одной крупной университетской больницы (Obermeyer et al., 2019).
Механизм: модель предсказывала «будущие расходы на здравоохранение» как прокси «будущей потребности в медицинской помощи». Поскольку система здравоохранения США тратит на чернокожих пациентов меньше, чем на белых пациентов с тем же уровнем заболевания, алгоритм выучил этот паттерн и присваивал чернокожим пациентам более низкие оценки риска.
Последствия: при любом заданном уровне оценки риска чернокожие пациенты имели значительно больше хронических заболеваний, чем белые пациенты, поэтому доля чернокожих пациентов, зачисляемых в специализированную помощь, снижалась.
Реакция: исследование показало, что замена расходов прямой мерой медицинской потребности повысила бы долю чернокожих пациентов, выявляемых для дополнительной помощи, с 17,7 процента до 46,5 процента при анализируемом пороге.
Системный урок: оптимизация по прокси наследует смещения системы, которая этот прокси породила. Связь «прокси–цель» нужно проверять по каждой демографической подгруппе, которую обслуживает система.
Тихие режимы отказа принципиально меняют системный контракт между программной инженерией и эксплуатационной верификацией. Традиционная программная верификация опирается на детерминированные утверждения: модульный тест проверяет, что выход совпадает с точным значением, проверки границ памяти утверждают, что выделение буферов не переполняется, а сторожевые таймеры следят, чтобы задержки RPC не нарушали соглашения об уровне обслуживания. В ML-системе корректность нельзя подтвердить одними только детерминированными инвариантами. Матричные умножения с плавающей точкой выполняются чисто, использование памяти остается стабильным, а проверки задержки остаются зелеными, даже когда модель выдает смещенные, некалиброванные или вредные предсказания. Чтобы перевести цели ответственности в структурированную инженерную практику, нужна операционализация статистической верификации: непрерывный мониторинг ковариатного сдвига по демографическим срезам, аудит соответствия «прокси–цель» и ограничение замкнутых петель обратной связи до того, как тихие ошибки распространятся по продакшену.
Когда ответственная инженерия работает
Каждый задокументированный успех имеет один и тот же структурный ход: расплывчатая цель ответственности становится инженерным ограничением, которое можно задать, проверить, сообщить и, при необходимости, использовать для остановки развертывания. Следуя выводам Gender Shades, аудита 2018 года, который выявил серьезные различия в доле ошибок при коммерческой классификации пола (Buolamwini and Gebru, 2018), Microsoft инвестировала в улучшение классификации пола по демографическим группам. Целевой сбор данных, изменения модели и систематическая оценка по подгруппам дали команде явную целевую долю ошибок и снизили аудированную долю ошибок для людей с более темной кожей ниже 2 процентов (Raji and Buolamwini, 2019). Публикация этих раздельных бенчмарков создала проверяемую основу и превратила внешние выводы аудита в эксплуатационный барьер выпуска.
Автоматическая обрезка изображений в Twitter показывает ту же дисциплину при другом ограничении. В 2020 году пользователи выразили обеспокоенность расовым и гендерным смещением в предпросмотре миниатюр. Twitter провела аудит системы, опубликовала измеренные различия и ограничения и перешла к предпросмотру без обрезки, который дал пользователям больше контроля (Yee et al., 2021). В этом случае ответственная инженерия изменила дизайн продукта, а не ограничилась постепенной настройкой порога автоматического ранжирования.
Дифференциальная приватность формализует этот паттерн: требование приватности становится математической гарантией, а не политическим намерением (Dwork, 2008).5 Системы с дифференциальной приватностью калибруют добавляемый шум так, чтобы сбалансировать полезность и потерю приватности, отслеживают совокупный расход приватности в повторных анализах с помощью бухгалтера приватности (privacy accountant) и документируют выбранные параметры.
Эти успехи показывают, что ответственная инженерия работает только тогда, когда высокоуровневые принципы переводятся в применимые системные ограничения по всему стеку D·A·M: курация распределений обучающих данных, ограничение функций потерь алгоритма или учет бюджетов приватности в среде выполнения. Соблюдение этих ограничений требует операционных полномочий приостанавливать развертывание или выводить из эксплуатации компоненты, которые нарушают заданные границы. Каждое успешное вмешательство опирается на непрерывную оценку, однако проверка этих статистических ограничений принципиально отличается от традиционной программной верификации.
Проблема тестирования
Традиционное программное тестирование оценивает поведение по однозначным спецификациям: арифметическая функция должна возвращать точную сумму своих операндов, а реляционная база данных должна сохранять целостность внешних ключей. Такие детерминированные свойства непосредственно сопоставляются с исполняемыми утверждениями.
Свойства ответственного машинного обучения плохо поддаются простой формализации. У справедливости есть несколько математических определений, которые могут противоречить друг другу в таких условиях, как неравные базовые частоты и несовершенное предсказание (Chouldechova, 2017; Kleinberg et al., 2017). Что считать справедливым, зависит от контекста, ценностей и компромиссов, которые технические системы сами по себе разрешить не могут. Индивидуальная справедливость требует, чтобы похожие люди получали похожее отношение, а групповая справедливость требует равноправных результатов для демографических категорий. Эти критерии могут конфликтовать, и выбор между ними требует ценностных суждений, которые выходят за рамки оптимизации.
Ограничения справедливости и точность предсказания могут находиться в компромиссе, но характер этой связи зависит от приложения. Фронт Парето описывает конфигурации, при которых нельзя улучшить одну из отображаемых целей, не ухудшив другую. «Иллюстративный фронт Парето «справедливость–точность»» показывает один гипотетический фронт «справедливость–точность». Три его точки иллюстрируют возможные решения о политике; они не означают, что обучение без ограничений всегда максимизирует точность при высоком неравенстве, что нулевое неравенство обязательно снижает точность или что у каждого приложения есть точка оптимального баланса.
Иллюстративный фронт Парето «справедливость–точность»: гипотетическая связь между точностью модели и демографическим неравенством. Ось x перевернута, поэтому меньшее неравенство находится справа. Точки A, B и C иллюстрируют три возможных рабочих выбора вдоль этой построенной кривой; кривая не является эмпирическим или универсальным законом.
Фронт говорит инженерам, между какими компромиссами им, возможно, придется выбирать, но построить его нельзя, пока не измерена эффективность по подгруппам. Ответственные свойства становятся проверяемыми, когда инженеры вместе с заинтересованными сторонами определяют критерии, подходящие для конкретного приложения. Проект Gender Shades6 показал, как раздельная оценка по демографическим категориям выявляет различия, невидимые в агрегированных метриках (Buolamwini and Gebru, 2018), и тем самым вскрывает сбои подгрупп, которые мониторинг ответственности должен ловить до развертывания. В «Частотах ошибок Gender Shades для Face++» видны резкие различия в частоте ошибок, которые коммерческие системы классификации пола давали для разных демографических групп. Конкретно: тестовый набор из 10 000 примеров, которого достаточно для группы большинства, дает всего 100 примеров для подгруппы меньшинства, составляющей 1 процент населения. То есть для уверенной валидации на ней требуется примерно в 100 раз больше данных, чем для группы большинства.
| Демографическая группа | Частота ошибок (%) | Относительно светлокожих мужчин |
|---|---|---|
| Светлокожие мужчины | 0,8% | Базовая (1,0×) |
| Светлокожие женщины | 9,8% | 12,2× |
| Темнокожие мужчины | 0,7% | 0,9× |
| Темнокожие женщины | 34,5% | 43,1× |
Частоты ошибок Gender Shades для Face++: частота ошибок для темнокожих женщин в 43,1 раза выше, чем для светлокожих мужчин. Источник: (Buolamwini and Gebru, 2018).
Как видно в «Частотах ошибок Gender Shades для Face++», раздельная оценка выявила то, что скрывала агрегированная оценка. Face++ сообщала частоту ошибок 0,8 процента для светлокожих мужчин и 34,5 процента для темнокожих женщин (точность 99,2 процента и 65,5 процента соответственно). Агрегированная метрика не давала никаких признаков того, что частота ошибок для темнокожих женщин в 43,1 раза выше, чем для светлокожих мужчин.
Универсального порога допустимого неравенства не существует, но командам стоит установить явные, обоснованные границы до развертывания. Команда может принять в качестве политики выпуска, специфичной для приложения, отношение частот ошибок между группами не выше 1,25 или разницу доли ложноположительных результатов менее 5 процентных пунктов. В трудовом праве США доктрина непропорционального воздействия (disparate impact)7 определяет регуляторный надзор, а правило четырех пятых8 дает отдельную, не решающую диагностику коэффициента отбора. Ключевая инженерная дисциплина заключается в том, чтобы задавать критерии, соответствующие приложению и применимому праву, а не переносить порог одной предметной области на другую.
Чтобы выявить скрытые сбои ответственности до развертывания, тестирование нужно расширить за пределы единых валидационных наборов и охватить три различных режима проверки.
Оценка по срезам разбивает данные оценки на демографические и операционные когорты и вычисляет метрики для каждого среза отдельно. Модель может достигать 95 процентов общей точности и при этом падать до 78 процентов для заявителей с низким доходом или для сельских когорт. Это серьезное неравенство в качестве, которое не видно в агрегированной отчетности.
Тестирование инвариантности проверяет, остаются ли решения модели стабильными при семантически нерелевантных заменах признаков. Замена имен кандидатов, например «John» и «Jamal», в заявке на кредит не должна менять вероятность одобрения, если демографические признаки юридически и технически не относятся к кредитоспособности. Фреймворки поведенческого тестирования, такие как CheckList, реализуют этот принцип, организуя наборы валидации вокруг поведенческих возможностей и инвариантностей к возмущениям, а не вокруг статической валидационной потери (Ribeiro et al., 2020).
Тестирование границ и стресс-тестирование исследуют режимы входных данных, где эмпирических валидационных данных мало или они нерепрезентативны. Оценка границ описывает поведение на краях распределения: экстремальные возрастные распределения, редкие суммы транзакций или разреженные географические категории, где дисперсия предсказаний резко возрастает. Стресс-тестирование выводит эти границы в состязательные условия: испорченные конвейеры признаков, внезапный ковариатный сдвиг и синтетические пограничные случаи, которые проверяют запас безопасности при деградации. Красное тестирование с участием заинтересованных сторон дополняет автоматические наборы: оно вводит состязательные проверки из предметной области, предложенные затронутыми сообществами, и выявляет режимы отказа, которые статистические бенчмарки упускают.
Стратегии ответственного тестирования дополняют традиционное программное тестирование, а не заменяют его. Каждая из них требует совместного суждения при выборе, настройке и интерпретации. Юристы не могут в одиночку определить, какие демографические срезы важны для медицинского алгоритма, а менеджеры продукта не могут в одиночку подобрать подходящие тесты инвариантности для кредитной модели. Специалисты предметной области, затронутые стороны, политические эксперты и инженеры должны вместе определить релевантный вред; затем инженеры кодируют эти требования в виде измеримых тестов и производственных средств контроля. Поэтому ответственность требует четкого владения внутри инженерной команды, а также независимого надзора извне.
Инженерное руководство ответственностью
К моменту, когда Amazon отказалась от инструмента подбора персонала, попытки исправления не дали уверенности, что он перестанет выдавать дискриминационные рекомендации (Dastin, 2018). Более ранние проектные решения могут сузить набор доступных исправлений. Инженерию ответственного ИИ нельзя полностью передавать этическим комитетам или юридическим отделам. Эти группы обеспечивают необходимый надзор, но у них нет технического доступа, который нужен для раннего выявления проблем в ходе разработки.
Юридическая или этическая экспертиза может выявить проблему ближе к развертыванию, но она не может вернуть проектные варианты, которые система уже исключила. Если команда обучила модель без ограничений справедливости, выбрала архитектуру, которая не поддерживает требований интерпретируемости, или построила конвейер данных без демографических атрибутов, необходимых для мониторинга, экспертиза может только принять, отклонить или потребовать дорогостоящей переработки. Поэтому инженеры занимают критически важное положение в жизненном цикле разработки ML, потому что их решения определяют пространство решений для всех последующих вмешательств: архитектура определяет, какие ограничения справедливости применимы, цель оптимизации определяет, какие паттерны выучит система, а конвейер данных определяет, возможна ли раздельная оценка.
Инженерия ответственного ИИ
Инженерия ответственного ИИ — это инженерная дисциплина проектирования, развертывания и сопровождения систем с вероятностными выходами, которая переводит общественные и регуляторные требования в проверяемые ограничения по осям D·A·M: допустимое содержание данных, их происхождение и состав; допустимое поведение модели и свойства устойчивости; а также инфраструктурные границы, такие как задержка, энергия, вычислительный бюджет, выбросы углерода и хранение журналов аудита.
- Значение: каждая ось D·A·M получает конкретные ограничения управления. Ось данных ограничена нормами конфиденциальности, например Общим регламентом по защите данных (GDPR), который определяет, какие записи, поля и признаки можно собирать. Ось алгоритма ограничена метриками справедливости и устойчивости (например, демографический паритет в пределах между защищенными группами, то есть доли положительных предсказаний не должны различаться больше чем на 5 процентных пунктов, или снижение точности менее чем на 2 процента при состязательном возмущении , то есть наихудшее изменение входа ограничено 0,01 на нормированный признак в норме ). Ось машины ограничена бюджетами ресурсов и инфраструктуры: задержкой, энергией на вывод, выбросами углерода и хранением журналов аудита. Нарушение этих границ — это сбой системы, а не недостаток исследования.
- Отличие: в отличие от этики ИИ, которая формулирует желаемые ценности, инженерия ответственного ИИ переводит эти ценности в измеримые, проверяемые инварианты, которые можно подтверждать автоматическим тестированием и непрерывным мониторингом с помощью тех же практик жизненного цикла, что и для задержки SLO.
- Типичная ошибка: распространено заблуждение, что ответственность «добавляется» в конце разработки. Ограничения на то, какие данные можно собирать, влияют на то, чему можно научиться и что можно проверить, а инфраструктурные решения определяют, какие доказательства можно сохранить. Исправление на поздних этапах может оставаться возможным, но оно часто более узкое, медленное и дорогое.
Ориентация на инженерию не уменьшает важности разнообразных точек зрения при выявлении потенциального вреда. Менеджеры продукта, исследователи пользователей, затронутые сообщества и эксперты по политике вносят существенные знания о том, как системы социально терпят неудачу, несмотря на технический успех. Инженеры переводят эти опасения в измеримые требования и проверяемые свойства, которые можно подтверждать на протяжении всего цикла разработки. Эффективная ответственность требует инженеров, которые и слушают опасения заинтересованных сторон, и обладают техническими возможностями для внедрения подходящих защит.
Инженерные команды не работают изолированно. Как ясно показано на «Слоях управления ответственным ИИ», инженерные практики вложены в более широкие организационные, отраслевые и нормативные структуры управления, и каждый слой накладывает ограничения на внутренние. Техническое совершенство на внутреннем слое делает возможным соблюдение требований, идущих извне, но не заменяет его.
Слои управления ответственным ИИ: четыре вложенных овала ставят защитные меры уровня команды в центр, окруженные организационной культурой безопасности, отраслевой сертификацией и экспертизой, а также государственным регулированием. Вложенность отличает реализацию в центре от надзора снаружи; надпись показывает, что требования идут внутрь, а технические практики обеспечивают соответствие. Адаптировано по (Shneiderman, 2022).
Эти слои управления определяют, кто отвечает за ответственность, но они еще не учитывают издержки, которые обычные метрики производительности не отражают.
Помимо этических императивов, ответственная инженерия может приносить деловую ценность через три взаимно усиливающих механизма. Самый непосредственный — снижение рисков: сбои ML-систем создают юридическую и финансовую уязвимость, которую систематические практики ответственности могут уменьшить. Amazon отказалась от внутренней модели подбора персонала после того, как обнаружила связанные с полом различия в своих рекомендациях. Организации, которые внедряют раздельную оценку, документацию и мониторинг, могут снизить вероятность дорогостоящих сбоев и сохранить доказательства своего инженерного процесса, если проблемы все же возникнут.
Второй механизм — соответствие нормативным требованиям, которое задается юридическими нормами, различающимися по юрисдикциям и уровню риска приложения. Например, Закон ЕС об ИИ (EU AI Act) классифицирует высокорисковые применения ИИ и предписывает технические требования, включая оценку рисков, управление данными, прозрачность и человеческий надзор. Организации, которые встраивают ответственность в инженерную практику, могут подтверждать соответствие с помощью существующей документации и мониторинга, а не дорогостоящей достройки задним числом. Инженерный урок здесь в том, что проактивные средства контроля обычно дешевле, чем восстановление доказательств после развертывания.
Полная цена железного закона
Железный закон систем машинного обучения (принцип «Железный закон систем машинного обучения»), сформулированный в «Железном законе систем машинного обучения», утверждает, что производительность системы зависит от взаимодействия данных, вычислений и системных накладных расходов. Предыдущие главы оптимизировали каждый член: сжимали модели («Сжатие моделей»), ускоряли аппаратуру («Аппаратное ускорение») и автоматизировали эксплуатацию («MLOps»). Однако любая оптимизация может создать или переместить издержки, которых нет в ее бенчмарке.
Модель, квантованная для периферийного развертывания, потребляет меньше энергии, но ее выходы могут различаться между демографическими группами. Система рекомендаций, оптимизированная под вовлеченность, максимизирует бизнес-метрику, но может усиливать вредный контент. Ответственная инженерия расширяет этот учет, включая более широкие последствия: углеродную стоимость вычислений, цену для справедливости выбора оптимизации и общественную цену развертывания в масштабе. Железный закон определяет, насколько быстро работают системы; ответственная инженерия определяет, насколько хорошо они служат людям.
Конкурентная дифференциация завершает деловое обоснование. Доверие может определять решения корпоративных покупателей о покупке сервисов на основе ML, и организации, которые могут продемонстрировать систематические практики ответственности через карточки моделей, журналы аудита и опубликованные результаты оценки, могут получить доступ к развертываниям, недоступным конкурентам. Позиционирование Apple в вопросах приватности, принципы ответственного ИИ Microsoft и исследования безопасности Anthropic иллюстрируют ответственность как стратегическую инвестицию, а не чисто оборонительную статью расходов.
Методы квантования из «Сжатия моделей» могут снизить энергию вывода, если развернутая среда выполнения и аппаратура используют это представление и измеренная энергия рабочей нагрузки действительно падает. Инфраструктура мониторинга из «MLOps» может поддержать раздельную оценку справедливости, если система законно собирает необходимые данные о результатах и подгруппах. Ответственная инженерия объединяет эти возможности в дисциплинированную практику через структурированные процессы, которые переводят принципы в операционные процедуры.
Систематические процессы, примененные на раннем этапе, могли бы снизить вероятность или тяжесть сбоев, рассмотренных в разделе «Ответственность как системная инженерия». Контрольные списки, стандарты документации, протоколы тестирования и инфраструктура мониторинга переводят принципы ответственности в повторяемые инженерные процессы, но не гарантируют предотвращения сбоев.
Контрольный список ответственной инженерии
Структурированная проверка перед развертыванием могла бы выявить связанные с полом сигналы, которые выучил инструмент подбора персонала Amazon, а раздельное тестирование выявило бы неравенство в частоте ошибок для COMPAS. У обоих сбоев была общая причина: ответственность рассматривали как отдельный этап проверки, а не как часть процесса разработки. Контрольный список ответственной инженерии встраивает оценку туда, где инженерные решения создают устойчивый риск: до развертывания, в документации, при оценке для конкретных популяций, на границах объяснимости и соответствия требованиям, а после запуска через мониторинг. Этапы опираются друг на друга: оценка определяет, что измерять, документация сохраняет допущения, оценка справедливости проверяет, сохраняется ли качество для всех групп, объяснимость и соответствие требованиям превращают решения в обязательства, а мониторинг связывает выявленные нарушения с вмешательством.
Оценка перед развертыванием
Прежде чем модель одобрения кредитов попадет в продакшен, команда должна установить происхождение обучающих данных, определить, кто в них представлен и кто отсутствует, предвидеть режимы отказа и определить возможность обжалования для затронутых пользователей. «Структура оценки перед развертыванием» организует эту оценку в пять фаз, отделяя блокирующие пункты критического пути от приоритетных пунктов, которые могут продолжаться при документированном принятии риска.
| Фаза | Приоритет | Ключевые вопросы | Требуемая документация |
|---|---|---|---|
| Данные | Критический путь | Откуда эти данные? Кто представлен? Кто отсутствует? Какие исторические смещения могут быть закодированы? | Записи о происхождении данных, анализ демографического состава, описание методологии сбора |
| Обучение | Высокий приоритет | Что оптимизирует система? Что неявно штрафует функция потерь? Как выбор архитектуры влияет на результаты? | Спецификация функции цели, выбор регуляризации, обоснование выбора гиперпараметров |
| Оценка | Критический путь | Сохраняется ли качество для разных пользовательских групп? Какие пограничные случаи существуют? Как построены тестовые наборы? | Метрики по демографическим группам, результаты тестирования пограничных случаев, анализ состава тестового набора |
| Развертывание | Критический путь | Кого затронет система? Что произойдет при сбое? Какие возможности обжалования есть у затронутых пользователей? | Оценка воздействия, определение заинтересованных сторон, процедуры отката, протоколы уведомления пользователей |
| Мониторинг | Высокий приоритет | Как обнаруживаются аномалии? Кто проверяет поведение системы? Что запускает вмешательство? | Спецификации панели мониторинга, пороги оповещений, графики проверок, процедуры эскалации |
Структура оценки перед развертыванием: пункты критического пути блокируют развертывание, пока на них не получен ответ. Пункты высокого приоритета нужно выполнить до запуска или вскоре после него. Систематическое покрытие вопросов ответственности на всем жизненном цикле ML снижает риск того, что опасности будут упущены.
Пункты критического пути — это блокировщики развертывания: система не должна попасть в продакшен, пока эти вопросы не получили ответа. Пункты высокого приоритета нужно решить, но можно продолжать работу с документированным принятием риска и графиком устранения. Это различие позволяет командам выпускать системы ответственно, не требуя совершенства по всем измерениям до первичного развертывания.
Строка «Оценка» в «Структуре оценки перед развертыванием» ставит критический вопрос: сохраняется ли качество для разных пользовательских групп. Ответ на него требует статистически корректных тестовых наборов для каждой группы, что при неравномерном представительстве может создать неожиданно жесткие требования к данным.
Случайная выборка почти не захватывает малые подгруппы.
Статистика представленности
Задача: инженерной команде нужно проверить, что модель распознавания лица работает для группы меньшинства, которая составляет 1 процент пользовательской базы. Наихудшая биномиальная погрешность около 1 процентного пункта при 95-процентной доверительной вероятности требует примерно 10 000 изображений для этой группы.
Случайная выборка: чтобы получить 10 000 изображений группы в 1 процент с помощью случайной выборки, команда должна собрать и разметить: изображений.
Стратифицированная выборка: целенаправленный сбор данных для этой группы (например, через активное обучение или работу с сообществами) требует всего 10 000 изображений.
Системный вывод: опора на «естественное распределение» данных для справедливости при случайной выборке непозволительно дорога. Валидация группы меньшинства эффективно требует в 100 раз больше данных, чем для группы большинства. Справедливость требует намеренной инженерии данных, а не просто большего количества данных.
Намеренная инженерия данных определяет, что модель видит при оценке, но даже идеально репрезентативный набор данных не предотвратит вред при развертывании, если у системы недостаточен человеческий надзор. Стоимость представленности, выведенная в прикидочных расчетах в «Статистике представленности», — это предварительный шлюз развертывания; следующий вопрос в том, что происходит, когда модель уже работает и принимает решения, которые влияют на людей.
Парадокс автоматизации (2018)
Контекст: группа передовых технологий Uber (ATG) тестировала беспилотные автомобили в Аризоне, полагаясь на то, что человек-оператор безопасности вмешается, если автономная система восприятия выйдет из строя (National Transportation Safety Board, 2019).
Механизм: система восприятия обнаружила пешехода, переходящего дорогу, но многократно переключала его классификацию между «транспортное средство», «велосипед» и «неизвестный объект», сбрасывая прогноз траектории, в то время как автоматическое экстренное торможение было намеренно отключено.
Последствия: оператор безопасности отвлекся на личный телефон и не принял управление, что привело к смертельному столкновению.
Исправление: Uber оснастила автомобили камерами контроля водителя, снова включила автоматическое экстренное торможение и ввела двух операторов на время тестирования на дорогах.
Системный урок: добавление человека-резерва создает новую систему со своими режимами отказа. Высокая надежность автоматизации может порождать самоуспокоенность и снижать бдительность, поэтому эффективный резерв требует проектирования рабочей нагрузки, мониторинга внимания и обоснования безопасности для объединенной системы «человек–машина».
Без эффективного контроля надежная автоматизация может подтачивать бдительность.
Для приложений с высокими ставками фаза развертывания должна определять, где требуется человеческий надзор. Системы с участием человека в контуре (HITL) направляют неоднозначные, последствия которых велики, или помеченные решения проверяющим людям, а не действуют автономно. Эффективный дизайн HITL должен задавать четыре требования: объем проверки (какие решения требуют проверки человеком), пороги уверенности, которые запускают эскалацию, обучение проверяющих и механизмы контроля их работы. HITL — не универсальное решение: проверяющие могут формально одобрять автоматические решения, привносить собственные смещения или оказаться перегружены объемом оповещений. Эффективный дизайн HITL требует калибровки границы «человек–машина» под конкретные риски приложения и возможности проверяющих.
Оценочная структура перед развертыванием напоминает предполетные контрольные списки в авиации, которые стандартизируют критические проверки в условиях нехватки времени. Продакшен-развертывания ML требуют такой же дисциплины и строгой проверки. Контрольный список подсказывает командам, какие вопросы задать, но не доказывает, что система безопасна; стандарты документации сохраняют ответы и позволяют им сопровождать модель.
Стандарты документирования моделей
Представьте, что вы унаследовали продакшен-модель без метаданных: она достигает 94 процентов точности на назначенном тестовом наборе, но происхождение этого тестового набора, состав обучающих данных и демографические или средовые срезы, по которым проводилась оценка, не зафиксированы. Без этих опорных точек обновление или повторное развертывание модели рискует привести к неизмеренной регрессии при сдвиге распределения. Карточки моделей (model cards) задают стандартизированную спецификацию интерфейса для обученных моделей9 (Mitchell et al., 2019). По аналогии с паспортами компонентов в компьютерной инженерии карточки моделей документируют эксплуатационные границы, условия оценки и предполагаемые режимы работы вместе с артефактом модели.
Полная карточка модели охватывает семь основных разделов, которые вместе формализуют эксплуатационные рамки модели. Она начинается с технических сведений (архитектуры, процедур обучения и гиперпараметров), которые обеспечивают воспроизводимость и аудит. Она задает предполагаемое использование вместе с явно исключенными областями применения, предотвращая расползание области применения, когда модель, обученная для индексации фотографий потребителей, перепрофилируется для наблюдения с высокими ставками. Далее карточка описывает, какие факторы (демографические группы, условия среды или вариации сенсоров) влияют на качество, и это направляет и срезы оценки, и мониторинг в продакшене.
Оставшиеся разделы количественно описывают и ограничивают эмпирическое поведение. Метрики качества должны содержать раздельные результаты по эксплуатационным факторам, указанным в разделе «Проблема тестирования», потому что агрегированная точность скрывает систематические различия между подпопуляциями. Документирование обучающих и оценочных наборов данных выявляет возможные смещения выборки и определяет распределение, на котором выполняются приведенные метрики. Наконец, этические соображения, оговорки и рекомендации делают явными компромиссы развертывания, фиксируя известные режимы отказа, неучтенные пограничные случаи и эксплуатационные меры смягчения.
Применение этой схемы к MobileNetV2 показывает, как эти категории переходят в конкретные ограничения развертывания; «Иллюстративная карточка модели» суммирует получившуюся карточку для сервиса классификации на периферии.
| Раздел | Содержание |
|---|---|
| Сведения о модели | Архитектура MobileNetV2 с 3,5 млн параметров, обученная на ImageNet с использованием раздельных по глубине сверток. Квантована до INT8 для развертывания на периферии. |
| Предполагаемое использование | Классификация изображений в реальном времени на мобильных устройствах с требованием задержки менее 50 мс. Подходит для потребительских приложений, включая упорядочивание фотографий и функции доступности. |
| Факторы | Качество зависит от качества изображения (размытие, освещение), размера объекта в кадре и категорий, выходящих за распределение ImageNet. |
| Метрики | 71,8% top-1 точности на валидации ImageNet (полная точность: 72,0%). Точность зависит от категории: 85% для распространенных объектов и 45% для тонких различий. |
| Этические соображения | Обучающие данные отражают смещения ImageNet в географическом и демографическом представительстве. Не валидирована для приложений с высокими ставками (медицинская диагностика, охранный контроль). Качество может снижаться на изображениях из недостаточно представленных регионов. |
Иллюстративная карточка модели: MobileNetV2 для периферийного развертывания: абстрактные категории карточки модели переходят в практическую документацию, которая направляет решения об ответственном развертывании. Числовые значения — допущения сценария, а не опубликованные результаты бенчмарков.
Паспорта данных (datasheets for datasets) дополняют документацию для уровня данных (Gebru et al., 2021). В терминах D·A·M карточка модели задает границы алгоритма и машины, включая точность квантования и бюджеты задержки вывода, а паспорт данных фиксирует происхождение данных, методологию сбора, фильтры курации и демографический состав. Вместе эти стандарты документации задают эксплуатационный контракт системы: документация определяет, что система рассчитана выдерживать, а эмпирическое тестирование проверяет, работает ли она справедливо для популяций, которым служит.
Тестирование по популяциям
Раздельная оценка, которая выявила различия в проекте Gender Shades («Проблема тестирования»), теперь становится эксплуатационной задачей шлюза выпуска: выбрать срезы, метрики и пороги, которые определяют, разрешено ли развертывание. Агрегированные метрики качества скрывают различия между пользовательскими популяциями, это и есть ошибка средних (Savage, 2009). Ответственное тестирование требует раздельной оценки, которая проверяет качество для каждой значимой подгруппы.
Ошибка средних
Системная инженерия редко проектирует под «средний» случай; надежные системы создают с расчетом на хвостовые события и граничные условия. Мост, который «безопасен в среднем», но рушится под тяжелым грузовиком, — это инженерный провал. Аналогично ML-система, которая «точна в среднем», но ошибается для конкретной демографической когорты, представляет собой инженерный провал. Та же дисциплина, которая требует измерять хвостовую задержку (p99) для надежности системы, применима и к равноправному качеству: раздельная оценка должна измерять качество по демографическим когортам. Если смотреть только на агрегированную точность, операторы не увидят системных сбоев, которые возникают на периферии. Ответственная инженерия делает эти хвосты видимыми с помощью детальных измерений для конкретных популяций.
Ошибка средних задает базовый принцип тестирования: агрегированные метрики скрывают хвостовые сбои. Чтобы перевести этот принцип в инженерный процесс, нужно определить, какие срезы популяций и режимы отказа выделять. Поскольку классификатор изображений ломается иначе, чем рекомендательный движок или детектор ключевого слова в аудио, метрики справедливости и срезы оценки должны отражать предметную область приложения. В диагностике здоровья определения срезов задают демографические когорты, такие как возраст и биологический пол. В модерации контента доминируют диалект и языковой контекст. В андеррайтинге кредитов регуляторные нормы требуют аудита защищенных законом категорий.
Для таких оценок инфраструктура тестирования должна обеспечивать четыре базовых возможности. Во-первых, стратифицированная оценка вычисляет метрики отдельно для каждой когорты, чтобы выявлять различия в доле ошибок между популяциями. Во-вторых, пересекающийся анализ (intersectional analysis) оценивает сочетания атрибутов и выявляет накапливающиеся режимы отказа, которые невидимы в срезах по одному фактору. В-третьих, доверительные интервалы количественно описывают статистическую неопределенность, когда малые выборки подгрупп дают шумные точечные оценки. В-четвертых, временной мониторинг непрерывно отслеживает качество когорт в ходе развертывания и обнаруживает дрейф распределения, который ухудшает срезы меньшинств раньше, чем это скажется на агрегированных проверках работоспособности.
Выбор инструментов важен только после того, как инженерная команда задала метрики, срезы подгрупп и пороги оповещений. Открытые пакеты оценки, такие как Fairlearn (Bird et al., 2020), AI Fairness 360 (Bellamy et al., 2019) и What-If Tool от Google (Wexler et al., 2020), упрощают вычисление стратифицированных и пересекающихся метрик, но программные библиотеки не могут заменить предметное суждение. Они вычисляют ту метрику, которую запросил инженер; они не могут решить, какие демографические границы важны, откалибровать пороги вызова дежурного инженера или выбрать подходящее правовое ограничение справедливости.
Эксплуатационный шлюз выпуска должен отличать отсутствие доказательств от доказательств паритета. Если в срезе недостаточно размеченных валидационных данных, чтобы ограничить долю ошибок с статистической уверенностью, шлюз CI/CD должен сообщать о недостатке данных, а не выдавать ложное прохождение. Это запускает целевой сбор данных или ограничивает область развертывания. Таким образом, тестирование по популяциям задает трехзначный эксплуатационный контракт: прохождение, провал или недостаточность доказательств.
Риски справедливости по архетипам
Риски справедливости различаются между архетипами нагрузок из «Систем машинного обучения». «Риск справедливости по архетипам ML» сопоставляет каждый архетип с основным риском и метрикой.
Одна только архитектура не определяет справедливость; каждая строка указывает риск конкретного развертывания, который стоит проверить в первую очередь, а не универсальное свойство семейства моделей.
Архетип Основной риск справедливости Ключевая метрика оценки Пример из практики ResNet-50 («вычислительный зверь») Смещение обучающих данных (недостаточное представительство групп, важных для развертывания) Точность по демографическим группам Оцените развернутый классификатор на срезах, специфичных для приложения; значения Gender Shades не измеряют ResNet-50 GPT-2 («пожиратель полосы пропускания») Смещение корпуса (избыточное представительство мнений большинства в веб-тексте) Доля токсичных продолжений по демографическому контексту запроса; оценка стереотипов Языковые модели порождают более токсичные продолжения для запросов, упоминающих группы меньшинств DLRM («разреженный разброс») Усиление через петлю обратной связи (популярные объекты получают больше данных) Доля рекомендательных показов по категории объекта и группе поставщиков или авторов Информационные пузыри: система рекомендует похожий контент похожим пользователям и снижает открытие нишевых авторов DS-CNN («жесткое ограничение») Несоответствие контекста развертывания (обучение на чистом звуке, развертывание в шумной реальной среде) Доля ложноположительных срабатываний по акустической среде и акценту говорящего Голосовые ассистенты хуже понимают речь с акцентом; слово пробуждения срабатывает на звук телевизора на некоторых языках Риск справедливости по архетипам ML: риски справедливости зависят от источника данных архетипа и контекста развертывания.
Системный вывод: оценка справедливости должна соответствовать режиму отказа каждого архетипа. Модели компьютерного зрения требуют стратифицированной демографической точности; большие языковые модели (LLM) — проверок токсичности и стереотипов; рекомендательные системы — аудита экспозиции; TinyML — тестов по акустической среде. Маячная модель распознавания ключевых слов (KWS), введенная в «Системах машинного обучения» как маячная модель «жесткого ограничения», сталкивается именно с этой проблемой для своей DS-CNN, сверточной нейронной сети с раздельными по глубине свертками (CNN): обученная на чистом студийном звуке, она должна работать одинаково справедливо для разных акцентов, уровней фонового шума и демографических групп говорящих в реальных домах (задача управления, которая рассмотрена в «Управлении данными и соответствии требованиям»).
Разбор примера: анализ справедливости при одобрении кредита
Модель одобрения кредита показывает 85 процентов точности для группы большинства и 82,5 процента общей точности по оцениваемым заявителям. Эти цифры могут устроить грубую агрегированную панель. Раздельная оценка модели по демографическим когортам показывает, как агрегированные метрики скрывают серьезные различия. В «Матрице ошибок для группы A (большинство)» подробно описаны результаты для когорты большинства (группа A):
| Одобрено (прогноз) | Отклонено (прогноз) | |
|---|---|---|
| Погашено (факт) | 4 500 (TP) | 500 (FN) |
| Дефолт (факт) | 1 000 (FP) | 4 000 (TN) |
Матрица ошибок для группы A (большинство): в этом построенном сценарии результаты одобрения кредитов для 10 000 заявителей из демографической группы большинства. Доля истинно положительных результатов 90 процентов (4 500 одобрено из 5 000 квалифицированных) и доля ложноположительных 20 процентов задают базовую линию для сравнения справедливости.
«Матрица ошибок для группы A (большинство)» задает базовую линию для группы большинства, относительно которой оцениваются три стандартных критерия равного отношения, каждый из которых отражает свою эксплуатационную цель:10
Демографический паритет требует равных долей положительных решений между группами независимо от реальной квалификации (). Группа A получает одобрение в случаев, а группа B — в . Разница в 15 процентных пунктов показывает неравные результаты отбора между когортами.
Равные возможности требуют равных долей истинно положительных результатов среди квалифицированных заявителей (). Группа A достигает TPR , то есть 90 процентов платежеспособных заявителей получают кредиты. Группа B достигает лишь . Это расхождение в 30 процентных пунктов показывает, что квалифицированные заявители группы B отклоняются непропорционально часто по сравнению с равно квалифицированными заявителями группы A.
Равенство шансов ужесточает ограничение, требуя равенства и доли истинно положительных, и доли ложноположительных результатов ( для ).11 Группа A имеет долю ложноположительных , а группа B — . Хотя доли ложноположительных результатов совпадают, существенный дефицит истинно положительных нарушает равенство шансов. Поскольку неравные базовые частоты групп и несовершенное предсказание делают несколько критериев справедливости взаимно несовместимыми, эксплуатационную гарантию нужно выбирать и обосновывать явно, а не выводить из агрегированной точности.
Оценка той же модели на демографической когорте меньшинства в «Матрице ошибок для группы B (меньшинство)» показывает, как эти критерии расходятся при неравном распределении ошибок:
| Одобрено (прогноз) | Отклонено (прогноз) | |
|---|---|---|
| Погашено (факт) | 600 (TP) | 400 (FN) |
| Дефолт (факт) | 200 (FP) | 800 (TN) |
Матрица ошибок для группы B (меньшинство): в том же построенном сценарии результаты одобрения кредитов для 2 000 заявителей из демографической группы меньшинства. Доля истинно положительных результатов 60 процентов (600 одобрено из 1 000 квалифицированных) показывает разрыв в 30 процентных пунктов по сравнению с группой A. Сами матрицы ошибок не определяют причину.
Эти метрики расходятся, потому что они кодируют разные политические выборы о том, какие частоты ошибок важнее. В данном сценарии модель отклоняет квалифицированных заявителей из группы B гораздо чаще (доля ложноотрицательных результатов 40 процентов против 10 процентов), сохраняя при этом схожие доли ложноположительных. Эти матрицы ошибок устанавливают эксплуатационное неравенство, но не то, возникло ли оно из-за порогов классификации, смещения разметки, пропущенных признаков, перекоса выборки или исторической дискриминации.
Там, где сбор и использование защищенных атрибутов законны и обоснованы, производственные системы могут автоматизировать эти расчеты и запускать проверку, когда неравенство превышает заранее заданные пороги. «Код метрик справедливости» делает явным контракт обработки ошибок: неопределенные доли по группам сообщаются как недостаток данных, а не сравниваются с порогом.
Автоматизированный мониторинг справедливости: базовый шаблон вычисляет метрики по группам из матриц ошибок и выдает оповещение, когда неравенство превышает пороги, специфичные для приложения. Использование в продакшене требует достаточных данных и законной, обоснованной обработки атрибутов групп.
def compute_fairness_metrics(confusion_matrix):
tp, fp, tn, fn = (
confusion_matrix[k] for k in ["TP", "FP", "TN", "FN"]
)
total = tp + fp + tn + fn
return {
# Демографический паритет
"approval_rate": (tp + fp) / total if total else None,
# Равные возможности
"tpr": tp / (tp + fn) if (tp + fn) else None,
# Равенство шансов (вместе с TPR)
"fpr": fp / (fp + tn) if (fp + tn) else None,
}
# Сравниваем группы и отмечаем различия, которые превышают порог
for metric in ["approval_rate", "tpr", "fpr"]:
if metrics_a[metric] is None or metrics_b[metric] is None:
report_insufficient_data(metric)
continue
disparity = abs(metrics_a[metric] - metrics_b[metric])
# например, 0.05 для приложений с высокими ставками
if disparity > FAIRNESS_THRESHOLD:
trigger_alert(metric, disparity)
Автоматизированный мониторинг достигает того, чего не может ручной аудит в масштабе: непрерывного отслеживания метрик справедливости с немедленным оповещением, когда возникают различия. Разница TPR в 30 процентных пунктов значительно превышает порог выпуска в 5 процентных пунктов для этого сценария, что указывает на необходимость вмешательства в справедливость до развертывания. «Сводка метрик справедливости» суммирует вычисленные метрики и получившиеся различия для обеих когорт.
| Метрика | Группа A | Группа B | Разрыв |
|---|---|---|---|
| Доля одобрений | 55% | 40% | 15 п. п. |
| Доля истинно положительных (TPR) | 90% | 60% | 30 п. п. |
| Доля ложноположительных (FPR) | 20% | 20% | 0 п. п. |
Сводка метрик справедливости: в этом построенном кредитном сценарии доля одобрений и доля истинно положительных результатов различаются между группами, тогда как доли ложноположительных совпадают. Таблица устанавливает наличие неравенства, но не его причину.
Общие пороги классификации, примененные к различным распределениям оценок, показывают, как агрегированная точность скрывает серьезную расходимость подгрупп (Barocas and Selbst, 2016), как показано на схеме «Эффекты порогов для исходов подгрупп». Одна только агрегированная точность не может определить, являются ли эти исходы справедливыми для какой-либо из когорт.
Эффекты порогов для исходов подгрупп: два кандидатных порога классификации пересекают разные распределения оценок для подгрупп A и B. Кружки обозначают положительные исходы (погашение кредита), плюсы — отрицательные (дефолт); цвет различает подгруппы; каждая граница одобряет маркеры слева от себя. Каждая пунктирная линия показывает общую точность, которую дает эта граница, а не порог оценки. Переход к границе с более высокой точностью повышает общую точность с 75 до 81,25 процента, но весь прирост приходится на подгруппу A, которая становится полностью разделенной, тогда как в подгруппе B число ошибок классификации растет с одной до трех.
Снижение этих различий требует вмешательства по всему конвейеру D·A·M, и каждый этап накладывает свои системные компромиссы:
Постобработка через корректировку порога развязывает границу решения между группами: порог одобрения для группы B снижается, чтобы выровнять TPR. Эксплуатационный компромисс — рост ложноположительных результатов в этой когорте, то есть одобрение заявителей, которые впоследствии могут допустить дефолт.
Предобработка через перевзвешивание выборок масштабирует штраф функции потерь для примеров группы B во время обучения, усиливая градиентный сигнал для недостаточно представленных когорт без отбрасывания данных.12 Компромисс проявляется на всей поверхности функции потерь, где перевзвешивание может ухудшить точность на срезах группы большинства.
Внутриобработка через состязательное устранение смещения вводит вспомогательную классификационную головку, которая пытается восстановить защищенные атрибуты из внутренних представлений и штрафует кодировщик, когда демографический сигнал утекает.13 Полученные представления выполняют выбранные инварианты справедливости ценой нестабильности обучения, чувствительности к гиперпараметрам и дополнительных вычислений.
Выбор между этими вмешательствами требует согласования с заинтересованными сторонами относительно приемлемых компромиссов для конкретной предметной области развертывания. Системные инженеры делают эти компромиссы действенными, явно описывая их и выражая количественно.
Критерии справедливости
Справедливость — это не одна метрика; это ограниченный проектный выбор.
- Определения метрик: можете ли вы различить демографический паритет, равные возможности, равенство шансов и калибровку по тому, какие доли должны совпадать между группами?
- Компромисс невозможности: можете ли вы объяснить (на высоком уровне), почему различия базовых частот делают невозможным одновременное выполнение всех критериев справедливости?
- Системная интерпретация: по матрицам ошибок из «Матрицы ошибок для группы A (большинство)» и «Матрицы ошибок для группы B (меньшинство)» определите, какое различие важно эксплуатационно (TPR, FPR или доля одобрений) и какой вред оно представляет?
- Инженерное решение: для конкретной предметной области с высокими ставками (кредитование, найм, уголовное правосудие) обоснуйте, какое ограничение справедливости вы бы выбрали в приоритете и почему.
Количественная оценка компромисса «справедливость–точность»
Теорема о невозможности в работе (Kleinberg et al., 2017) доказывает, что взаимно исключающие критерии справедливости вынуждают к инженерным компромиссам; это формализует фронт Парето, введенный в «Иллюстративном фронте Парето «справедливость–точность»». Однако знания о существовании компромисса недостаточно: системные инженеры должны количественно оценить точную полезностную цену применения ограничения справедливости, чтобы принимать эксплуатационные решения. Автоматизированный конвейер найма делает этот экономический компромисс конкретным.
Цена справедливости
Задача: заинтересованные стороны требуют устранить разрыв в доле истинно положительных результатов (TPR) в 20 процентных пунктов в модели найма. Какова «цена справедливости» в терминах качества найма?
Физика: TPR можно выровнять, сдвинув порог классификации для группы, которой не повезло.
- Исходное состояние: группа A ( 90 процентов), группа B ( 70 процентов). Общая точность — 85 процентов.
- Вмешательство: снижать , пока 90 процентов.
- Цена: снижение порога увеличивает ложноположительные результаты (найм кандидатов, которые не проходят планку).
Расчет:
- При предполагаемом в сценарии отклике порога закрытие разрыва TPR в 20 процентных пунктов дает рост ложноположительных результатов для группы, которой не повезло, на 15 процентных пунктов.
- Если базовая частота положительных исходов составляет 20 процентов, ценность успешного найма равна $100 000, а цена неудачного найма — $50 000, то нужно учесть обе стороны вмешательства:
- .
- Добавочная ценность истинно положительных результатов составляет $4 000 на одного заявителя группы B, а добавочная цена ложноположительных — $6 000, что дает чистый убыток $2 000.
- Это 20 процентов базовой полезности группы B. При доле группы B в 30 процентов заявителей средний по популяции убыток составляет $600 на заявителя; для процентной оценки по всей популяции нужна также базовая полезность другой группы.
Системный вывод: «цена справедливости» в этом сценарии — это убыток полезности внутри группы в 20 процентов, а не выводимая агрегированная процентная величина. Убыток не возникает автоматически: если разрыв TPR отражает неверно откалиброванный порог, его закрытие может повысить чистую полезность. Убыток появляется, когда базовый порог близок к оптимуму полезности, а предельные решения о приеме смещаются в сторону неквалифицированных кандидатов. Инженерные команды обязаны предъявить заинтересованным сторонам и фронт Парето, и эксплуатационные допущения, которые его породили.
Расчет дает заинтересованным сторонам способ выбрать точку на фронте «справедливость–точность», но он по-прежнему не объясняет конкретное решение. Когда заявитель на кредит получает отказ, сообщение о том, что «истинно положительная доля модели для этой демографической группы составляет 60 процентов против 90 процентов в других группах», не дает ничего действенного. Заявителю нужно знать, почему заявка отклонена и что можно изменить. На эти вопросы отвечает объяснимость: способность указать, какие входные признаки определили конкретное предсказание.
Требования к объяснимости
Заявитель на кредит, которому алгоритмическая система отказала, может иметь право по применимому закону на объяснение причин или конкретных неблагоприятных факторов, а не только на агрегированную статистику. Объяснимость14 поддерживает эту возможность: она позволяет людям осуществлять надзор за автоматизированными решениями, помогает в отладке при возникновении проблем и может выполнять применимые требования к прозрачности решений.
Требуемый уровень объяснимости зависит от контекста приложения и регуляторной среды. «Объяснимость по предметным областям» сопоставляет типичные сценарии развертывания с их потребностями в объяснимости.
| Предметная область | Уровень объяснимости | Типичные требования |
|---|---|---|
| Кредитные решения | Конкретные причины для охватываемых действий | Основные причины, возможно, придется раскрыть заявителю |
| Медицинская диагностика | Поддержка решений | Поддерживать клинический анализ и применимую документацию |
| Модерация контента | Зависит от контекста | Поддерживать уведомления или апелляции там, где это требуется |
| Рекомендации | Зависит от контекста | Обеспечить прозрачность, соответствующую использованию и применимым правилам |
| Выявление мошенничества | Контролируемое раскрытие | Сбалансировать обязанности по уведомлению с риском манипуляции системой |
Объяснимость по предметным областям: требования различаются в зависимости от решения, субъекта, юрисдикции и применимых правил. Инженерная задача — сопоставить механизмы объяснения применимым требованиям, управляя такими рисками, как манипуляция системой.
Выбор стратегии объяснимости требует баланса между точностью объяснения, задержкой обслуживания и архитектурной гибкостью в трех различных парадигмах проектирования:
Апостериорные методы объяснения, включая SHapley Additive exPlanations (SHAP) и Local Interpretable Model-agnostic Explanations (LIME), генерируют оценки важности признаков для отдельных предсказаний без изменения внутренних частей модели.15 Поскольку они оценивают возмущения вокруг точки запроса, они отделяют объяснение от архитектуры модели, но вносят задержку на пути обслуживания и погрешности от сэмплирования.
Внутренне интерпретируемые модели обеспечивают прозрачность за счет структурных ограничений: используются неглубокие деревья решений, разреженные линейные модели или обобщенные аддитивные модели, где каждый параметр напрямую соответствует границе решения. Эта внутренняя ясность часто жертвует выразительной способностью на многомерных входах. Важно, что внутренние представления, такие как веса внимания, не являются достоверными апостериорными объяснениями причинной логики решения.
Концептуальные объяснения переводят внутренние активации в понятные человеку семантические концепты, а не в сырые координаты входа. Проецируя латентные векторы на векторы направлений концептов, они соединяют низкоуровневые признаки сенсоров с операционным аудитом высокого уровня, но для калибровки проекций требуют размеченных наборов концептов.
Больничный обходной путь
Сценарий: модели компьютерного зрения для выявления пневмонии, обученные в Mount Sinai, достигали высокой внутренней точности, но проваливались на внешних наборах данных из других больниц (Zech et al., 2018).
Диагностика: нейронная сеть выучила обходные признаки (артефакты конкретных сканеров больницы и текстовые метки), а не истинную биологическую патологию легких.
Системный урок: модели используют путь наименьшего сопротивления в пространствах признаков. Внешняя валидация необходима, чтобы обнаружить шорткат-обучение; карты значимости могут служить подтверждающими доказательствами, но не доказывают, что модель выучила нужный механизм.
Больничный обходной путь показывает, почему интерпретируемость — это системное требование, а не украшение презентации: команды должны видеть достаточно, чтобы исследовать шорткаты до развертывания. «Спектр интерпретируемости моделей» располагает эти компромиссы вдоль одной оси. Слева подходящим образом ограниченные деревья решений и линейные модели могут обеспечивать прямую аудируемость, хотя проектирование признаков и размер модели по-прежнему важны. Справа глубокие нейронные сети и сверточные архитектуры дают больше возможностей для сложных задач, но сопротивляются прямой проверке человеком, что мотивирует апостериорные сводки, такие как LIME или SHAP, которые сами требуют валидации.
Спектр интерпретируемости моделей: горизонтальный континуум относит деревья решений, линейную регрессию и логистическую регрессию к внутренне интерпретируемым моделям, тогда как случайные леса, нейронные сети и CNN/трансформеры требуют апостериорного объяснения. Такая группировка рассматривает выбор модели как компромисс аудируемости, а не как универсальный рейтинг качества моделей.
Выбор зависит от требований подотчетности приложения. Законы о неблагоприятных действиях требуют точных и конкретных причин для охватываемых кредитных решений, но не предписывают определенную архитектуру модели. Другие приложения могут сталкиваться с иными обязанностями по прозрачности, безопасности или возможности оспорить решение. Спектр не означает, что «простое всегда лучше»: высокоинтерпретируемая модель, которая делает неточные предсказания, тоже может причинять вред. Инженерная задача — выбрать модель и процесс объяснения, которые удовлетворяют предсказательным и подотчетным требованиям приложения.
Некоторые требования к объяснимости и прозрачности имеют силу закона. Закон ЕС об ИИ (EU AI Act), вступивший в силу 1 августа 2024 года и применяемый поэтапно, накладывает обязательства по документации, прозрачности, человеческому надзору и управлению рисками для охватываемых высокорисковых систем (European Parliament and Council of the European Union, 2024). Регламент B (Regulation B) требует указывать конкретные основные причины для охватываемых неблагоприятных действий, а его официальное толкование утверждает, что раскрываемые причины должны точно описывать факторы, которые действительно учитывались или оценивались (12 C.F.R. § 1002.9; официальное толкование). Применимый технический механизм зависит от системы, решения, юрисдикции и правовой обязанности.
Регуляторный ландшафт
Регулирование переводит ответственную инженерию из аргумента о лучших практиках в архитектурные ограничения. Представьте, что кредитная модель отказывает заявителю, заявитель спрашивает почему, оспаривает решение и позже запрашивает доступ к данным, которые о ней использовались. Система должна сделать больше, чем сообщить показатель точности. Она должна выдать объяснение, привязанное к конкретному решению, сохранить родословную модели и данных, которая привела к этому результату, направить спор на содержательный путь проверки человеком, сохранить журналы аудита и поддерживать процессы удаления или доступа там, где действуют права на данные. Ответственная инженерия теперь работает внутри явных регуляторных рамок, которые превращают прозрачность, надзор и подотчетность в технические требования.
Регулирование впервые входит в архитектуру через классификацию рисков. Закон ЕС об ИИ создает всеобъемлющую рамку: он классифицирует системы ИИ по уровню риска и предписывает соответствующие требования.16 Закон вступил в силу 1 августа 2024 года и применяется поэтапно: правила о запрещенных практиках начали действовать в 2025 году, а обязанности для высокорисковых систем и других операторов вводятся по категориям систем и по мере появления руководств по применению. Статья 99 устанавливает максимальные штрафы в размере 35 млн евро или 7 процентов мирового оборота за запрещенные практики ИИ, тогда как многие другие обязанности операторов ограничены суммой 15 млн евро или 3 процентами (European Parliament and Council of the European Union, 2024).
Для системных инженеров соответствие зависит от архитектурных возможностей, а не от графиков штрафов. Охватываемые высокорисковые системы17 должны внедрять управление рисками, управление данными, техническую документацию, прозрачность, человеческий надзор, а также требования к точности, устойчивости и безопасности. Поэтому охватываемой системе принятия кредитных решений нужна аудируемость с самого начала: версии моделей, происхождение обучающих данных, доказательства валидации, дизайн человеческого надзора, логирование и мониторинг после развертывания должны быть частью архитектуры, а не документами, собранными после запуска.
Оспоримость добавляет второе архитектурное требование. GDPR переносит тот же рабочий процесс заявителя в плоскость прав субъекта данных. Статья 22 предоставляет субъектам данных ЕС право не подпадать под решения, основанные исключительно на автоматизированной обработке, которые порождают юридические или сходным образом существенные последствия, с оговорками специальных исключений и гарантий.18 Статья 15(1)(h) отдельно предоставляет субъектам данных доступ к содержательной информации о логике автоматизированного принятия решений, о котором говорится в статье 22. Инженерным командам нужно определить, какие решения охватываются, и соответственно спроектировать необходимые возможности объяснения и проверки человеком. Если требуется содержательный путь проверки, он должен быть укомплектован операторами и поддержан сводками, данными о происхождении и инструментами аудита.
Законодательство отдельных секторов США приходит к похожим возможностям через требования к доказательствам, специфичные для предметной области. Эти регуляции менее единообразны, чем Закон ЕС об ИИ, но они могут накладывать сопоставимые инженерные обязанности. В примере с кредитом Закон о равных возможностях кредитования (Equal Credit Opportunity Act, ECOA) и его реализация в Регламенте B требуют указывать конкретные основные причины для охватываемых неблагоприятных действий, и эти причины должны точно описывать факторы, которые действительно учитывались или оценивались (12 C.F.R. § 1002.9; официальное толкование). Если на решение влияют сведения из кредитных отчетов или кредитные рейтинги, Закон о справедливой кредитной отчетности (Fair Credit Reporting Act, FCRA) добавляет обязанности по уведомлению; если та же скоринговая машинерия используется для жилищного кредитования, Закон о справедливом жилищном обеспечении (Fair Housing Act, FHA) добавляет ограничение на дискриминацию. Технические последствия практичны, а не абстрактны: охватываемым системам нужны доказательства и средства контроля, которые поддерживают применимые основания, уведомления, проверку и обязанности по недискриминации.
Этичное развертывание
Развертывание — это место, где защитные меры должны стать эксплуатационными.
Страховочная сеть
- Откат: проверьте, что предыдущую модель можно восстановить в пределах целевого времени реагирования на инцидент.
- Человек в контуре: проверьте, что существует эксплуатационный маршрут для проверки человеком предсказаний с низкой уверенностью.
План мониторинга
- Тихий сбой: задайте метрики подгрупп, которые выявят смещение после развертывания.
Регуляции в здравоохранении, включая Закон о переносимости и подотчетности медицинского страхования (HIPAA)19 и рекомендации Управления по контролю за продуктами и лекарствами США (FDA), накладывают ту же модель с другими артефактами: контроль защищенной медицинской информации, записи валидации, журналы аудита и реагирование на инциденты. Системы найма также требуют доказательств того, что автоматизированный отбор не воспроизводит дискриминационные практики найма. Во всех областях задача — перевести каждую обязанность в конкретную возможность: объяснение, проверку человеком, родословную, контроль доступа, удаление, мониторинг или реагирование на инциденты. Поэтому контрольная точка развертывания — не чек-лист регуляторов США, а общий продакшен-контракт, который следует из регуляторного ландшафта.
Инженерный ответ на эти регуляторные требования — проактивное архитектурное проектирование. Команды, которые с самого начала встраивают в системы документацию, мониторинг, объяснимость и человеческий надзор, эффективно демонстрируют соответствие. Командам, которым приходится достраивать эти возможности, грозит дорогостоящая переработка конвейеров или блокировка развертывания. Однако регуляторная готовность покрывает только запланированный путь: даже хорошо спроектированные системы могут выходить из строя в продакшене, поэтому подготовка к реагированию на инциденты необходима.
Мониторинг и реагирование на инциденты
Zillow сообщила о списании запасов сегмента Homes за третий квартал 2021 года на $304 млн20 после покупки домов по ценам выше пересмотренных оценок будущих цен продажи (Zillow Group, 2021). Системная диагностика трактует этот сбой как сочетание неопределенности прогноза, сдвига распределения, ограничений операционной мощности и недостаточных автоматических выключателей (circuit breakers). Эксплуатационная безопасность требует установить реагирование на инциденты и мониторинг до того, как модель получит продакшен-трафик, а не диагностировать сбои после накопления финансового или социального вреда. «Структура реагирования на инциденты» адаптирует классификацию серьезности инцидентов из «Реагирования на инциденты в ML-системах» к ответственному развертыванию, где обнаружение должно выявлять нарушения справедливости и деградацию демографических срезов наряду с отказами сервисов. Пять компонентов следуют стандартному жизненному циклу реагирования на инциденты, но эксплуатационная защита заключена в столбце проверки перед развертыванием. Столбец требований задает, что должен делать каждый компонент; столбец проверки определяет, что нужно продемонстрировать до запуска: порог оповещения, проверенный на исторических повторах, автоматический путь отката, отработанный под нагрузкой, и дежурное расписание с документированными путями эскалации. Требование без проверенного средства контроля — это намерение, а не защита, поэтому этот шлюз проверки — обязательное условие развертывания.
| Компонент | Требования | Проверка перед развертыванием |
|---|---|---|
| Обнаружение | Системы мониторинга, которые выявляют аномалии, деградацию качества и нарушения справедливости | Пороги оповещений проверены, дежурное расписание установлено, пути эскалации задокументированы |
| Оценка | Процедуры оценки масштаба и серьезности инцидента | Классификация серьезности определена, подготовлены шаблоны оценки воздействия |
| Смягчение | Технические возможности для снижения вреда, пока идет расследование | Процедуры отката проверены, резервные системы работают, аварийные выключатели функционируют |
| Коммуникация | Протоколы уведомления заинтересованных сторон | Контактные списки актуальны, подготовлены шаблоны сообщений, определены цепочки согласования |
| Устранение | Процессы постоянных исправлений и улучшений системы | Процедуры анализа первопричин, интеграция с управлением изменениями |
Структура реагирования на инциденты: систематическая подготовка к сбоям ML-систем требует пяти различных компонентов. Обнаружение выявляет аномалии с помощью специализированного мониторинга; оценка определяет масштаб по классификациям серьезности; смягчение снижает вред по проверенным процедурам отката; коммуникация информирует заинтересованных сторон по заранее согласованным каналам; устранение внедряет постоянные исправления через анализ первопричин. Каждый компонент требует и эксплуатационных требований, и проверки перед развертыванием.
В традиционной программной эксплуатации мониторинг сосредоточен на бинарных сбоях сервиса: падении процессов, ошибках нехватки памяти, сетевых таймаутах и HTTP-ответах 5xx. ML-системы же накапливают технический долг, который проявляется как тихая деградация (Sculley et al., 2015). Сервис вывода может поддерживать субмиллисекундную p99-задержку без исключений процесса, обслуживая предсказания, вычисленные по испорченным схемам входов или некалиброванным весам. Более того, петли обратной связи могут усиливать ранние ошибочные предсказания, превращая небольшие начальные сдвиги в каскадные ошибки по всей популяции пользователей. Планирование реагирования на инциденты должно учитывать эти тихие, специфичные для ML режимы отказа, разворачивая непрерывную телеметрию, которая обнаруживает статистический дрейф и нарушения справедливости до ухудшения качества предсказаний. Инфраструктура мониторинга из «MLOps» служит основой для этой эксплуатационной дисциплины, расширяя традиционные системные метрики, чтобы проверять распределения данных, поведение модели и последующие результаты.
Ответственный продакшен-мониторинг объединяет пять эксплуатационных сигналов в непрерывную поверхность телеметрии:
Отслеживание стабильности качества обнаруживает постепенный предиктивный дрейф, который ускользает от обычных проверок работоспособности инфраструктуры. Сигналы сервисного уровня срабатывают на всплески задержки или падения процессов, тогда как качество предсказаний может постепенно ухудшаться в течение недель по мере того, как реальные распределения меняются, портя решения без исключений во время выполнения.
Мониторинг паритета подгрупп оценивает распределения ошибок по демографическим и операционным срезам во времени. Агрегированные метрики точности скрывают локальные регрессии; отслеживание доли ложноотрицательных и ложноположительных результатов по разделенным когортам выявляет возникающие различия до того, как искаженные предсказания накопятся в системный вред.
Мониторинг распределения входов оценивает статистическую дивергенцию по потокам сырых признаков до выполнения вывода модели. Поскольку истинные метки часто приходят с существенной задержкой, расчет метрик дивергенции относительно обучающих базовых линий ловит вышестоящий ковариатный сдвиг, порчу схемы и отказы сенсоров до того, как испорченные входы дадут неверные предсказания.
Мониторинг результатов сверяет последствия решений с записанными предсказаниями по мере появления истинных меток. Сравнение наблюдаемых событий (например, погашения кредита или успеха клинического вмешательства) с предсказанными вероятностями подтверждает, что калибровка оценок остается стабильной, и выявляет петли обратной связи, в которых автоматические решения искажают последующие состояния среды.
Каналы обратной связи от пользователей фиксируют качественные жалобы, оспаривания и апелляции. Поскольку статистическое усреднение по миллионам запросов неизбежно сглаживает редкие аномалии, телеметрия споров, инициированных пользователями, выявляет хвостовые режимы отказа и неизмеренный вред, которые ускользают от автоматических пороговых метрик.
Вместе эти измерения связывают метрики уровня модели, сдвиги на уровне данных, реальные результаты и человеческие сообщения в одну поверхность мониторинга.
Телеметрия защищает только тогда, когда она сопровождается дисциплинированной эксплуатационной реакцией. Автоматические панели требуют определенных графиков просмотра, четкого владения дежурством и явных процедур эскалации, чтобы возникающие аномалии вызывали инженерное корректирующее действие, а не пассивное наблюдение.
Справедливая производительность по демографическим когортам — лишь одно измерение ответственной инженерии. Эксплуатационные расходы и физическое потребление энергии составляют не менее важное ограничение. Каждый цикл обучения, запрос вывода и конвейер мониторинга потребляет электроэнергию, которая превращается в выбросы углерода и операционные расходы. ML-конвейер может демонстрировать демографический паритет, потребляя при этом на порядки больше вычислений, чем требует задача, — создавая неконтролируемый экологический след и раздувая операционные издержки. Ответственная инженерия должна управлять и тем, кому служит система, и физическими ресурсами, которые на это служение расходуются.
Экологическая и стоимостная осведомленность
В 2019 году исследователи оценили, что обучение и поиск архитектуры большой модели обработки естественного языка (NLP) в масштабе разработки могут выбросить столько углерода, сколько выбрасывают пять автомобилей за весь срок своей службы (Strubell et al., 2019). Последующий анализ показал, что самая цитируемая оценка поиска архитектуры очень чувствительна к допущениям о прокси-задаче, оборудовании, эффективности дата-центра и углеродоемкости электросети (Patterson et al., 2021). Эта поправка скорее усилила, чем ослабила аргумент ответственной инженерии: обучение потребляет мегаватт-часы электричества, вывод в масштабе умножает неэффективность каждого запроса до измеримого воздействия на среду, а ресурсоемкие модели исключают организации, у которых нет крупных вычислительных бюджетов. Методы оптимизации, разработанные в «Сжатии моделей», «Аппаратном ускорении» и «Бенчмаркинге», поэтому выполняют двойную функцию как инструменты ответственной инженерии: они связывают вычислительную эффективность с экологической устойчивостью, экономической доступностью и долгосрочной масштабируемостью.
Эффективность как ответственность
Обучение одной большой языковой модели потребляет тысячи часов работы GPU и энергию, измеряемую в мегаватт-часах. Однако значительная часть этих затрат не присуща самой учебной задаче, а представляет собой случайную сложность: обучение с нуля там, где хватило бы дообучения, развертывание архитектур крупнее, чем требуют задачи, и поиск гиперпараметров, который перебирает избыточные конфигурации. Вычислительная стоимость зависит от инженерных решений так же, как и от физики модели. «Зеленый ИИ» (Green AI) рассматривает эту эффективность как главную метрику, а не как второстепенное соображение.21
На уровне оборудования экологическое воздействие масштабируется вместе с общим потреблением электроэнергии за весь жизненный цикл машины, которое зависит от загрузки ускорителей, накладных расходов охлаждения дата-центра (коэффициент эффективности использования энергии, PUE) и углеродоемкости местной электросети. Внутри корпуса ускорителя энергетические потери определяются перемещением данных по иерархии памяти, а не арифметическими операциями: перенос операндов из внешней высокоскоростной памяти (HBM) или DRAM требует на порядки больше энергии, чем выполнение операции умножения-сложения в локальной SRAM или регистровых файлах. Алгоритмические и исполнительные оптимизации снижают экологическую нагрузку только тогда, когда они уменьшают измеренные ватт-часы для проверенного целевого качества при продакшен-нагрузке, то есть уменьшают эти физические потери на уровне кремния.
Физические требования к ресурсам определяют и доступность развертывания. Избыточно параметризованные модели, для размещения которых нужны узлы с несколькими ускорителями, соединенными высокоскоростными межсоединениями (например, NVLink), ограничивают эксплуатационный контроль централизованными облачными площадками. Сжатие моделей так, чтобы их рабочие наборы помещались в обычную DRAM или в унифицированную память периферийных процессоров, расширяет область развертывания. Локальное исполнение устраняет зависимость от постоянного высокоскоростного сетевого соединения и повторяющихся расходов на облачный API и позволяет выполнять вывод с низкой задержкой и с сохранением приватности прямо на клиентских устройствах, где возникают данные.
В продакшене, где системы обслуживания обрабатывают миллионы запросов в день, неэффективность отдельного запроса быстро накапливается по парку ускорителей. По железному закону ML-систем () задержка выполнения одного запроса определяет пропускную способность, которую отдельный ускоритель может поддерживать, не нарушая целей задержки сервиса. Сокращение времени выполнения позволяет меньшему по мощности кластеру обслуживать тот же суммарный трафик. Важно, что эти эксплуатационные выгоды переходят в снижение энергопотребления и инфраструктурных затрат только тогда, когда планирование мощностей уменьшает активный парк. Если емкость кластера остается прежней, улучшение задержки лишь увеличивает время простоя ускорителей: оборудование продолжает потреблять базовую статическую мощность утечки, не выполняя полезной работы.
Оптимизации достигают этих целей, воздействуя на конкретные члены уравнений выполнения и энергии на уровнях D, A и M. Квантование снижает численную точность с 16-битных представлений с плавающей точкой до INT8 или FP4, уменьшая трафик памяти по шине, повышая арифметическую интенсивность и направляя вычисления на тензорные ядра с меньшей энергией переключения. Прореживание удаляет неактивные веса и структурированные каналы, уменьшая общее число операций и объем памяти. Дистилляция знаний переносит выученные представления избыточно параметризованного учителя в компактную архитектуру ученика, одновременно сокращая число операций и объем памяти. На уровне машины аппаратное ускорение и слияние ядер устраняют обращения к внешней памяти, оставляя промежуточные тензоры активаций в SRAM на кристалле, чтобы максимизировать аппаратную эффективность .
Ответственная инженерия рассматривает эти оптимизации как архитектурные ограничения проектирования, которые задаются до обучения и развертывания, а не как постфактум-исправления слишком большой модели. Системные требования задают явные верхние границы задержки, объема памяти и энергопотребления наряду с целевым качеством предсказаний. Инженерная задача — найти самую компактную архитектуру и стратегию исполнения, которые удовлетворяют этим ограничениям.
Инженерия эффективности на практике
Перевод требований эффективности в практику начинается с установления ограниченных машинных рамок (проектная тепловая мощность, емкость батареи и пиковая задержка) до выбора или обучения архитектуры. Вместо того чтобы развертывать избыточно большую сеть и полагаться на постфактум-сжатие, ответственная системная инженерия рассматривает аппаратные пределы как первичные архитектурные ограничения проектирования. Выбор модели отдает приоритет самой компактной архитектуре, которая удовлетворяет требованиям качества предсказаний, затем применяются целевые оптимизации, такие как квантование или слияние операторов, чтобы минимизировать трафик памяти и энергопотребление.
Сценарии периферийного развертывания делают эти физические пределы непосредственными: пассивный теплоотвод и емкость батареи задают границы, которые нельзя обойти переговорами. Рассмотрим иллюстративное носимое устройство с бюджетом мощности 500 мВт, которое должно непрерывно выполнять вывод 24 часа от компактной батареи. «Иллюстративные ограничения периферийного развертывания» сравнивает допущенные ограничения в четырех контекстах развертывания: от смартфонов с бюджетом 5 Вт до датчиков IoT, работающих на 100 мВт.
| Контекст развертывания | Бюджет мощности | Требование задержки | Типичные сценарии |
|---|---|---|---|
| Смартфон | 5 Вт | 100 мс | Улучшение фотографий, голосовые ассистенты |
| Датчик IoT | 100 мВт | 1 секунда | Обнаружение аномалий, мониторинг среды |
| Встроенная камера | 1 Вт | 30 FPS (33 мс) | Обнаружение объектов в реальном времени, наблюдение |
| Носимое устройство | 500 мВт | 500 мс | Мониторинг здоровья, распознавание активности |
Иллюстративные ограничения периферийного развертывания: значения мощности и задержки — допущения сценария для сравнения контекстов развертывания; реальные бюджеты зависят от аппаратуры, нагрузки и требований продукта.
Оценка кандидатных архитектур относительно этих эксплуатационных рамок показывает, помещается ли алгоритм в целевую машину, не превышая ее тепловыделения или пределов задержки. В «Сравнении эффективности моделей» профилируются четыре модели компьютерного зрения по числу параметров, активной мощности вывода и задержке относительно бюджетов смартфона и IoT, заданных в «Иллюстративных ограничениях периферийного развертывания».
| Модель | Параметры | Мощность вывода | Задержка | Помещается в смартфон? | Помещается в IoT? |
|---|---|---|---|---|---|
| MobileNetV2 | 3,5 млн | 1,2 Вт | 40 мс | Да | Нет |
| EfficientNet-B0 | 5,3 млн | 1,8 Вт | 65 мс | Да | Нет |
| ResNet-50 | 25,6 млн | 4,5 Вт | 180 мс | Нет | Нет |
| Модель TinyML | 200 тыс. | 50 мВт | 200 мс | Нет | Да |
Сравнение эффективности моделей: иллюстративные профили моделей при заявленных допущениях о развертывании. Выбор модели должен учитывать точность, задержку, мощность, память, поддержку среды исполнения и влияние на весь жизненный цикл; одно лишь число параметров не определяет ни стоимость, ни экологическое воздействие.
Для бюджета носимого устройства из «Иллюстративных ограничений периферийного развертывания» модель TinyML оставляет запас по мощности в 10 раз, тогда как MobileNetV2 превышает тот же бюджет мощности в 2,4 раза еще до учета устойчивого нагрева. Укладываться в рамки устройства необходимо, но энергия на один вывод при развертывании в масштабе накапливается в совокупные выбросы и эксплуатационные расходы. Методы, которые снижают измеренную энергию на вывод, уменьшают экологическое воздействие только тогда, когда они не переносят вычислительные затраты выше по потоку, в обучение или в неизмеренную предобработку. Финансовая экономия в облаке и кластере напрямую зависит от планирования ресурсов и загрузки оборудования.
Совокупная стоимость владения
Команда тратит $3 200 на обучение модели рекомендаций и радуется скромной стоимости. Через полгода выясняется, что на ее обслуживание уходит $500 000 в год. Этот сюрприз показывает, как совокупная стоимость владения (TCO)22 может определяться регулярным выводом при высоком трафике. В других системах доминировать могут обучение, данные, персонал или простаивающие мощности, поэтому именно измерение определяет, где нужно сосредоточить оптимизацию.
В продакшен-масштабе регулярный вывод может доминировать в стоимости за весь срок службы.
Рассмотрим конкретный пример системы рекомендаций, которая обслуживает 10 млн пользователей ежедневно. Затраты на обучение выглядят значительными: подготовка данных занимает 100 часов GPU по цене около $4 в час ($400), подбор гиперпараметров по нескольким конфигурациям требует 500 часов GPU ($2 000), а финальный запуск обучения — 200 часов GPU ($800). Общая стоимость обучения достигает примерно $3 200.
В этом сценарии доминирует вывод. При 10 млн пользователей, каждый из которых получает 20 рекомендаций в день, система выполняет 200 млн выводов ежедневно. Если считать 10 миллисекунд на вывод как выделенную потребность в GPU без батчинга и перекрытия, получается примерно 23,1 GPU, работающих непрерывно. При $2,50 за час GPU годовая стоимость GPU в этом сценарии достигает $506 944.
За трехлетний период эксплуатации ежеквартальное переобучение дает общую стоимость обучения около $38 400, тогда как стоимость вывода за тот же период составляет $1,5 млн. Соотношение 40:1 специфично для этих допущений, но оно показывает, где усилия по оптимизации дадут наибольшую отдачу: в задержке вывода и эффективности обслуживания.
Оптимизация на уровне запроса становится важной, когда система обслуживает миллиарды запросов. Сокращение потребности в ускорителе на запрос на пятую часть может уменьшить требуемое оборудование, если остальные допущения о нагрузке остаются неизменными. Выбор оборудования между CPU, GPU и тензорными процессорами (TPU) меняет стоимость и углеродный след в зависимости от нагрузки и условий развертывания. Сжатие модели квантованием и прореживанием может снизить стоимость вывода большого объема, если оно уменьшает измеренную потребность в обслуживании без неприемлемой потери качества.
Совокупная стоимость владения (TCO) включает и измерения, выходящие за рамки вычислений. Эксплуатационные расходы охватывают мониторинг, обслуживание, переобучение и реагирование на инциденты; все они растут вместе со сложностью системы и скоростью сдвига распределения в предметной области. Альтернативные издержки отражают то, что ресурсы, которые потребляют ML-системы, нельзя использовать для других целей. Расточительное потребление ресурсов в одном проекте ограничивает то, что могут попробовать другие проекты.
Инженерам стоит оценивать окупаемость инвестиций (ROI): оправдывает ли ценность, которую приносит ML-система, потребление ее ресурсов. Система рекомендаций, которая увеличивает вовлеченность на 1 процент, может не оправдывать миллионов долларов вычислительных затрат, тогда как система медицинской диагностики, которая спасает жизни, оправдывает. Явные компромиссы позволяют ответственно распределять ресурсы.23
Методология расчета TCO
Количественная оценка операционного углеродного воздействия требует измеренного или оцененного потребления энергии, накладных расходов площадки и применимой углеродоемкости сети. Инженеры могут оценить совокупную стоимость владения за три года структурированным подходом, который разделяет затраты на обучение, вывод и эксплуатацию по отдельным учетным книгам. Обучение обычно представляет собой периодические капитальные расходы, вывод повторяется непрерывно с каждым запросом пользователя, а эксплуатация накапливается через телеметрию, циклы переобучения и реагирование на инциденты. Методология учетных книг формализует этот учет для обучающей, обслуживающей и эксплуатационной инфраструктуры.
Углеродная стоимость вычислений
Задача: учетные книги TCO должны перевести «часы вычислений» в «кг CO₂экв.». Какой углеродный коэффициент приходится на один час работы GPU при базовом сценарии?
Переменные:
- Мощность: 400 Вт на GPU (базовое значение сценария).
- Интенсивность: 0,4 кг/кВт·ч CO₂экв. (округленное базовое значение сети).
Расчет: «углеродный след» задает стандартное преобразование:
Применяя базовые допущения:
Системный вывод: этот коэффициент пересчета позволяет учетным книгам отслеживать «углеродную стоимость» наряду с «денежной стоимостью», делая выбросы инженерной метрикой первого класса во всех последующих таблицах TCO.
Затраты на обучение
Затраты на обучение включают и первичную разработку, и текущее переобучение. «Расчет стоимости обучения» разбивает эти затраты и показывает, как ежеквартальные циклы переобучения накапливаются за трехлетний период эксплуатации.
| Статья затрат | Расчет | Финансовая стоимость | Углерод (кг CO₂) |
|---|---|---|---|
| Первичная подготовка данных | часы ставка | 100 ч GPU × $4 = $400 | 16 кг |
| Подбор гиперпараметров | эксперименты стоимость эксперимента | 50 × $40 = $2 000 | 80 кг |
| Финальное обучение | часы ставка | 200 ч GPU × $4 = $800 | 32 кг |
| Итог за цикл обучения | $3 200 | 128 кг | |
| Частота переобучения | циклов в год годы | 4 в год × 3 года = 12 | тот же множитель (12 циклов) |
| Общая стоимость обучения | итог циклы | $38 400 | 1 536 кг |
Расчет стоимости обучения: затраты на обучение складываются из первичной разработки ($3 200 за цикл) и ежеквартального переобучения в течение трехлетнего периода эксплуатации. Подготовка данных, подбор гиперпараметров и финальное обучение потребляют часы GPU по ставке $4 в час и в сумме дают $38 400 за 12 циклов обучения. Несмотря на заметный вид, обучение составляет лишь 1,9 процента от общей совокупной стоимости владения.
Затраты на вывод
«Иллюстративный расчет стоимости вывода» проходит цепочку преобразований, которая превращает трафик в стоимость: ежедневные запросы становятся GPU-секундами, GPU-секунды — GPU-часами, а GPU-часы переводятся и в доллары, и в углерод. Углерод учитывается только тогда, когда нагрузка выражена в GPU-часах, поэтому строки с запросами и GPU-секундами намеренно оставляют графу углерода пустой, а не пропускают данные. Следование цепочке до нижней строки дает слагаемое вывода для сравнения полной стоимости в «Сводке совокупной стоимости владения»; доминирование проявляется только тогда, когда это слагаемое сравнивают с обучением и эксплуатацией.
| Статья затрат | Расчет | Финансовая стоимость | Углерод (кг CO₂) |
|---|---|---|---|
| Ежедневные запросы | пользователи запросы на пользователя | 10 млн × 20 = 200 млн | - |
| GPU-секунды в день | запросы потребность в сервисе | 200 млн × 0,01 с = 2 млн с | - |
| GPU-часы в день | секунды ÷ SEC_PER_HOUR | 556 GPU-часов | 88,9 кг |
| Годовая стоимость GPU | часы 365 ставка | 556 × 365 × $2,50 = $507 тыс. | 32 444,4 кг |
| Стоимость вывода за 3 года | годовая 3 | $1,52 млн | 97 333,3 кг |
Иллюстративный расчет стоимости вывода: в этой модели обслуживания без батчинга и перекрытия 200 млн ежедневных запросов при 10 мс выделенного времени ускорителя требуют 556 GPU-часов в день, что в сумме дает $507 тыс. в год и $1,52 млн за три года. Реальные загрузка, батчинг и параллелизм меняют это преобразование.
Эксплуатационные затраты
Эксплуатационные затраты охватывают инфраструктуру, персонал и реагирование на инциденты. ML-системы создают эксплуатационную нагрузку, которой нет у традиционного программного обеспечения: «реагирование на инциденты» часто означает отладку тихих сбоев (дрейф данных, порчу признаков или сдвиги распределения), а не бинарных отключений сервиса, а «инфраструктура мониторинга» должна непрерывно отслеживать статистические аномалии предсказаний по демографическим срезам, а не только доступность сервиса. «Расчет эксплуатационных затрат» перечисляет эти постоянные расходы, которые часто удивляют команды, сосредоточенные в первую очередь на вычислительных затратах.
| Статья затрат | Оценка за год | Итог за 3 года |
|---|---|---|
| Инфраструктура мониторинга | $50 тыс. | $150 тыс. |
| Дежурная инженерия (0,5 ставки) | $100 тыс. | $300 тыс. |
| Реагирование на инциденты (оценка) | $20 тыс. | $60 тыс. |
| Итого эксплуатация | $510 тыс. |
Расчет эксплуатационных затрат: иллюстративные эксплуатационные затраты включают инфраструктуру мониторинга ($50 тыс. в год), дежурную инженерию на уровне 0,5 ставки ($100 тыс. в год) и резерв на реагирование на инциденты ($20 тыс. в год). Итог $510 тыс. за три года составляет 24,6 процента от совокупной стоимости владения в этом сценарии. Реальные затраты на персонал и инциденты зависят от масштаба системы, рисков, организационной структуры и модели поддержки.
Наглядная структура затрат в «Сводке совокупной стоимости владения» показывает, куда уходят деньги: вывод — 73,5 процента, эксплуатация — 24,6 процента, а обучение — лишь 1,9 процента.
| Категория | Стоимость за 3 года | Доля | Смоделированный углерод ускорителей |
|---|---|---|---|
| Обучение | $38 тыс. | 1,9% | 1,5 т |
| Вывод | $1,52 млн | 73,5% | 97,3 т |
| Эксплуатация | $510 тыс. | 24,6% | Не оценивалось |
| Итог TCO | $2,07 млн | 100% | ~98,9 т смоделированный подитог |
Сводка совокупной стоимости владения: в этом иллюстративном сценарии спроса на обслуживание соотношение стоимости вывода к стоимости обучения составляет 40:1. Снижение спроса ускорителя на запрос на 20 процентов сэкономило бы около $304 тыс. и 19 т смоделированного CO₂ ускорителей при тех же допущениях. Углеродный подитог не включает эксплуатацию, накладные расходы площадки и воплощенное воздействие.
Эти пропорции превращают эффективность из предпочтения в настройке в проверку ответственности.
Эффективность как ответственность
Совокупная стоимость владения показывает, где ответственная оптимизация дает наибольший эффект.
- Доминирование вывода: при допущениях этого сценария объясните, почему снижение спроса ускорителя на услугу на 20 процентов дает больше экономии, чем сокращение времени обучения на 50 процентов.
- Учет углерода: можете ли вы пересчитать часы GPU в кг CO₂экв. по мощности и углеродоемкости и объяснить, как конструкция нагрузки, оборудование, планирование и регион влияют на результат?
- Проверка достаточности: для конкретной ML-системы можете ли вы обосновать, что размер модели соответствует задаче, или указать, где более простая модель дала бы сопоставимую точность за долю стоимости?
Экологическое воздействие
Анализ TCO в предыдущем разделе учитывает расходы, которые появляются в счетах, но вычислительные ресурсы несут издержки, которых не видно ни в одном счете. Операционные выбросы зависят от измеренной энергии, коэффициента эффективности использования энергии площадки (PUE) и углеродоемкости региональной сети (); воплощенное воздействие производства требует отдельного учета. Оценка первого порядка для операционных выбросов: . Операционный углерод измеряет выбросы от электричества, потребленного при активном выполнении модели, тогда как воплощенный углерод охватывает парниковые газы, выделенные в цепочке поставок оборудования: изготовление кремниевых пластин, упаковку, транспортировку и строительство площадки до того, как чип выполнит первый цикл. По мере того как сети дата-центров все больше переходят на возобновляемую энергию, воплощенный углерод часто составляет больше половины пожизненного углеродного следа ускорителя. Поэтому преждевременная замена старых серверов ради небольшого прироста операционной эффективности может парадоксальным образом увеличить чистые выбросы за весь срок службы. Энергия на запрос измеряется в джоулях на вывод, тогда как джоули на FLOP характеризуют эффективность работы оборудования. Оптимизация, которая снижает TCO, может не снизить энергию или выбросы, если она меняет загрузку, оборудование или размещение нагрузки. Электропотребление дата-центров делает дизайн нагрузки, оборудование, облачный регион и время запуска частью ответственной инженерии (Henderson et al., 2020). Масштаб становится яснее в расчете для обучения большой базовой модели.
Этот сценарий обучения превышает 100 автомобиле-лет выбросов.
Оптимизация эффективности и экологическая ответственность совпадают, когда измеренная энергия и выбросы за весь жизненный цикл снижаются для требуемой нагрузки и целевого качества. Более детальные методологии учета углерода опираются на эту основу: оценка жизненного цикла отслеживает воздействие на протяжении всего срока жизни системы, выбросы областей охвата 1, 2 и 3 (scope 1/2/3) разделяют прямые выбросы, закупленное электричество и выбросы цепочки поставок или фазы использования, а планирование с учетом углерода переносит работу на времена или регионы с меньшей углеродоемкостью.
Те же физические величины, которые определяют производительность, влияют и на ответственность. Перемещение данных и вычисления вносят вклад в энергопотребление на уровне чипа, тогда как выбросы дата-центров дополнительно зависят от загрузки, накладных расходов площадки, интенсивности сети и воплощенного воздействия. Анализ Парето применим и к целям «справедливость–точность», и к целям «точность–задержка», но перевзвешивание цели может улучшить сразу несколько метрик, если текущее решение не оптимально по Парето. Ответственная инженерия расширяет задачу ограниченной оптимизации, которой учит эта книга, на цели, включающие общественное воздействие наряду с пропускной способностью и задержкой.
Углеродная стоимость масштаба
Задача: базовая модель масштаба GPT-3 потребляет при обучении 1 287 МВт·ч электроэнергии (Patterson et al., 2021). Каково операционное воздействие на углерод при заявленном допущении об углеродоемкости сети?
Расчет:
- Потребление энергии: 1 287 МВт·ч = 1 287 000 кВт·ч.
- Углеродоемкость: в этом сценарии используется 429 г/кВт·ч CO₂ (0,429 кг/кВт·ч) (Patterson et al., 2021).
- Суммарные выбросы: 1 287 000 кВт·ч 0,429 кг/кВт·ч = 552 123 кг CO₂ (552 т).
- Сравнение: сценарий допускает 4,6 т CO₂ на один год работы легкового автомобиля.
Системный вывод: в этом сценарии обучения операционные выбросы равны допущенным годовым выбросам 120 легковых автомобилей. Снижение общей энергии обучения на 1 процент при той же структуре сети исключило бы из расчета эквивалент примерно 1,2 автомобиля, снятых с дороги на год.
Проверки, метрики справедливости, механизмы объяснимости и анализы эффективности, разобранные в предыдущих разделах, говорят инженерным командам что измерять и как действовать. Естественный следующий вопрос — какая инфраструктура фиксирует эти ответы, поддерживает аудит и направляет нарушения к соответствующему вмешательству, а не полагается на человеческую память. Ответ лежит в управлении данными: инженерной дисциплине, которая превращает политические намерения в применимые технические средства контроля.
Управление данными и соответствие требованиям
Модели рекомендаций и таргетинга непрерывно принимают пользовательскую телеметрию в масштабе кластера, поэтому сбой управления в конвейере данных становится немедленным сбоем инфраструктуры приема и валидации ML-системы. Управление — это уровень принуждения, который делает подотчетность эксплуатационной: метрики справедливости, карточки моделей и оценки воздействия имеют практическую силу только тогда, когда система может доказать, какие данные она приняла, какие субъекты к ним обращались, какое правовое основание разрешило обработку и были ли выполнены применимые запросы на удаление или оспаривание.
Решения регулятора по Meta в Ирландии делают ограничение управления конкретным: система должна установить правовое основание для обработки, а также защищать сами данные. В январе 2023 года Ирландская комиссия по защите данных наложила на Meta Ireland отдельные штрафы в 210 млн евро и 180 млн евро (всего 390 млн евро). Решения касались незаконной опоры на договорную необходимость для персонализированной рекламы в сочетании с нарушениями прозрачности и справедливости, а не утечки данных из-за атаки на безопасность (Data Protection Commission, 2023).
Архитектуры хранения, рассмотренные в «Инженерии данных», служат механизмами принуждения управления: они определяют, какие субъекты получают доступ к данным, как отслеживаются запросы и выполняют ли конвейеры требования закона. Каждое архитектурное решение, от стратегий приема через конвейеры извлечения, преобразования и загрузки (ETL) до организации постоянного хранилища, несет последствия для управления, которые проявляются при регуляторных аудитах, расследованиях в сфере конфиденциальности или отзыве моделей. Управление данными переводит абстрактную политику в конкретную инженерию систем через аутентифицированный контроль доступа к обучающим разделам, неизменяемую инфраструктуру аудита, фиксирующую обращения к наборам данных, преобразования с сохранением приватности при извлечении признаков и детерминированные системы родословной, которые связывают снимки обучения с развернутыми контрольными точками моделей. Поскольку эти обязательства связаны с технической архитектурой, а не с организационной бумажной работой, они образуют собственный инженерный принцип, локальный для этой главы, а не вводный принцип части, который задает рамку всей книги.
Соответствие как инженерное ограничение
Инвариант: обязанности в области управления данными — это инженерные требования, а не необязательные политические надстройки.
Следствие: системы, которые обрабатывают регулируемые данные, должны сопоставлять применимые обязанности с техническими и организационными средствами контроля. Контроль доступа, стирание, возможность оспорить решение, аудит и родословная могут требоваться или быть полезными в зависимости от юрисдикции, данных, субъекта и сценария использования. Общий регламент защиты данных (GDPR), Калифорнийский закон о защите прав потребителей (CCPA), Общий закон Бразилии о защите данных (LGPD, Lei Geral de Proteção de Dados) и Закон Китая о защите персональной информации (PIPL) различаются по охвату и обязанностям, поэтому никакой единый контрольный список не обеспечивает соответствие всем им сразу.
Управление данными операционализирует безопасность, приватность, соответствие требованиям и родословную как взаимозависимые инженерные ограничения в четырех функциональных областях.
Инфраструктура безопасности защищает сырые признаки, обучающие разделы и артефакты моделей с помощью взаимной аутентификации, ролевой авторизации, шифрования при хранении и при передаче и управления ключами на основе аппаратного корня доверия на всем жизненном цикле приема.
Механизмы приватности регулируют раскрытие информации даже для аутентифицированных потребителей. Такие методы, как дифференциальная приватность, k-анонимность и автоматическое редактирование признаков, защищают субъектов отдельных записей, сохраняя статистический сигнал для последующего обучения модели.
Системы соответствия требованиям переводят законы конкретных юрисдикций (например, GDPR, CCPA и LGPD) в жесткие архитектурные ограничения, которые регулируют сроки хранения в конвейерах, проверку согласия и трансграничную репликацию данных.
Системы родословной и аудита строят криптографические следы, которые делают весь жизненный цикл данных проверяемым. Без детерминированной родословной, связывающей развернутые веса с обучающими снимками и журналами сырого приема, утверждения о безопасности и регуляторные заявления остаются непроверяемыми.
Маячная модель KWS, введенная в «Системах машинного обучения» как пример «жесткого ограничения», показывает, как риски справедливости, выявленные в «Риске справедливости по архетипам ML», усиливаются на уровне управления. Развернутый голосовой ассистент непрерывно захватывает окружающие акустические кадры в частных пространствах, хранит профили зарегистрированных говорящих и периодически синхронизируется с облачными конвейерами, которые обучаются на аудиокорпусах всей популяции. Эти эксплуатационные возможности создают обязанности управления в области согласия, минимизации данных, аудита доступа и прав на удаление.
В архитектуре KWS эти четыре области напрямую соответствуют точкам принуждения в аппаратуре и конвейерах. Безопасность защищает данные на границе «периферия–облако»: аппаратные хранилища ключей на периферийных микроконтроллерах защищают сохраненные шаблоны говорящих, взаимный TLS аутентифицирует телеметрию при передаче, а ролевой контроль доступа ограничивает доступ к централизованному обучающему аудио в облачном хранилище. Приватность управляет буферами памяти и телеметрией: круговые буферы SRAM непрерывно перезаписывают окружающий звук, пока на устройстве не сработает ключевое слово, гарантируя, что речь без срабатывания никогда не записывается в постоянную флеш-память и не уходит в сеть, а дифференциальная приватность ограничивает утечку информации при переобучении акустической модели на всем парке устройств. Соответствие автоматизирует юридические обязанности: когда пользователь отзывает согласие или пользуется правом на стирание, автоматизированные конвейеры удаления очищают его голосовые профили и акустические обучающие разделы во всех облачных уровнях и холодных резервных копиях. Родословная и аудит устанавливают криптографическое происхождение: хеши содержимого и подписанные манифесты связывают каждый развернутый бинарный файл сверточной нейронной сети с раздельными по глубине свертками (DS-CNN) с конкретными обучающими разбиениями и начальными значениями генератора (seed) акустической аугментации, а затем с исходными сырыми записями.
«Структура управления данными» показывает более широкую операционную модель, которая поддерживает эти области и координирует организационные политики, каталоги данных, протоколы закупки, метрики качества и общие определения схем с техническими средствами контроля. Технические механизмы и организационные процессы должны работать как взаимно усиливающие подсистемы: зашифрованное хранилище без контроля доступа, привязанного к личностям, остается уязвимым для несанкционированной выгрузки, а соответствующее требованиям хранилище без проверяемых журналов аудита не выдержит регуляторной проверки. В терминах D·A·M управление данными образует операционную плоскость контроля оси данных: оно обеспечивает законное происхождение, границы приватности и целостность жизненного цикла данных, которые питают алгоритм и выполняются на машине.
Структура управления данными: восемь операционных элементов окружают управление данными как центральный узел: политики, организация, безопасность, эксплуатация, качество данных и мастер-данные, закупка, каталоги и общие аналитические определения. Круговое расположение представляет управление как скоординированную операционную модель, а не как одно средство контроля: оно охватывает организационные функции, такие как каталоги, закупка и аналитические определения, наряду с четырьмя техническими областями (безопасность, приватность, соответствие и родословная). Адаптировано из стандартных корпоративных фреймворков управления данными.
Архитектура безопасности и контроля доступа
Представьте специалиста по данным, который запрашивает хранилище признаков для получения обучающих данных. Этот специалист может читать агрегированные голосовые признаки, но не может получить доступ к сырым аудиозаписям, из которых они получены. Конвейер обслуживания может читать онлайн-признаки для вывода, но не может записывать в обучающий набор. Ни один из них не может изменять исходные данные. Такое разделение намеренно: оно отражает многоуровневую архитектуру безопасности, в которой требования управления переходят в применимые технические средства контроля на каждом этапе конвейера. Хранилища признаков реализуют ролевой контроль доступа (RBAC), сопоставляя организационные политики с аутентифицированными идентичностями и правами баз данных. Эти средства работают на разных уровнях хранения: объектное хранилище применяет политики доступа на уровне корзин, хранилища данных реализуют безопасность на уровне столбцов и динамическое маскирование чувствительных полей, а хранилища признаков поддерживают изолированные пути чтения и записи, которые разделяют низкоуровневые поиски «ключ–значение» для онлайн-вывода и высокопроизводительные пакетные выборки для офлайн-обучения.
Механизмы контроля доступа остаются неполными без шифрования, которое защищает данные при хранении и при передаче, но не предотвращает злоупотребления после расшифровки или авторизованного доступа. Обучающие корпуса, хранимые в озерах данных, опираются на серверное конвертное шифрование с ключами, которыми управляют выделенные сервисы управления ключами (например, AWS KMS или Google Cloud KMS). Хранилища признаков применяют симметричное шифрование (например, AES-256) для таблиц при хранении и TLS 1.3 для передачи между сервисами. Периферийные устройства KWS сочетают шифрование транспорта для конфиденциальности полезной нагрузки с асимметричной подписью кода для проверки целостности обновлений модели; оба средства требуют безопасного управления ключами и авторизации обновлений. Чтобы защищать данные в использовании во время обучения и вывода, системы опираются на конфиденциальные вычисления через аппаратные защищенные анклавы (доверенные среды исполнения, например AMD SEV-SNP, Intel TDX или конфиденциальные GPU). Анклавы центрального процессора изолируют и шифруют страницы системной DRAM от недоверенных гипервизоров, но многоускорительные системы должны защищать и физическое межсоединение. Архитектуры конфиденциальных ускорителей распространяют аппаратный корень доверия на шину PCIe с помощью PCIe IDE (Integrity and Data Encryption) и шифруют HBM встроенными криптографическими блоками. Веса, активации и чувствительные пользовательские входы в открытом виде остаются внутри кремния процессора, гарантируя, что ни привилегированные хост-системы, ни гипервизоры, ни операторы облака не могут просматривать или изменять память исполнения.
Сериализованные веса, экспорты ONNX (Open Neural Network Exchange) и контрольные точки требуют той же защиты, что и обучающие данные. Веса модели — это проприетарная интеллектуальная собственность, и они создают критические поверхности уязвимостей на осях данных, алгоритма и машины (D·A·M). На уровне машины десериализация непроверенных файлов контрольных точек (например, архивов Python pickle) открывает уязвимости выполнения произвольного кода на узлах обучения и рабочих процессах вывода. Продакшен-конвейеры устраняют эту уязвимость, используя ограниченные форматы сериализации (например, Safetensors), шлюзы продвижения, защищенные от записи, и криптографические подписи (например, Ed25519), которые проверяют целостность артефакта до того, как инфраструктура обслуживания загрузит параметры в память ускорителя. На уровнях данных и алгоритма конвейеры должны защищаться от состязательных угроз на протяжении всего жизненного цикла. При атаках отравления данных состязательно сконструированные примеры, вставленные в обучающий корпус, вызывают целевое неверное поведение или закладки на этапе вывода. Если противник получает доступ к API предсказаний или к сырым весам, атака на принадлежность (membership inference) проверяет, присутствовали ли конкретные записи пациентов или пользователей в обучающем наборе (Shokri et al., 2017), а атаки извлечения модели крадут ее функциональность через систематический опрос запросами (Tramèr et al., 2016). На этапе вывода атаки уклонения создают наихудшие, незаметные для человека возмущения (), ограниченные -шаром нормы (), для входных признаков и вызывают уверенные ошибочные классификации без изменения весов или обучающих данных. Защита сервисной инфраструктуры от уклонения требует либо устойчивой оптимизации во время обучения, например состязательного обучения, которое на каждом шаге вычисляет наихудшие возмущения через градиенты входа и заметно повышает арифметическую интенсивность и требования к FLOP обратного прохода, либо защит во время выполнения, таких как санитизация входов и рандомизированное сглаживание.
Контроль доступа и криптографические анклавы определяют, кто может добраться до данных и как они защищены при хранении, передаче и исполнении. Контроль доступа — лишь половина задачи: даже авторизованные пользователи могут нарушить приватность отдельных людей, если сами данные защищены недостаточно.
Технические методы защиты приватности
Специалисту по данным, у которого есть законный доступ к обучающим данным, не нужны и не должны показываться отдельные записи пользователей, если хватает агрегированных статистик. Методы, сохраняющие приватность,24 закрывают этот разрыв, определяя, какую информацию системы раскрывают даже авторизованным пользователям, и добавляя второй уровень защиты поверх контроля доступа. Дифференциальная приватность задает формальную математическую границу максимального влияния любой отдельной записи на распределение экспортируемого выхода. В системах машинного обучения дифференциальная приватность обеспечивается во время обучения через дифференциально приватный стохастический градиентный спуск (DP-SGD). Стандартное обратное распространение агрегирует градиенты по всему батчу размера внутри оптимизированных ядер матричного умножения, никогда не материализуя производные для отдельных примеров. DP-SGD нарушает эту модель исполнения: система должна ограничить чувствительность каждой записи, обрезая норму градиента каждого отдельного примера до порога перед суммированием, после чего добавляется калиброванный шум, взятый из гауссова распределения . На аппаратных ускорителях обрезка по отдельным примерам мешает стандартным тензорным операциям на уровне батча. Вычисление градиентов отдельных примеров по микробатчам сводит арифметическую интенсивность к минимуму и перегружает очереди запуска ядер, а векторизация градиентов по батчу увеличивает объем памяти промежуточных активаций и градиентов в раз, быстро исчерпывая HBM ускорителя. Кроме того, каждый шаг по мини-батчу раскрывает измеримое количество информации, поэтому нужен бухгалтер приватности, который отслеживает совокупный бюджет эпсилон по составным шагам обучения и останавливает оптимизацию до исчерпания бюджета приватности.
Эмпирические методы проверки, такие как атаки на принадлежность, могут дополнять эти формальные проверки, измеряя, может ли внешний наблюдатель установить, присутствовала ли конкретная запись в обучающем наборе. Однако эмпирическая атака не может математически доказать, что граница выполняется.25 Атаки на принадлежность нужно отличать от атак обращения модели (model inversion), когда противник использует непрерывные выходы уверенности модели, чтобы напрямую восстановить лежащие в основе закрытые значения признаков или внешность субъектов обучения (Fredrikson et al., 2015). Если атака на принадлежность отвечает на бинарный вопрос о присутствии («был ли этот человек в обучающем наборе?»), то обращение использует распределения вероятностей выхода, чтобы синтезировать сами чувствительные данные. Защита от обращения требует маскировать или квантовать непрерывные оценки уверенности на API обслуживания предсказаний, усекать распределения выходов до top- классов и ограничивать запоминание параметров через дифференциальную приватность во время обучения.
Хотя дифференциальная приватность ограничивает утечку информации из выходов модели, сбор непрерывных сырых потоков сенсоров создает немедленную уязвимость, если сырые данные покидают устройство захвата. Архитектуры периферии с постоянным прослушиванием, такие как маячная модель KWS, работают в жестких ограничениях приватности, потому что непрерывная выборка окружающего звука с микрофона должна сосуществовать со строгими границами минимизации и хранения. Чтобы исключить риск передачи, система полностью ограничивает извлечение акустических признаков и проверку слова пробуждения локальными маломощными микроконтроллерами или цифровыми сигнальными процессорами (DSP). Входящие аудиоотсчеты проходят через небольшой энергозависимый круговой буфер в SRAM на кристалле, где старые кадры непрерывно перезаписываются новыми данными импульсно-кодовой модуляции (PCM). Сырое аудио никогда не покидает локальную энергозависимую память и не сохраняется во флеш-памяти, если только акустическая модель на устройстве не подтвердит явное ключевое слово-триггер.
Ограничение сырого аудио локальной памятью периферии обеспечивает минимизацию данных, но не позволяет централизованным конвейерам обучения собирать разнообразные акустические вариации, чтобы со временем повышать точность модели. Федеративное обучение снимает это противоречие, выполняя обучение модели непосредственно на клиентских устройствах и агрегируя обновления весов модели вместо объединения сырого пользовательского аудио.26 В каждом раунде обучения отобранные периферийные устройства вычисляют локальные градиенты на недавно сработавших высказываниях и передают дельты параметров центральному координатору. Такой архитектурный сдвиг меняет риски централизации данных на серьезные узкие места физических систем. Пропускная способность беспроводного восходящего канала сильно ограничивает передачу миллионов параметров за раунд по сотовым или Wi-Fi каналам. Питающиеся от батарей клиентские устройства часто отключаются в середине раунда как отстающие из-за тепловых ограничений или нестабильной связи, а неоднородные (non-IID, неодинаково распределенные) данные на разных устройствах заставляют локальные градиенты расходиться и угрожают сходимости модели. Кроме того, сырые обновления градиентов остаются уязвимыми для атак инверсии и восстановления градиентов (Zhu et al., 2019), поэтому продакшен-конвейеры федеративного обучения должны сочетать сжатие и разрежение градиентов с безопасной многосторонней агрегацией и внедрением шума локальной дифференциальной приватности.
Когда записи срабатываний аудио или агрегированные контрольные точки модели должны храниться на централизованной инфраструктуре для проверки или последующего обучения, защита приватности переходит к автоматизированному управлению жизненным циклом. Автоматизированные конвейеры хранения и криптографического стирания применяют строгие политики времени жизни к основным хранилищам больших объектов, кэшам признаков и распределенным обучающим разделам. Проверяемые протоколы криптографического стирания гарантируют, что по достижении срока хранения ключи шифрования уничтожаются, а блоки хранения перезаписываются, не позволяя удаленным аудиопотокам сохраняться в репликах баз данных или холодных резервных копиях.
Архитектура соответствия нормативным требованиям
Когда пользователь из Европы использует применимое право на стирание по GDPR, голосовой ассистент должен определить, какие персональные данные и последующие артефакты входят в объем запроса, и выполнить соответствующий процесс в пределах сроков ответа, установленных регламентом (European Parliament and Council of the European Union, 2016). Требования соответствия превращают правовые обязанности в архитектурные ограничения, которые определяют дизайн конвейеров, выбор хранилищ и эксплуатационные процедуры. Принцип минимизации данных GDPR требует ограничивать сбор и хранение тем, что необходимо для заявленных целей. Права доступа по статье 15 охватывают персональные данные, которые проходят обработку, и определенные сведения об этой обработке, а не каждый артефакт, который просто связан с пользователем.
Голосовые ассистенты, работающие по всему миру, сталкиваются с перекрывающимися режимами регулирования, потому что требования различаются по юрисдикциям и по-разному применяются в зависимости от возраста пользователя и чувствительности данных. Правила GDPR о трансграничной передаче допускают передачи через решения об адекватности, надлежащие гарантии или ограниченные исключения, а не вводят категорическую локализацию данных. Эти правила все равно могут определять региональный выбор хранилищ, репликации и обработки. Карточки данных (Pushkarna et al., 2022) фиксируют происхождение, предполагаемое использование и риски как операционные метаданные, как показано в «Документации управления данными», но действующая карточка сама по себе не делает набор данных или модель соответствующими требованиям.
Документация управления данными: заполненная карточка Open Images Extended — More Inclusively Annotated People организует авторство, мотивацию, предполагаемые и небезопасные варианты использования, сочетанное использование и оговорки метода в одном артефакте. Фиксация разрешенного и запрещенного использования делает карточку проверяемым свидетельством управления, хотя сама по себе она не подтверждает соответствие. Адаптировано из карточки данных Open Images Extended — MIAP в (Pushkarna et al., 2022).
Построение инфраструктуры родословной данных
Поля карточки данных становятся эксплуатационными проверками, когда попадают в конвейер: метаданные о происхождении, предполагаемом использовании, рисках и хранении определяют, какие наборы данных могут обучать какие модели и какие артефакты должны прослеживаться при аудите. Обязательства по соответствию настолько же достоверны, насколько инфраструктура, которая их демонстрирует. Когда регулятор спрашивает «какие обучающие данные породили эту модель?» или пользователь пользуется применимым правом на стирание, организация должна ответить с инженерной точностью, а не ручным расследованием. Родословная данных обеспечивает эту возможность, формализуя связи конвейера как направленный ациклический граф (DAG) версий артефактов и задач преобразования, что превращает статическую документацию в инфраструктуру, которую можно запрашивать. Системы родословной, такие как Apache Atlas и DataHub,27 интегрируются с оркестраторами конвейеров, такими как Airflow и Kubeflow, чтобы автоматически фиксировать связи. Когда DAG Airflow читает аудиофайлы из объектного хранилища и преобразует их в спектрограммы, система родословной записывает каждый шаг и прослеживает каждый тензор признаков до исходного аудиофайла. Отслеживание родословной также позволяет проводить последующий анализ воздействия. Когда приходит запрос на стирание, обход графа родословной определяет все производные артефакты (кэшированные спектрограммы, эмбеддинги признаков и веса контрольных точек), которые требуют аннулирования, переобучения или юридической проверки.
Продакшен-система KWS реализует отслеживание родословной на протяжении всего жизненного цикла инженерии данных. Прием исходного аудио создает записи родословной, связывающие каждый аудиофайл с методом получения, что поддерживает проверку требований согласия. Выполнение конвейера обработки расширяет графы родословной по мере того, как аудио превращается в признаки и эмбеддинги, и каждое преобразование фиксирует версии кода и гиперпараметры. Задания обучения создают ребра родословной от коллекций признаков к артефактам моделей, записывая, какие версии данных обучили какие версии моделей. Когда голосовое устройство загружает обновление модели, отслеживание родословной фиксирует развертывание, что поддерживает отзыв, если позднее выяснится, что обучающие данные имеют проблемы с качеством или соответствием. Родословная фиксирует происхождение, но подотчетная эксплуатация также требует истории доступа: кто обращался к данным, когда и на каком основании.
Инфраструктура аудита и подотчетность
Сохраненные события аудита превращают подотчетность в растущую нагрузку на хранилище.
Журналы подотчетности фиксируют события доступа, чтобы выполнять законодательные обязанности, такие как HIPAA и Закон Сарбейнса–Оксли (SOX). В продакшен-системах машинного обучения, однако, фиксация каждого события доступа создает острое узкое место усиления записи. Размер основных наборов данных растет линейно с пользовательской базой или длительностью сбора, тогда как объем аудита масштабируется как произведение обращений к наборам данных, запросов сервиса и этапов конвейера. Логирование полных полезных нагрузок признаков и промежуточных тензоров активаций в высокопроизводительных конвейерах обслуживания заставляет сохраненную телеметрию аудита расти выпукло относительно хранилища основных данных. Такое усиление записи быстро насыщает пропускную способность приема и емкость вторичного хранилища, вынуждая системы разделять метаданные аудита и основные полезные данные.
Продакшен-архитектуры распознавания ключевых слов разрешают этот компромисс через многоуровневую топологию аудита, которая согласует полноту фиксации с накладными расходами хранения и ограничениями пропускной способности периферии.
На уровне периферии микроконтроллеры, работающие в жестких бюджетах SRAM, записывают локальные переходы состояний, метки времени пробуждения и состояния питания в энергозависимые круговые буферы. Чтобы экономить энергию радиоканала и восходящую пропускную способность, устройства не передают несжатую телеметрию непрерывно; они отправляют компактные пакетные сводки в центральное хранилище по защищенному транспорту только в плановые окна обслуживания или циклы зарядки.
Как только телеметрия попадает в центральную инфраструктуру, аудит переходит от периферийных устройств с ограниченной пропускной способностью к высокопроизводительным хранилищам признаков. На уровне признаков офлайн- и онлайн-хранилища признаков записывают события аудита только для добавления (append-only) для каждой транзакции чтения и записи. Вместо дублирования многомерных векторов признаков эти события фиксируют идентификаторы запрашивающих сервисов, псевдонимы авторизованных субъектов, хеши групп признаков и метки времени чтения. Такая стратегия логирования только метаданных позволяет проверять доступ с высокой детализацией и при этом сохраняет объем журнала пропорциональным числу транзакций доступа, а не размеру полезных данных.
Из хранилищ признаков данные поступают в конвейеры обучения, которые работают на кластерах ускорителей. На уровне обучения планировщики кластеров записывают детерминированные манифесты, которые напрямую связывают задания обучения с неизменяемыми хешами разделов данных, SHA коммитов git и конфигурациями гиперпараметров. Хотя эти манифесты подтверждают целостность и воспроизводимость конвейера, они выявляют внутреннюю границу системы: журналы доступа подтверждают, какие записи обрабатывались, но не могут показать, сохраняются ли удаленные пользовательские данные внутри выученных весов модели. Поэтому выполнение требования стирания требует запуска автоматизированных процессов переобучения или проверяемой верификации «разучивания» (unlearning), а не опоры только на журналы аудита базы данных.
Регуляторные требования расширяют ответственность аудита от доступа к данным до поведения во время вывода. Восстановление того, почему конкретному заявителю отказали в кредите в «Разборе примера», или почему голосовой ассистент на периферии сработал на ложное слово пробуждения, требует аудита точного эксплуатационного состояния во время вывода. Без логирования на этапе вывода журнал аудита может подтвердить доступ к базе данных, но не зафиксирует, какая контрольная точка модели, порог решения и признаки времени выполнения породили данное решение. Архивирование сырых входных тензоров для каждого запроса вывода создавало бы неустойчивую нагрузку на запись; поэтому продакшен-системы обслуживания вместо этого записывают компактные, ограниченные по назначению манифесты решений. Эти манифесты фиксируют хеш активной версии модели, порог решения времени выполнения, выходные оценки уверенности или коды причин и криптографические хеши входных признаков, превращая восстановление каждого решения в индексированный запрос к базе данных.
Вместе четыре области управления (безопасность, приватность, соответствие требованиям и аудит)28 образуют уровень принуждения на уровне машины в таксономии D·A·M. Они обеспечивают физическую телеметрию и принуждение границ, необходимые для проверки алгоритмических ограничений, отслеживания происхождения данных и сохранения подотчетности на протяжении жизненного цикла модели. Однако даже когда системы внедряют всеобъемлющую инфраструктуру управления, инженерные команды часто попадают в тонкие ловушки: рассматривают журналы аудита как пассивную бумажную работу соответствия, считают, что агрегированные метрики гарантируют справедливость для подгрупп, или полагают, что ответственные ограничения можно достроить после развертывания.
Заблуждения и ловушки
Команды могут потерпеть неудачу и после того, как соберут оценочные структуры, метрики справедливости, механизмы объяснимости, анализы эффективности и инфраструктуру управления. Команда может добавлять справедливость задним числом после успеха на бенчмарках, доверять агрегированной точности или считать доказательства соответствия бумажной работой, а не поведением системы, опираясь на интуицию традиционной программной инженерии, где ошибки локальны, а тестирование детерминировано. Распознать эти паттерны сбоев на ранней стадии, до того как заблуждение повлияет на проектное решение, гораздо дешевле, чем обнаружить его после развертывания.
Заблуждение и ловушка
Заблуждение: Ответственность можно учесть после того, как система достигла технических целей.
Команды полагают, что ограничения справедливости можно добавить задним числом, когда модели покажут сильные результаты на бенчмарках. В продакшене ранние архитектурные решения ограничивают, какие вмешательства остаются возможными. Инструмент подбора персонала Amazon (см. «Когда оптимизация удается, а системы терпят неудачу») иллюстрирует эту ловушку: попытки исправления не дали уверенности, что система перестанет выдавать дискриминационные рекомендации, и Amazon закрыла проект (Dastin, 2018). Организации, которые откладывают ответственность, могут столкнуться с переработкой, развертыванием с документированными рисками или отменой. Встраивание ограничений справедливости на раннем этапе может обойтись дешевле, чем их добавление задним числом, когда контракты данных, мониторинг и шлюзы выпуска уже зафиксированы.
Заблуждение и ловушка
Ловушка: опора на агрегированные метрики при оценке справедливости.
Инженеры полагают, что высокая общая точность означает, что система хорошо работает для всех пользователей. Ошибка средних («Тестирование по популяциям») показывает, что эта интуиция не работает: агрегированные метрики могут скрывать большие различия между подгруппами («Проблема тестирования»). Анализ одобрения кредитов в «Разборе примера» выявил разрыв TPR в 30 процентных пунктов: квалифицированных заявителей из группы меньшинства отклоняли в 4 раза чаще, чем из группы большинства. Такие различия могут оставаться незамеченными, если стандартный мониторинг отслеживает только агрегаты. Продакшен-системам нужна раздельная оценка с порогами, специфичными для приложения, например предельное отношение долей ошибок 1,25 или предельная разница TPR в 5 процентных пунктов, которые использованы в этом примере.
Заблуждение и ловушка
Заблуждение: удаление чувствительных атрибутов из обучающих данных устраняет смещение.
Команды удаляют пол, расу и защищенные атрибуты, ожидая, что это обеспечит справедливость. Другие признаки могут выступать как прокси-переменные, если коррелируют с чувствительными характеристиками. Почтовые индексы, паттерны покупок, история просмотров, названия колледжей и выбор языка могут нести косвенный демографический сигнал. Система Amazon (см. «Когда оптимизация удается, а системы терпят неудачу») понижала оценки для таких терминов, как «women’s», и для выпускниц двух женских колледжей (Dastin, 2018). Исследование в области здравоохранения показало, что исправление прокси, основанного на стоимости, увеличило бы долю чернокожих пациентов, получающих дополнительную помощь, с 17,7 процента до 46,5 процента (Obermeyer et al., 2019). Удаление защищенных атрибутов само по себе не обеспечивает справедливость.
Заблуждение и ловушка
Ловушка: считать документацию достаточной подотчетностью.
Команды тратят силы на карточки моделей и после этого считают требования ответственности выполненными. Документация обеспечивает прозрачность («Стандарты документирования моделей»), но не принуждение. Карточка модели с пометкой «не валидирована для решений с высокими ставками» не действует, когда систему перепрофилируют для одобрения кредитов без технических ограничений. Подотчетность требует эксплуатационной интеграции: панелей мониторинга, документированных порогов оповещений о неравенстве между подгруппами, процедур реагирования на инциденты и средств контроля доступа, которые не дают развернуть систему за пределами валидированных сценариев использования.
Заблуждение и ловушка
Заблуждение: ответственный ИИ — это в первую очередь вопрос юридического соответствия.
Команды рассматривают ответственность как внешний надзор, а не как инженерную практику. Инженерные решения, принятые за месяцы до юридической проверки, ограничивают пространство решений сильнее любой оценки соответствия. Выбор архитектуры определяет, какие вмешательства в справедливость осуществимы, а проект конвейера данных определяет, возможна ли вообще раздельная оценка. Как показано в «Инженерном руководстве ответственностью», системы, спроектированные с ответственностью как инженерной целью, позволяют эффективно валидировать их, тогда как системы, в которые ответственность добавляют на поздней стадии проверки, сталкиваются с переработкой или развертыванием с документированными рисками.
Заблуждение и ловушка
Ловушка: измерять экологическое воздействие обучения, но не вывода.
Публичные дискуссии сосредоточены на углероде отдельных запусков обучения, и инженеры часто следуют этой рамке при оценке экологической ответственности. Иллюстративный анализ TCO в разделе «Совокупная стоимость владения» показывает, почему такой фокус неполон: при допущениях о потребности в обслуживании без батчинга соотношение стоимости вывода к стоимости обучения составляет около 40:1. Модель, которую периодически обучают, но которая обслуживает миллионы запросов в день, может иметь жизненный след, в котором доминирует вывод, а не обучение. Для системы рекомендаций, разобранной в «Сводке совокупной стоимости владения», обучение составляет 1,9 процента трехлетней стоимости, а вывод — 73,5 процента. В этом примере вывод выделяет примерно в 63 раза больше CO₂, чем обучение. Инженеры, которые оптимизируют эффективность обучения и игнорируют потребность в выводе на запрос, могут не рассмотреть более крупное слагаемое в этом сценарии. Эти значения зависят от сценария, но они показывают, почему учет жизненного цикла должен включать оба слагаемых.
Заблуждение и ловушка
Заблуждение: веса модели освобождены от управления данными и запросов на удаление.
Команды часто полагают, что после того как обучающие данные вошли в веса модели, данные больше не существуют и обязанности по соответствию не распространяются на артефакт. Модели могут запоминать обучающие данные, а атаки на принадлежность могут раскрыть, появлялась ли запись в обучении (Shokri et al., 2017). Являются ли конкретные веса персональными данными или требуют действий после запроса на стирание, решается в каждом случае отдельно. Инженерные команды должны отслеживать родословную от данных к модели и при запросе, который может затронуть развернутые артефакты, оценивать удаление, ограничение, переобучение, машинное «разучивание» (machine unlearning) или компенсирующие средства контроля вместе со специалистами по праву и приватности (Cao and Yang, 2015); (Bourtoule et al., 2021).
Во всех этих сбоях повторяется одна ошибка: ответственность рассматривается как документ, метрика или проверка на поздней стадии, а не как свойство системы. Измеримые ограничения, непрерывный мониторинг и обеспечиваемое управление переносят ответственность через весь жизненный цикл.
Итоги
Ответственная инженерия — это инженерия ML-систем, доведенная до конца, а не отдельная дисциплина. Глава прошла путь от диагностики сбоев через их предотвращение к принуждению, начиная с разрыва ответственности (расстояния между технической производительностью и ответственными результатами) и показывая, как прокси-переменные, петли обратной связи и сдвиг распределения могут причинять вред пользователям, в то время как обычные метрики остаются приемлемыми. Инженерный ответ включает контрольные списки, которые систематизируют оценку перед развертыванием, метрики справедливости, которые делают различия измеримыми, механизмы объяснения, выбранные под требования заинтересованных сторон и регуляторов, и инфраструктуру мониторинга, которая способна выявлять тихие сбои и связывать сигналы с реагированием.
Перевод проблем ответственности в измеримые свойства делает их поддающимися инженерной работе. Обоснованная, специфичная для приложения граница неравенства проверяема; требование «будь справедливым» — нет. Этот перевод выходит за рамки справедливости: в иллюстративном сценарии TCO из главы снижение спроса ускорителя на услугу на 20 процентов экономит $304 тыс. и, как ожидается, позволяет избежать 19 т CO₂ при заявленных допущениях. Документация превращается в карточки моделей с явным предполагаемым использованием и известными ограничениями. Управление превращается в контроль доступа, отслеживание родословной и инфраструктуру аудита, которые делают доказательства соответствия доступными, а не только желаемыми. Во всех этих случаях абстрактные этические обязательства становятся конкретными инженерными требованиями, которые можно задать, проверить, отслеживать и обеспечивать.
Практики ответственной инженерии, разобранные в этой главе, — неотъемлемые компоненты полноценной инженерии, а не внешние ограничения, наложенные на техническую работу. Системы, которые игнорируют справедливость, эффективность, прозрачность или управление, технически неполны. Та же строгость, которая применяется к бюджетам задержки и ограничениям памяти, должна распространяться на критерии справедливости, экологическое воздействие и применимые регуляторные требования. Интеграция этих соображений с момента создания системы делает обязательства проверяемыми, раньше выявляет компромиссы и облегчает диагностику и управление сбоями в продакшене.
Надежно для кого?
- Агрегированная корректность скрывает вред: модель может выглядеть точной в целом, в то время как частота ошибок одной подгруппы в 43,1 раза выше, чем у другой, как в аудите Gender Shades для Face++. Ответственная оценка поэтому начинается с раздельных и пересекающихся срезов, а не с одной агрегированной точности.
- Ответственность становится проверяемой через пороги: требование «будь справедливым» не проверяемо, а ограниченное неравенство, задокументированное предполагаемое использование и требования объяснимости проверяемы. Перевод ценностей в измеримые ограничения позволяет командам обсуждать компромиссы между справедливостью, точностью, задержкой и стоимостью.
- Эффективность — это социальное ограничение: эффективная модель может снижать энергопотребление и стоимость и расширять круг тех, кто может ее развернуть. В иллюстративном сценарии главы соотношение стоимости вывода к стоимости обучения составляет 40:1, поэтому оптимизация на уровне запроса — это ответственная инженерия.
- Мониторинг должен следить за результатами: сбои, связанные со смещением и приватностью, могут продолжаться при зеленых панелях доступности, потому что вредные предсказания выглядят эксплуатационно нормальными. Продакшен-мониторинг должен отслеживать результаты по подгруппам, родословную данных, петли обратной связи и пути реагирования на инциденты с той же строгостью, что и регрессии задержки.
- Управление должно быть встроено: карточки моделей, паспорта данных, средства контроля доступа, процессы стирания, пути человеческой проверки и журналы аудита — это техническая инфраструктура, а не необязательные политические надстройки. Такие регуляции, как GDPR, требуют возможностей, которые должны быть заложены в конвейер; последующее исправление может оставаться возможным, но оно может быть более узким и дорогим, когда система уже принимает решения.
Система, которая делает ровно то, что ей велели, опасна именно потому, что указание никогда не бывает полным. Каждая цель, которую получает модель, — это спецификация с пробелами, а оптимизатор — машина, которая эти пробелы находит. Он может воспроизвести смещение, заложенное в данных, гнаться за прокси вместо цели и назвать результат успехом, потому что в цели не было ничего, что сказало бы обратное. Ответственная инженерия — это дисциплина, которая вписывает обратно то, что спецификация упустила. Ограничения и мониторинг снижают риск того, что оптимизация усилит вред, закодированный в данных. Это то же ограничение, которое остальная книга накладывала на задержку и память, только здесь оно защищает людей, которых цель не назвала. Модель, которая быстра и точна, но ошибается в том, кому служит, подвела не меньше, чем модель, которая падает, — просто тише.
От техники к философии
Эта глава замыкает круг, начатый с железного закона систем машинного обучения (принцип «Железный закон систем машинного обучения»). Оптимизации, разобранные в «Сжатии моделей», «Аппаратном ускорении» и «MLOps», мотивировались производительностью, но они могут поддерживать и ответственность. Эффективность снижает энергопотребление и выбросы, сжатие уменьшает требования к ресурсам развертывания, а мониторинг результатов выявляет смещение. Инженерные техники пересекаются, но взгляд через ответственность меняет то, какие результаты измеряются. Глава «Заключение» связывает эти части в целостную философию инженерного мастерства.
-
Инструмент подбора персонала Amazon: разработка началась в 2014 году в инженерной команде Amazon в Эдинбурге. Система оценивала кандидатов по шкале от 1 до 5 и обучалась примерно на десяти годах резюме, в основном мужских, что отражало гендерное соотношение в технологическом секторе. К 2015 году гендерное смещение было выявлено, а к 2017 году проект закрыли после неоднократных попыток исправления (Dastin, 2018). Главной ценой была не вычислительная мощность, а упущенная возможность: многолетний проект подбора персонала провалился, потому что цель закодировала историческое смещение. Это задокументированный сбой спецификации в ML-инструментах. ↩
-
Прокси-переменная: удаление одного прокси может мало что изменить, если другие коррелирующие признаки сохраняют похожий сигнал. И наоборот, сама корреляция не доказывает дискриминацию и не указывает на нужное вмешательство. Удаление защищенных атрибутов, оценка по подгруппам, контрфактические тесты, причинный анализ и проверка всего процесса принятия решений дают взаимодополняющие доказательства; ни одна диагностика не является полной защитой. ↩
-
COMPAS (Correctional Offender Management Profiling for Alternative Sanctions): в проанализированных данных оценки COMPAS были примерно откалиброваны по расе, то есть одна и та же оценка соответствовала сходной наблюдаемой вероятности повторного правонарушения в разных группах. Поскольку распространенность рецидивизма различалась между популяциями, калибровка сосуществовала с неравными долями ошибок (Chouldechova, 2017; Kleinberg et al., 2017). Поэтому одного тестирования калибровки было недостаточно, чтобы установить паритет долей ошибок или определить, приемлемо ли распределение ошибок. ↩
-
Закон Гудхарта: «Когда мера становится целью, она перестает быть хорошей мерой» (обобщение Стратерна наблюдения Гудхарта 1975 года о денежно-кредитной политике) (Strathern, 1997; Goodhart, 1984). Петли обратной связи в рекомендациях — канонический ML-пример: градиентный спуск оптимизирует прокси времени просмотра с такой скоростью, с какой не справится ни один человек-куратор, а выходы системы сами меняют обучающее распределение. Пользователи, которые потребляют экстремальный контент, порождают данные, которые усиливают экстремальность, и отрывают прокси от благополучия пользователей на порядки быстрее, чем могли бы ручные редакционные процессы. ↩
-
Дифференциальная приватность: понятие введено в работе (Dwork et al., 2006). Рандомизированный механизм удовлетворяет -дифференциальной приватности, если для всех соседних наборов данных , различающихся одной записью, и всех множеств выходов выполняется . Здесь ограничивает потерю приватности, а допускает малую вероятность превышения этой границы; приемлемые значения зависят от модели угроз и политики. Инженерный компромисс связан с полезностью, а не только со сложностью реализации: более сильная приватность часто требует больше шума или более жесткой выборки, а потери приватности складываются при повторных запросах или шагах обучения. Поэтому инженеры должны отслеживать совокупную потерю приватности с помощью корректного бухгалтера и сообщать допущения, на которых основан выбранный бюджет. ↩
-
Gender Shades: исследование 2018 года, в котором Джой Буоламвини (MIT Media Lab) и Тимнит Гебру (Microsoft Research) проверили коммерческие системы классификации пола от Microsoft, IBM и Face++ с помощью шкалы типов кожи Фицпатрика. Эта шкала изначально была дерматологической классификацией, которую Томас Фицпатрик разработал в 1975 году для оценки чувствительности к ультрафиолету и которая позднее была подтверждена для клинического применения (Fitzpatrick, 1988). Здесь ее использовали как демографический эталон для алгоритмического аудита. Исследование показало ценность раздельной оценки: в результатах Face++, воспроизведенных в «Частотах ошибок Gender Shades для Face++», частота ошибок для темнокожих женщин в 43,1 раза выше, чем для светлокожих мужчин. Последующие сообщения Microsoft о снижении ошибок показывают, как публичные результаты аудита могут стимулировать измеримое исправление (Raji and Buolamwini, 2019). ↩
-
Непропорциональное воздействие (disparate impact): в деле Griggs v. Duke Power Co. (1971) Верховный суд США постановил на основании Раздела VII, что трудовая практика может быть незаконной из-за своего воздействия даже при отсутствии дискриминационного умысла (Supreme Court of the United States, 1971). Непропорциональное воздействие — правовой иск с элементами, которые определяются законом и конкретным контекстом; это не синоним любого статистического неравенства. Результаты модели и прокси могут служить релевантными доказательствами, но одни только метрики не устанавливают ответственность. ↩
-
Правило четырех пятых: Единые руководящие принципы отбора сотрудников 1978 года используют правило четырех пятых как практический диагностический инструмент для отбора на работу (Equal Employment Opportunity Commission et al., 1978). Коэффициент отбора ниже 80 процентов от коэффициента группы с наибольшим показателем обычно рассматривается как свидетельство неблагоприятного воздействия. Однако руководящие принципы также признают, что меньшие различия могут иметь значение и что этот коэффициент не является решающим. ↩
-
Карточки моделей: основной режим отказа, который они призваны предотвращать, — расползание области применения: постепенное расширение от «это работало для случая А» до «попробуем для случая Б» без повторной валидации предполагаемого использования. На практике карточки часто пишут уже после принятия решений о развертывании, и тогда они фиксируют наблюдаемое поведение вместо того, чтобы его ограничивать. Сопутствующая работа «Datasheets for Datasets» (Gebru et al., 2021) применяет тот же принцип к обучающим данным. Без обоих документов карточка становится исторической записью, а не инженерным ограничителем. ↩
-
Несовместимость метрик справедливости: измеренные различия в этом разборе показывают, как один и тот же набор матриц ошибок может нарушать демографический паритет, равные возможности и равенство шансов. Отдельный результат о невозможности показывает, что при неравных базовых частотах групп и несовершенном предсказании несколько желательных критериев, включая калибровочный предиктивный паритет и баланс долей ошибок, в общем случае нельзя выполнить одновременно (Chouldechova, 2017). В таких условиях оптимизация одного критерия может ухудшать другой. Поэтому проектировщик системы должен явно делать компромисс, а не исходить из того, что все гарантии достижимы одновременно. ↩
-
Равенство шансов: сформулировано в работе (Hardt et al., 2016) и требует, чтобы TPR и FPR были равны между защищенными группами; более слабое «равенство возможностей» ограничивает TPR только. Постобработка для равенства шансов может требовать рандомизированных решений, зависящих от группы, а не только детерминированных порогов. Она также требует информации о защищенных группах в момент принятия решения и должна оцениваться с учетом применимого права. Например, регулирование кредитования в США обычно запрещает использовать защищенные признаки для оценки кредитоспособности. ↩
-
Перевзвешивание: метод предобработки, основанный на идее важностного сэмплирования из статистики. Примеры недостаточно представленной группы получают более высокие веса функции потерь во время обучения, что усиливает их влияние на градиентные обновления без удаления каких-либо данных. (Kamiran and Calders, 2012) показали, что соответствующим образом подобранные веса могут снизить непропорциональное воздействие, возникающее из обучающих данных. Системный компромисс зависит от приложения: перевзвешивание меняет ландшафт функции потерь и может снизить качество на других срезах, поэтому его стоимость нужно оценивать относительно фронта Парето для приложения. ↩
-
Состязательное устранение смещения: ключевое отличительное свойство — давление на представление. Состязательная часть препятствует тому, чтобы основная модель кодировала информацию о защищенных атрибутах; это может снизить утечку защищенных атрибутов и помочь выполнить выбранные критерии справедливости на оцениваемом распределении (Zhang et al., 2018). Однако это не дает общей гарантии справедливости при произвольном сдвиге развертывания: гарантии зависят от допущений об инвариантности, метках, причинной структуре и типе сдвига. Методы постобработки, например корректировка порога, также могут подходить при других допущениях, но их нужно перепроверять, когда меняются демографический состав развертывания или процессы разметки. Стоимость складывается из дополнительного обучения, подбора гиперпараметров и валидации по срезам, а не из универсального процентного накладного расхода. ↩
-
Объяснимость и интерпретируемость: интерпретируемость обычно описывает, насколько легко человек может понять модель или ее поведение, часто благодаря ограниченной структуре, например короткому списку правил или разреженной линейной модели. Объяснимость шире и включает апостериорные методы, например LIME и SHAP. Ни одно из этих свойств не возникает автоматически: линейная модель с непрозрачными признаками может быть трудной для интерпретации, а атрибуция признака не является причинным объяснением решения. Для системы это значит, что внутренние ограничения влияют на выбор модели, тогда как апостериорные методы добавляют вычислительный и валидационный путь, стоимость которого зависит от метода, модели и рабочего процесса обслуживания. Положения GDPR о доступе и автоматизированных решениях используют формулировку «содержательная информация о задействованной логике» для охватываемой обработки (European Parliament and Council of the European Union, 2016), поэтому подходящий технический подход зависит от решения и применимого права. ↩
-
LIME (local interpretable model-agnostic explanations) и SHAP (SHapley additive explanations): LIME (Ribeiro et al., 2016) подбирает локальный интерпретируемый суррогат вокруг каждого предсказания; SHAP (Lundberg and Lee, 2017) адаптирует значения Шепли из теории кооперативных игр для вычисления вкладов признаков в единой аддитивной рамке. Точное вычисление Шепли требует оценки предельного вклада признака по всем возможным подмножествам признаков и растет экспоненциально с числом признаков (), поэтому практические продакшен-развертывания опираются на полиномиальные алгоритмы для конкретных моделей (например, TreeSHAP для деревьев решений) или на сэмплирующие приближения (например, KernelSHAP), чтобы избежать недопустимой задержки обслуживания. Системный компромисс в том, что точность объяснения, задержку и сложность реализации нужно явно закладывать в бюджет, а не считать бесплатными. ↩
-
Закон ЕС об ИИ (Регламент 2024/1689): первая всеобъемлющая правовая рамка для ИИ. Она определяет четыре уровня риска с штрафами, которые зависят от категории нарушения. Нарушения запрещенных практик ИИ могут достигать 35 млн евро или 7 процентов мирового оборота; многие другие обязанности, включая многие обязанности операторов высокорисковых систем, ограничены суммой 15 млн евро или 3 процентами. Закон имеет экстерриториальное действие: организации вне ЕС могут подпадать под требования, если выводят системы на рынок ЕС или если результаты систем используются в ЕС. Для системной инженерии это означает конкретные вещи: высокорисковому ИИ нужна инфраструктура логирования для журналов аудита, механизмы человеческого надзора, встроенные в архитектуру, и маркировка CE. Все эти возможности нужно закладывать с самого начала, а не достраивать после развертывания. ↩
-
Высокорисковый ИИ (Приложение III к Закону ЕС об ИИ): Приложение III перечисляет конкретные случаи использования в таких областях, как биометрия, критическая инфраструктура, образование, занятость, основные услуги, правоприменение, миграция и правосудие. Классификация зависит от предполагаемого использования и критериев статьи 6, включая исключения для некоторых систем, которые существенно не влияют на решения или не создают значительного риска; системы профилирования внутри Приложения III остаются высокорисковыми. Одна лишь архитектура модели классификацию не определяет. ↩
-
GDPR (Общий регламент защиты данных), статьи 15 и 22: статья 22 ограничивает некоторые исключительно автоматизированные решения, которые порождают юридические или сходным образом существенные последствия, и для определенных исключений требует гарантий, включая человеческое вмешательство, возможность выразить свою точку зрения и возможность оспорить решение. Статья 15(1)(h) содержит право доступа к содержательной информации о логике такого автоматизированного принятия решений (European Parliament and Council of the European Union, 2016). Руководство Европейского совета по защите данных подчеркивает, что требуемый человеческий надзор должен быть содержательным, а не формальным «одобрением без проверки» (European Data Protection Board, 2018). Если 0,1 процента из 1 млн ежедневных решений обжалуются или эскалируются, система должна обрабатывать 1 000 случаев в день. Это допущение о нагрузке, а не частота ошибок модели. ↩
-
HIPAA (Закон о переносимости и подотчетности медицинского страхования): принят в 1996 году; требования Правила о конфиденциальности и Правила о безопасности устанавливают стандарты для защищенной медицинской информации (United States Congress, 1996); (U.S. Department of Health and Human Services, 2003; 2005). Защищенная медицинская информация (PHI) может использоваться для обучения при наличии применимого разрешения или другого разрешенного пути, например одобрения этического комитета (IRB) или Совета по конфиденциальности; обезличенные данные и ограниченные наборы данных при наличии соглашений об использовании данных дают дополнительные пути. Выходы модели могут оставаться PHI, если они идентифицируют людей или могут разумно их идентифицировать, а требования Правила о безопасности к хранению документации должны отражаться в дизайне аудита и доказательств. Размеры гражданских денежных штрафов градуируются и корректируются с учетом инфляции в соответствии с регламентом (U.S. Department of Health and Human Services, 2026). ↩
-
Сбой D·A·M у Zillow (данные · алгоритм · машина): списание Zillow в 2021 году — полезный системный пример, потому что задокументированный коммерческий сбой сочетал неопределенность прогноза с операционной реализацией (Zillow Group, 2021). Диагностика D·A·M трактует ось данных как несоответствие между историческими данными о продажах жилья и волатильностью цен в пандемию, ось алгоритма — как трудность ценообразования домов с надежными оценками неопределенности, а ось машины — как автоматизированный конвейер iBuying, которому требовались более жесткие ограничения мощности и автоматические выключатели. Это инженерная интерпретация публичного раскрытия информации Zillow, а не утверждение, что Zillow определила одну техническую первопричину. ↩
-
Зеленый ИИ (Green AI): (Schwartz et al., 2020) противопоставили «красный ИИ» (производительность любой ценой) и «зеленый ИИ» (эффективность как главная метрика). Ориентир роста вычислений взят из анализа трендов 2012–2018 годов в работе AI and Compute, где сообщалось о росте вычислений, использованных в крупнейших запусках обучения ИИ, в 300 000 раз (Amodei and Hernandez, 2018). Предложение о зеленом ИИ, то есть сообщать FLOP вместе с точностью для каждого опубликованного результата, переводит эффективность из инженерного предпочтения в научное обязательство отчетности. Это делает ресурсную стоимость предельного прироста точности видимой и сравнимой между исследовательскими группами. ↩
-
TCO (совокупная стоимость владения): TCO ML-системы включает разметку, мониторинг, переобучение, устранение проблем, энергию, аудиты и соответствие требованиям. При достаточном трафике регулярный вывод может доминировать над разовым счетом за обучение; баланс определяют загрузка и частота обновлений. ↩
-
ROI ML (окупаемость инвестиций): соотношения стоимости развертывания и обучения варьируются в зависимости от трафика, загрузки, оборудования, частоты обновлений, персонала и нагрузки от инцидентов. Подходящий выбор модели зависит от измеренной стоимости жизненного цикла и ценности задачи, а не от фиксированного соотношения. ↩
-
Методы, сохраняющие приватность: k-анонимность (Sweeney, 2002) гарантирует, что каждая запись неотличима по крайней мере от других записей по выбранным квазиидентификаторам; l-разнообразие добавляет разнообразие атрибутов внутри классов эквивалентности (Machanavajjhala et al., 2007); t-близость ограничивает расстояние между распределениями (Li et al., 2007). Эти синтаксические гарантии решают иные угрозы, чем дифференциальная приватность, и сами по себе не защищают от всех специфичных для ML утечек: модель, обученная на деидентифицированных данных, при некоторых условиях все равно может запоминать примеры или раскрывать сигнал принадлежности (Shokri et al., 2017). Дифференциальная приватность, напротив, ограничивает влияние одной записи в заданном механизме и при заданном бюджете приватности, предлагая семантическую гарантию, которая остается значимой при наличии побочной информации. Поэтому эти методы не образуют простой иерархии силы, а подходящая защита зависит от публикации, модели угроз и требований к полезности. ↩
-
Атака на принадлежность: атака использует поведение модели, чтобы вывести, появлялась ли запись в обучении; переобучение может усиливать этот сигнал (Shokri et al., 2017). На практике более высокая уверенность на обучающих примерах может помочь отличить членов обучающего набора от нечленов. Измеренная успешность атаки зависит от доступа к модели, распределения данных и допущений о защите. Успешная эмпирическая атака показывает практическую утечку, но сама по себе не доказывает нарушения заявленной границы . Формальная дифференциальная приватность следует из механизма и его учета. ↩
-
Федеративное обучение: (McMahan et al., 2017) ввели федеративное усреднение (FedAvg), при котором каждое устройство обучается локально и передает обновления модели, а не сырые записи. Эта архитектура может ограничить регулярную передачу сырых данных, но это не гарантия приватности: обновления модели могут раскрывать информацию об обучении через атаки восстановления (Zhu et al., 2019). Поэтому федеративное обучение может сочетаться с безопасной агрегацией, дифференциальной приватностью и средствами контроля хранения в эшелонированной защите, гарантии которой зависят от всего протокола. ↩
-
Системы родословной данных: Apache Atlas и DataHub собирают метаданные о потоках данных из выполнения конвейеров, создавая графы, в которых узлы — наборы данных, а ребра — преобразования. Статья 30 GDPR требует вести записи о деятельности по обработке (European Parliament and Council of the European Union, 2016), а не автоматической родословной на уровне моделей как таковой. Тем не менее родословная помогает определить кандидатов на производные артефакты для удаления, ограничения, переобучения или юридической проверки, когда поступает применимый запрос. ↩
-
Журнал аудита: целостность аудита требует контроля от несанкционированного изменения, но обязанности по хранению и удалению различаются по типам записей и законам. Хранилище объектов только для добавления с политиками хранения или цепочки криптографических хешей могут обеспечить доказательство несанкционированного изменения, не создавая универсального правила, что записи никогда не удаляются. Крупная платформа может записывать миллиарды событий в день; правило безопасности HIPAA также накладывает многолетние обязанности хранения документации для обязательных политик и процедур (U.S. Department of Health and Human Services, 2005). Планирование хранения должно различать записи, которые нужно сохранить, и персональные данные, которые нужно минимизировать или удалить. ↩
Заключение
Назначение
Что дает владение всем стеком, чего не дает экспертиза в одном слое?
Одно продакшен-решение проходит через весь стек. Конвейер данных определяет, какие события считаются обучающим сигналом. Этот сигнал формирует архитектуру, а та задает объем памяти и арифметическую интенсивность. Эти свойства ограничивают выбор аппаратуры, стратегию квантования, задержку обслуживания, мониторинг дрейфа и обязательства по управлению. Освоенный по отдельности, каждый слой — ценный навык. Освоенные вместе, слои дают способность рассуждать на стыках. Инженер, который понимает только сжатие, может уменьшить модель, но не может предсказать, важна ли потеря точности для контекста развертывания. Инженер, который понимает только обслуживание, может оптимизировать задержку, но не может проследить регрессию производительности до изменения конвейера данных тремя этапами выше по потоку. Дисциплина инженерии ML-систем — это умение видеть эти связи там, где оптимизация одной команды становится ограничением для другой. Принципы, управляющие этими взаимодействиями — распространение ограничений, стена памяти, перекос обучения и обслуживания, накладные расходы диспетчеризации, стоимость коммуникации и жизненные циклы эксплуатации, — не привязаны ни к конкретному фреймворку, ни к поколению аппаратуры, ни к семейству моделей. Технологии меняются, а лежащие в основе физические ограничения и компромиссы сохраняются. В терминах D·A·M сохраняется способность взглянуть на систему, которой еще не существует, и рассуждать о том, как ограничения ее данных, алгоритма и машины будут взаимодействовать, где возникнут узкие места и какие проектные решения окажутся необратимыми. Мышление системами, а не отдельными компонентами, отличает инженера, который может построить деталь, от того, кто может построить целое.
Цели обучения
- Синтезировать основные принципы ML-систем в рамку для рассуждений об ограничениях данных, алгоритма и машины
- Проследить, как решения о данных, архитектуре, сжатии, аппаратуре, обслуживании, эксплуатации и управлении распространяют ограничения через ML-систему
- Применять рассуждения на маячных моделях для диагностики узких мест в облачных, мобильных, периферийных, рекомендательных и TinyML-развертываниях
- Оценивать компромиссы развертывания, используя бюджеты задержки, перемещение памяти, дрейф, ответственность и ограничения устойчивости
- Проектировать системный подход к новым контекстам, прежде чем стоимость координации в масштабе парка станет доминирующей
Синтез ML-систем
Развертывание модели классификации изображений на парке мобильных устройств показывает, как межслойные взаимодействия возникают в эксплуатации. Команда архитектуры выбрала раздельные по глубине свертки, чтобы отделить пространственную фильтрацию от проекции по каналам и сократить число арифметических операций. Команда сжатия квантовала веса и активации в INT8, чтобы уменьшить трафик памяти и уложиться в SRAM на кристалле. Команда обслуживания выполнила целевую p99-задержку 50 мс. Каждая команда добилась успеха по своей локальной метрике, однако через несколько недель точность упала на четыре процентных пункта на отдельных когортах прошивок и устройств. Причиной стало непредвиденное взаимодействие между отсечением динамического диапазона в схеме квантования и подпрограммой интерполяции в специфическом для прошивки пути предобработки изображений. Ни один компонент не отказал сам по себе: конвейер данных, архитектура, схема сжатия, исполняющая среда ускорителя и инфраструктура мониторинга оказались связаны в эксплуатации.
Ответственная инженерия управляет всем жизненным циклом системы — спецификацией, тестированием, мониторингом во время работы и аудитом по подгруппам, — а не выступает внешним этапом постобработки. ML-системы принципиально отличаются от традиционного программного обеспечения, потому что статистическая производительность физически неотделима от конвейеров и аппаратуры, которые обучают, обслуживают и отслеживают модель.
В центре этой дисциплины стоит железный закон систем машинного обучения (принцип «Железный закон систем машинного обучения»). Его три члена — перемещение данных, вычисления и накладные расходы — служат основными инженерными рычагами для количественного анализа. Построение интеллекта требует как статистических алгоритмов, так и соблюдения кремниевого контракта (принцип «Кремниевый контракт») — физического соглашения между моделью и машиной, на которой она исполняется. Арифметическая интенсивность и моделирование Roofline превращают качественные интуитивные представления о производительности в точные инженерные границы (Williams et al., 2009).
Системные возможности возникают из совместного проектирования триады данных, алгоритма и машины (D·A·M), а не из изолированных алгоритмических прорывов. Машинное обучение принадлежит традиции системной инженерии, в которой надежное исполнение возникает из координации взаимозависимых компонентов при физических ограничениях. Архитектура трансформеров ввела семейство моделей на основе внимания (Vaswani et al., 2017), а крупные языковые модели, такие как GPT-3 и Llama 2, показали, как это семейство выросло в центральную нагрузку современных ML-систем (Brown et al., 2020; Touvron et al., 2023). Одного математического замысла недостаточно, чтобы объяснить практическую полезность. Для ее получения пришлось совместно спроектировать механизм внимания с топологиями распределенных коммуникаций, тайлинг иерархии памяти для обхода узких мест пропускной способности памяти и исполнительные блоки низкой точности.
Интеграция имеет конкретные последствия. Программная инженерия часто рассматривает «модель» как контрольную точку весов: блоб из 500 МБ вещественных чисел. В эксплуатации, однако, веса — лишь один компонент истинной модели, и часто не самый хрупкий. Модель с высокой точностью на бенчмарке выходит из строя, если получает поврежденные признаки, а модель, которая аккуратно сходится при обучении, выходит из строя, если не укладывается в ограничения задержки развертывания. Истинная модель — это сумма конвейера данных, определяющего, что видит обучаемый, инфраструктуры обучения, управляющей оптимизацией, системы обслуживания, которая посредничает при выводе, и операционного контура, отслеживающего статистический дрейф. Оптимизируйте систему — и модель улучшится. Пренебрегите системой — и модель деградирует. Системная инженерия — это физическое воплощение машинного обучения: система и есть модель.
Системное мышление
Зависимости системы, петли обратной связи и путь запроса делают ее границы проверяемыми.
Интеграция
- Зависимости: можете ли вы проследить изменение конвейера данных через обучение и обслуживание до его влияния на задержку?
- Петли обратной связи: поняли ли вы, как предсказания модели влияют на ее будущие обучающие данные?
Целостность
- Сквозная проверка: можете ли вы проследить путь пользовательского запроса от интерфейса через сеть, предобработку, модель и постобработку обратно к интерфейсу?
Сквозная трассировка запроса показывает ту же мысль структурно: границы системы определяют возможности модели, потому что каждый слой ML-стека накладывает физические и статистические ограничения на следующий. Вычислительная основа начинается с данных: курирование («Инженерия данных») и отбор («Отбор данных») ограничивают информацию, доступную обучаемому, а нейронные представления («Вычисления в нейронных сетях») и архитектуры сетей («Архитектуры нейронных сетей») переводят статистические априорные предположения в конкретные тензорные графы. Системы обучения («Обучение моделей») и фреймворки исполнения («Фреймворки машинного обучения») переносят эти графы на физическое оборудование, превращая математическую оптимизацию в запланированные вызовы ядер и выделения памяти.
На уровне кремния инженерная задача смещается к перенастройке физических границ. Сжатие моделей («Сжатие моделей») перестраивает фронт Парето по точности, объему памяти и задержке; аппаратные ускорители («Аппаратное ускорение») проверяют, способны ли пропускная способность памяти и арифметические блоки поддерживать расписание исполнения; а строгий бенчмаркинг («Бенчмаркинг») отделяет реальные аппаратные ускорения от артефактов измерения. В эксплуатации инфраструктура обслуживания («Обслуживание моделей») должна укладываться в бюджеты хвостовой задержки при пакетном трафике, операционный мониторинг («MLOps») обнаруживает статистический дрейф, а ответственная инженерия («Ответственная инженерия») проверяет справедливость по подгруппам там, где совокупные метрики скрывают локальную деградацию. Эти области образуют непрерывный, связанный конвейер: от инженерии данных через системы обучения и инфраструктуру развертывания к операциям во время работы и управлению.
Главный урок — связанность ограничений: решения никогда не остаются локальными. Выбор архитектуры открывает стратегию сжатия, которая ограничивает понижение уровня до ускорителя, задает задержку обслуживания и определяет требования к операционному мониторингу. Раздельные по глубине свертки MobileNetV2 были нацелены на эффективный мобильный вывод для зрения (Sandler et al., 2018), а квантование с целочисленной арифметикой сделало развертывание в INT8 практичным путем вывода (Jacob et al., 2018). Это сочетание позволяет исполнять модель на мобильных NPU, задает ограничение p99-задержки 50 мс и требует отслеживать дрейф на разнородном сенсорном оборудовании и прошивках устройств. Решения распространяются вниз по потоку. Инженер, который оптимизирует один слой изолированно, не может предсказать, как вмешательства расходятся по системе.
Архитектурные решения каскадно влияют на сжатие, обслуживание, дрейф и управление.
Диагностика этих каскадных взаимодействий требует конкретных карт ограничений. Опора на репрезентативные нагрузки показывает, как физические границы определяют архитектурные решения, расписания исполнения и операционные компромиссы по всему стеку.
Маячные модели: распространение ограничений
Пять маячных моделей («Железный закон систем машинного обучения») задают распространение ограничений на конкретных профилях исполнения:
Каждая нагрузка раскрывает собственное физическое узкое место на всем спектре исполнения:
- ResNet-50: размер батча превращает вывод для изображений из работы, ограниченной перемещением весов, в матричную пропускную способность, ограниченную вычислениями. Одни и те же веса фильтров используются для нескольких входов, и стоимость переноса памяти амортизируется, пока арифметическая интенсивность не пересечет точку перехода (ridge point) аппаратуры.
- GPT-2/Llama: авторегрессивное декодирование при малом батче упирается в пропускную способность памяти из-за низкого повторного использования весов; батчинг, планирование предзаполнения и параллелизм моделей сдвигают лимитирующее ограничение.
- MobileNetV2: раздельные по глубине свертки и квантование INT8 обменивают емкость представления на развертывание на мобильном NPU в тепловых рамках милливаттного диапазона.
- DLRM: таблицы вложений терабайтного масштаба делают емкость памяти лимитирующим ограничением наравне с пропускной способностью памяти, вынуждая системы проектироваться вокруг уровней памяти и разреженных паттернов доступа.
- Распознавание ключевых слов (KWS)/Wake Vision: модели для микроконтроллеров объемом менее мегабайта с постоянным выводом при бюджетах мощности в милливатты не допускают лишнего трафика памяти и накладных расходов диспетчеризации.
Вместе эти пять нагрузок охватывают спектр развертывания от дата-центров масштаба склада до микроконтроллеров и раскрывают узкие места, которые диагностируют количественные принципы. Прослеживание этих нагрузок через архитектуру, обучение, оптимизацию и обслуживание формирует целостный взгляд, отличающий инженерию ML-систем от изолированной разработки алгоритмов.
«Путь маячной модели (MobileNetV2)» прослеживает эту последовательность для MobileNetV2 и показывает, как межслойные ограничения сходятся в одном инженерном артефакте. На семи этапах — от базовых ограничений через архитектуру, обучение, сжатие, ускорение, обслуживание и эксплуатацию во время работы — каждое инженерное решение определяет варианты, доступные дальше по потоку.
| Этап пути | Системный ракурс | Реализация MobileNetV2 |
|---|---|---|
| Основы («Введение») | Триада ИИ | Ограничено свойствами машины (батарея, тепло) |
| Архитектура («Архитектуры нейронных сетей») | Алгоритмическая эффективность | Раздельные по глубине свертки: в типичном слое 3×3 с 256 выходными каналами — в 8,7 раза меньше FLOP, а в масштабе ImageNet — в 13,7 раза меньше операций, чем у ResNet-50 |
| Обучение («Обучение моделей») | Пропускная способность и задержка | Оптимизирована под задержку одного запроса на мобильном устройстве; аугментация данных может повысить устойчивость |
| Сжатие («Сжатие моделей») | Навигация по фронту Парето | Квантование INT8: FP32 занимает в 4 раза, а FP16 — в 2 раза больше памяти на значение, чем INT8; точность перепроверяется для каждого развертывания |
| Ускорение («Аппаратное ускорение») | Соблюдение кремниевого контракта | Размещение ядер на мобильных NPU (например, Apple Neural Engine) для максимальной загрузки аппаратуры |
| Обслуживание («Обслуживание моделей») | Соблюдение бюджета задержки | Ограничение мс; оптимизация предобработки (изменение размера, нормализация) для устранения узких мест CPU |
| Эксплуатация («MLOps») | Управление энтропией системы | Мониторинг дрейфа: обнаружение сдвигов распределения и отслеживание точности по когортам в разнородных парках устройств и при разном освещении |
Путь маячной модели (MobileNetV2): проследив одну модель через семь этапов стека систем, видно, как решения в одной области (например, в архитектуре) переносят ограничения и возможности в смежные области (например, в ускорение и мониторинг).
Решения в одной строке определяют варианты в следующей: выбор архитектуры (раздельные по глубине свертки) открывает стратегии сжатия (квантование INT8), которые, в свою очередь, делают возможным ускорение на мобильных NPU. Это распространение ограничений универсально для нагрузок машинного обучения. Формализация этих компромиссов требует количественных принципов — от точных физических границ через эмпирические разложения до диагностик, зависящих от допущений.
Тринадцать количественных принципов
Рассуждения о поведении ML-систем требуют количественных инструментов. Эти тринадцать количественных принципов намеренно сочетают точные математические границы, инженерные разложения, подогнанные эмпирические модели, политические ограничения и эвристики проектирования. «Тринадцать количественных принципов» сводит все тринадцать принципов по четырем этапам системного цикла. Их полезность зависит от строгого применения в заявленных допущениях, а не от восприятия каждого соотношения как неизменного физического закона.
| Принцип | Краткое название | Часть | Ключевое соотношение или утверждение | Что предсказывает |
|---|---|---|---|---|
| «Данные как код» | Принцип «данные как код» | I: Основы | Поведение (данные, алгоритм, код, случайность) | Данные меняют поведение; важны и другие входы |
| «Гравитация данных» | Принцип гравитации данных | I: Основы | Переносить вычисления к данным, когда повторные передачи стоят дороже размещения | Зависит от объема, повторного использования, сети и мобильности вычислений |
| «Железный закон систем машинного обучения» | Железный закон систем машинного обучения | II: Построение | ; перекрытие этапов меняется от максимума до суммы | Этапы могут складываться или перекрываться |
| «Кремниевый контракт» | Кремниевый контракт | II: Построение | ; сравнить с | Диагностирует работу, ограниченную пропускной способностью или вычислениями |
| «Фронт Парето» | Фронт Парето | III: Оптимизация | Никакая отличная конфигурация не доминирует точку фронта | |
| «Закон арифметической интенсивности» | Закон арифметической интенсивности | III: Оптимизация | Больше вычислений не поднимает потолок пропускной способности | |
| «Инвариант энергии перемещения» | Инвариант энергии перемещения | III: Оптимизация | ; отношение стоимости DRAM к FLOP: 173–582 | Полная энергия зависит от числа событий и их стоимости |
| «Закон Амдала» | Закон Амдала | III: Оптимизация | Последовательная доля ограничивает все выигрыши от параллелизма | |
| «Разрыв верификации» | Разрыв верификации | IV: Развертывание | Указать расстояние, допуск, популяцию и доверительную вероятность | |
| «Диагностика статистического дрейфа» | Диагностика статистического дрейфа | IV: Развертывание | Локальная подгонка; дрейф не обязан снижать качество | |
| «Диагностика перекоса обучения и обслуживания» | Диагностика перекоса обучения и обслуживания | IV: Развертывание | Расхождение выходов сигнализирует о риске, а не о потере точности | |
| «Принцип бюджета задержки» | Принцип бюджета задержки | IV: Развертывание | SLO продукта выбирает и его бюджет | |
| «Модель смещения обратной связи» | Модель смещения обратной связи | IV: Развертывание | с подогнанным | Обратная связь может усиливать вред; измеряйте и вмешивайтесь |
Тринадцать количественных принципов: каждый инструмент появляется в части, где его управляющее ограничение или диагностическое применение становится видимым впервые. Набор сочетает границы, разложения, подогнанные модели, политические требования и эвристики. Каждая строка полезна только в заявленных допущениях; вместе они дают общий аналитический словарь для проектирования, оптимизации и развертывания, а не набор универсальных инвариантов.
Тринадцать принципов не являются независимыми аксиомами. Они образуют целостную рамку, связанную одним метапринципом — эвристикой сохранения сложности.1 Сложность, убранная из одного интерфейса, часто возникает в другой части системы, однако это не физический закон сохранения и не означает, что каждое упрощение имеет равную компенсирующую цену. Ее ценность диагностическая: после упрощения одного компонента проверьте, где изменились валидация, состояние, координация или эксплуатационная нагрузка. Критерий проверки — объясняют ли принципы одни и те же маячные узкие места с точки зрения данных, модели, аппаратуры и развертывания, не противореча друг другу.
Основы: откуда берется сложность (принципы 1–2)
Принцип «данных как кода» («Данные как код») и эвристика гравитации данных (принцип «Гравитация данных»), разобранные в «Инженерии данных», устанавливают данные как первичную логическую программу и физический якорь. Поведение во время работы отражает данные, алгоритм и реализацию вместе, а размещение вычислений у данных уравновешивает объем передачи, частоту повторного использования, пропускную способность сети и мобильность вычислений. Поведение модели и архитектура напрямую наследуют ограничения этой основы данных.
Маячные модели иллюстрируют оба принципа. ResNet-50 и GPT-2 получают свои возможности от архитектуры, связанной с массивными обучающими корпусами. Таблицы вложений DLRM терабайтного масштаба делают емкость памяти главным проектным ограничением, требуя, чтобы система исполнения проектировалась вокруг того, где физически находятся данные. Размещение вычислений у данных повторяется в разных средах развертывания именно потому, что перенос больших наборов данных с малым повторным использованием перегружает межсоединения.
Построение: как сложность становится вычислением (принципы 3–4)
Железный закон (принцип «Железный закон систем машинного обучения») и кремниевый контракт (принцип «Кремниевый контракт») управляют эффективностью исполнения. Разложение железного закона на три члена («Железный закон систем машинного обучения») выделяет перемещение данных, вычисления и накладные расходы; кремниевый контракт показывает, какой член ограничивает производительность для данной пары «архитектура–аппаратура». Нагрузки занимают разные режимы: пакетный вывод ResNet-50 загружает вычислительные блоки, декодирование Llama при малом батче упирается в пропускную способность памяти, DLRM исчерпывает емкость памяти, а MobileNetV2 перестраивает тензорные операции так, чтобы исполняться в пределах возможностей мобильного NPU. Как показано в разделе «Диагностика узких мест» приложения «Таксономия D·A·M», диагностика того, является ли путь исполнения ограниченным вычислениями, пропускной способностью или емкостью, определяет, какие оптимизации дают ускорение, а какие тратят инженерные усилия впустую. Задержка обучения падает быстрее всего, когда инженеры воздействуют на лимитирующий член напрямую, а не распределяют усилия равномерно («Обучение моделей»).
Оптимизация: как ограничения определяют компромиссы (принципы 5–8)
Четыре принципа оптимизации образуют тесно связанную цепочку диагностики. Фронт Парето (принцип «Фронт Парето») выделяет недоминируемые компромиссы после нормализации направлений целевых функций: квантование обменивает точность на трафик памяти, прореживание — емкость на скорость, дистилляция — вычисления обучения на эффективность вывода. Закон арифметической интенсивности (принцип «Закон арифметической интенсивности») диагностирует, вычисления или пропускная способность задают идеальный потолок. Инвариант энергии перемещения (принцип «Инвариант энергии перемещения») сочетает стоимость отдельного события с числом событий: при эталонных аппаратных константах одно обращение к DRAM стоит примерно в 173–582 раза больше, чем одна арифметическая операция FP32/FP16, но доминирование в полной стоимости нагрузки зависит от того, сколько операций каждого вида выполняется. Закон Амдала (принцип «Закон Амдала») задает потолок любого выигрыша от параллелизма, объясняя, почему загрузка данных и предобработка могут стать узкими местами в сильно оптимизированных системах.
MobileNetV2 («Архитектуры нейронных сетей») уравновешивает все четыре принципа одновременно. Раздельные по глубине свертки перестраивают фронт Парето (Sandler et al., 2018). Квантование INT8 использует закон арифметической интенсивности, повышая арифметическую интенсивность за счет сокращения трафика памяти (Jacob et al., 2018). Полученная экономия энергии соответствует инварианту энергии перемещения, а закон Амдала ограничивает сквозное ускорение, когда предобработка на стороне хоста остается неускоренной. Нагрузки на микроконтроллерах, такие как KWS, усиливают эти компромиссы еще сильнее: они работают с памятью менее одного мегабайта и почти без запаса на лишние операции.
Развертывание: как реальность опровергает допущения (принципы 9–13)
Принципы развертывания касаются сбоев, которые тестирование на стенде не может исключить: система может работать корректно на стенде и незаметно отказывать в эксплуатации. Разрыв верификации (принцип «Разрыв верификации») означает, что статистическая верификация действительна только для заявленной популяции развертывания, расстояния задачи, допуска, целевой ошибки и процедуры доверительного оценивания на конечной выборке; тестирование оценивает поведение, но не доказывает корректность для каждого будущего входа. Диагностика статистического дрейфа (принцип «Диагностика статистического дрейфа») обнаруживает изменение распределения, но не определяет, ухудшается ли точность, остается ли постоянной или растет; поэтому кривая локальной деградации валидна, только если подогнана по исходам. Диагностика перекоса обучения и обслуживания (принцип «Диагностика перекоса обучения и обслуживания») также служит индикатором риска, а не универсальным уравнением потери точности, хотя различия предобработки или численные расхождения все же могут менять качество. Бюджет задержки (принцип «Принцип бюджета задержки») ограничивает обслуживание квантилью, выбранной требованием продукта, — это может быть p95, p99 или другая мера хвоста. Наконец, модель смещения обратной связи (принцип «Модель смещения обратной связи») может описывать усиление неравенства, но экспоненциальная рекуррентность требует измеренного, примерно постоянного коэффициента обратной связи и отсутствия эффективного вмешательства.
Пять принципов развертывания управляют инструментами эксплуатации, рассмотренными в главе «MLOps»: инфраструктура мониторинга, обнаружение дрейфа, хранилища признаков и метрики с разбивкой по подгруппам существуют, чтобы выявлять незаметные сбои и запускать корректирующие действия. Система рекомендаций, которая достигает высокой точности офлайн, все равно нуждается в проверках паритета, когда перекос обучения и обслуживания портит конвейеры признаков (принцип «Диагностика перекоса обучения и обслуживания»), и в аудите исходов, когда поведение пользователей меняется по сезонам (принцип «Диагностика статистического дрейфа»). Обслуживание больших языковых моделей должно ограничивать хвостовую задержку непрерывным батчингом и спекулятивным декодированием («Обслуживание моделей»), чтобы не нарушать SLO продукта. Аналогично автоматизированная кредитная модель может удовлетворять целям по пропускной способности и сходимости и при этом систематически накапливать неравенство для недообслуживаемых групп, поэтому нужен мониторинг с разбивкой по подгруппам, чтобы перехватывать петли обратной связи (принцип «Модель смещения обратной связи»).
Интегрированная рамка
Тринадцать принципов — не контрольный список для последовательного применения. Они образуют сеть взаимных ограничений. Эвристика сохранения сложности побуждает инженеров искать, куда локальное упрощение переносит издержки.
Квантование модели из FP16 в INT8 показывает, как эти взаимные ограничения работают на практике. Это единственное вмешательство проходит по фронту Парето (принцип «Фронт Парето»), обменивая численную точность на трафик памяти. Последствия расходятся по всему стеку: квантование меняет кремниевый контракт модели (принцип «Кремниевый контракт»), сдвигая ее рабочую точку на кривой арифметической интенсивности (принцип «Закон арифметической интенсивности»), и меняет ее энергетический профиль (принцип «Инвариант энергии перемещения»). В эксплуатации бюджет задержки (принцип «Принцип бюджета задержки») определяет, отвечает ли полученное ускорение целевому уровню обслуживания (SLO), а разрыв верификации (принцип «Разрыв верификации») требует проверить, что понизившийся по уровню граф обслуживания сохраняет точность, измеренную при тестировании сжатия.
Эта трассировка не требует, чтобы все принципы действовали одновременно. Она показывает, как релевантные принципы становятся активными по мере того, как решение переходит от представления модели к исполнению на аппаратуре и затем к валидации в производстве. Размещение данных влияет на то, где модель может работать; закон Амдала ограничивает, насколько более быстрое ядро улучшит весь путь запроса; верификация ограничивает возникающую потерю точности; а мониторинг исходов проверяет, сохраняется ли валидированное поведение после развертывания. Задача инженера — проследить вытесненные издержки по всему стеку, а не считать, что сложность просто исчезает.
Оценка предложения о развертывании делает эту сеть ограничений конкретной.
Применение принципов
Коллега предлагает квантовать вашу модель из FP32 в INT8, чтобы снизить стоимость обслуживания.
Проследите принципы
- Фронт Парето (принцип «Фронт Парето»): какую точность вы обмениваете на выигрыш по пропускной способности?
- Кремниевый контракт (принцип «Кремниевый контракт»): эффективно ли целевая аппаратура ускоряет нужные операторы INT8?
- Разрыв верификации (принцип «Разрыв верификации»): сохраняет ли квантованный артефакт обслуживания поведение, принятое при тестировании сжатия?
- Бюджет задержки (принцип «Принцип бюджета задержки»): укладывает ли ускорение вас в SLO или создает запас для батчинга?
«Цикл систем машинного обучения (13 принципов)» отображает этот цикл взаимных ограничений. Четыре этапа — основы, построение, оптимизация и развертывание — окружают центральный узел, представляющий эвристику сохранения сложности. Стрелки показывают, как инженерные решения распространяются вниз по потоку: ограничения построения определяют стратегии оптимизации, а сигналы во время работы — статистический дрейф, перекос признаков и регрессии исходов — возвращаются в основы. Управление этим циклом требует направлять вытесненную сложность в слои, которые способны справиться с ней эффективно.
Петля обратной связи от развертывания к основам центральна для инженерии в эксплуатации. Принципы 9–13 выявляют сигналы, которые запускают точечные исправления: откаты канареечного развертывания, резервные эвристики, дополнение датасета, переобучение модели или перенастройку ядер. При аномалиях инженеры диагностируют первопричины, а не запускают некалиброванные откаты. Этот цикл определяет проектирование одной системы: цель не в том, чтобы каталогизировать каждую будущую архитектуру, а в том, чтобы сделать петли обратной связи наблюдаемыми до того, как эксплуатационные сбои начнут накапливаться.
Цикл систем машинного обучения (13 принципов): четырехэтапный жизненный цикл системной инженерии, организованный вокруг эвристики сохранения сложности. Этапы связаны петлей обратной связи, а тринадцать принципов сгруппированы вдоль переходов как границы, разложения, подогнанные модели, политические требования и эвристики проектирования, допущения которых нужно проверять.
Трассировка предложения о квантовании через четыре принципа — это один диагностический проход; та же привычка применима и тогда, когда узкое место — не предложение оптимизации, а стоимость обслуживания одного сгенерированного токена.
Стоимость токена
Задача: применив железный закон (принцип «Железный закон систем машинного обучения») и закон арифметической интенсивности (принцип «Закон арифметической интенсивности») к обслуживанию одного токена модели Llama 2 70B с 70 миллиардами параметров, веса которой в FP16 равномерно разделены между двумя NVIDIA H100, определите, какая идеализированная нижняя граница больше: перенос памяти или пиковые вычисления? Характеристики H100 приведены в разделе «Шпаргалка по аппаратуре ИИ (современный справочник)» приложения «Основы машины». Этот расчет не учитывает трафик KV-кэша, активации, зависящие от контекста операции внимания по KV, коммуникацию между ускорителями и накладные расходы диспетчеризации.
Физика:
- Объем перемещаемых байтов весов модели : 70 миллиардов параметров × 2 байта (FP16) = 140 ГБ.
- Вычисления : GFLOP на токен, где — число параметров.
- Аппаратура: два H100 с совокупной пропускной способностью ТБ/с и TFLOP/s для FP16.
Расчет:
- Время перемещения данных:
- Время вычислений:
Системный вывод:
Идеализированная нижняя граница переноса памяти в 295,2 раза больше нижней границы пиковых вычислений . При такой модели с батчем из одного запроса декодирование сильно ограничено пропускной способностью: арифметическая интенсивность составляет примерно 1 FLOP на байт. Каждый 2-байтовый вес FP16 извлекается из памяти высокой пропускной способности, чтобы выполнить одно умножение с накоплением () с активацией текущего токена, поэтому арифметическая интенсивность равна . Это намного ниже точки перехода двух H100, которая составляет около 295 FLOP на байт. Тензорные ядра проводят более 99 процентов тактов в ожидании данных. Батчинг может повысить повторное использование, а квантование — снизить трафик весов. Оптимизация одного лишь исполнения вычислений может сократить реальное время вычислений к нижней границе 0,07 мс, но не уменьшит нижнюю границу переноса памяти в 20,9 мс.
При этой модели нижней границы для батча из одного запроса декодирование лежит слева от точки перехода Roofline, в режиме, ограниченном пропускной способностью.
Эта оценка Roofline показывает, как физические границы работают как диагностические инструменты, а не как абстрактные таксономии. В трех основных инженерных областях — построении основ, инженерии для масштаба и навигации по реальности эксплуатации — эти границы, эмпирические модели и эвристики определяют проектирование системы и устойчивость ее работы.
Принципы на практике
Команда, которая запомнила все тринадцать принципов, но не может определить их допущения или применить их к реальному решению о развертывании, ничего не усвоила. Проверка одинакова для трех областей, охватывающих жизненный цикл ML: построение технических основ, инженерия для масштаба и навигация по реальности эксплуатации. Системное мышление связывает то, что не под силу анализу изолированных компонентов.
Построение технических основ
Принцип «данные как код» («Данные как код») делает операционным факт, что наборы данных и конвейеры данных действуют как исполняемые программы («Инженерия данных»). Это перекликается с формулировкой Software 2.0 Карпаты (Karpathy, 2017), хотя логика обслуживания и состояние алгоритма тоже определяют поведение. Примитивы нейронных вычислений («Вычисления в нейронных сетях») задают арифметическую интенсивность матричных умножений, и их положение относительно точки перехода аппаратуры определяет, ограничено ли исполнение пропускной способностью или вычислениями. Выбор фреймворка («Фреймворки машинного обучения») напрямую задает кремниевый контракт: каждый исполняющий движок ограничивает оптимизацию графа, размещение в памяти, поддержку целевых бэкендов и дальнейшие пути развертывания. Выбор фреймворка без оценки этих границ исполнения рискует закрыть путь к высокопроизводительному выводу.
Фундаментальные решения (какие данные курировать, на какие вычислительные примитивы опираться, какой фреймворк принять) распространяются на последующие инженерные решения. Это распространение становится особенно заметным, когда система должна масштабироваться за пределы одной машины, а три члена железного закона расширяются от величин уровня микросхемы до ограничений уровня кластера.
Инженерия для масштаба
Распределенные системы обучения демонстрируют железный закон в действии («Обучение моделей»): параллелизм данных масштабирует пропускную способность вычислений по ускорителям ценой коллективных коммуникаций, смешанная точность вдвое сокращает перемещение памяти за счет представления тензоров в FP16 или BF16, а контрольные точки активаций обменивают перевычисления на емкость памяти. Каждая техника воздействует на конкретный член железного закона. Аналогично сжатие моделей («Сжатие моделей») напрямую исследует фронт Парето: квантование INT8 для MobileNetV2 и прореживание вложений для DLRM обменивают численную точность или емкость параметров на экономию пропускной способности, а закон арифметической интенсивности определяет, даст ли это снижение реальное ускорение на целевой аппаратуре.
Однако построение и оптимизация модели — лишь половина инженерной задачи. Вторая половина начинается в тот момент, когда модель покидает обучающий кластер и попадает в эксплуатацию, где статистические требования, подогнанные диагностики и политики SLO определяют поведение, а оптимизации, которые работали на стенде, должны пережить непредсказуемость реального трафика.
Навигация по реальности эксплуатации
Переход от обучения к выводу часто меняет цели оптимизации: там, где обучение максимизирует пропускную способность в течение дней, интерактивный вывод может оптимизировать выбранную квантиль хвоста задержки в миллисекундах. Иллюстративный сценарий использует среднюю задержку 50 мс и p99 2000 мс, поэтому выбранный хвост в 40 раз больше среднего; другой продукт может задавать p95, p99,9 или отдельные сроки по классам запросов. Анализ хвостовой задержки показывает, почему средняя задержка может скрывать запросы, которые определяют пользовательский опыт (Dean and Barroso, 2013). В обслуживании ML всплески хвоста могут возникать из-за пауз сборщика мусора в фреймворках вывода на Python, из-за динамического батчинга, который при неравномерном трафике формируется неоптимально, или из-за авторегрессионной генерации, в которой длинный промпт или длинный вывод требуют гораздо больше работы, чем типичный короткий ответ.
Средняя задержка скрывает хвост; выбранная квантиль хвоста определяет SLO.
Технические границы производительности описывают лишь часть эксплуатационной рамки; проектирование системы охватывает и общественное влияние («Ответственная инженерия»). Верификация требует непрерывного аудита на нарушения справедливости наравне с пропускной способностью: отслеживания распределений предсказаний по демографическим когортам, обнаружения усиления смещения во времени (принцип «Модель смещения обратной связи») и оповещений о неравенстве между подгруппами. Мониторинг дрейфа по подгруппам необходим, потому что точность может резко падать для недостаточно представленных групп, даже когда совокупные метрики остаются стабильными. Ответственная инженерия — это эксплуатационное требование, а не внешняя этическая экспертиза: это ограничение проектирования первого класса, которое подчиняется той же дисциплине измерений, что и задержка и пропускная способность.
Эти три области делают тринадцать принципов прагматичными инструментами, а не жесткими аксиомами. Вопрос в том, где их допущения начнут работать дальше, по мере того как ML-системы выходят на разнородные цели развертывания, сталкиваются с враждебными условиями и строят все более сложные композиции.
Будущие направления
Рамка наиболее полезна, когда она прогнозирует, где ограничения могут начать работать дальше. Три области усиливают давление той же физики: развертывание в разнообразных контекстах, устойчивость к враждебным условиям (Goodfellow et al., 2015) и общественные приложения, сбои которых имеют общественные последствия. Четвертый горизонт — системы, которые компонуют несколько моделей, инструментов и верификаторов или выходящие за пределы одной машины, — расширяет ту же оптику, а не заменяет ее.
Применение принципов к новым контекстам развертывания
Разнообразие развертываний проверяет, способна ли одна количественная рамка объяснить системы с контрастными ресурсными режимами. Облако предлагает изобилие энергии и централизованную аппаратуру, периферийные и мобильные устройства работают в рамках бюджетов задержки и батареи, а TinyML и встраиваемые системы сжимают ту же проектную задачу до килобайт и милливатт. Генеративный ИИ — не пятая среда развертывания; это класс нагрузок, который нагружает все четыре.
В облачном режиме решающий вопрос в том, как превратить изобилие аппаратуры в полезную пропускную способность, не позволяя перемещению данных, емкости или стоимости доминировать. Плотные нагрузки, такие как ResNet-50, стремятся к загрузке GPU за счет слияния ядер, обучения со смешанной точностью и сжатия градиентов, тогда как системы рекомендаций в духе DLRM должны дополнительно управлять емкостью, размещением и разреженными паттернами доступа к таблицам вложений. Эти методы сочетают сжатие моделей («Сжатие моделей») и распределенное исполнение («Обучение моделей»), чтобы поддерживать высокую арифметическую интенсивность и балансировать эксплуатационные расходы в масштабе.
Мобильные и периферийные устройства, напротив, работают при строгих границах по мощности, теплу и памяти, и это требует совместного проектирования аппаратуры и программ. Эффективные архитектуры сетей («Архитектуры нейронных сетей») в сочетании со сжатием моделей («Сжатие моделей») позволяют развертывание на платформах, где эталонное мобильное устройство имеет примерно в 10 раз меньшую емкость памяти и примерно в 140 раз меньший энергобюджет, чем ускоритель класса H100. Периферийное развертывание обязательно, когда задержка, приватность, нестабильное соединение или пропускная способность исходящего трафика делают централизованный облачный вывод невозможным. В этих режимах эффективность определяет осуществимость, а не незначительную оптимизацию стоимости.2
Авторегрессионные генеративные модели, иллюстрируемые семейством маячных моделей GPT-2/Llama, нагружают границы иерархии памяти во время генерации токенов. Декодирование при малом батче для плотных авторегрессионных моделей упирается в пропускную способность памяти, потому что на каждом шаге веса модели используются только один раз. Большие батчи повышают арифметическую интенсивность, тогда как предзаполнение промпта исполняется как матричное умножение, ограниченное вычислениями. Разбиение модели по устройствам — расширение тензорного и конвейерного параллелизма («Обучение моделей») — перераспределяет объем памяти ценой коллективных коммуникаций. Спекулятивное декодирование («Обслуживание моделей») тратит избыточные вычисления на черновую модель, чтобы обойти последовательное узкое место задержки целевой модели. Вместе эти механизмы показывают, как железный закон адаптируется к сложным структурам нагрузок.
На противоположном краю TinyML и встраиваемые системы — область маячной модели KWS/Wake Vision — работают в рамках бюджетов SRAM в килобайты, мощности в милливатты и многолетних эксплуатационных циклов. Работа в таких крайностях требует строгой системной дисциплины: тщательное профилирование выявляет узкие места трафика памяти, специализированное понижение уровня операторов устраняет накладные расходы времени исполнения, а детерминированное исполнение предотвращает переполнение буферов. Жесточайшие ресурсные ограничения исторически стимулировали появление эффективных семейств архитектур, таких как MobileNets (Howard et al., 2017; Sandler et al., 2018) и EfficientNets (Tan and Le, 2019), что показывает: физические ограничения машины активно порождают алгоритмические инновации.
Смежный рубеж — физический ИИ (Physical AI) и воплощенная робототехника, где модели работают внутри замкнутых сенсомоторных циклов управления. В этом режиме бюджет задержки () становится жестким ограничением безопасности реального времени: всплеск хвостовой задержки может привести к механической нестабильности или столкновению, а непрерывный поток сенсорных данных высокой пропускной способности конкурирует с трафиком весов модели за ограниченные шины памяти на устройстве.
Одни и те же физические границы применимы во всех этих парадигмах, тогда как подогнанные статистические модели и политики SLO остаются специфичными для каждого развертывания. Успех зависит от проверки этих различий и от совместного применения принципов, а не от погони за изолированными оптимизациями. Чем больше контекстов развертывания охватывает система, тем больше поверхностей отказа она создает. Поэтому на следующем рубеже устойчивость, а не только широта охвата, становится ограничением, которое нельзя обойти.
Построение устойчивых систем ИИ
ML-системы могут уверенно и ошибочно отвечать, пока обычные проверки доступности остаются зелеными, и никто может не заметить этого неделями. Сдвиги распределения способны менять точность без изменения кода, состязательные входы могут эксплуатировать уязвимости, невидимые для стандартного тестирования, а крайние случаи способны выявить ограничения обучающих данных, которые одна лишь отладка не исправит. Это правдоподобные эксплуатационные риски, а не исходы, гарантированные одной метрикой расхождения.
Конечное тестирование оценивает поведение на заданной популяции с неопределенностью; оно не может доказать корректность для каждого будущего входа. Сигналы дрейфа показывают, мог ли измениться состав этой популяции, а размеченные исходы определяют, изменилось ли качество. Вместе они обосновывают непрерывный мониторинг как требование проектирования, наряду с резервными политиками и периодической повторной валидацией, но без утверждения, что каждый сдвиг распределения ведет к деградации. Эксплуатационный вопрос в том, будет ли сбой обнаружен и диагностирован до того, как его последствия распространятся.
Устойчивость поэтому требует проектирования с расчетом на мягкую деградацию, а не только на предотвращение. На уровне одной системы эта дисциплина проявляется в резервных путях, порогах неопределенности, политиках отката для конкретных версий и точках мониторинга. Откат устраняет плохой релиз; внешний дрейф может вместо этого потребовать оповещения, снижения трафика, переключения на резерв, сбора данных или переобучения после того, как данные об исходах подтвердят вред. В больших масштабах та же логика распространяется на аппаратное резервирование и разнообразие в духе ансамблей. По мере того как системы ИИ берут на себя все более автономные роли в здравоохранении, транспорте и финансах, разрыв между «работает в лаборатории» и «работает в реальном мире» становится критической инженерной задачей. Устойчивость становится важнее по мере добавления компонентов, потому что каждый интерфейс создает еще один таймаут, устаревший вход, несогласованное состояние или путь восстановления, за которым нужно наблюдать.
ИИ на благо общества
Устойчивые системы — предварительное условие развертывания ИИ в областях, где технические сбои имеют общественные последствия. Медицинский ИИ, который непредсказуемо ошибается, нельзя доверить уходу за пациентами. Образовательная система, которая деградирует под нагрузкой, не сможет служить тем студентам, которым она нужнее всего. Климатическая модель, которая выдает уверенные, но неоткалиброванные прогнозы, может направить политические решения, затрагивающие миллионы жизней. В каждой области тринадцать принципов задают общие вопросы и границы, а данные из конкретной области определяют, какая политика допустима.
Каждая область нагружает свое управляющее ограничение, прежде чем принести общественную пользу:
- Научные открытия: сворачивание белков, моделирование взаимодействия лекарств и материаловедение могут требовать значительной пропускной способности обучения или вывода, которой управляют железный закон (принцип «Железный закон систем машинного обучения») и кремниевый контракт (принцип «Кремниевый контракт»); когда работа распределена, координация добавляет еще одну системную стоимость.
- Медицинский ИИ: клинический анализ, калиброванная неопределенность, внешняя валидация и непрерывный мониторинг могут стать критичными для безопасности, потому что диагностическая модель, обученная на популяции одной больницы, может деградировать при развертывании в другой — с иной демографией, распространенностью заболеваний или медицинским оборудованием.
- Персонализированное образование: защита чувствительных данных о взаимодействии студентов, используемых для персонализации в глобальном масштабе, нагружает управление данными и принцип «данные как код» (принцип «Данные как код»); интерактивные сервисы также должны укладываться в выбранные бюджеты задержки.
Все три применения показывают, что одна лишь техническая оптимизация недостаточна. Таксономия D·A·M, тринадцать количественных принципов и анализ Roofline задают основу системной инженерии, но для ее операционализации нужна проверка, специфичная для области, которую никакой общий набор системных инструментов не предоставляет.
Ограниченность этих применений и делает их системные ограничения разрешимыми: диагностическая медицинская модель классифицирует состояния в заданном наборе меток, а климатическая модель проецирует климатическую статистику в рамках физических ограничений. Следующий рубеж спрашивает, могут ли те же принципы направлять системы, которые делегируют работу нескольким компонентам, сохраняя сквозные требования.
Композиция систем как стресс-тест
Самые амбициозные стресс-тесты для этих принципов — системы, границы задач которых заранее не фиксированы. Универсальный ассистент или многокомпонентный ML-сервис может направить один запрос через поиск, планирование, исполнение инструментов, генерацию и верификацию. Управляющая задача здесь в такой же мере системная, как и алгоритмическая: окружающая система должна ограничивать задержку, надежность, стоимость, безопасность и наблюдаемость по мере того, как работа расходится по компонентам.
Композиция систем одновременно активизирует несколько ключевых принципов:
- Железный закон: вычисления, которые выполняет каждый компонент, должны закладываться в бюджет по мере того, как работа расходится по поиску, планированию, исполнению инструментов, генерации и верификации.
- Кремниевый контракт: система должна соблюдать ограничения конкретной аппаратуры на CPU, GPU класса NVIDIA H100, тензорных процессорах (TPU) и заказных ускорителях.
- Фронт Парето: поверхность компромиссов расширяется от двух-трех метрик, таких как точность, задержка и память, до более широкой поверхности, которая включает также безопасность, справедливость, фактологичность, приватность и стоимость.
- Статистический дрейф: дрейф относится не только к финальному выходу, но и к найденным документам, ответам инструментов и промежуточным решениям.
Составная система не может опираться на одну оценку качества модели; ей нужны интерфейсы, поведение которых можно измерить, потому что каждый интерфейс — то место, где предположения одного компонента о другом становятся проверяемыми (Lampson, 1983). Составные системы меняют монолитную простоту на явную координацию. Компонент поиска находит релевантную информацию, компонент рассуждения ее обрабатывает, вызов инструмента может обращаться к внешней системе, а верификатор проверяет вывод. Каждый шаг можно независимо обновлять, отслеживать и отлаживать, но каждый также создает еще один контракт интерфейса. Декомпозиция обменивает задержку и архитектурную сложность на управляемость и наблюдаемость — это пример компромисса по Парето и возможного сдвига сложности, а не закон сохранения.
Системная стоимость видна уже в одном запросе. Если ассистент разветвляется на поиск, планировщик, два инструмента, генератор и верификатор, его реальная задержка определяется критическим путем запроса: параллельные вызовы инструментов вносят свой максимум, а не сумму, плюс накладные расходы на оркестрацию. Анализ надежности должен учитывать и каждый компонент: каждый дополнительный компонент создает еще один таймаут, несоответствие схемы, устаревший индекс или ложноотрицательный результат верификатора, за которым нужно следить. Обычные микросервисы уже сталкиваются с отказами контрактов во время выполнения на границах процессов. Составные ML-системы добавляют вероятностные интерфейсы, в которых планировщик на основе большой языковой модели может выдумать имя инструмента или выдать JSON, отклоняющийся от заявленной схемы, что требует защитного разбора, логики повторов и валидации вывода на каждой границе интерфейса. Возможности могут расти за счет добавления структуры системы, но эта структура должна подчиняться тем же требованиям к задержке, надежности и наблюдаемости, что и любая эксплуатируемая ML-система.
Композиция систем напрямую согласуется с фундаментальными принципами системной инженерии. Модульные подкомпоненты можно независимо сжимать («Сжатие моделей») и ускорять на целевых бэкендах («Аппаратное ускорение»). Каждый компонент выставляет собственный кремниевый контракт (принцип «Кремниевый контракт») и профиль арифметической интенсивности, открывая пути для гетерогенной специализации. Интерфейсы между компонентами задают явные точки наблюдения для обнаружения дрейфа, перекоса и численной деградации. Надежная оркестрация нескольких моделей, динамическая маршрутизация запросов по специализированной аппаратуре и транзакционная согласованность разделяемых состояний памяти требуют сквозной совместной работы над проектом: от приема данных через планирование ускорителей до операционной обратной связи.
Новая золотая эра
Хеннесси и Паттерсон (Hennessy and Patterson, 2019) провозгласили «Новую золотую эру архитектуры компьютеров», вызванную концом масштабирования Деннарда, замедлением закона Мура и новыми возможностями, которые дают проблемно-ориентированные архитектуры, открытые наборы инструкций и гибкая разработка микросхем. Крупномасштабные нагрузки ИИ — одна из областей, где эти давления видны особенно явно. Создание более способных ИИ-сервисов будет не только вопросом написания лучшей функции потерь; это задача системной инженерии, включающая энергоэффективность, высокоскоростные межсоединения, проектирование иерархии памяти и программные стеки, которые делают гетерогенную аппаратуру полезной, а не простаивающей. Тринадцать принципов дают количественный словарь для навигации в этом режиме, сохраняя различие между физическими границами и допущениями, специфичными для развертывания.
Эта эпоха требует конкретных инженерных продвижений. Достижение устойчивой производительности экзафлопсного уровня и выше требует новых подходов к подаче энергии, охлаждению, межсоединениям и программной координации, а не только более быстрых чипов. Эти аналитические инструменты помогают инженерам ориентироваться в этом режиме, масштабируясь от однокристальных ускорителей до экзафлопсных кластеров.
Дальнейший путь
Работа на таком масштабе требует дисциплинированной системной инженерии в триаде данных, алгоритмов и машин. Управление стохастическими данными через отслеживание происхождения и статистическую валидацию при соблюдении границ исполнения — через физические пределы аппаратуры и целевые уровни обслуживания — связывает детерминированное программное обеспечение с вероятностным машинным обучением. Вынесение скрытых допущений под измерение и наблюдение за режимами отказа вплоть до аппаратного интерфейса дают ту строгость, которая нужна, чтобы обученные системы были надежными.
Интеллект — это свойство системы. Он возникает из совместного проектирования конвейеров данных, архитектур моделей, аппаратуры ускорителей, исполняющего программного обеспечения и операционного управления, а не из какого-либо изолированного алгоритмического прорыва. Главный урок системной инженерии — не готовый рецепт для одного семейства моделей или одного поколения аппаратуры. Это дисциплина: выносить скрытые зависимости под измерение, количественно оценивать компромиссы относительно физических пределов аппаратуры и требовать от эксплуатируемых развертываний отчетности перед реальными эксплуатационными ограничениями.
Инженерная ответственность
Перспектива системной интеграции показывает, почему этические соображения нельзя отделить от физического и алгоритмического проектирования. Требования к аппаратуре определяют доступ: модель, для вывода которой нужен массив дорогих ускорителей центра обработки данных, исключает организации, не способные закупить специализированное оборудование. Исходные обучающие данные кодируют исторические перекосы выборки, которые искажают предсказания нижестоящих моделей. Устойчивое энергопотребление ускорителей напрямую определяет тепловыделение объекта и углеродный след региональной энергосети. Проектные решения системы — от арифметической точности до курирования данных — распределяют эксплуатационные расходы и общественные последствия далеко за пределы инженерной команды.
Системная инженерия выходит за рамки максимизации голой способности: она включает ответственную эксплуатацию развертываний в рамках общественных и физических границ. Эксплуатируемые системы должны достигать арифметической эффективности, нужной для работы на доступной аппаратуре, сохранять отказоустойчивость перед аппаратными аномалиями, работать в строгих тепловых и энергетических рамках и обеспечивать справедливую статистическую точность для демографических групп. Реализация таких применений, как планетарный мониторинг климата и клинические диагностические помощники, требует строгой системной дисциплины, руководствующейся критериями управления, заданными в главе «Ответственная инженерия», как физическими и эксплуатационными ограничениями первого класса.
Принципы, изложенные здесь, дают согласованную оптику для отдельных ML-систем. Более крупные системы не отменяют эту оптику; они выявляют те же ограничения на другой границе.
Заметка о горизонте: от узла к парку
Когда нагрузки выходят за пределы одного узла, граница ресурса смещается наружу, но логика рассуждения об узких местах сохраняется. Ограничения локальной емкости памяти уступают место пределам пропускной способности бисекции, локальная обработка исключений расширяется до отказоустойчивости парка, а пропускная способность обучения становится задачей распределенной координации. Как показано на рисунке ниже, при независимой, одинаковой модели с постоянной частотой отказов, в которой отказ любого GPU останавливает пул, эталонное среднее время до отказа компонента (MTTF) в 5,7 года сжимается до среднего времени между отказами кластера (MTBF) около 48,8 часа на пуле из 1024 GPU, без учета коррелированных сбоев сети или питания. Многонедельный запуск обучения почти наверняка столкнется с отказами узлов. Совместное проектирование стратегии отказоустойчивости — сочетание асинхронного неблокирующего сохранения контрольных точек с локализованным восстановлением состояния — становится эксплуатационным условием сходимости обучения. На уровне парка анализ не отказывается от принципов одного узла, а расширяет их границу: определить лимитирующее ограничение, количественно оценить управляющие члены стоимости в железном законе и проследить, куда распространяется вытесненная задержка. Там, где эта книга обосновывала ограничения в пределах одной машины, системы уровня парка поднимают оптику до более широкого кластера. Масштабирование вводит новые распределенные задачи, которые возникают, когда модели превышают память одного устройства: трехмерный параллелизм (данных, тензорный, конвейерный), топологии коллективных коммуникаций, планирование в центре обработки данных и устойчивое к отказам обучение на тысячах соединенных между собой ускорителей.
Масштаб парка превращает редкие отказы компонентов в рутинные системные события.
Системная инженерия требует постоянного скепсиса: оптимизация компонентов в изоляции регулярно порождает системные режимы отказа, создавая архитектурные ловушки и распространенные заблуждения, которые возникают при переносе локальных побед на бенчмарках в эксплуатацию.
Заблуждения и ловушки
Заблуждения и ловушки в ML-системах возникают из общего источника: попытки считать систему разложимой на независимые части. Каждое заблуждение предполагает, что оптимизации одного измерения, одной метрики или одного этапа достаточно; каждая ловушка показывает последствия, когда это предположение сталкивается с реальностью эксплуатации.
Заблуждение: сложность системной инженерии исчезает с появлением лучших инструментов и абстракций.
Инструменты абстрагируют сложность, но не отменяют физических ограничений. Высокоуровневый фреймворк, который скрывает управление памятью, все равно потребляет память. Система AutoML, которая настраивает гиперпараметры, все равно упирается в фронт Парето. Упрощение одного интерфейса может перенести нагрузку на другой, хотя хорошее проектирование способно и убрать случайную сложность. Инженер, который верит, что инструменты устраняют фундаментальные ограничения, будет удивлен, когда эти ограничения вернутся в масштабе, часто в формах, которые труднее диагностировать, чем исходную проблему.
Ловушка: оптимизация одной метрики без трассировки вытесненных издержек.
Когда оптимизация снижает задержку на 50 процентов, спросите, что изменилось в другом месте. Квантование может добавить бремя валидации. Кэширование может обменять емкость памяти на скорость обслуживания. Одни упрощения убирают случайную сложность, другие переносят издержки. Инженеры, которые радуются выигрышу по одной метрике, не прослеживая эти эффекты, могут построить системы, которые выходят из строя неожиданным образом. Измерение показывает, что именно произошло.
Заблуждение: освоение отдельных компонентов равно освоению системы.
Экспертиза в компонентах необходима, но недостаточна. Инженер, который понимает конвейеры данных, обучение, обслуживание и эксплуатацию как изолированные области, все равно будет испытывать трудности с системами, где изменение схемы данных каскадно проходит через обучение, ломает допущения квантования и вызывает незаметную деградацию точности в эксплуатации. Интеграция может создавать больше сложности, чем видно у компонентов по отдельности, потому что интерфейсы умножают режимы отказа. Системное мышление означает понимание того, как компоненты взаимодействуют, а не только того, как работает каждый из них.
Ловушка: масштабирование сбора данных без измерения предельной информационной ценности.
Предположение, что больше данных равномерно улучшает качество модели, на практике не выполняется. Как показано в разделе «Отбор данных», убывающая отдача наступает, когда набор данных достигает покрытия представлений: за этой точкой перегиба удвоение объема данных дает ничтожный прирост точности, тогда как стоимость хранения, предобработки и разметки растет линейно или сверхлинейно. Принцип гравитации данных («Гравитация данных») требует измерять эксплуатационные расходы ниже по потоку, включая то, превышает ли повторный перенос или сканирование большего набора стоимость переноса вычислений к нему. Масштабирование объема данных без количественной оценки предельной информационной ценности образца оптимизирует дорогой прокси.
Заблуждение: одна метрика точности отражает качество модели.
Модель, которую оценивают только по общей точности, игнорирует эксплуатационную реальность. Анализ Парето (принцип «Фронт Парето») требует одновременно оценивать задержку, пропускную способность, объем памяти, энергию, справедливость и стоимость обслуживания. При SLO хвостовой задержки 100 мс модель с точностью 95 процентов, работающая за 500 мс, невыполнима, тогда как модель с точностью 93 процента, которая завершается за 50 мс, удовлетворяет производственным критериям. Кроме того, совокупная точность регулярно скрывает серьезные различия ошибок между когортами подгрупп («Ответственная инженерия»). Всесторонняя оценка охватывает многомерную поверхность Парето, а не одно скалярное значение.
Ловушка: считать каждый сигнал тревоги о дрейфе автоматическим триггером отката.
Обнаружение статистического дрейфа должно запускать диагностированную реакцию, а не безусловный автоматический откат. Откат уместен, когда регрессия прослеживается до дефектного бинарного файла или развертывания конвейера. Однако внешний ковариатный дрейф не исправляется повторным развертыванием более старой, но столь же устаревшей контрольной точки. Безопасные эксплуатационные реакции включают сброс канареечного трафика, резервные эвристики, карантин предсказаний или плановое переобучение после того, как размеченные эталонные метки подтвердят деградацию. Эксплуатационный мониторинг должен связывать обнаружение аномалий с устранением конкретной причины («MLOps»), вмешиваясь в соответствии с проверенным механизмом отказа, а не по сырому сигналу статистического расхождения.
Заблуждение: одна оптимизированная стадия конвейера делает систему быстрой.
Закон Амдала (принцип «Закон Амдала») применим напрямую к сквозным ML-конвейерам. Ускорение вывода на ускорителе в 10 раз дает лишь ускорение системы в 1,1 раза, если предобработка, ограниченная CPU, составляет 90 процентов сквозной задержки. Такие последовательные доли могут возникать из-за аугментации изображений на стороне хоста, синхронных запросов к хранилищу признаков или токенизации, которая в некоторых реализациях остается ограниченной хостом. Железный закон систем машинного обучения (принцип «Железный закон систем машинного обучения») раскладывает время исполнения на члены перемещения данных, вычислений и накладных расходов именно для того, чтобы инженеры могли определить доминирующий член до вложения усилий в оптимизацию. Строгое профилирование выделяет, где реально уходит время исполнения («Бенчмаркинг»). Оптимизация без профилирования равносильна гаданию, а закон Амдала строго ограничивает ускорение, когда вмешательства направлены на недоминирующие стадии.
Ловушка: профилирование только той стадии, которая кажется самой простой для оптимизации.
Команды часто профилируют ядро модели, потому что оно видимо, инструментировано и принадлежит команде ML, тогда как окружающий путь данных разделен между хранилищем, предобработкой, сетью и прикладным кодом. Такой локальный взгляд может сделать ускорение ядра в 10 раз срочным, даже если оно мало меняет путь, видимый пользователю. Сквозное профилирование сохраняет честность цели оптимизации: улучшать нужно ту стадию, которая ограничивает систему, а не ту, у которой самый чистый бенчмарк.
Эти заблуждения и ловушки имеют общий корень: попытку изолировать компоненты от системы, которая их исполняет. Оптимизируем ли мы одну метрику, ускоряем ли изолированную стадию или оцениваем точность без ограничений задержки, локальная оптимизация терпит неудачу, когда игнорирует связанность системы. Рассуждение через физические и эксплуатационные границы остается центральной дисциплиной инженерии ML-систем.
Итоги
Инженерия ML-систем отличается от оптимизации изолированных компонентов тем, что рассуждает через границы. Тринадцать принципов, эвристика сохранения сложности и рамка пути маячных моделей дают аналитические инструменты для рассуждения о системах как о целом. Заявленные допущения отделяют точные границы от подогнанных моделей, политик SLO и эвристик проектирования, позволяя инструментам оставаться полезными при смене фреймворков, поколений аппаратуры и семейств моделей.
Рассуждение через границы
- Допущения важны для любых реализаций: тринадцать принципов превращают ремесло, привязанное к конкретному фреймворку, в измеримое рассуждение, сочетая физические границы, разложения, подогнанные модели, требования и эвристики. Применяйте каждый только в заявленной области.
- Отслеживайте вытесненные издержки, не предполагая сохранения: сжатие, батчинг, мониторинг и управление могут переносить нагрузку между данными, алгоритмом и машиной, а хорошее проектирование способно и полностью убрать случайную сложность. Измерение отличает эти случаи.
- Границы показывают узкое место: в идеализированной модели с батчем из одного запроса и двумя H100 нижняя граница переноса памяти для токена Llama 2 70B примерно в 295,2 раза превышает нижнюю границу пиковых вычислений, а иллюстративная p99-задержка в 40 раз больше средней. Системное мышление означает измерение того, где физика, трафик и пользователи задают ограничения.
- Масштаб меняет лимитирующий член: следующий рубеж — масштаб, где пул из тысячи GPU превращает многолетнее среднее время до отказа компонента в среднее время между отказами кластера, измеряемое днями. Физика остается прежней, но ограничение переходит на уровень парков.
Книга Хеннесси и Паттерсона Computer Architecture: A Quantitative Approach установила общую аналитическую дисциплину для сравнения CPI, тактовых частот и числа инструкций (Hennessy and Patterson, 2011; Hennessy and Patterson, 2017). Эти тринадцать принципов дают эквивалентную количественную основу для систем машинного обучения, не утверждая, что каждая диагностика — неизменный физический закон. Они задают общую аналитическую базу для оценки компромиссов между данными, алгоритмами и машинами.
Что остается — интеллектуальная позиция, которую воплощают эти принципы: рассуждать из эмпирических данных и физических границ, а не реагировать на симптомы; количественно оценивать компромиссы, а не следовать тенденциям; рассматривать проектирование системы как задачу оптимизации при ограничениях. Это инженерное следствие «горького урока», вынесенного из семи десятилетий исследований в вычислительной технике («Введение»): поскольку общие методы, которые масштабируются с вычислениями, снова и снова опережают ручную экспертизу, устойчивое преимущество принадлежит системной инженерии, которая способна освоить эти вычисления, а не какой-либо отдельной умной архитектуре (Sutton, 2019). Конкретные фреймворки будут появляться и исчезать, поколения аппаратуры — сменяться, а архитектуры моделей — вытесняться. Дисциплинированное рассуждение о данных, вычислениях и физических ограничениях останется.
На следующем рубеже масштаба некоторые модели перестают помещаться на одной машине, отказы становятся почти неизбежными во всем парке, а сетевые каналы могут стать лимитирующими наравне с локальными шинами памяти. Физика не меняется; меняется масштаб, на котором она начинает ограничивать.
Мир спешит строить системы ИИ. Наша задача — создавать их инженерными методами.
Проф. Vijay Janapa Reddi, Гарвардский университет
-
Эвристика сохранения сложности: закон Тесслера — проектный афоризм о том, что неустранимая сложность приложения должна быть обработана где-то во взаимодействии пользователя, приложения и платформы (Tesler, 1984). Распространение его на всю сложность ML-систем — аналогия, а не физический закон. Квантование может добавить бремя валидации, а абстракция может перенести детали реализации за интерфейс, но хорошее проектирование способно и полностью убрать случайную сложность. Конвейеры приложений на основе больших языковых моделей иллюстрируют возможный сдвиг: упрощение пользовательского интерфейса более короткими или расплывчатыми запросами может перенести работу в системные подсказки, поиск или проверку вывода. Используйте эвристику, чтобы искать вытесненные издержки, а не предполагать, что обязательно существует равная компенсирующая цена. ↩
-
Демократизация ИИ: сделать ИИ доступным за пределами небольшого числа хорошо обеспеченных организаций с помощью эффективной инженерии систем. Оптимизированные для мобильных устройств модели и облачные API могут расширить доступ, но делать это устойчиво можно только при систематической оптимизации аппаратуры, алгоритмов и инфраструктуры, чтобы поддерживать качество в масштабе. ↩
Список литературы
Библиографические записи приведены на языке оригинала.
- Cerebras Systems (2021). Wafer-Scale Deep Learning Acceleration with the Cerebras CS-2. Cerebras Technical Paper.
- Choi et al. (2018). PACT: Parameterized Clipping Activation for Quantized Neural Networks. arXiv preprint.
- Google (2025). XLA: Optimizing Compiler for Machine Learning.
- Graphcore (2020). The Colossus MK2 IPU Processor.
- Hubara et al. (2018). Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations. Journal of Machine Learning Research.
- Jia et al. (2019). Optimizing DNN Computation with Relaxed Graph Substitutions. Proceedings of Machine Learning and Systems (MLSys).
- NVIDIA Corporation (2020). NVIDIA A100 Tensor Core GPU Architecture. NVIDIA Whitepaper, V1.0.
- NVIDIA Corporation (2020). NVLink: Scalable High-Performance Interconnect. NVIDIA Technical Report.
- Raffel et al. (2020). Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. Journal of Machine Learning Research.
- Rastegari et al. (2016). XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks. European Conference on Computer Vision (ECCV).
- Tesla, Inc. (2021). Tesla Dojo Technology: A Guide to Tesla’s Configurable Floating Point Formats & Arithmetic. Tesla AI Day, Whitepaper.
- Zhu et al. (2017). Trained Ternary Quantization. International Conference on Learning Representations (ICLR).
- Abadi et al. (2016). TensorFlow: A System for Large-Scale Machine Learning. Proceedings of the 12th USENIX Symposium on Operating Systems Design and Implementation (OSDI).
- Agarwal et al. (2005). Geometric Approximation via Coresets. Combinatorial and Computational Geometry.
- Agrawal et al. (2024). Taming Throughput-Latency Tradeoff in LLM Inference with Sarathi-Serve. 18th USENIX Symposium on Operating Systems Design and Implementation (OSDI 24).
- Ignatov and Timofte (2024). AI Benchmark.
- Ainslie et al. (2023). GQA: Training Generalized Multi-Query Transformer Models From Multi-Head Checkpoints. Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing.
- Akidau et al. (2015). The dataflow model. Proceedings of the VLDB Endowment.
- Team et al. (2016). Theano: A Python framework for fast computation of mathematical expressions. arXiv preprint.
- Altini and Kinnunen (2021). The Promise of Sleep: A Multi-Sensor Approach for Accurate Sleep Stage Detection Using the Oura Ring. Sensors.
- Amazon Web Services (2024). Amazon Simple Storage Service (S3).
- AMD (2023). AMD Instinct MI300X Accelerators. AMD product documentation.
- Amdahl (1967). Validity of the single processor approach to achieving large scale computing capabilities. Proceedings of the April 18-20, 1967, spring joint computer conference on - AFIPS ’67 (Spring).
- Amershi et al. (2019). Software Engineering for Machine Learning: A Case Study. 2019 IEEE/ACM 41st International Conference on Software Engineering: Software Engineering in Practice (ICSE-SEIP).
- Amodei and Hernandez (2018). AI and Compute. OpenAI Blog.
- Amodei and Hernandez (2018). AI and Compute. OpenAI Blog.
- Angwin et al. (2016). Machine Bias. ProPublica investigation.
- Ansel et al. (2024). PyTorch 2: Faster Machine Learning Through Dynamic Python Bytecode Transformation and Graph Compilation. Proceedings of the 29th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, Volume 2.
- Anthropic (2023). Introducing Claude 2.1.
- Anthropic (2024). Introducing the Next Generation of Claude.
- AnyLogic (2024). Synthetic Data for Artificial Intelligence.
- Apache Software Foundation (2024). Apache Airflow.
- Apple (2024). Facial matching security. Apple Platform Security.
- Apple (2024). The Secure Enclave. Apple Platform Security.
- Ardila et al. (2020). Common Voice: A Massively-Multilingual Speech Corpus. Proceedings of the Twelfth Language Resources and Evaluation Conference.
- Armbrust et al. (2020). Delta Lake. Proceedings of the VLDB Endowment.
- Amazon Web Services (2024). Amazon Web Services (AWS).
- Amazon Web Services (2026). Amazon EC2 Spot Instances.
- Amazon Web Services (2024). AWS Auto Scaling.
- Amazon Web Services (2024). AWS CloudFormation.
- Microsoft (2024). Microsoft Azure.
- Ba et al. (2016). Layer Normalization. arXiv preprint arXiv:1607.06450.
- Bahdanau et al. (2015). Neural Machine Translation by Jointly Learning to Align and Translate. International Conference on Learning Representations (ICLR).
- Bai et al. (2006). LAPACK. Handbook of Linear Algebra.
- ONNX Contributors (2019). ONNX: Open Neural Network Exchange.
- Bakheet and Al-Hamadi (2021). A framework for instantaneous driver drowsiness detection based on improved HOG features and naïve Bayesian classification. Brain Sciences.
- Banbury et al. (2020). Benchmarking TinyML Systems: Challenges and Direction. arXiv preprint arXiv:2003.04821.
- Banbury et al. (2021). MicroNets: Neural network architectures for deploying TinyML applications on commodity microcontrollers. Proceedings of Machine Learning and Systems.
- Banbury et al. (2021). MLPerf Tiny Benchmark. Thirty-fifth Conference on Neural Information Processing Systems Datasets and Benchmarks Track.
- Barocas and Selbst (2016). Big Data’s Disparate Impact. California Law Review.
- Barroso et al. (2017). Attack of the killer microseconds. Communications of the ACM.
- Barroso et al. (2019). The Datacenter as a Computer. Springer International Publishing.
- Baur and Strassen (1983). The Complexity of Partial Derivatives. Theoretical Computer Science.
- Baydin et al. (2018). Automatic Differentiation in Machine Learning: A Survey. Journal of Machine Learning Research.
- Baylor et al. (2017). TFX. Proceedings of the 23rd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining.
- Gadre et al. (2023). DataComp: In search of the next generation of multimodal datasets. Advances in Neural Information Processing Systems (NeurIPS).
- Bedford Taylor (2017). The Evolution of Bitcoin Hardware. Computer.
- Beede et al. (2020). A Human-Centered Evaluation of a Deep Learning System Deployed in Clinics for the Detection of Diabetic Retinopathy. Proceedings of the CHI Conference on Human Factors in Computing Systems (CHI).
- Belkin et al. (2019). Reconciling modern machine-learning practice and the classical bias–variance trade-off. Proceedings of the National Academy of Sciences.
- Bellamy et al. (2019). AI Fairness 360: An extensible toolkit for detecting and mitigating algorithmic bias. IBM Journal of Research and Development.
- Bender and Friedman (2018). Data Statements for Natural Language Processing: Toward Mitigating System Bias and Enabling Better Science. Transactions of the Association for Computational Linguistics.
- Bengio et al. (2009). Curriculum Learning. Proceedings of the 26th Annual International Conference on Machine Learning.
- Bengio et al. (2013). Representation Learning: A Review and New Perspectives. IEEE Transactions on Pattern Analysis and Machine Intelligence.
- Bengio et al. (2013). Estimating or Propagating Gradients Through Stochastic Neurons for Conditional Computation. arXiv preprint arXiv:1308.3432.
- Bengio et al. (2015). Conditional Computation in Neural Networks for faster models. arXiv preprint arXiv:1511.06297.
- Berger and Zhou (2014). Kolmogorov–Smirnov Test: Overview. Wiley StatsRef: Statistics Reference Online.
- Bergstra et al. (2010). Theano: A CPU and GPU Math Compiler in Python. Proceedings of the Python in Science Conference.
- Beyer et al. (2016). Site Reliability Engineering: How Google Runs Production Systems. O’Reilly Media.
- Beyer et al. (2020). Are we done with ImageNet?. arXiv preprint arXiv:2006.07159.
- Bird et al. (2020). Fairlearn: A toolkit for assessing and improving fairness in AI. Microsoft Technical Report MSR-TR-2020-32.
- Bishop (2006). Pattern Recognition and Machine Learning. Springer.
- Blalock et al. (2020). What is the State of Neural Network Pruning?. Proceedings of Machine Learning and Systems (MLSys).
- Kuzmin et al. (2022). FP8 Quantization: The Power of the Exponent. Advances in Neural Information Processing Systems (NeurIPS).
- Bobrow (1964). Natural Language Input for a Computer Problem Solving System.
- Boehm (1981). Software Engineering Economics. Prentice-Hall.
- Bolukbasi et al. (2016). Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings. Advances in Neural Information Processing Systems (NeurIPS).
- Bommasani et al. (2021). On the Opportunities and Risks of Foundation Models. arXiv preprint arXiv:2108.07258.
- Boroumand et al. (2018). Google Workloads for Consumer Devices. Proceedings of the Twenty-Third International Conference on Architectural Support for Programming Languages and Operating Systems.
- Bourtoule et al. (2021). Machine Unlearning. 2021 IEEE Symposium on Security and Privacy (SP).
- Bradbury et al. (2018). JAX: composable transformations of Python+NumPy programs.
- Breck et al. (2017). The ML Test Score: A Rubric for ML Production Readiness and Technical Debt Reduction. Proceedings of the 2017 IEEE International Conference on Big Data (Big Data).
- Breck et al. (2019). Data Validation for Machine Learning. Proceedings of the 2nd SysML Conference.
- Brewer (2000). Towards robust distributed systems (abstract). Proceedings of the nineteenth annual ACM symposium on Principles of distributed computing.
- Broder (1997). On the resemblance and containment of documents. Proceedings. Compression and Complexity of SEQUENCES 1997 (Cat. No.97TB100171).
- Smith (1997). Digital Signal Processing. Digital Signal Processing Demystified.
- Brown et al. (2020). Language Models are Few-Shot Learners. Advances in Neural Information Processing Systems 33: Annual Conference on Neural Information Processing Systems 2020, NeurIPS 2020, December 6-12, 2020, virtual.
- Brutlag (2009). Speed Matters for Google Web Search. Google Research Blog.
- Buolamwini and Gebru (2018). Gender Shades: Intersectional Accuracy Disparities in Commercial Gender Classification. Conference on fairness, accountability and transparency.
- Burns et al. (2016). Borg, Omega, and Kubernetes. Communications of the ACM.
- Cai et al. (2020). TinyTL: Reduce Activations, Not Trainable Parameters for Efficient On-Device Learning. Advances in Neural Information Processing Systems (NeurIPS).
- Campbell et al. (2002). Deep Blue. Artificial Intelligence.
- Cao and Yang (2015). Towards Making Systems Forget With Machine Unlearning. 2015 IEEE Symposium on Security and Privacy.
- Chapman et al. (2000). CRISP-DM 1.0: Step-by-step data mining guide. SPSS Inc.
- Chen et al. (2014). DianNao: A Small-Footprint High-Throughput Accelerator for Ubiquitous Machine-Learning. Proceedings of the 19th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS ’14).
- Chen et al. (2016). Eyeriss: A Spatial Architecture for Energy-Efficient Dataflow for Convolutional Neural Networks. 2016 ACM/IEEE 43rd Annual International Symposium on Computer Architecture (ISCA).
- Chen et al. (2016). Training Deep Nets with Sublinear Memory Cost. arXiv preprint arXiv:1604.06174.
- Chen et al. (2017). Using Dataflow to Optimize Energy Efficiency of Deep Neural Network Accelerators. IEEE Micro.
- Chen et al. (2018). TVM: An Automated End-to-End Optimizing Compiler for Deep Learning. Proceedings of the 13th USENIX Symposium on Operating Systems Design and Implementation (OSDI ’18).
- Chen et al. (2020). Developments in MLflow. Proceedings of the Fourth International Workshop on Data Management for End-to-End Machine Learning.
- Chen et al. (2020). A Simple Framework for Contrastive Learning of Visual Representations. International Conference on Machine Learning (ICML).
- Chen et al. (2021). Evaluating Large Language Models Trained on Code. arXiv preprint arXiv:2107.03374.
- Chen et al. (2023). A framework for integrating artificial intelligence for clinical care with continuous therapeutic monitoring. Nature Biomedical Engineering.
- Chen et al. (2024). EE-LLM: Large-Scale Training and Inference of Early-Exit Large Language Models with 3D Parallelism. Proceedings of the 41st International Conference on Machine Learning (ICML).
- Chetlur et al. (2014). cuDNN: Efficient Primitives for Deep Learning. arXiv preprint arXiv:1410.0759.
- Cho et al. (2014). On the properties of neural machine translation: Encoder-decoder approaches. Proceedings of SSST-8, Eighth Workshop on Syntax, Semantics and Structure in Statistical Translation.
- Cho et al. (2025). TRANSFORMER EXPLAINER: Interactive Learning of Text-Generative Models. Proceedings of the AAAI Conference on Artificial Intelligence.
- Choi et al. (2019). Faster Neural Network Training with Data Echoing. arXiv preprint.
- Chollet (2018). Deep Learning with Python. Manning Publications.
- Choquette et al. (2021). NVIDIA A100 Tensor Core GPU: Performance and Innovation. IEEE Micro.
- Choquette (2023). NVIDIA Hopper H100 GPU: Scaling Performance. IEEE Micro.
- Choudhary et al. (2020). A comprehensive survey on model compression and acceleration. Artificial Intelligence Review.
- Choukroun et al. (2019). Low-Bit Quantization of Neural Networks for Efficient Inference. 2019 IEEE/CVF International Conference on Computer Vision Workshop (ICCVW).
- Chouldechova (2017). Fair Prediction With Disparate Impact: A Study of Bias in Recidivism Prediction Instruments. Big Data.
- Chowdhery et al. (2022). PaLM: Scaling Language Modeling with Pathways. arXiv preprint arXiv:2204.02311.
- Chu et al. (2021). Discovering Multi-Hardware Mobile Models via Architecture Search. 2021 IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops (CVPRW).
- Krizhevsky (2009). Learning Multiple Layers of Features from Tiny Images.
- CircleCI (2024). CircleCI: Continuous Integration and Delivery Platform.
- Clark et al. (2019). What Does BERT Look at? An Analysis of BERT’s Attention. Proceedings of the 2019 ACL Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP.
- Cohen (1960). A Coefficient of Agreement for Nominal Scales. Educational and Psychological Measurement.
- Cohen and Welling (2016). Group Equivariant Convolutional Networks. Proceedings of the 33rd International Conference on Machine Learning (ICML).
- Coleman et al. (2019). Analysis of DAWNBench, a Time-To-Accuracy Machine Learning Performance Benchmark. NIPS ML Systems Workshop.
- Coleman et al. (2022). Similarity Search for Efficient Active Learning and Search of Rare Concepts. Proceedings of the AAAI Conference on Artificial Intelligence.
- Courbariaux et al. (2015). BinaryConnect: Training Deep Neural Networks with Binary Weights during Propagations. Advances in Neural Information Processing Systems (NeurIPS).
- Cover and Thomas (2006). Elements of Information Theory. Wiley.
- Covington et al. (2016). Deep Neural Networks for YouTube Recommendations. Proceedings of the 10th ACM Conference on Recommender Systems.
- Crankshaw et al. (2017). Clipper: A Low-Latency Online Prediction Serving System. 14th USENIX Symposium on Networked Systems Design and Implementation (NSDI 17).
- CrowdFlower (2016). Data Science Report 2016.
- Cubuk et al. (2019). AutoAugment: Learning Augmentation Strategies From Data. 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR).
- Cubuk et al. (2020). Randaugment: Practical automated data augmentation with a reduced search space. 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops (CVPRW).
- Cunningham (1992). The WyCash Portfolio Management System. ACM SIGPLAN OOPS Messenger.
- Curnow and Wichmann (1976). A synthetic benchmark. The Computer Journal.
- Cybenko (1989). Approximation by superpositions of a sigmoidal function. Mathematics of Control, Signals, and Systems.
- Dalal and Triggs (2005). Histograms of Oriented Gradients for Human Detection. 2005 IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR’05).
- Dally et al. (2021). Evolution of the Graphics Processing Unit (GPU). IEEE Micro.
- Dally (2023). Hardware for Deep Learning. 2023 IEEE Hot Chips 35 Symposium (HCS).
- Dao et al. (2022). FlashAttention: Fast and Memory-Efficient Exact Attention With IO-Awareness. Advances in Neural Information Processing Systems (NeurIPS).
- Dao et al. (2022). Monarch: Expressive Structured Matrices for Efficient and Accurate Training. arXiv preprint.
- Dao (2023). FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning. arXiv preprint arXiv:2307.08691.
- Dastin (2018). Amazon Scraps Secret AI Recruiting Tool That Showed Bias Against Women. Reuters.
- David et al. (2021). TensorFlow Lite Micro: Embedded machine learning for TinyML systems. Proceedings of Machine Learning and Systems.
- dbt Labs (2024). dbt (data build tool).
- Dean and Ghemawat (2004). MapReduce: Simplified Data Processing on Large Clusters. Proceedings of the 6th Symposium on Operating Systems Design and Implementation (OSDI).
- Dean et al. (2012). Large Scale Distributed Deep Networks. Advances in Neural Information Processing Systems (NeurIPS).
- Dean (2012). Achieving Rapid Response Times in Large Online Services. Berkeley AMPLab Cloud Seminar.
- Dean and Barroso (2013). The tail at scale. Communications of the ACM.
- Dean et al. (2018). A New Golden Age in Computer Architecture: Empowering the Machine-Learning Revolution. IEEE Micro.
- Baidu Research (2016). DeepBench: Benchmarking Deep Learning Operations on Different Hardware.
- DeepSeek (2024). Introducing DeepSeek-V3.
- Dehghani (2022). Data Mesh: Delivering Data-Driven Value at Scale. O’Reilly Media.
- Deng et al. (2009). ImageNet: A large-scale hierarchical image database. 2009 IEEE Conference on Computer Vision and Pattern Recognition.
- Dennard et al. (1974). Design of ion-implanted MOSFET’s with very small physical dimensions. IEEE J. Solid-State Circuits.
- Denning (1968). The Working Set Model for Program Behavior. Communications of the ACM.
- Dettmers et al. (2022). 8-Bit Optimizers via Block-Wise Quantization. International Conference on Learning Representations (ICLR).
- Devlin et al. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies.
- DeVries and Taylor (2017). Improved Regularization of Convolutional Neural Networks with Cutout. arXiv preprint arXiv:1708.04552.
- Howarth (2020). Why Discord is switching from Go to Rust.
- Dixit (1993). Overview of the SPEC Benchmarks. The Benchmark Handbook for Database and Transaction Systems.
- Merkel (2014). Docker: Lightweight Linux Containers for Consistent Development and Deployment. Linux Journal.
- Dongarra et al. (1979). LINPACK Users’ Guide. SIAM.
- Dongarra et al. (1988). An extended set of FORTRAN basic linear algebra subprograms. ACM Transactions on Mathematical Software.
- Dosovitskiy et al. (2021). An image is worth 16x16 words: Transformers for image recognition at scale. International Conference on Learning Representations (ICLR).
- Data Protection Commission (2023). Data Protection Commission Announces Conclusion of Two Inquiries into Meta Ireland. Regulatory press release.
- Duarte et al. (2022). FastML Science Benchmarks: Accelerating Real-Time Scientific Edge Machine Learning. arXiv preprint arXiv:2207.07958.
- Dubey et al. (2024). The Llama 3 Herd of Models. arXiv preprint arXiv:2407.21783.
- Iterative (2024). Data Version Control (DVC).
- Dwork et al. (2006). Calibrating Noise to Sensitivity in Private Data Analysis. Theory of Cryptography Conference (TCC).
- Dwork (2008). Differential Privacy: A Survey of Results. Theory and Applications of Models of Computation.
- European Data Protection Board (2018). Guidelines on Automated Individual Decision-Making and Profiling for the Purposes of Regulation 2016/679.
- Elastic NV (2024). Elasticsearch: Distributed Search and Analytics Engine.
- Elman (1990). Finding Structure in Time. Cognitive Science.
- Elsen et al. (2020). Fast Sparse ConvNets. 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR).
- Elsken et al. (2019). Neural Architecture Search. The Springer Series on Challenges in Machine Learning.
- Epoch AI (2024). Machine Learning Trends. Epoch AI Research Database.
- European Space Agency (1996). Ariane 501: Presentation of Inquiry Board Report. European Space Agency press release.
- Esmaeilzadeh et al. (2011). Dark silicon and the end of multicore scaling. Proceedings of the 38th annual international symposium on Computer architecture.
- Ethernet Alliance (2025). 2025 Ethernet Roadmap. Ethernet Alliance roadmap.
- European Parliament and Council of the European Union (2024). Regulation (EU) 2024/1689 of the European Parliament and of the Council of 13 June 2024 laying down harmonised rules on artificial intelligence (AI Act). Official Journal of the European Union, L 2024/1689.
- Everingham et al. (2009). The Pascal Visual Object Classes (VOC) Challenge. International Journal of Computer Vision.
- Engineering (2016). Introducing FBLearner Flow: Facebook’s AI backbone. Engineering at Meta Blog.
- Mosseri (2018). Bringing People Closer Together. Meta Newsroom.
- U.S. Food and Drug Administration (2021). Artificial Intelligence/Machine Learning (AI/ML)-Based Software as a Medical Device (SaMD) Action Plan.
- U.S. Food and Drug Administration (2025). Marketing Submission Recommendations for a Predetermined Change Control Plan for Artificial Intelligence-Enabled Device Software Functions.
- Gojek and Google (2019). Feast: An open source feature store for machine learning. Google Cloud Blog.
- Fedus et al. (2022). Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity. Journal of Machine Learning Research.
- Feigenbaum (1984). Knowledge Engineering: The Applied Side of Artificial Intelligence. Annals of the New York Academy of Sciences.
- Feng and Cameron (2007). The Green500 List: Encouraging Sustainable Supercomputing. Computer.
- Fitzpatrick (1988). The Validity and Practicality of Sun-Reactive Skin Types I Through VI. Archives of Dermatology.
- FlatBuffers Authors (2026). FlatBuffers Documentation.
- Fleiss (1971). Measuring nominal scale agreement among many raters. Psychological Bulletin.
- Flynn (1966). Very high-speed computing systems. Proceedings of the IEEE.
- Frankle and Carbin (2019). The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks. International Conference on Learning Representations (ICLR).
- Fredrikson et al. (2015). Model Inversion Attacks That Exploit Confidence Information and Basic Countermeasures. Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security.
- Frostig et al. (2018). Compiling Machine Learning Programs via High-Level Tracing. Systems for Machine Learning.
- Gabor (1946). Theory of Communication. Part 1: The Analysis of Information. Journal of the Institution of Electrical Engineers - Part III: Radio and Communication Engineering.
- Gale et al. (2019). The State of Sparsity in Deep Neural Networks. arXiv preprint arXiv:1902.09574.
- Gale et al. (2020). Sparse GPU Kernels for Deep Learning. SC20: International Conference for High Performance Computing, Networking, Storage and Analysis.
- Gale et al. (2022). MegaBlocks: Efficient Sparse Training with Mixture-of-Experts. arXiv preprint.
- Gama et al. (2014). A survey on concept drift adaptation. ACM Computing Surveys.
- Sorscher et al. (2022). Beyond Neural Scaling Laws: Beating Power Law Scaling via Data Pruning. Advances in Neural Information Processing Systems (NeurIPS).
- Gao et al. (2020). The Pile: An 800GB Dataset of Diverse Text for Language Modeling. arXiv preprint arXiv:2101.00027.
- Gartner (2024). Gartner Forecasts Worldwide Public Cloud End-User Spending to Total 1 Million Algorithm Due to Engineering Costs. Ars Technica.
- Jordan (1982). A Guide to Parallel Computation and Some Cray-1 Experiences. Parallel Computations.
- Jouppi et al. (2017). In-Datacenter Performance Analysis of a Tensor Processing Unit. Proceedings of the 44th Annual International Symposium on Computer Architecture.
- Jouppi et al. (2021). Ten Lessons From Three Generations Shaped Google’s TPUv4i: Industrial Product. 2021 ACM/IEEE 48th Annual International Symposium on Computer Architecture (ISCA).
- Jouppi et al. (2023). TPU v4: An Optically Reconfigurable Supercomputer for Machine Learning With Hardware Support for Embeddings. Proceedings of the 50th Annual International Symposium on Computer Architecture.
- Jumper et al. (2021). Highly accurate protein structure prediction with AlphaFold. Nature.
- Project Jupyter (2024). Project Jupyter.
- Kalamkar et al. (2019). A Study of BFLOAT16 for Deep Learning Training.
- Kamiran and Calders (2012). Data Preprocessing Techniques for Classification Without Discrimination. Knowledge and Information Systems.
- Kaplan et al. (2020). Scaling Laws for Neural Language Models. ArXiv preprint.
- Karpathy (2017). Software 2.0. Medium.
- Chollet and others (2024). Keras.
- Kiela et al. (2021). Dynabench: Rethinking Benchmarking in NLP. Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies.
- Kilburn et al. (1962). One-Level Storage System. IRE Transactions on Electronic Computers.
- Kim et al. (2008). System level analysis of fast, per-core DVFS using on-chip switching regulators. IEEE International Symposium on High-Performance Computer Architecture (HPCA).
- Kingma and Ba (2015). Adam: A Method for Stochastic Optimization. 3rd International Conference on Learning Representations (ICLR).
- Kipf and Welling (2017). Semi-Supervised Classification with Graph Convolutional Networks. International Conference on Learning Representations (ICLR).
- Kleinberg et al. (2017). Inherent Trade-Offs in the Fair Determination of Risk Scores. 8th Innovations in Theoretical Computer Science Conference (ITCS 2017).
- Kleppmann (2016). Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems. O’Reilly Media.
- Knight (2023). OpenAI’s CEO says the age of giant AI models is already over. WIRED.
- Koh et al. (2021). WILDS: A Benchmark of in-the-Wild Distribution Shifts. Proceedings of the 38th International Conference on Machine Learning, ICML 2021, 18-24 July 2021, Virtual Event.
- Koizumi et al. (2019). ToyADMOS: A Dataset of Miniature-Machine Operating Sounds for Anomalous Sound Detection. 2019 IEEE Workshop on Applications of Signal Processing to Audio and Acoustics (WASPAA).
- Koomey et al. (2011). Implications of Historical Trends in the Electrical Efficiency of Computing. IEEE Annals of the History of Computing.
- Kreuzberger et al. (2023). Machine Learning Operations (MLOps): Overview, Definition, and Architecture. IEEE Access.
- Krishnamoorthi (2018). Quantizing deep convolutional networks for efficient inference: A whitepaper. arXiv preprint arXiv:1806.08342.
- Krishnan et al. (2022). Self-supervised learning in medicine and healthcare. Nature Biomedical Engineering.
- Krizhevsky et al. (2012). ImageNet Classification with Deep Convolutional Neural Networks. Advances in Neural Information Processing Systems (NeurIPS).
- KServe Community (2024). KServe: Highly Scalable and Standards-Based Model Inference Platform on Kubernetes.
- Authors (2024). Kubeflow.
- Cloud Native Computing Foundation (2024). Kubernetes: Production-Grade Container Orchestration.
- Kuhn and Johnson (2013). Applied Predictive Modeling. Springer New York.
- Kullback and Leibler (1951). On Information and Sufficiency. The Annals of Mathematical Statistics.
- Kung and Leiserson (1979). Systolic arrays (for VLSI). Sparse Matrix Proceedings 1978.
- Kung (1982). Why systolic architectures?. Computer.
- Kuznetsova et al. (2020). The Open Images Dataset V4. International Journal of Computer Vision.
- Kwon and Rhu (2018). TensorDIMM. Proceedings of the 52nd Annual IEEE/ACM International Symposium on Microarchitecture.
- Kwon et al. (2023). Efficient Memory Management for Large Language Model Serving With PagedAttention. Proceedings of the 29th Symposium on Operating Systems Principles.
- HumanSignal (2024). Label Studio: Open Source Data Labeling Platform.
- Labelbox, Inc. (2024). Labelbox Consensus Documentation.
- Lai et al. (2018). CMSIS-NN: Efficient Neural Network Kernels for Arm Cortex-M CPUs. ArXiv preprint.
- Lam et al. (1991). The cache performance and optimizations of blocked algorithms. Proceedings of the fourth international conference on Architectural support for programming languages and operating systems - ASPLOS-IV.
- Lamport et al. (1982). The Byzantine Generals Problem. ACM Transactions on Programming Languages and Systems.
- Lampson (1983). Hints for Computer System Design. Proceedings of the Ninth ACM Symposium on Operating Systems Principles.
- Landis and Koch (1977). The measurement of observer agreement for categorical data. Biometrics.
- Lange (2009). Identifying Shades of Green: The SPECpower Benchmarks. IEEE Computer.
- Lattner et al. (2020). MLIR: Scaling Compiler Infrastructure for Domain Specific Computation. 2021 IEEE/ACM International Symposium on Code Generation and Optimization (CGO).
- Lawson et al. (1979). Basic Linear Algebra Subprograms for Fortran Usage. ACM Transactions on Mathematical Software.
- Lazer et al. (2014). The Parable of Google Flu: Traps in Big Data Analysis. Science.
- Le Sueur and Heiser (2010). Dynamic voltage and frequency scaling: The laws of diminishing returns. Proceedings of the 2010 international conference on Power aware computing and systems.
- Lebedev et al. (2015). Speeding up convolutional neural networks using fine-tuned CP-decomposition. 3rd International Conference on Learning Representations (ICLR).
- LeCun et al. (1989). Backpropagation Applied to Handwritten Zip Code Recognition. Neural Computation.
- LeCun et al. (1989). Optimal Brain Damage. Advances in Neural Information Processing Systems 2 (NIPS 1989).
- LeCun et al. (1998). Gradient-based learning applied to document recognition. Proceedings of the IEEE.
- LeCun et al. (2012). Efficient BackProp. Neural Networks: Tricks of the Trade.
- LeCun et al. (2015). Deep Learning. Nature.
- Lee et al. (2022). Deduplicating Training Data Makes Language Models Better. Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers).
- Lehdonvirta et al. (2025). Measuring Domestic Public Cloud Compute Availability for Artificial Intelligence.
- Lepikhin et al. (2021). GShard: Scaling giant models with conditional computation and automatic sharding. International Conference on Learning Representations (ICLR).
- Leviathan et al. (2023). Fast Inference from Transformers via Speculative Decoding. International Conference on Machine Learning (ICML).
- Li et al. (2007). t-Closeness: Privacy Beyond k-Anonymity and l-Diversity. 2007 IEEE 23rd International Conference on Data Engineering.
- Li et al. (2014). Communication Efficient Distributed Machine Learning with the Parameter Server. Advances in Neural Information Processing Systems (NeurIPS).
- Li et al. (2017). Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization. Journal of Machine Learning Research.
- Li et al. (2017). Pruning Filters for Efficient ConvNets. International Conference on Learning Representations (ICLR).
- Li (2020). Estimating the Training Cost of GPT-3.
- Li et al. (2021). The Deep Learning Compiler: A Comprehensive Survey. IEEE Transactions on Parallel and Distributed Systems.
- Li et al. (2023). AlpaServe: Statistical multiplexing with model parallelism for deep learning serving. 17th USENIX Symposium on Operating Systems Design and Implementation (OSDI 23).
- Liang et al. (2022). Holistic Evaluation of Language Models. arXiv preprint arXiv:2211.09110.
- Lie (2021). Thinking Outside the Die: Architecting the ML Accelerator of the Future.
- Lighthill (1973). Artificial Intelligence: A General Survey. Artificial Intelligence: A Paper Symposium.
- Lin et al. (2014). Microsoft COCO: Common Objects in Context. European Conference on Computer Vision (ECCV).
- Lin et al. (2020). MCUNet: Tiny Deep Learning on IoT Devices. Advances in Neural Information Processing Systems 33: Annual Conference on Neural Information Processing Systems 2020, NeurIPS 2020, December 6-12, 2020, virtual.
- Lin et al. (2024). AWQ: Activation-aware Weight Quantization for on-device LLM compression and acceleration. Proceedings of Machine Learning and Systems.
- Lindholm et al. (2008). NVIDIA Tesla: A Unified Graphics and Computing Architecture. IEEE Micro.
- Linnainmaa (1970). The Representation of the Cumulative Rounding Error of an Algorithm as a Taylor Expansion of the Local Rounding Errors.
- Little (1961). A Proof for the Queuing Formula: . Operations Research.
- Liu et al. (2019). DARTS: Differentiable Architecture Search. International Conference on Learning Representations (ICLR).
- Liu et al. (2021). Swin Transformer: Hierarchical Vision Transformer Using Shifted Windows. 2021 IEEE/CVF International Conference on Computer Vision (ICCV).
- Liu et al. (2022). A ConvNet for the 2020s. 2022 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR).
- Loshchilov and Hutter (2019). Decoupled Weight Decay Regularization. Proceedings of the International Conference on Learning Representations (ICLR).
- Lowe (1999). Object recognition from local scale-invariant features. Proceedings of the Seventh IEEE International Conference on Computer Vision.
- Lu et al. (2023). STEP: Learning N:M Structured Sparsity Masks from Scratch with Precondition. arXiv preprint.
- Lucic et al. (2018). Are GANs Created Equal? A Large-Scale Study. Advances in Neural Information Processing Systems (NeurIPS).
- Lundberg and Lee (2017). A Unified Approach to Interpreting Model Predictions. Advances in Neural Information Processing Systems (NeurIPS).
- Lyons (2011). Understanding Digital Signal Processing. Prentice Hall.
- Machanavajjhala et al. (2007). l-Diversity: Privacy Beyond k-Anonymity. ACM Transactions on Knowledge Discovery from Data.
- Fowler (2014). Canary Release. Martin Fowler’s Blog.
- Mattson et al. (2020). MLPerf Training Benchmark. Proceedings of Machine Learning and Systems (MLSys).
- Mazumder et al. (2021). Multilingual Spoken Words Corpus. Advances in Neural Information Processing Systems 35 (NeurIPS 2021) Datasets and Benchmarks Track.
- Mazumder (2021). TinyML: Multilingual spoken words corpus. tinyML Talks.
- Mazumder et al. (2023). DataPerf: Benchmarks for Data-centric AI Development. Advances in Neural Information Processing Systems.
- McCarthy et al. (1955). A Proposal for the Dartmouth Summer Research Project on Artificial Intelligence, August 31, 1955. Dartmouth College.
- McCrory (2010). Data Gravity – In the Clouds.
- McCulloch and Pitts (1943). A logical calculus of the ideas immanent in nervous activity. The Bulletin of Mathematical Biophysics.
- McKinsey Global Institute (2021). The Internet of Things: Catching Up to an Accelerating Opportunity.
- McMahan et al. (2017). Communication-Efficient Learning of Deep Networks from Decentralized Data. International Conference on Artificial Intelligence and Statistics (AISTATS).
- Mellempudi et al. (2019). Mixed Precision Training With 8-bit Floating Point. arXiv preprint arXiv:1905.12334.
- Merity et al. (2016). Pointer Sentinel Mixture Models. arXiv preprint arXiv:1609.07843.
- Netflix (2024). Metaflow.
- Michel et al. (2011). Quantitative Analysis of Culture Using Millions of Digitized Books. Science.
- Michel et al. (2019). Are Sixteen Heads Really Better than One?. Advances in Neural Information Processing Systems (NeurIPS).
- Micikevicius et al. (2017). Mixed Precision Training. arXiv preprint arXiv:1710.03740.
- Micikevicius et al. (2022). FP8 Formats for Deep Learning. arXiv preprint arXiv:2209.05433.
- Lee (2016). Learning from Tay’s Introduction. The Official Microsoft Blog.
- Mikolov et al. (2013). Efficient Estimation of Word Representations in Vector Space. International Conference on Learning Representations (ICLR).
- Mila (2026). Open Source Software.
- Minsky and Papert (1969). Perceptrons. The MIT Press.
- Mirhoseini et al. (2017). Device Placement Optimization with Reinforcement Learning. Proceedings of the 34th International Conference on Machine Learning (ICML).
- Mitchell (1980). The Need for Biases in Learning Generalizations.
- Mitchell et al. (2019). Model Cards for Model Reporting. Proceedings of the Conference on Fairness, Accountability, and Transparency.
- MLCommons (2026). MLCommons: About Us.
- MLflow Project (2026). MLflow Model Registry.
- Databricks (2024). MLflow: An Open Source Platform for the Machine Learning Lifecycle.
- MLCommons (2026). MLPerf Client Benchmark.
- MLCommons (2024). MLPerf Mobile Benchmark.
- MLCommons (2024). MLPerf Power Measurement.
- MLCommons (2024). MLPerf Training Benchmark.
- Moore (1998). Cramming More Components Onto Integrated Circuits. Proceedings of the IEEE.
- Moravec (1988). Mind Children: The Future of Robot and Human Intelligence. Harvard University Press.
- Moritz et al. (2018). Ray: A Distributed Framework for Emerging AI Applications. Proceedings of the 13th USENIX Symposium on Operating Systems Design and Implementation (OSDI).
- Amazon Web Services (2024). Amazon Mechanical Turk.
- Murray et al. (2021). tf.data. Proceedings of the VLDB Endowment.
- Nair and Hinton (2010). Rectified Linear Units Improve Restricted Boltzmann Machines. Proceedings of the 27th international conference on machine learning (ICML-10).
- Nakkiran et al. (2019). Deep Double Descent: Where Bigger Models and More Data Hurt. arXiv preprint arXiv:1912.02292.
- Narayanan et al. (2019). PipeDream. Proceedings of the 27th ACM Symposium on Operating Systems Principles.
- Narayanan et al. (2021). Efficient large-scale language model training on GPU clusters using Megatron-LM. Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis.
- Mars Climate Orbiter Mishap Investigation Board (1999). Mars Climate Orbiter Mishap Investigation Board Phase I Report.
- National Aeronautics and Space Administration (2016). NASA Systems Engineering Handbook.
- Naumov et al. (2019). Deep Learning Recommendation Model for Personalization and Recommendation Systems. arXiv preprint arXiv:1906.00091.
- naur1969softwareengineering (1969). Software Engineering: Report of a Conference Sponsored by the NATO Science Committee, Garmisch, Germany, 7–11 October 1968.
- Nayak et al. (2022). Improving Voice Trigger Detection With Metric Learning. Interspeech 2022.
- Project Jupyter (2026). nbconvert: Convert Notebooks to Other Formats.
- Newell and Simon (1976). Computer Science as Empirical Inquiry: Symbols and Search. Communications of the ACM.
- Neyshabur et al. (2017). Exploring Generalization in Deep Learning. Advances in Neural Information Processing Systems.
- Ng (2021). MLOps: From Model-centric to Data-centric AI. DeepLearning.AI.
- Nickolls et al. (2008). Scalable Parallel Programming With CUDA. ACM Queue.
- Norrie et al. (2021). The Design Process for Google’s Training Chips: TPUv2 and TPUv3. IEEE Micro.
- Northcutt et al. (2021). Pervasive Label Errors in Test Sets Destabilize Machine Learning Benchmarks. Advances in Neural Information Processing Systems 34 (NeurIPS 2021) Track on Datasets and Benchmarks.
- National Transportation Safety Board (2017). Collision Between a Car Operating With Automated Vehicle Control Systems and a Tractor-Semitrailer Truck Near Williston, Florida, May 7, 2016.
- National Transportation Safety Board (2019). Collision Between Vehicle Controlled by Developmental Automated Driving System and Pedestrian, Tempe, Arizona, March 18, 2018.
- NVIDIA Corporation (2017). NVIDIA Tesla V100 GPU Architecture. NVIDIA Whitepaper.
- NVIDIA Corporation (2018). NVIDIA Tesla T4 Tensor Core GPU. NVIDIA product documentation.
- NVIDIA Corporation (2020). NVIDIA V100 Tensor Core GPU Datasheet. NVIDIA product documentation.
- NVIDIA Corporation (2021). NVIDIA A100 Tensor Core GPU Datasheet. NVIDIA product documentation.
- NVIDIA Corporation (2021). NVIDIA cuDNN Developer Guide.
- NVIDIA Corporation (2023). NVIDIA cuDNN Developer Guide, Version 8.9.6.
- NVIDIA Corporation (2024). NVIDIA Blackwell Architecture. NVIDIA product documentation.
- NVIDIA (2024). NVIDIA TensorRT: Programmable Inference Accelerator.
- NVIDIA (2026). NVIDIA Quantum-X800 InfiniBand Platform. NVIDIA product documentation.
- NVIDIA Corporation (2026). How TensorRT Works.
- NVIDIA Corporation (2026). Working with Dynamic Shapes.
- NVIDIA (2026). Lazy Loading: CUDA Programming Guide.
- NVIDIA (2026). NVIDIA CUDA Multi-Process Service.
- NVIDIA (2026). NVIDIA Multi-Instance GPU User Guide.
- NVIDIA (2026). NVIDIA TensorRT-LLM.
- NVIDIA (2026). Model Management: NVIDIA Triton Inference Server.
- NVIDIA (2026). Model Repository: NVIDIA Triton Inference Server.
- NVIDIA (2024). cuBLAS: CUDA Basic Linear Algebra Subprograms.
- NVIDIA (2020). Accelerating Matrix Multiplication with Block Sparse Format and NVIDIA Tensor Cores.
- NVIDIA (2024). NVIDIA Omniverse and Simulation.
- NVIDIA (2017). Training with Mixed Precision.
- NVIDIA (2020). TensorFloat-32 in the A100 GPU Accelerates AI Training, HPC up to 20x.
- NVIDIA (2024). NVIDIA Triton Inference Server.
- Oakden-Rayner et al. (2020). Hidden stratification causes clinically meaningful failures in machine learning for medical imaging. Proceedings of the ACM Conference on Health, Inference, and Learning.
- Obermeyer et al. (2019). Dissecting racial bias in an algorithm used to manage the health of populations. Science.
- Olston et al. (2017). TensorFlow-Serving: Flexible, High-Performance ML Serving. Workshop on ML Systems at NIPS.
- Intel Corporation (2021). oneDNN: Intel’s Deep Learning Neural Network Library.
- Microsoft (2024). ONNX Runtime: Cross-Platform Inference and Training Machine-Learning Accelerator. GitHub.
- OpenAI (2023). Introducing ChatGPT and Whisper APIs.
- OpenAI (2023). New Models and Developer Products Announced at DevDay.
- OpenAI et al. (2023). GPT-4 Technical Report. arXiv preprint arXiv:2303.08774.
- OpenAI (2023). GPT-4.
- OpenAI (2024). GPT-4o Mini: Advancing Cost-Efficient Intelligence.
- OpenAI Developer Community (2024). Announcing GPT-4o in the API.
- OpenBLAS Project (2026). OpenBLAS: An Optimized BLAS Library.
- Intel Corporation (2026). OpenVINO Documentation.
- Orr et al. (2021). Managing ML Pipelines. Proceedings of the VLDB Endowment.
- Owens et al. (2008). GPU Computing. Proceedings of the IEEE.
- Paleyes et al. (2022). Challenges in Deploying Machine Learning: A Survey of Case Studies. ACM Computing Surveys.
- Palmer (1980). The Intel 8087 Numeric Data Processor. Proceedings of the 1980 National Computer Conference (AFIPS).
- Papermill Project (2026). Papermill Documentation.
- Papineni et al. (2002). Bleu. Proceedings of the 40th Annual Meeting on Association for Computational Linguistics - ACL ’02.
- Pareto (1896). Cours d’économie politique. F. Rouge.
- Park et al. (2019). SpecAugment: A Simple Data Augmentation Method for Automatic Speech Recognition. Interspeech 2019.
- Paszke et al. (2019). PyTorch: An Imperative Style, High-Performance Deep Learning Library. Advances in Neural Information Processing Systems (NeurIPS).
- Hennessy and Patterson (2017). Computer Architecture: A Quantitative Approach. Morgan Kaufmann.
- Patterson et al. (2021). Carbon Emissions and Large Neural Network Training. arXiv preprint arXiv:2104.10350.
- Paul et al. (2021). Deep Learning on a Data Diet: Finding Important Examples Early in Training. Advances in Neural Information Processing Systems (NeurIPS).
- Maslej et al. (2024). Artificial Intelligence Index Report 2024. CoRR.
- Pham et al. (2018). Efficient Neural Architecture Search via Parameter Sharing. Proceedings of the 35th International Conference on Machine Learning (ICML).
- Pichai (2023). Introducing Gemini: Our Largest and Most Capable AI Model.
- Pineau et al. (2021). Improving reproducibility in machine learning research (a report from the neurips 2019 reproducibility program). Journal of machine learning research.
- Pope et al. (2023). Efficiently Scaling Transformer Inference. Proceedings of Machine Learning and Systems (MLSys).
- Prefect Technologies, Inc. (2024). Prefect: Workflow Orchestration Framework for Python.
- Cloud Native Computing Foundation (2024). Prometheus: Monitoring System and Time Series Database.
- Protocol Buffers Authors (2026). Overview: Protocol Buffers.
- Pushkarna et al. (2022). Data Cards: Purposeful and Transparent Dataset Documentation for Responsible AI. Proceedings of the 2022 ACM Conference on Fairness, Accountability, and Transparency (FAccT).
- Putnam et al. (2014). A reconfigurable fabric for accelerating large-scale datacenter services. Proceedings of the 41st Annual International Symposium on Computer Architecture (ISCA).
- PyTorch Contributors (2026). Tensor Views.
- PyTorch Contributors (2026). PyTorch Autograd Mechanics.
- PyTorch Contributors (2026). torch.export.
- PyTorch Contributors (2026). TorchScript.
- PyTorch (2022). Accelerating Neural Network Training with Sparse Tensors.
- Qi et al. (2021). An efficient pruning scheme of deep neural networks for Internet of Things applications. EURASIP Journal on Advances in Signal Processing.
- quinonero2009dataset (2009). Dataset Shift in Machine Learning. The MIT Press.
- Rachwan et al. (2022). Winning the lottery ahead of time: Efficient early network pruning. International Conference on Machine Learning (ICML).
- Radford et al. (2019). Language models are unsupervised multitask learners.
- Radford et al. (2021). Learning transferable visual models from natural language supervision. International Conference on Machine Learning (ICML).
- Raichle and Gusnard (2002). Appraising the Brain’s Energy Budget. Proceedings of the National Academy of Sciences.
- Rainio et al. (2024). Evaluation metrics and statistical tests for machine learning. Scientific Reports.
- Raji and Buolamwini (2019). Actionable Auditing. Proceedings of the 2019 AAAI/ACM Conference on AI, Ethics, and Society.
- Rajpurkar et al. (2016). SQuAD: 100,000+ Questions for Machine Comprehension of Text. Proceedings of the 2016 Conference on Empirical Methods in Natural Language Processing.
- Ranjit et al. (2019). Efficient Deep Learning Hyperparameter Tuning Using Cloud Infrastructure: Intelligent Distributed Hyperparameter Tuning With Bayesian Optimization in the Cloud. 2019 IEEE 12th International Conference on Cloud Computing (CLOUD).
- Ratner et al. (2017). Snorkel. Proceedings of the VLDB Endowment.
- Ratner et al. (2018). Snorkel MeTaL. Proceedings of the Second Workshop on Data Management for End-To-End Machine Learning.
- Ratner et al. (2019). Weak supervision: A new programming paradigm for machine learning. Stanford AI Lab Blog.
- Reagen et al. (2017). Deep Learning for Computer Architects. Springer International Publishing.
- Real et al. (2019). Regularized Evolution for Image Classifier Architecture Search. AAAI Conference on Artificial Intelligence.
- Recht et al. (2019). Do ImageNet Classifiers Generalize to ImageNet?. Proceedings of the 36th International Conference on Machine Learning (ICML).
- Reddi et al. (2019). MLPerf Inference Benchmark. 2020 ACM/IEEE 47th Annual International Symposium on Computer Architecture (ISCA).
- Ren et al. (2021). A Survey of Deep Active Learning. ACM Computing Surveys.
- Ribeiro et al. (2016). Why Should I Trust You?: Explaining the Predictions of Any Classifier. Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining.
- Ribeiro et al. (2020). Auditing radicalization pathways on YouTube. Proceedings of the 2020 Conference on Fairness, Accountability, and Transparency.
- Ribeiro et al. (2020). Beyond Accuracy: Behavioral Testing of NLP Models with CheckList. Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics.
- Roesch et al. (2018). Relay: A New IR for Machine Learning Frameworks. Proceedings of the 2nd ACM SIGPLAN International Workshop on Machine Learning and Programming Languages.
- Rombach et al. (2022). High-Resolution Image Synthesis With Latent Diffusion Models. 2022 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR).
- Romero et al. (2021). INFaaS: Automated Model-less Inference Serving. 2021 USENIX Annual Technical Conference (USENIX ATC 21).
- Rosenblatt (1957). The Perceptron: A Perceiving and Recognizing Automaton.
- Rosenblatt (1958). The perceptron: A probabilistic model for information storage and organization in the brain. Psychological Review.
- Royce (1970). Managing the Development of Large Software Systems. Proceedings of IEEE WESCON.
- Rumelhart et al. (1986). Learning representations by back-propagating errors. Nature.
- Russakovsky et al. (2015). ImageNet Large Scale Visual Recognition Challenge. International Journal of Computer Vision.
- Sabour et al. (2017). Dynamic Routing Between Capsules. Advances in Neural Information Processing Systems (NeurIPS).
- Sambasivan et al. (2021). ``Everyone wants to do the model work, not the data work’’: Data Cascades in High-Stakes AI. Proceedings of the 2021 CHI Conference on Human Factors in Computing Systems.
- Samuel (1959). Some Studies in Machine Learning Using the Game of Checkers. IBM Journal of Research and Development.
- Sandler et al. (2018). MobileNetV2: Inverted Residuals and Linear Bottlenecks. 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition.
- Sanh et al. (2019). DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter. 5th Workshop on Energy Efficient Machine Learning and Cognitive Computing at NeurIPS 2019.
- Savage (2009). The Flaw of Averages: Why We Underestimate Risk in the Face of Uncertainty. John Wiley & Sons.
- Scale AI, Inc. (2024). Scale AI Advanced Settings.
- Schelter et al. (2018). Automating large-scale machine learning model management. Proceedings of the 2018 IEEE International Conference on Data Engineering (ICDE).
- Schwartz et al. (2020). Green AI. Communications of the ACM.
- scikit-learn developers (2024). sklearn.metrics.confusion_matrix — scikit-learn documentation. scikit-learn Documentation.
- scikit-learn developers (2024). Feature selection — scikit-learn documentation. scikit-learn Documentation.
- Scott (2012). Numbers every programmer should know by year.
- Sculley et al. (2015). Hidden Technical Debt in Machine Learning Systems. Advances in Neural Information Processing Systems (NeurIPS).
- U.S. Securities and Exchange Commission (2013). Securities Exchange Act of 1934, Release No. 70694: Knight Capital Americas LLC.
- Patel and Wong (2023). GPT-4 Architecture, Infrastructure, Training Dataset, Costs, Vision, MoE. SemiAnalysis Blog.
- Sener and Savarese (2018). Active Learning for Convolutional Neural Networks: A Core-Set Approach. International Conference on Learning Representations (ICLR).
- Sennrich et al. (2016). Improving Neural Machine Translation Models with Monolingual Data. Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers).
- Sergeev and Balso (2018). Horovod: fast and easy distributed deep learning in TensorFlow. arXiv preprint arXiv:1802.05799.
- Settles (2009). Active Learning Literature Survey.
- Settles (2012). Active Learning. Springer Cham.
- Sevilla et al. (2022). Compute Trends Across Three Eras of Machine Learning. 2022 International Joint Conference on Neural Networks (IJCNN).
- Shah et al. (2024). FlashAttention-3: Fast and Accurate Attention With Asynchrony and Low-Precision. Advances in Neural Information Processing Systems 37 (NeurIPS).
- Shannon (1948). A Mathematical Theory of Communication. Bell System Technical Journal.
- Shazeer et al. (2017). Outrageously large neural networks: The sparsely-gated mixture-of-experts layer. International Conference on Learning Representations (ICLR).
- Shazeer and Stern (2018). Adafactor: Adaptive Learning Rates with Sublinear Memory Cost. International Conference on Machine Learning (ICML).
- Shen et al. (2019). Nexus. Proceedings of the 27th ACM Symposium on Operating Systems Principles.
- Shen et al. (2020). Q-BERT: Hessian Based Ultra Low Precision Quantization of BERT. Proceedings of the AAAI Conference on Artificial Intelligence.
- Sheng and Zhang (2019). Machine Learning With Crowdsourcing: A Brief Summary of the Past Research and Future Directions. The Thirty-Third AAAI Conference on Artificial Intelligence, AAAI 2019, The Thirty-First Innovative Applications of Artificial Intelligence Conference, IAAI 2019, The Ninth AAAI Symposium on Educational Advances in Artificial Intelligence, EAAI 2019, Honolulu, Hawaii, USA, January 27 - February 1, 2019.
- Shi et al. (2016). Edge Computing: Vision and Challenges. IEEE Internet of Things Journal.
- Shneiderman (2022). Human-centered AI. Oxford University Press.
- Shoeybi et al. (2019). Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism. arXiv preprint arXiv:1909.08053.
- Shokri et al. (2017). Membership Inference Attacks Against Machine Learning Models. 2017 IEEE Symposium on Security and Privacy (SP).
- Shorten and Khoshgoftaar (2019). A Survey on Image Data Augmentation for Deep Learning. Journal of Big Data.
- Shortliffe et al. (1975). Computer-based consultations in clinical therapeutics: Explanation and rule acquisition capabilities of the MYCIN system. Computers and Biomedical Research.
- Shumailov et al. (2024). AI Models Collapse When Trained on Recursively Generated Data. Nature.
- Sifre and Mallat (2014). Rigid-Motion Scattering for Image Classification. arXiv preprint arXiv:1403.1687.
- Silver et al. (2016). Mastering the game of Go with deep neural networks and tree search. Nature.
- Silver et al. (2017). Mastering the game of Go without human knowledge. Nature.
- Simonyan and Zisserman (2015). Very Deep Convolutional Networks for Large-Scale Image Recognition. Proceedings of the International Conference on Learning Representations (ICLR).
- Snow et al. (2008). Cheap and fast—but is it good?. Proceedings of the Conference on Empirical Methods in Natural Language Processing - EMNLP ’08.
- Sohn et al. (2020). FixMatch: Simplifying Semi-supervised Learning with Consistency and Confidence. Advances in Neural Information Processing Systems (NeurIPS).
- Sokolova and Lapalme (2009). A systematic analysis of performance measures for classification tasks. Information Processing & Management.
- Soviany et al. (2022). Curriculum Learning: A Survey. International Journal of Computer Vision.
- Srivastava et al. (2014). Dropout: a simple way to prevent neural networks from overfitting. Journal of Machine Learning Research.
- Statista Research Department (2024). Number of sent and received e-mails per day worldwide from 2017 to 2027. Statista.
- Stephens et al. (2017). The ARM Scalable Vector Extension. IEEE Micro.
- Stonebraker et al. (2018). C-Store: A Column-Oriented DBMS. Making Databases Work: the Pragmatic Wisdom of Michael Stonebraker.
- Strassen (1969). Gaussian elimination is not optimal. Numerische Mathematik.
- Strathern (1997). `Improving Ratings’: Audit in the British University System. European Review.
- Stromberg (2015). When was the first traffic light installed? Today in 1914. Vox.
- Strubell et al. (2019). Energy and Policy Considerations for Deep Learning in NLP. Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics.
- Sullivan et al. (2012). Overview of the High Efficiency Video Coding (HEVC) Standard. IEEE Transactions on Circuits and Systems for Video Technology.
- Sun et al. (2020). Scalability in Perception for Autonomous Driving: Waymo Open Dataset. Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition.
- Sutskever et al. (2014). Sequence to Sequence Learning with Neural Networks. Advances in Neural Information Processing Systems (NeurIPS).
- Sutton (2019). The Bitter Lesson. incompleteideas.net.
- Sweeney (2002). K-ANONYMITY: A MODEL for PROTECTING PRIVACY. International Journal of Uncertainty, Fuzziness and Knowledge-Based Systems.
- Sze et al. (2017). Efficient Processing of Deep Neural Networks: A Tutorial and Survey. Proceedings of the IEEE.
- Szegedy et al. (2015). Going deeper with convolutions. 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR).
- Tan et al. (2019). MnasNet: Platform-Aware Neural Architecture Search for Mobile. 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR).
- Tan and Le (2019). EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. International Conference on Machine Learning (ICML).
- Teerapittayanon et al. (2017). BranchyNet: Fast Inference via Early Exiting From Deep Neural Networks. 2016 23rd International Conference on Pattern Recognition (ICPR).
- Telgarsky (2016). Benefits of Depth in Neural Networks. Proceedings of the 29th Annual Conference on Learning Theory.
- TensorFlow Developers (2024). Optimize TensorFlow Performance Using the Profiler.
- TensorFlow Developers (2024). Better Performance with tf.function.
- HashiCorp (2014). Terraform: Infrastructure as Code. Software available from https://www.terraform.io/.
- Tesler (1984). The Law of Conservation of Complexity. Web page.
- Thyagarajan et al. (2022). Identifying Incorrect Annotations in Multi-Label Classification Data. CoRR.
- Tibshirani (1996). Regression Shrinkage and Selection via the Lasso. Journal of the Royal Statistical Society: Series B (Methodological).
- Tillet et al. (2019). Triton: An Intermediate Language and Compiler for Tiled Neural Network Computations. Proceedings of the 3rd ACM SIGPLAN International Workshop on Machine Learning and Programming Languages.
- Toneva et al. (2019). An Empirical Study of Example Forgetting During Deep Neural Network Learning. International Conference on Learning Representations (ICLR).
- Touvron et al. (2023). LLaMA: Open and Efficient Foundation Language Models. arXiv preprint arXiv:2302.13971.
- Touvron et al. (2023). Llama 2: Open Foundation and Fine-Tuned Chat Models. arXiv preprint arXiv:2307.09288.
- Tramèr et al. (2016). Stealing machine learning models via prediction APIs. 25th USENIX Security Symposium (USENIX Security 16).
- Tschand et al. (2024). MLPerf Power: Benchmarking the Energy Efficiency of Machine Learning Systems From μWatts to MWatts for Sustainable AI. 2025 IEEE International Symposium on High Performance Computer Architecture (HPCA).
- Turakhia et al. (2018). Darwin: A Genomics Co-processor Provides up to 15,000X Acceleration on Long Read Assembly. Proceedings of the Twenty-Third International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS).
- Turing (1950). I.—Computing Machinery and Intelligence. Mind.
- Dua and Graff (2024). UCI Machine Learning Repository.
- Ultralytics (2023). YOLOv8.
- Umuroglu et al. (2017). Finn. Proceedings of the 2017 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays.
- Equal Employment Opportunity Commission et al. (1978). Uniform Guidelines on Employee Selection Procedures. Code of Federal Regulations.
- Vasisht et al. (2017). FarmBeats: An IoT Platform for Data-Driven Agriculture. 14th USENIX Symposium on Networked Systems Design and Implementation (NSDI 17).
- Vaswani et al. (2017). Attention Is All You Need. Advances in Neural Information Processing Systems (NeurIPS).
- Google Cloud (2026). Explore Models in Model Garden.
- Google Cloud (2024). Tune models overview.
- Google Cloud (2024). Vertex AI Model Registry.
- Villalobos et al. (2022). Will we run out of data? Limits of LLM scaling based on human-generated data. arXiv preprint arXiv:2211.04325.
- Viola and Jones (2001). Rapid object detection using a boosted cascade of simple features. Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition. CVPR 2001.
- Wang et al. (2018). GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding. Proceedings of the 2018 EMNLP Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP.
- Wang et al. (2018). SkipNet: Learning Dynamic Routing in Convolutional Networks. European Conference on Computer Vision (ECCV).
- Wang et al. (2019). Balanced Datasets Are Not Enough: Estimating and Mitigating Gender Bias in Deep Image Representations. 2019 IEEE/CVF International Conference on Computer Vision (ICCV).
- Wang et al. (2019). Benchmarking TPU, GPU, and CPU Platforms for Deep Learning. arXiv preprint arXiv:1907.10701.
- Wang et al. (2019). SuperGLUE: A Stickier Benchmark for General-Purpose Language Understanding Systems. arXiv preprint arXiv:1905.00537.
- Wang et al. (2018). SuperNeurons: Dynamic GPU Memory Management for Training Deep Neural Networks. Proceedings of the 23rd ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming.
- Wang et al. (2021). CNN Explainer: Learning Convolutional Neural Networks With Interactive Visualization. IEEE Transactions on Visualization and Computer Graphics.
- Warden (2018). Speech Commands: A Dataset for Limited-Vocabulary Speech Recognition. arXiv preprint arXiv:1804.03209.
- Warden and Situnayake (2020). TinyML: Machine learning with TensorFlow Lite on Arduino and ultra-low-power microcontrollers. O’Reilly Media.
- Waterman et al. (2013). The RISC-V Instruction Set. 2013 IEEE Hot Chips 25 Symposium (HCS).
- Wei et al. (2022). Chain-Of-Thought Prompting Elicits Reasoning in Large Language Models. Advances in Neural Information Processing Systems (NeurIPS).
- Weights & Biases, Inc. (2024). Weights & Biases: The AI Developer Platform.
- Weiser (1991). The Computer for the 21st Century. Scientific American.
- Weizenbaum (1966). ELIZA–a computer program for the study of natural language communication between man and machine. Communications of the ACM.
- Welling (2009). Herding dynamical weights to learn. Proceedings of the 26th Annual International Conference on Machine Learning.
- Wengert (1964). A simple automatic derivative evaluation program. Communications of the ACM.
- Werbos (1974). Beyond regression: New tools for prediction and analysis in the behavioral sciences.
- Werchniak et al. (2021). Exploring the application of synthetic audio in training keyword spotters. ICASSP 2021 - 2021 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP).
- Wexler et al. (2020). The What-If Tool: Interactive Probing of Machine Learning Models. IEEE Transactions on Visualization and Computer Graphics.
- Widmer and Kubat (1996). Learning in the Presence of Concept Drift and Hidden Contexts. Machine Learning.
- Merity (2016). The WikiText Long Term Dependency Language Modeling Dataset.
- Williams et al. (2009). Roofline. Communications of the ACM.
- Wolpert and Macready (1997). No free lunch theorems for optimization. IEEE Transactions on Evolutionary Computation.
- Wu et al. (2019). FBNet: Hardware-Aware Efficient ConvNet Design via Differentiable Neural Architecture Search. 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR).
- Wu et al. (2019). Fast Neural Networks: Efficient and Adaptive Computation for Inference. Advances in Neural Information Processing Systems (NeurIPS).
- Wu et al. (2020). Integer Quantization for Deep Learning Inference: Principles and Empirical Evaluation. arXiv preprint arXiv:2004.09602.
- Wulf and McKee (1995). Hitting the memory wall. ACM SIGARCH Computer Architecture News.
- Xin et al. (2021). BERxiT: Early Exiting for BERT With Better Fine-Tuning and Extension to Regression. Proceedings of the 16th Conference of the European Chapter of the Association for Computational Linguistics: Main Volume.
- Xu et al. (2024). Benchmarking Benchmark Leakage in Large Language Models. arXiv preprint arXiv:2404.18824.
- Yang et al. (2020). Resolution Adaptive Networks for Efficient Inference. 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR).
- Yao et al. (2021). HAWQ-V3: Dyadic Neural Network Quantization. Proceedings of the 38th International Conference on Machine Learning (ICML).
- Yee et al. (2021). Image Cropping on Twitter: Fairness Metrics, Their Limitations, and the Importance of Representation, Design, and Agency. Proceedings of the ACM on Human-Computer Interaction.
- Yosinski et al. (2014). How transferable are features in deep neural networks?. Advances in neural information processing systems.
- Yu et al. (2022). Orca: A Distributed Serving System for Transformer-Based Generative Models. 16th USENIX Symposium on Operating Systems Design and Implementation (OSDI 22).
- Yun et al. (2019). CutMix: Regularization Strategy to Train Strong Classifiers with Localizable Features. 2019 IEEE/CVF International Conference on Computer Vision (ICCV).
- Yurdakul and Naranjo (2020). Statistical properties of the population stability index. The Journal of Risk Model Validation.
- Zafrir et al. (2019). Q8BERT: Quantized 8Bit BERT. 2019 Fifth Workshop on Energy Efficient Machine Learning and Cognitive Computing - NeurIPS Edition (EMC2-NIPS).
- Zaharia et al. (2010). Spark: Cluster Computing with Working Sets. HotCloud.
- Zaharia et al. (2018). Accelerating the Machine Learning Lifecycle with MLflow. IEEE Data Engineering Bulletin.
- Zaharia et al. (2021). Lakehouse: A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics. Proceedings of CIDR.
- Zech et al. (2018). Variable generalization performance of a deep learning model to detect pneumonia in chest radiographs: A cross-sectional study. PLOS Medicine.
- Zhang et al. (2017). Highly wearable cuff-less blood pressure and heart rate monitoring with single-arm electrocardiogram and photoplethysmogram signals. BioMedical Engineering OnLine.
- Zhang et al. (2017). Hello Edge: Keyword Spotting on Microcontrollers.
- Zhang et al. (2017). Understanding deep learning requires rethinking generalization. International Conference on Learning Representations (ICLR).
- Zhang et al. (2018). Mitigating Unwanted Biases With Adversarial Learning. Proceedings of the 2018 AAAI/ACM Conference on AI, Ethics, and Society.
- Zhang et al. (2018). mixup: Beyond Empirical Risk Minimization. International Conference on Learning Representations (ICLR).
- Zhang et al. (2019). MArk: Exploiting Cloud Services for Cost-Effective, SLO-Aware Machine Learning Inference Serving. 2019 USENIX Annual Technical Conference (USENIX ATC 19).
- Zhang and Sennrich (2019). Root Mean Square Layer Normalization. Advances in Neural Information Processing Systems (NeurIPS).
- Zhang et al. (2020). Fast Hardware-Aware Neural Architecture Search. 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops (CVPRW).
- Zhao et al. (2024). GaLore: Memory-Efficient LLM Training by Gradient Low-Rank Projection. arXiv preprint.
- Zheng et al. (2020). Ansor: Generating High-Performance Tensor Programs for Deep Learning. Proceedings of the 14th USENIX Symposium on Operating Systems Design and Implementation (OSDI).
- Zhou et al. (2021). Learning N:M Fine-grained Structured Sparse Neural Networks From Scratch. arXiv preprint.
- Zhu et al. (2019). Deep Leakage from Gradients. Advances in Neural Information Processing Systems (NeurIPS).
- Zillow Group (2021). Zillow Group Reports Third-Quarter 2021 Financial Results and Shares Plan to Wind Down Zillow Offers Operations. Investor Relations Press Release.
- Zoph and Le (2016). Neural Architecture Search with Reinforcement Learning. Proceedings of the 5th International Conference on Learning Representations (ICLR).
- Zu et al. (2024). Resiliency at Scale: Managing Google’s TPUv4 Machine Learning Supercomputer. 21st USENIX Symposium on Networked Systems Design and Implementation (NSDI 24).
Таксономия D·A·M
Система, которая работает медленно, редко сообщает, почему. Простаивающий ускоритель может быть следствием голодающего входного конвейера (данные), алгоритма с недостаточной арифметической интенсивностью (алгоритм) или перегруженной шины памяти (машина). Это приложение формализует диагностическую таксономию книги для одного узла: оно сопоставляет симптомы профилировщика и измерения с осью, которая реально ограничивает исполнение, до того как начинается оптимизация. Читатель должен прийти с тремя осями из вводных глав и железным законом, который их количественно описывает.
Как пользоваться этим приложением
Используйте таксономию D·A·M, когда система не выполняет целевой показатель производительности, стоимости или качества, а причина пока неясна. Работайте с рамкой в четыре прохода:
- Зафиксируйте симптом и эксплуатационный бюджет: запишите пропущенную сквозную цель, нагрузку и контекст развертывания.
- Локализуйте кандидатную ось или границу: для первого прохода используйте «Справочник по осям D·A·M», а когда свидетельства пересекают оси, — «Справочник по пересечениям D·A·M».
- Проверьте гипотезу: сопоставьте свидетельства с железным законом и арифметической интенсивностью, затем соберите подтверждающие измерения с помощью «Карты инструментов D·A·M» и «Скрининговых индикаторов D·A·M».
- Вмешайтесь и измерьте заново: выберите рычаг из таблицы «Что работает, а что потрачено впустую» и повторите сквозное измерение. Если цель не улучшилась, пересмотрите гипотезу.
Симптом определяет наиболее полезную точку входа. Низкая загрузка ускорителя или медленная доставка батчей должна начинаться с разделов «Эмпирические правила» и «Диагностика в эксплуатации». Пропущенный целевой уровень обслуживания (SLO) должен перейти от времени фаз и глубины очереди в «Диагностической матрице D·A·M» к соответствующему члену железного закона. Плато качества стоит проверить по границе «данные–алгоритм» и по разделу «Законы масштабирования и Roofline», прежде чем выделять больше вычислений. В любом случае метка оси — это гипотеза, а не приговор: оси перекрываются, и полезная диагностика может назвать одновременно доминирующую ось и эффект границы.
Сводка диагностики
Таксономия напрямую связана с железным законом ML-систем, введенным в «Железном законе систем машинного обучения». «Справочник по осям D·A·M» суммирует роль, основное физическое ограничение и основной путь оптимизации для каждой оси.
| Ось | Роль | Физическое ограничение | Оптимизация с высоким рычагом |
|---|---|---|---|
| Данные (D) | Информация (топливо) | Объем, качество, скорость поступления | Отбор данных («Отбор данных») |
| Алгоритм (A) | Логика (чертеж) | Операции и зависимости | Сжатие моделей («Сжатие моделей») |
| Машина (M) | Физика (двигатель) | Вычисления, память, ввод-вывод | Аппаратное ускорение («Аппаратное ускорение») |
Справочник по осям D·A·M: каждая ось сопоставлена с классом ограничений и стратегией оптимизации. Сформулируйте гипотезу, подтвердите ее измерениями и затем переходите по ссылке на главу.
Такое разделение на первом проходе полезно, но производственные системы редко страдают от узкого места, сосредоточенного на одной оси. Гораздо чаще проблема лежит на границе двух осей — например, в выборе формата данных, который определяет, можно ли насытить GPU, или в стратегии прореживания, которая меняет паттерн доступа к памяти. Для таких случаев нужно отображать пересечения.
Ландшафт пересечений
Вводная глава использует «Ландшафт пересечений D·A·M», чтобы задать концептуальную карту. Здесь «Треугольник осей D·A·M» превращает эту карту в диагностическую последовательность. Сначала определите ось, которая ограничивает систему, а затем спросите, как вмешательство изменит две остальные.
Треугольник осей D·A·M: компактный диагностический вид данных, алгоритма и машины как трех взаимозависимых осей. Двунаправленные связи подчеркивают, что вмешательство по одной оси меняет ограничения на две другие.
С учетом оси, выявленной на первом проходе, «Справочник по пересечениям D·A·M» раскрывает парные и тройные пересечения в конкретные инженерные приемы и их основные главы книги.
| Зона | Название | Ключевые приемы | Где в книге |
|---|---|---|---|
| Данные | Информация | Форматы хранения, качество данных, распределения | «Инженерия данных» |
| Алгоритм | Логика | Функции потерь, архитектуры, градиенты | «Вычисления в нейронных сетях», «Архитектуры нейронных сетей» |
| Данные Алгоритм | Чему учиться | Отбор данных, учебные планы, масштабирование с оптимальным расходом вычислений | «Отбор данных», «Обучение моделей» |
| Данные Машина | Как перемещать информацию | Пропускная способность ввода-вывода, предвыборка, форматы данных | «Инженерия данных», «Аппаратное ускорение» |
| Алгоритм Машина | Как исполнять эффективно | Квантование, прореживание, слияние ядер, смешанная точность | «Фреймворки машинного обучения», «Сжатие моделей» |
| Машина | Физика | Кремний, иерархия памяти, пиковые FLOP/s | «Аппаратное ускорение» |
| Данные Алгоритм Машина | Инженерия ML-систем | Железный закон, Roofline, циклы обучения, обслуживание | «Обучение моделей», «Обслуживание моделей», «Бенчмаркинг» |
Справочник по пересечениям D·A·M: каждая зона сопоставляет конкретные приемы с осями, которые она охватывает, и с главами, которые их описывают. Парные пересечения требуют рассуждения сразу о двух областях; центр требует всех трех.
В аббревиатуре D·A·M данные, алгоритм и машина — это оси таксономии. Они не являются математическими переменными; формальные величины по-прежнему следуют разделу «Обозначения», где означает размер набора данных или число обучающих токенов.
Зоны, сосредоточенные на одной оси, содержат понятия, которые принадлежат прежде всего этой оси: форматы хранения и распределения относятся к данным, функции потерь и градиенты — к алгоритму, физика кремния и пиковые FLOP/s — к машине. Экспертиза в одной области может их ввести, но поведение развернутой системы все равно может зависеть от других осей.
Парные пересечения — там, где начинается системное мышление. Данные Алгоритм (чему учиться) охватывает отбор данных, учебные планы, активное обучение и законы масштабирования вроде Chinchilla ( для режима плотных авторегрессионных языковых моделей, который изучался) (Hoffmann et al., 2022) — все это требует совместного рассуждения о содержании информации и емкости алгоритма. Добавление данных без учета того, может ли модель из них учиться, тратит вычисления впустую; выбор архитектур без учета доступности данных тратит инженерное время. Данные Машина (как перемещать информацию) охватывает пропускную способность ввода-вывода, стратегии предвыборки, форматы данных и инвариант энергии перемещения. Именно здесь проявляется гравитация данных: физическая стоимость перемещения байтов по иерархии памяти определяет, достаточно ли быстро можно кормить машину. Алгоритм Машина (как исполнять эффективно) включает квантование, прореживание, слияние ядер, смешанную точность и оптимизацию вычислительного графа. Стратегия прореживания, которая снижает FLOP, но разрушает паттерны доступа к памяти, может замедлить исполнение на реальной аппаратуре.
Центр — Данные Алгоритм Машина — это место, где сходятся все три оси. Железный закон, модель Roofline, сквозные циклы обучения, конвейеры обслуживания и целостный бенчмаркинг требуют одновременного рассуждения о потоке данных, сложности алгоритма и загрузке аппаратуры. Этот центр — не отдельный прием; это сама дисциплина.
Пока ландшафт классифицирует, где работает прием, для выявления оси, которая реально тормозит нагрузку, нужно перевести эти связи в фактическое время исполнения — это роль железного закона.
Отображение на железный закон
Для последовательных фаз железный закон раскладывает работу по осям D·A·M на время исполнения. Здесь и — времена в секундах; — перемещенные байты, — байты в секунду; — работа в FLOP, — FLOP/s, а — безразмерная эффективность аппаратуры. Эти величины соотносятся с осями так:
Алгоритм и машина делят член вычислений, различаясь тем, какой переменной управляет инженер. Снижение общего числа операций () — рычаг алгоритма, тогда как повышение пиковой пропускной способности аппаратуры () или ее загрузки () — рычаг машины.
Это уравнение превращает отладку производительности из качественной игры в угадывание в количественную инженерную задачу. Доминирующая измеренная стоимость попадает в один из этих членов. Медленная система может перемещать слишком много данных (), не хватать пропускной способности (), выполнять слишком много операций (), не использовать пиковые возможности аппаратуры () или платить накладные расходы между осями (). Рычаги ниже сопоставляют конкретные оптимизации с улучшаемыми переменными.
Рычаги по компонентам
- Рычаг данных: сокращение перемещаемых байтов () дедупликацией, отбором или представлением с меньшей точностью либо повышение пропускной способности ввода-вывода ().
- Рычаг алгоритма: сокращение операций () прореживанием или уточнением архитектуры. Квантование сужает представление и может повысить пропускную способность аппаратуры; оно, как правило, не уменьшает число операций.
- Рычаг машины: увеличение знаменателя члена вычислений за счет роста пиковой пропускной способности () или коэффициента загрузки () через слияние ядер.
Координация D·A·M: от суммы к максимуму
Аддитивный железный закон описывает последовательное исполнение. Пусть обозначает время без перекрытия, а — измеренное время с перекрытием. Перекрытие может сдвигать сумму к максимуму, но зависимости, конкуренция за ресурсы и неполное перекрытие удерживают измеренное время выше этой идеальной нижней границы:
Задача системного инженера — заставить эти компоненты работать параллельно, а не последовательно. «Приемы перекрытия D·A·M» суммирует ключевые приемы координации D·A·M, которые перекрывают работу между осями:
| Прием | Перекрываемые оси D·A·M | Реализация |
|---|---|---|
| Предвыборка | D перекрывается с M | DataLoader с prefetch_factor, pin_memory=True |
| Потоки CUDA | D перекрывается с M | Отдельные потоки для передачи H2D и вычислений |
| Асинхронная синхронизация градиентов | M (коммуникации) перекрывается с A | Перекрытие группового AllReduce с оставшимися вычислениями обратного прохода |
| Двойная буферизация | D перекрывается с M | Заполнение буфера N+1 во время вычислений на буфере N |
Приемы перекрытия D·A·M: каждый прием перекрывает работу между осями, сдвигая последовательно сложенное время данных/машины и алгоритма/машины к его идеальной нижней границе — большему из двух членов. Зависимости и конкуренция ограничивают реально достижимое перекрытие.
Перекрытие дает наибольшее относительное ускорение, когда члены времени D·A·M примерно сбалансированы. Если один член доминирует (например, при сильной привязке к памяти), перекрытие меньшего члена с большим почти ничего не даст: максимум по-прежнему определяется тем же узким местом. Такой баланс достигается вблизи . Член задержки требует отдельного рассмотрения.
Накладные расходы, которые нельзя скрыть
Нескрытый член задержки (запуск ядра, барьеры синхронизации, диспетчеризация в Python) содержит точки сериализации, которые нельзя полностью перекрыть. Слияние ядер может уменьшить этот член, объединяя операции, но оно не устраняет всех накладных расходов на запуск, планирование и синхронизацию.
Железный закон количественно описывает время исполнения, которое тратит каждая стадия. Но то, что задает активный потолок производительности — перемещение данных или пропускная способность арифметики, — определяется их соотношением. Это область арифметической интенсивности.
Граница арифметической интенсивности
Граница между членом памяти данные/машина и членом вычислений алгоритм/машина не произвольна: она задается математически через арифметическую интенсивность1 () нагрузки.
Модель Roofline дает верхнюю границу производительности, когда трафик и достигнутые скорости измерены согласованно. В разгар производственного инцидента более быстрые скрининговые эвристики могут подсказать, какие измерения собрать следующими.
Эмпирические правила
В разгар производственного сбоя редко есть время решать полное уравнение железного закона. Опытные системные инженеры полагаются на количественные эвристики, которые быстро сужают область поиска; пороги ниже — скрининговые сигналы, которые нужно проверять по трассам профилировщика и аппаратным счетчикам.
- Низкая загрузка ускорителя ( 80 процентов): проверьте голодание данными, CPU или запуском. Подтвердите ожиданием входного конвейера, насыщением CPU хоста, счетчиками пропускной способности памяти и разрывами в трассе.
- Высокая загрузка ускорителя ( 95 процентов): считайте узкое место машинным только тогда, когда вычислительные блоки заняты, а пропускная способность памяти не насыщена. Если пропускная способность памяти насыщена, узкое место по-прежнему лежит на границе данных и машины.
- Если размер батча равен единице: это предупреждение, что может быть важна задержка или накладные расходы на запуск; подтвердите трассами, прежде чем объявлять узким местом сам алгоритм.
- Низкая арифметическая интенсивность (ниже точки перехода аппаратуры): нагрузка, вероятно, ограничена памятью (граница данных и машины). Точная граница равна и зависит от аппаратуры и точности.
- Если система работает в разработке, но падает в эксплуатации: рассматривайте дрейф данных как одну из гипотез наряду с различиями конфигурации, нагрузки, зависимостей и среды выполнения.
Распространенные промышленные метки пересекают оси. Исполнение, ограниченное памятью, находится на границе данных и машины, потому что важны и перемещенные байты, и доступная пропускная способность. Исполнение, ограниченное вычислениями, связывает работу алгоритма с пропускной способностью машины. Исполнение, ограниченное задержкой, может отражать последовательную глубину алгоритма, диспетчеризацию времени исполнения, синхронизацию или очереди.
Диагностика узкого места
Когда профилирование выявляет доминирующий член железного закона, оптимизации должны бить именно по этой оси. «Что работает, а что потрачено впустую» сопоставляет вмешательства, которые дают сквозное ускорение, с необязательными оптимизациями, которые тратят инженерные усилия:
| Если нагрузка… | Доминирующий член | Оптимизация, которая работает | Оптимизация, которая потрачена впустую |
|---|---|---|---|
| Ограничена памятью | Квантование; структурированное прореживание; батчинг для повторного использования весов; слияние, убирающее промежуточный трафик | Более быстрый ускоритель (больше FLOP/s не поможет) | |
| Ограничена вычислениями | Лучшие ядра, тензорные ядра, более быстрый ускоритель, более низкая точность | Больше пропускной способности памяти (это не связывающий член) | |
| Ограничена задержкой | Сокращение последовательной глубины; слияние или асинхронная диспетчеризация; батчинг в рамках бюджета | Больше вычислений или пропускной способности, если трасса не показывает, что это связывающий член |
Что работает, а что потрачено впустую: оптимизация несвязывающего члена дает малое или нулевое сквозное улучшение. Большая языковая модель, ограниченная памятью, не выиграет только от дополнительных пиковых FLOP/s, хотя ускоритель с большей пропускной способностью памяти может помочь.
Знать, что работает, значит также распознавать, что не работает. На практике команды под давлением сроков раз за разом попадают в одни и те же ловушки — уверенно оптимизируют не ту ось. Эти режимы сбоя достаточно распространены, чтобы получить собственные названия.
Антишаблоны
Диагностика систем часто сводится к исключению. Прежде чем браться за сложные оптимизации ядер, остерегайтесь этих распространенных ловушек, которые тратят инженерное время.
- Костыль из железа: покупка более быстрых ускорителей (машина), чтобы исправить медленный загрузчик данных на Python (данные). Новое железо просто будет простаивать быстрее.
- Подкручивание модели: смена нейронных архитектур (алгоритм), когда узкое место на самом деле — сетевая пропускная способность или ввод-вывод диска.
- Преждевременный оптимизатор: написание собственных ядер CUDA (машина) до проверки, не делает ли алгоритм просто слишком много лишних операций.
У каждого антишаблона одна и та же первопричина: действие до диагноза. Следующие разборы случаев показывают, как выглядит правильная диагностика — от запутанного симптома к систематическому сужению до доминирующей оси D·A·M.
Разборы случаев D·A·M
Теоретические ограничения в производстве часто проявляются как запутанные симптомы. Эти типичные сценарии показывают, как применять таксономию. Каждый случай следует одним и тем же трем диагностическим шагам: симптом, диагноз и исправление.
Случай 1: голодающий ускоритель (данные)
Команда выделяет большой экземпляр GPU A100, чтобы ускорить обучение, но время обучения почти не сокращается, а nvidia-smi показывает, что загрузка GPU колеблется между 10 и 40 процентами. Такая картина указывает на голодание ускорителя, но не выявляет его причину. Если трассы показывают разрывы ожидания входных данных при насыщении хранилища или декодирования на CPU, связывающим оказывается путь данных. Тогда полезное вмешательство находится в конвейере до модели. Оптимизируйте конвейер извлечения, преобразования и загрузки (ETL): перейдите от сырых JPEG с тяжелым декодированием на CPU к последовательным форматам вроде TFRecords или WebDataset, увеличьте параллелизм загрузчика данных и выполняйте предвыборку батчей в память ускорителя.
Случай 2: обрыв задержки (между осями)
Сервис рекомендаций в реальном времени не укладывается в соглашение об уровне обслуживания (SLA) с задержкой 20 мс, при этом загрузка ускорителя низкая, а размер батча равен единице. Такое сочетание указывает на накладные расходы запуска, трафик памяти или последовательную глубину модели, а не на насыщенный чип. Если трасса подтверждает, что доминирует последовательный путь слоев, добавление железа не устранит его; тогда прореживание или дистилляция знаний могут сократить работу модели. Если же доминирует трафик весов, квантование может уменьшить перемещаемые байты, используя INT8 там, где позволяет точность. Измерения выбирают средство.
Случай 3: стена вычислений (машина)
Загрузка ускорителя держится на уровне 99 процентов, пропускная способность памяти не насыщена, обучение стабильно, но занимает три недели. Если счетчики профилировщика также показывают высокую загрузку конвейеров вычислений и утилизацию FLOP модели (MFU), нагрузка ограничена вычислениями. Путь данных успевает кормить ускоритель, поэтому следующий шаг должен менять член вычислений в железном законе. Команда может перейти с A100 на ускоритель класса H100, масштабироваться вширь через параллелизм данных или снизить точность с FP32/TF32 до BF16 там, где это численно безопасно. На путях тензорных ядер NVIDIA пиковая пропускная способность BF16 обычно примерно в 2 раза выше, чем у TF32, а реальное ускорение зависит от ядер и узких мест (Choquette, 2023). Вместе три случая показывают, почему одна и та же цифра загрузки может подсказывать разные следующие шаги в зависимости от поведения функции потерь, размера батча и давления на память.
Проверка диагноза D·A·M
- Обучающее задание показывает загрузку ускорителя 95 процентов, но функция потерь две эпохи стоит на месте. Какие оси D·A·M могут быть виноваты и почему одной загрузки недостаточно, чтобы их различить?
- Ваш коллега предлагает добавить больше рабочих процессов загрузчика данных к заданию, где
nvidia-smiпоказывает загрузку GPU 98 процентов. Какие свидетельства из трасс нужны, чтобы решить, поможет ли это?- Сервер вывода выполняет целевую задержку SLO при размере батча 1, но не выполняет ее при размере батча 16. Какие члены железного закона и эффекты очередей могли измениться и какие измерения определяют связывающий режим?
Эти три случая иллюстрируют узкие места, пересекающие оси. В реальных производственных инцидентах симптомы часто перекрываются, а доминирующее узкое место может динамически смещаться по мере внедрения оптимизаций. Систематическое исключение требует сопоставлять сигналы профилировщика со структурированной диагностической матрицей.
Диагностика в эксплуатации
Выявление первопричины узких мест производительности требует систематического исключения. «Диагностическая матрица D·A·M» сопоставляет распространенные производственные режимы отказа с кандидатными осями и проверочными измерениями.
| Симптом | Гипотеза | Подтвердить | Действовать после подтверждения |
|---|---|---|---|
| Низкая загрузка ускорителя | Голодание данными или хоста | Разрывы трассы; счетчики загрузчика, CPU, хранилища, запусков | Предвыборка, распараллеливание или сокращение запусков. |
| Высокая задержка (P99) | Алгоритм, среда выполнения, очередь | P99 по фазам и глубина очереди | Оптимизировать доминирующую фазу. |
| Высокая стоимость обучения | Низкая эффективность полезной работы | MFU, коммуникации, время простоя | Сократить крупнейшие потери или уменьшить модель. |
| Высокие накладные расходы между GPU | Ограничение коммуникациями | Трасса устройств; разрывы коллективных операций | Группировать AllReduce; настроить перекрытие параллелизма данных. |
| Нехватка памяти (OOM) | Соответствие алгоритма и машины | Пиковые веса, состояния, активации | Контрольные точки, шардирование, квантование или уменьшение батча. |
Диагностическая матрица D·A·M: первые гипотезы и измерения для распространенных сбоев. Подтвердите связывающий компонент, прежде чем вмешиваться.
Карта инструментов
Диагностическая гипотеза требует конкретных аппаратных и программных счетчиков, прежде чем предпринимать корректирующие действия. «Карта инструментов D·A·M» связывает теоретические компоненты D·A·M с конкретными утилитами профилирования Linux и Python, которые их показывают.
| Ось | Ключевая метрика | Основной инструмент | Вспомогательный инструмент |
|---|---|---|---|
| Данные | Время загрузки и ожидания батча | Трасса профилировщика фреймворка | iostat, pidstat (ввод-вывод/CPU) |
| Алгоритм | FLOP, глубина модели | PyTorch Profiler | DeepSpeed Flops Profiler |
| Машина | Загрузка ускорителя, занятость SM | Nsight Compute | nvidia-smi, Nsight Systems |
Карта инструментов D·A·M: утилиты профилирования для диагностики узких мест по каждой оси D·A·M. Для быстрой первичной оценки начните с основного инструмента; вспомогательные используйте для глубокого анализа, когда вывод основного неоднозначен.
Профилировщики выдают сырые метрики — проценты загрузки, счетчики FLOP и измерения пропускной способности, — которые становятся пригодны для действий только после сопоставления с ограничениями нагрузки. Скоринговая карта D·A·M задает скрининговые сигналы, а не универсальные оценки: она выделяет, какие измерения требуют немедленного вмешательства.
Скоринговая карта D·A·M
Чтобы перейти от качественного угадывания к количественной оценке, показатели эффективности из «Скрининговых индикаторов D·A·M» помогают решить, что исследовать дальше. Этот вид «табеля» облегчает первое сравнение, но ни одна строка не дает универсальной оценки. MFU2 особенно полезен для обучения больших моделей.
| Ось | Метрика | Определение | Исследовать | Сильный сигнал |
|---|---|---|---|---|
| Данные | Накладные расходы ввода-вывода | 10 процентов (скрининг) | 1 процента (сильный) | |
| Алгоритм | Устранимая работа | Профилировщик или абляция находит избыточные операции | Найдена избыточная работа | Сквозная работа сокращается |
| Машина | MFU | 30 процентов (большие модели) | 50 процентов (тот же режим) |
Скрининговые индикаторы D·A·M: зависящие от контекста сигналы для исследования, а не универсальные оценки.
Скоринговая карта и модель Roofline отвечают на вопросы об эффективности, но в разных масштабах. Скоринговая карта проверяет текущую систему с помощью зависящих от контекста индикаторов. Законы масштабирования и метафора информационного Roofline спрашивают, что может произойти, когда система масштабируется за пределы своего текущего размера.
Законы масштабирования и Roofline
Системная инженерия требует различать траектории роста и фундаментальные пределы.
Законы масштабирования (путь)
Законы масштабирования3 — эмпирические степенные зависимости, которые предсказывают, как потеря на удержанной выборке меняется с ростом ресурсов внутри подогнанного режима. Два знаковых результата: масштабирование Каплана (Kaplan et al., 2020), изучавшее потерю в зависимости от числа параметров (), объема данных () и общего числа операций (), и масштабирование Chinchilla (Hoffmann et al., 2022), которое оценило оптимальный баланс вычислений для изученного режима плотных авторегрессионных языковых моделей; его часто кратко формулируют как примерно 20 обучающих токенов на параметр ().
Как экономические ориентиры эти подгонки оценивают, как потеря на удержанной выборке меняется с вычислениями внутри наблюдаемого режима. Они не гарантируют снижения частоты ошибок задачи и не экстраполируются без изменений на архитектуры и распределения данных.
Информационный Roofline (пункт назначения)
Информационный Roofline используется здесь как диагностическая метафора, а не как стандартный количественный закон. Его образ назначения указывает на пределы того, что можно извлечь из имеющихся данных. Для классификации при фиксированном распределении данных и потерях байесовская частота ошибок4 — неустранимый пол ошибки, а не потолок. Шум, неоднозначность меток, пробелы в покрытии и сдвиг распределения могут создавать пределы качества данных, но они не задают одного универсального наклона или точки излома.
Диагностический урок скромнее. Законы масштабирования описывают подогнанную траекторию улучшения, а метафора информационного Roofline побуждает искать пределы качества данных. Если кривая потерь уплощается относительно подогнанного тренда, исследуйте оптимизацию, емкость, шум оценки и качество данных; одно уплощение не определяет, какая причина доминирует. Байесовский пол описывает лучший достижимый классификатор для заданного распределения. Добавление ускорителей или параметров бессмысленно, пока измерения не установят, что связывающим является качество данных. Будь то отладка шага обучения, оценка загрузки аппаратуры или планирование кампании масштабирования, сначала измерьте, какая ось связывает, и только потом выбирайте рычаг.
Итоги
Эти инструменты образуют единый диагностический процесс. D·A·M локализует кандидатные причины по данным, алгоритму и машине. Железный закон и арифметическая интенсивность переводят эти причины во время, операции и байты, а разборы случаев, антишаблоны, карта инструментов и скоринговая карта показывают, как проверять их в производстве. Законы масштабирования и информационный Roofline затем отделяют наблюдаемые траектории улучшения от пределов качества данных. Используйте рамку как цикл, а не как ярлык.
С чего начинать
- Начинайте с междуосевых гипотез: симптом редко указывает на причину.
- Переводите каждую гипотезу в соответствующий член железного закона и измерение, которое могло бы ее опровергнуть.
- Используйте арифметическую интенсивность и скоринговую карту, чтобы найти связывающее ограничение, а не чтобы выставлять универсальные оценки.
- Примените соответствующий рычаг и измерьте заново сквозным образом; локальный выигрыш, который не меняет связывающий член, не является улучшением системы.
-
Арифметическая интенсивность: в этой книге термин обозначает число операций с плавающей запятой на переданный байт. Williams et al. (2009) называют измеренную величину для DRAM операционной интенсивностью в модели Roofline. Сравнение отношения нагрузки с точкой перехода аппаратуры () дает верхнюю оценку того, выполняется ли нагрузка с привязкой к памяти или к вычислениям. ↩
-
MFU (утилизация FLOP модели): отношение достигнутой скорости FLOP/s модели к теоретическому пиковому FLOP/s аппаратуры; введено в статье о PaLM (Chowdhery et al., 2022). В отличие от сырой загрузки ускорителя, которая учитывает любую работу, выполненную ускорителем, MFU измеряет скорость вычислений модели относительно пиковой пропускной способности аппаратуры, поэтому работа, не относящаяся к модели, и накладные расходы системы не засчитываются как достигнутые FLOP модели. «Определение узких мест» развивает MFU как диагностику обучения. ↩
-
Законы масштабирования: эмпирические зависимости, обычно степенные законы с подогнанным отрицательным показателем, которые предсказывают потерю модели как функцию размера набора данных, числа параметров или бюджета вычислений. Kaplan et al. (2020) изучали эти зависимости для нейронных языковых моделей в OpenAI; Hoffmann et al. (2022) позднее оценили компромисс оптимального обучения по вычислениям для своего изученного режима плотных языковых моделей. «Граница оптимальности по вычислениям» подробно развивает эту границу и ее диагностику голодания данными. ↩
-
Байесовская частота ошибок: наименьшая достижимая частота ошибок при функции потерь 0–1 для любого классификатора на заданном распределении данных; определяется априорными вероятностями классов и перекрытием условных распределений классов (Goodfellow et al., 2016). Никакой объем данных, параметров или вычислений не может снизить ошибку ниже этого теоретического пола. ↩
Основы данных
Проблемы с данными редко выглядят как проблемы с данными: они проявляются как обучение, которое не ускоряется, простаивающий ускоритель или точность, которая деградирует, пока панели мониторинга остаются зелеными. Чтобы главы оставались сосредоточенными на проектировании систем, это приложение собирает прикидочные расчеты и статистические инструменты, которые возвращают такие симптомы к измеримым узким местам данных: времена передачи, стоимость схем хранения, диагностики дрейфа и инструменты численной стабильности. Инструменты здесь опираются на базовую теорию вероятностей и на член данных железного закона.
Как пользоваться этим приложением
Приложение задумано как справочник. Обращайтесь к нему, когда отладка «медленного обучения», «низкой загрузки ускорителя» или «дрейфа точности в эксплуатации» требует самого короткого пути от симптома к измерению.
Обозначения здесь следуют общекнижным соглашениям (например, зарезервировано за размером батча, а обозначает пропускную способность).
- Когда данные не двигаются: начните с «Стоимости инерции» и уравнения времени передачи в разделе «Расчет на салфетке».
- Когда ускоритель голодает: используйте «Накладные расходы сериализации» и обсуждение схемы в разделе «Строчные и колоночные форматы».
- Когда конвейеры взрывают стоимость: используйте примитивы из раздела «Алгебра данных», особенно перетасовки, вызванные соединениями.
- Когда «в среднем все нормально», но пользователи жалуются: используйте «Распределения и длинный хвост» и вероятность хвостового события на уровне сессии.
- Когда точность тихо дрейфует: используйте «Измерение дрейфа (расхождение)», чтобы сравнивать распределения целиком.
Хотя производственные конвейеры сталкиваются с огромным разнообразием форматов, кодировок и уровней хранения, это приложение сосредоточено на физических и статистических константах, которые управляют всеми ими.
Опираясь на эти опорные точки, приложение начинается с физических ограничений инженерии данных и переходит к статистическому мониторингу, который поддерживает ML-системы в здоровом состоянии. От форматов хранения, определяющих пропускную способность ввода-вывода, до метрик дрейфа, которые обнаруживают тихие сбои, эти основы напрямую связаны с конвейерами данных из «Архитектуры конвейера данных» и с операционным мониторингом из «Мониторинга модели и инфраструктуры».
Основы инженерии данных
Понимания аппаратных ограничений недостаточно: нужно еще и формировать данные так, чтобы они им соответствовали. Инженерия данных применяет принципы иерархии памяти к форматам хранения и проектированию конвейеров, гарантируя, что ускоритель никогда не голодает. Этот процесс начинается с осознания того, что данные физичны: у них есть объем, их нужно время, чтобы переместить, и на их разбор требуется энергия.
Расчет на салфетке: физика гравитации данных
Гравитация данных1 — метафора, опирающаяся на расчеты времени передачи. В отличие от вычислений, которые с каждым годом становятся быстрее, скорость света фиксирована, а пропускная способность сети — конечный ресурс. Когда наборы данных становятся достаточно большими, их практическая инерция растет: их перемещение может стоить больше времени и энергии, чем перемещение вычислений туда, где данные уже лежат.
Идеальное время передачи на номинальной скорости линии равно после приведения объема данных и пропускной способности к совместимым единицам (расчеты ниже явно переводят десятичные байты и биты в секунду). Для больших объемов, рассматриваемых здесь, задержка пренебрежимо мала; полное уравнение приведено в разделе «Пропускная способность и задержка». «Стоимость инерции» дает нижние границы; накладные расходы протокола и ограничения конечных точек увеличивают их.
| Объем данных | 1 Гбит/с (обычная WAN) | 10 Гбит/с (высокоскоростная WAN) | 100 Гбит/с (прямое соединение) | Грузовик (иллюстративно) |
|---|---|---|---|---|
| 1 ТБ | 2,2 часа | 13,3 минуты | 80 секунд | Н/Д |
| 100 ТБ | 9 дней | 22,2 часа | 2,2 часа | Н/Д |
| 1 ПБ | 3 месяца | 9 дней | 22,2 часа | 2 дня |
Стоимость инерции: эти времена передачи объясняют, почему мы часто «отправляем вычисления к данным», а не «отправляем данные к вычислениям». Сетевые столбцы — нижние границы при устойчивой номинальной скорости. Строка «грузовик» — иллюстративная модель времени для 1 ПБ: 8 часов на погрузку, 32 часа в пути и 8 часов на разгрузку, без учета планирования и подготовки ресурсов.
Стоимость сериализации
Даже после того как данные поступили в машину, налог на сериализацию остается последним препятствием.2 Как показано в таблице «Накладные расходы сериализации», многие инженеры тщательно оптимизируют ядра ускорителей, игнорируя накладные расходы CPU на декодирование данных. Разбор текстовых форматов вроде JavaScript Object Notation (JSON) или CSV крайне затратен для CPU: ускоритель часто простаивает, пока CPU мучительно преобразует строки в числа с плавающей запятой.
| Формат | Скорость декодирования (МБ/с) | Относительная стоимость декодирования на CPU | Применимость |
|---|---|---|---|
| CSV/JSON | ~100 МБ/с | Высокая | Просмотр и обмен |
| Protobuf | ~300 МБ/с | Средняя | RPC и сообщения |
| Parquet | ~1 000 МБ/с | Низкая | Колоночное хранение |
Накладные расходы сериализации: эти иллюстративные значения показывают, почему двоичные колоночные форматы могут опережать построчный текст, но они не являются переносимыми бенчмарками. Arrow — формат в памяти и для межпроцессного обмена; Parquet — сжатый формат хранения.
Строчные и колоночные форматы
Выбор файлового формата определяет «физику» чтения данных. Строчные форматы вроде CSV и JSON хранят данные запись за записью, поэтому чтение поля age все равно требует разбора каждой строки. Это подходит для дописываемых журналов, но не для аналитики по выбранным признакам. Parquet хранит сжатые фрагменты столбцов на диске, а Arrow предоставляет колоночный формат в памяти и для межпроцессного обмена. Читатели Parquet могут использовать проекционное проталкивание (projection pushdown), чтобы получать только выбранные фрагменты столбцов, а оба формата поддерживают векторизованную обработку. Сравните две схемы на рисунке «Схемы хранения», чтобы увидеть, почему колоночный доступ избегает сканирования ненужных байтов.
Схемы хранения: строчные форматы группируют значения по записи, поэтому показанное сканирование читает каждое поле. Колоночные форматы группируют значения по признаку, поэтому показанное сканирование читает только возраст.
Схемы на «Схемах хранения» различаются тем, сколько нерелевантных байтов попадает в путь обучения.
Проблема голодания ускорителя
Выбор файлового формата может определить, ограничена система вводом-выводом или вычислениями. Как показано на «Схемах хранения», схема хранения усиливает налог на сериализацию: строчные форматы вынуждают сканировать целые строки, тогда как колоночные форматы позволяют проекционное проталкивание, читая только те байты, которые нужны модели. В итоге член «перемещение данных» в железном законе может незаметно стать узким местом, которое оставляет дорогие ускорители простаивать.
Алгебра данных
Инженерия признаков превращает сырые записи в столбцы, из которых может учиться модель, и это преобразование обычно сначала является задачей потоков данных и лишь потом задачей моделирования. Конвейер сначала сужает совокупность, затем выбирает признаки и наконец подтягивает контекст из других таблиц. Эти три шага соответствуют трем примитивам языка структурированных запросов (SQL), и их вычислительная стоимость определяет, останется ли задача признаков локальной, будет ли сканировать ненужные байты или превратится в сетевую перетасовку.
- Селекция (): фильтрация строк (например,
WHERE age > 30).- Стоимость: , если поиск по B-дереву возвращает строк; при полном сканировании.
- Проекция (): выбор столбцов (например,
SELECT age).- Стоимость: выбранные фрагменты плюс декодирование и метаданные в колоночных форматах. Этот пример строчного формата читает 1 КБ ради 4-байтового целого, теряя 99,6 процента чтения.
- Соединение (): объединение таблиц. Самая дорогая операция.
- Соединение перетасовкой: обе таблицы разбиваются по ключу и обмениваются по сети.
- Стоимость: перетасовка двух таблиц по 1 ТБ переносит около 2 ТБ; разбиение и локальность могут это снизить.
- Широковещательное соединение: одна маленькая таблица отправляется всем рабочим узлам.
- Стоимость: байт; таблица размером байт должна помещаться на каждом из рабочих узлов.
- Соединение перетасовкой: обе таблицы разбиваются по ключу и обмениваются по сети.
Понимание форматов данных, стоимости сериализации и алгебраических примитивов говорит нам, как перемещать данные эффективно. Однако даже безупречно спроектированный конвейер может незаметно отказать, если переносимые им данные со временем меняют свой характер. Обнаружение такого изменения и количественная оценка его важности требуют другого набора инструментов: вероятности и статистики.
Вероятность и статистика
Когда данные текут по конвейерам, нам нужны математические инструменты, чтобы обеспечивать их качество и согласованность. Вероятность и статистика дают язык для мониторинга здоровья системы, обнаружения тихих сбоев дрейфа данных и управления неопределенностью.
Распределения и длинный хвост
В системах среднее часто вводит в заблуждение. Распределения задержек обычно имеют длинный хвост, а видимые пользователю сервисы обычно управляются поведением на высоких перцентилях, а не средним временем отклика (Dean and Barroso, 2013). Задержка «P99» (99-й перцентиль) в 500 мс означает, что не более 1 процента запросов длится дольше 500 мс; но при большом числе запросов в сессии доля пользователей, которые видят хотя бы один медленный запрос, может быть намного выше. В масштабе (1 млн пользователей) даже 1 процент затронутых пользователей означал бы 10 000 пользователей.
Опыт типичной сессии
Для независимых запросов, каждый из которых с вероятностью 0,01 медленный, вероятность хотя бы одного события хвоста P99 равна .
Системный вывод: при такой модели сессия из 100 запросов скорее включит событие за пределами P99, чем не включит. Коррелированные замедления могут менять эту вероятность (Dean and Barroso, 2013).
Измерение дрейфа (расхождение)
Поскольку распределения имеют длинные хвосты, где прячутся самые опасные сбои, простых метрик вроде «сдвига среднего» недостаточно. Нужны инструменты, которые сравнивают всю форму распределения. Обнаружение дрейфа между распределением в эксплуатации () и обучающим распределением () требует измерения «расстояния» между распределениями.
Для дискретных исходов «дивергенция KL» выражает дивергенцию KL3 как ожидаемую дополнительную стоимость кодирования при аппроксимации распределением (Kullback and Leibler, 1951; Cover and Thomas, 2006). Показанная форма конечна только при везде, где ; поэтому производственные реализации требуют явного сглаживания или обработки нулей.
Разобранный пример: дивергенция KL для обнаружения дрейфа
Сценарий: классификатор тональности обучен на данных, где 60 процентов отзывов были положительными, 30 процентов отрицательными и 10 процентов нейтральными. После развертывания распределение в эксплуатации смещается к 45 процентам положительных, 40 процентам отрицательных и 15 процентам нейтральных.
Расчет:
Обучающее распределение : . Распределение в эксплуатации : .
Обратите внимание на асимметрию: . Индекс стабильности популяции (PSI) симметризует эту величину; расчет ниже использует натуральные логарифмы:
Системный вывод: поскольку PSI = 0,0922 < 0,2, этот дрейф пока не пересекает иллюстративный порог ручной проверки, принятый здесь. Правильная реакция — оставить признак на панели мониторинга и искать подтверждающие сигналы дрейфа, а не переобучать модель по одной этой статистике.
Порог остается иллюстративным: его смысл зависит от размера выборки, разбиения на корзины, сглаживания и обработки нулей, а переобучение требует свидетельств качества модели.
И дивергенция KL, и PSI опираются на более глубокую основу — теорию информации, которая задает единицы и границы, делающие эти метрики обоснованными, а не ad hoc.
Теория информации для систем
Обучение может потреблять больше примеров, идти дольше и все равно перестать улучшаться, если добавленные данные несут слишком мало полезного сигнала. В этот момент узкое место — не только вычисления или пропускная способность, но и количество информации, которое конвейер данных доставляет обучаемому. «Информационный Roofline (пункт назначения)» рассматривает такой предел качества данных как диагностическое ограничение, а теория информации дает единицы для рассуждения о нем.
Энтропия ()4 — средняя неопределенность распределения, определяемая как . Основание логарифма задает единицу: натуральные логарифмы дают наты, а — биты. Равномерное распределение имеет максимальную энтропию только на заданном конечном носителе. Это напрямую связано с дивергенцией KL выше: измеряет избыточную стоимость кодирования при использовании неверного распределения.
Информационная плотность здесь используется как эвристика уровня книги — полезный сигнал обучения на единицу хранения, — а не как стандартная величина теории информации.
Отношение сигнал/шум (SNR) — отношение мощности сигнала к мощности шума. В ML книга использует низкий SNR качественно, для данных, где структура, релевантная задаче, слаба относительно шума; добавление вычислений не может компенсировать отсутствующий релевантный сигнал.
Логиты и численная стабильность
Классификаторы нейронных сетей обычно выдают вектор логитов5 (ненормированных оценок). Для индекса класса softmax нормирует по всем индексам классов , чтобы получить вероятность:
Проблема в том, что если велико (например, 100), экспонента переполняет распространенные форматы обучения и вывода, такие как FP32, BF16 и FP16. FP64 может представить это конкретное значение, но производственные ядра ML редко используют FP64 для softmax. Решение — вычислять в логарифмическом пространстве: прием «log-sum-exp» позволяет вычислять , не вычисляя огромные экспоненты напрямую, и сохраняет численную точность.6
Небольшой разобранный пример показывает, почему этот прием важен на практике, даже для больших, но реалистичных значений логитов:
Log-sum-exp на практике
Исходные данные: трехклассовый классификатор выдает логиты .
Без приема (наивный softmax): , , .
Эти числа представимы в FP64, но переполняют FP32 (максимум ). В FP16 (максимум ) даже переполняется. Сырые логиты редко достигают величины 100, но большие промежуточные значения возникают (например, в неотмасштабированных оценках внимания или в самоуверенных выходах), а поскольку FP16 и BF16 — стандартные точности обучения, наивный softmax настолько часто рискует переполнением, что устойчивая форма используется по умолчанию.
С приемом: вычтем .
Сдвинутые логиты: .
Экспоненты: , , .
Сумма = 1,503. LogSumExp = 102 .
Softmax: .
Системный вывод: экспоненты сдвинутых значений и итоговые вероятности softmax лежат в — риска переполнения нет, даже в FP16.
Вместе эти разобранные примеры связывают всю цепочку: от физического перемещения данных через сдвиг распределения до численной стабильности.
Итоги
Инструменты этого приложения — метрики, чувствительные к хвосту, дивергенции дрейфа, границы теории информации и приемы численной стабильности — поддерживают количественную диагностику сбоев, связанных с данными, а не объяснения по наитию.
-
Гравитация данных: термин предложил Дэйв Маккрори в 2010 году, чтобы описать, как большие наборы данных притягивают к себе сервисы и приложения, подобно тому как массивные тела в физике притягивают меньшие (McCrory, 2010). Аналогия точна: «скорость убегания», необходимая для перемещения набора данных петабайтного масштаба, часто измеряется неделями. ↩
-
Сериализация: от латинского serialis («образующий ряд»). Процесс преобразования структур данных в памяти в поток байтов для хранения или передачи и обратный процесс (десериализация). В ML-конвейерах выбор формата сериализации может определять все время сквозного обучения; «Прием данных» описывает стратегии проектирования конвейеров, которые минимизируют эти накладные расходы. ↩
-
Дивергенция KL: названа по именам Соломона Кульбака и Ричарда Лейблера, которые ввели ее в 1951 году. Также называется относительной энтропией; она измеряет ожидаемую дополнительную информацию, необходимую для кодирования выборок одного распределения кодом, оптимизированным для другого. Для мониторинга дрейфа в этой книге каноническое направление — . При натуральных логарифмах, как в примере выше, единица измерения — нат; при логарифмах по основанию 2 — бит. В производственном ML дивергенция KL — теоретическая основа многих метрик обнаружения дрейфа. ↩
-
Энтропия: Шеннон ввел этот термин в 1948 году для количественной оценки информационного содержания (Shannon, 1948). В системных терминах энтропия Шеннона — нижняя граница средней длины кода без потерь. Практические префиксные коды к ней приближаются, а блочные коды могут приближаться асимптотически. При единица — биты; натуральные логарифмы дают наты. Эти границы помогают оценивать коэффициенты сжатия и размеры конвейеров данных. ↩
-
Логит: термин ввел Джозеф Бергсон в 1944 году по аналогии с пробитом. Функция логита — обратная к логистической (сигмоидной) функции: . В глубоком обучении «логитами» нежестко называют сырой, ненормированный выход последнего линейного слоя до применения функции активации. ↩
-
Log-sum-exp: реализован как
torch.logsumexpв PyTorch иscipy.special.logsumexpв SciPy. Опирается на тождество , где . Сдвинутые значения не больше нуля, поэтому экспоненты никогда не переполняются. ↩
Основы алгоритмов
Профиль с низкой загрузкой часто ошибочно принимают за аппаратное ограничение, хотя причина алгоритмическая: форма умножения матриц, которая расточает тензорные ядра, раскладка, нарушающая непрерывность, или активации, которые удерживаются в памяти ради обратного распространения. Это приложение собирает модели вычислительной сложности и выводы об объеме занимаемой памяти, на которые опираются главы о производительности, и позволяет читателю оценивать алгоритмические компромиссы до того, как код будет передан ускорителям. Предполагается знакомство с линейной алгеброй и с железным законом, введенным в начале книги.
Как пользоваться этим приложением
Приложение задумано как справочник. Обращайтесь к нему, когда нужно перевести симптом профилировщика («медленное умножение матриц», «несовпадение форм», «нехватка памяти во время обучения») в конкретную причину: вычислительную или связанную с памятью.
Обозначения здесь следуют общекнижным соглашениям (например, зарезервировано за размером батча, а обозначает пропускную способность).
- Когда ядра обобщенного матричного умножения (GEMM) медленные: используйте раздел «Обобщенное матричное умножение (GEMM)» и сравните интенсивность с точкой перехода аппаратуры.
- Когда память взрывается при обучении: используйте раздел «Истинная стоимость памяти обучения» и разложение памяти обучения.
- Когда тензорный код «должен работать», но не работает: используйте разделы «Формы и страйды» и «Broadcasting».
- Когда разреженность предлагают как исправление: используйте раздел «Форматы разреженных матриц», чтобы проверить плотность и накладные расходы метаданных.
- Когда нужно доказать границы вычислений градиента: используйте теорему Баура–Штрассена о сложности автоматического дифференцирования в обратном режиме (AD) из раздела «Теорема Баура–Штрассена о сложности обратного режима AD».
- Когда анализируется узкое место по длине последовательности: используйте раздел «Доказательство тайлинга FlashAttention и рекуррентности online softmax» — рекуррентность online softmax и сокращение обращений к памяти с высокой пропускной способностью (HBM) в FlashAttention.
- Когда распределяют вычисления между параметрами и токенами: используйте раздел «Вывод закона масштабирования Каплана и Chinchilla с оптимальным расходом вычислений».
Нейронные сети превращают линейную алгебру в выученное поведение: матрицы преобразуют активации, раскладки тензоров определяют, как данные перемещаются по памяти, а обратное распространение проводит сигналы ошибки через получившиеся вычисления. Эти основы поддерживают трактовку глубокого обучения в главе «Вычисления в нейронных сетях», внутреннее устройство фреймворков в главе «Фреймворки машинного обучения» и стратегии обучения в главе «Обучение моделей». Архитектуры меняются, но лежащий в основе математический аппарат остается неизменным.
Линейная алгебра
Системы глубокого обучения по своей сути — машины для преобразования огромных матриц. Фреймворки вроде PyTorch скрывают сырую математику, но инженерия производительности по-прежнему зависит от лежащей в основе линейной алгебры. Раздел «Численные представления» описал, как числа хранятся; этот раздел посвящен тому, как с ними работают.
Почему это важно
Многие плотные нейронные сети, особенно трансформеры и большие сверточные сети, тратят большую часть вычислений на матричные умножения или ядра, похожие на GEMM. Блок самовнимания выполняет GEMM для проекций Q, K, V и выхода плюс два матричных умножения внимания: одно для оценок внимания и одно для значений, взвешенных вниманием. Блок прямого распространения слоя добавляет еще GEMM. Понимание характеристик производительности GEMM объясняет, почему размер батча влияет на пропускную способность, почему одни размеры слоев «лучше» других и как читать вывод профилировщика. Рассуждение о размерах матриц и арифметической интенсивности предсказывает, будет ли плотная нагрузка ограничена вычислениями или памятью, еще до того, как запускается какая-либо трасса профилировщика.
Тензорные операции и обозначения
Нотация суммирования Эйнштейна1 делает сложные операции явными на протяжении всей книги (реализована как torch.einsum в PyTorch и np.einsum в NumPy). Матричное умножение записывается так:
В нотации einsum это записывается как ik,kj->ij. Нотация естественно распространяется на многомерные операции в механизмах внимания. Например, батчевое многоголовое внимание записывается как bhid,bhjd->bhij (батч , голова , индекс запроса , индекс ключа и размерность головы ).
Раскладки памяти и производительность
Раскладка данных в памяти (построчная или поколоночная) напрямую влияет на эффективность кэша. При обходе матрицы доступ к непрерывным ячейкам памяти заметно быстрее, чем доступ с шагом.
Типичный прием — однократно материализовать транспонированный тензор перед серией операций, чтобы обеспечить непрерывный доступ в горячем цикле. Одноразовая стоимость копирования распределяется на множество последующих операций.
Скалярное произведение как мера сходства
Скалярное произведение геометрически эквивалентно , что делает его естественной мерой сходства двух векторов: для ненулевых векторов знак различает острые, прямые и тупые углы, а величина зависит и от норм обоих векторов.
Эта геометрическая интерпретация объясняет, почему скалярные произведения встречаются повсюду в современных архитектурах. В механизмах внимания векторы запроса () и ключа () перемножаются скалярно, чтобы получить оценку сходства, которая определяет, насколько каждый токен обращает внимание на каждый другой. Полученные веса внимания затем образуют взвешенную комбинацию векторов значений () — так скалярное произведение становится основой способности трансформера моделировать дальние зависимости.
Обобщенное матричное умножение (GEMM)
GEMM2 — рабочая лошадка глубокого обучения. Для матриц размера и GEMM выполняет операций с плавающей запятой (операция «умножить и накопить» считается как две операции).
Арифметическая интенсивность GEMM линейно растет с размером матрицы. Для квадратных матриц в FP16 (2 байта на элемент) идеальная граница при читает и один раз и записывает один раз:
Чтение старой при меняет интенсивность на FLOP/байт. Исполнение GEMM определяют три системных следствия:
- Большие батчи могут повысить эффективность: батчинг увеличивает эффективные размеры матриц, когда формирует более крупные GEMM или позволяет повторное использование; простая постановка в очередь независимых мелких GEMM интенсивность не повышает.
- Выровненные размеры помогают: тензорные ядра аппаратуры оптимизированы под кратные плитки, специфичные для точности и архитектуры. Размеры, выровненные по этим кратным, избегают накладных расходов на дополнение и улучшают эффективность ядра, но не обязаны быть степенями двойки.
- Малые матрицы неэффективны: квадратный GEMM с 64 имеет интенсивность 64/3 ≈ 21,3 FLOP/байт, что заметно ниже точки перехода (153,0 FLOP/байт). Его потолок Roofline составляет около 13,9 процента пика; накладные расходы запуска и тайлинга могут снизить реально достижимую пропускную способность.
Форматы разреженных матриц
Когда большинство элементов матрицы равны нулю, специализированные форматы хранения не тратят память на нули и позволяют вычисления, которые полностью их пропускают. Формат сжатого разреженного строчного хранения (CSR) использует три массива:
Values: ненулевые элементы, хранящиеся по строкамCol_Idx: индекс столбца каждого ненулевого элементаRow_Ptr: начальная позиция вValuesдля каждой строки (длина = число строк + 1)
CSR полезен для разреженных матриц признаков в конвейерах рекомендаций и для прореженных весов моделей. Для матрицы с элементами, строками и ненулевыми элементами CSR использует памяти вместо ; когда велико относительно , это часто суммируют как .
Чтобы конкретно увидеть компромисс, рассмотрим матрицу эмбеддингов словаря со 100 000 строк и 10 000 столбцов (1 млрд параметров):
- Плотная (FP32): 1 млрд параметров 4 байта каждый = 4 ГБ.
- Разреженная (плотность 1 процент): CSR хранит примерно 10 млн записей (4-байтовое значение + 4-байтовый индекс столбца), плюс один указатель строки на строку и финальный указатель, итого ≈ 80,4 МБ.
- Результат: снижение объема памяти в 50 раз, что позволяет разместить модель, которая иначе вызвала бы нехватку памяти (OOM).
Линейная алгебра говорит нам, что вычислять; следующий вопрос — как выразить эти вычисления в коде. Примитивы тензорного программирования — формы, страйды и broadcasting — соединяют математическую нотацию с операциями над массивами, которые реально исполняются на аппаратуре.
Примитивы тензорного программирования
Падение из-за несовпадения форм, молча неверный broadcast, ядро, работающее на 5 процентах пика из-за прерывистого (non-contiguous) тензора, — все эти распространенные сбои инженерии ML восходят к одному и тому же слою абстракции. Тензорное программирование переводит абстрактную математику линейной алгебры в конкретные манипуляции с массивами, которые исполняются на аппаратуре.
Шпаргалка по вычислительной сложности
«Базовые тензорные примитивы глубокого обучения» дает количественный справочник по самым распространенным строительным блокам. Используйте эти формулы для прикидочной оценки размера модели и требований к вычислениям до того, как будет выделена аппаратура. Зная размеры слоев и формы входов, формулы дают первоприближенные оценки параметров и вычислений. Строка внимания содержит ключевое предупреждение: длина последовательности добавляет член , а скрытая размерность — работу проекций , поэтому модели с длинным контекстом могут сместить доминирующую стоимость без изменения числа параметров.
| Тип слоя | Форма выхода | Параметры () | FLOP (на прямой проход) |
|---|---|---|---|
| Linear | , если включено смещение | ||
| Conv2D | , если включено смещение | ||
| Многоголовое самовнимание | , плюс , если включены смещения проекций | ||
| LayerNorm | , если включены масштаб и смещение |
Базовые тензорные примитивы глубокого обучения: сводка форм, параметров и числа FLOP. Обозначения: — размер батча, — длина последовательности, — размер ядра. Вычисления внимания включают проекции QKV и взаимодействия оценок. Член относится к обучению на полной последовательности и предзаполнению, тогда как генерация с KV-кэшем линейна по кэшированному контексту на каждый токен; при больших скрытых размерностях доминирует работа проекций .
Формы и страйды
Тензор — это представление поверх буфера хранения, описываемое метаданными формы, страйда, типа данных и смещения. Только непрерывные (contiguous) тензоры располагают свои логические элементы одним смежным блоком.
- Форма: размерности тензора (например,
(3, 4)). - Страйд: число элементов, которое нужно пропустить в памяти, чтобы перейти к следующему элементу по данной размерности.
Операции вроде transpose() или view() часто меняют только страйды, а не данные в памяти. Это быстро (), но приводит к прерывистым тензорам, которые падают в ядрах, требующих непрерывных данных. В таких случаях вызов contiguous() принудительно копирует память за , и это может доминировать во времени исполнения, если повторно вызывается внутри цикла.
Broadcasting
Broadcasting позволяет выполнять арифметические операции над тензорами разных форм. Сравнивайте размерности от последней к первой. Две размерности совместимы, когда:
- они равны;
- одна из них равна 1.
Размерность единичного размера «растягивается», чтобы совпасть с другой, как показано на рисунке «Правила broadcasting тензоров». Это растяжение виртуальное: данные в памяти не копируются. Вместо этого страйд для такой размерности задается равным 0, так что аппаратура многократно читает одно и то же значение с накладными расходами памяти .
Правила broadcasting тензоров: столбец (3,1) и строка (1,4) растягиваются по взаимодополняющим размерностям и дают попарные суммы в результате формы (3,4).
Рассмотрим конкретный случай: тензор A имеет форму (32, 1, 64), а тензор B — форму (1, 128, 64). Сравнивая размерности справа налево, видим: 64 совпадает с 64, затем 1 растягивается до 128, затем 1 растягивается до 32, и получается форма результата (32, 128, 64). Визуализация такого расширения предотвращает незаметные логические ошибки, которые случайно выделяют большой тензор (например, матрицу (Batch, Batch) вместо поэлементного вектора (Batch)).
Формы, страйды и broadcasting управляют тем, как тензоры проходят через прямой проход модели. Обучение добавляет второе требование: учиться на ошибках. Обратное распространение делает такое обучение возможным и накладывает стоимость памяти, которую разберем ниже.
Механика обучения
Корректные тензорные программы делают возможными циклы обучения. Обратное распространение организует эти тензоры, чтобы вычислить градиенты и превратить прямое предсказание в обратный сигнал обучения.
Почему это важно
Когда обучение отказывает — функция потерь уходит в NaN, градиенты взрываются или заканчивается память, — понимание того, что на самом деле делает обратное распространение, необходимо для диагностики. Обратный граф дает ментальную модель для рассуждения о потоке градиентов и использовании памяти во время обучения.
Правило цепочки и автоматическое дифференцирование
Для составной функции производная равна . В нейронной сети и — слои, а композиция может быть многоуровневой. Для трехслойной сети правило цепочки дает:
Каждый множитель этого произведения — локальная производная, вычисленная на одном слое только по входам и выходам этого слоя. Именно эта локальность делает алгоритм практичным: всю сеть не нужно дифференцировать как монолитную функцию. Вместо этого каждый слой на обратном проходе вычисляет свою локальную производную и умножает ее на градиент, пришедший от слоя выше.
Современные фреймворки используют автоматическое дифференцирование в обратном режиме, которое вычисляет градиенты для всех параметров за один обратный проход. Ключевая идея: начиная с выхода и двигаясь назад (обратный режим), требуется один проход независимо от числа параметров, тогда как начиная с каждого входа и двигаясь вперед (прямой режим), понадобилось бы проходов — по одному на параметр. Поэтому шаг обучения — это небольшое постоянное кратное вывода: обычно примерно в 2–3 раза дороже прямого прохода для плотных сетей, а не проходов.
Алгоритм обратного распространения
Обратное распространение3 эффективно реализует правило цепочки в два прохода: прямой — для вычисления выходов, обратный — для вычисления градиентов. «Вычислительный граф обратного распространения» иллюстрирует этот процесс для простой двуслойной сети: прямой проход (серые стрелки) вычисляет выходы, а обратный (красные пунктирные стрелки) распространяет градиенты.
Вычислительный граф обратного распространения: сплошные серые стрелки несут прямые вычисления от входа к функции потерь , а пунктирные красные стрелки несут градиенты назад по тем же зависимостям.
Градиентные ребра повторяют прямые зависимости, поэтому каждый обратный шаг требует значений, сохраненных от соответствующей прямой операции.
Прямой проход
Используя активации в виде строковых векторов, опуская смещения и сохраняя промежуточные активации для обратного прохода, начнем с — входа. Умножим его на , чтобы получить скрытую активацию . Сохраним , потому что обратный проход понадобится позже. Умножим на , чтобы получить выход . Сохраним . Сравним с целевой меткой, чтобы вычислить функцию потерь .
К этому моменту потери вычислены, и в памяти содержатся вход , сохраненная активация , сохраненный выход и потери . Для большой модели эти сохраненные активации могут доминировать в использовании памяти.
Обратный проход
Теперь пойдем назад от . Функция потерь дает — градиент потерь по предсказанию. Здесь в сеть входит сигнал ошибки.
Поскольку , правило цепочки дает два градиента на этом слое:
Вычисление требует сохраненной активации из прямого прохода. Активации должны оставаться доступными на обратном проходе, потому что градиент весов каждого слоя зависит от входа этого слоя.
Теперь продолжим назад к первому слою. Поскольку , тот же паттерн дает:
Каждый шаг назад требует две вещи: градиент, пришедший сверху , и вход этого слоя (), который должен быть доступен на обратном проходе. Поэтому обратный проход стоит примерно в 2 раза больше прямого по вычислениям: на каждом слое он выполняет два матричных умножения (одно для градиента весов, одно для градиента входа) против одного на прямом проходе.
Истинная стоимость памяти обучения
Распространенная ошибка — считать, что память обучения равна размеру модели. Это предположение ведет к немедленным ошибкам нехватки памяти (OOM), потому что веса — лишь один из четырех компонентов. Память обучения включает веса, градиенты, состояние оптимизатора и сохраненные активации:
Для стандартного оптимизатора Adaptive Moment Estimation (Adam) (Kingma and Ba, 2015) в смешанной точности (Micikevicius et al., 2017):
- Веса: 2 байта (FP16/BF16) или 4 байта (FP32).
- Градиенты: того же размера, что и веса.
- Состояние оптимизатора: моменты Adam требуют 8 байт на параметр; мастер-копия в FP32 добавляет еще 4 байта, итого 8–12 байт на параметр.
- Активации: главный «гигант». Оценка, дружественная к пересчету или тайловому вниманию, масштабируется как ; полная реализация внимания без пересчета дополнительно материализует тензоры оценок внимания, которые масштабируются с .
Чтобы увидеть, как эти компоненты взаимодействуют на практике, рассмотрим конкретную модель.
Разобранный пример: память обучения GPT-2 (1,5 млрд)
Модель: GPT-2 XL имеет параметров, 48 слоев и скрытую размерность .
Состояние модели (фиксировано на шаг):
- Веса (BF16): 2 байта = 3 ГБ
- Градиенты (BF16): 2 байта = 3 ГБ
- Оптимизатор (мастер FP32 + моменты + дисперсия): 12 байт = 18 ГБ
- Итого состояние модели: 24 ГБ — помещается на ускорителе класса 80 ГБ A100/H100 (85,9 ГБ в десятичных единицах), но оставляет лишь 61,9 ГБ под активации.
Активации (масштабируются с батчем):
Сохраняемые активации слоя для этой быстрой оценки примерно равны элементам BF16, то есть байт, где — размер батча, а — длина последовательности. Множитель двенадцать учитывает основные промежуточные тензоры, сохраняемые для обратного распространения: входные активации, проекции QKV (), выход внимания, промежуточный слой FFN () и маски layer norm/dropout. Оценка предполагает, что реализация не сохраняет полный тензор оценок внимания , как в учете, дружественном к пересчету или тайловому вниманию. При 48 слоях, размере батча 8 и длине последовательности 1024:
Системный вывод: около 39,1 ГБ при этом соглашении учета активаций, что помещается на одном ускорителе 85,9 ГБ. Однако если увеличить батч до 64, активации вырастут примерно до 120,8 ГБ, что превышает оставшуюся емкость. Это порог, за которым становится необходимой контрольная точка градиента или другой метод экономии памяти; ее выигрыш и накладные расходы на пересчет зависят от размещения контрольных точек и реализации.
Взрыв активаций
Пока веса фиксированы (), активации растут линейно с размером батча и как минимум линейно с длиной последовательности; реализации, которые материализуют оценки внимания, добавляют компонент . Как показывает разобранный пример, память активаций может быстро превысить запас, оставшийся после состояния модели. Контрольная точка градиента4 снижает это давление, сохраняя лишь выбранные активации и пересчитывая остальные на обратном проходе (Chen et al., 2016); такие приемы, как FlashAttention, устраняют связанные узкие места памяти внимания тайлингом, сокращая обращения к памяти (Dao et al., 2022).
Та же декомпозиция дает быструю проверку осуществимости: сложите состояние модели по параметрам, добавьте член активаций, подразумеваемый размером батча и длиной последовательности, и сравните итог с емкостью ускорителя.
Вычислительные графы и оптимизация
Структура зависимостей, которую раскрывает обратное распространение, дает компиляторам что оптимизировать. Компиляторы машинного обучения представляют модели ориентированными ациклическими графами (DAG), и это представление позволяет аппаратно-независимые преобразования.
Статическое единственное присваивание
Компиляторы преобразуют графы в форму статического единственного присваивания (SSA), где каждой переменной присваивается значение ровно один раз. Это делает зависимости по данным явными и позволяет безопасные оптимизации — главным образом слияние операторов (operator fusion).
Слияние операторов
Без слияния каждая операция в цепочке вроде MatMul → Add (смещение) → ReLU порождает промежуточный тензор, который записывается в HBM и затем читается обратно для следующей операции. Для поэлементных операций вроде Add и ReLU вычисления тривиальны (один FLOP на элемент), но трафик памяти — нет (прочитать тензор и записать обратно). Поэтому арифметическая интенсивность несливаемых поэлементных операций близка к нулю — они глубоко ограничены памятью.
Слияние объединяет последовательные операции в одно ядро, которое читает вход один раз, применяет все операции в регистрах или общей памяти и записывает конечный результат один раз. Для последовательности из поэлементных операций над тензором размером байт слияние сокращает трафик памяти с байт (каждая операция читает и записывает) до байт (одно чтение, одна запись) — сокращение в раз.
FlashAttention — тайловый алгоритм внимания, учитывающий ввод-вывод: он вычисляет стадии оценок, softmax и произведения на значения в тайлах SRAM, не материализуя полную матрицу внимания в HBM, и снижает трафик HBM и вспомогательную память внимания с до . В исходной работе сообщается об ускорении реального времени до 3 раз на оцениваемых нагрузках (Dao et al., 2022); реальный выигрыш зависит от форм и аппаратуры (пошаговый вывод см. в разделе «Доказательство тайлинга FlashAttention и рекуррентности online softmax»). Вместе основы линейной алгебры, механика тензорного программирования и модель памяти обучения, разобранные в этом приложении, образуют алгоритмический субстрат, на котором строятся все ML-системы.
Теорема Баура–Штрассена о сложности AD в обратном режиме
Современное глубокое обучение масштабируется до сотен миллиардов параметров потому, что вычисление полного вектора градиента скалярной функции потерь требует вычислений, пропорциональных вычислению самой , с границей, которая имеет постоянный коэффициент и не зависит от входной размерности . Баур и Штрассен доказали этот результат о сложности в 1983 году (Baur and Strassen, 1983).
Математическая постановка и формулировка теоремы
Пусть — многомерная скалярная функция, представленная вычислительным графом , состоящим из элементарных операций (сложения, вычитания, умножения, деления и унарных функций вроде ).
Теорема сложности Баура–Штрассена
Если скалярную функцию можно вычислить за элементарных операций, то полный вектор градиента можно вычислить суммарной работой , удовлетворяющей условию: где — универсальная константа, не зависящая от входной размерности . Кроме того, один лишь обратный проход требует работы .
Пошаговое доказательство распространения сопряженных величин по правилу цепочки
Пусть граф топологически упорядочен, узлы , , где входные переменные — при , а конечный выход — . Каждый промежуточный узел вычисляется примитивной операцией:
Определим сопряженную переменную для каждого узла как частную производную скалярного выхода по :
По многомерному правилу цепочки сопряженная величина — сумма частных производных, распространенных от всех последующих узлов (потомков), которые используют :
Автоматическое дифференцирование в обратном режиме задает и для всех , затем проходит узлы в обратном топологическом порядке от до . Для каждого примитивного узла полностью накопленная сопряженная величина передает сигналы ошибки родительским узлам ():
Теперь выполним пооперационный учет микростоимости для всех примитивных узлов, чтобы ограничить работу обратного прохода:
- Сложение/вычитание ():
- Локальные производные: , .
- Обратные обновления: и .
- Стоимость: 2 сложения на обратном проходе на 1 прямую операцию. Отношение работы: .
- Умножение ():
- Локальные производные: , .
- Обратные обновления: и .
- Стоимость: 2 умножения + 2 сложения = 4 операции на обратном проходе на 1 прямую операцию. Отношение работы: .
- Деление ():
- Локальные производные: , .
- Обратные обновления: и .
- Стоимость: 2 умножения/деления + 2 сложения = 4 операции на обратном проходе на 1 прямую операцию. Отношение работы: .
- Унарные трансцендентные операции ():
- Локальная производная: .
- Обратное обновление: .
- Для имеем , что требует 1 умножения + 1 сложения = 2 операции.
- Для имеем , что требует 1 деления + 1 сложения = 2 операции.
Суммируя по всем примитивным узлам , каждая прямая операция порождает не более 4 обратных операций:
Добавив работу прямого прохода , получаем полную границу работы:
Почему можно обучать большие языковые модели на 175 млрд параметров
Независимость от входной размерности — математическая причина, по которой глубокое обучение работает. Рассмотрим обучение трансформера с параметров:
- Прямой проход: матричные умножения требуют FLOP на токен.
- Обратный проход в обратном режиме: вычисляются градиенты весов ( FLOP) и градиенты входных активаций ( FLOP), итого FLOP на токен.
- Полная работа обучения: (прямой) (обратный) FLOP на токен. Коэффициент вычислений обратного прохода равен ровно , что заметно ниже теоретической границы Баура–Штрассена .
Если бы для вычисления использовали прямой режим AD или конечные разности, каждую частную производную пришлось бы вычислять отдельно, и понадобилось бы прямых проходов: FLOP. При такой метод потребовал бы около FLOP на токен — в раз больше работы прямого прохода и, следовательно, непомерно дорого в таком масштабе. Автоматическое дифференцирование в обратном режиме сводит этот множитель к постоянному коэффициенту 2 для учета плотных слоев выше.
Доказательство тайлинга FlashAttention и рекуррентности online softmax
Стандартное самовнимание в трансформерах требует материализовать матрицу оценок внимания в HBM, что создает узкое место пропускной способности памяти . FlashAttention (Dao et al., 2022) устраняет это узкое место: он разбивает матрицы запросов, ключей и значений на тайлы и пересчитывает внимание с помощью рекуррентности online softmax, не записывая промежуточные оценки в HBM.
Узкое место ввода-вывода HBM у стандартного softmax
Пусть даны запросы , ключи и значения при длине последовательности и размерности головы . Стандартное внимание вычисляет:
Чтобы избежать численного переполнения, построчный softmax вычитает максимум строки :
Стандартные реализации на GPU выполняют это в три отдельных запуска ядер:
- Вычислить в SRAM, затем записать в HBM ( записей).
- Прочитать из HBM, вычислить максимум строки и сумму строки , вычислить , записать в HBM ( чтений и записей).
- Прочитать и из HBM, вычислить , записать в HBM ( чтений и записей).
Полный трафик памяти HBM составляет элементов. Для , в FP16 матрица требует на голову на слой. Поскольку современные GPU обладают огромной вычислительной пропускной способностью по сравнению с пропускной способностью HBM, многократное чтение и запись промежуточных матриц и оставляет исполнительные блоки GPU ограниченными памятью.
Доказательство рекуррентности online softmax
Тайлинг softmax труден, потому что вычисление требует глобального максимума по всем ключам. Рекуррентность online softmax решает эту задачу, инкрементально обновляя статистики нормировки по мере поступления подблоков.
Теорема о рекуррентности online softmax
Пусть вектор разбит на два подвектора и , . Локальные статистики блока 1: и блока 2:
Тогда объединенный максимум , сумма нормировки и накопленный выходной вектор удовлетворяют точным соотношениям рекуррентности: где — частичный выход, накопленный из блока 1.
Вывод рекуррентности знаменателя
Раскроем объединенную сумму :
Вывод рекуррентности перемасштабирования выхода
Истинный нормированный выход по объединенной последовательности равен :
Поскольку , подставляем это напрямую:
Формальное доказательство сложности обращений к HBM
Пусть — емкость быстрой памяти SRAM (в словах). Следуя алгоритму 1 из работы Dao et al. (2022), FlashAttention задает и . Доказательство отвлекается от постоянных множителей и повторного использования буферов, используя , и для рабочего набора на кристалле.
Алгоритм выполняет два вложенных цикла:
- Разбить на блоков размера .
- Разбить на блоков размера .
- Внешний цикл по : загрузить и в SRAM.
- Внутренний цикл по : загрузить , и его статистики softmax; вычислить в SRAM; затем обновить и записать и статистики, не материализуя в HBM.
Именно этот порядок циклов дает сокращение ввода-вывода. Тайл «ключ–значение» остается в памяти, пока алгоритм обходит все тайлы запросов, поэтому каждый элемент и пересекает границу HBM один раз. Тайлы запросов и выходов приходится перечитывать для каждого блока ключей и значений, но тайл оценок потребляется на кристалле и отбрасывается. Стандартное внимание, напротив, записывает и заново читает полные матрицы оценок и вероятностей размера .
Учет полного обращения к памяти
- Чтения ключей и значений: каждый элемент и загружается один раз, давая обращений.
- Проходы по запросам, выходам и статистикам: каждый из блоков столбцов читает весь , читает и записывает и обновляет статистик softmax. Матрицы доминируют над статистиками при размерности головы , поэтому каждый проход дает обращений, а все проходы — .
Поскольку , полный объем равен где последнее равенство выполняется при .
Граница учитывает коммуникацию, а не арифметику. FlashAttention по-прежнему вычисляет те же плотные блоки оценок и может пересчитывать промежуточные величины при обратном распространении; его преимущество возникает из-за того, что эти промежуточные величины не выходят за пределы HBM.
Коэффициент сокращения ввода-вывода
Сравнивая ввод-вывод стандартного внимания и FlashAttention:
Сокращение ввода-вывода на A100
Асимптотическое отношение предсказывает, как большая емкость SRAM может снизить трафик HBM, но скрытые константы и детали ядер не позволяют использовать его как точный подсчет переносов. В измерении на NVIDIA A100 Dao et al. (2022) приводят эффект для нагрузки внимания в прямом и обратном проходах с длиной последовательности 1024, размерностью головы 64, 16 головами, размером батча 64, маской заполнения ключей и без dropout:
- Стандартное внимание: 35,3 ГБ чтений и записей HBM; время выполнения 35,1 мс.
- FlashAttention: 4,4 ГБ чтений и записей HBM; время выполнения 11,7 мс.
Измерения показывают системное следствие ограничения по вводу-выводу: существенно меньший трафик HBM совпадает с меньшим временем выполнения, хотя FlashAttention выполняет дополнительный пересчет. Они не означают, что каждая конфигурация становится ограниченной вычислениями; реальный режим определяют размер тайла, длина последовательности и реализация ядра.
Вывод законов масштабирования Каплана и Chinchilla с оптимальным расходом вычислений
Определение оптимального по вычислениям распределения между параметрами модели и обучающими токенами набора данных при заданном бюджете операций с плавающей запятой — центральное решение при проектировании систем больших языковых моделей. Этот раздел дает строгий математический вывод законов масштабирования с оптимальным расходом вычислений методом множителей Лагранжа и сопоставляет первоначальные результаты Kaplan et al. (2020) с поправками Hoffmann et al. (2022).
Постановка параметрической поверхности потерь
Перекрестная энтропия на оценочной выборке для авторегрессионной трансформерной языковой модели, обученной с параметрами без учета эмбеддингов на токенах, моделируется степенной зависимостью: где:
- : неустранимая потеря, отражающая энтропию данных естественного языка.
- : потеря из-за узкого места емкости, возникающая из-за конечного числа параметров .
- : потеря из-за узкого места размера набора данных, возникающая из-за конечного числа обучающих токенов .
- : эмпирические константы масштабирования.
- : показатели степенного масштабирования для размера модели и размера набора данных соответственно.
Условная оптимизация методом множителей Лагранжа
Полное число операций с плавающей запятой, необходимых для обучения трансформера с параметрами без учета эмбеддингов на токенах, задается формулой:
где учитывает прямой проход, а — обратный.
При заданном бюджете обучения сформулируем задачу условной оптимизации: минимизировать устранимую потерю :
Построим функцию Лагранжа :
Берем частные производные по , и и приравниваем их нулю:
Умножим уравнение (1) на , а уравнение (2) на :
Приравнивая эти выражения, получаем фундаментальное условие оптимальности степенного типа:
Это условие показывает, что в точке оптимального по вычислениям распределения предельное снижение потерь на относительный прирост числа параметров должно равняться предельному снижению потерь на относительный прирост числа токенов набора данных.
Аналитический вывод оптимальных по вычислениям показателей
Из выражаем через :
Подставляем в ограничение по вычислениям :
Явно выражаем оптимальное по вычислениям число параметров :
По симметрии находим оптимальное по вычислениям число токенов :
Эмпирические показатели и правило D/N ≈ 20
Подгоняя параметрическую поверхность потерь под более чем 400 экспериментальных запусков, Hoffmann et al. (2022) оценили и . Подстановка этих значений дает показатели, близкие к результату параметрической модели в статье:
Таким образом, параметрическая модель предсказывает:
Два прямых эмпирических подхода в статье дают почти сбалансированные показатели и , на которых основано распространенное сокращение через квадратный корень. Однако при параметрической подгонке отношение растет медленно с вычислениями, а не остается строго постоянным. В изученном режиме примерно 20 обучающих токенов на параметр — полезная эвристика Chinchilla, а не универсальный инвариант.
Масштабирование Каплана и Chinchilla
Различие между Kaplan et al. (2020) и Hoffmann et al. (2022) показывает, как выбор гиперпараметров в эмпирическом бенчмаркинге может менять выводы о проектировании систем:
- Kaplan et al. (2020) оценили и , предсказав и . Это подтолкнуло область к агрессивному росту размеров моделей при относительно небольших наборах обучающих данных (например, GPT-3 с 175 млрд параметров обучили на 300 млрд токенов, что дает ).
- Методологическое различие: Kaplan et al. (2020) использовали фиксированный бюджет токенов и расписание скорости обучения для всех моделей. Hoffmann et al. (2022) подобрали расписание под каждый горизонт обучения и обнаружили, что прежняя постановка занижала ценность обучения меньших моделей на большем объеме данных.
- Hoffmann et al. (2022) обнаружили почти сбалансированное масштабирование параметров и токенов: их три подхода дают пары показателей , и , а не одно точное универсальное отношение.
- Практическое влияние: Chinchilla (70 млрд параметров, обученных на 1,4 трлн токенов, ) превзошла GPT-3 (175 млрд параметров, обученных на 300 млрд токенов) на последующих бенчмарках, требуя при выводе в 2,5 раза меньше вычислений и при той же точности — в 2,5 раза меньше памяти весов (Hoffmann et al., 2022).
Итоги
Алгоритм становится системной нагрузкой через свои формы, граф операций, зависимости по данным и численное представление. Примитивы линейной алгебры, раскладки памяти, broadcasting и разреженные форматы определяют работу, трафик, локальность и доступный параллелизм. Автоматическое дифференцирование и обратное распространение добавляют сохраненные активации и вычисления обратного прохода; вычислительные графы затем открывают возможности слияния и пересчета. Результат Баура–Штрассена ограничивает накладные расходы обратного режима, а FlashAttention показывает, как тайлинг и рекуррентность online позволяют сокращать трафик HBM без изменения семантики внимания.
Тот же учет связывает ядра с решениями о масштабировании. Масштабирование с оптимальным расходом вычислений превращает фиксированный бюджет в распределение между моделью и данными, но подогнанные показатели остаются эмпирическими, а не универсальными. Для всех этих моделей повторно используемый метод — выявить операции, байты, сохраненное состояние, зависимости и асимптотические ограничения, прежде чем выбирать оптимизацию.
-
Соглашение о суммировании Эйнштейна: повторяющиеся индексы в произведении неявно суммируются, поэтому явные знаки суммирования не нужны. Фреймворки машинного обучения приняли это соглашение, потому что оно кратко выражает произвольные свертки тензоров одной строкой. ↩
-
Обобщенное матричное умножение (GEMM): семейство BLAS (Basic Linear Algebra Subprograms) началось с векторных подпрограмм, стандартизованных в 1979 году (Lawson et al., 1979); GEMM позднее была стандартизована как подпрограмма уровня 3 (Dongarra et al., 1988). Приставка «GE» означает «general» — в противоположность симметричным или треугольным формам. GEMM вычисляет и является критичной для производительности подпрограммой в глубоком обучении. «Матричные операции» объясняет, как формы GEMM определяют пропускную способность обучения. ↩
-
Обратное распространение: сокращение от «обратное распространение ошибки». Алгоритм независимо открывали несколько раз: Вербос (Werbos, 1974) и Линнаинмаа (Linnainmaa, 1970) — для дифференцирования в обратном режиме, а Румельхарт и соавторы (Rumelhart et al., 1986) — для обучения нейронных сетей. Его ключевая идея: вычисление градиентов для всех параметров требует одного обратного прохода по графу, а не одного прохода на параметр. «Теорема Баура–Штрассена о сложности AD в обратном режиме» выводит границу работы с постоянным коэффициентом и типичную стоимость плотного слоя. ↩
-
Контрольная точка градиента: обменивает вычисления на память. Вместо хранения всех активаций сохраняется только подмножество (контрольные точки), а недостающие пересчитываются на обратном проходе. Это снижает использование памяти примерно с хранения активаций каждого слоя до порядка квадратного корня из числа слоев ценой около 33 процентов дополнительных вычислений (Chen et al., 2016). ↩
Основы машины
Паспорт устройства сообщает пиковую пропускную способность, но нагрузка почти никогда ее не достигает. Чтобы закрыть этот разрыв, нужно знать, какой физический предел ограничивает исполнение первым: задержка, пропускная способность памяти, арифметическая интенсивность или энергия. Это приложение собирает устойчивые аппаратные модели и величины порядка величины, которые закрепляют рассуждение об одном узле на протяжении всей книги и дают математическую базу, по которой можно проверять или расширять оценки из глав. Модели предполагают базовую подготовку по архитектуре компьютеров, особенно по иерархии памяти.
Как пользоваться этим приложением
Приложение задумано как справочник. При диагностике проблем производительности используйте его, чтобы перевести размытый симптом («медленно») в конкретное ограничение («ограничено памятью при размере батча один») и затем выбрать рычаг, который действительно может сдвинуть ситуацию.
Обозначения здесь следуют общекнижным соглашениям (например, зарезервировано за размером батча, а — за пропускной способностью).
- Проверка осуществимости: начните с раздела «Числа, которые нужно знать» для величин порядка величины.
- Диагностика доминирующего потолка: используйте модель Roofline в разделе «Модель Roofline», чтобы понять, ограничена нагрузка вычислениями или памятью.
- Рассуждение о пределах масштабирования: используйте законы Амдала и Густафсона в разделе «Закон Амдала и закон Густафсона», чтобы понять, почему добавление ускорителей может не сократить время обучения.
- Выбор точности: используйте «Сравнение форматов чисел с плавающей запятой», чтобы рассматривать FP32 против BF16/FP16 и INT8 как системный компромисс.
- Полное изложение: для полного повествования используйте главы «Аппаратное ускорение», «Обучение моделей» и «Обслуживание моделей».
Хотя современная аппаратура охватывает разные архитектуры ускорителей, топологии межсоединений и варианты корпусирования, физические законы и модели узких мест, описанные здесь, управляют всеми ими.
Числа, которые нужно знать
Как справочник Джеффа Дина «Числа задержек, которые должен знать каждый программист»1 сформировал целое поколение инженеров систем, так и эти справочные числа дают интуицию порядка величины, необходимую для проектирования систем ML. Хотя абсолютные значения и отношения зависят от технологии и нагрузки, иерархия устойчивее. Запомните соотношения; конкретные числа используйте как проверки здравого смысла.
Три числа, которые важнее всего
- Энергетическое отношение: в цитируемом эталоне для техпроцесса 45 нм чтение 32-битного значения из DRAM расходует примерно в 581 раз больше энергии, чем одно умножение FP16. Это обосновывает роль арифметической интенсивности.
- Объем состояния обучения: веса модели (2 байта FP16) + градиенты (2 байта FP16) + мастер-веса (4 байта FP32) + состояние оптимизатора Adaptive Moment Estimation (Adam), 8 байт. Итого 16 байт на параметр, поэтому модели на 7 млрд параметров нужно 112 ГБ только для старта обучения.
- Предел распространения в волокне: свет проходит примерно 200 км за 1 мс. Округленное время туда-обратно через страну (около 40 мс) включает устранимые накладные расходы, но распространение нельзя оптимизировать.
Справочные соотношения
Эти соотношения сочетают физические и арифметические границы с измерениями, специфичными для технологий; устойчивы только границы.
Налог скорости света
«Справочник по скорости света» показывает приблизительные базовые величины времени туда-обратно. Их компонент распространения нельзя устранить.
| Расстояние | Задержка туда-обратно | Следствие |
|---|---|---|
| Один дата-центр | ~1 мс | Распределенное обучение осуществимо |
| Через всю страну (США) | ~40 мс | Сокращает оставшийся бюджет запроса |
| Через Атлантику | ~60 мс | Еще больше сокращает бюджет запроса |
| Через Тихий океан | ~100 мс | Локальность данных критична |
Справочник по скорости света: свет в волокне проходит ~200 км за 1 мс. Эти приблизительные времена туда-обратно включают устранимые накладные расходы; нестираем только распространение.
Энергетическая иерархия
«Справочные энергетические соотношения» количественно описывает энергетическую стоимость перемещения данных по сравнению с вычислениями — фундаментальную причину, по которой арифметическая интенсивность доминирует в оптимизации производительности ML.2
| Соотношение | Справочное отношение | Источник и интерпретация |
|---|---|---|
| Доступ к DRAM против умножения FP16 | ~581× | Horowitz, 45 нм; емкость проводов растет с расстоянием |
| Энергия FP32 против INT8 | ~18× | Horowitz, 45 нм; разрядность определяет энергию переключения |
| Энергия FP32 против FP16 | ~3,4× | Horowitz, 45 нм; более узкая арифметика снижает энергию переключения и тракта данных |
| SRAM уровня L1 против регистра | ~5× | Иллюстративный ориентир для иерархии на кристалле; расстояние до арифметического блока |
Справочные энергетические соотношения: первые три отношения основаны на измерениях Horowitz для 45 нм; отношение L1/регистр — иллюстративный ориентир для иерархии на кристалле.
Иерархия памяти
«Иерархия задержек» показывает, почему иерархия памяти неравномерна: соседние переходы внутри одного корпуса могут различаться лишь в несколько раз, тогда как выход за кристалл, хранилище и сетевые уровни дают скачки на порядки.
| Соотношение | Отношение | Почему это сохраняется |
|---|---|---|
| Память HBM ускорителя против регистра | ~1000× медленнее | На кристалле против вне кристалла |
| SSD против регистра | ~300 000× медленнее | Электрическая против механической или флеш-памяти |
| Сеть против локальной памяти | ~16× медленнее | Скорость света и коммутация |
| Пропускная способность памяти ускорителя против связи CPU↔ускоритель | ~52× быстрее | Приоритет архитектурных инвестиций |
Иерархия задержек: выбранные соотношения задержек в иерархии памяти. Самые большие разрывы возникают при пересечении физических границ: внешней памяти, периферийных линков, хранилища и сетевой инфраструктуры.
Законы масштабирования
«Правила масштабирования» собирает арифметические соотношения, которые управляют требованиями памяти и вычислений для обучения и вывода.3
| Правило | Формула | Пример |
|---|---|---|
| Память вывода (FP16) | 2 байта параметров | 7 млрд параметров → 14 ГБ |
| Память вывода (INT8) | 1 байт параметров | 7 млрд параметров → 7 ГБ |
| Память обучения (Adam) | 16 байт параметров | 7 млрд параметров → 112 ГБ |
| FLOP вывода (трансформер) | ~2 параметров на токен | Модель 7 млрд → ~14 GFLOP на токен |
| FLOP обучения | ~6 параметров токенов | 7 млрд на 1 трлн токенов → FLOP |
Правила масштабирования: это арифметика, а не свойства конкретной аппаратуры. Память обучения включает веса FP16 (2 байта), градиенты FP16 (2 байта), мастер-веса FP32 (4 байта) и состояния оптимизатора Adam (8 байт на моменты и дисперсию).
Иллюстративные бюджеты задержки
Бюджеты задержки зависят от требований безопасности конкретного приложения, ожиданий пользователей и целевых уровней обслуживания. «Иллюстративные целевые значения задержки» перечисляет иллюстративные цели, а не универсальные пределы.
| Приложение | Бюджет | Ограничение |
|---|---|---|
| Автоматическое торможение | <10 мс | На 100 км/ч за 10 мс проходит 28 см |
| Голосовой ассистент | <100 мс | Человеческое восприятие «мгновенно» |
| Веб-поиск | <200 мс | Порог терпения пользователя |
| Потоковое видео | <1 с | Допуск буфера |
| Пакетное обучение | часы–дни | Пропускная способность важнее задержки |
Иллюстративные целевые значения задержки: производственные требования зависят от приложения и его целевых уровней обслуживания.
Текущая справочная аппаратура (около 2024 года)
Эти числа отражают текущее поколение. Используйте их для прикидочных расчетов и сверяйте с актуальной аппаратурой.
Задержка и пропускная способность памяти
«Иерархия памяти (около 2024 года)» дает представительные ориентиры задержки и пропускной способности по всей иерархии памяти.
| Уровень | Задержка | Пропускная способность |
|---|---|---|
| Регистр | ~0,3 нс | — |
| Кэш L1 | ~1 нс | — |
| Кэш L2 | ~4 нс | — |
| HBM3 GPU | ~300 нс | 3,4 ТБ/с |
| PCIe Gen5 (CPU↔GPU) | ~1000 нс | 64 ГБ/с |
| DRAM CPU | ~100 нс | 50 ГБ/с |
| InfiniBand (сеть) | ~5000 нс | 50 ГБ/с |
| NVMe SSD | ~100 000 нс | 7 ГБ/с |
Иерархия памяти (около 2024 года): представительные ориентиры задержки и пропускной способности для регистров, кэшей, памяти, межсоединений, сетей и хранилища. Вместе они показывают, почему локальность и перемещение данных определяют производительность.
Вычислительная пропускная способность
«Справочник по вычислениям (около 2024 года)» сравнивает представительные пиковые пропускные способности и мощность GPU для дата-центров и мобильного NPU.
| Платформа | FP16/BF16 | INT8/класс FP8 | Мощность |
|---|---|---|---|
| GPU дата-центра (H100) | 989 TFLOP/s | 1 979 TFLOP/s (пик FP8) | 700 Вт |
| GPU дата-центра (A100) | 312 TFLOP/s | 624 TOPS | 400 Вт |
| Мобильный NPU | — | 35 TOPS | 3–5 Вт |
Справочник по вычислениям (около 2024 года): представительные пиковые пропускные способности и мощность для GPU дата-центров и мобильного NPU. Поскольку строки используют разные режимы точности и соглашения об операциях, сравнивайте их только в согласованном контексте нагрузки и точности.
Точки перехода Roofline
«Пороги арифметической интенсивности (около 2024 года)» задает пороги арифметической интенсивности, которые определяют, ограничена ли нагрузка памятью или вычислениями.
| Ускоритель | Точка перехода | Следствие |
|---|---|---|
| A100 (FP16) | 153 FLOP/байт | Ниже → ограничено памятью |
| H100 (FP16) | 295 FLOP/байт | Более высокая планка для ограничения вычислениями |
Пороги арифметической интенсивности (около 2024 года): вывод с потоковой передачей весов при батче 1 часто ограничен памятью; большие батчи могут пересечь точку перехода.
Замечание о терминологии: GPU и ускорители
В этой книге «ускоритель» — общий термин для аппаратного ускорения. Принципы — анализ Roofline, иерархии памяти, численная точность и моделирование производительности — применимы к GPU, тензорным процессорам (TPU), NPU, специализированным интегральным схемам и другим специализированным ускорителям ИИ. Специфичные для вендора возможности, такие как CUDA и NVLink, указываются явно.
Знание чисел — только первый шаг. Настоящая сила приходит от компактных моделей, которые показывают, какое число важно для текущего узкого места. Модель Roofline начинает эту диагностику, переводя сырые спецификации аппаратуры в практические потолки производительности.
Физика вычислений
Сырые спецификации аппаратуры — TFLOP/s, ТБ/с, бюджеты мощности — необходимы, но недостаточны для рассуждения о производительности. Без компактных аналитических моделей инженер не отличит нагрузку, ограниченную вычислениями, от ограниченной памятью, и не предскажет, сократит ли удвоение GPU время обучения вдвое. Модели этого раздела превращают такие различия в количественные проверки.
Модель Roofline
Модель Roofline (Williams et al., 2009) ограничивает, насколько быстро нагрузка может выполняться на заданной аппаратной цели. Ответ зависит от того, что исчерпывается первым — вычисления или пропускная способность памяти.
У каждой операции есть арифметическая интенсивность: отношение выполненных вычислений к байтам, перемещенным из памяти. Матричное умножение имеет высокую арифметическую интенсивность, потому что каждый загруженный элемент многократно используется. Поэлементные операции вроде ReLU (выпрямленной линейной функции) имеют низкую интенсивность, поскольку каждая операция загружает число, выполняет одно вычисление и записывает результат обратно. Как показано на рисунке «Модель Roofline», каждая нагрузка ограничена либо пропускной способностью памяти, либо пропускной способностью вычислений, и ее арифметическая интенсивность определяет, какой потолок достигается первым.
Модель Roofline: наклонный потолок пропускной способности памяти и горизонтальный потолок пиковых вычислений сходятся в точке перехода. Нанесение нагрузки по арифметической интенсивности показывает, какой потолок Roofline применим.
Точка перехода определяет баланс аппаратуры. Если интенсивность нагрузки ниже этой точки, она ограничена памятью (наклонная область). Если выше — ограничена вычислениями (плоская область).
Размер батча управляет арифметической интенсивностью
Для матричных умножений арифметическая интенсивность растет с размерностью батча. Для , где имеет размер , а — :
- FLOP: (умножения с накоплением);
- Байты: перемещение , и стоит примерно байт.
Удвоение удваивает FLOP, в то время как трафик весов остается почти постоянным, когда доминируют веса, и поэтому арифметическая интенсивность растет. Именно поэтому батчинг часто помогает обслуживанию вывода, хотя трафик активаций, поведение кэша, форма, точность и точка перехода определяют, достигается ли потолок вычислений.
Конкретный пример: анализ A100
Рассмотрим GPU NVIDIA A100 с производительностью тензорных ядер FP16 312 TFLOP/s и пропускной способностью HBM2e 2,04 ТБ/с. Точка перехода равна 312 TFLOP/s/2,04 ТБ/с = 153 FLOP/байт (приставки «тера» сокращаются, и единица — FLOP на байт).
Две распространенные операции попадают по разные стороны от этой точки. Обобщенное матричное умножение (GEMM) двух квадратных матриц размером 4096 на 4096 имеет арифметическую интенсивность около 1 365 FLOP/байт, то есть 1 365 FLOP/байт > 153 FLOP/байт, и операция ограничена вычислениями. Поэлементный ReLU над тензором FP16 выполняет одно сравнение, читая 2 байта и записывая 2 байта (всего 4 байта), поэтому его арифметическая интенсивность составляет лишь 0,25 FLOP/байт. Поскольку 0,25 FLOP/байт 153 FLOP/байт, операция сильно ограничена памятью и достигает лишь около 0,16 процента пика TFLOP/s. Этот контраст объясняет, почему современные фреймворки сливают операции. Объединение ReLU непосредственно с предыдущим ядром MatMul позволяет не записывать промежуточные результаты в память и тем самым фактически сохраняет пропускную способность памяти.
Размерностный анализ
Модель Roofline помогает диагностировать, где находится узкое место. Однако перед применением любого уравнения производительности его нужно проверить на физическую осмысленность. Размерностный анализ дает эту проверку: любое корректное уравнение должно быть размерно однородным — каждый член должен приводиться к одним и тем же единицам. Если это не так, в уравнении ошибка.
Для последовательных фаз рассмотрим железный закон ML-систем (принцип «Железный закон систем машинного обучения»), введенный в разделе «Железный закон систем машинного обучения»:
Корректность проверяется подтверждением того, что каждый член приводится ко времени (секундам):
- Член данных:
- Член вычислений:
- Член задержки: уже в секундах.
Уравнение физически согласовано. Применяйте этот прием к любому системному уравнению: если размерности не совпадают, формула неверна. «FLOP» и «пропускную способность» нельзя напрямую обменивать, потому что у них разные единицы. Любой такой компромисс должен пересчитываться через время, что и количественно описывает железный закон.
Когда уравнение размерно корректно, следующий вопрос — как его временные члены масштабируются на нескольких устройствах. «Закон Амдала и закон Густафсона» отвечает на него двумя дополняющими границами.
Закон Амдала и закон Густафсона
Распараллеливание — основной инструмент масштабирования ML, но его пределы зависят от того, как масштабируется нагрузка. Эти два закона задают фундаментальное напряжение в параллельных вычислениях. Закон Амдала — взгляд пессимиста: он описывает, насколько быстрее может выполниться фиксированная задача (оптимизация задержки). Закон Густафсона — взгляд оптимиста: он описывает, насколько больше работы можно выполнить за то же время (оптимизация пропускной способности).
Сильное масштабирование (закон Амдала)
Сильное масштабирование измеряет, насколько быстрее выполняется задача фиксированного размера по мере добавления процессоров.
Закон Амдала (Amdahl, 1967) утверждает, что ускорение ограничено последовательной частью задачи.4 Если доля задачи последовательна (не может быть распараллелена), а распараллеливается, максимальное ускорение на процессорах равно:
При член , и ускорение стремится к .
Чтобы увидеть закон Амдала в действии, допустим, что 5 процентов шага обучения — последовательные накладные расходы (например, глобальная блокировка интерпретатора Python (GIL) или задержка запуска ядра), а 95 процентов — распараллеливаемая матричная арифметика:
- При ускорение равно 1.
- При 8 ускорение равно 1/(0,05 + 0,95/8) ≈ 5,9 раза.
- При ускорение ограничено величиной 1/0,05 = 20 раз.
Сколько бы ускорителей ни добавили, эта фиксированная нагрузка не может работать быстрее, чем в 20 раз.
Слабое масштабирование (закон Густафсона)
Слабое масштабирование измеряет, насколько может вырасти задача при сохранении фиксированного времени выполнения по мере добавления процессоров.5
Так устроена реальность больших языковых моделей. Вместо того чтобы использовать 1000 ускорителей, чтобы обучить модель на небольшом наборе данных за миллисекунды, их используют, чтобы обучить модель на наборе данных в 1000 раз большем за разумное время.
Для процессоров пусть — последовательная доля времени выполнения, измеренная на этих процессорах для масштабированной нагрузки. Закон Густафсона (Gustafson, 1988) описывает это «масштабированное ускорение»:
Поскольку параллельная часть растет линейно с , а остается фиксированным, слабое масштабирование может удерживать высокую эффективность по мере роста задачи.
Используя те же 5 процентов последовательных накладных расходов ( = 0,05), закон Густафсона рассказывает совсем другую историю:
- При ускорение равно 1.
- При 8 масштабированное ускорение равно 8 − 0,05 (7) = 8 − 0,35 = 7,65 раза.
- При 1000 масштабированное ускорение равно 1000 − 0,05 (999) ≈ 950 раз.
При слабом масштабировании эффективность остается высокой, потому что полезная работа (обучение модели) растет настолько, что затмевает фиксированные накладные расходы.
Та же оптика масштабирования превращает размер модели, объем данных, число аппаратных единиц и загрузку в одну оценку времени обучения.
Уравнение времени обучения
Задача: сколько времени занимает обучение плотного трансформера при заданных размере модели, числе токенов, числе ускорителей, пиковой скорости и загрузке?
Расчет:
Переменные:
- Коэффициент FLOP обучения: множитель 6 получается из для прямого прохода и для обратного ( для градиентов активаций и для градиентов весов), что дает суммарно по обучающим токенам.
- : число параметров модели.
- : число обучающих токенов.
- : число GPU.
- : пиковые FLOP/s одного ускорителя.
- : загрузка аппаратуры, в этой оценке обычно 30–50 процентов.
Пример: обучение модели с 1 млрд параметров на 20 млрд токенов на 1 A100 (312 TFLOP/s) при загрузке 40 процентов. . . .
Системный вывод: при этих допущениях обучение займет 961 538,5 секунды (≈ 16 025,6 минуты, или около 11,1 дня); оценка делает явными рычаги: масштаб модели, масштаб данных, эффективную пропускную способность ускорителей и загрузку.
Закон Литтла
Для планирования мощности стабильных систем вывода закон Литтла (Little, 1961) связывает среднюю долгосрочную одновременность (), среднюю интенсивность прихода () и среднее время в системе ():6
Чтобы увидеть это на практике, рассмотрим поддержание 1000 запросов в секунду при средней задержке 50 мс. Закон требует, чтобы система поддерживала 1000 0,05 с = 50 одновременных запросов.
Это определяет размер пулов обработчиков, но для памяти нужно другое допущение. Если каждый запрос в системе одновременно удерживает 1 ГБ состояния устройства, средняя популяция подразумевает 50 ГБ; запросы в очереди могут вместо этого оставаться в памяти хоста или разделять батчевое состояние. Если 24 слота устройства каждый остается занятым 50 мс, прокси пропускной способности составит ; один лишь закон Литтла физического максимума не задает.
Эти модели, основанные на физике, — Roofline, Амдала, Густафсона и Литтла — диагностируют, где лежат узкие места. Однако превратить эти диагнозы в практические оптимизации требует понимания конкретных аппаратных структур, которые их порождают: кэшей, шин памяти и межсоединений.
Основы архитектуры компьютеров
GPU заявляет 1000 TFLOP/s, однако ядро достигает лишь 30 TFLOP/s. Разрыв может отражать перемещение данных, недостаточный параллелизм, синхронизацию, накладные расходы запуска или неэффективность программного обеспечения. Пока физика задает теоретические границы производительности, архитектура компьютеров определяет механику, которая решает, насколько близко реальная нагрузка может подойти к ним. Дальнейшее обсуждение охватывает компромиссы задержки, пропускной способности и энергии, которые формируют проектирование систем.
Задержки, которые должен знать каждый программист
Первый шаг к системной интуиции — понять стоимость расстояния. «Иерархия задержек» количественно описывает, как долго процессор ждет данные с разных уровней иерархии памяти. Если обращение к регистру похоже на то, чтобы взять близкий карандаш, то выборка из памяти с высокой пропускной способностью (HBM) — это прогулка через офис, а выборка с диска — полет на Луну.
| Компонент | Задержка (нс) | Такты (примерно) | Относительное «расстояние» |
|---|---|---|---|
| Регистр | ~0,3 нс | 1 такт | 10 секунд |
| Кэш L1 | ~1 нс | 3–4 такта | 33,3 секунды |
| Кэш L2 | ~4 нс | 12 тактов | 2,2 минуты |
| HBM3 (память GPU) | ~300 нс | 1000 тактов | 2,8 часа |
| NVLink (GPU–GPU) | ~500 нс | 1500 тактов | 4,6 часа |
| PCIe (CPU–GPU) | ~1000 нс | 3000 тактов | 9,3 часа |
| InfiniBand (сеть) | ~5000 нс | 15 000 тактов | 1,9 дня |
| SSD (NVMe) | ~100 000 нс | 300 000 тактов | 38,6 дня |
Иерархия задержек: представительные времена доступа для современной аппаратуры ИИ; приближенные числа тактов рассчитаны на эталонную частоту 3 ГГц. Переход от кэша SRAM к HBM делает локальность кэша важным фактором производительности.
Шпаргалка по аппаратуре ИИ (современный справочник)
Задержка измеряет ожидание первого байта; пропускная способность — сколько байтов идет следом. «Справочные спецификации» дает константы для прикидочных расчетов Roofline. Они представляют «стандартные единицы вычислений» текущей эпохи машинного обучения.
| Спецификация | NVIDIA H100 (SXM) | Google TPU v5p | Влияние на систему |
|---|---|---|---|
| Пик BF16 | 989 TFLOP/s | 459 TFLOP/s | «Предел скорости» () |
| Пропускная способность памяти | 3,35 ТБ/с | 2,76 ТБ/с | «Ширина трубы» () |
| Емкость HBM | 80 ГБ | 95 ГБ | Максимальный размер модели () и батча () |
| SRAM на кристалле | 50 МБ L2 | 128 МБ VMEM на чип | Критична для слияния операторов |
| Межсоединение | 900 ГБ/с (NVLink) | 1200 ГБ/с (межчиповое соединение, ICI) | Определяет масштабирование параллелизма модели |
Справочные спецификации: ключевые константы для количественного анализа. Всегда сверяйте конкретные даташиты: емкость HBM указывается в единицах производителя, а пропускная способность межсоединения — суммарная двунаправленная, поэтому топология и направление имеют значение.
Иерархия памяти
Компьютерные системы используют иерархию, потому что никакая одна технология не обеспечивает одновременно большой объем и малую задержку. «Иерархия памяти» показывает этот компромисс: хранение данных выше в пирамиде (регистры и кэши) уменьшает задержку доступа, когда перемещение данных находится на критическом пути.
Иерархия памяти: производительность зависит от близости данных. Доступ к HBM примерно в 1000 раз медленнее, чем к регистрам; доступ к SSD примерно в 300 000 раз медленнее.
Иерархия памяти — фундаментальное физическое ограничение систем машинного обучения. «Физические свойства иерархии памяти (около 2024 года)» сводит физические свойства — задержку, пропускную способность и энергию — по всему стеку.
| Уровень | Технология | Задержка | Пропускная способность | Энергетический ориентир (на 32 бита) |
|---|---|---|---|---|
| Регистры | Триггеры | ~0,3 нс | — | — |
| Кэш L1 | SRAM | ~1 нс | — | — |
| Кэш L2 | SRAM | ~4 нс | — | — |
| Память (локальная) | HBM3 | ~300 нс | 3 350 ГБ/с | 640 пДж |
| Межсоединение | NVLink 4.0 | ~500 нс | 900 ГБ/с | — |
| Хост-связь | PCIe Gen5 | ~1000 нс | 64 ГБ/с | — |
| Системная память | DDR5 | ~100 нс | 50 ГБ/с | — |
| Сеть (фабрика) | InfiniBand NDR | ~5000 нс | 50 ГБ/с | — |
| Хранилище (локальное) | NVMe SSD | ~100 000 нс | 7 ГБ/с | — |
Физические свойства иерархии памяти (около 2024 года): представительные ориентиры задержки и пропускной способности по всей иерархии памяти. Иерархия охватывает примерно пять порядков величины по задержке. NVLink дан как суммарная двунаправленная пропускная способность; показана только энергия DRAM для 45 нм, потому что другие уровни зависят от реализации. Держа данные выше в иерархии, можно получить большой выигрыш в производительности.
Энергетические затраты иерархии показывают, почему перемещение данных доминирует в современном проектировании систем.
Высокая цена перемещения данных
В цитируемом эталоне для 45 нм выборка 32-битного значения из DRAM стоит примерно в 581 раз больше энергии, чем одно умножение FP16 (~640 пДж против ~1,1 пДж). Это отношение зависит от платформы и само по себе не определяет энергию нагрузки, которая также зависит от числа обращений и повторного использования. Тем не менее оно объясняет, почему важна арифметическая интенсивность.
Пропускная способность и задержка
Пропускная способность (производительность) и задержка (время ожидания) — разные ограничения. Для объема данных , передаваемого по эффективной пропускной способности при фиксированной задержке пути и при условии, что задержка и затраты на сериализацию не перекрываются, полное время передачи равно:
Точка перехода — размер передачи, при котором два члена равны:
Для передач меньше (например, малых запросов или управляющих сообщений) доминирует задержка. Для передач больше него (например, загрузки весов) доминирует пропускная способность.
Рассмотрим отправку данных по линии 10 Гбит/с с базовой задержкой запрос/ответ 10 мс. Размер перехода составляет 12,5 МБ, поэтому доминирующий член зависит от того, с какой стороны от этого порога лежит передача.
- Пакет, ограниченный задержкой (1 КБ):
- Передача: 1 КБ 8/10 Гбит/с ≈ 0,8 мкс.
- Полное время ≈ 10 мс + 0,8 мкс ≈ 10 мс.
- Результат: доминирует фиксированная задержка пути и протокола; распространение — лишь один ее компонент.
- Контрольная точка, ограниченная пропускной способностью (1 ГБ):
- Передача: .
- Полное время .
- Результат: базовая задержка пренебрежимо мала; узкое место — пропускная способность.
Архитектура определяет, насколько быстро могут двигаться данные, но численная точность напрямую управляет тем, сколько данных должно переместиться. Переход с FP32 на FP16 вдвое сокращает байты на параметр и может почти удвоить полезную пропускную способность, когда аппаратура, ядра и точность модели это поддерживают. Понимание этих компромиссов требует более внимательного взгляда на то, как числа представлены в аппаратуре.
Численные представления
Статистика описывает распределения данных; численные представления определяют, как система хранит эти значения. В системах ML выбор точности (FP32 против BF16 против INT8) — прямой компромисс между статистической точностью и пропускной способностью аппаратуры.
Сравнение форматов чисел с плавающей запятой
Форматы IEEE 754, такие как FP32 и FP16, а также специфичные для ИИ форматы вроде BF16 и FP8 задают разные компромиссы между динамическим диапазоном (размахом представимых значений) и точностью (гранулярностью значений внутри этого диапазона). «Сравнение численных форматов» сводит основные форматы и их применение, а «Раскладка битов численных форматов» показывает распределение битов.
| Формат | Биты | Порядок | Мантисса | Динамический диапазон | Типичное применение |
|---|---|---|---|---|---|
| FP32 | 32 | 8 | 23 | до | Обучение (полная точность), эталонный вывод |
| FP16 | 16 | 5 | 10 | Нормальный: – | Обучение часто с масштабированием потерь, вывод |
| BF16 | 16 | 8 | 7 | Тот же диапазон порядка, что у FP32 | Обучение, обычно без масштабирования потерь |
| FP8 | 8 | 4 или 5 | 3 или 2 | Зависит | Обучение/вывод на поддерживаемой аппаратуре |
| INT8 | 8 | Н/Д | Н/Д | от −128 до 127 | Вывод после квантования |
Сравнение численных форматов: каждый формат балансирует точность, динамический диапазон, объем памяти и пропускную способность вычислений. BF16 имеет тот же нормальный диапазон порядка, что и FP32, при вдвое меньшем объеме хранения.
Раскладка битов численных форматов: визуальное сравнение распределения битов. BF16 сохраняет 8-битный порядок FP32, а значит, и его нормальный диапазон порядков. FP16 обменивает диапазон на точность и часто использует масштабирование потерь для уменьшения антипереполнения.
Помимо ширины в битах, распределение битов между порядком и мантиссой определяет, какой диапазон значений может представить каждый формат.
Среди этих форматов BF167 заслуживает особого внимания (Wang and Kanwar, 2019; Kalamkar et al., 2019). Он занимает тот же класс 16-битного хранения, что и FP16, но ведет себя в обучении иначе, поэтому номинальная ширина сама по себе не предсказывает эксплуатационную нагрузку. Следующая системная перспектива связывает распределение битов с трафиком памяти, численной стабильностью и эффективностью развертывания.
Стена динамического диапазона
Выбор численного формата — прямое применение железного закона ML-систем (принцип «Железный закон систем машинного обучения»). Снижение точности с FP32 до BF16 или FP16 вдвое сокращает член объема данных и потенциально удваивает пропускную способность на нагрузках, ограниченных памятью. Однако тип 16-битного формата определяет инженерную сложность:
- Динамический диапазон (порядок): BF16 сохраняет 8-битный порядок FP32 и потому тот же нормальный диапазон порядков (Kalamkar et al., 2019).
- Точность (мантисса): у FP16 мантисса длиннее (10 бит против 7 у BF16), что дает большую точность для значений в его диапазоне. Однако 5-битный порядок повышает риск антипереполнения. Поэтому обучение в FP16 часто использует масштабирование потерь — операционный шаг, при котором градиенты умножаются на большую константу, чтобы сохранить больше значений представимыми (Micikevicius et al., 2017).
- Энергетическая эффективность: операции INT8 могут быть существенно эффективнее эквивалентов с плавающей запятой, потому что перемещают меньше данных и используют более простые целочисленные арифметические тракты. Переход на INT8 для вывода — основной рычаг развертывания нейронных сетей при жестких бюджетах памяти, задержки или мощности (Jacob et al., 2018; Krishnamoorthi, 2018).
Целочисленное квантование
Квантование отображает непрерывные значения с плавающей запятой на дискретные целые, обычно INT8. Ключевая трудность — выбрать, как отобразить диапазон чисел с плавающей запятой на целые. Доминируют два подхода.
Для симметричного квантования пусть по калиброванному диапазону и обрезается до . Знаковый код INT8 имеет вид: Это отображение хорошо работает для распределений весов, центрированных около нуля.
Асимметричное квантование обрабатывает распределения, которые не центрированы (типично после ReLU, который выдает только неотрицательные значения), сдвигая диапазон перед масштабированием. Пусть и ограничивают калиброванный диапазон, задайте размах нормировки и обрежьте до . Распространенное беззнаковое 8-битное отображение:
Выбор между симметричным и асимметричным квантованием зависит от распределения тензора и имеет измеримые последствия для точности.
Итоги
Диагностика со стороны машины начинается с единиц измерения, потолков и рабочих наборов. Справочные числа задают порядки величин; модель Roofline и железный закон определяют, какие связывают операции, байты или задержка; законы Амдала, Густафсона и Литтла проверяют заявления об ускорении, масштабировании и одновременности; а размерностный анализ отлавливает невозможные результаты. Иерархия памяти и межсоединения показывают, как эти пределы проявляются как ограничения по задержке и пропускной способности, а численные представления показывают, как динамический диапазон, точность и квантование меняют хранение, энергию, пропускную способность и точность.
Относитесь к пиковым спецификациям как к потолкам, а не предсказаниям. Сравните измерение с соответствующим потолком, затем прослеживайте оставшийся разрыв до загрузки, перемещения данных, накладных расходов времени исполнения, архитектуры или программного обеспечения. Прикидочная оценка полезна, когда она явно называет свои допущения и единицы и делает следующее измерение очевидным.
-
Джефф Дин: старший научный сотрудник Google и один из архитекторов распределенной инфраструктуры Google, включая MapReduce, BigTable и TensorFlow. Его числа задержек, впервые показанные вместе с Питером Норвигом около 2010 года, стали каноническим справочником для инженеров систем. Со временем числа обновлялись по мере развития аппаратуры, но иерархия задержек остается удивительно стабильной; интерактивная визуализация Колина Скотта показывает иерархию задержек для разных поколений аппаратуры (Scott, 2012). ↩
-
Источники энергетической иерархии: значения для DRAM и арифметики взяты из Horowitz (2014), 45 нм. Отношение SRAM L1 к регистру — иллюстративный ориентир иерархии, а не измерение Horowitz. Главное отношение сравнивает 32-битный доступ к DRAM с 16-битным умножением с плавающей запятой. И абсолютные значения, и отношение зависят от техпроцесса, схемотехники, технологии памяти и разрядности операндов; расстояние по проводам помогает понять, почему перемещение остается дорогим. ↩
-
Память обучения (Adam): правило 16 байт на параметр предполагает обучение в смешанной точности с Adam. Оптимизация ZeRO может снизить память на ускоритель, шардируя состояния оптимизатора по ускорителям, но суммарная память по всем ускорителям остается около 16 байт на параметр. ↩
-
Джин Амдал (1922–2015): легендарный архитектор компьютеров из IBM, где он был главным архитектором System/360. Позднее основал корпорацию Amdahl, чтобы конкурировать с IBM на рынке мейнфреймов. ↩
-
Джон Густафсон: специалист по информатике, известный работами в области параллельных вычислений и введением формата Unum (универсальное число). Его закон был прямым ответом на воспринимаемые «пределы» закона Амдала при применении к массовому масштабу. ↩
-
Джон Литтл: профессор-институт MIT и пионер в области исследования операций. Его закон, доказанный в 1961 году, лежит в основе теории очередей и используется в областях от производства до анализа компьютерных сетей. ↩
-
BF16 (brain floating point 16): впервые введен вместе с Google TPUv2, позднее принят Intel, Arm и NVIDIA; BF16 стал распространенным форматом обучения в экосистемах разных ускорителей. Его принятие превратило поддержку формата в аппаратуре, ядрах и библиотеках распределенного обучения в вопрос переносимости, а не в специфическую возможность вендора. ↩
Системные допущения
Прикидочный расчет заслуживает доверия только настолько, насколько доверяемы его входные данные, а их легко потерять из виду: пиковая скорость ускорителя, число параметров модели, стоимость электроэнергии, энергия одной операции. Это приложение собирает канонические значения и соглашения о единицах в один справочный лист, чтобы любую количественную оценку в книге можно было проверить, обновить новыми данными или сверить между главами. Здесь также зафиксированы соглашения о единицах, от которых зависят эти оценки. Главы могут рассуждать на основе чисел, не повторяя, откуда каждое из них взято.
Как пользоваться этим приложением
Когда глава утверждает, что у H100 есть определенная точка перехода, или что обучение модели на 7 млрд параметров требует определенного объема памяти, лежащие в основе пропускные способности, емкости и размеры моделей перечислены здесь. Локальная оценка может использовать соответствующие записи «Значение» и «Единица». Таблицы сгруппированы по темам: ускорители, справочные модели, энергия обращения, пропускная способность межсоединений, экономика, опорные величины производственного масштаба и соглашения о единицах. Допущения взяты из паспортных пиковых значений производителей, опубликованных исследований или отраслевых отчетов, иллюстративной статистики рынка или сетей электроснабжения и соглашений книги; «Происхождение допущений» сводит происхождение всех их в одном месте.
Расчеты ниже показывают, какие допущения доминируют в каждой оценке, поэтому изменение характеристики аппаратуры или цены может распространиться без изменения метода.
Константы этого приложения поддерживают быстрые и воспроизводимые расчеты. Три примера ниже применяют их к производительности, емкости и стоимости.
Классифицировать режим Roofline
Задача: Для заданных H100 и интенсивностей нагрузок: какие операции ограничены вычислениями, а какие — памятью?
Исходные данные: Для H100 при пике FP16/BF16 используйте пиковую скорость вычислений 989 TFLOP/s и пропускную способность памяти 3,35 ТБ/с.
Расчет: Разделите пиковые FLOP/s на пропускную способность памяти, чтобы получить точку перехода Roofline: 989 TFLOP/s/3,35 ТБ/с 295,2 FLOP/байт. Большое обобщенное матричное умножение (GEMM) при 4 096 имеет интенсивность 1 365,3 FLOP/байт.
Результат: Операции выше 295,2 FLOP/байт ограничены вычислениями; операции ниже — памятью. Пример GEMM ограничен вычислениями, тогда как одношаговое авторегрессионное декодирование с интенсивностью FLOP/байт сильно ограничено памятью.
Системный вывод: Тот же ускоритель может быть богат вычислениями и одновременно ограничен памятью. Арифметическая интенсивность определяет, какой ресурс нагрузка действительно потребляет.
Пропускная способность — лишь одно ограничение. Обучению также нужна достаточная емкость для весов, градиентов и состояния оптимизатора.
Оценить память состояния обучения
Задача: Сколько памяти состояния модели требуется, чтобы обучить модель на 7 млрд параметров с оптимизатором Adaptive Moment Estimation (Adam) в смешанной точности?
Исходные данные: Adam в смешанной точности хранит веса BF16, градиенты, мастер-веса FP32, моменты и дисперсию. Бюджет состояния модели составляет 16 байт на параметр.
Расчет: Для 7 млрд параметров состояние модели равно 7 16 байт = 112 ГБ.
Результат: У H100 есть 80 ГБ памяти с высокой пропускной способностью (HBM), поэтому одно только состояние модели превышает емкость одного ускорителя еще до учета активаций.
Системный вывод: Состояние оптимизатора, а не только веса, задает нижнюю границу памяти обучения. Планирование емкости, которое начинается с байтов параметров, занижает реальные требования.
Умещение модели в памяти устанавливает осуществимость, но не эксплуатационную стоимость. Мощность и время работы дают остальные величины для первой оценки стоимости электроэнергии.
Оценить стоимость электроэнергии ускорителей
Задача: Какова стоимость электроэнергии только ускорителей для сценария уровня GPT-3, описанного в редакционном порядке?
Исходные данные: Используйте 1 024 A100, 400 Вт на ускоритель, ~25 дней календарного времени и тариф электроэнергии $0,12/кВт·ч.
Расчет: Запуск требует около FLOP. Оценка стоимости электроэнергии в эквиваленте A100: ~25 дней календарного времени 1 024 A100 24 ч/сутки 0,4 кВт $0,12/кВт·ч = ~$29 491,2.
Результат: Стоимость электроэнергии только ускорителей составляет примерно $29 491,2. Эта оценка только по расчетной тепловой мощности (TDP) ускорителей исключает центральные процессоры хоста, сеть, хранилище, охлаждение и накладные расходы объекта. Исходный запуск GPT-3 использовал инфраструктуру уровня V100; это редакционный сценарий в эквиваленте A100, а не сообщаемая конфигурация и не длительность, выведенная из одних лишь пиковых FLOP/s.
Системный вывод: Энергию можно измерить по мощности и времени, но полный учет стоимости должен также включать загрузку капитальных затрат, сеть, хранилище, персонал и неудачные или повторные запуски.
Характеристики ускорителей
Это допущения об ускорителях, которые используются в примерах книги по Roofline, памяти обучения, энергии и стоимости: пиковая пропускная способность, пропускная способность памяти, емкость памяти и TDP для каждого поколения, на которое ссылаются главы. Значения — паспортные пиковые показатели производителей, то есть потолки для прикидочных расчетов, а не устойчивая загрузка. Они взяты из документации NVIDIA и архитектурных статей IEEE Micro (NVIDIA Corporation, 2017; NVIDIA Corporation, 2020; NVIDIA Corporation, 2020; NVIDIA Corporation, 2021; Choquette et al., 2021; Choquette, 2023; NVIDIA Corporation, 2018; NVIDIA Corporation, 2024), документации AMD MI300X (AMD, 2023), публикаций о тензорных процессорах Google (TPU) (Jouppi et al., 2023) и текущей спецификации Google Cloud для TPU v6e (Google Cloud, 2026). Строки емкости сохраняют официальные паспортные значения в десятичных ГБ. Таблицы идут от «NVIDIA V100 (Volta)» (Volta) и «NVIDIA T4 (Turing)» (Turing) к текущим и перспективным поколениям.
Сводная матрица характеристик ускорителей
Сводная матрица ускорителей в «Сводной матрице характеристик ускорителей» объединяет характеристики основных GPU, TPU, пластинных (wafer-scale) и предметно-ориентированных ускорителей ИИ.
| Архитектура/чип | Техпроцесс (нм) | TDP (Вт) | Пиковые вычисления (TFLOP/s и TOPS) | Емкость и пропускная способность памяти | SRAM на кристалле | (FLOP/Б) |
|---|---|---|---|---|---|---|
| NVIDIA V100 (SXM2 32 ГБ) | 12 нм (TSMC) | 300 | FP64: 7,8, FP32: 15,7, FP16: 125 (TC), INT8: 125 (TC) | 32 ГБ HBM2 при 0,90 ТБ/с | 16 МБ | 138,9 |
| NVIDIA A100 (80 ГБ SXM4) | 7 нм N7 (TSMC) | 400 | FP64: 9,7/19,5, FP32: 19,5, TF32: 156, FP16/BF16: 312, INT8: 624 | 80 ГБ HBM2e при 2,04 ТБ/с | 40 МБ | 153,0 |
| NVIDIA H100 (80 ГБ SXM5) | 4 нм 4N (TSMC) | 700 | FP64: 34/67, FP32: 67, TF32: 494, FP16/BF16: 989, FP8: 1 978, INT8: 1 978 | 80 ГБ HBM3 при 3,35 ТБ/с | 50 МБ | 295,2 |
| NVIDIA H200 (141 ГБ SXM5) | 4 нм 4N (TSMC) | 700 | FP64: 34/67, FP32: 67, TF32: 494, FP16/BF16: 989, FP8: 1 978, INT8: 1 978 | 141 ГБ HBM3e при 4,80 ТБ/с | 50 МБ | 206,0 |
| NVIDIA B200 (192 ГБ SXM) | 4 нм 4NP (TSMC) | 1 000 | FP64: 45/90, FP32: 90, TF32: 1 250, FP16/BF16: 2 250, FP8: 4 500, INT8: 4 500 | 192 ГБ HBM3e при 8,00 ТБ/с | 128 МБ | 281,3 |
| NVIDIA L40S (48 ГБ PCIe) | 4 нм 4N (TSMC) | 350 | FP64: 1,4, FP32: 91,6, TF32: 183, FP16/BF16: 366, FP8: 733, INT8: 733 | 48 ГБ GDDR6 при 0,86 ТБ/с | 96 МБ | 423,6 |
| Google TPU v1 | 28 нм (TSMC) | 75 | INT8: 92 TOPS (форматы FP не применимы) | 8 ГБ DDR3 при 0,034 ТБ/с | 28 МБ | Н/Д (2 705,9 INT8) |
| Google TPU v2 | 16 нм (TSMC) | 280 (плата) | BF16/FP16: 45 TFLOP/s | 16 ГБ HBM при 0,60 ТБ/с | 32 МБ | 75,0 |
| Google TPU v3 | 16 нм (TSMC) | 450 (плата) | BF16/FP16: 123 TFLOP/s | 32 ГБ HBM2 при 0,90 ТБ/с | 32 МБ | 136,7 |
| Google TPU v4 | 7 нм N7 (TSMC) | 170 | BF16/FP16: 275, FP32: 275, INT8: 275 | 32 ГБ HBM2 при 1,20 ТБ/с | 48 МБ | 229,2 |
| Google TPU v5e | 7 нм N7 (TSMC) | 140 | BF16/FP16: 197, FP8: 394, INT8: 394 | 16 ГБ HBM2e при 0,82 ТБ/с | 32 МБ | 240,5 |
| Google TPU v5p | 4 нм 4N (TSMC) | 450 | BF16/FP16: 459, FP8: 918, INT8: 918 | 95 ГБ HBM3 при 2,76 ТБ/с | 96 МБ | 166,3 |
| Google TPU v6e (Trillium) | 4 нм 4N (TSMC) | 400 | BF16/FP16: 926, FP8: 1 852, INT8: 1 852 | 32 ГБ HBM3 при 1,64 ТБ/с | 64 МБ | 564,6 |
| Cerebras WSE-3 | 5 нм N5 (TSMC) | 23 000 | FP16/BF16: 125 000, FP8: 250 000, INT8: 250 000 | 44 ГБ SRAM при 21 000 ТБ/с | 44 000 МБ | 5,95 |
| AMD Instinct MI300X | 5 нм+6 нм 3D | 750 | FP64: 163,4, FP32: 163,4, TF32: 653,7, FP16/BF16: 1 307,4, FP8: 2 614,9 | 192 ГБ HBM3 при 5,30 ТБ/с | 256 МБ | 246,7 |
| Intel Habana Gaudi 2 | 7 нм N7 (TSMC) | 600 | FP32: 38,5, TF32: 154, FP16/BF16: 307, FP8: 614, INT8: 614 | 96 ГБ HBM2e при 2,45 ТБ/с | 48 МБ | 125,3 |
| Intel Habana Gaudi 3 | 5 нм N5 (TSMC) | 900 | FP32: 115, TF32: 460, FP16/BF16: 1 835, FP8: 3 670, INT8: 3 670 | 128 ГБ HBM3e при 3,70 ТБ/с | 96 МБ | 495,9 |
Сводная матрица характеристик ускорителей: полная справочная матрица, сравнивающая промышленное ИИ-оборудование по архитектурам, технологическим нормам, TDP, пиковой пропускной способности вычислений для нескольких точностей (от FP64 до INT8), емкости и пропускной способности памяти, объему SRAM на кристалле и точке перехода Roofline для FP16 ().
NVIDIA V100
| Допущение | Значение | Единица |
|---|---|---|
| Пиковая пропускная способность тензорных ядер FP16 (V100) | 125 | TFLOP/s |
| Пиковая пропускная способность FP32 (V100) | 15,7 | TFLOP/s |
| Пропускная способность HBM (V100) | 900 | ГБ/с |
| Емкость HBM (V100) | 32 | ГБ |
| TDP (V100) | 300 | Вт |
NVIDIA V100 (Volta): пиковые характеристики из архитектурного документа NVIDIA и паспорта продукта (NVIDIA Corporation, 2017; NVIDIA Corporation, 2020). V100 ввел тензорные ядра для обучения в смешанной точности и служит базовой точкой сравнения поколений.
NVIDIA T4
| Допущение | Значение | Единица |
|---|---|---|
| Пиковая пропускная способность тензорных ядер FP16 (T4) | 65 | TFLOP/s |
| Пиковая пропускная способность INT8 (T4) | 130 | TOPS |
| Пропускная способность памяти (T4) | 320 | ГБ/с |
| TDP (T4) | 70 | Вт |
NVIDIA T4 (Turing): пиковые характеристики из документации продукта NVIDIA Tesla T4 (NVIDIA Corporation, 2018). TDP 70 Вт делает этот маломощный ускоритель вывода полезной опорой для стоимости одного вывода.
NVIDIA A100
Характеристики поколения Ampere («NVIDIA A100 (Ampere)») служат опорой для большинства примеров обучения в книге.
| Допущение | Значение | Единица |
|---|---|---|
| Пиковая пропускная способность тензорных ядер FP16 (A100) | 312 | TFLOP/s |
| Пиковая пропускная способность FP32 (A100) | 19,5 | TFLOP/s |
| Пиковая пропускная способность INT8 (A100) | 624 | TOPS |
| Пиковая пропускная способность TF32 (A100) | 156 | TFLOP/s |
| Пропускная способность HBM (A100) | 2 039 | ГБ/с |
| Емкость HBM (A100) | 80 | ГБ |
| TDP (A100) | 400 | Вт |
NVIDIA A100 (Ampere): пиковые характеристики из архитектурного документа NVIDIA, паспорта 80 ГБ и архитектурной статьи (NVIDIA Corporation, 2020; NVIDIA Corporation, 2021; Choquette et al., 2021). A100 — наиболее часто упоминаемый ускоритель в примерах обучения; 80 ГБ HBM2e и тензорные ядра TF32 задают опоры по емкости памяти и вычислительной интенсивности.
NVIDIA H100
Для оценок эпохи Hopper справочные значения включают тензорные ядра FP8 и Transformer Engine («NVIDIA H100 (Hopper)»).
| Допущение | Значение | Единица |
|---|---|---|
| Пиковая пропускная способность тензорных ядер FP16 (H100) | 989 | TFLOP/s |
| Пиковая пропускная способность CUDA FP32 (H100) | 67 | TFLOP/s |
| Пиковая пропускная способность тензорных ядер FP8 (H100) | 1 979 | TFLOP/s |
| Пиковая пропускная способность INT8 (H100) | 1 979 | TOPS |
| Пиковая пропускная способность TF32 (H100) | 494 | TFLOP/s |
| Пропускная способность HBM (H100) | 3,35 | ТБ/с |
| Емкость HBM (H100) | 80 | ГБ |
| TDP (H100) | 700 | Вт |
NVIDIA H100 (Hopper): пиковые характеристики из обзора архитектуры Hopper (Choquette, 2023). Тензорные ядра FP8 и Transformer Engine определяют оценки обучения и обслуживания поколения Hopper.
NVIDIA B200
Перспективные примеры планирования емкости опираются на характеристики поколения Blackwell («NVIDIA B200 (Blackwell)»).
| Допущение | Значение | Единица |
|---|---|---|
| Пиковая пропускная способность тензорных ядер FP16 (B200) | 2 250 | TFLOP/s |
| Пиковая пропускная способность тензорных ядер FP8 (B200) | 4 500 | TFLOP/s |
| Пиковая пропускная способность FP4 (B200) | 9 000 | TFLOP/s |
| Пропускная способность HBM (B200) | 8 | ТБ/с |
| Емкость HBM (B200) | 180 | ГБ |
| TDP (B200) | 1 000 | Вт |
NVIDIA B200 (Blackwell): пиковые характеристики из документации продуктов NVIDIA Blackwell (NVIDIA Corporation, 2024). Перспективные примеры планирования емкости используют пропускную способность HBM3e и пропускную способность FP8.
AMD Instinct MI300X
Для сравнения с аппаратурой класса H100, используемой в других местах, характеристики емкости, пропускной способности, производительности и мощности MI300X дают межвендорную базовую линию («AMD Instinct MI300X»).
| Допущение | Значение | Единица |
|---|---|---|
| Пиковая пропускная способность тензорных ядер FP16 (MI300X) | 1 307 | TFLOP/s |
| Пропускная способность HBM (MI300X) | 5,3 | ТБ/с |
| Емкость HBM (MI300X) | 192 | ГБ |
| TDP (MI300X) | 750 | Вт |
AMD Instinct MI300X: пиковые характеристики из документации продукта AMD Instinct MI300X (AMD, 2023). Большая емкость HBM (192 ГБ) и пропускная способность делают его частой межвендорной базой для нагрузок, ограниченных памятью.
Google TPU v4 и v6e
При сравнении экономики обучения семейств ускорителей показатели TPU предлагают альтернативу на основе специализированной интегральной схемы (ASIC) («Google TPU v4 и v6e (Trillium)»).
| Допущение | Значение | Единица |
|---|---|---|
| Пиковая пропускная способность BF16 (TPU v4) | 275 | TFLOP/s |
| Пропускная способность памяти (TPU v4) | 1 200 | ГБ/с |
| Пиковая пропускная способность BF16 (TPU v6e) | 918 | TFLOP/s |
| Пропускная способность памяти (TPU v6e) | 1 638 | ГБ/с |
Google TPU v4 и v6e (Trillium): значения TPU v4 взяты из публикаций Google о TPU (Jouppi et al., 2023), а значения TPU v6e — из текущей спецификации Trillium на странице Google Cloud (Google Cloud, 2026).
Процессоры CPU, мобильные и периферийные
Примеры периферийного и мобильного ИИ опираются на иную базу производительности («Характеристики CPU, мобильных NPU и периферийных устройств»); она резко контрастирует с производительностью дата-центров и иллюстрирует, почему целевая среда развертывания определяет каждое проектное решение.
| Допущение | Значение | Единица |
|---|---|---|
| Пиковая пропускная способность FP32 (эталонный CPU) | 1 | TFLOP/s |
| Пропускная способность DRAM (эталонный сервер) | 50 | ГБ/с |
| Производительность NPU (iPhone 15 Pro, эталон) | 35 | TOPS |
| Пропускная способность памяти (iPhone 15 Pro) | 51,2 | ГБ/с |
| TDP (мобильное устройство, эталон) | 5 | Вт |
| Мощность (периферийный детектор объектов, эталон) | 2 | Вт |
| Емкость аккумулятора (телефон, эталон) | 15 | Втч |
Характеристики CPU, мобильных NPU и периферийных устройств: иллюстративные опорные точки для периферийных и мобильных примеров (не паспортные пики одной модели). Контраст с ускорителями дата-центров показывает, почему целевая среда развертывания определяет каждое проектное решение.
Характеристики моделей
Это справочные допущения о моделях, лежащие в основе примеров стоимости обучения, объема памяти и нагрузки вывода: число параметров, бюджеты FLOP на один вывод и опорные величины масштаба обучения из публикаций. Размеры опубликованных моделей следуют первоисточникам, отчетам о моделях и официальной документации (Devlin et al., 2019; Radford et al., 2019; Brown et al., 2020; Dubey et al., 2024; He et al., 2016; Sandler et al., 2018; Ultralytics, 2023). Бюджеты FLOP на вывод — производные значения книги: для BERT-Base использована длина последовательности 128, для ResNet-50 и MobileNetV2 — изображения 224 224, для YOLOv8-Nano — 640 640; для моделей зрения учитываются два FLOP на умножение с накоплением. Затраты FLOP на обучение GPT-3 следуют Brown et al. (2020); сочетание 25 дней и 1 024 A100 — редакционное. Число параметров GPT-4 и GPU-дни обучения — публичные оценки смеси экспертов (MoE) от сторонних аналитиков (Patel and Wong, 2023), поскольку технический отчет GPT-4 не раскрывает размер архитектуры. Когда глава оценивает время обучения уровня GPT-3, она использует «Справочные характеристики моделей».
| Допущение | Значение | Единица |
|---|---|---|
| FLOP вывода (BERT-Base) | 2,2e+10 | flop |
| Параметры (BERT-Base) | 1,1e+08 | param |
| Параметры (Llama 3 8B) | 8,03e+09 | param |
| Скрытая размерность (GPT-2) | 1 600 | - |
| Слои (GPT-2) | 48 | - |
| Параметры (GPT-2) | 1,5e+09 | param |
| Параметры (GPT-3) | 1,75e+11 | param |
| Длительность сценария (масштаб GPT-3) | 25 | дн. |
| Справочные FLOP обучения (GPT-3) | 3,14e+23 | flop |
| Параметры (GPT-4, публичная оценка MoE) | 1,76e+12 | param |
| Справочные GPU-дни обучения (GPT-4) | 2,5e+06 | GPU-дни |
| FLOP вывода (ResNet-50) | 8,2e+09 | flop |
| Параметры (ResNet-50) | 2,56e+07 | param |
| FLOP вывода (MobileNetV2) | 6e+08 | flop |
| Параметры (MobileNetV2) | 3,50487e+06 | param |
| FLOP вывода (YOLOv8-Nano) | 8,7e+09 | flop |
Справочные характеристики моделей: число параметров и бюджеты FLOP для разобранных примеров. Строки BERT, GPT-2, GPT-3, Llama, ResNet-50, MobileNetV2 и YOLOv8 опираются на первоисточники, отчеты о моделях или официальную документацию (Devlin et al., 2019; Radford et al., 2019; Brown et al., 2020; Dubey et al., 2024; He et al., 2016; Sandler et al., 2018; Ultralytics, 2023). Строки GPT-4 ссылаются на официальное семейство моделей (OpenAI et al., 2023) и на публичные оценки параметров MoE и GPU-дней (Patel and Wong, 2023), использованные в этом издании.
Соглашения о памяти обучения
Расчет памяти обучения предполагает модель хранения Adam в смешанной точности, которая используется в блоке «Расчет на салфетке» и в нескольких главах об обучении: веса BF16, градиенты BF16 и мастер-веса FP32 плюс буферы первого и второго моментов Adam (всего 16 байт на параметр). Это соглашение книги, а не измеренная константа аппаратуры. Путь данных BF16 следует установившейся практике смешанной точности BFLOAT16 (Kalamkar et al., 2019); схема мастер-весов FP32 следует более ранней работе с FP16 (Micikevicius et al., 2017; NVIDIA, 2017), а буферы первого и второго моментов Adam — Kingma and Ba (2015). «Соглашения о памяти обучения» перечисляет ширину байтов по компонентам; умножение байтов на параметр (Adam в смешанной точности) на число параметров дает объем состояния обучения без учета активаций.
| Допущение | Значение | Единица |
|---|---|---|
| Ширина весов/градиентов (BF16) | 2 | байт |
| Ширина мастер-весов (FP32) | 4 | байт |
| Мастер-веса + состояния Adam на параметр (FP32) | 12 | байт |
| Байт на параметр (Adam в смешанной точности) | 16 | байт |
Соглашения о памяти обучения: хранение на параметр для Adam в смешанной точности (2 + 2 + 12 = 16 байт до учета активаций). Соглашение книги для прикидочных расчетов; контекст обучения в смешанной точности см. в NVIDIA (2017).
Допущения об аппаратуре и моделях фиксируют, что и где выполняется; допущения об энергии определяют, жизнеспособен ли проект с точки зрения тепла и экономики на уровне операций и обращений к памяти.
Энергетические константы
Оценки Horowitz для арифметики 45 нм и 32-битного DRAM (Horowitz, 2014), вместе с иллюстративными опорами книги для доступа к регистрам и SRAM, вывода MobileNetV2 и передачи 5G, лежат в основе сравнений эффективности книги, но не независимы от техпроцесса. «Энергия на операцию и обращение» перечисляет иерархию энергии доступа от регистров до DRAM. Эта иерархия количественно объясняет, почему повторное использование данных доминирует при проектировании ядер.
| Допущение | Значение | Единица |
|---|---|---|
| Энергия обращения к регистру | 0,1 | пДж |
| Энергия обращения к SRAM L1 | 0,5 | пДж |
| Энергия обращения к SRAM L2 | 2 | пДж |
| Энергия обращения к DRAM (32 бита) | 640 | пДж |
| Энергия обращения к DRAM (на байт) | 160 | пДж/байт |
| Энергия умножения FP16 (45 нм) | 1,1 | пДж/умножение |
| Энергия умножения FP32 (45 нм) | 3,7 | пДж/умножение |
| Энергия умножения INT8 (45 нм) | 0,2 | пДж/умножение |
| Энергия вывода MobileNetV2 (эталон) | 0,1 | мДж |
| Энергия передачи 5G на МБ | 100 | мДж/МБ |
Энергия на операцию и обращение: оценки арифметики и DRAM на 32 бита взяты из модели Horowitz для 45 нм (Horowitz, 2014), строка DRAM на байт выведена из этой оценки. Строки регистров, SRAM, MobileNetV2 и 5G — иллюстративные опоры книги. Разрыв примерно в 6 400 раз между обращением к регистру 0,1 пДж и обращением к DRAM 640 пДж объясняет, почему повторное использование данных доминирует в оптимизации ядер ML.
Иерархия энергии точности и арифметики
Иерархия энергии арифметики в «Иерархии энергии точности и арифметики» сравнивает энергию на операцию ( в пДж/оп) для сложения и умножения в форматах с плавающей запятой, тензорных и целочисленных точностях на современных техпроцессах 7 нм, 5 нм и 3 нм.
| Точность/формат данных | Норма 7 нм ( пДж) | Норма 5 нм ( пДж) | Норма 3 нм ( пДж) | Отношение энергии к FP32 (3 нм) |
|---|---|---|---|---|
| FP64 (64-битное с плавающей запятой) | Сложение: 0,90/Умножение: 2,50 | Сложение: 0,58/Умножение: 1,62 | Сложение: 0,38/Умножение: 1,05 | 2,23 |
| FP32 (32-битное с плавающей запятой) | Сложение: 0,40/Умножение: 1,10 | Сложение: 0,26/Умножение: 0,72 | Сложение: 0,17/Умножение: 0,47 | 1,00 (эталон) |
| TF32 (19-битный TensorFloat) | Сложение: 0,28/Умножение: 0,65 | Сложение: 0,18/Умножение: 0,42 | Сложение: 0,12/Умножение: 0,27 | 0,57 |
| FP16 (16-битное IEEE с плавающей запятой) | Сложение: 0,20/Умножение: 0,45 | Сложение: 0,13/Умножение: 0,29 | Сложение: 0,08/Умножение: 0,19 | 0,40 |
| BF16 (16-битное Bfloat16) | Сложение: 0,18/Умножение: 0,40 | Сложение: 0,12/Умножение: 0,26 | Сложение: 0,08/Умножение: 0,17 | 0,36 |
| FP8 (E4M3/E5M2) | Сложение: 0,09/Умножение: 0,20 | Сложение: 0,06/Умножение: 0,13 | Сложение: 0,04/Умножение: 0,08 | 0,17 |
| INT32 (32-битное целое) | Сложение: 0,10/Умножение: 0,80 | Сложение: 0,06/Умножение: 0,52 | Сложение: 0,04/Умножение: 0,34 | 0,72 |
| INT8 (8-битное целое) | Сложение: 0,03/Умножение: 0,20 | Сложение: 0,02/Умножение: 0,13 | Сложение: 0,013/Умножение: 0,085 | 0,18 |
| INT4 (4-битное целое) | Сложение: 0,010/Умножение: 0,060 | Сложение: 0,006/Умножение: 0,039 | Сложение: 0,004/Умножение: 0,025 | 0,053 |
Иерархия энергии точности и арифметики: энергия на операцию ( в пДж/оп) для сложения и умножения в форматах данных (FP64, FP32, TF32, FP16, BF16, FP8 E4M3/E5M2, INT32, INT8, INT4) и полупроводниковых техпроцессах (7 нм, 5 нм, 3 нм). Масштабирование энергии иллюстрирует квадратичную зависимость умножителя и линейную зависимость сумматора от разрядности (Horowitz, 2014; Dally et al., 2021).
Энергетические затраты действуют на уровне чипа, но реальные ML-системы также перемещают данные по межсоединениям — между ускорителями, между стойками и по глобальным сетям. Следующий раздел перечисляет допущения о пропускной способности, которые используются, когда главы оценивают накладные расходы на коммуникацию.
Межсоединения и сетевая пропускная способность
Эти допущения о пропускной способности применяются, когда главы рассуждают о синхронизации градиентов, пузырях конвейера, вводе-выводе контрольных точек или задержке между центрами обработки данных. Скорости NVLink и PCIe следуют документации продуктов ускорителей (NVIDIA Corporation, 2017; NVIDIA Corporation, 2020; Choquette, 2023); спецификация архитектуры InfiniBand задает семейство протоколов (InfiniBand Trade Association, 2000), а текущие высокоскоростные семейства продуктов и дорожные карты Ethernet задают примеры современных скоростей линков (NVIDIA, 2026; Ethernet Alliance, 2025); нижний предел скорости света в волокне — тождество физики. «Пропускная способность межсоединений и сети» перечисляет скорости NVLink, InfiniBand, PCIe, NVMe и Ethernet вместе со скоростью распространения света в волокне.
| Допущение | Значение | Единица |
|---|---|---|
| Пропускная способность NVLink (V100) | 300 | ГБ/с |
| Пропускная способность NVLink (A100) | 600 | ГБ/с |
| Пропускная способность NVLink (H100) | 900 | ГБ/с |
| Скорость линка InfiniBand HDR | 200 | Гбит/с |
| Скорость линка InfiniBand NDR | 400 | Гбит/с |
| Скорость линка InfiniBand XDR | 800 | Гбит/с |
| Скорость PCIe Gen4 x16 | 32 | ГБ/с |
| Скорость PCIe Gen5 x16 | 64 | ГБ/с |
| Последовательное чтение NVMe | 7 | ГБ/с |
| Скорость линка 10 GbE | 10 | Гбит/с |
| Скорость линка 100 GbE | 100 | Гбит/с |
| Скорость света в волокне | 200 000 | км/с |
Пропускная способность межсоединений и сети: пропускные способности семейств линков взяты из паспортов вендоров, спецификации архитектуры InfiniBand и текущей документации продуктов и дорожных карт (InfiniBand Trade Association, 2000; NVIDIA, 2026; Ethernet Alliance, 2025). Скорости NVLink — суммарные двунаправленные; остальные скорости линков номинальны на направление. Скорость света в волокне задает нижний предел задержки между центрами обработки данных.
Паспорт физических характеристик межсоединений и сетевых фабрик
Паспорт физических характеристик в «Паспорте физических характеристик межсоединений и сетевых фабрик» детализирует пропускную способность, задержку, кадрирование, поддержку прямого доступа к памяти (DMA) и энергию на бит для шин хоста, межсоединений ускорителей, сетевых фабрик и интерфейсов с когерентностью кэшей.
| Шина/стандарт межсоединения | Пропускная способность по направлению и суммарная | Задержка | Кодирование/кадрирование | Поддержка DMA/GPUDirect | Энергия () |
|---|---|---|---|---|---|
| PCIe Gen3 (x16) | 15,75 ГБ/с по направлению/31,5 ГБ/с суммарно | 400–500 нс | 128b/130b NRZ | PCIe P2P, GPUDirect RDMA | 14,0 пДж/бит |
| PCIe Gen4 (x16) | 31,50 ГБ/с по направлению/63,0 ГБ/с суммарно | 250–400 нс | 128b/130b NRZ | PCIe P2P, GPUDirect RDMA | 10,0 пДж/бит |
| PCIe Gen5 (x16) | 63,00 ГБ/с по направлению/126,0 ГБ/с суммарно | 150–250 нс | 128b/130b NRZ | PCIe P2P, GPUDirect RDMA, CXL 1.1/2.0 | 8,0 пДж/бит |
| PCIe Gen6 (x16) | 126,00 ГБ/с по направлению/252,0 ГБ/с суммарно | 100–150 нс | PAM4 (256B Flit) | PCIe P2P, GPUDirect RDMA, CXL 3.0/3.1 | 6,0 пДж/бит |
| PCIe Gen7 (x16) | 252,00 ГБ/с по направлению/504,0 ГБ/с суммарно | <100 нс | PAM4 (512B Flit) | PCIe P2P, GPUDirect RDMA, CXL 3.1+ | 4,5 пДж/бит |
| NVLink 1 (P100) | 20 ГБ/с по направлению/40 ГБ/с суммарно (линк) | 200–300 нс | NRZ (20 Гбит/с) | GPUDirect P2P/RDMA | 10,0 пДж/бит |
| NVLink 2 (V100) | 25 ГБ/с по направлению/50 ГБ/с суммарно (линк) | 150–200 нс | NRZ (25,78 Гбит/с) | GPUDirect P2P/RDMA | 8,0 пДж/бит |
| NVLink 3 (A100) | 25 ГБ/с по направлению/50 ГБ/с суммарно (линк) | 100–150 нс | NRZ (50 Гбит/с) | GPUDirect P2P/RDMA | 6,5 пДж/бит |
| NVLink 4 (H100) | 25 ГБ/с по направлению/50 ГБ/с суммарно (линк) | 80–100 нс | PAM4 (100 Гбит/с) | GPUDirect P2P, агрегация SHARP | 4,5 пДж/бит |
| NVLink 5 (B200) | 50 ГБ/с по направлению/100 ГБ/с суммарно (линк) | 60–80 нс | PAM4 (200 Гбит/с) | GPUDirect P2P, разгрузка сети NVLink | 3,5 пДж/бит |
| NVSwitch 1 (Volta) | 900 ГБ/с суммарно на чип | ~100 нс | NRZ | Аппаратная маршрутизация P2P crossbar | 8,5 пДж/бит |
| NVSwitch 2 (Ampere) | 2,4 ТБ/с суммарно на чип | ~90 нс | NRZ | Аппаратный P2P crossbar, SHARP v2 | 6,5 пДж/бит |
| NVSwitch 3 (Hopper) | 3,2 ТБ/с суммарно на чип | ~70 нс | PAM4 | Вычисления в сети SHARP v3 | 4,5 пДж/бит |
| NVSwitch 4 (Blackwell) | 14,4 ТБ/с суммарно на чип | ~50 нс | PAM4 | SHARP v4, движок редукции FP8 | 3,2 пДж/бит |
| InfiniBand EDR | 100 Гбит/с (12,5 ГБ/с по направлению) | ~0,50 мкс (500 нс) | 64b/66b NRZ | GPUDirect RDMA (Verbs) | 15,0 пДж/бит |
| InfiniBand HDR | 200 Гбит/с (25,0 ГБ/с по направлению) | ~0,60 мкс (600 нс) | 64b/66b PAM4/NRZ | GPUDirect RDMA, SHARP v2 | 10,0 пДж/бит |
| InfiniBand NDR | 400 Гбит/с (50,0 ГБ/с по направлению) | ~0,50 мкс (500 нс) | 256b/257b PAM4 | GPUDirect RDMA, SHARP v3 | 7,0 пДж/бит |
| InfiniBand XDR | 800 Гбит/с (100,0 ГБ/с по направлению) | ~0,40 мкс (400 нс) | PAM4 (флит 200G/линия) | GPUDirect RDMA, SHARP v4 | 5,0 пДж/бит |
| RoCE v2 Ethernet | 100–800 Гбит/с (12,5–100 ГБ/с по направлению) | 1,0–2,5 мкс | NRZ/PAM4 (802.3) | GPUDirect RDMA (RoCEv2 UDP/IP) | 8,0–12,0 пДж/бит |
| CXL 1.1 | 63 ГБ/с по направлению/126 ГБ/с суммарно (x16) | ~200 нс | 128b/130b NRZ | cxl.io, cxl.cache, cxl.mem | 8,0 пДж/бит |
| CXL 2.0 | 63 ГБ/с по направлению/126 ГБ/с суммарно (x16) | ~180 нс | 128b/130b NRZ | Пулинг памяти SLD/MLD | 7,5 пДж/бит |
| CXL 3.0 | 126 ГБ/с по направлению/252 ГБ/с суммарно (x16) | ~120 нс | 256B Flit PAM4 | P2P-пулинг памяти и коммутатор фабрики | 5,5 пДж/бит |
| CXL 3.1 | 126 ГБ/с по направлению/252 ГБ/с суммарно (x16) | ~110 нс | 256B Flit PAM4 | Глобальная интегрированная память, TEE | 5,0 пДж/бит |
Паспорт физических характеристик межсоединений и сетевых фабрик: полный паспорт для шин хоста, межсоединений GPU, коммутаторов, сетевых фабрик и когерентных интерфейсов (PCIe Gen3–Gen7, NVLink 1–5, NVSwitch 1–4, InfiniBand EDR–XDR, RoCE v2, CXL 1.1–3.1). Столбцы перечисляют пропускную способность по направлению и суммарную, задержку PHY/линка, линейное кодирование и кадрирование, возможности DMA и GPUDirect, а также энергетическую стоимость физического уровня ( в пДж/бит).
Экономические константы
Эти ценовые допущения лежат в основе оценок совокупной стоимости владения (TCO) и стоимости электроэнергии в прикидочных расчетах «Экономических допущений». Это иллюстративные ставки уровня гиперскейлеров для анализа отношений (по духу похожие на примеры учета углерода в Patterson et al., 2021), а не котировки для конкретного региона или контракта. Когда абсолютная цена доминирует, локальные значения должны заменить эти опорные величины.
| Допущение | Значение | Единица |
|---|---|---|
| Облачная цена электроэнергии | 0,12 | доллар/кВт·ч |
| Облачная цена исходящего трафика за ГБ | 0,09 | доллар/ГБ |
Экономические допущения: иллюстративные облачные ставки электроэнергии и исходящего трафика для прикидочных расчетов TCO (порядок величины 2024–2025 годов). Структуры затрат собственной инфраструктуры отличаются; относительные величины помогают ориентироваться в проектных компромиссах.
Экономические константы задают цену единицы вычислений и передачи данных, но без представления о задействованных объемах они мало что значат. Производственные ML-системы обрабатывают миллионы — миллиарды запросов в день; эти числа достаточно велики, чтобы их трудно было осмыслить без конкретных опорных точек.
Опорные величины масштаба
Эти допущения о масштабе в «Опорных величинах производственного масштаба и скорости данных» задают ответ на вопрос «насколько велико „велико“?» для примеров планирования емкости. Они дают иллюстративные базовые величины порядка для объемов электронной почты и поиска, потоков сенсоров беспилотных автомобилей и стандартных видеоформатов 1080p и 4K. Это ориентиры величины, а не аудированная статистика для конкретного года.
| Допущение | Значение | Единица |
|---|---|---|
| Писем Gmail в день | 1,21e+11 | - |
| Поисковых запросов Google в день | 8,5e+09 | - |
| Скорость данных сенсоров Waymo (низкая) | 1 | ТБ/ч |
| Скорость данных сенсоров Waymo (высокая) | 19 | ТБ/ч |
| Ширина кадра 1080p | 1 920 | - |
| Высота кадра 1080p | 1 080 | - |
| Ширина кадра 4K | 3 840 | - |
| Высота кадра 4K | 2 160 | - |
| Байт на пиксель RGB | 3 | байт |
| Частота кадров видео (стандарт) | 30 | Гц |
Опорные величины производственного масштаба и скорости данных: иллюстративные опорные точки нагрузки и скорости сенсоров, а также стандартные параметры видео 1080p и UHD 4K.
Допущения выше используют общие соглашения о единицах: десятичные приставки данных, раздельные величины FLOP и FLOP/s, а также псевдонимы, определенные в следующем разделе.
Соглашения о единицах
«Соглашения о единицах» фиксирует соглашения, которые используются в каждом количественном примере книги. Каждая строка задает множитель в 1 псевдоним базовая единица. Приставки данных — десятичные SI ( байт, а не 1024). Двоичные приставки IEC для хранения появляются в нескольких обсуждениях конкретных накопителей, но здесь опущены, потому что большинство оценок масштаба парка в книге использует десятичные КБ/ГБ/ТБ. Величины пропускной способности (FLOP/s, ГБ/с) сочетают эти псевдонимы со временем; складывать несовместимые размерности (байты с FLOP/s) — категориальная ошибка прикидочного расчета, а не пересчет единиц.
Емкость аппаратуры — одно намеренное исключение. Производители маркируют память десятичными символами, но поставляют двоичные величины. Ускоритель, продаваемый как устройство 80 ГБ, предоставляет байт, а микроконтроллер с 512 КБ SRAM — байт. Книга сохраняет и число производителя, и его обозначение, так что емкость, напечатанная как 80 ГБ, — это паспортная цифра, а не десятичный пересчет. Все остальные величины данных, включая объем памяти моделей, размеры активаций и объемы передачи, используют указанные десятичные приставки. Там, где разобранный пример вычитает вычисленный объем памяти из емкости устройства, оба слагаемых приводятся в десятичных единицах, чтобы арифметика на странице была той, которую читатель может воспроизвести.
| Псевдоним | Множитель | Базовая единица |
|---|---|---|
байт | 1 | байт |
КБ | 1 000 | байт |
МБ | 1e+06 | байт |
ГБ | 1e+09 | байт |
ТБ | 1e+12 | байт |
ПБ | 1e+15 | байт |
flop | 1 | flop |
GFLOPs | 1e+09 | flop |
TFLOPs | 1e+12 | flop |
ZFLOPs | 1e+21 | flop |
param | 1 | param |
Mparam | 1e+06 | param |
Gbps | 1e+09 | бит/с |
NS | секунда | |
US | секунда | |
MS | секунда | |
second | 1 | секунда |
hour | 3 600 | секунда |
day | 86 400 | секунда |
joule | 1 | джоуль |
watt | 1 | ватт |
meter | 1 | метр |
Соглашения о единицах: десятичные псевдонимы SI и масштабные множители (соглашение книги для прикидочных расчетов). Формы пропускной способности, такие как FLOP/s и ГБ/с, делят работу или данные на время по тем же соглашениям.
Для каждого допущения также ведется запись о происхождении, которая позволяет читателю проследить число до первоисточника.
Происхождение допущений
«Каталог происхождения допущений» группирует количественные входные данные приложения по классам доказательств и указывает основные источники для каждой группы. Паспортные характеристики производителей и стандарты задают опубликованные пределы, рецензируемые измерения дают эмпирические опоры, а явно помеченные редакционные сценарии дают иллюстративные значения там, где нет устойчивой универсальной константы. Это различие позволяет читателю оценить доказательную силу входного данного, обновить чувствительные во времени значения и воспроизвести оценку с подходящей локальной заменой.
| Раздел приложения | Тип источника | Основные источники |
|---|---|---|
| Характеристики ускорителей | Паспортные пики производителей; редакционные опоры для CPU/мобильных устройств; сводная матрица («Сводная матрица характеристик ускорителей») | NVIDIA Corporation (2017); NVIDIA Corporation (2018); NVIDIA Corporation (2020); Choquette et al. (2021); Choquette (2023); NVIDIA Corporation (2024); AMD (2023); Jouppi et al. (2023); Google Cloud (2026); для строк CPU/мобильных устройств — редакционные |
| Характеристики моделей | Опубликованные статьи, отчеты о моделях и официальная документация; редакционный сценарий GPT-3; размер GPT-4 из публичного анализа | Devlin et al. (2019); Radford et al. (2019); Brown et al. (2020); Dubey et al. (2024); He et al. (2016); Sandler et al. (2018); Ultralytics (2023); OpenAI et al. (2023); Patel and Wong (2023) |
| Соглашения о памяти обучения | Соглашение книги (схема Adam в смешанной точности) | Kingma and Ba (2015); Kalamkar et al. (2019); Micikevicius et al. (2017); NVIDIA (2017) |
| Энергетические константы | Опубликованные оценки арифметики/DRAM для 45 нм; масштабирование техпроцессов в синтезе VLSI; иерархия энергии точности («Иерархия энергии точности и арифметики») | Horowitz (2014); Dally et al. (2021) для арифметики/DRAM; редакционные для строк регистров/SRAM, MobileNetV2 и 5G |
| Пропускная способность межсоединений | Паспорта вендоров; стандарт InfiniBand; стандарты PCIe/NVLink/CXL; паспорт физических характеристик («Паспорт физических характеристик межсоединений и сетевых фабрик») | NVIDIA Corporation (2017); NVIDIA Corporation (2020); Choquette (2023); InfiniBand Trade Association (2000); NVIDIA (2026); Ethernet Alliance (2025) |
| Экономические допущения | Иллюстративные облачные и коммунальные ставки | Patterson et al. (2021) (методологический контекст) |
| Опорные величины масштаба | Иллюстративные ставки нагрузки; стандартные видеоконвенции | Редакционные для ставок нагрузки; стандартные определения форматов для видео |
| Соглашения о единицах | Десятичный SI; обозначения книги | Редакционные |
Каталог происхождения допущений: краткая карта от раздела приложения к классу источника и библиографии.
Итоги
Это приложение — справочный каталог количественных входных данных, которые используются в книге. Оно собирает характеристики ускорителей и моделей, соглашения о памяти обучения, энергетические константы, пропускные способности межсоединений, экономические и масштабные опоры, соглашения о единицах и происхождение. Значения взяты из паспортных пиков, опубликованных измерений, стандартов и редакционных сценариев, поэтому они имеют разную доказательную силу и устаревают с разной скоростью.
Используйте эти таблицы как стартовые входные данные, а не как универсальные константы. Для каждой оценки фиксируйте строку таблицы, соглашение о единицах и происхождение; заменяйте чувствительные во времени пики, цены и ставки локальными значениями; отличайте физический потолок от измеренной рабочей точки и от допущения сценария; и сообщайте, какие допущения доминируют в результате. Так прикидочные расчеты остаются воспроизводимыми и ясно видно, какой входной параметр определяет вывод.
Глоссарий
В глоссарии собраны ключевые термины, которые используются в книге. Термины расположены по алфавиту, чтобы ими можно было пользоваться вместе с главами. Английский вариант термина дан в скобках курсивом.
3
3DMark (3DMark): набор тестов производительности графики, который оценивает возможности трехмерной визуализации в реальном времени: пропускную способность треугольников, скорость заполнения текстур и современные функции вроде трассировки лучей и DLSS.
A
A/B-тестирование (A/B testing): контролируемый эксперимент, в котором пользователи случайно делятся на группы, чтобы сравнить две версии системы или модели по измеримым различиям в показателях.
абляционное исследование (ablation study): эксперимент, в котором по очереди удаляется, отключается или изолируется один компонент, чтобы измерить его вклад в поведение модели или системы.
прореживание на основе активаций (activation-based pruning): метод прореживания, который оценивает средние значения активаций нейронов или фильтров на наборе данных и удаляет те, что стабильно дают низкие активации и мало несут информации для решения сети.
контрольные точки активаций (activation checkpointing): прием экономии памяти при обратном распространении: часть активаций не хранится, а пересчитывается по мере необходимости вместо хранения всех промежуточных результатов.
функция активации (activation function): математическая функция, применяемая к взвешенной сумме входов нейрона; вносит нелинейность и позволяет сети выучивать сложные закономерности, а не только линейные комбинации.
память активаций (activation memory): память, в которой хранятся промежуточные выходы слоев, нужные для вычисления градиентов при обучении; растет с размером батча, длиной последовательности и глубиной модели.
активное обучение (active learning): подход, который выбирает для разметки человеком самые информативные примеры на основе неопределенности модели, сокращая объем размеченных данных, нужных для обучения.
оптимизатор Adam (Adam optimization): алгоритм оптимизации с адаптивной скоростью обучения, который сочетает импульс и RMSprop и поддерживает экспоненциально затухающие средние градиентов и квадратов градиентов для каждого параметра.
AdamW (AdamW): вариант Adam, который отделяет затухание весов от адаптивного обновления градиентом; улучшает регуляризацию и сохраняет адаптивные моменты оптимизатора.
триада ИИ (AI Triad): рамка, которая описывает системы ML как три взаимозависимых компонента: данные, направляющие поведение; алгоритмы, выучивающие закономерности; и вычислительную инфраструктуру, которая обеспечивает обучение и вывод. Ограничение любого компонента сдерживает возможности остальных.
алертинг (alerting): автоматические уведомления, которые сообщают командам, когда метрики выходят за заданные пороги или в производственной ML-системе обнаружена аномалия.
AlexNet (AlexNet): знаковая сверточная архитектура, которая выиграла конкурс ImageNet в 2012 году, снизив долю ошибок с 26 до 16 процентов, и запустила ренессанс глубокого обучения.
AllReduce (AllReduce): коллективная операция распределенных вычислений, в которой каждый процесс вносит свои данные, а все процессы получают объединенный результат; обычно используется для агрегации градиентов при распределенном обучении.
коммуникация «все со всеми» (all-to-all communication): паттерн обмена, в котором каждое устройство обменивается данными с каждым другим; характерен для шардированных таблиц вложений и нагрузок с экспертным параллелизмом.
AlphaFold (AlphaFold): знаковая система ИИ, разработанная DeepMind, которая предсказывает трехмерную структуру многих белков по последовательности аминокислот; достигла прорывной точности, не решая каждую задачу сворачивания, и показала, как крупномасштабные ML-системы ускоряют научные открытия. Ее предсказания по-прежнему требуют интерпретации уверенности и, во многих случаях, экспериментальной проверки.
закон Амдала (Amdahl’s Law): верхняя граница ускорения: общее улучшение ограничено долей нагрузки или конвейера, которая остается последовательной или неоптимизированной.
компиляция AOT (AOT compilation): компиляция заранее (ahead-of-time), которая превращает модель, граф или программу в оптимизированный исполняемый код до развертывания или запуска; обменивает гибкость на меньшие накладные расходы времени исполнения.
Apache Kafka (Apache Kafka): распределенная платформа потоковой передачи данных, которая обрабатывает потоки в реальном времени через систему публикации и подписки; часто используется для построения ML-конвейеров данных с высокой пропускной способностью и отказоустойчивостью.
Apache Spark (Apache Spark): открытая распределенная вычислительная платформа для обработки больших данных на кластерах компьютеров; благодаря вычислениям в памяти изменила подход к ETL-операциям.
специализированная интегральная схема (ASIC) (application-specific integrated circuit (ASIC)): чип, спроектированный под конкретную вычислительную задачу; дает более высокую производительность и энергоэффективность, чем универсальные процессоры, ценой утраты универсальной гибкости. Примеры: TPU Google, Cerebras Wafer-Scale Engine и ASIC для майнинга биткоина.
архитектурная эффективность (architectural efficiency): направление оптимизации моделей, которое связано с тем, как эффективно выполняются вычисления при обучении и выводе: через использование разреженности, факторизацию крупных компонентов и динамическую подстройку вычислений под сложность входа.
арифметическая интенсивность (arithmetic intensity): отношение операций с плавающей запятой к байтам, прочитанным из памяти (FLOP/байт); используется в анализе Roofline, чтобы определить, ограничена ли нагрузка памятью или вычислениями, и задать приоритеты оптимизации.
искусственный общий интеллект (artificial general intelligence): системы ИИ, которые должны сравняться с человеческим уровнем в широком круге когнитивных задач; общепринятого порога возможностей для этого понятия нет, и оно не подразумевает какой-либо конкретной архитектуры.
искусственный интеллект (artificial intelligence): область информатики, которая занимается созданием систем, способных выполнять задачи, обычно требующие человеческого интеллекта: восприятие, рассуждение, обучение и принятие решений.
искусственная нейронная сеть (artificial neural network): вычислительная модель, вдохновленная биологическими нейронными сетями; состоит из связанных узлов (нейронов), организованных в слои, и выучивает закономерности из данных через настраиваемые веса и смещения.
искусственные нейроны (artificial neurons): базовые вычислительные единицы нейронных сетей, которые подобны биологическим нейронам: принимают несколько входов, применяют веса и смещения и выдают выходной сигнал через функцию активации.
механизм внимания (attention mechanism): компонент нейронной сети, который вычисляет взвешенные связи между элементами на основе их содержания и позволяет динамически фокусироваться на релевантных частях входа, а не опираться на фиксированные архитектурные связи.
AUC (AUC): площадь под ROC-кривой; метрика классификации, не зависящая от порога, которая сравнивает доли истинно положительных и ложно положительных срабатываний при разных порогах решения.
журнал аудита (audit trail): журнал, в который только добавляются записи о том, кто и когда получал доступ к данным, моделям или артефактам системы или изменял их; поддерживает подотчетность, отладку и соответствие требованиям.
лента автограда (autograd tape): временная запись операций и сохраненных значений, которая строится во время прямого прохода, чтобы автоматическое дифференцирование в обратном режиме могло вычислить градиенты на обратном проходе.
автоматическое дифференцирование (automatic differentiation): вычислительный прием, который автоматически находит точные производные функций, реализованных как программы, систематически применяя правило цепочки на уровне элементарных операций; необходим для обучения нейронных сетей градиентными методами.
автоматическое смешанное вычисление точности (automatic mixed precision): прием обучения, который автоматически управляет использованием разных численных точностей (FP16, FP32), чтобы экономить память и ускорять вычисления при сохранении точности модели.
AutoML (AutoML): автоматизированное машинное обучение, которое автоматизирует решения о проектировании модели, включая поиск архитектур, оптимизацию гиперпараметров и отбор признаков, чтобы сократить ручной труд.
автомасштабирование (autoscaling): динамическая подстройка вычислительных ресурсов под спрос: при пиках нагрузки ресурсы наращиваются, при спаде сокращаются, чтобы оптимизировать стоимость и производительность.
B
обратное распространение (backpropagation): алгоритм, который вычисляет градиенты функции потерь по весам сети, распространяя сигналы ошибки назад через слои; позволяет систематически обновлять веса при обучении.
обратный проход (backward pass): фаза обучения, в которой градиенты распространяются от функции потерь назад через сеть, чтобы вычислить градиенты параметров; парная к прямому проходу.
пропускная способность (bandwidth): максимальная скорость передачи данных по каналу связи или интерфейсу памяти, обычно измеряется в байтах в секунду; критична для оптимизации перемещения данных в ИИ-ускорителях.
пакетный вывод (batch inference): выполнение вывода над большим набором данных сразу, обычно как плановое задание, в отличие от вывода в реальном времени по отдельным запросам. Пакетный вывод повышает пропускную способность, распределяя накладные расходы по множеству входов.
пакетная загрузка (batch ingestion): паттерн обработки данных, при котором данные собираются и обрабатываются группами по расписанию; подходит, когда обработка в реальном времени не критична.
пакетная нормализация (batch normalization): прием, который нормализует входы каждого слоя так, чтобы их среднее было нулевым, а дисперсия единичной; стабилизирует обучение, часто позволяет брать большую скорость обучения и быстрее сходиться; затем применяет обучаемый масштаб и сдвиг, сохраняя выразительную мощность.
пакетная обработка (batch processing): обработка нескольких образцов данных одновременно, чтобы распределить стоимость вычислений и обращений к памяти и повысить общую пропускную способность при обучении и выводе нейронных сетей.
размер батча (batch size): число обучающих примеров, обрабатываемых одновременно за одну итерацию обучения; влияет и на вычислительную эффективность, и на качество оценки градиента.
оптимизация пропускной способности батча (batch throughput optimization): приемы максимизации числа образцов, обрабатываемых за единицу времени при одновременной обработке нескольких входов, с использованием параллелизма и эффектов батчинга.
батчевые операции (batched operations): матричные вычисления, которые обрабатывают сразу несколько входов и превращают операции «матрица–вектор» в более эффективные «матрица–матрица», повышая загрузку аппаратуры.
инженерия бенчмарков (benchmark engineering): систематическое проектирование и разработка систем оценки производительности, включая создание обвязки тестов, выбор метрик и методику интерпретации результатов.
обвязка бенчмарка (benchmark harness): инфраструктурный компонент, который управляет выполнением тестов, подает входные данные и собирает измерения в контролируемых условиях, обеспечивая воспроизводимость оценок.
бенчмаркинг (benchmarking): систематическая оценка вычислительной производительности, эффективности алгоритмов и качества данных в системах машинного обучения, чтобы оптимизировать производительность на разных нагрузках и обеспечить воспроизводимость.
BERT (BERT): двунаправленная модель представлений из трансформеров (Bidirectional Encoder Representations from Transformers), языковая модель на основе трансформера, которую представила Google в 2018 году; изменила обработку естественного языка за счет предобучения маскированным языковым моделированием.
BF16 (BF16): 16-битный формат с плавающей запятой, разработанный в Google Brain; сохраняет тот же динамический диапазон, что и FP32, но с меньшей точностью, что делает его удобным для обучения глубоких сетей.
смещение (bias): обучаемый параметр, который добавляется к взвешенной сумме в каждом нейроне и сдвигает функцию активации; позволяет нейрону срабатывать даже при нулевых входах и дает сети дополнительную гибкость для подгонки сложных закономерностей.
бинаризация (binarization): экстремальный прием квантования, который сводит веса, активации или то и другое к двоичным значениям (обычно −1 и +1); дает максимальное сжатие, но часто требует особых процедур обучения и аппаратной поддержки.
биологический нейрон (biological neuron): клетка нервной системы, которая принимает, обрабатывает и передает информацию с помощью электрических и химических сигналов; вдохновила создание искусственных нейронных сетей.
горький урок (bitter lesson): наблюдение Ричарда Саттона 2019 года: общие методы, опирающиеся на вычисления, неизменно превосходят подходы, которые кодируют человеческую экспертизу; отсюда следует, что системная инженерия, обеспечивающая вычислительный масштаб, стоит в центре прогресса ИИ.
черный ящик (black box): система, у которой наблюдаемы входы и выходы, но внутреннее устройство недоступно или непрозрачно. Такая непрозрачность особенно проблематична, когда система принимает значимые решения и не объясняет их.
BLAS (BLAS): спецификация низкоуровневых подпрограмм линейной алгебры (Basic Linear Algebra Subprograms) для типовых операций: сложение векторов, умножение на скаляр, скалярные произведения и матричные операции; служит вычислительной основой современных ML-фреймворков.
блочно-разреженная матрица (block sparse matrix): разреженная матрица, ненулевые значения которой собраны в плотные блоки, а не разбросаны отдельными элементами; сохраняет структуру, которую аппаратные ядра могут эффективно использовать.
сине-зеленое развертывание (blue-green deployment): стратегия развертывания с двумя производственными средами: трафик переключается на проверенную новую версию, а старая остается доступной для отката.
ограничивающий прямоугольник (bounding box): прямоугольная аннотация, которая задает положение объектов на изображении, обводя каждый интересующий объект; часто используется в наборах данных для обучения компьютерному зрению.
хрупкость (brittleness): склонность систем, основанных на правилах, полностью отказывать на входах, которые выходят за пределы запрограммированных сценариев, даже если эти входы очень похожи на те, для которых система создавалась.
C
кэширование (caching): прием хранения часто запрашиваемых данных в быстрой памяти, чтобы сократить задержку доступа и повысить производительность ML-конвейеров.
аллокатор с кэшированием (caching allocator): менеджер памяти фреймворка, который переиспользует блоки памяти устройства вместо того, чтобы для каждого тензора обращаться к аппаратному аллокатору; сокращает задержку выделения и фрагментацию.
калибровка (calibration): этап квантования после обучения, на котором анализируется репрезентативный набор данных, чтобы подобрать оптимальные параметры квантования (коэффициенты масштаба и нулевые точки), минимизирующие потерю точности при переходе с высокой точности на низкую.
канареечное развертывание (canary deployment): стратегия, при которой новая версия модели получает небольшую долю производственного трафика для проверки поведения перед полным выкатом; позволяет рано обнаружить проблемы с минимальным влиянием на пользователей.
теорема CAP (CAP theorem): принцип распределенных систем: при разделении сети хранилище данных не может одновременно гарантировать линеаризуемую согласованность и доступность для каждого запроса.
углеродный след (carbon footprint): суммарные выбросы парниковых газов, обычно выраженные в эквиваленте CO₂, которые прямо и косвенно производятся при обучении и эксплуатации ML-системы.
углеродоемкость (carbon intensity): выбросы на единицу энергии, обычно в килограммах CO₂-эквивалента на кВт·ч; используется, чтобы перевести энергопотребление ML в углеродное воздействие.
Cerebras Wafer-Scale Engine (Cerebras Wafer-Scale Engine): в поколении CS-2 — процессор на целой пластине, содержащий 2,6 трлн транзисторов и 850 000 ядер; создан, чтобы устранить узкие места межустройственной коммуникации при крупномасштабном обучении.
правило цепочки (chain rule): правило математического анализа, которое позволяет вычислять производные сложных функций; основа обратного распространения.
поканальное квантование (channelwise quantization): подход к гранулярности квантования, при котором каждый канал слоя имеет собственный набор параметров квантования; дает более точное представление, чем квантование по слою, сохраняя эффективность аппаратуры.
конвейеры CI/CD (CI/CD pipelines): автоматизированные рабочие процессы непрерывной интеграции и непрерывной поставки, которые упрощают разработку моделей, объединяя тестирование, валидацию и развертывание.
паттерн автоматического выключателя (circuit breaker pattern): паттерн устойчивости, который после повторных сбоев прекращает или перенаправляет вызовы нездорового сервиса, чтобы предотвратить каскадные отказы и включить резервное поведение.
классификационные метки (classification labels): простые категориальные аннотации, которые присваивают примерам данных конкретные метки или категории; это самая базовая форма разметки для обучения с учителем.
CloudSuite (CloudSuite): набор бенчмарков, разработанный в EPFL, который охватывает нагрузки дата-центров: веб-поиск, аналитику данных и потоковое медиа; измеряет сквозную производительность по сети, хранилищу и вычислениям.
производительность холодного старта (cold-start performance): время, за которое система переходит из простоя в активное исполнение; особенно важно в бессерверных средах, где модели загружаются по требованию.
коллаборативная фильтрация (collaborative filtering): прием рекомендательных систем, который предсказывает предпочтения пользователя, находя закономерности во взаимодействиях многих пользователей; опирается на коллективное поведение, а не только на свойства объектов.
коммуникационный налог (communication tax): потеря производительности в распределенных системах из-за задержки и затрат пропускной способности на синхронизацию состояния между узлами.
составные ИИ-системы (compound AI systems): архитектуры ИИ, которые объединяют несколько специализированных моделей и компонентов, а не полагаются на одну монолитную модель; дают модульность, специализацию и лучшую интерпретируемость.
сжатый разреженный строчный формат (CSR) (compressed sparse row (CSR)): эффективный по памяти формат хранения разреженных матриц; использует три массива (значения, индексы столбцов и указатели строк), чтобы хранить только ненулевые элементы, снижая память с (для матрицы ) до , где — число ненулевых элементов.
вычислительный граф (computational graph): ориентированный граф, который представляет последовательность операций в вычислении нейронной сети; позволяет автоматически дифференцировать.
инженерия вычислительных систем (computer engineering): инженерная дисциплина, возникшая в конце 1960-х для решения задач растущей сложности интеграции аппаратуры и программного обеспечения; объединяет знания электротехники и информатики для проектирования сложных вычислительных систем.
дрейф концепции (concept drift): явление, когда — статистическая связь между входами и целевыми значениями — меняется со временем; отличается от дрейфа данных в . Это может, но не обязано ухудшить работу фиксированной модели; для выявления обычно нужны метки исходов, потому что одного дрейфа входов недостаточно, чтобы установить изменение условного распределения.
условные вычисления (conditional computation): динамический прием оптимизации, при котором разные части нейронной сети выборочно активируются в зависимости от характеристик входа; снижает вычислительную нагрузку, пропуская ненужные вычисления для конкретных входов.
консенсусная разметка (consensus labeling): подход к контролю качества, при котором для одной точки данных собирается несколько аннотаций, чтобы выявить спорные случаи и повысить надежность меток через согласие между аннотаторами.
контейнеризация (containerization): упаковка приложений и их зависимостей в переносимые изолированные контейнеры (например, с помощью Docker), чтобы обеспечить одинаковое исполнение в разных средах.
непрерывный батчинг (continuous batching): прием обслуживания больших языковых моделей, при котором запросы добавляются в батч вывода и удаляются из него между шагами генерации токенов по мере того, как последовательности начинаются и заканчиваются.
непрерывная интеграция (continuous integration): практика разработки, при которой изменения кода автоматически интегрируются, тестируются и проверяются несколько раз в день, чтобы рано обнаруживать проблемы.
свертка (convolution): математическая операция, которая скользит фильтром (ядром) по входным данным, извлекая признаки вроде краев, текстур или шаблонов. Свертка лежит в основе сверточных сетей и особенно эффективна для изображений и пространственных данных.
сверточная нейронная сеть (convolutional neural network): специализированная архитектура нейронной сети для данных, организованных в сетку, таких как изображения; использует сверточные слои, которые применяют фильтры для выявления локальных признаков.
coreset (coreset): небольшое подмножество набора данных, отобранное так, чтобы сохранить важные статистические или обучающие свойства полного набора при снижении стоимости обучения или оценки.
каскад исправлений (correction cascade): паттерн технического долга ML, при котором исправление одного компонента порождает новые сбои или потребность в переделке в другом месте, потому что зависимости по данным и моделям распространяются через систему.
сдвиг ковариат (covariate shift): сдвиг распределения, при котором распределения входных признаков меняются, а связь между признаками и метками остается стабильной.
CP-разложение (CP decomposition): разложение CANDECOMP/PARAFAC, которое представляет тензор как сумму компонент ранга один; используется для сжатия слоев нейронной сети за счет сокращения числа параметров при сохранении вычислительной функции.
проблема назначения кредита (credit assignment problem): задача определить, какие веса многослойной сети внесли вклад в ошибки предсказания.
CRISP-DM (CRISP-DM): межотраслевой стандартный процесс добычи данных (Cross-Industry Standard Process for Data Mining), структурированная методология, разработанная в 1996 году; задает шесть фаз для проектов с данными: понимание бизнеса, понимание данных, подготовка данных, моделирование, оценка и развертывание.
критический размер батча (critical batch size): размер батча, после которого увеличение батча дает убывающую выгоду для оптимизации и может ухудшить обобщение; ограничивает простое линейное масштабирование скорости обучения.
перекрестная энтропия (cross-entropy loss): функция потерь, которая часто используется в задачах классификации; измеряет расхождение предсказанного распределения вероятностей и истинных меток классов и дает сильные градиенты для эффективного обучения.
краудсорсинг (crowdsourcing): подход к сбору данных, который привлекает распределенных людей через интернет для задач разметки; позволяет масштабировать создание наборов данных через такие платформы, как Amazon Mechanical Turk.
cuBLAS (cuBLAS): библиотека NVIDIA с подпрограммами линейной алгебры CUDA (CUDA Basic Linear Algebra Subprograms), которая дает ускоренные на GPU реализации стандартных операций линейной алгебры; обеспечивает высокую производительность матричных вычислений на графических процессорах NVIDIA.
CUDA (CUDA (Compute Unified Device Architecture)): платформа параллельных вычислений и модель программирования NVIDIA, которая позволяет выполнять вычисления общего назначения на графических процессорах; дает ML-фреймворкам массовый параллелизм для ускорения операций с тензорами.
поток CUDA (CUDA stream): упорядоченная очередь работы GPU, которая используется для планирования ядер, передач памяти и событий синхронизации, чтобы независимые операции могли перекрываться.
D
таксономия D·A·M (D·A·M taxonomy): диагностическая рамка, которая анализирует узкие места ML-систем по трем взаимодействующим осям: данные (поток информации, ограниченный пропускной способностью), алгоритм (математическая логика, ограниченная общим числом операций) и машина (физическое исполнение, ограниченное пиковой производительностью).
Дартмутская конференция (Dartmouth conference): легендарный восьминедельный семинар 1956 года в Дартмутском колледже, на котором официально родился ИИ; организован Джоном Маккарти, Марвином Минским, Натаниелем Рочестером и Клодом Шенноном по их предложению 1955 года, в котором и появился термин «искусственный интеллект».
данные как исходный код (data as source code): принцип Software 2.0, согласно которому обучающие данные определяют поведение ML-системы, поэтому изменения набора данных действуют как изменения кода, меняющие поведение.
аугментация данных (data augmentation): процесс искусственного расширения обучающих наборов за счет создания модифицированных версий существующих данных с помощью преобразований вроде поворота, масштабирования или добавления шума.
каскады данных (data cascades): системные сбои, при которых проблемы с качеством данных накапливаются со временем и порождают последствия ниже по потоку: сбои моделей, дорогостоящую перестройку или прекращение проекта.
дата-центр (data center): объект, в котором размещаются вычислительные системы и связанные с ними компоненты, включая телекоммуникационное и системное хранилище; обычно содержит тысячи серверов для облачных вычислений.
ориентированный на данные подход (data-centric approach): парадигма машинного обучения, которая ставит во главу угла улучшение качества, разнообразия и курирования данных, а не только усовершенствование архитектуры модели, чтобы добиться лучшей производительности.
ориентированные на данные вычисления (data-centric computing): системы, оптимизированные для эффективного приема данных и итеративной подстройки параметров модели; задача программиста здесь — курировать данные.
контракты данных (data contracts): явные соглашения между производителями и потребителями данных, которые задают схему, ожидания по качеству и уровни сервиса, чтобы предотвратить поломки ниже по потоку.
курирование данных (data curation): процесс отбора, организации и поддержания высококачественных наборов данных: удаление нерелевантной информации, исправление ошибок и обеспечение соответствия данных стандартам конкретного ML-приложения.
долг данных (data debt): накопленные обязательства по качеству данных, документации, схеме, происхождению или свежести, которые со временем усугубляются и ухудшают поведение модели.
дрейф данных (data drift): явление, при котором распределение входов меняется со временем, хотя код не меняется; это может влиять на производительность модели, но не гарантирует ее ухудшения. Его можно отслеживать без меток, хотя для измерения влияния на качество метки нужны.
эхо данных (data echoing): прием входного конвейера обучения, который переиспользует батчи, часто со свежей аугментацией, когда подготовка данных медленнее, чем потребление ускорителем.
управление данными (data governance): система политик, процедур и технологий, которая обеспечивает безопасность, приватность, соответствие требованиям и этичное использование данных на всем протяжении ML-конвейера.
гравитация данных (data gravity): архитектурное притяжение, которое создают большие объемы данных, время передачи, ограничения пропускной способности и стоимость исходящего трафика; обычно притягивает вычисления к данным.
прием данных (data ingestion): сбор и импорт сырых данных из разных источников в систему, где их можно хранить, обрабатывать и готовить для ML-приложений.
озеро данных (data lake): хранилище, которое содержит структурированные, полуструктурированные и неструктурированные данные в исходном формате и использует подход «схема при чтении» для гибкого анализа.
озеро-хранилище (data lakehouse): архитектура хранения, которая сочетает гибкость озера данных с семантикой запросов в стиле хранилища, управлением схемами и транзакционными гарантиями.
происхождение данных (data lineage): документирование и отслеживание потока данных через преобразования и процессы; дает видимость происхождения данных и их изменений для соответствия требованиям и отладки.
локальность данных (data locality): принцип, согласно которому данные и вычисления должны находиться рядом, когда задержка передачи, пропускная способность или стоимость удаленной обработки доминируют.
параллелизм данных (data parallelism): стратегия распределенного обучения, которая делит набор данных между несколькими устройствами, а каждое устройство хранит полную копию модели; позволяет параллельно вычислять градиенты.
конвейер данных (data pipeline): инфраструктура и рабочие процессы, которые автоматизируют перемещение и преобразование данных от источников через стадии обработки до финального хранилища или потребителя.
качество данных (data quality): степень соответствия данных требованиям по точности, полноте, согласованности и своевременности; напрямую влияет на производительность ML-модели.
множитель качества данных (data quality multiplier): идея, что улучшение качества данных может усиливать выигрыш от изменений модели и системы, поскольку все последующие стадии зависят от данных.
валидация данных (data validation): систематическая проверка того, что собранные данные соответствуют стандартам качества, правильно оформлены и содержат корректную информацию, пригодную для обучения и оценки моделей.
версионирование данных (data versioning): практика отслеживания и управления разными версиями наборов данных во времени, по аналогии с версионированием кода; обеспечивает воспроизводимость и возможность вернуться к прежнему состоянию данных.
хранилище данных (data warehouse): централизованное хранилище, оптимизированное для аналитических запросов (OLAP), в котором интегрированные структурированные данные из нескольких источников хранятся в едином стандартизованном виде.
потоковая архитектура (dataflow architecture): специализированная архитектура вычислений, в которой выполнение операций определяется доступностью данных, а не счетчиком команд; позволяет высокопараллельно обрабатывать операции нейронных сетей.
трудности потоковых вычислений (dataflow challenges): технические сложности управления перемещением данных и зависимостями в аппаратных ускорителях, включая ограничения пропускной способности памяти и требования синхронизации.
datasheets для наборов данных (datasheets for datasets): документация к обучающим данным, которая фиксирует происхождение, методику сбора, демографический состав и известные ограничения, влияющие на поведение модели.
очередь мертвых сообщений (dead letter queue): отдельное хранилище для данных, которые не прошли обработку; позволяет позже проанализировать такие данные и при необходимости обработать их повторно, не блокируя основной конвейер.
дедупликация (deduplication): удаление точных, почти одинаковых или семантически избыточных примеров из набора данных, чтобы сократить объем хранения, вычисления на обучение и риск утечки данных.
глубокое обучение (deep learning): раздел машинного обучения, который использует многослойные искусственные нейронные сети для автоматического выучивания иерархических представлений из данных без явного проектирования признаков.
демографический паритет (demographic parity): критерий справедливости, согласно которому вероятность положительного предсказания не зависит от принадлежности к группе по защищаемым признакам.
масштабирование Деннарда (Dennard scaling): наблюдение, что при уменьшении транзисторов их плотность мощности оставалась постоянной, что позволяло повышать производительность при той же мощности. Его распад около 2005 года завершил эпоху бесплатного роста тактовой частоты.
плотный слой (dense layer): полносвязный слой нейронной сети, в котором каждый нейрон получает входы от всех нейронов предыдущего слоя; обеспечивает полную интеграцию информации между признаками.
ограничения развертывания (deployment constraints): эксплуатационные ограничения вроде аппаратных ресурсов, сетевого соединения, нормативных требований и требований интеграции, которые определяют, как ML-модели реализуются в производственной среде.
парадигма развертывания (deployment paradigm): отдельный подход к размещению и исполнению ML-моделей, которому присущи определенные ресурсные ограничения и эксплуатационные свойства, например облачное ML, периферийное ML, мобильное ML или TinyML.
раздельная по глубине свертка (depthwise separable convolution): факторизация свертки, при которой пространственная фильтрация выполняется независимо для каждого канала, а затем каналы смешиваются поточечной сверткой; сокращает вычисления.
DevOps (DevOps): практика разработки ПО, которая объединяет команды разработки и эксплуатации, чтобы сократить циклы разработки и выпускать качественное ПО за счет автоматизации и совместной работы.
Dhrystone (Dhrystone): целочисленный бенчмарк, представленный в 1984 году; измеряет целочисленные и строковые операции в DMIPS (Dhrystone MIPS) и дополняет тесты с плавающей запятой типичными конструкциями программирования.
диабетическая ретинопатия (diabetic retinopathy): осложнение диабета, которое повреждает кровеносные сосуды сетчатки; ведущая причина предотвратимой слепоты и ключевая область применения медицинских систем скрининга на основе ИИ.
дифференциальная приватность (differential privacy): математическая рамка для количественной оценки и ограничения утечки приватности при публикации статистики по набору данных; ограничивает, насколько может измениться распределение выхода при добавлении или удалении данных любого одного человека.
прямой доступ к памяти (DMA) (direct memory access (DMA)): механизм, который позволяет устройству передавать данные в память и из нее без копирования, управляемого CPU; дает совмещение операций и снижает накладные расходы хоста.
разнесенная оценка (disaggregated evaluation): практика разбивки метрик производительности модели по демографическим группам или другим факторам, чтобы выявить различия, скрытые в совокупных показателях.
налог на диспетчеризацию (dispatch tax): накладные расходы времени исполнения на запуск и оркестрацию множества мелких операций через фреймворк хоста вместо исполнения слитых или скомпилированных участков графа.
распределенные вычисления (distributed computing): подход, при котором данные одновременно обрабатываются на нескольких машинах или процессорах; позволяет масштабируемо работать с большими наборами данных через фреймворки вроде Apache Spark.
распределенный интеллект (distributed intelligence): размещение вычислительных возможностей на нескольких устройствах и в разных местах, а не в одной централизованной системе; обеспечивает локальную обработку и принятие решений.
распределенное обучение (distributed training): метод обучения моделей на нескольких машинах или устройствах, чтобы работать с наборами данных и моделями, которые превышают вычислительные или memory-возможности одного устройства.
сдвиг распределения (distribution shift): изменение статистических свойств данных между обучением и развертыванием или во времени в ходе эксплуатации. К типам относятся сдвиг ковариат (меняется распределение входов), сдвиг меток (меняется распределение выходов) и дрейф концепции (меняется связь между входами и выходами).
DLRM (DLRM): модель глубокого обучения для рекомендаций (Deep Learning Recommendation Model), архитектура Meta, которая сочетает категориальные эмбеддинги с нижним и верхним многослойными перцептронами (MLP) для работы с огромным масштабом и разреженностью рекомендательных нагрузок.
архитектура для конкретной предметной области (domain-specific architecture): аппаратные решения, настроенные под оптимизацию конкретных вычислительных нагрузок; обмениваются гибкость на производительность и энергоэффективность по сравнению с универсальными процессорами.
dropout (dropout): прием регуляризации, при котором во время обучения случайная доля входных элементов обнуляется, чтобы предотвратить переобучение и улучшить обобщение.
проблема умирающего ReLU (dying ReLU problem): режим отказа, при котором нейроны ReLU становятся постоянно неактивными и выдают ноль для всех входов; они перестают участвовать в обучении, когда взвешенные входы стабильно дают отрицательные преактивации.
динамический батчинг (dynamic batching): прием обслуживания, который кратко ждет, чтобы сгруппировать независимые запросы в батч; повышает пропускную способность ценой контролируемой задержки формирования батча.
динамический граф (dynamic graph): вычислительный граф, который строится и изменяется во время выполнения программы; позволяет гибко описывать архитектуры и упрощает отладку, но может ограничивать возможности оптимизации по сравнению со статическими графами.
динамическое прореживание (dynamic pruning): подход к прореживанию, который меняет, какие параметры или блоки неактивны, в зависимости от входных данных или динамики обучения, а не опирается только на фиксированное решение о прореживании.
динамическое квантование (dynamic quantization): хранение весов нейронной сети в пониженной точности с определением параметров квантования активаций во время выполнения; снижает использование памяти, а для ускорения требует поддержки низкоточных ядер.
динамическая память с произвольным доступом (DRAM) (dynamic random-access memory (DRAM)): энергозависимая память, которая хранит данные в конденсаторах и требует периодического обновления; обычно служит основной памятью компьютерных систем.
динамическое масштабирование напряжения и частоты (DVFS) (dynamic voltage and frequency scaling (DVFS)): метод управления питанием, который подстраивает напряжение и тактовую частоту процессора под нагрузку, чтобы экономить энергию при сохранении производительности.
E
жадное исполнение (eager execution): режим исполнения, при котором операции вычисляются сразу при вызове в коде; дает интуитивную отладку и удобную разработку, но может упускать возможности оптимизации, доступные при исполнении по графу.
архитектуры с ранним выходом (early exit architectures): конструкции нейронных сетей с несколькими головами предсказания на разной глубине; позволяют выходить из сети раньше, когда предсказание достаточно уверенное, и снижают среднюю стоимость вычислений на один вывод.
периферийные вычисления (edge computing): парадигма распределенных вычислений, которая приближает вычисления и хранение данных к источникам данных, сокращая задержку и использование пропускной способности.
периферийное развертывание (edge deployment): стратегия развертывания, при которой ML-модели работают локально на устройствах на периферии сети, а не на централизованных облачных серверах; сокращает задержку и позволяет работать без постоянного интернет-соединения.
граница эффективности (efficiency frontier): оптимальная кривая компромисса между точностью и вычислительной стоимостью (задержкой, энергией или памятью), на которой не существует модели, одновременно более точной и более эффективной.
EfficientNet (EfficientNet): семейство архитектур нейронных сетей, найденных поиском архитектур; достигает лучшего баланса точности и эффективности за счет составного масштабирования глубины, ширины и разрешения входа.
EL2N (EL2N (Error L2-Norm)): метод оценки примеров, который ранжирует их по ошибке раннего предсказания, часто с помощью прокси-модели, чтобы отбирать информативные пограничные случаи.
ELIZA (ELIZA): один из первых чат-ботов, созданный Джозефом Вайценбаумом в MIT в 1966 году; имитировал человеческий разговор через сопоставление с образцами и подстановки. Примечателен тем, что люди начинали эмоционально привязываться к этой простой программе.
встраиваемые системы (embedded systems): вычислительные системы с выделенными функциями внутри более крупных механических или электрических систем; обычно созданы для конкретных задач с ограничениями вычислений реального времени.
шардирование эмбеддингов (embedding sharding): разбиение больших таблиц эмбеддингов между устройствами или узлами, чтобы они помещались в суммарную память; добавляет коммуникацию для сбора эмбеддингов в каждом батче.
таблица эмбеддингов (embedding table): таблица поиска, которая сопоставляет дискретные идентификаторы или токены плотным векторам; часто занимает большую часть памяти в рекомендательных моделях и при больших словарях.
возникающие поведения (emergent behaviors): неожиданные системные закономерности или свойства, которые возникают из взаимодействия отдельных компонентов и часто проявляются только при работе системы в масштабе или в реальных условиях.
кодировщик–декодер (encoder-decoder): архитектурный паттерн, в котором кодировщик преобразует вход в промежуточное представление, а декодер генерирует выход из него; часто используется в задачах «последовательность в последовательность».
сквозные бенчмарки (end-to-end benchmarks): методика всесторонней оценки, которая измеряет весь конвейер ИИ-системы: обработку данных, исполнение модели, постобработку и инфраструктурные компоненты.
энергоэффективность (energy efficiency): мера вычислительной работы на единицу потребленной энергии, обычно выражается в операциях на джоуль; критична для устройств на батарее и для центров обработки данных.
энергия на вывод (energy per inference): полная энергия, потребленная для получения одного предсказания модели, включая исполнение модели и соответствующие накладные расходы системы.
эпоха (epoch): один полный проход по всему обучающему набору данных во время обучения нейронной сети; состоит из нескольких батчевых итераций в зависимости от размера набора и батча.
равенство возможностей (equal opportunity): критерий справедливости, который требует равной доли истинно положительных результатов для разных демографических групп.
равенство шансов (equalized odds): критерий справедливости, который требует равенства и доли истинно положительных, и доли ложно положительных результатов для разных демографических групп.
ожидаемая калибровочная ошибка (ECE) (expected calibration error (ECE)): метрика, которая измеряет разрыв между предсказанной уверенностью и наблюдаемой точностью по корзинам уверенности; используется для оценки калибровки вероятностей.
отслеживание экспериментов (experiment tracking): систематическая фиксация и управление ML-экспериментами, включая гиперпараметры, версии моделей, обучающие данные и метрики производительности, чтобы обеспечить сравнение и воспроизводимость.
экспертные системы (expert systems): системы ИИ, которые появились в середине 1960-х и фиксировали знания human-экспертов в узких областях; примером служит MYCIN для диагностики инфекций крови. Они отражают переход от общего ИИ к прикладным решениям для конкретных областей.
извлечение, загрузка, преобразование (ELT) (extract, load, transform (ELT)): парадигма обработки данных, при которой сырые данные сначала загружаются в целевую систему, а преобразования применяются позже; дает гибкость для меняющихся аналитических задач.
извлечение, преобразование, загрузка (ETL) (extract, transform, load (ETL)): традиционная парадигма обработки данных, в которой данные преобразуются до загрузки в хранилище данных, поэтому на выходе получаются готовые к запросам отформатированные данные.
F
отмывание справедливости (fairness laundering): режим отказа, при котором удаление явных защищаемых признаков делает систему внешне соответствующей требованиям, а коррелирующие прокси-переменные продолжают воспроизводить дискриминационные результаты.
доля ложноположительных (FPR) (false positive rate (FPR)): доля фактически отрицательных случаев, ошибочно отнесенных к положительным; вычисляется как число ложноположительных срабатываний, деленное на сумму ложноположительных и истинно отрицательных.
FarmBeats (FarmBeats): проект Microsoft Research, который применяет машинное обучение и технологии интернета вещей (IoT) в сельском хозяйстве; с помощью периферийных вычислений собирает данные в реальном времени о состоянии почвы и здоровье посевов и показывает распределенные системы ИИ в сложных реальных условиях.
конструирование признаков (feature engineering): процесс вручную проектировать и извлекать релевантные признаки из сырых данных, чтобы улучшить производительность модели; в системах глубокого обучения во многом автоматизирован.
карта признаков (feature map): выход сверточного слоя, который представляет отклик выученных фильтров в разных пространственных положениях входа и фиксирует обнаруженные признаки в разных местах.
хранилище признаков (feature store): специализированная система хранения данных, которая предоставляет стандартизованные, переиспользуемые признаки для ML и позволяет делить их между моделями и командами.
федеративное обучение (federated learning): подход к машинному обучению, при котором алгоритмы обучаются на распределенных периферийных устройствах или серверах с локальными данными, не обмениваясь самими данными.
петля обратной связи (feedback loop): циклический процесс, при котором выходы влияют на будущие входы. В ML это включает как полезные циклы (выход модели помогает улучшать систему), так и вредные (предсказания модели влияют на ее собственные будущие обучающие данные и могут со временем усиливать исходные смещения).
нейронная сеть прямого распространения (feedforward network): архитектура нейронной сети, в которой информация течет в одном направлении от входного к выходному слою без циклов; основа многих моделей глубокого обучения.
программируемая логическая матрица (FPGA) (field-programmable gate array (FPGA)): реконфигурируемая интегральная схема, которую можно запрограммировать после производства, чтобы реализовать специализированные цифровые схемы и вычисления; дает гибкость между универсальными процессорами и ASIC.
тонкая настройка (fine-tuning): адаптация предобученной модели к целевой задаче или области через продолжение обучения на данных конкретной задачи.
Five-Pillar Framework (Five-Pillar Framework): организационная структура инженерии ML-систем из пяти взаимосвязанных дисциплин: инженерия данных, системы обучения, инфраструктура развертывания, эксплуатация и мониторинг, этика и управление.
FlashAttention (FlashAttention): алгоритм внимания с учетом ввода-вывода, который разбивает вычисления на тайлы и не материализует полную матрицу внимания в памяти с высокой пропускной способностью; снижает трафик памяти и позволяет работать с более длинными последовательностями.
блок операций с плавающей запятой (FPU) (floating-point unit (FPU)): специализированный компонент процессора, который выполняет арифметику с числами с плавающей запятой с высокой точностью и эффективностью.
FLOP/s (FLOP/s): операции с плавающей запятой в секунду; мера вычислительной пропускной способности, которая показывает, сколько операций с плавающей запятой система способна выполнить за секунду.
события забывания (forgetting events): случаи, когда модель, которая правильно классифицировала пример, позднее в обучении начинает ошибаться; отмечают трудные или информативные образцы.
прямой проход (forward pass): вычисление предсказаний нейронной сети: входные данные последовательно проходят через слои, и на каждом этапе применяются веса, смещения и функции активации, чтобы получить выход. Также называется прямым распространением.
фундаментальная модель (foundation model): крупномасштабная модель машинного обучения, обученная на широких данных, которую можно адаптировать к большому кругу последующих задач и использовать как основу для специализированных приложений.
четырехопорная рамка (four pillars framework): рамка инженерии данных, которая организует задачи по четырем направлениям: качество, надежность, масштабируемость и управление; служит для управления жизненным циклом данных.
FP16 (FP16): 16-битное представление чисел с плавающей запятой, которое снижает использование памяти и ускоряет вычисления на современных ускорителях, сохраняя приемлемую точность для многих ML-задач.
FP32 (FP32): 32-битное представление чисел с плавающей запятой, которое обеспечивает стандартную точность математических вычислений, но требует больше памяти и вычислительных ресурсов, чем форматы с меньшей точностью.
FP32 в INT8 (FP32 to INT8): распространенное преобразование квантования, которое переводит 32-битные веса и активации с плавающей запятой в 8-битные целые; дает примерно четырехкратное сокращение памяти при приемлемой точности для многих моделей.
FP8 (FP8): семейство 8-битных форматов с плавающей запятой, которое используется на новых ускорителях для высокопроизводительного обучения и вывода; требует аккуратного масштабирования из-за ограниченной точности и диапазона.
декомпозиция фреймворка (framework decomposition): систематическое разбиение нейросетевых фреймворков на компоненты, которые можно сопоставить с аппаратурой, что позволяет эффективно распределять операции между вычислительными элементами.
G
GEMM (GEMM): операции обобщенного матричного умножения, которые следуют шаблону ; это базовое вычислительное ядро, лежащее в основе большинства операций нейронных сетей, включая полносвязные и сверточные слои.
GEMV (GEMV): операции умножения матрицы на вектор, которые вычисляют произведение матрицы и вектора; часто используются в вычислениях нейронных сетей и требуют тщательной оптимизации шаблонов доступа к памяти.
обобщение (generalization): способность модели машинного обучения хорошо работать на невиденных данных, отличающихся от обучающей выборки; часто улучшается за счет разнообразных и качественных обучающих данных.
разрыв обобщения (generalization gap): разница между качеством модели на обучающих данных и на отложенной выборке. Большой разрыв может указывать на переобучение под обучающие данные.
генеративный ИИ (generative AI): категория систем искусственного интеллекта, способных создавать новый контент (текст, изображения, аудио или видео) на основе закономерностей, выученных из обучающих данных.
закон Гудхарта (Goodhart’s Law): наблюдение, что когда мера становится целью оптимизации, она может перестать отражать исходную цель.
GPT-2 (GPT-2): авторегрессионная языковая модель на 1,5 млрд параметров, выпущенная OpenAI в 2019 году; служит основной маячной моделью для анализа ограничений пропускной способности памяти при выводе трансформеров.
плавная деградация (graceful degradation): принцип проектирования систем, при котором сервисы продолжают работать с ограниченными возможностями при частичных сбоях или недоступности данных.
накопление градиентов (gradient accumulation): прием, который имитирует большие батчи, накапливая градиенты нескольких меньших батчей перед обновлением параметров модели; позволяет обучать при ограниченной памяти.
прореживание на основе градиентов (gradient-based pruning): метод прореживания, который использует информацию о градиентах для ранжирования параметров, нейронов или фильтров как кандидатов на удаление.
отсечение градиентов (gradient clipping): прием оптимизации, который смягчает взрыв градиентов, ограничивая их величину при обратном распространении; обычно масштабирует градиенты, когда их норма превышает порог.
сжатие градиентов (gradient compression): прием распределенного обучения, который снижает накладные расходы коммуникации за счет сжатия информации о градиентах, которой обмениваются вычислительные узлы.
градиентный спуск (gradient descent): алгоритм оптимизации, который итеративно подстраивает параметры нейронной сети в направлении уменьшения функции потерь; градиенты задают направление и величину шагов.
синхронизация градиентов (gradient synchronization): процесс в распределенном обучении, при котором локально вычисленные градиенты агрегируются между устройствами, чтобы все они обновляли параметры согласованно.
GraNd (Gradient Normed) (GraNd (Gradient Normed)): оценка для отбора данных, основанная на норме градиента примера на раннем этапе обучения; выделяет образцы с более сильным обучающим сигналом.
разрыв графа (graph break): точка, в которой компилятор не может захватить часть программы и должен перейти к жадному исполнению, разрезая оптимизированные участки графа.
графический процессор (GPU) (graphics processing unit (GPU)): специализированный процессор, изначально созданный для отрисовки графики, который дает массовый параллелизм, необходимый для эффективных вычислений нейронных сетей при обучении и выводе.
зеленый ИИ (Green AI): направление в исследованиях и практике ИИ, которое ставит вычислительную эффективность и энергопотребление в ряд основных метрик наряду с традиционными показателями вроде точности.
Green500 (Green500): рейтинг самых мощных суперкомпьютеров мира по энергоэффективности, которая измеряется в FLOP/s на ватт, а не по сырой вычислительной производительности.
эталонная истина (ground truth): эталонная цель, которая считается правильной для обучения или оценки; часто получается из измерения или разметки и поэтому не обязательно совпадает с объективной реальностью.
GRU (GRU): управляемый рекуррентный блок (Gated Recurrent Unit), упрощенный вариант LSTM, который использует меньше вентилей, сохраняя способность улавливать долгосрочные зависимости в последовательных данных.
H
аппаратная абстракция (hardware abstraction): слой ML-фреймворков, который предоставляет единый интерфейс к разнородному вычислительному оборудованию (CPU, GPU, TPU, ускорители), скрывая оптимизации под конкретное устройство и управление памятью.
аппаратное ускорение (hardware acceleration): использование специализированного вычислительного оборудования для более быстрого и эффективного выполнения определенных операций по сравнению с программами на универсальных процессорах.
аппаратный ускоритель (hardware accelerator): специализированное вычислительное оборудование, предназначенное для эффективного выполнения определенных видов вычислений, например GPU для параллельной обработки или TPU для ML-нагрузок.
проектирование с учетом аппаратуры (hardware-aware design): практика проектирования архитектур нейронных сетей, оптимизированных под целевые аппаратные платформы; учитывает иерархию памяти, вычислительные блоки и паттерны перемещения данных для максимальной эффективности.
скрытый слой (hidden layer): промежуточный слой нейронной сети между входным и выходным слоями, который выучивает абстрактные представления, преобразуя данные обучаемыми весами и функциями активации.
скрытое состояние (hidden state): внутренняя память рекуррентных нейронных сетей, которая переносит информацию с предыдущих временных шагов и позволяет сохранять контекст по последовательным входам.
иерархическая обработка (hierarchical processing): многоуровневая архитектура системы, в которой данные и интеллект передаются между разными уровнями вычислительного стека: от датчиков к периферийным устройствам и облачным системам.
память с высокой пропускной способностью (HBM) (high-bandwidth memory (HBM)): передовая технология памяти, которая дает гораздо большую пропускную способность, чем обычная DRAM, за счет трехмерной укладки и широких интерфейсов; критична для ИИ-нагрузок с интенсивным обменом данными.
горизонтальное масштабирование (horizontal scaling): увеличение мощности системы за счет добавления машин или экземпляров, а не модернизации существующего оборудования; обеспечивает лучшую отказоустойчивость и распределение нагрузки.
гибридное машинное обучение (hybrid machine learning): объединение нескольких ML-парадигм, таких как облачное, периферийное, мобильное ML и TinyML, в единые распределенные системы, которые сочетают взаимодополняющие сильные стороны.
гибридный параллелизм (hybrid parallelism): подход распределенного обучения, который сочетает параллелизм данных и параллелизм модели, чтобы использовать преимущества обеих стратегий при обучении очень крупных моделей.
гиперпараметр (hyperparameter): настройка, которая управляет процессом обучения, но не выучивается из данных; например, скорость обучения, размер батча или выбор архитектуры сети.
гипермасштабный дата-центр (hyperscale data center): крупные объекты дата-центров с тысячами серверов и обширными площадями, спроектированные для эффективной поддержки массовых вычислительных нагрузок.
I
узкое место ввода-вывода (I/O bottleneck): ограничение производительности, при котором хранилище, декодирование, предобработка или передача данных не успевают подавать данные, чтобы загрузить вычислительные ресурсы.
идемпотентное преобразование (idempotent transformation): преобразование данных, которое при многократном применении дает тот же результат, что и при однократном; поддерживает безопасные повторы и повторную обработку.
im2col (im2col): прием приведения свертки к матричному виду, при котором фрагменты изображения разворачиваются в столбцы матрицы, и свертка исполняется как GEMM.
ImageNet (ImageNet): огромная база изображений, которая содержит более 14 млн размеченных изображений в более чем 20 000 категорий; ее создала команда под руководством Фэй-Фэй Ли и представила в 2009 году. Ежегодный конкурс на ее основе стал важным драйвером прорывов в компьютерном зрении.
императивное программирование (imperative programming): парадигма программирования, в которой программа задает последовательность команд, обновляющих состояние и управляющих потоком; она не сводится к тому, исполняются ли операции сразу или заранее формируются для отложенного исполнения.
индуктивное смещение (inductive bias): структурное допущение, заложенное в модель или архитектуру, которое ограничивает класс функций, эффективно выучиваемых ею; например, локальность в сверточных сетях.
вывод (inference): эксплуатационная фаза, в которой обученная нейронная сеть делает предсказания по новым данным при фиксированных параметрах, без обновления весов.
InfiniBand (InfiniBand): высокопроизводительная сетевая технология с низкой задержкой, которая часто используется в многоузловых кластерах ускорителей и для распределенного обучения.
отношение информации к вычислениям (ICR) (information-compute ratio (ICR)): метрика эффективности отбора данных, равная отношению прироста качества модели к вычислительной стоимости (FLOP), необходимой для его достижения. Максимизация ICR — основная цель стратегий отбора данных.
инфраструктура как код (infrastructure as code): практика управления вычислительной инфраструктурой и ее развертывания через машиночитаемые файлы конфигурации, а не вручную; позволяет вести контроль версий и автоматизировать процессы.
INT8 (INT8): 8-битное знаковое целое, которое используется для квантования весов, активаций или того и другого. Одно значение INT8 занимает четверть памяти, нужной для значения FP32; поддерживающая аппаратура может ускорять подходящие операции, а точность зависит от схемы квантования.
промежуточное представление (IR) (intermediate representation (IR)): внутреннее представление компилятора между кодом модели на уровне фронтенда и генерацией кода для аппаратного бэкенда; ML-фреймворки используют его для оптимизации и переносимости.
интернет вещей (internet of things): сеть физических объектов, оснащенных датчиками, программным обеспечением и другими технологиями, которые подключаются к интернету и обмениваются данными с другими устройствами и системами.
интерсекциональный анализ (intersectional analysis): оценка, которая учитывает сочетания демографических признаков (например, расу и пол одновременно), чтобы выявить сконцентрированный вред, незаметный при анализе по одному признаку.
IOPS (IOPS): операции ввода-вывода в секунду; метрика производительности хранилища, которая измеряет число операций чтения и записи, которые устройство выполняет за секунду; критична для нагрузок с произвольным доступом, например для загрузки обучающих данных.
железный закон систем ML (Iron Law of ML Systems): количественная рамка, которая раскладывает производительность ML-системы на три члена: данные (ограничены пропускной способностью), вычисления (ограничены FLOP/s) и задержка (ограничена накладными расходами). Формула: .
итеративное прореживание (iterative pruning): постепенная стратегия прореживания, которая удаляет параметры в несколько этапов с дообучением между ними; позволяет модели адаптироваться к сниженной емкости и обычно дает лучшую точность, чем прореживание за один шаг.
J
JAX (JAX): библиотека численных вычислений от Google Research, которая сочетает API NumPy с функциональными преобразованиями, включая автоматическое дифференцирование, компиляцию «точно в срок» и автоматическую векторизацию; используется для высокопроизводительных исследований в машинном обучении.
JIT-компиляция (JIT compilation): компиляция «точно в срок» (Just-In-Time), которая анализирует и оптимизирует код во время выполнения; позволяет фреймворкам сочетать гибкость жадного исполнения с выигрышем от оптимизации графа, компилируя часто вызываемые функции.
K
k-анонимность (k-anonymity): метод защиты приватности, который гарантирует, что каждая запись в наборе данных неотличима как минимум от k−1 других записей за счет обобщения квазиидентификаторов.
ядро (kernel): небольшая матрица обучаемых весов в сверточных слоях, которая выявляет определенные признаки через операцию свертки; также называется фильтром. В программировании GPU этим термином обозначают функцию, которую запускает сетка потоков для параллельного исполнения.
слияние ядер (kernel fusion): прием оптимизации, который объединяет несколько вычислительных операций в одно ядро, чтобы сократить передачи памяти и повысить производительность на параллельных процессорах.
поиск ключевых слов (KWS) (keyword spotting (KWS)): технология, которая обнаруживает в аудиопотоке определенные слова-активаторы или фразы; обычно используется в устройствах с голосовым управлением при ограничениях по энергопотреблению и задержке.
дистилляция знаний (knowledge distillation): прием сжатия модели, при котором меньшая сеть-«ученик» учится повторять поведение большей сети-«учителя», обучаясь на мягких выходных вероятностях учителя, а не только на жестких метках.
критерий Колмогорова–Смирнова (K-S) (Kolmogorov-Smirnov test (K-S test)): непараметрический критерий, который измеряет максимальное расстояние между двумя кумулятивными распределениями; часто используется для сравнения распределений признаков при поиске дрейфа.
дивергенция Кульбака–Лейблера (KL) (Kullback-Leibler divergence (KL divergence)): асимметричная информационно-теоретическая мера того, насколько одно распределение вероятностей отличается от другого; используется в мониторинге и анализе дрейфа.
KV-кэш (KV cache): сохраненные тензоры ключей и значений предыдущих токенов трансформера, которые используются при авторегрессионном выводе, чтобы не пересчитывать историю внимания.
L
норма L0 (L0 norm): число ненулевых элементов вектора или тензора; используется при прореживании, чтобы выразить разреженность или целевой бюджет оставшихся весов.
дрейф качества меток (label quality drift): ухудшение надежности или согласованности меток со временем, даже когда базовое распределение входов остается стабильным.
сдвиг меток (label shift): сдвиг распределения, при котором меняются частоты меток, а закономерности признаков при заданных метках остаются стабильными.
LAPACK (LAPACK): библиотека линейной алгебры (Linear Algebra Package), которая расширяет BLAS операциями более высокого уровня: разложениями матриц, задачами на собственные значения и решением линейных систем; служит математической основой вычислений в машинном обучении.
задержка (latency): временная задержка между запросом или событием и соответствующим ответом или завершением; критична в приложениях реального времени, где нужен быстрый отклик.
ограничения задержки (latency constraints): требования реального времени, которые ограничивают максимально допустимую задержку вывода модели и определяют решения по оптимизации в сценариях развертывания, где время отклика критично.
нормализация слоя (layer normalization): прием нормализации, который нормализует входы по размерности признаков для каждого примера; часто используется в архитектурах трансформеров для стабилизации обучения.
послойное квантование (layerwise quantization): гранулярность квантования, при которой все параметры одного слоя используют одни и те же параметры квантования; дает вычислительную эффективность, но может ограничивать точность представления по сравнению с более мелкими подходами.
скорость обучения (learning rate): гиперпараметр, который задает размер шага обновления весов при градиентном спуске; сильно влияет на стабильность обучения и скорость сходимости.
расписание скорости обучения (learning rate scheduling): систематическая подстройка скорости обучения во время обучения с помощью стратегий вроде ступенчатого затухания, экспоненциального затухания или косинусного отжига для улучшения сходимости и итогового качества модели.
согласованность жизненного цикла (lifecycle coherence): принцип, по которому все этапы разработки ML должны соответствовать общим целям системы и сохранять согласованность в работе с данными, архитектуре модели и критериях оценки.
сбой линейного масштабирования (linear scaling failure): явление, когда увеличение вычислительных ресурсов (например, удвоение ускорителей) дает сублинейный прирост производительности из-за накладных расходов коммуникации и затрат на синхронизацию.
LINPACK (LINPACK): бенчмарк, разработанный в Аргоннской национальной лаборатории; измеряет производительность системы через решение плотных систем линейных уравнений и известен использованием в рейтинге суперкомпьютеров TOP500.
закон Литтла (Little’s Law): соотношение теории очередей, по которому средняя одновременность равна интенсивности прихода, умноженной на среднее время пребывания в системе; связывает пропускную способность, задержку и емкость.
Llama (Llama): большие языковые модели Meta AI (Large Language Model Meta AI), семейство открытых фундаментальных моделей, которое популяризовало эффективные архитектурные решения вроде RMSNorm и SwiGLU; служит современной опорой для эффективности крупных трансформеров.
балансировка нагрузки (load balancing): распределение входящих запросов между несколькими экземплярами серверов, чтобы предотвратить узкие места, улучшить время отклика и обеспечить высокую доступность.
локально-чувствительное хеширование (LSH) (locality-sensitive hashing (LSH)): семейство хеш-функций, которые с высокой вероятностью относят похожие объекты к одним и тем же корзинам; позволяет масштабируемо и приближенно искать похожие элементы.
логиты (logits): сырые, ненормированные оценки последнего слоя нейронной сети до применения функции активации (например, softmax), которая превращает их в вероятности.
функция потерь (loss function): математическая функция, которая измеряет, насколько выходы модели удовлетворяют целевой задаче обучения; задает целевую величину, которую минимизирует алгоритм обучения.
масштабирование потерь (loss scaling): прием обучения в смешанной точности, который умножает функцию потерь на большой коэффициент перед обратным распространением, чтобы предотвратить антипереполнение градиентов в форматах пониженной точности.
гипотеза лотерейного билета (Lottery Ticket Hypothesis): теория, согласно которой большие нейронные сети содержат разреженные подсети; при обучении с правильной инициализации в изоляции они могут дать точность, сравнимую с полной сетью, будучи значительно меньше.
низкоранговая факторизация (low-rank factorization): метод матричного разложения, который аппроксимирует большие матрицы весов произведением меньших матриц; сокращает число параметров и вычислений в слоях нейронной сети.
LSTM (LSTM): долгая краткосрочная память (Long Short-Term Memory), архитектура рекуррентной сети, созданная для работы с долгосрочными зависимостями; использует вентили, которые управляют потоком информации.
M
машинное обучение (machine learning): раздел искусственного интеллекта, который позволяет системам автоматически улучшать качество решения задач на основе опыта и данных, а не явного программирования.
фреймворк машинного обучения (machine learning framework): программная платформа, которая предоставляет инструменты и абстракции для проектирования, обучения и развертывания моделей, соединяя прикладной код с инфраструктурой через вычислительные графы, оптимизацию под аппаратуру и оркестрацию рабочих процессов. Примеры: TensorFlow, PyTorch и JAX.
жизненный цикл машинного обучения (machine learning lifecycle): структурированный итеративный процесс, который охватывает все этапы разработки, развертывания и сопровождения ML-систем: от постановки задачи до постоянного мониторинга и улучшения.
MLOps (machine learning operations (MLOps)): инженерная дисциплина и набор инструментов, которые направлены на операционализацию ML-моделей через автоматизацию, мониторинг и управление всем ML-конвейером от разработки до производства.
инженерия ML-систем (machine learning systems engineering): инженерная дисциплина, которая занимается созданием надежных, эффективных и масштабируемых систем ИИ на вычислительных платформах и охватывает весь жизненный цикл ИИ: от получения данных через развертывание и эксплуатацию, с вниманием к ресурсным ограничениям и оптимизации на уровне системы.
макробенчмарки (macro benchmarks): методика оценки, которая тестирует целые модели машинного обучения, чтобы понять, как архитектурные решения и взаимодействие компонентов влияют на поведение и производительность системы в целом.
прореживание по величине (magnitude-based pruning): наиболее распространенный метод прореживания, который удаляет параметры с наименьшими абсолютными значениями; опирается на допущение, что веса с меньшей величиной вносят меньший вклад в выход модели.
маскирование (masking): прием анонимизации, который изменяет или скрывает чувствительные значения так, чтобы их нельзя было напрямую связать с исходным субъектом данных.
атака на принадлежность (membership inference attack): атака на приватность, которая пытается определить, входила ли конкретная запись в обучающие данные модели.
пропускная способность памяти (memory bandwidth): скорость чтения или записи данных в память, измеряется в байтах в секунду; часто становится узким местом в нагрузках ML, интенсивных по памяти.
иерархия памяти (memory hierarchy): организация систем памяти с разной скоростью доступа и емкостью: от быстрых кэшей на кристалле до медленной внешней основной памяти.
стена памяти (memory wall): растущий разрыв производительности между скоростью процессора и пропускной способностью памяти, когда вычислительные возможности опережают скорость доставки данных процессору; становится главным узким местом для крупных ML-моделей.
метаданные (metadata): описательная информация о наборах данных, включая сведения о сборе данных, метриках качества, статусе валидации и другой контекстной информации, важной для управления данными.
микробатч (micro-batch): меньший фрагмент эффективного батча, который обрабатывается последовательно для накопления градиентов или конвейерного параллелизма, чтобы снизить пиковую память.
микробенчмарки (micro benchmarks): специализированные инструменты оценки, которые тестируют отдельные компоненты или конкретные операции в ML-системах, например тензорные операции или слои нейронной сети.
микроконтроллер (microcontroller): небольшой компьютер на одной интегральной схеме, который содержит ядро процессора, память и программируемую периферию ввода-вывода; обычно используется во встраиваемых системах.
MinHash (MinHash): метод скетчинга, который приближенно оценивает сходство множеств компактными сигнатурами; часто применяется для масштабируемого обнаружения почти дубликатов.
мини-батчевый градиентный спуск (mini-batch gradient descent): подход к обучению, который вычисляет градиенты и обновляет веса по небольшому подмножеству примеров одновременно, балансируя вычислительную эффективность и качество оценки градиента.
мини-батчевая обработка (mini-batch processing): оптимизационный подход, который вычисляет градиенты по небольшим батчам примеров; сочетает вычислительную эффективность пакетной обработки с ограничениями памяти стохастических методов.
вычисления в смешанной точности (mixed-precision computing): прием, который использует разные численные точности на разных стадиях вычислений, например FP16 для матричных умножений и FP32 для накоплений.
обучение в смешанной точности (mixed-precision training): методика обучения, которая сочетает разные численные точности (обычно FP16 и FP32), чтобы экономить память и ускорять вычисления при сохранении устойчивости обучения.
ML-узел (ML node): одно производственное ML-приложение, рассматриваемое как эксплуатационная единица; включает конвейеры данных, вычисление признаков, обучение модели, инфраструктуру обслуживания и мониторинг.
ML-системы (ML systems): интегрированные вычислительные системы из трех основных компонентов: данных, которые направляют поведение алгоритма; алгоритмов обучения, которые извлекают закономерности из данных; и вычислительной инфраструктуры, которая обеспечивает обучение и вывод.
спектр ML-систем (ML systems spectrum): диапазон развертываний ML-систем от облачных систем с обильными ресурсами до крошечных встраиваемых устройств с жесткими ограничениями; каждому требуются свои стратегии оптимизации и компромиссы.
ML Test Score (ML Test Score): рубрика готовности ML-систем к производству, которая оценивает тесты данных, модели, инфраструктуры и мониторинга.
MLCommons (MLCommons): организация, которая разрабатывает и поддерживает отраслевые стандартные бенчмарки для систем машинного обучения, включая набор MLPerf для оценки обучения и вывода.
MLPerf (MLPerf): отраслевой стандартный набор бенчмарков, который предоставляет унифицированные тесты обучения и вывода на разных нагрузках глубокого обучения и позволяет честно сравнивать ML-системы.
сценарии исполнения MLPerf (MLPerf execution scenarios): стандартные сценарии трафика вывода MLPerf, которые моделируют последовательные, синхронизированные, серверные, пакетные и интерактивные нагрузки с разными требованиями к задержке и пропускной способности.
MLPerf Inference (MLPerf Inference): фреймворк бенчмарков, который оценивает производительность вывода ML в разных средах развертывания: от облачных дата-центров до мобильных устройств и встраиваемых систем.
MLPerf Mobile (MLPerf Mobile): специализированный бенчмарк, который распространяет оценку MLPerf на смартфоны и мобильные устройства и измеряет задержку и отклик при строгих ограничениях по питанию и памяти.
MLPerf Power (MLPerf Power): методика MLPerf для измерения мощности и энергоэффективности ML-нагрузок наряду с производительностью.
MLPerf Tiny (MLPerf Tiny): бенчмарк для встраиваемых систем ИИ со сверхнизким энергопотреблением, таких как устройства IoT, носимые устройства и микроконтроллеры с минимальными вычислительными возможностями.
MLPerf Training (MLPerf Training): стандартизованный бенчмарк, который оценивает производительность обучения, измеряя время до заданной точности, пропускную способность и загрузку ресурсов на разных аппаратных платформах.
мобильное машинное обучение (mobile machine learning): выполнение ML-моделей непосредственно на переносных устройствах с батарейным питанием, таких как смартфоны и планшеты; позволяет создавать персонализированные и отзывчивые приложения.
карточки моделей (model cards): стандартизованный формат документирования ML-моделей, который фиксирует сведения, важные для ответственного развертывания: назначение, факторы производительности и этические соображения.
ИИ, ориентированный на модель (model-centric AI): исследовательская парадигма, в которой набор данных считается фиксированным, а инженерные усилия направлены на оптимизацию архитектуры модели.
сжатие модели (model compression): приемы, которые уменьшают размер и вычислительные требования ML-моделей при стремлении сохранить точность; позволяют развертывать модели на устройствах с ограниченными ресурсами.
развертывание модели (model deployment): процесс интеграции обученной ML-модели в производственные системы, где она может делать предсказания по новым данным и приносить пользу конечным пользователям.
дрейф модели (model drift): ухудшение качества ML-модели со временем из-за изменения шаблонов данных, поведения пользователей или условий среды, которые отличаются от условий обучения.
оценка модели (model evaluation): систематическая проверка качества ML-модели с помощью метрик и методов валидации, чтобы определить, соответствует ли модель требованиям и готова ли к развертыванию.
утилизация FLOP модели (MFU) (model FLOPs utilization (MFU)): отношение FLOP/s модели, подразумеваемых наблюдаемой пропускной способностью, к теоретическому пиковому FLOP/s аппаратуры; показывает, насколько эффективно нагрузка использует доступные вычисления для расчета модели.
оптимизация модели (model optimization): систематическое улучшение ML-моделей для повышения их эффективности при сохранении качества; балансирует компромиссы между точностью, вычислительной стоимостью, памятью, задержкой и энергоэффективностью.
параллелизм модели (model parallelism): стратегия распределенного обучения, которая делит нейронную сеть между несколькими устройствами; каждое устройство вычисляет свою часть сети.
квантование модели (model quantization): снижение численной точности ML-моделей, обычно с FP32 до INT8, чтобы уменьшить размер модели и трафик памяти; ускорение достигается только при эффективных низкоточных ядрах.
реестр моделей (model registry): централизованное хранилище для хранения, версионирования и управления обученными моделями вместе с метаданными; облегчает управление моделями и их развертывание.
обслуживание моделей (model serving): инфраструктура и системы, которые предоставляют развернутые модели через API для обработки запросов на предсказания в масштабе с нужной задержкой и пропускной способностью.
обучение модели (model training): процесс использования алгоритмов машинного обучения, чтобы выучить закономерности из обучающих данных и подстраивать параметры модели для минимизации ошибок предсказания.
валидация модели (model validation): проверка ML-моделей на независимых наборах данных, чтобы оценить их способность к обобщению и надежную работу на невиденных данных.
версионирование моделей (model versioning): систематическое отслеживание и управление разными версиями ML-моделей, включая их параметры, обучающие данные и метрики производительности, чтобы обеспечить сравнение и возможность отката.
импульс (momentum): прием оптимизации, который накапливает вектор скорости между итерациями, помогая градиентному спуску преодолевать локальные минимумы и ускоряться в устойчивых направлениях градиента.
мониторинг (monitoring): непрерывное наблюдение и измерение производительности ML-системы, качества данных и эксплуатационных метрик в производстве, чтобы выявлять проблемы и запускать действия по обслуживанию.
многоголовое внимание (multi-head attention): механизм внимания с несколькими параллельными головами, каждая из которых фокусируется на разных аспектах входа и одновременно улавливает разные типы связей.
многослойный перцептрон (MLP) (multilayer perceptron (MLP)): нейронная сеть прямого распространения с одним или несколькими скрытыми слоями между входом и выходом; способна выучивать нелинейные отображения через плотные связи и функции активации.
умножение с накоплением (MAC) (multiply-accumulate (MAC)): операция умножения двух значений с накоплением результата в текущей сумме; доминирует в линейных слоях и в тракте данных ускорителей.
MYCIN (MYCIN): одна из первых крупных экспертных систем, которую с 1972 года разрабатывали в Стэнфорде для диагностики инфекций крови; отражает переход от общего ИИ к фиксации знаний человека-эксперта в конкретной области.
N
разреженность N:M (N:M sparsity): структурированный шаблон разреженности, при котором ровно N из каждых M значений ненулевые; дает аппаратуре более регулярные нулевые шаблоны для использования.
поиск нейронной архитектуры (neural architecture search): автоматизированный подход, который перебирает возможные комбинации слоев, связей и архитектурных гиперпараметров, чтобы найти архитектуры нейронных сетей с хорошими результатами при заданных целях и ограничениях.
нейронная сеть (neural network): вычислительная модель из связанных узлов, организованных в слои, которая выучивает отображение входов в выходы через настраиваемые веса связей.
нейронный процессор (NPU) (neural processing unit (NPU)): специализированные процессоры, созданные для ускорения операций нейронных сетей и вычислений машинного обучения; оптимизированы для параллельной обработки ИИ-нагрузок.
нейроморфные вычисления (neuromorphic computing): подход к вычислениям, который имитирует структуру и функции биологических нейронных сетей и потенциально дает более энергоэффективную обработку для приложений ИИ.
NoSQL (NoSQL): класс систем баз данных, рассчитанных на большие объемы неструктурированных или полуструктурированных данных с гибкими схемами; часто используется в приложениях для больших данных.
оптимизация численной точности (numerical precision optimization): измерение оптимизации модели, которое касается представления и обработки численных значений, включая приемы квантования, сопоставляющие значения высокой точности с представлениями меньшей разрядности.
NVLink (NVLink): высокоскоростное межсоединение GPU от NVIDIA для коммуникации внутри узла; полезно для синхронизации градиентов и передачи активаций при параллелизме модели.
O
наблюдаемость (observability): всестороннее направление мониторинга, которое дает понимание поведения системы через метрики, журналы и трассировки, позволяя понимать внутреннее состояние по внешним выходам.
память на кристалле (on-chip memory): быстрая память, встроенная непосредственно в кристалл процессора, включая кэши и скретчпад; обеспечивает высокую пропускную способность и низкую задержку доступа к данным.
обучение на устройстве (on-device learning): способность ML-моделей адаптироваться и обучаться непосредственно на периферийных устройствах без передачи данных на внешние серверы.
one-hot-кодирование (one-hot encoding): представление, при котором категориальная метка становится вектором с одной единицей и остальными нулями.
прореживание за один шаг (one-shot pruning): стратегия прореживания, при которой большая доля параметров удаляется за один шаг, обычно с последующим дообучением для восстановления точности; проста, но может требовать более агрессивного дообучения.
онлайн-аналитическая обработка (OLAP) (online analytical processing (OLAP)): подход к базам данных, оптимизированный для сложных аналитических запросов к большим наборам данных; обычно используется в хранилищах данных для бизнес-аналитики.
онлайн-вывод (online inference): обслуживание предсказаний в реальном времени, которое обрабатывает отдельные запросы с низкой задержкой; подходит для интерактивных приложений, требующих немедленного ответа.
онлайн-обработка транзакций (OLTP) (online transaction processing (OLTP)): подход к базам данных, оптимизированный для частых коротких транзакций и обработки в реальном времени; обычно применяется в операционных приложениях.
ONNX (ONNX): открытый формат обмена нейронными сетями (Open Neural Network Exchange), стандартизованное представление ML-моделей, которое обеспечивает совместимость между фреймворками: модель, обученная в одном фреймворке, может развертываться с помощью другого.
ONNX Runtime (ONNX Runtime): кроссплатформенный движок вывода, который оптимизирует модели с помощью слияния операторов и настройки ядер, чтобы ускорить вывод и снизить вычислительные накладные расходы.
оптимизатор (optimizer): алгоритм, который корректирует параметры модели во время обучения, чтобы минимизировать функцию потерь; типичные примеры: SGD (стохастический градиентный спуск), Adam и RMSprop, у каждого своя стратегия обновления параметров.
состояние оптимизатора (optimizer state): вспомогательные величины, которые оптимизатор хранит помимо параметров модели, например тензоры импульса и дисперсии Adam; для больших моделей часто доминируют в памяти обучения.
оркестрация (orchestration): координация и управление сложными рабочими процессами и распределенными вычислительными задачами; часто выполняется с помощью платформ вроде Kubernetes для управления контейнерами.
обнаружение выбросов (outlier detection): процесс выявления точек данных, которые заметно отклоняются от обычных закономерностей; такие точки могут быть ошибками, аномалиями или ценными редкими событиями.
переобучение (overfitting): явление, при котором модель так хорошо выучивает детали обучающих данных, что не обобщается на новые, невиденные примеры; обычно проявляется как высокая точность на обучении при слабых результатах на валидации.
P
паддинг (padding): прием в сверточных сетях, который добавляет нули или другие значения по краям входа, чтобы управлять пространственными размерами карт признаков на выходе.
PagedAttention (PagedAttention): прием управления памятью KV-кэша, который хранит контекст внимания страницами фиксированного размера, а не непрерывными блоками на каждый запрос, чтобы уменьшить фрагментацию.
смена парадигмы (paradigm shift): фундаментальное изменение научного подхода, например переход от символьного рассуждения к статистическому обучению в ИИ в 1990-х и от мелкого обучения к глубокому в 2010-х; требует от исследователей отказа от устоявшихся методов в пользу принципиально иных подходов.
параллелизм (parallelism): одновременное выполнение нескольких вычислительных задач или операций; основа достижения высокой производительности при обработке нейронных сетей.
параметр (parameter): обучаемый элемент нейронной сети, включая веса и смещения, который подстраивается во время обучения, чтобы минимизировать функцию потерь.
фронт Парето (Pareto frontier): множество конфигураций, в которых улучшение одного критерия требует ухудшения другого; используется для рассуждений о компромиссах между точностью, задержкой, памятью и энергией.
партиционирование (partitioning): прием баз данных, который делит большие наборы данных на меньшие управляемые сегменты по заданным критериям, чтобы ускорить запросы и повысить масштабируемость системы.
перцептрон (perceptron): базовый строительный блок нейронных сетей, который состоит из взвешенных входов, члена смещения и функции активации, дающей один выход.
аналитика производительности (performance insights): аналитические наблюдения, которые получают при мониторинге производственных ML-систем и которые показывают возможности улучшить точность модели, эффективность системы или пользовательский опыт.
производительность на данные (PPD) (performance-per-data (PPD)): метрика прироста точности на один обучающий образец; используется для оценки качества набора данных или стратегии отбора. Высокий PPD означает богатый информацией набор с низкой избыточностью.
закрепленная память (pinned memory): страничнозакрепленная память хоста, которая позволяет прямые асинхронные передачи между CPU и GPU и повышает пропускную способность загрузки данных ценой резервирования системной памяти.
джунгли конвейеров (pipeline jungle): антишаблон, при котором сложные взаимозависимые конвейеры обработки данных становятся трудно поддерживаемыми, отлаживаемыми и изменяемыми, что порождает технический долг и операционную сложность.
конвейерный параллелизм (pipeline parallelism): форма параллелизма модели, при которой разные слои модели размещаются на разных устройствах, а данные проходят через них как по конвейеру; позволяет обрабатывать несколько батчей одновременно.
корректность на момент времени (point-in-time correctness): гарантия, что обучающие примеры используют только те значения признаков, которые были доступны на историческое время предсказания; предотвращает утечку данных.
пулинг (pooling): операция понижения дискретизации в сверточных сетях, которая уменьшает пространственные размеры, сохраняя важные признаки; обычно использует максимум или среднее по локальным областям.
индекс стабильности популяции (PSI) (population stability index (PSI)): метрика сдвига распределения по корзинам, которая сравнивает текущие распределения признаков с базовыми, чтобы обнаружить дрейф популяции.
позиционное кодирование (positional encoding): метод в архитектурах трансформеров, который вносит в представления токенов информацию об их позиции в последовательности, поскольку трансформеры сами по себе не обрабатывают последовательность по порядку.
квантование после обучения (post-training quantization): подход к квантованию уже обученных моделей без изменения процесса обучения; обычно включает калибровку на репрезентативных данных для подбора оптимальных параметров квантования.
эффективность использования мощности дата-центра (PUE) (power usage effectiveness (PUE)): метрика энергоэффективности дата-центров, равная отношению полного энергопотребления объекта к энергопотреблению ИТ-оборудования.
энергетическая стена (power wall): технологический барьер, достигнутый примерно в 2005 году: дальнейшее повышение тактовой частоты процессора перестало давать прирост производительности без неустойчивого роста плотности мощности и тепловыделения; это вынудило перейти к параллельным и специализированным архитектурам.
точность (precision): в численных вычислениях — число значащих битов или цифр, которыми представляются значения; влияет на точность вычислений и потребность в ресурсах в ML-системах.
предвыборка (prefetching): прием оптимизации системы, который загружает данные в память до того, как они понадобятся, совмещая загрузку данных с вычислениями, чтобы сократить простои и повысить пропускную способность обучения.
постановка задачи (problem definition): начальный этап разработки ML, на котором четко задаются цели, ограничения, метрики успеха и эксплуатационные требования, направляющие все последующие решения.
обрабатывающий элемент (PE) (processing element (PE)): повторяющийся строительный блок ускорителя, который содержит вычислительные блоки и локальную память; массивы PE обеспечивают параллельное исполнение тензорных операций.
программируемый логический контроллер (PLC) (programmable logic controller (PLC)): промышленные системы управления, которые используются в производстве и средах IoT и могут интегрироваться с ML-моделями для автоматизированных решений в операционных технологиях.
задача сворачивания белков (protein folding problem): научная задача предсказания трехмерной структуры и динамики белков по их аминокислотной последовательности и окружению; давняя проблема, в которой такие системы, как AlphaFold, достигли прорывной точности, не решив каждый вопрос о сворачивании.
прокси-переменная (proxy variable): признак, который косвенно несет сигнал о защищаемом или чувствительном атрибуте, даже когда сам этот атрибут удален.
псевдонимизация (pseudonymization): метод защиты приватности, который заменяет прямые идентификаторы искусственными, сохраняя возможность связывать записи для анализа.
PyTorch (PyTorch): фреймворк глубокого обучения, разработанный исследовательской лабораторией AI компании Facebook; делает упор на динамические вычислительные графы, жадное исполнение и удобную интеграцию с Python; особенно популярен в исследованиях и экспериментах.
Q
квантование (quantization): прием сжатия модели, при котором параметры или активации представляются в меньшей точности, например FP32 в INT8; уменьшает объем хранения и перемещения данных, но не снижает число математических операций; ускорение требует поддерживаемой аппаратуры и ядер.
обучение с учетом квантования (quantization-aware training): подход к обучению, при котором эффекты квантования моделируются в процессе обучения, так что модель адаптируется к пониженной точности; обычно дает лучшую точность, чем квантование после обучения.
гранулярность квантования (quantization granularity): уровень, на котором применяются параметры квантования, от поточечного для всего тензора (самого грубого) до поканального или погруппового (более мелкого); мелкая гранулярность обычно сохраняет больше точности, но требует больше памяти.
запросов в секунду (QPS) (queries per second (QPS)): метрика производительности, которая показывает, сколько запросов вывода система может обработать за секунду; часто используется для оценки пропускной способности в производственных развертываниях.
запрос–ключ–значение (query-key-value): три компонента механизма внимания: запросы определяют, что искать, ключи описывают, что доступно, а значения содержат саму информацию, которая взвешивается и объединяется.
R
обработка в реальном времени (real-time processing): обработка данных по мере их поступления в рамках временных ограничений приложения; жесткие системы реального времени гарантируют наихудшие сроки, а мягкие допускают редкие пропуски.
рецептивное поле (receptive field): область входа, которая влияет на выход конкретного нейрона; определяет пространственный охват шаблонов, которые этот нейрон может обнаружить.
рекуррентная нейронная сеть (recurrent neural network): тип нейронной сети для обработки последовательных данных; содержит связи, образующие циклы, которые позволяют информации сохраняться между временными шагами.
Red AI (Red AI): направление исследований и разработок в ИИ, которое ставит максимизацию точности или производительности выше растущих вычислительных и экологических издержек.
регуляризация (regularization): приемы, которые предотвращают переобучение нейронных сетей за счет ограничений или штрафов, включая dropout, затухание весов и аугментацию данных.
ReLU (ReLU): функция активации «выпрямленный линейный блок» (Rectified Linear Unit), которая задается как ; вносит нелинейность при сохранении вычислительной эффективности и смягчает затухание градиентов для положительных входов.
остаточная связь (residual connection): пропускающая связь, которая добавляет вход слоя к его выходу; позволяет обучать очень глубокие сети, смягчая проблему затухающих градиентов.
ResNet (ResNet): остаточная сеть (Residual Network), глубокая сверточная архитектура из остаточных блоков с пропускными связями; позволяет обучать сети в сотни слоев и достигла прорывного качества.
ResNet-50 (ResNet-50): конкретный 50-слойный вариант остаточной сети, который служит каноничной маячной моделью для вычислительно-ограниченных нагрузок и балансирует глубину и вычислительную стоимость в визуальных бенчмарках.
снимки глазного дна (retinal fundus photographs): медицинские изображения внутренней поверхности глаза, включая сетчатку, диск зрительного нерва и кровеносные сосуды; обычно используются для диагностики заболеваний глаз и обучения медицинских систем ИИ.
дифференцирование в обратном режиме (reverse-mode differentiation): метод автоматического дифференцирования, который вычисляет градиенты, обходя вычислительный граф в обратном порядке; очень эффективен для функций со многими входами и малым числом выходов, поэтому идеален для обучения нейронных сетей.
точка перехода (ridge point): арифметическая интенсивность, при которой нагрузка переходит с режима, ограниченного памятью, в режим, ограниченный вычислениями, на заданной аппаратной платформе; вычисляется как пиковые FLOP/s, деленные на пропускную способность памяти. Это точка перегиба на диаграмме модели Roofline.
Ring AllReduce (Ring AllReduce): эффективный по пропускной способности алгоритм AllReduce, в котором устройства передают фрагменты по кольцу и накапливают результаты для синхронизации градиентов в распределенном обучении.
RMSprop (RMSprop): алгоритм оптимизации с адаптивной скоростью обучения, который поддерживает скользящее среднее квадратов градиентов и автоматически подстраивает скорость обучения для каждого параметра во время обучения.
управление доступом на основе ролей (RBAC) (role-based access control (RBAC)): модель управления доступом, которая предоставляет права по ролям пользователя, сервиса или команды, а не отдельными разрозненными выдачами.
откат (rollback): возврат к предыдущей стабильной версии модели или системы при обнаружении проблем в производстве; обеспечивает непрерывность сервиса.
анализ Roofline (Roofline analysis): метод моделирования производительности, который строит достижимую производительность относительно операционной интенсивности, а пиковые вычисления и пропускная способность образуют потолки; помогает определить, ограничена ли система памятью или вычислениями.
S
масштабируемость (scalability): способность ML-систем справляться с ростом объема данных, числа пользователей или вычислительных запросов без существенного ухудшения производительности и пользовательского опыта.
масштаб и нулевая точка (scale and zero-point): параметры квантования, которые отображают вещественные тензоры в целые значения и обратно; масштаб задает шаг, а нулевая точка переводит вещественный ноль в квантованный диапазон.
схема (schema): определение структуры и формата данных, которое задает типы данных, имена полей и связи; необходимо для валидации данных и согласованности обработки.
эволюция схемы (schema evolution): процесс изменения схем данных со временем с сохранением обратной совместимости и непрерывной работы зависимых систем и приложений.
схема при чтении (schema-on-read): подход, используемый в озерах данных, при котором структура данных определяется и проверяется в момент чтения, а не при записи; дает гибкость для разнородных типов данных.
скретчпад-память (scratchpad memory): быстрая локальная память, которой управляет программное обеспечение и которую ускорители используют для подготовки предсказуемого перемещения данных под контролем компилятора или среды выполнения.
карты сегментации (segmentation maps): подробные аннотации, которые классифицируют объекты на уровне пикселей; дают самую детальную разметку, но требуют значительно больше хранилища и вычислительных ресурсов.
самовнимание (self-attention): механизм внимания, в котором запросы, ключи и значения происходят из одной и той же последовательности; позволяет каждой позиции обращать внимание на все позиции, включая саму себя.
полуконтролируемое обучение (semi-supervised learning): подход машинного обучения, который использует для обучения и размеченные, и неразмеченные данные; структурные допущения помогают улучшить модель при малом числе меток.
чувствительность (sensitivity): доля фактически положительных случаев, которые модель классификации правильно обнаруживает; также известна как доля истинно положительных или полнота (recall); критична в медицинских приложениях, где пропуск положительных случаев имеет тяжелые последствия.
serverless (serverless): модель облачных вычислений, в которой инфраструктура управляется провайдером автоматически, и код исполняется без заботы об управлении серверами.
соглашение об уровне обслуживания (SLA) (service level agreement (SLA)): формальный внешний договор, который задает обязательства по сервису, часто через один или несколько SLO, а также последствия и штрафы за невыполнение.
целевой уровень обслуживания (SLO) (service-level objective (SLO)): внутренняя измеримая цель для индикатора уровня сервиса (например, задержки, доли ошибок или доступности), которая направляет эксплуатацию и может лежать в основе внешнего SLA.
теневое развертывание (shadow deployment): стратегия развертывания, при которой новая модель работает параллельно с производственной: делает предсказания, которые записываются в журнал, но не отдаются пользователям; позволяет проверять модель без влияния на пользователей.
поверхностное обучение (shallow learning): подходы машинного обучения, которые используют алгоритмы ограниченной сложности, например опорные векторы и деревья решений; требуют тщательно спроектированных признаков, но не могут автоматически выявлять иерархические представления, как методы глубокого обучения.
значения SHAP (SHAP values): оценки атрибуции признаков на основе значений Шепли, которые оценивают вклад каждого признака в предсказание модели.
сигмоида (sigmoid): функция активации, которая отображает входы в диапазон от 0 до 1; исторически популярна, но склонна к затуханию градиентов в глубоких сетях.
тихое смещение (silent bias): несправедливость модели, которая выдает внешне корректные, но дискриминационные результаты; ускользает от традиционного мониторинга ошибок и требует разнесенной оценки для обнаружения.
тихая деградация (silent degradation): постепенное снижение производительности ML-системы, которое происходит без ошибок, исключений или сигналов тревоги; система продолжает работать, выдавая все более неточные предсказания.
тихий сбой (silent failure): режим отказа системы, при котором модель продолжает выдавать правдоподобно выглядящие результаты, постепенно теряющие точность или контекстуальную релевантность, и при этом не вызывает обычных сигналов об ошибках.
SIMD (одна инструкция, много данных) (SIMD (Single Instruction, Multiple Data)): архитектура параллельных вычислений, которая одновременно применяет одну операцию к нескольким элементам данных; эффективна для регулярных data-parallel вычислений.
SIMT (одна инструкция, много потоков) (SIMT (Single Instruction, Multiple Threads)): расширение SIMD, которое обеспечивает параллельное исполнение по множеству независимых потоков, каждый из которых хранит собственное состояние и счетчик команд.
сингулярное разложение (singular value decomposition): метод матричного разложения, который раскладывает матрицу на произведение трех матриц; часто используется в низкоранговых аппроксимациях для сжатия слоев нейронной сети за счет сохранения лишь наиболее значимых сингулярных значений.
пропускная связь (skip connection): прямая связь, которая обходит один или несколько слоев; позволяет градиентам легче проходить через глубокие сети и лучше обучать очень глубокие архитектуры.
мягкие цели (soft targets): распределения вероятностей модели-учителя, которые используются как обучающий сигнал при дистилляции знаний; несут информацию о сходстве классов, выходящую за пределы жестких меток.
softmax (softmax): функция активации, которая превращает логиты в распределение вероятностей, где выходы суммируются в 1; используется в многоклассовой классификации.
разреженное тензорное ядро (sparse Tensor Core): вариант тензорного ядра, который ускоряет поддерживаемые шаблоны структурированной разреженности, например 2:4, пропуская заданные нулевые значения.
разреженность (sparsity): свойство тензоров, при котором многие значения точно равны нулю; может повышать вычислительную эффективность, если нули имеют подходящую структуру и их поддерживают специализированные разреженные ядра или аппаратура; значения, близкие к нулю, считаются нулевыми только после прореживания.
SPEC CPU (SPEC CPU): стандартизованный набор бенчмарков, разработанный кооперативом System Performance Evaluation Cooperative; измеряет производительность процессоров на реальных приложениях, а не на синтетических тестах.
блок специальных функций (SFU) (special function unit (SFU)): выделенное аппаратное обеспечение для специализированных операций, например экспонент, обратных величин, корней и некоторых примитивов функций активации, которые не сводятся напрямую к обычной арифметике или блоку матричного умножения.
специфичность (specificity): доля фактически отрицательных случаев, которые модель классификации правильно распознает; также известна как доля истинно отрицательных; важна, чтобы системы направления не перегружались ложноположительными срабатываниями.
SPECpower (SPECpower): методика бенчмарка, которая измеряет энергоэффективность серверов на разных уровнях нагрузки и позволяет напрямую сравнивать компромиссы между мощностью и производительностью в вычислительных системах.
спекулятивное декодирование (speculative decoding): прием оптимизации для авторегрессионных языковых моделей, при котором меньшая модель генерирует черновые токены, а большая модель их проверяет; ускоряет вывод при сохранении качества.
скорость света (задержка) (speed of light (latency)): физический предел скорости передачи информации (примерно 200 000 км/с в волокне), который задает неустранимую нижнюю границу сетевой задержки; для приложений с откликом менее 10 мс на больших расстояниях требуются периферийные вычисления.
словарь состояния (state dict): сопоставление имен модулей или оптимизатора с тензорами во фреймворке; используется для сохранения, загрузки и контрольных точек моделей и состояния оптимизатора.
статический граф (static graph): вычислительный граф, который полностью задается до начала исполнения; дает всестороннюю оптимизацию и эффективное развертывание, но требует заранее описать все операции и ограничивает гибкость во время работы.
статическое квантование (static quantization): подход к квантованию, при котором параметры определяются один раз при калибровке и остаются фиксированными при выводе; дает вычислительную эффективность, но меньше адаптируется, чем динамические подходы.
статистическое обучение (statistical learning): эпоха машинного обучения, которая возникла в 1990-х и перенесла фокус с символьного ИИ на основе правил к алгоритмам, способным выучивать закономерности из данных; заложила основу современных data-driven подходов к ИИ.
стохастический градиентный спуск (stochastic gradient descent): вариант градиентного спуска, который оценивает градиенты по отдельным обучающим примерам или малым батчам, а не по всему набору данных; снижает требования к памяти и позволяет онлайн-обучение.
Straight-Through Estimator (STE) (Straight-Through Estimator (STE)): аппроксимация градиента, которая пропускает градиенты через недифференцируемые операции вроде округления; часто применяется в обучении с учетом квантования.
потоковый прием данных (stream ingestion): паттерн обработки данных, который принимает данные в реальном времени по мере их поступления; необходим для приложений, которым нужна немедленная обработка и низкая задержка ответа.
потоковая обработка (stream processing): подход к обработке данных в реальном времени, который обрабатывает непрерывные потоки по мере их поступления и позволяет мгновенно реагировать на события и выявлять закономерности.
шаг свертки (stride) (stride): величина сдвига сверточного фильтра по входу; управляет пространственными размерами выхода и степенью перекрытия применений фильтра.
структурированное прореживание (structured pruning): подход к прореживанию, который удаляет целые вычислительные единицы, например нейроны, каналы или слои; получаются более компактные плотные модели, которые дружественнее к аппаратуре, чем разреженные матрицы неструктурированного прореживания.
обучение с учителем (supervised learning): подход машинного обучения, при котором модели учатся на размеченных примерах, чтобы делать предсказания для новых неразмеченных данных.
символьный ИИ (symbolic AI): подход к искусственному интеллекту, который использует высокоуровневые символьные представления задач, логики и алгоритмов поиска; доминировал до революции глубокого обучения и был связан с экспертными системами и рассуждением на правилах.
синтетический бенчмарк (synthetic benchmark): искусственная тестовая программа, которая измеряет конкретные аспекты производительности системы, в отличие от бенчмарков, основанных на реальных приложениях и нагрузках.
синтетические данные (synthetic data): искусственно созданные данные, которые генерируются алгоритмами, симуляциями или генеративными моделями в дополнение к реальным наборам; восполняют нехватку данных или решают вопросы приватности.
системная энтропия (system entropy): склонность ML-систем деградировать со временем из-за изменения мира (дрейф) или накопления скрытых зависимостей (технический долг); для поддержания порядка требуется постоянная энергия эксплуатации.
System-on-Chip (SoC) (System-on-Chip (SoC)): интегральная схема, которая объединяет большую часть или все компоненты компьютера или электронной системы (CPU, GPU, память и специализированные процессоры) на одном кристалле; распространена в мобильных устройствах и встраиваемых системах ради экономии места и энергии.
системное совместное проектирование (systems co-design): совместная разработка алгоритмов, программного обеспечения и аппаратуры, чтобы структура модели и ее исполнение соответствовали физическим возможностям и ограничениям.
системная интеграция (systems integration): процесс объединения разных компонентов и подсистем в единую функциональную систему, которая работает эффективно и надежно как целое.
системное мышление (systems thinking): подход к пониманию сложных систем через то, как отдельные компоненты взаимодействуют и влияют на систему в целом; особенно важен в ML, где данные, алгоритмы, аппаратура и среды развертывания должны работать согласованно.
систолический массив (systolic array): специализированная аппаратная архитектура, которая эффективно выполняет матричные операции, пропуская данные через решетку обрабатывающих элементов и сводя к минимуму перемещение данных и энергопотребление.
T
хвостовая задержка (tail latency): время отклика на высоких перцентилях в системе, обычно измеряемое как задержка P95 или P99; важно для описания медленных запросов под пиковой нагрузкой, но не эквивалентно абсолютному худшему случаю. Дополняет медианную и среднюю задержку, а не заменяет их.
специализированные бенчмарки вывода (tailored inference benchmarks): специализированные тесты производительности, созданные для конкретных сред развертывания или сценариев, с учетом уникальных ограничений и требований к оптимизации.
tanh (tanh): функция активации — гиперболический тангенс, которая отображает входы в интервал (−1, 1) и дает выходы, центрированные около нуля.
технический долг (technical debt): долгосрочные затраты на сопровождение, накопленные из-за удобных проектных решений в ходе разработки; особенно проблематичны в ML-системах из-за зависимостей по данным и сложности моделей.
телеметрия (telemetry): автоматический сбор и передача данных о производительности и метрик из распределенных систем, что позволяет удаленно наблюдать и анализировать их.
тензор (tensor): многомерный массив, который представляет данные в нейронных сетях; обобщает скаляры (0D), векторы (1D) и матрицы (2D) на большее число измерений.
тензорное ядро (Tensor Core): специализированный матричный блок GPU, который ускоряет операции «умножить и накопить» в смешанной точности над тайлами тензоров.
разложение тензоров (tensor decomposition): обобщение матричной факторизации на тензоры более высокого порядка; используется для сжатия слоев нейронной сети: тензоры весов представляются комбинациями меньших тензоров с меньшим числом параметров.
тензорный параллелизм (tensor parallelism): стратегия параллелизма модели, при которой отдельные тензорные операции (например, матричное умножение) делятся между несколькими устройствами; снижает память на устройство и может сократить задержку больших слоев, если выигрыш во времени вычислений превышает добавленную коммуникацию.
тензорный процессор (TPU) (tensor processing unit (TPU)): специализированная интегральная схема Google, созданная для ML-нагрузок; оптимизирована под матричные операции и использует архитектуру систолического массива.
TensorFlow (TensorFlow): универсальный фреймворк машинного обучения от Google, который предоставляет инструменты для всего ML-конвейера от исследований до производства; поддерживает жадное исполнение и вычисления по графам и имеет широкую экосистему.
TensorRT (TensorRT): библиотека оптимизации вывода от NVIDIA, которая применяет слияние операторов и понижение точности, чтобы ускорить вывод глубокого обучения на GPU.
тернаризация (ternarization): экстремальный прием квантования, который ограничивает веса тремя значениями (обычно −1, 0 и +1); дает заметное сжатие и сохраняет больше выразительной способности, чем бинаризация.
тепловая расчетная мощность (TDP) (thermal design power (TDP)): уровень устойчивой мощности и тепловыделения, который устройство или система охлаждения рассчитаны выдерживать при типичной максимальной нагрузке.
тепловое троттлинг (thermal throttling): защитный механизм мобильных и встраиваемых устройств, который снижает тактовую частоту процессора и производительность, чтобы предотвратить перегрев; часто ограничивает устойчивую производительность вывода на устройстве.
пропускная способность (throughput): скорость, с которой система обрабатывает данные или завершает операции; обычно измеряется в операциях в секунду и критична для обучения больших моделей.
время на выходной токен (TPOT) (time per output token (TPOT)): задержка на каждый токен при авторегрессионном декодировании после первого токена; отражает пропускную способность декодирования и ограничения пропускной способности памяти.
время до точности (time-to-accuracy): астрономическое время, которое требуется, чтобы обучить модель до заданной точности на валидации.
время до первого токена (TTFT) (time to first token (TTFT)): время от прихода запроса до первого сгенерированного токена при потоковом обслуживании больших языковых моделей; включает предзаполнение, планирование и задержку первого ответа.
TinyML (TinyML): направление, которое занимается развертыванием моделей машинного обучения на сверхограниченных встраиваемых устройствах, таких как микроконтроллеры и датчики, работающих в диапазоне от милливатт до долей ватта, с жесткими ограничениями по памяти, мощности и вычислительным возможностям. Также называется tiny machine learning.
TOPS (TOPS): триллион операций в секунду, единица скорости операций, которая показывает, сколько триллионов операций система выполняет за секунду. Часто указывается для целочисленных нагрузок низкой точности, поэтому нужно указывать тип операций и точность.
совокупная стоимость владения (TCO) (total cost of ownership (TCO)): комплексная финансовая метрика для ML-систем, которая охватывает затраты на обучение, вывод и эксплуатацию за весь жизненный цикл системы.
разделение обучения и обслуживания (train-serve split): гибридный архитектурный паттерн, при котором вычислительно тяжелое обучение модели выполняется на мощной облачной инфраструктуре, а обученную модель оптимизируют и развертывают для вывода на периферийных или мобильных устройствах с ограниченными ресурсами.
обучение (training): процесс настройки параметров нейронной сети на основе данных или опыта взаимодействия с помощью процедуры оптимизации, чтобы минимизировать функцию потерь или максимизировать вознаграждение.
перекос обучения и обслуживания (training-serving skew): расхождение между тем, как признаки или данные вычисляются при обучении модели и при обслуживании в производстве; может ухудшить качество модели. Частые причины: разные конвейеры предобработки, разное время вычисления признаков или разные источники данных при обучении и выводе.
перенос обучения (transfer learning): метод машинного обучения, который использует знания, полученные предобученными моделями на смежных задачах; позволяет быстрее обучаться и лучше работать на новых задачах при небольшом объеме данных за счет переиспользования выученных признаков и представлений.
трансформер (transformer): архитектура нейронной сети из блоков внимания, полносвязных блоков, остаточных связей и нормализации; исходный дизайн отказывается от рекуррентности и свертки, хотя поздние варианты могут их включать.
эквивариантность к сдвигу (translation equivariance): свойство, при котором сдвиг входа вызывает соответствующий сдвиг карты признаков на выходе; отличается от инвариантности, которая отбрасывает позицию.
инвариантность к сдвигу (translation invariance): свойство, при котором выход модели не меняется при сдвиге входа. Свертка эквивариантна к сдвигу; пулинг или глобальная агрегация могут давать приближенную инвариантность.
разложение Таккера (Tucker decomposition): метод разложения тензоров, который обобщает сингулярное разложение на тензоры высокого порядка с помощью ядерного тензора и матриц факторов; обычно используется для сжатия слоев сверточных сетей.
белые пробелы ТВ (TV white spaces): неиспользуемые частоты вещания, которые можно переиспользовать для подключения к интернету; так поступают такие системы, как FarmBeats, расширяя сетевой доступ для удаленных сельскохозяйственных датчиков и устройств IoT.
U
равномерное квантование (uniform quantization): подход к квантованию, при котором диапазон значений делится на равномерно расположенные интервалы; реализуется просто, но может быть неоптимальным для неравномерных распределений значений.
теорема об универсальной аппроксимации (universal approximation theorem): теоретический результат, который доказывает, что нейронная сеть с достаточной шириной и подходящей нелинейной функцией активации может аппроксимировать любую непрерывную функцию на компактной области с любой заданной точностью.
необоснованная эффективность данных (unreasonable effectiveness of data): эмпирическое наблюдение, что для многих задач добавление данных эффективнее улучшения алгоритмов; оно двигает парадигму ИИ, ориентированного на данные.
неструктурированное прореживание (unstructured pruning): подход к прореживанию, который удаляет отдельные веса и сохраняет общую архитектуру сети; создает разреженные матрицы весов, для получения вычислительной выгоды которых нужна специализированная аппаратная поддержка.
неструктурированная разреженность (unstructured sparsity): форма разреженности модели, при которой отдельные веса обнуляются без какого-либо шаблона; создает нерегулярные разреженные структуры, для использования которых нужна специализированная аппаратура.
V
проблемы валидации (validation issues): проблемы, выявленные при тестировании модели, которые указывают на плохую производительность, переобучение, проблемы качества данных или другие недостатки, которые нужно устранить до развертывания.
проблема затухающих градиентов (vanishing gradient problem): проблема глубоких нейронных сетей, при которой градиенты экспоненциально уменьшаются по мере распространения назад через слои, из-за чего ранним слоям трудно эффективно обучаться.
векторные операции (vector operations): вычислительные операции, которые одновременно обрабатывают несколько элементов данных и обеспечивают эффективное параллельное исполнение поэлементных преобразований в нейронных сетях.
разрыв верификации (verification gap): несоответствие между конечным покрытием тестового набора и гораздо большим пространством входов, с которым ML-система может столкнуться в производстве.
версионирование (versioning): практика отслеживания изменений наборов данных, моделей и конвейеров во времени; обеспечивает воспроизводимость, возможность отката и журналы аудита в ML-системах.
добродетельный цикл (virtuous cycle): самоусиливающийся процесс в глубоком обучении, при котором улучшения в доступности данных, алгоритмах и вычислительной мощности взаимно поддерживают прогресс в остальных областях и ускоряют общее развитие.
узкое место фон Неймана (Von Neumann bottleneck): ограничение производительности, вызванное общей шиной между процессором и памятью в традиционных архитектурах компьютеров; перемещение данных становится дороже вычислений.
W
вычислитель уровня склада (warehouse-scale computer (WSC)): центр обработки данных, который работает как единый программируемый компьютер; вычисления, хранение, сеть и отказы рассматриваются как системные ресурсы.
warp (warp): группа из 32 потоков на GPU NVIDIA, активные потоки которой выполняют одну общую инструкцию за раз; фундаментальная единица планирования потоков на GPU NVIDIA.
Waymo (Waymo): дочерняя компания Alphabet Inc., которая представляет ведущее развертывание систем машинного обучения в технологии автономных автомобилей; показывает, как ML-системы охватывают путь от встраиваемых систем до облачной инфраструктуры в средах, критичных к безопасности.
слабый надзор (weak supervision): подход, который использует метки более низкого качества, полученные эффективнее через эвристики, удаленный надзор или программные методы, а не ручную разметку экспертами.
веб-скрейпинг (web scraping): автоматизированный прием извлечения данных с веб-сайтов для построения собственных наборов данных; требует внимательного учета юридических, этических и технических ограничений.
вес (weight): обучаемый параметр, который определяет силу связи между нейронами разных слоев и подстраивается во время обучения, чтобы минимизировать функцию потерь.
матрица весов (weight matrix): организованный набор весов, которые связывают один слой нейронной сети с другим; позволяет эффективно вычислять через матричные операции.
разделение весов (weight sharing): практика использования одних и тех же параметров в разных пространственных положениях, как в сверточных сетях; сокращает число параметров при сохранении способности обнаруживать шаблоны.
Whetstone (Whetstone): ранний бенчмарк, разработанный в Национальной физической лаборатории Великобритании Курноу и Вихманом; впервые опубликован в виде программы на ALGOL 60 в 1972 году, а позднее в канонической версии на FORTRAN в 1976 году. Измерял производительность операций с плавающей запятой в MWIPS (миллионах инструкций Whetstone в секунду) и стал одним из первых широко принятых стандартных тестов производительности.
оркестрация рабочих процессов (workflow orchestration): автоматизированная координация и управление сложными последовательностями ML-конвейеров, которая обеспечивает правильный порядок исполнения, управление зависимостями и обработку ошибок в распределенных системах.
X
XLA (XLA): ускоренная линейная алгебра (Accelerated Linear Algebra), предметно-ориентированный компилятор операций линейной алгебры, который оптимизирует вычисления TensorFlow и JAX, генерируя эффективный код для разных аппаратных платформ, включая CPU, GPU и TPU.
Уведомление об авторстве
Введение в системы машинного обучения — русский перевод тома I учебника «Machine Learning Systems» (Harvard University), посвященного основам систем машинного обучения.
- Оригинальный текст: Vijay Janapa Reddi, Harvard University, mlsysbook.ai. Исходный репозиторий:
harvard-edge/cs249r_book, папкаbooks/vol1/. - Лицензия оригинала: CC BY-NC-SA 4.0. Эта книга распространяется на тех же условиях: с указанием авторства, только в некоммерческих целях и на условиях той же лицензии. Поэтому она не публикуется по общей лицензии CC BY 4.0 репозитория, см.
meta.toml. - Перевод и редакция: Сергей Монин.
Перевод следует оригиналу на момент перевода. Если оригинал изменится, перевод может отставать.
Что переведено, что изменено при переносе в mdBook и что осталось на английском, описано в файле PROVENANCE.md (в этой же папке).
Происхождение материалов
Книга переведена из исходного репозитория harvard-edge/cs249r_book, папка books/vol1/ (том I «Machine Learning Systems», «Introduction to Machine Learning Systems»). Исходные Quarto-файлы преобразованы в Markdown для mdBook, переведены вручную по частям и затем целиком вычитаны (текст, формулы, рисунки, диаграммы, комментарии в коде, ссылки, термины).
Что переведено
Переведено все, что входит в том:
- 16 глав, включая цели обучения, врезки, сноски, таблицы, уравнения, листинги и подписи рисунков;
- введения к четырем частям («Принципы основ», «Принципы построения», «Принципы оптимизации», «Принципы развертывания») с 13 принципами и их якорями
pri-*; - служебные разделы: «Посвящение», «Предисловие», «Заметка автора», «О книге», «Благодарности», «Примечание об использовании ИИ», «Обозначения»;
- пять приложений: «Таксономия D·A·M», «Основы данных», «Основы алгоритмов», «Основы машины», «Системные допущения»;
- глоссарий (530 терминов; английский вариант дан в скобках курсивом) и список литературы (681 запись, которые цитируются в томе; записи приведены на языке оригинала, BibTeX-скобки и LaTeX-акценты преобразованы).
Не перенесено:
- страница SocratiQ (
books/shared/frontmatter/socratiq): она описывает онлайн-функцию сайта, которой в статическом издании нет; - галерея участников GitHub в «Благодарностях» (HTML-таблица): вместо нее дана ссылка на mlsysbook.ai/git;
- LaTeX-диаграммы «карты стека» на полях глав (в английской HTML-версии они тоже не отображаются); поэтому в «О книге» сказано, что в электронном издании они не воспроизводятся.
Встроенные вычисления {python} исходника выполнены локально (mlsysim из репозитория), значения подставлены по выводу кода; блоки, которые в исходнике только выводят значения, в книге оставлены как обычный текст. Если вычисленный блок в конвертации потерялся, он восстановлен пересчетом (например, разбор дивергенции KL и PSI в приложении «Основы данных»).
Рисунки
Все рисунки с текстом локализованы. Оригинальные файлы в исходном репозитории не менялись.
- TikZ (162 рисунка: главы 1–16 и четыре приложения) собраны заново из исходного кода TikZ с русскими подписями. Сборка: pdfLaTeX с кириллическим шрифтом WNCYSS (OT2), преобразование в SVG через
pdftocairo, обрезка по фактической области рисунка. Латинские названия и аббревиатуры (CPU, GPU, SRAM, HBM, NVLink, имена моделей и библиотек) набраны шрифтом Helvetica (T1) через\lat{}, потому что в OT2 латинские буквы выглядят как кириллические. Знаки «+» и «=» в подписях выведены в математическом режиме (в OT2 их нет). Чтобы пары «сх» и «тс» не давали лигатуры WNCYSS (читались бы как «ш» и «ц»), между буквами вставлена пустая группа{}. Десятичный разделитель в подписях — запятая. Геометрия, цвета и формулы не менялись; в нескольких рисунках сужены текстовые блоки или сокращены подписи, чтобы русский текст не налезал на соседние элементы. - Графики matplotlib (блоки
{python}, которые в конвертации не сохранили рисунок, потому что заканчиваютсяplt.show()): код исходника выполнен заново, подписи переведены перехватом строк при выводе, шрифт — DejaVu Sans с кириллицей, десятичная запятая на осях. Данные и оформление не менялись. - Векторные рисунки без
<text>(подписи в виде контуров), включая рисунки на полях (*_margin_*.svg): подписи переведены. Часть рисунков перерисована в matplotlib с той же геометрией и значениями (svg.fonttype = path), в нескольких отредактирован сам файл (подпись заменена, смещена или добавлена). Размер рисунков на полях, заданный в исходнике в долях дюйма, увеличен скриптомscripts/scale_small_svgs.py(каждой единицеviewBoxсоответствует 4 пикселя). - Растровые рисунки с подписями (схемы, скриншоты и графики): надписи закрашены по фону (inpainting) и набраны заново; названия моделей, наборов данных и программ оставлены как имена. Исходные надписи на скриншотах интерфейсов (например, TensorFlow Profiler) оставлены.
- Обложки глав (
webp/cover_*_blueprint_labeled.webp): выноски заменены на русские слова поверх чистой обложки; иллюстрация не менялась. - Рисунки без подписей и рисунки только с буквами D, A, M оставлены без изменений.
images/05_nn_computation/svg/tikz_t05.svgвесит около 2,4 МБ из-за большого числа контуров в градиентных заливках рисунка «Биологический и искусственный нейрон».
Решения по переводу
- Буква «ё» не используется, как и в книгах «Агентные системы машинного обучения» и «Системы физического ИИ» из той же серии.
- Десятичная запятая в тексте (
15,3 процента), в формулах{,}; разделитель тысяч в тексте — пробел, в формулах\,. Доллары в тексте записаны как\$. Запись «N×» в прозе передана оборотом «в N раз» (десятичные дроби и числа 2–4 — «раза»); в таблицах отношения оставлены какN×. - Значения в блоках кода (например,
8.5B,312 TFLOP/s) оставлены как вычислены; английские слова масштаба (million,percent) рядом с числами переведены. - Комментарии, строки документации и строки вывода в листингах переведены; идентификаторы, имена функций, команды и API оставлены.
- Единицы: десятичные приставки СИ (КБ, МБ, ГБ, ТБ), FLOP и FLOP/s, мкс, пДж; емкость аппаратуры напечатана так, как указал производитель.
- Единые термины: квантование (не квантизация), прореживание, дистилляция, вывод (inference; не «инференс»), задержка (не «латентность»), календарное время (wall-clock), раздельные по глубине свертки, тензорные ядра, SRAM на кристалле, межсоединение, шардирование, офлайн, Roofline, «налог на…» (налог на сериализацию, диспетчеризацию, коммуникацию и т. д.), маячные модели, кремниевый контракт, железный закон, стена памяти, перекос обучения и обслуживания, страничные ошибки, начальное значение генератора (seed), «ориентированный на модель/данные» подход, утилизация FLOP модели (MFU), «Значение», «Отличие», «Типичная ошибка» в карточках определений, «вышестоящий» и «нижестоящий» вместо upstream и downstream.
- Названия приложений в ссылках: «Таксономия D·A·M», «Основы данных», «Основы алгоритмов», «Основы машины», «Системные допущения».
- Русские названия принципов: «Данные как код», «Гравитация данных», «Железный закон систем машинного обучения», «Кремниевый контракт», «Фронт Парето», «Закон арифметической интенсивности», «Инвариант энергии перемещения», «Закон Амдала», «Разрыв верификации», «Диагностика статистического дрейфа», «Диагностика перекоса обучения и обслуживания», «Принцип бюджета задержки», «Модель смещения обратной связи».
- Библиографические ссылки оставлены в виде
(Author et al., year); для одинаковых авторов и годов добавлены буквенные индексы по порядку названий вreferences.bib.
Исправления при конвертации
- Удалены артефакты конвертации: отдельные строки
}и}}}после\index{...}, блоки{=latex}(\begingroup,\vspace,\part,\enlargethispage), атрибуты[offset=...]в сносках, Quarto-блоки::: {.content-visible ...}, лишние фигурные скобки после заголовков и сносок. - Якоря приведены к нижнему регистру (
#sec-...,#tbl-...,#fig-...), как в<a id>; нерешенные ссылки@sec-...заменены ссылками на русские разделы; ссылки на главы, части (part_*.md#pri-*) и приложения ведут на русские файлы и якоря. - Формулы, попавшие в обратные кавычки, переведены в обычные; формулы с «кВт·ч» в блоках
$$записаны через\text{кВт}\cdot\text{ч}. - Пункты
- [ ]записаны обычными маркерами: mdBook рисовал рядом с маркером неактивный флажок. - Подписи рисунков, обрезанные конвертером (на
\*и\"), восстановлены из.qmd.
Исправления ошибок исходника
При вычитке найдены неточности английского оригинала. В переводе они исправлены (оригинал в этом репозитории не менялся; стоит сообщить авторам):
- Глава 6, листинг
self_attention_layer: строкаK = matmul(X, W_V)заменена наK = matmul(X, W_K). - Глава 11, пример CPU: «примерно 0 GFLOP/s» (округление значения в TFLOP/s) заменено на около 100 GFLOP/s.
- Глава 11, заблуждение о батче 1 на T4: утверждение «в пределах двукратной разницы с A100» противоречило числам врезки (0,3 против 2,04 TFLOP/s, разница около семи раз); исправлено.
- Глава 14, рисунок на полях
vol1_ml_ops_margin_002.svg: заменен (см. выше). - Приложение «Системные допущения», строка Cerebras WSE-3: «44 000 ГБ SRAM» исправлено на 44 ГБ (в соседнем столбце стоит 44 000 МБ, а точка перехода 5,95 FLOP/байт получена из 21 000 ТБ/с).
- Приложение «Основы данных»: потерявшиеся расчеты разбора «дивергенция KL для обнаружения дрейфа» восстановлены (0,0464; 0,0458 нат; PSI = 0,0922).
- Расчеты врезок (Roofline, очереди, интервал переобучения, размеры KV-кэша, стоимость и углеродный след в главе 15 и др.) пересчитаны; опечатки в числах и единицах исправлены.
Особенности исходника, оставленные как есть
- Глава 9: PPD в одном разделе расшифрован как points per dollar, в другом как performance-per-data; в переводе везде принята расшифровка «производительность на данные (PPD)».
- Глава 12: врезка «Анализ Roofline для вывода BERT» опирается на допущение 85 процентов от пика для батча 32 (автор называет его допущением реализации); пример с MobileNetV2 на EdgeTPU назван иллюстративным.
- Глава 13: окно батчинга в примере ResNet-50 задано для SLO «50 мс p95», в остальных местах речь о p99; примеры Llama 3 сравнивают декодирование на разных ускорителях (A100 и H100).
- Глава 8: оценки стоимости обучения GPT-2 и GPT-4 опираются на внешние источники; они не проверялись.
- Глава 15: в карточке данных MIAP (рисунок
tikz_t05) повторно используются имена узлов TikZ; на вид это не влияет. Термин «conjunctional use» нестандартный, переведен как «сочетание». Число пациентов в исследовании Obermeyer et al. (2019) приведено как в исходнике. - Приложение «Системные допущения»: емкость HBM для B200 в сводной матрице (192 ГБ) и в таблице допущений (180 ГБ) взята из разных паспортов производителя.
Проверки
Из корня репозитория:
python3 scripts/check_books.py: книга проходит.python3 scripts/check_links.py books/intro-ml-systems/src: все относительные ссылки (включая ссылки на якоря и рисунки) ведут на существующие цели.python3 scripts/scale_small_svgs.py books/intro-ml-systems --check: размеры рисунков на полях в порядке.mdbook build books/intro-ml-systems: сборка без ошибок, ошибок KaTeX нет.- В тексте нет смешанных латинско-кириллических слов, буквы «ё» и служебных маркеров конвертера (
{python},{=latex},@sec-,:::). - Книга в каталоге не закоммичена (директория не отслеживается git).