Table of Contents

Cel mai bun model local pentru programare este cel care păstrează suficient din proiect în memorie și îl citește suficient de repede pentru a rămâne util. Dimensiunea modelului contează în continuare. Un model care încape doar după transferul în RAM-ul sistemului se simte adesea mai slab decât un model mai mic cu o fereastră de context stabilă.

Alege modelul și bugetul de memorie împreună. Nu alege un model dintr-un clasament și apoi nu îl forța pe hardware nepotrivit.

Acest ghid se concentrează pe agenți de programare, nu pe prompturi scurte de autocomplete. Un agent citește fișiere, rezultate ale instrumentelor, erori de compilator și rezultate ale testelor înainte de a scrie o remediere. Aceste intrări consumă context și schimbă alegerea hardware-ului.

Videoclipul este o referință

Videoclipul următor compară modele locale în mai multe niveluri de memorie GPU. Este util pentru observațiile practice despre alegerea modelelor și rezultatele hardware raportate. Acest articol organizează decizia în jurul comportamentului memoriei, contextului agentului, procesării promptului și costului total de proprietate.

De ce eșuează clasamentele pe niveluri

Un clasament de modele leagă de obicei numărul de parametri de o valoare a memoriei GPU. Această scurtătură ajută la prima estimare. Nu mai ajută când un agent de programare începe să citească un repository real.

Greutățile modelului sunt prima alocare. KV cache este alocarea care crește. Păstrează cheile și valorile attention pentru contextul activ, astfel încât runtime-ul să nu recalculeze întregul prompt după fiecare token generat.

Consumator de memorieCe păstreazăDe ce contează
Greutățile modeluluiParametri cuantizațiCerință de încărcare unică
KV cacheNote din contextul activCrește odată cu promptul și conversația
Bufferele runtimeSpațiu temporar pentru calculeVariază după backend și dimensiunea batchului
Instrucțiunile agentuluiPrompturi de sistem și definiții de instrumenteConsumă context înainte de fișierele proiectului

Faptul că fișierul modelului încape pe placă nu dovedește că agentul va fi utilizabil. Runtime-ul are nevoie de loc pentru cache, buffere temporare, definiții de instrumente și următorul răspuns.

Contextul este bugetul real

Agenții de programare consumă context pentru mai mult decât fișiere sursă. Bugetul include și instrucțiuni de sistem, scheme de instrumente, liste de directoare, ieșire shell, mesaje de compilator, rezultate de teste și ture anterioare ale conversației.

Trei conexiuni MCP cu definiții detaliate de instrumente consumă adesea câteva mii de tokenuri înainte ca agentul să deschidă un fișier al proiectului. Un context implicit mic lasă puțin loc pentru cod. Agentul răspunde în continuare, dar pierde setul de lucru necesar pentru remedieri în mai mulți pași.

Runtime FAQ pentru Ollama listează un context implicit de 4.096 de tokenuri. Setarea OLLAMA_CONTEXT_LENGTH schimbă valoarea implicită, iar OLLAMA_NUM_PARALLEL mărește memoria necesară în funcție de numărul de cereri simultane. Notează ambele valori înainte să compari un benchmark local cu un rezultat pentru o singură cerere.

OLLAMA_CONTEXT_LENGTH=32768 OLLAMA_NUM_PARALLEL=1 ollama serve

Acest exemplu setează un implicit de 32K pentru o cerere activă. Nu rezervă 32K de tokenuri pentru fișierele proiectului. Instrucțiunile, definițiile instrumentelor, intrarea și ieșirea împart în continuare fereastra.

Un registru simplu al contextului

Înainte să compari GPU-uri, notează aceste valori:

  • Dimensiunea proiectului: fișiere și numărul aproximativ de linii sursă într-o sarcină normală.
  • Supraincărcarea instrumentelor: prompt de sistem, scheme MCP, instrumente shell și instrucțiuni de editor.
  • Încărcătura erorii: lungimea normală a ieșirii compilatorului și testelor.
  • Contextul țintă: cel mai mare prompt pe care vrei să îl păstrezi fără trunchiere.
  • Rezerva pentru răspuns: spațiul rezervat pentru patch-ul și explicația planificate.

