Всем очевидно: индустрия ИИ стремительно развивается. Но здесь появляется одно гигантское слоноподобное НО. В последнее десятилетие лидеры ИИ предпочли развиваться экстенсивно - то есть, например, ЛЛМ максимизируют объём моделей. Это в свою очередь тянет за собой целую цепочку гигантских затрат: от электростанций до передовых числодробилок. Из последнего - xAI готовится запустить вычислительную фабрику мощностью 1 ГВт с 500-ми тысячами видеоускорителей! Можно по разному относиться к хайпу вокруг ИИ, но очевидно одно - есть много желающих вкладываться по полной программе в эти технологии. И, возможно, впоследствии экстенсивный рост перейдёт в интенсивный, то есть количество перейдёт в качество. Проблема только в том, что на низком уровне - уровне железа - техника подходит к физическим пределам. И если не сменить парадигму и физическую основу, то поддерживать развитие индустрии никакими средствами кроме масштабирования не получится.

Стена проблем.

Современные вычисления сталкиваются с фундаментальными ограничениями. Рост производительности процессоров не подчиняется законам Мура в привычном виде ещё с 2006 года: транзисторы приближаются к физическим пределам, энергопотребление растёт, а выигрыш от тактовой частоты тогда же перестал быть главным драйвером.

Сейчас заявленные к следующему переходу технологии уже обозначаются в ангстремах: 16A, 14A. Даже если учесть, что реальные размеры деталей транзисторов на самом деле порядка 30 нм, физический предел уже почти достигнут.

Индустрия чипов переключилась на проталкивание многоядерных решений в массы. Но выигрыш достигается не всегда. В частности отдельное приложение с отдельным потоком далеко не всегда способно использовать возможности многопоточности. Здесь есть теоретический предел - закон Амдала. К тому же, написание многопоточных приложений разительно (в 5-7 раз) сложнее линейных.

СБИС (сверхбольшая интегральная схема)
СБИС (сверхбольшая интегральная схема)

Физические ограничения транзисторных чипов также порождают такие проблемы:

  1. Перегрев. И как следствие необходимость отвода большого количества тепла.

  2. Высокое энергопотребление, которое перестало снижаться достаточными темпами после 2006 года. Что выливается в гигантские затраты на электроэнергии в вычислительных центрах.

  3. Тактовая природа вычислений - переключение состояний чипа в течение одного тактового периода, минимального периода, за который может произойти атомарная операция. Проблемы сейчас с уменьшением этого периода ниже обычных значений в

    \frac{1}{\text{3 ГГц}}
  4. Ограничения на длину электронных цепей, обусловленные всеми перечисленными факторами, вносят дополнительные сложности с разработкой сложных вычислительных схем. По этой причине в своё время было решено отказаться от архитектуры CISC. По этой же причине массовое использование функций наподобие логарифма (а иногда даже простого целочисленного деления) дорого и нецелесообразно в массово-параллельных схемах.

  5. Указанные факторы снижают пропускную способность устройств (throughput), не позволяя ВЦ эффективно масштабировать нагрузку.

Пространство-время в информатике

Для специализированных применений, наподобие блокчейна или специальных типов ИИ, возможно создавать заказные решения в виде ASIC-ов. Но что-то покупка крупнейшего их производителя - Altera - не помогла Intel.

Нужно заметить, что самые продвинутые ИИ-технологии основаны на вычислениях матриц, то есть использовании SIMD-подхода. Это вполне понятный и очевидный метод масштабирования вычислений "вширь" - операции проводятся широким фронтом с использованием разных SSEx, AVX или GPGPU, обрабатывая, например, сразу всю строку матрицы. Это увеличивает пропускную способность, но недостаточно, и узкое место в виде медленного доступа к памяти здесь усугубляет ситуацию.

Использование ASIC - это на самом деле другой подход к развёртке вычислений - в длину. То есть мы здесь конвертируем исполнение программы из временного измерения в протяжку тех же вычислений по всей цепочке специальной схемы ASIC-а, то есть по длине схемы, последовательности вентилей. Длинная цепочка вентилей позволяет нам экономить время, потому что за один такт выполняется гораздо больше операций, возможно даже получается конечный результат. При этом цепочка в итоге может всё же не укладываться в один такт, но конвейерное её применение позволяет добиться высокого throughput.

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

Вот здесь можно посмотреть краткую интерпретацию пространства-времени в compusier science (in en, fr, de).

О преобразовании пространства во время и обратно есть фантастический рассказ-хоррор.

Развёртка в длину

Тут надо отдельно отметить, что вычисления такой развёртке в длину легче подвергаются тогда, когда они являются функциональными и чистыми в функциональном смысле, то есть не привносят сторонних эффектов. Конечно результат не обязан быть неким примитивным значением, типа да/нет. Результаты вполне себе сносно образуют агрегаты, например в виде списков в Лиспе - которые суть тоже чистые функции.

