{"id":1478,"date":"2026-09-20T07:18:43","date_gmt":"2026-09-20T07:18:43","guid":{"rendered":"https:\/\/www.budus.it\/Blog\/?p=1478"},"modified":"2026-09-20T07:18:44","modified_gmt":"2026-09-20T07:18:44","slug":"ollama-ottimizzare-la-finestra-di-contesto-context-window","status":"publish","type":"post","link":"https:\/\/www.budus.it\/Blog\/ollama-ottimizzare-la-finestra-di-contesto-context-window\/","title":{"rendered":"Ollama: Ottimizzare la Finestra di Contesto (Context Window)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Lavorando con risorse ristrette (neanche tanto, ho 20 GB di VRAM sulla scheda, ma comunque poche per modelli oltre <em>una certa dimensione<\/em>), devo limitare la <em>Finestra di Contesto<\/em>, ovvero, quella zona di memoria usata dall&#8217;LLM per immagazzinare <em>i dati che gli diamo in pasto<\/em> (prompt, file, &#8230;).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pi\u00f9 \u00e8 grande questa finestra, pi\u00f9 il modello ha capacit\u00e0 di immagazzinare dati e svolgere lavori sempre pi\u00f9 complessi, tuttavia, questo aumenta linearmente la richiesta di memoria al sistema, superata la quale, viene utilizzato un meccanismo (da parte di Ollama, in questo caso, ma immagino che anche gli altri software analoghi adottino la medesima tecnica) di <strong>sdoppiamento tra VRAM e RAM<\/strong>; in altri termini, i <em>layer che compongono il modello<\/em>, vengono suddivisi tra VRAM e RAM e il risultato \u00e8 che si riesce a far girare comunque un modello che non riuscirebbe a risiedere nella sola VRAM, salvo riducendo la finestra di contesto a valori che poi lo rendono pressoch\u00e9 inutile (ovviamente parliamo di <em>modelli per hardware terrestre<\/em>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tuttavia, questa modalit\u00e0, ha una penalizzazione: il drastico crollo delle prestazioni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quindi?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sei fottuto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spera che la riduzione della finestra non debba scendere sotto i 64k, altrimenti, forse \u00e8 meglio evitare. Per come la penso io (e dai test che ho fatto), il <em>minimo sindacale<\/em> \u00e8 32k, non meno, sotto: <strong>lascia perdere<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ma come si fa?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ecco i passaggi:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Creati una cartella (ad es.: <code>Qwen-27B-48k<\/code> , per un modello che deve avere la finestra a 48k, che per\u00f2 \u00e8 solo un nome mnemonico, non stabilisce la dimensione voluta, ci fa solo ricordare per cosa \u00e8 stata creata la cartella); dimenticavo, il tutto va fatto da terminale, quindi <strong>Alt+x i<\/strong> (su Windows), quindi <code>mkdir Qwen-27B-48k<\/code>.<\/li>\n\n\n\n<li>All&#8217;interno della cartella ci dobbiamo creare un file &#8220;Modelfile&#8221;, ad esempio: <code>edit Modelfile_48k<\/code>.<\/li>\n\n\n\n<li>Il contenuto del file in questione <em>deve essere analogo a questo di esempio<\/em>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM Qwen3.8-27B\nPARAMETER num_ctx 49152<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La misura del contesto va espressa in byte, quindi, dobbiamo ipotizzare la misura che desideriamo; solitamente i tagli sono 4k, 8k, 16k, 32k, 64k, 128k, 256k ma nulla vieta di fare tagli intermedi, importante \u00e8 che siano interi e soprattutto, moltiplicare il taglio scelto per <code>1024<\/code>, quindi, se ad esempio scegliamo 48k (un taglio intermedio), abbiamo: <code>48 * 1024 = 49152<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Potrebbe sorgere spontanea (anzi, dovrebbe) la domanda: <strong>ma in che modo ipotizzo la misura di contesto ottimale per il mio hardware?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il metodo <em>ortodosso<\/em> non so quale sia, io mi sono arrangiato con un <em>metodo empirico<\/em>: <strong>lancio il modello e con <code>ollama ps<\/code> vedo come viene suddiviso e in base a questa informazione riduto per ottenere l&#8217;occupazione della VRAM ottimale<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ad esempio ho provato un modello <em>quantizzato a 4 bit e de-censurato<\/em> di Qwen3.8-27b (s\u00ec, lo so, \u00e8 un casino, tra finestre di contesto, layer, quantizzazione, ecc., un sacco di roba molto nebulosa, ma cos\u00ec \u00e8 &#8230;) e questo \u00e8 il risultato sul mio hardware (che ha 20 GB di VRAM e 64 GB di RAM):<br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ollama ps\nNAME                                        ID              SIZE     PROCESSOR          CONTEXT    UNTIL\norcarouter\/Qwen3.8-27B-Uncensored:iq4_xs    84e6355d6764    34 GB    48%\/52% CPU\/GPU    262144     4 minutes from now   <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Come si pu\u00f2 notare, ben il 52% \u00e8 collocato in RAM; questo significa che richiede oltre 40 GB di VRAM per girare (e gi\u00e0 \u00e8 quantizzato <em>scarso<\/em>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Invece, con contesto a 48k, questo il risultato:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>NAME                   ID              SIZE     PROCESSOR    CONTEXT    UNTIL\nQwen-27B-48k:latest    b5fff7ca760e    18 GB    100% GPU     49152      4 minutes from now<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Come si pu\u00f2 notare, risiede completamente nella VRAM!<br>Questo implica prestazioni e stabilit\u00e0 <strong>completamente diverse<\/strong> dalla situazione precedente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">5. L&#8217;ultimo passaggio consiste nel creare il modello, ad esempio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ollama create Qwen-27B-48k -f Modelfile_48k<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dopodich\u00e9, vi basta un semplice <code>ollama run Qwen-27B-48k<\/code> per lanciarlo e <code>ollama ps<\/code> (in un altro terminale) per vedere il consumo di risorse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da l\u00ec potete aumentare o calare con il contesto (<strong>importante: ricordarsi di modificare il <code>Modelfile<\/code>, tipicamente mi scordo di farlo!<\/strong>) per ottimizzare alle vostre esigenze.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lavorando con risorse ristrette (neanche tanto, ho 20 GB di VRAM sulla scheda, ma comunque poche per modelli oltre una certa dimensione), devo limitare la Finestra di Contesto, ovvero, quella zona di memoria usata dall&#8217;LLM per immagazzinare i dati che gli diamo in pasto (prompt, file, &#8230;). Pi\u00f9 \u00e8 grande questa finestra, pi\u00f9 il modello &hellip; <a href=\"https:\/\/www.budus.it\/Blog\/ollama-ottimizzare-la-finestra-di-contesto-context-window\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Ollama: Ottimizzare la Finestra di Contesto (Context Window)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[286],"tags":[287],"class_list":["post-1478","post","type-post","status-publish","format-standard","hentry","category-ai","tag-ollama"],"_links":{"self":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/1478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/comments?post=1478"}],"version-history":[{"count":1,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/1478\/revisions"}],"predecessor-version":[{"id":1479,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/1478\/revisions\/1479"}],"wp:attachment":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/media?parent=1478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/categories?post=1478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/tags?post=1478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}