Folosește rezultatul ca specificație de sarcină. Un dezvoltator care editează câte un fișier are o cerință de memorie diferită de un dezvoltator care cere agentului să urmărească un API într-un monorepo.

KV cache schimbă clasamentul

Două modele cu un număr asemănător de parametri au adesea costuri diferite pentru context. Un model dens în care fiecare strat contribuie la cache-ul în creștere poate necesita mai multă memorie decât un model cu design de attention hibrid.

Un model de programare 27B discutat în materialul de referință folosește un set limitat de straturi cu attention complet, iar celelalte straturi folosesc un rezumat de dimensiune fixă. Costul raportat pentru context 128K rămâne sub 9GB pentru cache. Un model de dimensiune apropiată, cu attention complet în creștere în fiecare strat, necesită conform raportului peste 21GB la aceeași lungime de context.

Aceste valori descriu arhitecturi și setări runtime specifice. Folosește-le ca motiv să inspectezi arhitectura, nu ca formulă universală de memorie.

Comportamentul modeluluiEfect asupra contextuluiImplicație hardware
Attention complet în fiecare stratCreștere mare a cache-uluiNecesită mai multă memorie pentru prompturi lungi
Attention hibrid sau slidingCreștere mai mică a cache-ului în unele straturiMai mult spațiu pentru context la aceeași dimensiune a modelului
Mixture of expertsMai puțini parametri activi pe tokenMai puține calcule pe token, dar toate greutățile au nevoie de stocare
Extensie pentru context lungFereastră de lucru mai mareMai multă memorie pentru cache și mai multă procesare a promptului

Citește arhitectura modelului înainte să cumperi memorie. Numărul de parametri ascunde costul unei sesiuni lungi de programare.

Alege după nivelul de memorie GPU

Patru până la opt GB

Modelele dense mici rămân alegerea practică. Încap pe placă, răspund rapid și funcționează bine pentru autocomplete, explicații scurte și modificări înguste de fișiere.

Un model mai mare cu CPU offload poate produce text, dar timpul de răspuns devine adesea limita. Un agent de programare are nevoie de citiri repetate ale fișierelor și apeluri de instrumente. O configurație de patru tokenuri pe secundă transformă fiecare remediere într-o așteptare lungă, chiar dacă modelul rulează tehnic.

Modelele mixture-of-experts oferă o altă cale. O parte activă mică reduce presiunea de calcul, iar întregul set de greutăți rămâne parțial în memoria sistemului. Abordarea favorizează un sistem cu mult RAM și căi rapide de transfer.

SarcinăDirecție sugerată
AutocompleteModel dens mic cu prompt scurt
Editări ale unui singur fișierModel instruct mic cu suport pentru instrumente
Agent pentru întregul repositoryÎnchiriază un GPU mai mare sau mărește mai întâi memoria sistemului
Cod privat sub NDAFolosește un model local, acceptând un domeniu mai mic sau rulări mai lente

La acest nivel, cumpără RAM de sistem înainte să urmărești un model mare. Un model mic stabil este mai bun decât un model mare care își petrece cea mai mare parte a timpului mutând date pe magistrală.

Doisprezece până la șaisprezece GB

Acest nivel deschide calea către un model de programare 27B, dar alegerea cuantizării devine centrală. Un build standard 4-bit de aproape 17GB nu încape pe o placă de 16GB după includerea supraincărcării runtime.

Un build 3-bit de aproape 13GB lasă mai mult loc pentru context. O placă de 12GB împinge alegerea spre un build 2-bit sau un model mixture-of-experts mai mic. Calitatea depinde de cuantizatorul și procesul de calibrare folosite, astfel că două uploaduri cu aceeași adâncime de biți dau adesea rezultate diferite la programare.

Verifică înainte să descarci un model cuantizat:

  • Autorul cuantizatorului și notele versiunii
  • Datele de calibrare și rezultatele evaluării
  • Compatibilitatea tokenizerului
  • Testele de apelare a instrumentelor
  • Lungimea contextului la cuantizarea aleasă
  • Suportul runtime în Ollama, llama.cpp sau interfața aleasă

