Введение: почему CPU-инференс снова актуален
Стоимость GPU-инстансов в облаке продолжает расти, а доступность топовых ускорителей остается ограниченной. Для многих серверных нагрузок CPU-инференс стал экономичной альтернативой: процессоры Intel Sapphire Rapids с набором инструкций AMX показывают ускорение на 60-65% по сравнению с предыдущим поколением Ice Lake на одиночных предсказаниях NLP-моделей. Задержка при этом остается в пределах однозначных миллисекунд даже для длинных последовательностей.
В этом материале разбираем практический сценарий: запускаем DistilBERT, BERT и RoBERTa на EC2-инстансах c6i (Ice Lake) и r7iz (Sapphire Rapids), оптимизируем модели через Hugging Face Optimum Intel и измеряем реальную производительность. Вы получите готовый бенчмарк-скрипт и критерии, по которым можно оценить, подходит ли CPU-инференс для вашей задачи.
Если вы ищете способы снизить затраты на обслуживание NLP-моделей без потери качества предсказаний, этот разбор даст конкретные цифры и воспроизводимую методику. Для более широкого контекста по CPU-инференсу LLM смотрите разбор Project Zero, где чистый C99 движок выжимает 36 токенов/с на Xeon.
Критерии выбора: когда CPU предпочтительнее GPU
CPU-инференс выигрывает в трех сценариях: небольшие модели, одиночные запросы с низкой задержкой и ограниченный бюджет. GPU оправдан для больших батчей и моделей на миллиарды параметров, но для трансформеров уровня BERT-base разница в стоимости часто оказывается решающей.
Стоимость и масштабируемость
Сравнение цен на облачные инстансы показывает: CPU-серверы с Sapphire Rapids стоят на 40-70% дешевле GPU-инстансов с сопоставимой задержкой на одиночных запросах. Для сервисов с неравномерной нагрузкой CPU-пул масштабируется горизонтально без дорогих GPU-резерваций. При этом вы не платите за простаивающие тензорные ядра, когда нагрузка падает.
Практический пример: инференс DistilBERT на c6i.large обходится примерно в $0.10 в час, тогда как минимальный GPU-инстанс с A10G стартует от $1.01 в час. Для 100 тысяч предсказаний в день разница в счете достигает сотен долларов в месяц.
Размер модели и тип нагрузки
Модели до 300-500 миллионов параметров отлично ложатся на CPU. DistilBERT (66M), BERT-base (110M) и RoBERTa-base (125M) обрабатывают одиночные последовательности за 3-8 мс на Sapphire Rapids. Батчинг на CPU менее эффективен, чем на GPU, поэтому для потоковой обработки с большими батчами GPU сохраняет преимущество.
Нагрузка с преобладанием одиночных запросов, например API для классификации текста или NER, идеальна для CPU. Если ваш сервис обрабатывает запросы по одному с жесткими требованиями к задержке, Sapphire Rapids с AMX даст миллисекундный отклик без GPU-оверхеда на передачу данных.
Intel Sapphire Rapids и AMX: что нового
Sapphire Rapids - серверная архитектура Intel, которая принесла два ключевых улучшения для инференса: больше ядер и набор инструкций AMX. По сравнению с Ice Lake, где использовались AVX-512, новый чип выполняет матричные операции значительно эффективнее.
AMX: инструкции для матричных вычислений
AMX (Advanced Matrix Extensions) - это специализированные инструкции для ускорения матричного умножения, которое доминирует в трансформерах. Вместо эмуляции матричных операций через векторные инструкции AVX-512, AMX использует выделенные регистры-тайлы размером до 1 КБ и аппаратные блоки для операций INT8 и BF16.
Для NLP-моделей это означает: линейные слои и attention-механизмы выполняются в 2-4 раза быстрее по сравнению с AVX-512 на Ice Lake. Optimum Intel автоматически использует AMX при наличии совместимого процессора, без ручной переработки модели.
Optimum Intel: оптимизация моделей Hugging Face для CPU
Optimum Intel - расширение экосистемы Hugging Face, которое адаптирует модели под аппаратные возможности Intel CPU. Библиотека работает поверх PyTorch и Transformers, добавляя оптимизации без изменения архитектуры модели.
Ключевые возможности Optimum Intel
Библиотека предоставляет три основных механизма ускорения. Квантизация INT8 снижает размер модели и ускоряет вычисления за счет AMX-инструкций. Графовые оптимизации устраняют избыточные операции в вычислительном графе. Интеграция с PyTorch позволяет использовать оптимизированные ядра для линейных слоев и attention.
Для моделей DistilBERT, BERT и RoBERTa достаточно вызвать OVModelForSequenceClassification или применить optimum.intel.INCQuantizer, чтобы получить квантованную версию с минимальной потерей точности. Подробнее о сравнении CPU-платформ для AI-нагрузок читайте в тестах Xeon Gold против EPYC Rome.
Практический тест: сравнение Ice Lake и Sapphire Rapids
Для проверки реального выигрыша мы запустили одинаковые модели на двух типах EC2-инстансов: c6i.2xlarge на Ice Lake и r7iz.2xlarge на Sapphire Rapids. Оба инстанса имеют 8 vCPU и 16 ГБ RAM, что обеспечивает сопоставимые условия.
Методика и условия тестирования
Тестировались три модели: DistilBERT-base-uncased, BERT-base-uncased и RoBERTa-base. Для каждой модели измерялась задержка одиночного предсказания на последовательностях длиной 128, 256 и 512 токенов. Каждый замер повторялся 100 раз после прогревочных итераций, фиксировалось среднее значение.
Версии библиотек: PyTorch 2.0.1 с поддержкой AMX, Transformers 4.30.2, Optimum Intel 1.8.0. Модели конвертировались в INT8 через Optimum Intel перед тестированием.
Результаты: ускорение и задержки
| Модель | Длина последовательности | Ice Lake (c6i), мс | Sapphire Rapids (r7iz), мс | Ускорение |
|---|---|---|---|---|
| DistilBERT | 128 | 5.2 | 3.1 | 40% |
| DistilBERT | 512 | 9.8 | 6.4 | 35% |
| BERT-base | 128 | 11.5 | 4.2 | 63% |
| BERT-base | 512 | 18.7 | 7.1 | 62% |
| RoBERTa-base | 128 | 12.3 | 4.5 | 63% |
| RoBERTa-base | 512 | 19.2 | 7.4 | 61% |
Для BERT и RoBERTa ускорение стабильно держится на уровне 60-65% на всех длинах последовательностей. DistilBERT показывает меньший прирост из-за меньшего числа матричных операций, но все равно выигрывает 35-40%. Задержка на Sapphire Rapids остается ниже 10 мс даже для 512 токенов, что достаточно для интерактивных сервисов.
Пропускная способность при батче из 8 запросов на Sapphire Rapids достигает 120-150 предсказаний в секунду для BERT-base, что покрывает потребности большинства API-сервисов. Для сравнения с GPU-инференсом на RTX 5070 смотрите разбор Falcon3-10B в 1.58 бита.
Настройка окружения и запуск бенчмарка
Воспроизведение тестов требует нескольких шагов: установка PyTorch с поддержкой AMX, настройка Optimum Intel и запуск скрипта измерения задержки.
Установка зависимостей
pip install torch==2.0.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install transformers==4.30.2 optimum[openvino]==1.8.0
pip install datasets evaluateДля проверки поддержки AMX выполните в Python:
import torch
print(torch.backends.cpu.get_cpu_capability())Если вывод содержит AMX, процессор поддерживает инструкции и Optimum Intel будет их использовать автоматически.
Пример бенчмарк-скрипта
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from optimum.intel import OVModelForSequenceClassification
import torch
import time
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = OVModelForSequenceClassification.from_pretrained(
model_name, export=True, compile=False
)
text = "This is a sample input for benchmarking." * 20
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
# Warmup
for _ in range(10):
with torch.no_grad():
model(**inputs)
# Benchmark
latencies = []
for _ in range(100):
start = time.perf_counter()
with torch.no_grad():
model(**inputs)
latencies.append((time.perf_counter() - start) * 1000)
print(f"Average latency: {sum(latencies) / len(latencies):.2f} ms")Скрипт загружает модель через Optimum Intel, выполняет 10 прогревочных итераций и измеряет среднюю задержку 100 предсказаний. Для переключения между моделями измените model_name на distilbert-base-uncased или roberta-base.
Ограничения и выводы
Результаты получены на конкретных EC2-инстансах и могут отличаться на другом оборудовании. Ускорение зависит от модели, длины последовательности и версии библиотек. Для моделей с преобладанием нелинейных операций прирост от AMX будет меньше, чем для трансформеров с большим числом матричных умножений.
CPU-инференс на Sapphire Rapids с Optimum Intel - практичная альтернатива GPU для NLP-моделей уровня BERT. Ускорение 60-65% по сравнению с Ice Lake и задержки ниже 10 мс делают этот стек пригодным для продакшн-сервисов с одиночными запросами. Если ваша нагрузка состоит из небольших трансформеров и вы хотите сократить инфраструктурные расходы, начните с теста на r7iz-инстансе и сравните с текущим GPU-решением.
Для более глубокого погружения в CPU-оптимизации LLM рекомендую разбор архитектуры для 100 токенов/с на 10B модели и анализ GLM-5.2 на 8× GB10.