Когда быстрый чип ждет данные: где России искать место в гонке ИИ‑ускорителей

Когда быстрый чип ждет данные: где России искать место в гонке ИИ-ускорителей
Средний
16 мин
343
Обзор
Когда говорят об аппаратном обеспечении для искусственного интеллекта, разговор обычно быстро сводится к GPU. У кого больше ускорителей, современнее техпроцесс и выше показатели в FLOPS, тот и должен выигрывать технологическую гонку.
На практике мощный вычислительный кристалл может значительную часть времени ждать, пока память и интерфейсы доставят ему данные. За десять лет производительность вычислительных блоков GPU выросла намного быстрее пропускной способности памяти, а стоимость HBM остается высокой и в последние годы росла даже в пересчете на емкость и пропускную способность. Поэтому эффективность современной ИИ-платформы определяется уже не отдельным чипом, а всей системой: памятью, межсоединениями, хост-процессором, компилятором и программной средой.
Может ли Россия участвовать в этой гонке, не пытаясь полностью повторить NVIDIA? Какие направления выглядят реалистичнее универсального GPU и где в подобных системах может использоваться RISC-V?
Под катом разберемся, чем инференс отличается от обучения, зачем ускорителю собственные управляющие процессоры и почему перспективной точкой входа могут стать Edge AI, промышленная автоматизация и робототехника.

