Fine-tuning, retrieval sau prompt? Decizia e economică
Aceeași întrebare de suport, trei răspunsuri și costuri complete. Fine-tuning câștigă abia când elimină peste 492 token.
Pe această pagină
Iată o singură întrebare de suport — care este versiunea minimă de Node pe care o așteaptă acest proiect? — la care se răspunde în patru moduri pe baza aceleiași documentații, cu prețul calculat cap-coadă.
| rută | tokens trimiși | costul unui răspuns |
|---|---|---|
| toată documentația în prompt, fără cache | 43,311 | $0.066317 |
| toată documentația în prompt, cu cache | 43,311 | $0.007864 |
| cele mai bune patru extrase, retrieved | 1,037 | $0.002906 |
| un model fine-tuned, fără documentație deloc | 28 | $0.002088 |
Fine-tune este cel mai ieftin. Este și, pentru această problemă, răspunsul greșit — iar ambele se pot arăta cu aceeași aritmetică, nu cu o opinie.
Trei numere din acel tabel contrazic deja sfatul pe care îl vei citi peste tot. Activarea cache-ului a economisit 88 % per întrebare și, la o sută de întrebări pe lună, face aceeași rută de cinci ori mai scumpă. Retrieval trimite de patruzeci și două de ori mai puțini tokens decât ruta cu prompt în cache și costă doar de 2,7 ori mai puțin. Iar modelul fine-tuned, redus la un prompt de douăzeci și opt de tokens, economisește doar 28 % față de retrieval — pentru că 97 % din ce plătește este răspunsul, iar training nu scurtează răspunsurile.
Capitolul 16 a construit o funcție de cost pentru a citi o factură. Aici aceeași funcție decide o arhitectură.
Afișează detaliile
Ce îi trebuie acestui capitol din cele anterioare.
- Capitolul 11 a construit LoRA și QLoRA ca tehnică: ce este un adaptor low-rank, de ce antrenează cu ordine de mărime mai puțini parametri. Acest capitol nu o reexplică niciodată și doar îi pune preț.
- Capitolul 16 a construit
computeCost, cele cinci categorii facturabile și regula prefixului pentru prompt caching. Fișa de cost de mai jos este acea funcție cu trei rute introduse în ea. - Capitolul 19 a construit retriever-ul: chunking cu antet contextual, căutare hibridă, patru sloturi de extrase, citări. Acest capitol îl reutilizează și măsoară cât costă să ruleze, nu cum funcționează.
Totul aici este TypeScript, pentru că vorbim de tarife, aritmetică și contabilitate, fără niciun tensor la vedere — cu o singură excepție, declarată acolo unde apare: ca să aflăm ce învață de fapt fine-tuning, acest capitol fine-tunes un model, iar acea parte este Python.
Întrebarea este pusă greșit
Link către secțiunea: Întrebarea este pusă greșit„Ar trebui să facem fine-tuning?” este pusă ca și cum ar fi o întrebare despre un model. Este o întrebare despre un buget, cu o formă la care niciun benchmark nu răspunde: ce se plătește o dată, ce se plătește per întrebare și ce se plătește din nou de fiecare dată când lumea se mișcă.
Cele trei rute nici nu sunt trei moduri de a face același lucru, iar furnizorii o spun mai limpede decât majoritatea articolelor de blog. Propriul tabel al OpenAI despre la ce este cel mai bun supervised fine-tuning enumeră patru utilizări: clasificare, traducere nuanțată, generarea de conținut într-un format specific și corectarea eșecurilor de urmare a instrucțiunilor.1 Niciuna nu este „să înveți modelul ceva ce nu știe”. Rezumatul beneficiului spune că „poți folosi prompts mai scurte, cu mai puține exemple și date de context, ceea ce economisește costuri cu tokens la scară și poate reduce latența” — un argument despre factură, de la compania care vinde funcția.
Așadar:
- Fine-tuning învață formă și comportament. Ton, format, forma unui răspuns, o limită pe care o poți demonstra, dar nu descrie. Cea mai puternică versiune publicată este Superficial Alignment Hypothesis din LIMA: cunoașterea vine din pretraining, alignment învață mai ales în ce sub-distribuție de formate să vorbești — motiv pentru care o mie de exemple curate au fost suficiente acolo.2
- Retrieval furnizează fapte care se schimbă. Este singura dintre cele trei în care o modificare a documentației ajunge în răspuns fără să atingi modelul.
- Prompting acoperă majoritatea cazurilor reale și este baseline-ul onest. In-context learning a fost implicit de la Language Models are Few-Shot Learners: sarcina este demonstrată în prompt și nicio greutate nu se mișcă.3
Două lucrări măsurate închid ușa greșelii din mijloc. Ovadia și colegii au comparat injectarea de cunoaștere prin unsupervised fine-tuning cu injectarea prin retrieval, iar retrieval a câștigat consecvent, inclusiv pe fapte pe care modelul de bază le văzuse deja în pretraining.4 Gekhman și colegii au măsurat daunele: exemplele care introduc cunoaștere nouă sunt fitted lent, iar pe măsură ce modelul ajunge în sfârșit să le fit, rata de hallucination pe alte întrebări crește.5 Predarea faptelor prin fine-tuning nu doar eșuează; degradează răspunsuri pe care nu le antrenai.
Acea jumătate este stabilită. Jumătatea economică nu este, iar ea ocupă restul capitolului.
Cazul și documentația care nu stă locului
Link către secțiunea: Cazul și documentația care nu stă loculuiUn caz, rulat în trei moduri: suport tehnic pe propria ta documentație, care se schimbă în fiecare săptămână.
Corpusul este real și se află pe acest disc: cele 23 de documente Markdown pe care un repository software aflat în uz le păstrează ca documentație internă — ghidul de build, regulile de brand, brief-ul de traducere, zece manuale de service, notele de performanță și securitate. Măsurat cu o200k_base, encoding-ul din Capitolul 7:
documents 23
characters 159,223
words 22,194
tokens (o200k_base) 42,921
tokens with per-file headers 43,158Patruzeci și trei de mii de tokens este o dimensiune confortabilă pentru această decizie: încape în orice context window modernă, deci toate cele trei rute sunt cu adevărat disponibile. La zece milioane, decizia este luată pentru tine, iar ea este retrieval.
Acum munca pe care o face cuvântul „săptămânal”. Churn-ul documentației este de obicei afirmat; aici este numărat, din istoricul de versiuni al acelui repository:
| măsurat pe ultimele 26 de săptămâni | valoare |
|---|---|
| commits care ating cele 23 de documente | 40 |
| dintre acestea, editări la un document care exista deja | 21 |
| săptămâni calendaristice distincte cu cel puțin o schimbare | 11 |
| commits care ating catalogul de texte vizibile utilizatorului al produsului, în cele 8 săptămâni de existență | 157 |
| săptămâni calendaristice din acele 8 în care s-a schimbat | 8 |
Documentele se mișcă aproximativ o dată la două săptămâni. Textele vizibile utilizatorului — despre care un birou de suport este, de fapt, întrebat — s-au mișcat în fiecare săptămână de când există, la aproximativ douăzeci de commits pe săptămână. Orice rută alegem trebuie să supraviețuiască acestui lucru, iar „cât de des se schimbă lucrul pe care ai făcut training?” se dovedește a avea un număr în propriul tău repository, nu o opinie.
Douăzeci de întrebări realiste de suport au fost scrise pe baza acestui corpus, una per subiect, iar fiecare cifră de mai jos este calculată pe acele douăzeci.
Ruta unu: trimite totul
Link către secțiunea: Ruta unu: trimite totulCel mai simplu lucru care funcționează: pune întregul corpus în system prompt, întrebarea la final și lasă modelul să o găsească.
system instructions 140 tokens
the 23 documents 43,158 tokens
the question (median of 20 measured) 13 tokens
the answer (the one assumption) 150 tokensFiecare număr de acolo a fost numărat, cu excepția ultimului: 150 output tokens este o presupunere, aleasă în intervalul de mesaje de assistant facturate în Capitolul 16. Este singura cifră de aici care nu a fost executată, este aplicată identic tuturor celor trei rute, iar secțiunea de break-even arată exact cât se mișcă concluzia când o schimbi.
La tarifele citite de pe pagina furnizorului pe 7 septembrie 2026 — $1.50 per milion de input tokens, $9.00 per milion de output6 — asta înseamnă $0.066317 per întrebare. Plătești ca să recitești patruzeci și trei de mii de tokens pentru a răspunde la treisprezece.
Soluția din Capitolul 16 se aplică direct: corpusul este stabil și este în față, deci este un prefix perfect pentru cache, iar recitirea lui costă o zecime — $0.007864 per întrebare, o reducere de 88 %. Avertismentul din Capitolul 16 se aplică și el, în forma pe care acel capitol a semnalat-o, dar nu a taxat-o. Acest furnizor nu percepe premium la scriere; percepe chirie. Un cache explicit costă $0.000001 per token stocat pe oră,6 deci păstrarea a 43,298 tokens calzi costă
indiferent dacă întreabă cineva ceva sau nu. Asta înseamnă $189.78 pe șase luni, pentru o sală goală. Împarte chiria la economia per întrebare și condiția iese într-o singură linie: caching-ul acestui corpus se plătește singur peste 0.74 întrebări pe oră — 546 pe lună după ce reconstruirea săptămânală a cache-ului este inclusă și ea. Sub acest nivel, funcția pe care ai activat-o ca să economisești bani îi pierde.
| șase luni, 100 de întrebări pe lună | total |
|---|---|
| întregul corpus, fără cache | $39.79 |
| întregul corpus, cu cache | $196.18 |
Aceeași rută, același cod, un singur flag, de cinci ori factura. Capitolul 16 a găsit o versiune a acestui lucru cauzată de un timestamp pus în locul greșit; aici nu e nimic greșit în afară de trafic. Un cache este un pariu pe volum, iar la acest furnizor îl plasezi cu ora.
Ruta doi: trimite doar ce contează
Link către secțiunea: Ruta doi: trimite doar ce conteazăRetriever-ul din Capitolul 19, neschimbat: taie pe limite de secțiuni cu un antet contextual, indexează, pune cele mai bune patru extrase în prompt. Măsurat pe cele douăzeci de întrebări:
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 tokensDe patruzeci și două de ori mai puțini prompt tokens decât ruta unu, la $0.002906 per întrebare. Indexul costă $0.0070 de construit la $0.15 per milion de embedding tokens6 — mai puțin decât echivalentul a trei întrebări — și tot $0.0070 ca să fie reconstruit de la zero de fiecare dată când documentația se schimbă. Reconstruirea întregului index în fiecare săptămână timp de șase luni costă optsprezece cenți.
Un lucru merită o pauză. Retrieval distruge prompt caching. Prefixul stabil este acum instrucțiunea de sistem de 140 de tokens; de la token 141, prompt diferă la fiecare apel, pentru că extrasele sunt alese per întrebare. Iar 140 de tokens este sub fiecare minim de cache citat în Capitolul 16. Deci ruta doi nu poate fi cached deloc, ceea ce sună rău și nu este: să nu faci caching pentru 1,037 tokens este mai ieftin decât să faci caching pentru 43,298.
Aceasta este o regulă generală care merită păstrată: cele două mari tehnici de economisire a tokens sunt mutual exclusive pe același conținut, iar cea care câștigă este cea care elimină mai mulți tokens. Retrieval elimină 97.6 % dintre ei.
Ruta trei: nu mai trimite documentația
Link către secțiunea: Ruta trei: nu mai trimite documentațiaFă training pe două sute de exemple în stilul casei, apoi pune întrebări fără nicio documentație atașată.
training examples 200
training tokens 24,389
epochs 3
prompt per question (15 + 13) 28Training costă 24,389 × 3 × $10.00 per milion = $0.7317. Acesta este întregul cost de construcție, mai puțin decât o cafea, exact motivul pentru care atât de multe echipe îl plătesc înainte să verifice dacă ajută.
Acum capcana, și acesta este motivul pentru care există capitolul. Un model fine-tuned nu costă la fel ca modelul său de bază când rulează. Pagina de prețuri o spune într-o singură frază: „for model inference starting from Gemini 3, tuned model endpoint prediction price will be 1.5 times of the base model.”6 Nu training-ul. Inference, pe fiecare token, cât timp trăiește modelul.
Așadar pune-o într-o formulă. Fie și prețurile de bază pentru input și output, multiplicatorul tuned, lungimea prompt a rutei pe care o înlocuiești, lungimea prompt după fine-tuning și lungimea răspunsului. Fine-tuning este mai ieftin per întrebare doar când
Primul termen este evident: noul tău prompt scurt, majorat. Al doilea nu este, și acolo se duc banii — suprataxa pe răspuns, care nu are nicio legătură cu prompt și pe care training nu o poate scurta. Cu numerele măsurate — , , , — pragul este
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 tokensLa lungimea măsurată a răspunsului, 492 tokens — dintre care 450 sunt suprataxa pe răspuns, nu prompt. Înlocuirea unui prompt mai scurt decât atât este mai scumpă per întrebare, pentru totdeauna, la orice volum; iar pragul crește liniar cu cât spune assistant-ul tău, așa că unul care scrie răspunsuri lungi nu poate face fine-tuning până la un token mai ieftin oricât prompt ar șterge.
Același fapt, privit din celălalt capăt, este propoziția de ținut minte. Din cei $0.002088 per întrebare ai rutei fine-tuned, 97.0 % este răspunsul. Fine-tuning optimizează restul de trei procente.
Fișa de cost
Link către secțiunea: Fișa de costPatru numere descriu oricare dintre aceste rute: ce plătești o dată, ce plătești când documentația se schimbă, ce plătești pe oră indiferent de utilizare și ce plătești per întrebare. Asta extinde computeCost din Capitolul 16 fără să îl modifice.
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);
}Modelul tuned nu este o listă de prețuri diferită, este aceeași listă multiplicată:
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 })),
});Acea linie evidențiată este întregul argument al secțiunii anterioare scris ca program: multiplicatorul ajunge și pe output.
Șase luni, cu documentația reîmprospătată săptămânal:
| întrebări / lună | prompt, cu cache | prompt, fără 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 |
Și punctele de crossover, cele patru numere de care un buget chiar are nevoie:
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 / monthCitește-le pe primele două împreună, pentru că ele sunt miza capitolului. Un corpus staționar face fine-tuning să se plătească singur în o sută cincizeci de întrebări; un corpus care se schimbă săptămânal mută același crossover cu un factor de douăzeci și șapte, iar la model nu s-a schimbat nimic — doar cât de des plătești din nou pentru el. Costul de construcție este o notă de subsol; costul de mentenanță este decizia.
Dacă acum concluzionezi că un birou de suport aglomerat ar trebui să facă fine-tuning, aritmetica îți dă dreptate. Tot este greșit, iar secțiunea următoare explică de ce.
Ce a învățat de fapt fine-tune
Link către secțiunea: Ce a învățat de fapt fine-tuneFișa de cost are o coloană pe care nu o poate calcula, așa că această secțiune rulează fine-tune: local, pe un model open mic, cu adaptorul scris de mână, nu luat dintr-o bibliotecă. Capitolul 11 a construit LoRA; aici este, pe q_proj și v_proj ale tuturor celor 24 de straturi ale Qwen2.5-0.5B-Instruct la 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 yCele două sute de exemple de training vin mecanic din corpus, deci se reproduc: întrebarea este un titlu de secțiune transformat în întrebare, răspunsul este chiar textul acelei secțiuni într-un stil rigid al casei — o linie care începe cu Short answer:, o linie care începe cu Source: cu calea fișierului. Formatul este forma predată; calea este faptul. Apoi două numere pe douăzeci de întrebări held-out: răspunsul iese în stilul casei și numește fișierul care răspunde cu adevărat la întrebare?
Două baseline-uri fac tabelul lizibil, iar ambele sunt insistența Capitolului 4, nu un adaos ulterior. Zece dintre cele douăzeci de răspunsuri corecte sunt același fișier, deci un model care ignoră întrebarea și răspunde mereu CLAUDE.md obține 10/20. Iar retriever-ul are propriul plafon: pe aceste douăzeci de întrebări, cele patru extrase ale sale conțin fișierul corect de 14 ori și îl rankează primul de 7 ori, deci 14/20 este maximul pe care orice reader l-ar putea obține folosindu-l.
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 / 20Forma a fost învățată, complet și rapid. De la zero la nouăsprezece din douăzeci, dintr-un adaptor de 540,672 de parametri — 0.109 % din model — în cinci minute de training pe un procesor fără placă grafică la vedere.
Faptele nu au fost. Opt din douăzeci nu se distinge de cele zece pe care le obții ignorând complet întrebarea, iar intervalul din Capitolul 4 pe douăzeci de eșantioane o spune clar. Acele căi de fișiere au fost în datele de training de trei ori; ce a ieșit a fost obiceiul de a încheia cu o linie Source: care arată plauzibil. Întrebat întrebarea de la începutul acestui capitol, modelul fine-tuned a răspuns Short answer: 10.x . . . și a citat CLAUDE.md. Răspunsul corect, care se află în CLAUDE.md, este 18.17.0.
Și apoi forma s-a rupt, iar acesta este rândul care justifică experimentul. Dă-i modelului fine-tuned o mie de tokens de extrase retrieved — o formă de prompt pe care nu a văzut-o niciodată, pentru că fiecare training prompt avea douăzeci și opt de tokens — și stilul casei se prăbușește de la 19/20 la 1/20. La întrebarea de la începutul acestui capitol răspunde 18.17.0 — corect, și fără niciunul dintre elementele de format pentru care a fost antrenat. Deci fine-tuning nu a predat un format; a predat un format condiționat de prompts din setul de training, iar primul prompt care a arătat diferit a luat formatul cu el. Orice incluzi în fine-tuning devine singura distribuție de input la care modelul tău este bun, și nimeni nu pune asta în spreadsheet.
O ultimă notă despre metrică, direct spre Capitolul 29: „sursă corectă” punctează forma și faptul împreună, motiv pentru care ambele rânduri de retrieval arată îngrozitor, deși ambele modele au nimerit faptul acelei întrebări. Un singur număr end-to-end ascundea trei lucruri — un retriever la 14/20 recall, un reader de 0.5B și un format de citare — iar alegerea a ce trebuie reparat înseamnă să le separi înainte să măsori, nu după.
Ceasul pe care nu îl controlezi
Link către secțiunea: Ceasul pe care nu îl controleziAcum coloana pe care furnizorii o completează pentru tine. Un model fine-tuned nu este un activ pe care îl deții; este un leasing pe modelul de bază al altcuiva, cu o dată de expirare tipărită pe el. Pe 7 septembrie 2026, secțiunea de fine-tuning a paginii de prețuri OpenAI conținea integral acest anunț:
OpenAI is winding down the fine-tuning platform. The platform is no longer accessible to new users, but existing users of the fine-tuning platform will be able to create training jobs for the coming months. All fine-tuned models will remain available for inference until their base models are deprecated.7
Calendarul este datat la zi: 7 mai 2026, închis organizațiilor care nu făcuseră niciodată fine-tuning; 2 iulie 2026, închis celor care nu rulaseră inference pe un model fine-tuned în șaizeci de zile; 6 ianuarie 2027, fără joburi noi deloc.8 Aceeași pagină programează oprirea modelelor fine-tuned în sine — ft-gpt-3.5-turbo, ft-gpt-4, ft-gpt-4.1-nano, ft-babbage-002, ft-davinci-002 — pe 23 octombrie 2026, fiecare cu un model de bază recomandat ca înlocuitor, ceea ce este un mod politicos de a spune: antrenează-l din nou.
Celălalt furnizor frontier nu ți-a vândut niciodată leasingul. Indexul documentației Anthropic listează 699 de pagini și niciuna nu este despre fine-tuning; secțiunile de personalizare a modelelor din pagina de prețuri Bedrock acoperă Amazon Nova, Amazon Titan, Cohere, Meta și modelele open-weight OpenAI, dar nu Claude.910 Dacă arhitectura ta depinde de un fine-tune, una dintre cele trei familii frontier îți este pur și simplu indisponibilă la orice buget.
Self-hosting înlocuiește leasingul pe un model cu leasingul pe o mașină, iar AWS face aritmetica pe propria pagină: o unitate de model de provisioned throughput pentru un model personalizat, angajament pe o lună, este „1 model unit × $21.18 × 24 hours × 31 days = $15,757.92” pe lună.10 Închirierea directă a metalului este mai ieftină și nu gratuită — $3.99 per GPU-oră on demand pentru un H100, $1.99 preemptible11 — aproximativ $2,900 pe lună pentru o placă ce trebuie să fie pornită indiferent dacă întreabă cineva ceva. Întreaga rută de retrieval la zece mii de întrebări pe lună costă $174.52 pentru șase luni.
Aici LoRA își merită locul, ca argument de buget, nu tehnic. Măsurat pe același model, un adaptor rank-16 peste attention și straturile feed-forward are 8,798,208 parametri — 1.781 % din model, 17.6 MB în bfloat16 — față de 0.988 GB de greutăți de bază, iar optimizer-ul și starea de gradient sunt 140.77 MB acolo unde full fine-tuning are nevoie de 7.90 GB, un factor de 56. Consecința nu este training mai ieftin, ci faptul că un singur model de bază încărcat poate servi mulți adaptori, ceea ce este singurul mod în care costul fix al unui GPU se împarte la ceva. Managed training reflectă asta: $0.48 per milion de tokens low-rank până la 16B față de $0.54 full, cu un minim de $4.00 per job.11 Acel prag minim este detaliul. La 24,389 tokens pentru trei epoci, fiecare retraining pe acest corpus facturează $4.00 în loc de cei $0.04 la care dă aritmetica — $104 în minime pe douăzeci și șase de rulări săptămânale, pentru nouăzeci și unu de cenți de aritmetică.
Cât costă privacy și de ce distillation nu este a patra opțiune
Link către secțiunea: Cât costă privacy și de ce distillation nu este a patra opțiuneÎncă două coloane care apar doar pe factură.
Data residency costă cam zece procente, iar doi furnizori sunt de acord asupra cifrei. OpenAI percepe „a 10 % uplift” pentru endpoint-uri de data-residency la modelele lansate pe sau după 5 martie 2026;7 Vertex își taxează endpoint-urile non-globale la $1.65 față de $1.50, aceleași zece procente.6 Pune asta lângă cele cincizeci de procente pe care le costă un endpoint tuned și folclorul se inversează: residency este ieftină, fine-tuning nu — iar fine-tuning nu este oricum opțiunea privată, pentru că acel corpus ajunge la furnizor în orice caz, o dată la training în loc de o dată per apel.
Cel mai explicit preț pus vreodată pe datele tale este pe aceeași pagină, care listează același model fine-tuned de două ori: cu data sharing activat, inference este exact la jumătate — $2.00 față de $4.00 input, $8.00 față de $16.00 output.7 Faptul că lași furnizorul să păstreze ce ai trimis valorează o reducere de 50 %, ceea ce îți spune cât valorează pentru ei.
Distillation — antrenarea unui model mic al tău pe răspunsurile unuia mare — este de obicei oferită ca ieșire din ambele. Pune-i preț și nu este, pentru că teacher-ul este sistemul pe care încercai să îl înlocuiești: producerea a două sute de exemple de training întrebând ruta de retrieval două sute de întrebări costă 200 × $0.002906 = $0.58, pe lângă cei $0.73 pentru training pe ele. Distillation este ceva ce faci după ce pipeline-ul de retrieval funcționează, ca să îl faci mai ieftin, și moștenește fiecare fapt pe care retriever-ul l-a greșit.
Ce plătești în latență
Link către secțiunea: Ce plătești în latențăBanii sunt jumătatea vizibilă. Cealaltă vine ca așteptare, cu aceeași cauză ca factura: modelul citește întregul prompt înainte să spună un cuvânt. Capitolul 13 a măsurat prefill față de decode pe un model pe care îl puteai atinge; iată aceeași măsurătoare, o rulare, o mașină, în raport cu lungimea prompt:
| prompt tokens | timp până la primul token | per 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 |
Numerele absolute aparțin unui model de 0.5B pe șaisprezece fire CPU și nu spun nimic despre un frontier model găzduit. Forma se transferă exact: prefill crește cu lungimea prompt, iar costul per token urcă pe măsură ce termenul pătratic din Capitolul 9 începe să se vadă — 4.79 ms la o mie de tokens față de 6.04 ms la opt mii, o penalizare de 26 % doar pentru că e mai lung.
Consecința pentru cele trei rute este directă. Ruta unu face prefill pe patruzeci și trei de mii de tokens per întrebare, iar un cache hit este ceea ce face asta suportabil — Capitolul 16 a explicat de ce: o citire din cache înlocuiește munca de prefill, deci cumpără latență și bani într-o singură tranzacție. Ruta doi face prefill pe o mie și adaugă mai întâi un round trip la index. Ruta trei face prefill pe douăzeci și opt și nu adaugă nimic, ceea ce o face măsurabil cea mai rapidă dintre cele trei la răspuns. Doar că răspunde la lucrul greșit.
Unde niciuna dintre cele trei nu este răspunsul
Link către secțiunea: Unde niciuna dintre cele trei nu este răspunsulTrei eșecuri care arată ca probleme de model și nu sunt — zece minute aici economisesc o lună mai târziu:
Documentația nu conține răspunsul
Link către secțiunea: Documentația nu conține răspunsulRetrieval nu poate retrieve ceva ce nu a scris nimeni, iar fine-tuning pe asta doar învață modelul să sune sigur pe el. Dacă întrebarea ta principală de suport nu are răspuns nicăieri în corpus, soluția este un technical writer.
Răspunsul are nevoie de o acțiune, nu de text
Link către secțiunea: Răspunsul are nevoie de o acțiune, nu de text„Unde este comanda mea?” este o interogare de bază de date, nu o întrebare de cunoaștere. Asta este un tool call — Capitolul 18 — și nici training, nici retrieval nu îl înlocuiesc.
Întrebarea este ambiguă și interfața o ascunde
Link către secțiunea: Întrebarea este ambiguă și interfața o ascundeCând două produse au același nume, cel mai bun răspuns posibil este o cerere de clarificare. Aceasta este o decizie de produs despre input, nu o decizie de modelare despre output.
Și cerința peste toate: această decizie nu poate fi luată fără un set de evaluare, iar furnizorul care vinde fine-tune spune același lucru. Ghidul OpenAI începe cu „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” și adaugă că, dacă cincizeci de exemple bune nu schimbă nimic, problema este sarcina sau prompt, nu volumul de date.1 Douăzeci de întrebări, cât a folosit acest capitol, arată un mecanism și nu poate alege un furnizor — Capitolul 4 a măsurat de ce, iar ce faci când douăzeci de cazuri sunt tot ce ai — le repeți, le împerechezi și măsori răspândirea dintre rulări — este Capitolul 29.
Patru coloane, iar numai ultima decide:
| prompt | retrieval | fine-tune | |
|---|---|---|---|
| ce predă | orice poți scrie | fapte care se schimbă | formă și comportament |
| cost de construcție | zero | $0.0070 plus o după-amiază | $0.7317 plus un set de eval |
| cost per întrebare | $0.0079 cached, $0.0663 nu | $0.0029 | $0.0021, peste 492 prompt tokens |
| cost de mentenanță | zero, sau $0.043 pe oră chirie | $0.0070 per rebuild | un retraining per schimbare, plus unul per model de bază retras |
Regula care rezultă, și e suficient de scurtă ca să o ții minte: începe cu prompt; adaugă retrieval când faptele se mișcă; fă fine-tuning doar când ai măsurat că lucrul care îți lipsește încă este o formă, nu un fapt — și pune preț pe răspuns, nu pe prompt, înainte să o faci.
Versiunea incomodă, pentru oricine a venit deja hotărât: în cazul măsurat în acest capitol, fine-tuning este ruta cea mai ieftină peste patru mii de întrebări pe lună, iar la fapte tot nu poate bate răspunsul CLAUDE.md la orice.
Unde mergem mai departe
Link către secțiunea: Unde mergem mai departeFiecare preț de aici a fost per token, iar fiecare rută un mod diferit de a aranja tokens. Asta urmează să nu mai fie adevărat.
Capitolul 21 părăsește textul. O imagine care intră într-un model nu este un string, ci o grilă de patch-uri cu un număr de tokens pe care nu l-ai ales; un minut vorbit este facturat la secundă de un furnizor și la audio token de altul; vorbirea sintetică se vinde la caracter, transcrierea la minut, compute-ul brut la GPU-secundă. Întrebarea la care acest capitol a răspuns cu o singură funcție de cost — ce este mai ieftin? — nici nu poate fi pusă până când unitățile se potrivesc, iar niciun calculator de pe internet nu le normalizează.
Este și locul unde training-ul apare din nou: un adaptor de imagine cu trigger word și o voce clonată dintr-un eșantion. Ceea ce ridică întrebarea cu care începe capitolul următor, și nu este retorică: dacă fine-tuning unui language model este aproape întotdeauna achiziția greșită, de ce fine-tuning unui model de imagine este aproape întotdeauna cea corectă?
Surse și metodă
Link către secțiunea: Surse și metodăFiecare preț, prag și multiplicator din acest capitol a fost citit de pe pagina furnizorului pe 7 septembrie 2026 și este citat cu acea dată, pentru că toate se vor mișca. Cifrele măsurate — număr de tokens, dimensiuni de chunks, dimensiuni de retrieval, training loss, scoruri, latențe și numărători din istoricul de versiuni — au fost produse pe o singură mașină în aceeași zi și sunt reproductibile din corpusul descris mai sus.
Experimentele locale au folosit Qwen/Qwen2.5-0.5B-Instruct cu greedy decoding, deci se reproduc exact; adaptorul este clasa de douăsprezece linii tipărită mai sus, la rank 8 peste q_proj și v_proj. Corpusul este documentația Markdown urmărită a unui repository software aflat în uz, excluzând două jurnale append-only, iar rata sa de schimbare a fost numărată din istoricul de versiuni al acelui repository.
Referințe
Link către secțiunea: Referințe-
OpenAI, Supervised fine-tuning,
developers.openai.com/api/docs/guides/supervised-fine-tuning, și Model optimization,.../guides/model-optimization, ambele accesate 2026-09-07. Sursa pentru: tabelul cu ce este supervised fine-tuning cel mai bun (clasificare, traducere nuanțată, generare de conținut într-un format specific, corectarea eșecurilor de urmare a instrucțiunilor); cele patru beneficii revendicate, inclusiv prompts mai scurte și latență mai mică; minimul de 10 exemple de training și recomandarea de a începe cu 50; și „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 — cunoașterea vine din pretraining, alignment învață în ce format să vorbești — și motivul pentru care o mie de exemple curate au fost suficiente. ↩
-
Brown, T. et al. Language Models are Few-Shot Learners. arXiv:2005.14165 (2020). Sursa pentru in-context learning ca baseline onest: sarcina este demonstrată în prompt și nicio greutate nu este actualizată. ↩
-
Ovadia, O., Brief, M., Mishaeli, M. and Elisha, O. Fine-Tuning or Retrieval? Comparing Knowledge Injection in LLMs. arXiv:2312.05934 (2023). Retrieval a învins unsupervised fine-tuning pentru injectarea cunoașterii, inclusiv pe fapte deja văzute în pretraining. ↩
-
Gekhman, Z. et al. Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations? arXiv:2405.05904 (2024). Exemplele care introduc cunoaștere nouă sunt fitted lent, iar fitting-ul lor crește hallucination pe întrebări fără legătură. ↩
-
Google, Vertex AI generative AI pricing,
cloud.google.com/vertex-ai/generative-ai/pricing, accesat 2026-09-07. Fiecare cifră din fișa de cost a acestui capitol: Gemini 3.5 Flash pe endpoint-ul global la $1.50 per milion de input tokens, $0.15 cached input și $9.00 text output, cu endpoint-uri non-globale cu 10 % mai mari; supervised fine-tuning pentru același model la $0.01 per 1,000 training tokens, unde „training tokens are calculated by the total number of tokens in your training dataset, multiplied by your number of epochs”; stocare explicită de context cache la $0.000001 per token pe oră; input Gemini Embedding la $0.00015 per 1,000 tokens online; și nota că „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, accesat 2026-09-07. Sursa anunțului de wind-down citat integral și a tarifelor text curente folosite pentru cross-check:gpt-5.6-terrastandard short context la $2.00 input, $0.20 cached input, $2.50 cache write și $12.00 output per milion de tokens, cu tier-ul batch la jumătate din fiecare. Pagina conține zece rânduri de fine-tuning peste șapte modele de bază, iar exact unul dintre ele este facturat după timp, nu după tokens: reinforcement fine-tuning pentruo4-mini-2025-04-16la $100.00 per oră de training. Aceeași pagină menționează o majorare de 10 % pe endpoint-urile de data-residency pentru modelele lansate pe sau după 5 martie 2026. ↩ ↩2 ↩3 -
OpenAI, Deprecations,
developers.openai.com/api/docs/deprecations, accesat 2026-09-07. Sursa calendarului self-serve fine-tuning (7 mai 2026, 2 iulie 2026, 6 ianuarie 2027) și a opririi din 23 octombrie 2026 pentruft-gpt-3.5-turbo,ft-gpt-4,ft-gpt-4.1-nano-2025-04-14,ft-babbage-002șift-davinci-002, fiecare listat cu un model de bază recomandat ca înlocuitor. ↩ -
Anthropic, indexul documentației pentru dezvoltatori,
platform.claude.com/llms.txt, accesat 2026-09-07. 699 de pagini listate, niciuna despre fine-tuning;platform.claude.com/docs/en/build-with-claude/fine-tuningreturnează 404. ↩ -
Amazon Web Services, Amazon Bedrock pricing,
aws.amazon.com/bedrock/pricing/, accesat 2026-09-07. Sursa secțiunilor de model-customisation (Amazon Nova, Amazon Titan, Cohere, Meta, Qwen și modelele open-weight OpenAI — fără Claude), a taxei lunare de $1.95 pentru stocarea fiecărui model custom și a exemplului citat: „1 model unit × $21.18 × 24 hours × 31 days = $15,757.92”. ↩ ↩2 -
Together AI, Pricing,
together.ai/pricing, accesat 2026-09-07. Fine-tuning per milion de tokens pentru modele până la 16B: $0.48 low-rank și $0.54 full pentru supervised fine-tuning, $1.20 și $1.35 pentru direct preference optimisation, cu prețul calculat ca „training dataset size × number of epochs” plus evaluation tokens și „a minimum charge of $4.00” per job. Capacitate GPU: $3.99 per GPU-oră on demand pentru HGX H100, $1.99 preemptible, $5.99 pentru H200. ↩ ↩2