Когда речь заходит о производительности GPU, большинство смотрит на одно и то же - тактовую частоту, количество ядер CUDA, пиковые терафлопсы. Понять этот рефлекс несложно: десятилетиями нас учили, что мощный процессор - это быстрый процессор. Но обучение трансформерных моделей живёт по другим законам. Узкое место прячется совсем в другом месте, и обнаружить его можно только если честно взглянуть на то, как именно данные движутся внутри чипа.

Проблему называют "memory wall" - стена памяти. Вычислительные блоки росли в производительности куда быстрее, чем подсистемы памяти успевали за ними. GPU научился перемножать матрицы с головокружительной скоростью, но данные для этих умножений поступают из памяти, которая отстала на несколько поколений. Результат предсказуем: тензорные ядра простаивают, ожидая, пока нужные веса наконец доберутся из DRAM.

Арифметическая интенсивность - ключ к пониманию узкого места

Чтобы понять, почему пропускная способность памяти решает исход обучения, нужно разобраться с одной концепцией - арифметической интенсивностью. Это отношение количества вычислительных операций к объёму данных, которые нужно переместить из памяти ради этих операций. Единица измерения проста: флопс на байт.

Если у GPU, например, 1000 терафлопс вычислительной мощности и 3,35 терабайта в секунду пропускной способности памяти - как в H100 SXM, - то его критическая точка составляет примерно 300 флопс на байт. Любой алгоритм с арифметической интенсивностью ниже этого порога ограничен пропускной способностью памяти, а не вычислительной мощью. Тензорные ядра при этом голодают.

Декодирование в трансформерных моделях - это именно такой случай. При генерации каждого нового токена модель загружает все свои веса из памяти, выполняет относительно небольшое число операций и возвращается за следующей порцией данных. Для Llama 2 70B арифметическая интенсивность при автодекодировании составляет порядка 1-2 флопс на байт - в сотни раз ниже критической точки современных GPU. Иными словами, чип может умножать матрицы в 300 раз быстрее, чем память успевает их подавать. Дополнительные тензорные ядра здесь просто не помогут - система уже упёрлась в другой потолок.

Оценить арифметическую интенсивность конкретного слоя модели можно с помощью профилировщика NVIDIA Nsight Compute:

ncu --metrics \
  sm__throughput.avg.pct_of_peak_sustained_elapsed,\
  dram__throughput.avg.pct_of_peak_sustained_elapsed \
  python train.py

Два числа в выводе расскажут всё: если утилизация DRAM близка к 100%, а SM (вычислительные блоки) загружены на 30-40%, модель ограничена памятью. Увеличение тактовой частоты или добавление тензорных ядер не изменит картину ни на йоту.

Что внутри HBM - архитектура, которая меняет правила

High Bandwidth Memory появилась как прямой ответ на стену памяти. Ключевая идея - не гнаться за частотой, а расширить шину данных до предела, физически невозможного при традиционной компоновке.

GDDR6, которая стоит на потребительских и профессиональных GPU вроде RTX 6000 Ada или L40S, использует шину шириной 256-384 бита. Чипы памяти припаяны к PCB по периметру вокруг вычислительного кристалла. Чтобы нарастить пропускную способность, производители поднимают тактовую частоту - GDDR6X работает на скоростях до 21 гигабит в секунду на пин. Физический предел этого подхода виден невооружённым глазом: сигнальные линии длиной в несколько сантиметров, потери в дорожках, ограниченное число контактов по периметру кристалла.

HBM переворачивает саму геометрию задачи. Несколько слоёв DRAM складываются вертикально, соединяются через сквозные отверстия в кристалле - TSV (through-silicon vias) диаметром около 5-10 микрон, - и размещаются прямо рядом с вычислительным чипом на кремниевом интерпозере. Расстояние между GPU и стеком памяти сокращается с сантиметров до миллиметров. Шина при этом расширяется до 1024 бит на один стек HBM3 - и это только один стек.

Результат такой переупаковки - качественный скачок. HBM3 на H100 обеспечивает 3,35 терабайта в секунду через пять стеков и шину 5120 бит. GDDR6 на L40S - около 864 гигабайт в секунду при 384-битной шине. Разница - четырёхкратная при сопоставимом техпроцессе.

Но пропускная способность - только часть истории. Поскольку сигнальные линии в HBM измеряются микронами, а не сантиметрами, напряжение питания ввода-вывода падает с 1,35 вольта у GDDR6X до 0,4 вольта у HBM3. Это означает кратно меньшие потери мощности на каждый переданный бит. HBM3 обеспечивает около 141 гигабайта в секунду на ватт - значительно выше, чем у GDDR6 при сопоставимых задачах.

CoWoS - упаковка, без которой HBM невозможен

Одна техническая деталь объясняет, почему HBM не появилась в GPU раньше и почему она до сих пор остаётся редкостью в потребительском сегменте. Шина 1024 бит - это примерно 1700 сигнальных линий на один стек. Такую плотность разводки невозможно реализовать на обычной PCB - сигналы просто потеряются в паразитных ёмкостях и перекрёстных помехах.