Вопрос о российском аппаратном обеспечении для искусственного интеллекта часто формулируют предельно просто: способны ли отечественные разработчики создать аналог современного GPU NVIDIA?
В такой постановке объединены сразу несколько разных задач. Проектирование вычислительного кристалла, производство по современному техпроцессу, интеграция HBM, создание серверной платформы и разработка программной экосистемы требуют разных компетенций, инфраструктуры и объемов инвестиций. Даже успешное решение одной из этих задач не дает готового продукта.
Современный ускоритель работает внутри сложной программно-аппаратной системы. Он получает данные от хост-процессора, обращается к нескольким уровням памяти, обменивается информацией с соседними кристаллами и исполняет код, подготовленный компилятором. Если любой элемент этой цепочки становится узким местом, пиковая производительность вычислительных блоков остается невостребованной.
Показательная цифра: с 2012 по 2022 год скорость 64-битных вычислений в GPU NVIDIA выросла примерно в 80 раз, а пропускная способность памяти - только в 17 раз. При переходе к FP16, FP8 и FP4 разрыв становится еще заметнее. Арифметические блоки обрабатывают компактные данные быстрее, но память и интерфейсы не ускоряются в той же пропорции.
Одновременно усложняются сами модели. Длинный контекст увеличивает размер KV-кэша, архитектуры Mixture of Experts требуют хранения большого количества весов, а рассуждающие модели генерируют дополнительные последовательности токенов. В мультимодальных системах к тексту добавляются изображения, звук и видео. В результате все больше времени и энергии тратится не на вычисления как таковые, а на хранение и перемещение данных.
Именно поэтому вопрос о российском "железе для ИИ" стоит ставить шире. Создание универсального GPU мирового уровня вместе с современной памятью, упаковкой и программным стеком выглядит крайне сложной и капиталоемкой задачей на ближайшую перспективу. Однако рынок ИИ-вычислений не ограничивается обучением крупнейших языковых моделей.
Существуют задачи вывода моделей, периферийных вычислений, промышленной автоматизации и робототехники. В этих областях решающими характеристиками могут быть не абсолютные показатели FLOPS, а задержка, энергопотребление, предсказуемость времени реакции и интеграция с конкретным оборудованием.
В таких системах RISC-V может использоваться по-разному: как процессор для Edge AI, как управляющее ядро внутри ускорителя, как контроллер перемещения данных или как часть гетерогенной вычислительной платформы. Чтобы понять, где этот подход действительно применим, сначала нужно рассмотреть, из каких компонентов состоит современная ИИ-система и почему ее производительность все реже определяется одним чипом.
Ускоритель работает не один
Современную ИИ-систему удобно сравнить с производственной линией.
Вычислительные блоки выполняют основные операции. Память хранит веса модели и промежуточные данные. Интерфейсы перевозят информацию между отдельными узлами. Хост-процессор готовит входные данные и распределяет задания. Компилятор переводит модель в последовательность операций, которую конкретный ускоритель способен выполнить.
Если хотя бы один участок работает медленно, простои возникают по всей цепочке.
Поэтому сравнение устройств только по FLOPS дает ограниченное представление об их реальной производительности. Два ускорителя с одинаковой пиковой арифметической мощностью могут заметно отличаться по скорости выполнения одной и той же модели. Причинами будут объем локальной памяти, пропускная способность DRAM или HBM, эффективность кэширования, размер пакета запросов, реализация отдельных операторов и качество компилятора.
В аппаратной платформе ИИ важен баланс между несколькими характеристиками:
скоростью вычислений;
емкостью и пропускной способностью памяти;
задержкой доступа к данным;
скоростью интерконнекта;
энергопотреблением;
стоимостью системы;
полнотой программной поддержки.
Улучшение одного показателя часто ухудшает другой. Увеличение числа вычислительных блоков повышает требования к памяти и теплоотводу. Более емкая память может оказаться медленнее. Высокая пакетная производительность иногда достигается ценой роста задержки отдельного запроса.
Поэтому современные ускорители проектируют совместно с программным стеком. Архитектуру чипа, компилятор, библиотеки и набор поддерживаемых моделей приходится рассматривать как одну систему. Эффективную ИИ-платформу приходится проектировать как единую систему, одновременно учитывая архитектуру чипа, компилятор, библиотеки и целевые модели.
Родион Ерохин, руководитель направления разработки аппаратного обеспечения компании "Аквариус", отмечает, что эта проблема проявляется уже на уровне микроархитектуры:
"Тезис статьи о том, что "быстрый чип ждет данные", для нас особенно близок. Как разработчики собственных RISC-V ядер, мы видим эту проблематику не только на уровне системной интеграции, но и на уровне микроархитектуры. Когда настраиваешь ядро под управление ускорителем или периферийным ИИ, в первую очередь закладываешь в него специфику работы с памятью и интерфейсами ввода/вывода, понимая, что узким местом могут стать не вычислительные мощности, а система работы с запоминающими устройствами: интерконнект, контроллеры памяти и ПДП.
В дискуссии о софте для инференса часто упускается важный нюанс: программный стек не может быть эффективнее аппаратной платформы, с которой он работает. Даже самые современные алгоритмы и совершенное программное обеспечение не способны демпфировать промахи в аппаратной архитектуре - медленный доступ к памяти или неоптимальную топологию интерконнекта. Поэтому для российского рынка критически важен ко-дизайн: проектирование чипа, платформы и программного обеспечения как единой системы."
Почему создать "аналог GPU" недостаточно
Представим, что российская компания разработала собственный кристалл с матричными блоками и высокой заявленной производительностью. Даже успешное изготовление такого чипа не означает, что на нем можно сразу запускать современные модели.
Потребуется драйвер. Затем компилятор, который умеет преобразовывать граф модели в поддерживаемые операции. Понадобятся библиотеки оптимизированных ядер, средства профилирования, управление памятью, отладка распределенных вычислений, поддержка фреймворков машинного обучения, включая PyTorch, и форматов представления моделей, таких как ONNX. Необходимо обеспечить обновление этого стека по мере появления новых архитектур моделей и операторов.
Именно здесь находится одно из главных преимуществ NVIDIA. CUDA давно перестала быть только интерфейсом для программирования GPU. Вокруг нее сложилась экосистема библиотек, инструментов, документации и готовых оптимизаций. Разработчик может начать работу с моделью, а не с написания низкоуровневого кода для каждого слоя нейросети.
Создание альтернативы требует лет разработки и постоянной поддержки. Стоимость программной части может быть сопоставима со стоимостью проектирования самого кристалла. Поэтому на рынке конкурируют не отдельные микросхемы, а программно-аппаратные платформы.
Российские проекты дополнительно сталкиваются с ограниченным доступом к передовым техпроцессам, HBM, кремниевым интерпозерам и современным технологиям корпусирования. К этому добавляется рыночный риск: разработка занимает годы, а объем будущего спроса заранее неизвестен. Малые серии увеличивают цену готового устройства и затрудняют финансирование следующего поколения.
В такой ситуации попытка одновременно создать универсальный GPU, серверную платформу, компилятор и полную экосистему выглядит крайне рискованной. Более реалистичный подход - сначала выбрать нагрузку, где можно сузить требования.
Иными словами, специализация ускорителя сама по себе не является отклонением от основного пути развития вычислительной техники. Алексей Переверзев, доктор технических наук, проректор НИУ МИЭТ, формулирует этот тезис так:
"На протяжении многих лет вызовы для разработчиков и потребителей продуктов на основе ИИ решались экстенсивно на всех уровнях, путём наращивания мощностей дата-центров, увеличения количества вычислительных блоков и объёмов памяти в GPU и т.д. При этом требования моделей растут быстрее, чем развиваются аппаратные решения. Публикация поднимает важную тему для обсуждения, которую можно кратко сформулировать так: «Запуск и обучение ИИ выполнимы не только на GPU».
На Западе достаточное количество компаний уже вкладывают ресурсы в разработку проблемно-ориентированных ускорителей, которые призваны увеличить производительность и снизить накладные расходы на работу инфраструктуры, связанной с ИИ. Развитие данных направлений предполагает рост потребности в специализированных вычислителях, способных обеспечить приемлемый уровень производительности при высокой энергоэффективности, и на этом рынке у отечественных компаний есть серьезный потенциал для успеха."
Инференс: другая сторона ИИ
Обучение модели обычно получает больше внимания. Именно для обучения строят крупные кластеры, закупают тысячи ускорителей и измеряют производительность в огромных числах операций в секунду.
Но после обучения модель нужно использовать. Этот процесс называют выводом, или инференсом. И его аппаратные требования заметно отличаются.
В GPT-подобных трансформерах вывод условно делится на две стадии.
На стадии Prefill система обрабатывает входной запрос целиком. Операции хорошо распараллеливаются, поэтому здесь важна вычислительная производительность.
Затем начинается Decode - последовательная генерация ответа. Каждый новый токен зависит от предыдущих результатов. Ускоритель снова обращается к весам модели и KV-кэшу, после чего генерирует следующий токен. Эта стадия часто ограничивается уже не количеством арифметических блоков, а скоростью памяти.
Чем длиннее контекст и ответ, тем больше данных приходится хранить и перемещать. Ситуацию усложняют рассуждающие модели, которые выполняют дополнительные шаги перед формированием результата, и архитектуры Mixture of Experts, где веса распределены между множеством специализированных блоков.
Для пользователя это проявляется в двух понятных показателях:
время до появления первого токена;
скорость последующей генерации.
Для оператора сервиса добавляются другие метрики: количество одновременных запросов, задержка p95 и p99, стоимость токена, утилизация ускорителя и энергопотребление.
Универсальный GPU способен выполнять такие задачи, но не всегда делает это экономически оптимально. Особенно на стадии Decode, где дорогие вычислительные блоки могут простаивать в ожидании памяти. Поэтому на рынке появляются специализированные ускорители вывода, рассчитанные на низкую задержку, предсказуемое время ответа и уменьшение стоимости одного токена.
Для российских разработчиков это потенциально более доступная область. Устройство можно проектировать под ограниченный набор форматов данных и моделей, заранее определить требования к памяти. Специализация сокращает сложность аппаратуры, но требует точного понимания целевой нагрузки.
Этот переход к специализированным решениям, впрочем, не означает, что разработка инференс-платформы становится простой. Алексей Трощенко, Сбер:
"В статье верно отмечено, что чипы для инференса — более доступная ниша для российских разработчиков, чем универсальные ИИ-ускорители с поддержкой обучения. Действительно, обучение всегда было гораздо более сложной задачей — как в плане аппаратных требований, так и в части разработки ПО.
Сегодня парадигма меняется: из-за новых архитектур LLM, динамических нагрузок и жестких требований к задержке (latency) и высоких требований по утилизации железа, программное обеспечение для инференса стало таким же сложным, как и для обучения. Многие стартапы демонстрируют впечатляющие характеристики чипа, но терпят неудачу из-за неспособности построить полноценный стек ПО.
Таким образом, одной «железной» реализации уже недостаточно — критически важны инвестиции в программный стек. Тем не менее эти сложности оправданы взрывным ростом спроса на инференс-нагрузки, обусловленным массовым внедрением ИИ-агентов в реальные бизнес-процессы."
Память становится центральной частью архитектуры
В обычном компьютере память долго воспринималась как компонент рядом с процессором. В ИИ-системах она все чаще определяет архитектуру всего решения.
Современные ускорители используют HBM, состоящую из нескольких кристаллов DRAM, размещенных в одном стеке и подключенных к вычислительному кристаллу через широкий интерфейс. Такая конструкция обеспечивает высокую пропускную способность, но требует сложного производства и упаковки.
Проблема состоит в том, что размер весов, контекста и KV-кэша растет быстрее, чем доступная емкость и пропускная способность памяти. Увеличение контекста, применение MoE и рост количества одновременно обрабатываемых запросов требуют все большего объема. При этом добавление стеков HBM увеличивает площадь интерпозера и корпуса, усложняет компоновку, питание и охлаждение системы.
Разработчики рассматривают несколько направлений:
High Bandwidth Flash для хранения больших объемов редко изменяемых данных;
вычисления непосредственно в памяти;
размещение логики рядом с памятью;
трехмерную компоновку памяти и вычислительных кристаллов;
использование большой внутренней SRAM для сокращения обращений во внешнюю память;
новые интерфейсы и сетевые топологии с меньшей задержкой.
Ни одно из этих решений пока не является универсальным.
Flash-память дает большую емкость, но уступает DRAM по задержке и ресурсу записи. Вычисления внутри памяти сокращают перемещение данных, но усложняют программирование и ограничиваются тепловым бюджетом DRAM. Трехмерная компоновка повышает плотность интерфейсов, но затрудняет охлаждение.
Это важный вывод для отечественных проектов: разработка ИИ-ускорителя не должна начинаться с выбора количества вычислительных ядер. Сначала нужно понять, где будут храниться веса, как будет организован обмен, какой объем данных проходит через систему, сколько энергии тратится на их перемещение и то, что многие забывают - подтвердить модель и удобство программирования предложенной архитектуры.
Physical AI: когда задержка становится физической
В чат-боте задержка в несколько сотен миллисекунд может остаться незамеченной. В роботе или беспилотной машине такая задержка влияет на движение реального механизма.
Physical AI объединяет модели, которые получают данные из физического мира и формируют управляющие действия. Это могут быть промышленные роботы, автономные транспортные средства, интеллектуальные камеры, дроны и антропоморфные платформы.
Такая система включает несколько уровней:
Камеры, лидары, микрофоны, датчики положения и касания.
Обработку и объединение сенсорных данных.
Модель, которая оценивает ситуацию и планирует действие.
Контуры управления приводами.
Исполнительные механизмы.
Среду симуляции и обучения.
Высокоуровневое планирование обычно выполняется заметно реже, чем низкоуровневое управление приводами и обработка обратной связи. Поэтому одна крупная модель обычно не управляет всеми процессами напрямую. Архитектура получается иерархической: сложная модель отвечает за планирование, более компактные блоки управляют отдельными действиями, а жесткие контуры реального времени контролируют двигатели и безопасность.
В отличие от облачного ИИ, здесь недостаточно максимизировать число запросов в секунду. Система должна соблюдать ограничение по времени реакции, работать в доступном тепловом бюджете и сохранять функциональность при сбоях связи.
К российским разработкам в области Physical AI относятся антропоморфный робот "Грин" и модель Green-VLA от Сбера. VLA, или Vision-Language-Action, объединяет визуальную информацию, текстовые команды и физические действия робота.
Где здесь RISC-V
Фраза "ИИ-ускоритель на RISC-V" может создавать ошибочное впечатление, будто RISC-V сам по себе является аналогом GPU. Это архитектура набора команд, на основе которой можно создавать процессорные ядра разного назначения.
В ИИ-системе процессорные ядра на архитектуре RISC-V могут выполнять несколько ролей.
Практический смысл такой специализации Родион Ерохин связывает прежде всего с Edge AI:
"Использование RISC-V в качестве управляющих ядер и специализированных процессоров для вычислений на оконечных устройствах, без обращения к облаку - Edge AI - это не тренд, а прагматичный выбор. Открытая архитектура позволяет создавать специализированные решения под конкретные задачи: робототехнику, промышленную автоматизацию, бортовые комплексы. Здесь не нужны маркетинговые триллионы операций с плавающей запятой в секунду - пиковая вычислительная мощность - здесь нужны предсказуемая задержка, энергоэффективность и надежность. Именно в этих нишах российские разработчики могут быть конкурентоспособны."
Процессор для периферийного ИИ
Ядро с векторным расширением RVV может выполнять обработку звука, задачи компьютерного зрения, сенсорную аналитику и небольшие языковые модели. В более производительных устройствах оно работает совместно с NPU или матричным ускорителем.
Преимущество RISC-V состоит в возможности выбрать необходимые расширения и исключить лишние блоки. Это особенно полезно в устройствах с ограничением по площади, мощности и стоимости.
Контроллер внутри ускорителя
Большому ускорителю нужны небольшие процессоры, которые управляют DMA, очередями, конфигурацией блоков, безопасностью и диспетчеризацией задач. Для таких функций нет необходимости использовать тяжелое универсальное ядро.
Показательный пример - NVIDIA. Компания применяет собственные RISC-V-ядра в управляющих подсистемах GPU. В NVDLA (Deep Learning Accelerator) основные сверточные и матричные операции выполняет специализированная логика, RISC-V-ядра отвечают за управление выполнением, а векторное ядро обрабатывает часть операций, не передаваемых основным матричным и сверточным блокам.
Это хороший пример того, что роль RISC-V в ИИ не обязательно состоит в непосредственном умножении матриц. Иногда более важной задачей оказывается организация перемещения данных.
Процессор внутри вычислительной ячейки
В ускорителях Tenstorrent небольшие RISC-V-ядра размещены рядом с вычислительными блоками. Одни управляют маршрутизацией и передачей данных, другие - выполнением вычислений. Такая архитектура позволяет программировать поведение отдельных узлов и сокращать зависимость от централизованного управления.
В каждой вычислительной ячейке используются несколько 32-битных RISC-V-ядер, а обмен с внешней памятью минимизируется за счет локальной SRAM.
Хост-процессор
Хост-процессор загружает и подготавливает данные, формирует пакеты запросов, управляет памятью и распределяет задания между ускорителями.
Сегодня в этой роли доминируют x86 и ARM. Серверные RISC-V-решения только приближаются к необходимому уровню зрелости. Для конкуренции здесь недостаточно производительного ядра. Требуются многоядерная архитектура, большое количество каналов памяти, развитая когерентность кэшей, PCIe, CXL и полноценная серверная экосистема.
Поэтому хост-процессор на RISC-V следует считать долгосрочным направлением, а не ближайшей точкой входа российского рынка.
Какой проект имеет практический смысл
Реалистичная отечественная разработка должна начинаться не с формулировки "создадим процессор для ИИ", а с ответа на вопрос: какую конкретную задачу он должен решать лучше доступных альтернатив?
Это может быть анализ изображения на промышленной камере, распознавание речи без облака, обработка телеметрии, управление роботом или вывод заранее определенного семейства моделей.
После этого можно зафиксировать требования:
какие модели должны поддерживаться;
какие операции занимают основное время;
какой формат данных используется;
сколько памяти требуется;
какая допустима задержка;
какой установлен предел по мощности;
требуется ли работа в реальном времени;
сколько изделий планируется выпускать;
какой программный интерфейс нужен разработчику.
Такой подход позволяет определить архитектуру памяти и вычислительных блоков до начала проектирования кристалла.
Ускоритель для одной промышленной камеры и сервер для языковой модели требуют совершенно разных решений. В первом случае важны несколько ватт энергопотребления, предсказуемая задержка и длительная поддержка. Во втором - пропускная способность памяти, обработка множества запросов и стоимость одного токена.
Попытка объединить оба сценария в одном первом поколении почти неизбежно приведет к дорогому и недостаточно эффективному продукту.
Какие направления имеют практический смысл
Слово "ниша" иногда воспринимается как признание слабости. В микроэлектронике специализация часто является нормальной продуктовой стратегией.
Автомобильный контроллер, сетевой процессор, NPU для камеры и ускоритель языковой модели могут выпускаться меньшими объемами, чем универсальные CPU и GPU, но решать задачи, где заказчик готов платить за конкретные свойства: предсказуемую задержку, автономность, безопасность, длительный жизненный цикл и возможность адаптации.
Для России наиболее реалистично выглядят области, в которых одновременно выполняются несколько условий:
есть крупный или гарантированный заказчик;
заранее известна целевая нагрузка;
требуется интеграция с отечественным оборудованием;
универсальные зарубежные решения избыточны или неудобны;
программный стек можно ограничить определенным набором моделей;
ценность определяется не только пиковой производительностью.
К таким направлениям могут относиться промышленная автоматика, робототехника, системы наблюдения, беспилотный транспорт, телекоммуникационное оборудование и специализированные периферийные устройства. Для российских разработчиков промышленный и физический ИИ выглядят более реалистичными направлениями, чем прямое соперничество на рынке универсальных GPU.
Но даже узкая аппаратная платформа не будет востребована без программной поддержки. Заказчику нужен не кристалл, а работающий комплект:
плата или модуль;
драйверы;
компилятор;
библиотека операторов;
средства профилирования;
документация;
примеры моделей;
механизм обновления;
техническая поддержка.
Поэтому успех проекта следует измерять не фактом изготовления кремния, а количеством прикладных систем, в которых он стабильно выполняет полезную нагрузку.
Вместо вывода
Гонка аппаратных платформ для ИИ становится сложнее. Пиковая вычислительная производительность продолжает расти, но все большую часть стоимости и инженерной сложности формируют память, упаковка, интерфейсы и программное обеспечение.
При этом рынок оставляет пространство для специализированных решений. Инференс, Edge AI и Physical AI предъявляют требования, которые не сводятся к максимальному числу FLOPS. Для них важны время реакции, потребляемая мощность, надежность, локальная обработка данных и совместимость с конкретным оборудованием.
Процессоры и управляющие ядра на архитектуре RISC-V могут стать частью такой платформы: выполнять вычисления, управлять специализированными блоками, перемещать данные или выступать в роли локального процессора. Открытая архитектура упрощает адаптацию под конкретную задачу, но не заменяет память, техпроцесс, компилятор и продуктовую стратегию.
Вопрос поэтому состоит не в том, способна ли Россия сделать "свой GPU". Важнее сформулировать: какая нагрузка имеет приоритетное значение для критической информационной инфраструктуры и страны в целом. Именно для таких нагрузок важно в первую очередь разработать законченный программно-аппаратный стек, обеспечив снижение задержек, сокращение затрат, повышение энергоэффективности и независимость от зарубежных платформ. И эта задача вполне реализуема в ближайшем будущем.
Краткий глоссарий
FLOPS - количество операций с плавающей запятой, которые вычислительная система может выполнить за секунду. Используется для оценки пиковой арифметической производительности, но не учитывает ограничения памяти, интерфейсов и программного стека.
HBM, High Bandwidth Memory - память с высокой пропускной способностью. Несколько кристаллов DRAM объединяются в стек и размещаются рядом с ускорителем, что сокращает длину соединений и повышает скорость обмена данными.
KV-кэш, Key-Value Cache - область памяти, где при работе трансформера сохраняются промежуточные данные механизма внимания. Это позволяет не пересчитывать уже обработанный контекст при генерации каждого следующего токена.
Mixture of Experts, MoE - архитектура нейросети, в которой вместо одного общего вычислительного блока используется множество специализированных "экспертов". Для каждого входа активируется только часть из них, что позволяет увеличивать размер модели без пропорционального роста числа вычислений.
NPU, Neural Processing Unit - специализированный вычислительный блок для операций нейронных сетей, прежде всего матричных и тензорных вычислений. Обычно применяется совместно с CPU и другими ускорителями.
DMA, Direct Memory Access - механизм прямой передачи данных между памятью и периферийными или вычислительными блоками без постоянного участия центрального процессора.
RVV, RISC-V Vector Extension - векторное расширение архитектуры RISC-V. Позволяет одной командой обрабатывать массивы данных и используется в задачах машинного обучения, цифровой обработки сигналов и научных вычислений.
CXL, Compute Express Link - высокоскоростной интерфейс для соединения процессоров, ускорителей и устройств памяти с поддержкой когерентного доступа к данным.
Prefill - первая стадия вывода языковой модели, на которой обрабатывается весь входной запрос. Хорошо распараллеливается и чаще ограничивается вычислительной производительностью.
Decode - стадия последовательной генерации ответа по одному токену. Часто ограничивается пропускной способностью памяти и скоростью доступа к KV-кэшу.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.