Оглавление

Совместная работа Intel и Hugging Face показала, что переход на новые виртуальные машины Google Cloud C4 с процессорами Intel Xeon 6 дает существенное улучшение производительности для работы с открытой языковой моделью GPT OSS. Результаты бенчмарков демонстрируют увеличение общей стоимости владения на 70% по сравнению с предыдущим поколением C3.

Технические преимущества нового оборудования

Новые виртуальные машины Google Cloud C4 на базе процессоров Intel Xeon 6 (кодовое имя Granite Rapids) показали впечатляющие результаты в тестировании текстовой генерации с моделью GPT OSS. Ключевые показатели улучшения:

  • Пропускная способность TPOT на vCPU/доллар выросла в 1,4-1,7 раза
  • Снижение стоимости за час работы по сравнению с C3
  • Общее улучшение TCO на 70%

Архитектурные особенности GPT OSS

GPT OSS представляет собой открытую модель смеси экспертов (Mixture of Experts), выпущенную OpenAI. Архитектура MoE использует специализированные подсети «экспертов» и «управляющую сеть» для определения, какие эксперты использовать для конкретного входного сигнала. Это позволяет эффективно масштабировать емкость модели без линейного роста вычислительных затрат.

Даже при большом количестве параметров активируется лишь небольшое подмножество экспертов на токен, что делает инференс на CPU вполне реализуемым. Intel и Hugging Face совместно внедрили оптимизацию выполнения экспертов (PR #40304), которая устраняет избыточные вычисления.

Методология тестирования

Бенчмарки проводились в контролируемых условиях с повторяемой рабочей нагрузкой генерации текста для изоляции архитектурных различий между платформами. Основное внимание уделялось устойчивому декодированию (задержка на токен) и нормализованной сквозной пропускной способности при увеличении размера пакета.

Конфигурация тестирования

  • Модель: unsloth/gpt-oss-120b-BF16
  • Точность: bfloat16
  • Задача: Генерация текста
  • Длина входных данных: 1024 токена
  • Длина выходных данных: 1024 токена
  • Размеры пакетов: 1, 2, 4, 8, 16, 32, 64

Тестовое оборудование

  • Экземпляр C3: процессор 4-го поколения Intel Xeon (SPR), 172 vCPU
  • Экземпляр C4: процессор Intel Xeon 6 (GNR), 144 vCPU

Создание виртуальных машин

Конфигурация C3

Для создания экземпляра с 176 vCPU необходимо посетить Google Cloud Console и выполнить следующие шаги:

  1. Выбрать C3 в конфигурации машины и указать тип машины как c3-standard-176
  2. Настроить платформу CPU и включить all-core turbo для стабильности производительности
Настройки конфигурации виртуальной машины C3 в консоли Google Cloud
Источник: huggingface.co

Далее необходимо настроить вкладки ОС и хранилища:

Настройки операционной системы и хранилища виртуальной машины C3
Источник: huggingface.co

Конфигурация C4

Аналогичная процедура для создания экземпляра с 144 vCPU:

  1. Выбрать C4 в конфигурации машины и указать тип машины как c4-standard-144
  2. Настроить платформу CPU и включить all-core turbo
Настройки конфигурации виртуальной машины C4 в консоли Google Cloud
Источник: huggingface.co

Настройка окружения

После входа в экземпляр через SSH и установки docker можно настроить окружение с помощью следующих команд:

$ git clone https://github.com/huggingface/transformers.git
$ cd transformers/
$ git checkout 26b65fb5168f324277b85c558ef8209bfceae1fe
$ cd docker/transformers-intel-cpu/
$ sudo docker build . -t <your_docker_image_tag>
$ sudo docker run -it --rm --privileged -v /home/<your_home_folder>:/workspace <your_docker_image_tag> /bin/bash

В контейнере выполняются дополнительные шаги установки необходимых пакетов.

Процедура бенчмаркинга

Для каждого размера пакета выполнялась следующая последовательность:

  1. Создание фиксированного пакета из 1024 токенов с левым заполнением
  2. Запуск одного раунда прогрева
  3. Установка max_new_tokens=1024 и измерение общей задержки
  4. Расчет пропускной способности

Для запуска тестов использовалась команда numactl -l python benchmark.py со следующим кодом:

import os
import time
import torch
from datasets import load_dataset
from transformers import AutoModelForCausalLM, AutoTokenizer

INPUT_TOKENS = 1024
OUTPUT_TOKENS = 1024

def get_inputs(tokenizer, batch_size):
 dataset = load_dataset("ola13/small-the_pile", split="train")
 tokenizer.padding_side = "left"
 selected_texts = []
 for sample in dataset:
 input_ids = tokenizer(sample["text"], return_tensors="pt").input_ids
 if len(selected_texts) == 0 and input_ids.shape[-1] >= INPUT_TOKENS:
 selected_texts.append(sample["text"])
 elif len(selected_texts) > 0:
 selected_texts.append(sample["text"])
 if len(selected_texts) == batch_size:
 break

 return tokenizer(selected_texts, max_length=INPUT_TOKENS, padding="max_length", truncation=True, return_tensors="pt")

def run_generate(model, inputs, generation_config):
 inputs["generation_config"] = generation_config
 model.generate(**inputs) # warm up
 pre = time.time()
 model.generate(**inputs)
 latency = (time.time() - pre)
 return latency

def benchmark(model, tokenizer, batch_size, generation_config):
 inputs = get_inputs(tokenizer, batch_size)
 generation_config.max_new_tokens = 1
 generation_config.min_new_tokens = 1
 prefill_latency = run_generate(model, inputs, generation_config)
 generation_config.max_new_tokens = OUTPUT_TOKENS
 generation_config.min_new_tokens = OUTPUT_TOKENS
 total_latency = run_generate(model, inputs, generation_config)
 decoding_latency = (total_latency - prefill_latency) / (OUTPUT_TOKENS - 1)
 throughput = OUTPUT_TOKENS * batch_size / total_latency

 return prefill_latency, decoding_latency, throughput

if __name__ == "__main__":
 model_id = "unsloth/gpt-oss-120b-BF16"
 tokenizer = AutoTokenizer.from_pretrained(model_id)
 model_kwargs = {"dtype": torch.bfloat16}
 model = AutoModelForCausalLM.from_pretrained(model_id, **model_kwargs)

Результаты показывают, что переход на новое поколение процессоров Intel Xeon 6 дает не просто прирост производительности, а фундаментальное улучшение экономики запуска больших языковых моделей. Снижение TCO на 70% — это тот показатель, который заставит многих пересмотреть свои облачные стратегии. Особенно впечатляет, что такой результат достигнут на модели со 120 миллиардами параметров, что делает решение актуальным для реальных производственных сценариев, а не только лабораторных тестов.

По материалам Hugging Face.