Я разработал движок инференса с кэшем KV для GPT-2 на CUDA, изучая при этом, как на самом деле работают большие языковые модели. Жду отзывов! И какой путь мне выбрать, чтобы войти в сферу инференс-инженерии?
Краткое содержание
Всем привет! Я углубился в то, как работают БЯМ «под капотом», особенно со стороны инференса — как генерируются токены, что на самом деле делает кэш KV и почему это важно для производительности. Чтобы сделать это более конкретным, я создал небольшой проект поверх llm.c (минимального репозитория LLM на C/CUDA от Karpathy):Что я добавил: inference_gpt2.cu — бинарный файл инференса для GPT-2 на CUDA, который выполняет полное предварительное заполнение (prefill) по запросу, а затем кэширует тензоры K и V для каждого трансформерного слоя infer.py — обёртка на Python, которая токенизирует ваш запрос с помощью tiktoken и вызывает бинарный файлКэш KV: префилл имеет сложность $O(T^2)$, но каждый последующий шаг декодирования имеет сложность $O(T)$ — вам просто нужно умножить новый запрос на уже закэшированные ключи/значения, вместо того чтобы пересчитывать всё с нуляРепозиторий: https://github.com/yangyonggit/llm.c-kvЭто не готовое к промышленному использованию решение — GPT-2 имеет жёсткое ограничение контекста в 1024 токена из-за абсолютных позиционных эмбеддингов, и там нет скользящего окна или чего-то подобного. Но это помогло мне по-настоящему понять разделение на префилл/декодирование, которое каждая
Полный текст статьи пока не загружен.