Nu trata „2-bit” sau „3-bit” ca pe o descriere completă a calității. Metoda de împachetare și înregistrarea calibrării contează.

Douăzeci și patru până la treizeci și doi GB

Acesta este intervalul cel mai flexibil pentru un model de programare 27B. O placă de 24GB încape adesea un build 4-bit cu un context util, dar o fereastră completă de 128K poate depăși memoria rămasă. O placă de 32GB oferă runtime-ului mai mult loc pentru cache și alocări temporare.

Acest interval face și proprietatea mai ușor de justificat. Un GPU gestionează sarcina fără complexitatea împărțirii pe două plăci. Sistemul folosește mai puțină energie decât un build multi-GPU, iar suportul software este mai ușor de testat.

CapacitatePoziție practică
24GBModel 4-bit puternic, cu limite de context de măsurat
32GBModel 4-bit sau 6-bit 27B cu rezervă mai mare pentru context
48GBPrecizie mai mare sau cache mai mare fără schimbarea modelului de bază

Intervalul 24GB până la 32GB este zona rezonabilă de proprietate pentru programare privată frecventă. Evită cel mai slab comportament de offload fără să forțeze hardware de centru de date într-o carcasă desktop.

Patruzeci și opt GB sau mai mult

Mai multă memorie nu înseamnă automat un model nou. Același model 27B poate rula la precizie 8-bit pe o placă de 48GB, cu un cache mai mare și mai puține compromisuri. Îmbunătățirea este în consistență, spațiu de context și calitatea ieșirii, nu într-un nou nivel de raționament.

La 128GB, decizia se schimbă. Devine posibil un model mixture-of-experts mult mai mare, dar procesarea promptului devine o problemă serioasă. Modelul generează adesea rapid, dar consumă mult timp pentru a încărca un repository mare sau un rezultat nou al unui instrument.

Pentru modele mari, măsoară separat viteza prefill și viteza decode. Un răspuns rapid după citirea lentă a promptului se simte tot lent în fluxul unui agent.

Viteza decode este doar jumătate din test

Viteza decode măsoară tokenurile generate pe secundă. Răspunde la întrebarea „Cât de repede scrie modelul?”. Viteza prefill măsoară procesarea promptului. Răspunde la întrebarea „Cât de repede citește modelul?”.

Un agent își petrece mult timp citind. Fiecare apel de instrument adaugă text nou. Un fișier sursă lung, un stack trace sau un log de test intră în prompt înainte de începerea următorului răspuns.

MetricăExperiența utilizatorului
Tokenuri decode pe secundăCât de repede apare răspunsul după procesare
Tokenuri prompt pe secundăCât așteaptă agentul înainte să înceapă răspunsul
Timp până la primul tokenÎntârzierea combinată a procesării promptului și configurării
Păstrarea contextuluiCât din starea proiectului rămâne disponibil în timpul sarcinii

Benchmarkuiește dimensiunile propriilor prompturi. Un prompt sintetic scurt ascunde costul care contează cel mai mult în lucrul cu repository-ul.

Mai întâi, setările runtime gratuite

Upgrade-ul hardware nu este primul pas pentru performanță. Testează setările runtime înainte să deschizi o pagină de cumpărături.

Predicția mai multor tokenuri

Unele combinații de model și backend pot prezice mai multe tokenuri viitoare, apoi le verifică într-o singură trecere. Funcția este adesea expusă printr-un flag runtime sau o configurație draft compatibilă.

Testele raportate în materialul de referință arată câștiguri mari pe unele plăci high-end. Rezultatele variază după fișierul modelului, backend, driver și placă. Căile Apple Metal pot să nu păstreze funcția necesară în timpul conversiei.

Nivelul de raționament

Un model livrat cu raționament maxim activat petrece mai mult timp cu lucrul intern înainte să returneze un rezultat. Raționamentul mediu oferă adesea un echilibru mai bun pentru repararea codului, mai ales când sarcina include deja un mesaj de eroare clar și un fișier țintă îngust.