Когда-то, на заре своей компьютерной грамотности, я посещал спецкурс по олимпиадному программированию в одном из СУНЦ (физматшколе). Понятно, писали там многие по-школьному, на Паскале. Но это не суть важно. Так вот препод задал задачу: нужно реализовать какую-то простую программу (что-то вроде HelloWorld), но используя всего две ячейки памяти (т.е. 2 переменных). Все недоумевали, но, оказывается, решение вполне возможно (даже на Паскале). Это был пример развёртывания программы во времени (или в длину - тут как смотреть) - т.е. пространство (доступная память) сжималось в ширину, но было доступно неограниченное пространство для самого кода программы, и он становился длиннее, а значит либо потенциально дольше выполнялся - за большее количество тактов, либо выполнялся на более сложной и длинной схеме.

Вообще есть широко известный математический конструкт, который вполне иллюстрирует размен вычислительного пространства на время. Это машина Тьюринга - основное доказательство вычислимости того или иного объекта. Как известно она представлена небольшим устройством, которое считывает и изменяет бесконечную ленту, основываясь на небольшом количестве (около десятка) правил. Если считать правила частью механизма машины, а ленту - алгоритмом, то по сути у этой модели тоже есть лишь минимальное пространство - ячейка текущего состояния.

В некотором смысле можно представить, что адресное поле данных - это ось пространства, а адресное поле команд или кода - это ось времени, и таким образом счётчик команд - это координата времени.

Предвычисления

Чуть позже у меня возникала идея свести исполнение программы к вычислению некой обобщённой функции. В этом случае вся программы представляется как некая функция-отображение из пространства входных данных (параметров) в пространство выходных данных - некий результирующий агрегат. В чём-то это похоже на функциональщину, но здесь выходная функция не задаётся кодом алгоритма, она как бы уже предварительно вычислена на этапе компиляции, и нужно лишь подставить параметры - входные данные программы. Пространство параметров при этом понимается в самом общем виде, мы учитываем все возможные интервалы значений по всем измерениям и рассматриваем их декартово произведение. Какие именно интервалы значений учитывать - задаёт исходный код алгоритма, а именно каждое условное ветвление разбивает интервал соответствующего параметра на части. Таким образом реализуется итоговая предвычисленная функция, значение которой зависит только от входных данных. С идеей такого подхода к компиляции я в своё время даже обратился к известному в узких кругах специалисту - Голосову И.С., бывшему тогда моим шефом, в надежде получить совет или критику. В итоге директор, опытный в таких вопросах - разборе разных идей и предложений - за 30 секунд накидал мне 4 или 5 критических замечаний, которые я даже запомнить все не успел. Помню лишь самое серьёзное - проблемы синхронизации и в целом многопоточности, о том как оно будет ложиться на такой подход. И проблема вполне понятная - в функциональном программировании, например, всё хорошо работает только в случае чистых функций.

Уже много позже я осознал, что моя "блестящая" идея предвычисления - по сути вариант реализации кэша, и, насколько я знаю, в том же Spring-е он может быть параметризован, т.е. по сути быть такой вот предвычисленной функцией.

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

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

Всё довольно просто

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

Фотоника

Ну и вот, наконец, мы добрались до самого главного. При чём здесь фотоника?

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

Конечно же главным преимуществом фотоники (в чистом виде) является молниеносная скорость - как скорость распространения сигнала, так и скорость переключения (по сути тоже скорость света). Состояние чистой фотонной системы меняется не в конце такта, а моментально, реагирование на изменение сигнала происходит мгновенно. Наверняка, это может найти применение в системах реального времени.

Одним из недостатков на текущий момент являются более крупные габариты элементов схемы по сравнению с современными СБИС.

Основным же недостатком является трудность сохранения состояния. Есть некоторые механизмы, способные это обеспечить, но непонятно их быстродействие и удобство интеграции с другими структурами (вентилями). То есть, похоже, что оперативной памяти нет в принципе, а существующие ячейки хранения больше напоминают конфигурацию ПЛИС, возможно с большим быстродействием. Теперь вам понятно, почему я рассказывал о способах вычислений, требующих минимального объёма памяти, то бишь сжатия пространства данных в пользу растяжения длины схемы - с чем в случае фотоники проблем особых нет, или растяжения данных во времени - в этом случае данные будут подаваться на вход последовательно во времени. Надо сказать, что фотоника предполагает использование в том числе и широких форматов данных с их параллельной обработкой - по той простой причине, что волноводы и вентили могут обрабатывать свет разных цветов (т.е. длин волн) одновременно.

Ограниченное хранение данных налагает особые свойства на вычислительную систему на основе фотоники. В этом смысле они будут больше похожи на ASIC-и или в лучшем случае на ПЛИСы. И соответственно программирование такой системы осуществляется наподобие проектирования ПЛИС схемы, алгоритмы преобразуются в нечто наподобие кода на Verilog или VHDL, и в итоге код будет зашит в схему. То есть фотоника - это пока оперирование на уровне железа, с предопределёнными параметрами. Тем не менее, такой режим вполне подходит для режима инференса ИИ, причём с гигантской пропускной способностью. Многие проблемы ИИ таким образом это даже может решить.

Есть некоторые компании, пытающиеся развивать фотонику - Lightelligence, Light Matter. Ну и конечно направление Photonics в компании NVidia, которая купила Mellanox, уже применяет фотонику не только для сетевых интерконнектов, но и внутри своих стоек.


PS. Рекомендую вот этот канал @AnastasiInTech (не мой, на английском) для начального просвещения по теме фотоники / оптоэлектроники