Решение - кремниевый интерпозер и упаковочная технология CoWoS (Chip-on-Wafer-on-Substrate), которую разработала TSMC. GPU-кристалл и стеки HBM монтируются на общую кремниевую подложку с металлической разводкой в несколько уровней с субмикронным шагом. Эта подложка обеспечивает те самые тысячи сигнальных линий на минимальном расстоянии. Технология сложная и дорогая: один интерпозер для H100 площадью около 858 квадратных миллиметров стоит значительную долю от итоговой стоимости всей карты.

NVIDIA зарезервировала, по некоторым оценкам, более 70% мощностей TSMC по CoWoS-L на 2025 год, что наглядно показывает - упаковочные мощности сейчас не менее стратегически важны, чем сам технологический процесс.

Конкретные цифры для конкретных задач

Сравнение HBM и GDDR6 имеет смысл только в контексте реальных задач, поэтому стоит говорить о конкретных числах, а не общих словах.

При обучении GPT-подобных моделей на пакетах данных достаточного размера операция умножения матриц поднимает арифметическую интенсивность выше 300 флопс/байт - и тогда вычислительная мощь H100 раскрывается в полную силу, а разрыв с GDDR6-картами сглаживается. Но при автодекодировании, при работе с длинным KV-кешем или при файнтюнинге с малым батчем ситуация разворачивается иначе. Операция AllReduce при синхронизации весов, загрузка слоя attention с 128 тысячами токенов контекста, инференс с батчем в единицу - все эти режимы ограничены памятью. Здесь L40S с GDDR6 уступает H100 с HBM3 не пропорционально разнице в тензорных флопсах, а пропорционально разнице в пропускной способности памяти.

Оценить роофлайн для конкретного GPU и конкретного слоя модели:

import subprocess

def estimate_roofline(gpu_tflops, mem_bandwidth_tbps, model_params_b):
    # Вычислительный потолок (TFLOPS)
    compute_roof = gpu_tflops * 1e12  # в FLOPS
    # Потолок памяти (для авторегрессионного декодирования)
    # Каждый токен загружает все параметры модели (2 байта на параметр в BF16)
    mem_bytes_per_token = model_params_b * 1e9 * 2
    mem_limited_tokens_per_sec = (mem_bandwidth_tbps * 1e12) / mem_bytes_per_token
    
    print(f"Compute roof: {compute_roof:.2e} FLOPS")
    print(f"Memory-limited throughput: {mem_limited_tokens_per_sec:.0f} tokens/sec")
    print(f"Critical intensity: {compute_roof / (mem_bandwidth_tbps * 1e12):.1f} FLOPS/byte")

estimate_roofline(gpu_tflops=989, mem_bandwidth_tbps=3.35, model_params_b=70)  # H100 SXM5
estimate_roofline(gpu_tflops=733, mem_bandwidth_tbps=0.864, model_params_b=70) # L40S (GDDR6)

Где GDDR6 остаётся разумным выбором

Было бы нечестно представлять HBM как безусловно лучший выбор для любого сценария. У GDDR6 есть конкретные преимущества, которые делают карты вроде L40S вполне оправданным решением для определённых задач.

Первое и главное - цена. H100 стоит в восемь-десять раз дороже L40S при примерно четырёхкратном превосходстве в пропускной способности памяти. Для задач батчевого инференса со средними размерами контекста, для файнтюнинга небольших моделей, для разработки и экспериментов разница в стоимости перевешивает разницу в производительности. RTX 6000 Ada с 48 гигабайтами GDDR6 и 960 гигабайтами в секунду закрывает огромный пласт реальных производственных задач.

Второе - объём памяти при меньших затратах. GDDR6 проще масштабировать до большого объёма VRAM, поскольку чипы памяти просто добавляются на PCB. L40S с 48 гигабайтами позволяет разместить целиком модели, которые не умещаются в 24-гигабайтный H100, хотя H200 с 141 гигабайтом HBM3E эту арифметику меняет.

Третье - устойчивость поставок. HBM производят три компании - SK Hynix, Samsung и Micron, - и все три работают на пределе мощностей. Цены на HBM с 2023 по 2025 год выросли более чем на 60%. GDDR6 - стандартный продукт с куда более широкой производственной базой.

HBM4 и будущее, где граница между памятью и вычислениями стирается

Гонка не заканчивается. Blackwell B200 несёт 192 гигабайта HBM3E с пропускной способностью 8 терабайт в секунду - вдвое больше H100. Архитектура Rubin с HBM4 обещает 13-15 терабайт в секунду на чип и суммарно 260 терабайт в секунду в 72-чиповой конфигурации NVL576.

Но интереснее самих цифр - концептуальное направление, в котором движется отрасль. HBM4 планирует использовать активный интерпозер вместо пассивного: логика обработки данных начнёт переезжать в саму память. Это называют "processing-in-memory" или PIM, и идея здесь проста до элегантности - если данные не успевают добраться до вычислителя, пусть вычислитель переедет к данным. Границы между памятью, кешем и вычислительным блоком начинают размываться, и через несколько лет разговор про "HBM versus GDDR6" может смениться разговором про принципиально другую архитектуру.

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