Folosește o matrice simplă de testare:

  1. Rulează aceeași sarcină de remediere cu raționament scăzut, mediu și ridicat.
  2. Notează timpul până la primul token, timpul total, succesul patch-ului și rezultatul testului.
  3. Repetă cu un prompt scurt și cu un prompt de dimensiunea repository-ului.
  4. Păstrează setarea care produce cea mai bună sarcină finalizată, nu cea mai mare rată de tokenuri.

Raționamentul mediu cu o cale compatibilă pentru mai multe tokenuri este un punct de pornire bun. Verifică mai întâi calitatea pe propriul cod.

Hardware local sau GPU închiriat?

Calculul închiriat câștigă pentru utilizarea ocazională. Plătești pentru sesiunile active în loc să cumperi, să răcești, să actualizezi și să alimentezi o placă tot anul.

Hardware-ul deținut câștigă atunci când sarcina este frecventă, privată sau offline. Elimină și timpul de așteptare și oferă un mediu stabil pentru teste repetabile.

SituațiePrimul pas mai bun
Câteva sesiuni pe lunăÎnchiriază un GPU sau folosește un API
Programare privată zilnicăCumpără un sistem compatibil de 24GB până la 32GB
Repository mare cu reîncărcări frecventeÎnchiriază mai întâi și măsoară viteza prefill
Niciun cod nu părăsește clădireaDeține cel mai mic sistem care atinge contextul țintă
Experimentarea cu un model nouÎnchiriază înainte să cumperi hardware

Calculează pragul de rentabilitate cu ore active, nu cu ore calendaristice. Include electricitatea, stocarea, răcirea, întreținerea și timpul necesar pentru menținerea runtime-ului.

Un GPU high-end cumpărat pentru experimente ocazionale este o cheltuială de hobby. Un sistem de 24GB până la 32GB folosit zilnic pentru muncă privată are un caz economic mai bun.

O listă de cumpărare mai bună

Folosește această ordine când compari un model și un GPU:

  1. Definește sarcina. Autocomplete, remedierea unui fișier, agent pentru repository sau analiză cu context lung.
  2. Măsoară promptul. Numără instrucțiunile normale de sistem, schemele instrumentelor, fișierele și ieșirea testelor.
  3. Inspectează comportamentul cache-ului. Caută notele arhitecturii și măsurători ale memoriei de context.
  4. Alege cuantizarea. Verifică rezultatele de calitate ale uploadului specific, nu doar numărul de biți.
  5. Testează prefill și decode. Folosește prompturi din propriul repository.
  6. Reglează raționamentul. Compară timpul sarcinii finalizate la mai multe niveluri de raționament.
  7. Testează confidențialitatea și întreținerea. Confirmă unde ajunge codul sursă și cine întreține backend-ul.
  8. Compară costul închirierii. Folosește orele active estimate și include energia în estimarea sistemului deținut.

Recomandarea finală

Sub 12GB, rulează un model mai mic sau un model mixture-of-experts cu suficient RAM de sistem. Nu forța un model dens 27B într-o configurație care își petrece cea mai mare parte a timpului făcând offload.

Între 12GB și 16GB, concentrează-te pe calitatea cuantizării și pe un context țintă controlat. Un build 2-bit sau 3-bit bine testat, cu suport pentru instrumente, este mai util decât un fișier 4-bit care nu încape curat.

Între 24GB și 32GB, un model de programare 27B devine alegerea implicită practică pentru munca privată zilnică. Măsoară utilizarea contextului și viteza promptului înainte să presupui că întreaga fereastră publicitară este disponibilă.

La 48GB și peste, folosește memoria suplimentară pentru precizie, spațiu de cache și sesiuni stabile înainte să treci la un model mai mare. Când modelul intră în zona de 128GB, viteza de citire a promptului și economia închirierii merită mai multă atenție decât capacitatea brută.

Numele modelului este doar punctul de plecare. Întrebarea utilă este cât context al proiectului rămâne după ce modelul, runtime-ul, instrumentele și cache-ul își iau partea.

Lecturi conexe