Fine-tuning, retrieval или prompt? Решает экономика
Один вопрос поддержки в трех вариантах с полной сметой. Fine-tuning выигрывает только после 492 token в удаляемом prompt.
На этой странице
Вот один вопрос поддержки — какая минимальная версия Node ожидается в этом проекте? — на который четырьмя способами отвечают по одной и той же документации, с расчетом стоимости от начала до конца.
| маршрут | отправлено token | стоимость одного ответа |
|---|---|---|
| вся документация в prompt, без cache | 43,311 | $0.066317 |
| вся документация в prompt, с cache | 43,311 | $0.007864 |
| четыре лучших фрагмента, найденные через retrieval | 1,037 | $0.002906 |
| fine-tuned модель, вообще без документации | 28 | $0.002088 |
Fine-tune дешевле всех. Но для этой задачи это еще и неправильный ответ — и то и другое можно показать одной и той же арифметикой, а не мнением.
Три числа в этой таблице уже противоречат советам, которые вы прочитаете повсюду. Включение cache сэкономило 88 % на каждом вопросе, а при ста вопросах в месяц сделало тот же маршрут в пять раз дороже. Retrieval отправляет в сорок два раза меньше tokens, чем маршрут с cached prompt, но стоит всего в 2,7 раза меньше. А fine-tuned модель, сведенная к prompt из двадцати восьми token, экономит лишь 28 % по сравнению с retrieval — потому что 97 % ее стоимости приходится на ответ, а обучение ответы не укорачивает.
Глава 16 построила функцию стоимости, чтобы читать счет. Здесь та же функция выбирает архитектуру.
Показать детали
Что этой главе нужно из предыдущих.
- Глава 11 построила LoRA и QLoRA как технику: что такое low-rank adapter и почему он обучает на порядки меньше параметров. Эта глава не объясняет это заново и только считает стоимость.
- Глава 16 построила
computeCost, пять оплачиваемых корзин и правило префикса для prompt caching. Таблица затрат ниже — это та функция с подставленными тремя маршрутами. - Глава 19 построила retriever: chunking с контекстным заголовком, гибридный поиск, четыре слота фрагментов, цитаты. Эта глава переиспользует его и измеряет, сколько стоит запуск, а не как он работает.
Все здесь написано на TypeScript, потому что это тарифы, арифметика и учет, без единого тензора в поле зрения — с одним исключением, объявленным там, где оно происходит: чтобы выяснить, чему fine-tuning действительно учит, эта глава fine-tunes модель, и эта часть написана на Python.
Вопрос задают неправильно
Ссылка на раздел: Вопрос задают неправильно«Нужно ли нам fine-tune?» спрашивают так, будто это вопрос о модели. Это вопрос о бюджете, причем такой формы, на которую не отвечает ни один benchmark: за что платят один раз, за что платят за каждый вопрос и за что снова платят каждый раз, когда меняется мир.
Три маршрута — это также не три способа сделать одно и то же, и поставщики говорят об этом прямее, чем большинство блогов. Собственная таблица OpenAI о том, для чего supervised fine-tuning лучше всего подходит, перечисляет четыре применения: классификация, тонкий перевод, генерация контента в определенном формате и исправление сбоев в следовании инструкциям.1 Среди них нет «научить модель тому, чего она не знает». Ее краткое описание выгоды такое: «вы можете использовать более короткие prompts с меньшим числом примеров и context data, что экономит token costs в масштабе и может снижать latency» — аргумент о счете, от компании, которая продает эту функцию.
Итак:
- Fine-tuning учит форме и поведению. Тону, формату, форме ответа, границе, которую можно показать, но трудно описать. Самая сильная опубликованная версия — Superficial Alignment Hypothesis из LIMA: знания приходят из pretraining, alignment в основном учит, в какой подраспределенной группе форматов говорить, — поэтому там хватило тысячи отобранных примеров.2
- Retrieval поставляет факты, которые меняются. Это единственный из трех вариантов, где правка вашей документации доходит до ответа без изменения модели.
- Prompting закрывает большинство реальных случаев и является честной базовой линией. In-context learning стал стандартом со времен Language Models are Few-Shot Learners: задача демонстрируется внутри prompt, и ни один weight не двигается.3
Две измерительные статьи закрывают дверь перед ошибкой посередине. Ovadia и коллеги сравнили внедрение знаний через unsupervised fine-tuning с внедрением через retrieval, и retrieval стабильно победил, включая факты, которые базовая модель уже видела на pretraining.4 Gekhman и коллеги измерили ущерб: примеры, которые вводят новые знания, подгоняются медленно, и когда модель наконец подгоняет их, ее уровень hallucination по другим вопросам растет.5 Учить факты через fine-tuning не просто не получается; это ухудшает ответы, на которых вы не обучались.
С этой половиной все решено. С экономической — нет, и ей посвящена остальная часть главы.
Случай и документация, которая не стоит на месте
Ссылка на раздел: Случай и документация, которая не стоит на местеОдин случай, три маршрута: техническая поддержка по вашей собственной документации, которая меняется каждую неделю.
Корпус реальный и лежит на этом диске: 23 Markdown-документа, которые один рабочий программный репозиторий хранит как внутреннюю документацию — руководство по сборке, правила бренда, translation brief, десять сервисных инструкций, заметки о производительности и безопасности. Измерено с помощью o200k_base, encoding из Главы 7:
documents 23
characters 159,223
words 22,194
tokens (o200k_base) 42,921
tokens with per-file headers 43,158Сорок три тысячи tokens — удобный размер для такого решения: он помещается в любой современный context window, так что все три маршрута действительно доступны. При десяти миллионах решение принято за вас, и это retrieval.
Теперь работа, которую делает слово «еженедельно». Обычно текучесть документации просто утверждают; здесь она посчитана по истории версий этого репозитория:
| измерено за последние 26 недель | значение |
|---|---|
| commits, затрагивающие 23 документа | 40 |
| из них правки уже существовавшего документа | 21 |
| разные календарные недели хотя бы с одним изменением | 11 |
| commits, затрагивающие пользовательский текстовый каталог продукта за 8 недель его жизни | 157 |
| календарные недели из этих 8, в которые он менялся | 8 |
Документы движутся примерно через неделю. Видимые пользователю строки — а именно о них на самом деле спрашивают службу поддержки — менялись каждую неделю своего существования, примерно по двадцать commits в неделю. Какой бы маршрут мы ни выбрали, он должен это пережить, и «как часто меняется то, на чем вы обучались?» оказывается числом в вашем собственном репозитории, а не мнением.
Двадцать реалистичных вопросов поддержки были написаны по этому корпусу, по одному на тему, и все цифры ниже вычислены по этим двадцати.
Маршрут первый: отправить все
Ссылка на раздел: Маршрут первый: отправить всеСамое простое, что работает: положить весь корпус в system prompt, вопрос в конец и дать модели найти ответ.
system instructions 140 tokens
the 23 documents 43,158 tokens
the question (median of 20 measured) 13 tokens
the answer (the one assumption) 150 tokensВсе числа там были посчитаны, кроме последнего: 150 output tokens — это допущение, выбранное внутри диапазона turns assistant, которые тарифицировала Глава 16. Это единственная цифра здесь, которая не была исполнена, она применяется одинаково ко всем трем маршрутам, а раздел break-even точно показывает, насколько сдвигается вывод, когда вы ее меняете.
По ставкам, прочитанным со страницы поставщика 7 сентября 2026 года — $1.50 за миллион input tokens, $9.00 за миллион output6 — это $0.066317 за вопрос. Вы платите за повторное чтение сорока трех тысяч tokens, чтобы ответить на тринадцать.
Исправление из Главы 16 применяется напрямую: корпус стабилен и стоит впереди, значит это идеальный cache prefix, а повторное чтение стоит одну десятую — $0.007864 за вопрос, сокращение на 88 %. Предупреждение Главы 16 тоже применимо, в форме, которую та глава отметила, но не оценила. Этот поставщик не берет надбавку за запись; он берет аренду. Explicit cache стоит $0.000001 за сохраненный token в час,6 поэтому поддерживать 43,298 tokens теплыми стоит
независимо от того, задает ли кто-нибудь вопросы. Это $189.78 за шесть месяцев, за пустую комнату. Разделите аренду на экономию на вопросе, и условие получается в одну строку: caching этого корпуса окупается выше 0,74 вопроса в час — 546 в месяц, если учесть еще и еженедельную перестройку cache. Ниже этой отметки функция, которую вы включили ради экономии, теряет деньги.
| шесть месяцев, 100 вопросов в месяц | всего |
|---|---|
| весь корпус, без cache | $39.79 |
| весь корпус, с cache | $196.18 |
Тот же маршрут, тот же код, один флаг, счет в пять раз выше. Глава 16 нашла версию этой проблемы, вызванную timestamp не в том месте; здесь ничего не сломано, кроме трафика. Cache — это ставка на объем, и у этого поставщика вы делаете ее по часам.
Маршрут второй: отправить только важное
Ссылка на раздел: Маршрут второй: отправить только важноеRetriever из Главы 19 без изменений: резать по границам разделов с контекстным заголовком, индексировать, класть в prompt четыре лучших фрагмента. Измерено по двадцати вопросам:
chunks produced from the corpus 330
mean tokens of a chunk's own text 124.9
mean tokens of the four retrieved extracts 884
prompt per question (140 + 884 + 13) 1,037
one-off embedding of every chunk 46,823 tokensВ сорок два раза меньше prompt tokens, чем в первом маршруте, при $0.002906 за вопрос. Индекс стоит $0.0070 построить при $0.15 за миллион embedding tokens6 — меньше трех вопросов — и те же $0.0070 на полную перестройку каждый раз, когда меняется документация. Полная еженедельная перестройка индекса в течение шести месяцев стоит восемнадцать центов.
На одном стоит остановиться. Retrieval уничтожает prompt caching. Стабильный префикс теперь — 140-token системная инструкция; с token 141 prompt различается в каждом вызове, потому что фрагменты выбираются под вопрос. А 140 tokens ниже любого минимума cache, который цитировала Глава 16. Поэтому второй маршрут вообще нельзя кэшировать, что звучит плохо, но плохо не является: не кэшировать 1,037 tokens дешевле, чем кэшировать 43,298.
Это общее правило, которое стоит унести с собой: две большие техники экономии tokens взаимоисключают друг друга на одном и том же содержимом, и выигрывает та, которая удаляет больше tokens. Retrieval удаляет 97,6 %.
Маршрут третий: перестать отправлять документацию
Ссылка на раздел: Маршрут третий: перестать отправлять документациюОбучить на двухстах примерах в фирменном стиле, затем задавать вопросы вообще без приложенной документации.
training examples 200
training tokens 24,389
epochs 3
prompt per question (15 + 13) 28Обучение стоит 24,389 × 3 × $10.00 за миллион = $0.7317. Это вся стоимость строительства, меньше чашки кофе, и именно поэтому так много команд платят ее до проверки, помогает ли это.
Теперь ловушка, и именно ради нее существует эта глава. Fine-tuned модель не стоит при запуске столько же, сколько ее базовая модель. Страница pricing говорит об этом одним предложением: «for model inference starting from Gemini 3, tuned model endpoint prediction price will be 1.5 times of the base model».6 Не обучение. Inference, на каждом token, все время жизни модели.
Значит, запишем формулу. Пусть и — базовые цены input и output, — multiplier tuned модели, — длина prompt маршрута, который вы заменяете, — длина prompt после fine-tuning, а — длина ответа. Fine-tuning дешевле за вопрос только когда
Первый член очевиден: ваш новый короткий prompt с надбавкой. Второй — нет, и именно туда уходят деньги: надбавка на ответ, которая никак не связана с вашим prompt и которую обучение не может укоротить. С измеренными числами — , , , — порог равен
answer 50 tokens -> the prompt it replaces must exceed 192 tokens
answer 150 tokens -> the prompt it replaces must exceed 492 tokens
answer 400 tokens -> the prompt it replaces must exceed 1,242 tokens
answer 1000 tokens -> the prompt it replaces must exceed 3,042 tokensПри измеренной длине ответа это 492 tokens — из них 450 приходятся на надбавку за ответ, а не на prompt. Замена более короткого prompt навсегда дороже за вопрос при любом объеме; и порог линейно растет с тем, сколько говорит ваш assistant, так что assistant, который пишет длинные ответы, никогда не сможет через fine-tuning прийти к более дешевому token, сколько бы prompt он ни удалил.
Та же истина с другой стороны — фраза, которую нужно запомнить. Из $0.002088 за вопрос у fine-tuned маршрута 97,0 % приходится на ответ. Fine-tuning оптимизирует оставшиеся три процента.
Таблица затрат
Ссылка на раздел: Таблица затратЧетыре числа описывают любой из этих маршрутов: что вы платите один раз, что платите при изменении документации, что платите каждый час независимо ни от чего и что платите за вопрос. Это расширяет computeCost из Главы 16, не меняя ее.
import { computeCost, type Pricing, type Usage } from "./cost"; // Chapter 16
export interface Route {
name: string;
setupUSD: number; // paid once, before the first question
perRefreshUSD: number; // paid every time the documentation changes
standingUSDPerHour: number; // paid per hour whatever the traffic
pricing: Pricing;
usage: Usage; // one question and its answer
}
export const perQueryUSD = (r: Route) => computeCost(r.pricing, r.usage);
const HOURS_PER_MONTH = (24 * 365.25) / 12;
export function totalUSD(
r: Route, months: number, queriesPerMonth: number, refreshesPerMonth: number,
) {
return r.setupUSD
+ months * refreshesPerMonth * r.perRefreshUSD
+ months * HOURS_PER_MONTH * r.standingUSDPerHour
+ months * queriesPerMonth * perQueryUSD(r);
}
/** Monthly volume at which `b` overtakes `a`. null = it never does. */
export function crossover(
a: Route, b: Route, months: number, refreshesPerMonth: number,
): number | null {
const fixed = (r: Route) =>
r.setupUSD
+ months * refreshesPerMonth * r.perRefreshUSD
+ months * HOURS_PER_MONTH * r.standingUSDPerHour;
const dFixed = fixed(b) - fixed(a); // b's extra fixed cost
const dVar = perQueryUSD(a) - perQueryUSD(b); // b's per-question saving
if (dVar <= 0) return null; // b is never cheaper
return Math.max(0, dFixed / dVar / months);
}Tuned модель — это не другой прайс-лист, а тот же самый, умноженный:
const TUNED_MULTIPLIER = 1.5; // read from the provider's pricing page, 2026-09-07
const scale = (p: Pricing, k: number): Pricing => ({
input: p.input.map(t => ({ ...t, price: t.price * k })),
cachedInput: p.cachedInput!.map(t => ({ ...t, price: t.price * k })),
output: p.output.map(t => ({ ...t, price: t.price * k })),
});Одна выделенная строка — весь аргумент предыдущего раздела, записанный как код: multiplier попадает и на output.
Шесть месяцев, с еженедельным обновлением документации:
| вопросов / месяц | prompt, cached | prompt, без cache | retrieval | fine-tune |
|---|---|---|---|---|
| 100 | $196.18 | $39.79 | $1.93 | $21.01 |
| 1,000 | $238.65 | $397.90 | $17.62 | $32.28 |
| 10,000 | $663.32 | $3,978.99 | $174.52 | $145.04 |
| 100,000 | $4,909.98 | $39,789.90 | $1,743.49 | $1,272.56 |
И точки пересечения, то есть четыре числа, которые действительно нужны бюджету:
retrieval -> fine-tune, documentation never changes: 148 questions / month
retrieval -> fine-tune, documentation refreshed weekly: 3,989 questions / month
prompt (no cache) -> retrieval: 1 question / month
prompt (no cache) -> prompt (cached): 546 questions / monthЧитайте первые два вместе, потому что это смысл главы. Неподвижный корпус заставляет fine-tuning окупиться за сто пятьдесят вопросов; корпус, который меняется еженедельно, сдвигает ту же точку пересечения в двадцать семь раз, и в модели ничего не изменилось — изменилось только то, как часто вы снова за нее платите. Стоимость строительства — сноска; стоимость обслуживания — решение.
Если теперь вы заключаете, что загруженная служба поддержки должна fine-tune, арифметика с вами согласна. Это все равно неверно, и следующий раздел объясняет почему.
Чему fine-tune действительно научился
Ссылка на раздел: Чему fine-tune действительно научилсяУ таблицы затрат есть один столбец, который она не может посчитать, поэтому этот раздел запускает fine-tune: локально, на небольшой open model, с adapter, написанным вручную, а не взятым из библиотеки. Глава 11 построила LoRA; здесь она на q_proj и v_proj всех 24 слоев Qwen2.5-0.5B-Instruct с rank 8:
class LoRALinear(nn.Module):
def __init__(self, base: nn.Linear, r=8, alpha=16):
super().__init__(); self.base = base
for p in self.base.parameters():
p.requires_grad = False # the model is frozen
self.A = nn.Parameter(torch.zeros(r, base.in_features))
nn.init.normal_(self.A, std=1 / r)
self.B = nn.Parameter(torch.zeros(base.out_features, r))
self.s = alpha / r
self.on = True # so the same run can compare both
def forward(self, x):
y = self.base(x)
return y + (x @ self.A.T @ self.B.T) * self.s if self.on else yДвести обучающих примеров механически берутся из корпуса, поэтому они воспроизводимы: вопрос — это заголовок раздела, превращенный в вопрос, ответ — собственный текст этого раздела в жестком фирменном стиле: одна строка, начинающаяся с Short answer:, одна строка, начинающаяся с Source:, с путем к файлу. Формат — это форма, которой учат; путь — это факт. Затем два числа по двадцати отложенным вопросам: выходит ли ответ в фирменном стиле и называет ли он файл, который действительно отвечает на вопрос?
Две базовые линии делают таблицу читаемой, и обе — требование Главы 4, а не поздняя мысль. Десять из двадцати правильных ответов — один и тот же файл, поэтому модель, которая игнорирует вопрос и всегда отвечает CLAUDE.md, получает 10/20. И у retriever есть собственный потолок: по этим двадцати вопросам его четыре фрагмента содержат правильный файл 14 раз и ставят его первым 7 раз, так что 14/20 — максимум, который мог бы получить любой reader с его использованием.
LoRA modules 48 trainable parameters 540,672 (0.109 % of the model)
400 steps, 2 epochs, 0.76 s/step on 16 CPU threads, 304 s in total
mean loss over the first 50 steps 3.7363 -> over the last 50 steps 2.4197
house style correct source
always answer the most common file -- 10 / 20
the retriever's own ceiling -- 14 / 20
base model, closed book 0 / 20 0 / 20
fine-tuned, closed book 19 / 20 8 / 20
base model, four retrieved extracts 13 / 20 2 / 20
fine-tuned, four retrieved extracts 1 / 20 1 / 20Форма была выучена, полностью и быстро. С нуля до девятнадцати из двадцати, adapter на 540,672 параметрах — 0,109 % модели — за пять минут обучения на процессоре без видеокарты в поле зрения.
Факты — нет. Восемь из двадцати неотличимы от десяти, которые вы получаете, полностью игнорируя вопрос, и интервал Главы 4 на двадцати samples говорит об этом вслух. Эти пути к файлам были в обучающих данных три раза; на выходе получилась привычка заканчивать правдоподобно выглядящей строкой Source:. На вопрос из начала этой главы fine-tuned модель ответила Short answer: 10.x . . . и сослалась на CLAUDE.md. Правильный ответ, который находится в CLAUDE.md, — 18.17.0.
А затем форма сломалась, и именно эта строка оправдывает эксперимент. Дайте fine-tuned модели тысячу tokens найденных фрагментов — форму prompt, которую она никогда не видела, потому что каждый обучающий prompt был длиной двадцать восемь tokens, — и фирменный стиль падает с 19/20 до 1/20. На вопрос из начала этой главы она отвечает 18.17.0 — правильно, но без какого-либо формата, которому ее обучали. Значит, fine-tuning научил не формату; он научил формату, условному на prompts из обучающего набора, и первый prompt, который выглядел иначе, унес формат с собой. То, на чем вы fine-tune, становится тем единственным input distribution, в котором ваша модель хороша, и никто не кладет это в spreadsheet.
Последнее замечание о метрике, прямо указывающее на Главу 29: «правильный источник» оценивает форму и факт вместе, поэтому обе строки retrieval выглядят ужасно, хотя обе модели правильно ответили на факт в этом вопросе. Одно end-to-end число скрывало три вещи — retriever с recall 14/20, 0.5B reader и формат цитирования, — а выбор того, что исправлять, требует разделить их до измерения, а не после.
Часы, которыми вы не управляете
Ссылка на раздел: Часы, которыми вы не управляетеТеперь столбец, который поставщики заполняют за вас. Fine-tuned модель — не актив, которым вы владеете; это аренда чужой базовой модели, с напечатанной датой окончания. 7 сентября 2026 года раздел fine-tuning на странице pricing OpenAI содержал это уведомление целиком:
OpenAI постепенно закрывает платформу fine-tuning. Платформа больше недоступна новым пользователям, но существующие пользователи платформы fine-tuning смогут создавать training jobs в течение ближайших месяцев. Все fine-tuned модели останутся доступными для inference, пока их базовые модели не будут выведены из эксплуатации.7
График расписан по дням: 7 мая 2026 — закрыто для организаций, которые никогда не fine-tune; 2 июля 2026 — закрыто для тех, кто не запускал inference на fine-tuned модели в течение шестидесяти дней; 6 января 2027 — новых jobs больше вообще не будет.8 Та же страница планирует отключение самих fine-tuned моделей — ft-gpt-3.5-turbo, ft-gpt-4, ft-gpt-4.1-nano, ft-babbage-002, ft-davinci-002 — на 23 октября 2026 года, каждая с рекомендованной заменяющей базовой моделью, что является вежливым способом сказать: обучайте заново.
Другой frontier-поставщик вообще не продавал вам эту аренду. Индекс документации Anthropic перечисляет 699 страниц, и ни одна не про fine-tuning; разделы кастомизации моделей на странице pricing Bedrock покрывают Amazon Nova, Amazon Titan, Cohere, Meta и OpenAI open-weight models, но не Claude.910 Если ваша архитектура зависит от fine-tune, одна из трех frontier-семей просто недоступна вам при любом бюджете.
Self-hosting заменяет аренду модели арендой машины, и AWS сама считает эту арифметику на своей странице: одна model unit provisioned throughput для customized model с обязательством на один месяц — «1 model unit × $21.18 × 24 hours × 31 days = $15,757.92» в месяц.10 Арендовать железо напрямую дешевле, но не бесплатно — $3.99 за GPU-hour on demand для H100, $1.99 preemptible11 — примерно $2,900 в месяц за одну карту, которая должна быть поднята независимо от того, спрашивает ли кто-нибудь что-нибудь. Весь маршрут retrieval при десяти тысячах вопросов в месяц стоит $174.52 за шесть месяцев.
Здесь LoRA получает свое место как бюджетный аргумент, а не технический. На той же модели rank-16 adapter по attention и feed-forward слоям — это 8,798,208 параметров, 1,781 % модели, 17,6 MB в bfloat16, против 0,988 GB базовых weights; его optimiser и gradient state занимают 140,77 MB, тогда как full fine-tuning требует 7,90 GB, фактор 56. Следствие не в более дешевом обучении, а в том, что одна загруженная базовая модель может обслуживать много adapters, и это единственный способ разделить фиксированную стоимость GPU на что-либо. Managed training это отражает: $0.48 за миллион tokens low-rank до 16B против $0.54 full, с минимумом $4.00 за job.11 Этот порог — важная деталь. При 24,389 tokens за три epochs каждое переобучение на этом корпусе выставляет счет на $4.00, а не на $0.04, которые дает арифметика — $104 минимумов за двадцать шесть еженедельных запусков, при девяноста одном центе вычисленной стоимости.
Сколько стоит privacy и почему distillation — не четвертый вариант
Ссылка на раздел: Сколько стоит privacy и почему distillation — не четвертый вариантЕще два столбца, которые появляются только в счете.
Data residency стоит примерно десять процентов, и два поставщика сходятся на этой цифре. OpenAI берет «10 % uplift» на data-residency endpoints для моделей, выпущенных 5 марта 2026 года или позже;7 Vertex оценивает свои non-global endpoints в $1.65 против $1.50, те же десять процентов.6 Сравните это с пятьюдесятью процентами, которые стоит tuned endpoint, и фольклор переворачивается: residency дешева, а fine-tuning — нет; и fine-tuning все равно не является приватным вариантом, потому что корпус доходит до поставщика в любом случае, один раз при обучении вместо одного раза при каждом вызове.
Самая явная цена, когда-либо назначенная вашим данным, находится на той же странице, где одна fine-tuned модель указана дважды: с включенным data sharing inference стоит ровно вдвое меньше — $2.00 против $4.00 input, $8.00 против $16.00 output.7 Разрешить поставщику сохранить то, что вы отправили, стоит 50 % скидки, и это говорит, чего оно стоит для него.
Distillation — обучение собственной маленькой модели на ответах большой — обычно предлагают как выход из обоих ограничений. Если посчитать, это не выход, потому что teacher — это система, которую вы пытались заменить: производство двухсот обучающих примеров путем постановки двухсот вопросов маршруту retrieval стоит 200 × $0.002906 = $0.58, сверх $0.73 на обучение по ним. Distillation делают после того, как retrieval pipeline работает, чтобы сделать его дешевле, и он наследует каждый факт, который retriever получил неправильно.
За что вы платите latency
Ссылка на раздел: За что вы платите latencyДеньги — видимая половина. Другая приходит как ожидание, с той же причиной, что и счет: модель читает весь prompt, прежде чем сказать слово. Глава 13 измеряла prefill против decode на модели, которую можно было потрогать; здесь то же измерение, один прогон, одна машина, по длине prompt:
| prompt tokens | время до первого token | на token |
|---|---|---|
| 28 | 312 ms | 11.14 ms |
| 1,037 | 4,971 ms | 4.79 ms |
| 4,096 | 22,272 ms | 5.44 ms |
| 8,192 | 49,443 ms | 6.04 ms |
Абсолютные числа принадлежат модели 0.5B на шестнадцати CPU threads и ничего не говорят о hosted frontier model. Форма переносится точно: prefill растет с длиной prompt, а стоимость на token ползет вверх, когда начинает проявляться квадратичный член из Главы 9: 4.79 ms на тысяче tokens против 6.04 ms на восьми тысячах, штраф 26 % просто за большую длину.
Следствие для трех маршрутов прямое. Первый маршрут prefills сорок три тысячи tokens на вопрос, и cache hit делает это терпимым — Глава 16 объяснила почему: cache read заменяет работу prefill, значит покупает latency и деньги одной транзакцией. Второй маршрут prefills тысячу и сначала добавляет round trip к индексу. Третий маршрут prefills двадцать восемь и ничего не добавляет, что делает его измеримо самым быстрым из трех в ответе. Он просто отвечает не на то.
Где ни один из трех не является ответом
Ссылка на раздел: Где ни один из трех не является ответомТри сбоя, которые выглядят как проблемы модели, но не являются ими, — десять минут здесь экономят месяц потом:
В документации нет ответа
Ссылка на раздел: В документации нет ответаRetrieval не может retrieve то, что никто не написал, а fine-tuning на этом только учит модель звучать уверенно. Если главный вопрос вашей поддержки нигде не отвечен в корпусе, исправление — технический писатель.
Ответ требует действия, а не текста
Ссылка на раздел: Ответ требует действия, а не текста«Где мой заказ?» — это запрос к базе данных, а не вопрос знаний. Это tool call — Глава 18 — и ни обучение, ни retrieval его не заменяют.
Вопрос неоднозначен, а интерфейс это скрывает
Ссылка на раздел: Вопрос неоднозначен, а интерфейс это скрываетКогда два продукта называются одинаково, лучший возможный ответ — просьба уточнить. Это продуктовоe решение об input, а не моделирующее решение об output.
И требование над всем этим: это решение нельзя принять без evaluation set, и поставщик, продающий fine-tune, сам это говорит. Руководство OpenAI начинается с «Only invest in fine-tuning after setting up evals. You need a reliable way to determine whether your fine-tuned model is performing better than a base model» и добавляет, что если пятьдесят хороших примеров ничего не меняют, проблема в задаче или prompt, а не в объеме данных.1 Двадцать вопросов, как в этой главе, показывают механизм и не могут выбрать поставщика — Глава 4 измерила почему, а что делать, когда двадцать случаев — все, что у вас есть, — повторять их, парно сравнивать и измерять разброс между запусками — это Глава 29.
Таблица
Ссылка на раздел: ТаблицаЧетыре столбца, и решает только последний:
| prompt | retrieval | fine-tune | |
|---|---|---|---|
| чему учит | всему, что можно записать | фактам, которые меняются | форме и поведению |
| стоимость строительства | ноль | $0.0070 плюс полдня | $0.7317 плюс eval set |
| стоимость за вопрос | $0.0079 cached, $0.0663 без cache | $0.0029 | $0.0021, выше 492 prompt tokens |
| стоимость обслуживания | ноль или $0.043 в час аренды | $0.0070 за перестройку | retraining при каждом изменении плюс еще один на каждую retired base model |
Правило, которое из этого следует, достаточно короткое, чтобы держать его в голове: начинайте с prompt; добавляйте retrieval, когда факты движутся; fine-tune только тогда, когда вы измерили, что вам все еще не хватает формы, а не факта, — и прежде чем делать это, считайте ответ, а не prompt.
Неудобная версия для тех, кто пришел уже с решением: в измеренном случае этой главы fine-tuning является самым дешевым маршрутом выше четырех тысяч вопросов в месяц, но по фактам он все равно не может превзойти стратегию отвечать CLAUDE.md на все.
Куда дальше
Ссылка на раздел: Куда дальшеКаждая цена здесь была за token, и каждый маршрут был другим способом расположить tokens. Сейчас это перестанет быть правдой.
Глава 21 покидает текст. Изображение, входящее в модель, — не строка, а сетка patches с числом tokens, которое вы не выбирали; минута речи у одного поставщика тарифицируется по секундам, у другого — по audio token; synthetic speech продается по символам, transcription — по минутам, raw compute — по GPU-second. Вопрос, на который эта глава отвечала одной cost function — что дешевле? — нельзя даже задать, пока единицы не совпадут, и ни один калькулятор в интернете их не нормализует.
Там же снова появляется обучение: image adapter с trigger word и голос, клонированный по образцу. Это поднимает вопрос, с которого начинается следующая глава, и он не риторический: если fine-tuning языковой модели почти всегда неправильная покупка, почему fine-tuning image model почти всегда правильная?
Источники и метод
Ссылка на раздел: Источники и методКаждая цена, порог и multiplier в этой главе были прочитаны со страницы самого поставщика 7 сентября 2026 года и цитируются с этой датой, потому что все они изменятся. Измеренные величины — token counts, chunk sizes, retrieval sizes, training loss, scores, latencies и counts из version history — были получены на одной машине в тот же день и воспроизводимы по корпусу, описанному выше.
Локальные эксперименты использовали Qwen/Qwen2.5-0.5B-Instruct с greedy decoding, поэтому они точно воспроизводимы; adapter — двенадцатистрочный класс, напечатанный выше, с rank 8 по q_proj и v_proj. Корпус — отслеживаемая Markdown-документация одного рабочего программного репозитория, исключая два append-only logs; частота ее изменений была посчитана по version history этого репозитория.
Сноски
Ссылка на раздел: Сноски-
OpenAI, Supervised fine-tuning,
developers.openai.com/api/docs/guides/supervised-fine-tuning, and Model optimization,.../guides/model-optimization, оба источника проверены 2026-09-07. Источник: таблица того, для чего supervised fine-tuning лучше всего подходит (классификация, тонкий перевод, генерация контента в определенном формате, исправление сбоев instruction-following); четыре заявленных преимущества, включая более короткие prompts и lower latency; минимум 10 training examples и рекомендация начать с 50; и «Only invest in fine-tuning after setting up evals.» ↩ ↩2 -
Zhou, C. et al. LIMA: Less Is More for Alignment. arXiv:2305.11206 (2023). Superficial Alignment Hypothesis — знания приходят из pretraining, alignment учит, в каком формате говорить, — и причина, почему хватило тысячи отобранных примеров. ↩
-
Brown, T. et al. Language Models are Few-Shot Learners. arXiv:2005.14165 (2020). Источник in-context learning как честной baseline: задача демонстрируется внутри prompt, и weight не обновляется. ↩
-
Ovadia, O., Brief, M., Mishaeli, M. and Elisha, O. Fine-Tuning or Retrieval? Comparing Knowledge Injection in LLMs. arXiv:2312.05934 (2023). Retrieval победил unsupervised fine-tuning при внедрении знаний, включая факты, уже виденные на pretraining. ↩
-
Gekhman, Z. et al. Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations? arXiv:2405.05904 (2024). Примеры, которые вводят новые знания, подгоняются медленно, а их подгонка повышает hallucination на несвязанных вопросах. ↩
-
Google, Vertex AI generative AI pricing,
cloud.google.com/vertex-ai/generative-ai/pricing, проверено 2026-09-07. Каждая цифра в таблице затрат этой главы: Gemini 3.5 Flash на global endpoint по $1.50 за миллион input tokens, $0.15 cached input и $9.00 text output, с non-global endpoints на 10 % дороже; supervised fine-tuning той же модели по $0.01 за 1,000 training tokens, где «training tokens are calculated by the total number of tokens in your training dataset, multiplied by your number of epochs»; explicit context cache storage по $0.000001 за token в час; Gemini Embedding input по $0.00015 за 1,000 tokens online; и примечание, что «for model inference starting from Gemini 3, tuned model endpoint prediction price will be 1.5 times of the base model.» ↩ ↩2 ↩3 ↩4 ↩5 -
OpenAI, Pricing,
developers.openai.com/api/docs/pricing, проверено 2026-09-07. Источник wind-down notice, процитированного полностью, и текущих text rates, использованных для cross-check:gpt-5.6-terrastandard short context по $2.00 input, $0.20 cached input, $2.50 cache write и $12.00 output за миллион tokens, с batch tier на половине каждого. Страница содержит десять строк fine-tuning по семи base models, и ровно одна из них тарифицируется по времени, а не по tokens: reinforcement fine-tuningo4-mini-2025-04-16по $100.00 за training hour. Та же страница отмечает 10 % uplift на data-residency endpoints для моделей, выпущенных 5 марта 2026 года или позже. ↩ ↩2 ↩3 -
OpenAI, Deprecations,
developers.openai.com/api/docs/deprecations, проверено 2026-09-07. Источник self-serve fine-tuning timeline (7 мая 2026, 2 июля 2026, 6 января 2027) и отключения 23 октября 2026 года дляft-gpt-3.5-turbo,ft-gpt-4,ft-gpt-4.1-nano-2025-04-14,ft-babbage-002иft-davinci-002, каждая с указанной recommended replacement base model. ↩ -
Anthropic, developer documentation index,
platform.claude.com/llms.txt, проверено 2026-09-07. 699 listed pages, ни одна из них не о fine-tuning;platform.claude.com/docs/en/build-with-claude/fine-tuningвозвращает 404. ↩ -
Amazon Web Services, Amazon Bedrock pricing,
aws.amazon.com/bedrock/pricing/, проверено 2026-09-07. Источник разделов model-customisation (Amazon Nova, Amazon Titan, Cohere, Meta, Qwen и OpenAI open-weight models — без Claude), ежемесячной платы $1.95 за хранение каждой custom model и процитированного worked example: «1 model unit × $21.18 × 24 hours × 31 days = $15,757.92». ↩ ↩2 -
Together AI, Pricing,
together.ai/pricing, проверено 2026-09-07. Fine-tuning за миллион tokens для моделей до 16B: $0.48 low-rank и $0.54 full для supervised fine-tuning, $1.20 и $1.35 для direct preference optimisation, с ценой, вычисляемой как «training dataset size × number of epochs» плюс evaluation tokens и «a minimum charge of $4.00» за job. GPU capacity: $3.99 за GPU-hour on demand для HGX H100, $1.99 preemptible, $5.99 для H200. ↩ ↩2