{"id":9330,"date":"2026-08-09T15:37:44","date_gmt":"2026-08-09T13:37:44","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/narzedzia\/llm-ollama-vram-memory-estimator\/"},"modified":"2026-10-05T16:00:12","modified_gmt":"2026-10-05T14:00:12","slug":"llm-ollama-vram-memory-estimator","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-ollama-vram-memory-estimator\/","title":{"rendered":"Planer pami\u0119ci i sprz\u0119tu dla LLM"},"content":{"rendered":"<style>.lw-ai{font:inherit;color:var(--text-primary);min-width:0}.lw-ai *{box-sizing:border-box}.lw-ai .ai-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}.lw-ai label{display:block;font-weight:600;margin:0 0 6px}.lw-ai input,.lw-ai select,.lw-ai textarea{width:100%;max-width:100%;min-width:0;background:var(--bg-body,var(--bg-panel));color:var(--text-primary);border:1px solid var(--border);border-radius:6px;padding:10px;font:inherit}.lw-ai textarea{height:160px;resize:vertical}.lw-ai .ai-field{min-width:0}.lw-ai [aria-invalid=true]{border:2px solid #d44}.lw-ai .ai-actions{display:flex;flex-wrap:wrap;gap:10px;margin:20px 0}.lw-ai button{font:inherit;min-height:44px}.lw-ai button:disabled{opacity:.5;cursor:not-allowed}.lw-ai .ai-status{color:var(--text-primary);border-left:3px solid var(--accent);padding-left:10px}.lw-ai .ai-result{background:var(--bg-panel);border:1px solid var(--border);border-radius:10px;padding:18px;overflow-wrap:anywhere}.lw-ai .ai-result:empty{display:none}.lw-ai dl{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:0}.lw-ai dt,.lw-ai dd{margin:0;padding:8px 0;border-bottom:1px solid var(--border)}.lw-ai .ai-scroll{overflow:auto;max-width:100%}.lw-ai table{border-collapse:collapse;width:100%;font-size:.9rem}.lw-ai th,.lw-ai td{padding:9px;border:1px solid var(--border);text-align:left;vertical-align:top;width:auto!important}.lw-ai th{font-weight:700}.lw-ai .ai-scroll th,.lw-ai .ai-scroll td{min-width:120px}.lw-ai .ai-caption{font-size:.9rem;color:var(--text-secondary);line-height:1.6}.lw-ai h2{margin-top:30px}.lw-ai .ai-chart{width:100%;height:240px;display:block;background:var(--bg-body);border:1px solid var(--border)}.lw-ai .ai-private{margin:18px 0}.lw-ai details{margin:16px 0}.lw-ai summary{cursor:pointer;font-weight:600}.lw-ai a{color:var(--accent)}@media(max-width:600px){.lw-ai .ai-form{grid-template-columns:1fr}.lw-ai dl{grid-template-columns:1fr}.lw-ai dd{padding-top:0}.lw-ai .ai-result{padding:12px}.lw-ai .ai-chart{height:220px}}<\/style>\n<div class=\"lw-ai\" data-rc-private data-mp-mask>\n<p>Osobne obliczenia sk\u0142adnik\u00f3w pami\u0119ci, kontekstu i zapasu. Wystarczaj\u0105cy bud\u017cet nie potwierdza obs\u0142ugi backendu ani szybko\u015bci.<\/p>\n<p class=\"ai-caption\">Obliczenia i import plik\u00f3w dzia\u0142aj\u0105 w przegl\u0105darce. Narz\u0119dzia nie przesy\u0142aj\u0105 danych wej\u015bciowych. Istniej\u0105cy pomiar witryny obejmuje identyfikator narz\u0119dzia i etykiety przycisk\u00f3w.<\/p>\n<p class=\"ai-caption\">Warto\u015bci domy\u015blne stanowi\u0105 przyk\u0142adowe za\u0142o\u017cenia. Wyniki s\u0142u\u017c\u0105 planowaniu.<\/p>\n<p><script type=\"application\/json\" data-config>{\"kind\": \"memory\", \"slug\": \"llm-ollama-vram-memory-estimator\", \"title\": \"Planer pami\u0119ci i sprz\u0119tu dla LLM\", \"intro\": \"Osobne obliczenia sk\u0142adnik\u00f3w pami\u0119ci, kontekstu i zapasu. Wystarczaj\u0105cy bud\u017cet nie potwierdza obs\u0142ugi backendu ani szybko\u015bci.\", \"fields\": [{\"key\": \"profile\", \"label\": \"Profil sprz\u0119tu (przyk\u0142adowy bud\u017cet)\", \"value\": \"custom\", \"options\": [{\"value\": \"custom\", \"label\": \"W\u0142asny bud\u017cet pami\u0119ci\"}, {\"value\": \"12\", \"label\": \"RTX 3060 12 GB \/ Intel B580 12 GB\"}, {\"value\": \"16\", \"label\": \"RTX 5060 Ti 16 GB\"}, {\"value\": \"24\", \"label\": \"RTX 3090 \/ 4090 24 GB; Intel B60 24 GB\"}, {\"value\": \"32\", \"label\": \"RTX 5090 32 GB\"}, {\"value\": \"128\", \"label\": \"Pami\u0119\u0107 wsp\u00f3\u0142dzielona: przyk\u0142ad 128 GiB\"}, {\"value\": \"22\", \"label\": \"2080 Ti 22 GB: niepotwierdzona modyfikacja\"}, {\"value\": \"20\", \"label\": \"3080 20 GB: niepotwierdzona modyfikacja\"}, {\"value\": \"48\", \"label\": \"4090D 48 GB: niepotwierdzona modyfikacja\"}], \"type\": \"select\"}, {\"key\": \"weightMode\", \"label\": \"Obliczanie wag\", \"value\": \"params\", \"options\": [{\"value\": \"params\", \"label\": \"Parametry \u00d7 efektywne bity\"}, {\"value\": \"file\", \"label\": \"Rzeczywisty rozmiar artefaktu\"}], \"type\": \"select\"}, {\"key\": \"params\", \"label\": \"\u0141\u0105czne parametry (miliardy, tak\u017ce MoE)\", \"value\": 8, \"min\": 0.001, \"max\": 1000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"bits\", \"label\": \"Efektywne bity na wag\u0119\", \"value\": 4.5, \"min\": 0.1, \"max\": 64, \"integer\": false, \"type\": \"number\"}, {\"key\": \"file\", \"label\": \"Rozmiar artefaktu\", \"value\": 4.5, \"min\": 0, \"max\": 1000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"fileUnit\", \"label\": \"Jednostka artefaktu\", \"value\": \"GB\", \"options\": [{\"value\": \"GB\", \"label\": \"GB = 10\u2079 bytes\"}, {\"value\": \"GiB\", \"label\": \"GiB = 2\u00b3\u2070 bytes\"}], \"type\": \"select\"}, {\"key\": \"arch\", \"label\": \"Model pami\u0119ci podr\u0119cznej\", \"value\": \"dense\", \"options\": [{\"value\": \"dense\", \"label\": \"Konwencjonalna g\u0119sta pami\u0119\u0107 KV\"}, {\"value\": \"manual\", \"label\": \"Zmierzona \/ zewn\u0119trznie obliczona pami\u0119\u0107\"}, {\"value\": \"unknown\", \"label\": \"Hybrydowa \/ MLA \/ nieznana\"}], \"type\": \"select\"}, {\"key\": \"layers\", \"label\": \"Warstwy\", \"value\": 32, \"min\": 1, \"max\": 10000, \"integer\": true, \"type\": \"number\"}, {\"key\": \"heads\", \"label\": \"G\u0142owy KV\", \"value\": 8, \"min\": 1, \"max\": 10000, \"integer\": true, \"type\": \"number\"}, {\"key\": \"dim\", \"label\": \"Wymiar g\u0142owy\", \"value\": 128, \"min\": 1, \"max\": 10000, \"integer\": true, \"type\": \"number\"}, {\"key\": \"tokens\", \"label\": \"Zarezerwowane tokeny na sekwencj\u0119\", \"value\": 8192, \"min\": 1, \"max\": 10000000, \"integer\": true, \"type\": \"number\"}, {\"key\": \"seq\", \"label\": \"R\u00f3wnoleg\u0142e sekwencje\", \"value\": 1, \"min\": 1, \"max\": 10000, \"integer\": true, \"type\": \"number\"}, {\"key\": \"kbytes\", \"label\": \"Pami\u0119\u0107 K: bajty na element\", \"value\": \"2\", \"options\": [{\"value\": \"2\", \"label\": \"FP16 \/ BF16: 2\"}, {\"value\": \"4\", \"label\": \"FP32: 4\"}], \"type\": \"select\"}, {\"key\": \"vbytes\", \"label\": \"Pami\u0119\u0107 V: bajty na element\", \"value\": \"2\", \"options\": [{\"value\": \"2\", \"label\": \"FP16 \/ BF16: 2\"}, {\"value\": \"4\", \"label\": \"FP32: 4\"}], \"type\": \"select\"}, {\"key\": \"cache\", \"label\": \"R\u0119czny bud\u017cet pami\u0119ci podr\u0119cznej (GiB)\", \"value\": 1, \"min\": 0, \"max\": 1000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"runtime\", \"label\": \"Bufory wykonawcze (GiB)\", \"value\": 1.5, \"min\": 0, \"max\": 1000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"other\", \"label\": \"System \/ inne aplikacje (GiB)\", \"value\": 0, \"min\": 0, \"max\": 1000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"reserve\", \"label\": \"Wolny zapas (GiB)\", \"value\": 1, \"min\": 0, \"max\": 1000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"capacity\", \"label\": \"Dost\u0119pna pula pami\u0119ci (GiB)\", \"value\": 12, \"min\": 0.01, \"max\": 1000000, \"integer\": false, \"type\": \"number\"}], \"note\": \"Wagi = \u0142\u0105czna liczba parametr\u00f3w \u00d7 efektywne bity \/ 8. G\u0119sta pami\u0119\u0107 KV = warstwy \u00d7 g\u0142owy KV \u00d7 wymiar g\u0142owy \u00d7 tokeny \u00d7 sekwencje \u00d7 (bajty K + bajty V). Rozmiar artefaktu nie gwarantuje zu\u017cycia podczas pracy. Kwantyzacja pami\u0119ci, sliding window oraz architektury hybrydowe i rekurencyjne wymagaj\u0105 odpowiednich modeli lub zmierzonego bud\u017cetu. Profile kart podaj\u0105 GB producenta; bud\u017cet GiB to edytowalne za\u0142o\u017cenie do sprawdzenia w runtime. Pami\u0119\u0107 wielu kart nie jest sumowana.\", \"sources\": [[\"Ollama metadata\", \"https:\/\/github.com\/ollama\/ollama\/blob\/main\/docs\/openapi.yaml\"], [\"llama.cpp cache types\", \"https:\/\/github.com\/ggml-org\/llama.cpp\/blob\/master\/tools\/server\/README.md\"], [\"NVIDIA RTX 5090\", \"https:\/\/www.nvidia.com\/en-us\/geforce\/graphics-cards\/50-series\/rtx-5090\/\"], [\"NVIDIA: RTX 3060-Familie\", \"https:\/\/www.nvidia.com\/en-us\/geforce\/graphics-cards\/30-series\/rtx-3060-3060ti\/\"], [\"NVIDIA: RTX 5060-Familie\", \"https:\/\/www.nvidia.com\/en-us\/geforce\/graphics-cards\/50-series\/rtx-5060-family\/\"], [\"NVIDIA: RTX 3090\", \"https:\/\/www.nvidia.com\/en-eu\/geforce\/graphics-cards\/30-series\/rtx-3090\/\"], [\"NVIDIA: RTX 5090 32 GB\", \"https:\/\/marketplace.nvidia.com\/en-us\/consumer\/graphics-cards\/nvidia-geforce-rtx-5090\/\"], [\"NVIDIA: RTX 6000 Ada 48 GB\", \"https:\/\/www.nvidia.com\/en-eu\/products\/workstations\/rtx-6000\/\"], [\"NVIDIA: RTX PRO 6000 Blackwell 96 GB\", \"https:\/\/www.nvidia.com\/en-gb\/products\/workstations\/professional-desktop-gpus\/rtx-pro-6000\/\"], [\"NVIDIA: RTX 4090 24 GB\", \"https:\/\/www.nvidia.com\/en-au\/geforce\/graphics-cards\/40-series\/rtx-4090\/\"], [\"Intel: Arc B580 12 GB \/ B570 10 GB\", \"https:\/\/www.intel.com\/content\/www\/us\/en\/newsroom\/news\/intel-launches-arc-b-series-graphics-cards.html\"], [\"Intel: Arc Pro B50 16 GB\", \"https:\/\/www.intel.com\/content\/www\/us\/en\/products\/sku\/242615\/intel-arc-pro-b50-graphics\/specifications.html\"], [\"Intel: Arc Pro B60 und B50\", \"https:\/\/newsroom.intel.com\/press-kit\/intel-at-computex-2025\"], [\"Intel: Einf\u00fchrung Arc Pro B65 \/ B70\", \"https:\/\/www.intel.com\/content\/www\/us\/en\/newsroom\/news\/client-computing\/intel-core-ultra-series-3-with-vpro-powers-next-gen-pcs-on-18a.html\"], [\"Intel: Arc Pro B70 \u2013 Datenblatt, 32 GB\", \"https:\/\/www.intel.com\/content\/dam\/www\/central-libraries\/us\/en\/documents\/2026-03\/datasheet-b70-gpu.pdf\"], [\"Intel: Arc Pro B65 32 GB \u2013 Datenblatt\", \"https:\/\/www.intel.com\/content\/dam\/www\/central-libraries\/us\/en\/documents\/2026-03\/datasheet-b65-gpu.pdf\"], [\"Intel: Arc Pro B60 24 GB\", \"https:\/\/www.intel.com\/content\/www\/us\/en\/products\/sku\/243916\/intel-arc-pro-b60-graphics\/specifications.html\"]], \"lang\": \"pl\", \"common\": {\"calculate\": \"Oblicz\", \"reset\": \"Przywr\u00f3\u0107 przyk\u0142ad\", \"json\": \"Eksport JSON\", \"csv\": \"Eksport CSV\", \"error\": \"Nieprawid\u0142owe dane. Kontrola zaznaczonych p\u00f3l i ogranicze\u0144 modelu.\", \"input\": \"Dane wej\u015bciowe\", \"result\": \"Wynik\", \"unknown\": \"Brak mo\u017cliwo\u015bci obliczenia \/ brak dokumentacji\", \"yes\": \"W granicach bud\u017cetu pami\u0119ci\", \"no\": \"Przekroczony bud\u017cet pami\u0119ci\", \"privacy\": \"Obliczenia i import plik\u00f3w dzia\u0142aj\u0105 w przegl\u0105darce. Narz\u0119dzia nie przesy\u0142aj\u0105 danych wej\u015bciowych. Istniej\u0105cy pomiar witryny obejmuje identyfikator narz\u0119dzia i etykiety przycisk\u00f3w.\", \"example\": \"Warto\u015bci domy\u015blne stanowi\u0105 przyk\u0142adowe za\u0142o\u017cenia. Wyniki s\u0142u\u017c\u0105 planowaniu.\", \"sources\": \"\u0179r\u00f3d\u0142a i ograniczenia\", \"faq\": \"Pytania i odpowiedzi\", \"import\": \"Import pliku\", \"paste\": \"JSON \/ CSV (maks. 2 MB)\", \"add\": \"Dodaj wiersz testowy\", \"clear\": \"Wyczy\u015b\u0107 dane testowe\", \"filter\": \"Filtr j\u0119zyka\", \"all\": \"Wszystkie j\u0119zyki\", \"modelNotice\": \"Zapisane wyniki test\u00f3w, bez automatycznych ranking\u00f3w jako\u015bci. Puste pola oznaczaj\u0105 brak danych. Kolumny eksportu maj\u0105 sta\u0142e klucze angielskie.\", \"importSuccess\": \"Metadane zaimportowane. Architektura pami\u0119ci pozostaje nieznana do weryfikacji. Kontrola rozmiaru modelu i szeroko\u015bci g\u0142owy.\", \"importMeta\": \"Import metadanych Ollama\", \"plan\": \"Etapy weryfikacji\"}, \"labels\": {\"weights\": \"Wagi (GiB)\", \"cache\": \"Pami\u0119\u0107 KV (GiB)\", \"runtime\": \"Runtime (GiB)\", \"other\": \"Inne u\u017cycie (GiB)\", \"reserve\": \"Zapas (GiB)\", \"total\": \"\u0141\u0105czny bud\u017cet\", \"remaining\": \"Pozosta\u0142o (GiB)\", \"capital\": \"Udzia\u0142 kapita\u0142u \/ miesi\u0105c\", \"energy\": \"Energia \/ miesi\u0105c\", \"local\": \"Lokalnie \/ miesi\u0105c\", \"cloud\": \"Wynajem GPU \/ miesi\u0105c\", \"api\": \"API \/ miesi\u0105c\", \"crossover\": \"Krzywa: zr\u00f3wnanie przy godzinach pracy\", \"localCash\": \"Lokalnie: okres netto z warto\u015bci\u0105 ko\u0144cow\u0105\", \"cloudCash\": \"Chmura: okres\", \"apiCash\": \"API: okres\", \"download\": \"Teoretyczny czas pobierania (minuty)\", \"proven\": \"Udokumentowane dane\", \"open\": \"Brakuj\u0105ce dane\", \"conflict\": \"Sprzeczno\u015bci\"}}<\/script><\/p>\n<form novalidate>\n<div class=\"ai-form\">\n<div class=\"ai-field\"><label for=\"ai-memory-profile\">Profil sprz\u0119tu (przyk\u0142adowy bud\u017cet)<\/label><select name=\"profile\" id=\"ai-memory-profile\"><option value=\"custom\" selected>W\u0142asny bud\u017cet pami\u0119ci<\/option><option value=\"12\">RTX 3060 12 GB \/ Intel B580 12 GB<\/option><option value=\"16\">RTX 5060 Ti 16 GB<\/option><option value=\"24\">RTX 3090 \/ 4090 24 GB; Intel B60 24 GB<\/option><option value=\"32\">RTX 5090 32 GB<\/option><option value=\"128\">Pami\u0119\u0107 wsp\u00f3\u0142dzielona: przyk\u0142ad 128 GiB<\/option><option value=\"22\">2080 Ti 22 GB: niepotwierdzona modyfikacja<\/option><option value=\"20\">3080 20 GB: niepotwierdzona modyfikacja<\/option><option value=\"48\">4090D 48 GB: niepotwierdzona modyfikacja<\/option><\/select><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-weightMode\">Obliczanie wag<\/label><select name=\"weightMode\" id=\"ai-memory-weightMode\"><option value=\"params\" selected>Parametry \u00d7 efektywne bity<\/option><option value=\"file\">Rzeczywisty rozmiar artefaktu<\/option><\/select><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-params\">\u0141\u0105czne parametry (miliardy, tak\u017ce MoE)<\/label><input type=\"text\" inputmode=\"decimal\" name=\"params\" id=\"ai-memory-params\" value=\"8\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-bits\">Efektywne bity na wag\u0119<\/label><input type=\"text\" inputmode=\"decimal\" name=\"bits\" id=\"ai-memory-bits\" value=\"4.5\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-file\">Rozmiar artefaktu<\/label><input type=\"text\" inputmode=\"decimal\" name=\"file\" id=\"ai-memory-file\" value=\"4.5\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-fileUnit\">Jednostka artefaktu<\/label><select name=\"fileUnit\" id=\"ai-memory-fileUnit\"><option value=\"GB\" selected>GB = 10\u2079 bytes<\/option><option value=\"GiB\">GiB = 2\u00b3\u2070 bytes<\/option><\/select><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-arch\">Model pami\u0119ci podr\u0119cznej<\/label><select name=\"arch\" id=\"ai-memory-arch\"><option value=\"dense\" selected>Konwencjonalna g\u0119sta pami\u0119\u0107 KV<\/option><option value=\"manual\">Zmierzona \/ zewn\u0119trznie obliczona pami\u0119\u0107<\/option><option value=\"unknown\">Hybrydowa \/ MLA \/ nieznana<\/option><\/select><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-layers\">Warstwy<\/label><input type=\"text\" inputmode=\"decimal\" name=\"layers\" id=\"ai-memory-layers\" value=\"32\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-heads\">G\u0142owy KV<\/label><input type=\"text\" inputmode=\"decimal\" name=\"heads\" id=\"ai-memory-heads\" value=\"8\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-dim\">Wymiar g\u0142owy<\/label><input type=\"text\" inputmode=\"decimal\" name=\"dim\" id=\"ai-memory-dim\" value=\"128\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-tokens\">Zarezerwowane tokeny na sekwencj\u0119<\/label><input type=\"text\" inputmode=\"decimal\" name=\"tokens\" id=\"ai-memory-tokens\" value=\"8192\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-seq\">R\u00f3wnoleg\u0142e sekwencje<\/label><input type=\"text\" inputmode=\"decimal\" name=\"seq\" id=\"ai-memory-seq\" value=\"1\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-kbytes\">Pami\u0119\u0107 K: bajty na element<\/label><select name=\"kbytes\" id=\"ai-memory-kbytes\"><option value=\"2\" selected>FP16 \/ BF16: 2<\/option><option value=\"4\">FP32: 4<\/option><\/select><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-vbytes\">Pami\u0119\u0107 V: bajty na element<\/label><select name=\"vbytes\" id=\"ai-memory-vbytes\"><option value=\"2\" selected>FP16 \/ BF16: 2<\/option><option value=\"4\">FP32: 4<\/option><\/select><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-cache\">R\u0119czny bud\u017cet pami\u0119ci podr\u0119cznej (GiB)<\/label><input type=\"text\" inputmode=\"decimal\" name=\"cache\" id=\"ai-memory-cache\" value=\"1\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-runtime\">Bufory wykonawcze (GiB)<\/label><input type=\"text\" inputmode=\"decimal\" name=\"runtime\" id=\"ai-memory-runtime\" value=\"1.5\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-other\">System \/ inne aplikacje (GiB)<\/label><input type=\"text\" inputmode=\"decimal\" name=\"other\" id=\"ai-memory-other\" value=\"0\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-reserve\">Wolny zapas (GiB)<\/label><input type=\"text\" inputmode=\"decimal\" name=\"reserve\" id=\"ai-memory-reserve\" value=\"1\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-memory-capacity\">Dost\u0119pna pula pami\u0119ci (GiB)<\/label><input type=\"text\" inputmode=\"decimal\" name=\"capacity\" id=\"ai-memory-capacity\" value=\"12\" maxlength=\"4000\"><\/div>\n<\/div>\n<div class=\"ai-actions\"><button type=\"submit\">Oblicz<\/button><button type=\"button\" data-reset>Przywr\u00f3\u0107 przyk\u0142ad<\/button><\/div>\n<\/form>\n<details>\n<summary>Import metadanych Ollama<\/summary>\n<p><label for=\"ai-paste\">JSON \/ CSV (maks. 2 MB)<\/label><textarea id=\"ai-paste\" data-paste maxlength=\"2000000\"><\/textarea><\/p>\n<div class=\"ai-actions\"><button type=\"button\" data-import>Import metadanych Ollama<\/button><\/div>\n<p><label for=\"ai-file\">Import pliku<\/label><input id=\"ai-file\" type=\"file\" accept=\".json\" data-file><\/details>\n<p class=\"ai-status\" data-status role=\"status\" aria-live=\"polite\">\n<div class=\"ai-result\" data-result data-rc-private data-mp-mask tabindex=\"0\"><\/div>\n<div class=\"ai-actions\"><button type=\"button\" data-export=\"json\">Eksport JSON<\/button><button type=\"button\" data-export=\"csv\">Eksport CSV<\/button><\/div>\n<h2>\u0179r\u00f3d\u0142a i ograniczenia<\/h2>\n<p>Wagi = \u0142\u0105czna liczba parametr\u00f3w \u00d7 efektywne bity \/ 8. G\u0119sta pami\u0119\u0107 KV = warstwy \u00d7 g\u0142owy KV \u00d7 wymiar g\u0142owy \u00d7 tokeny \u00d7 sekwencje \u00d7 (bajty K + bajty V). Rozmiar artefaktu nie gwarantuje zu\u017cycia podczas pracy. Kwantyzacja pami\u0119ci, sliding window oraz architektury hybrydowe i rekurencyjne wymagaj\u0105 odpowiednich modeli lub zmierzonego bud\u017cetu. Profile kart podaj\u0105 GB producenta; bud\u017cet GiB to edytowalne za\u0142o\u017cenie do sprawdzenia w runtime. Pami\u0119\u0107 wielu kart nie jest sumowana.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/ollama\/ollama\/blob\/main\/docs\/openapi.yaml\" rel=\"noopener noreferrer\" target=\"_blank\">Ollama metadata<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/ggml-org\/llama.cpp\/blob\/master\/tools\/server\/README.md\" rel=\"noopener noreferrer\" target=\"_blank\">llama.cpp cache types<\/a><\/li>\n<li><a href=\"https:\/\/www.nvidia.com\/en-us\/geforce\/graphics-cards\/50-series\/rtx-5090\/\" rel=\"noopener noreferrer\" target=\"_blank\">NVIDIA RTX 5090<\/a><\/li>\n<li><a href=\"https:\/\/www.nvidia.com\/en-us\/geforce\/graphics-cards\/30-series\/rtx-3060-3060ti\/\" rel=\"noopener noreferrer\" target=\"_blank\">NVIDIA: RTX 3060-Familie<\/a><\/li>\n<li><a href=\"https:\/\/www.nvidia.com\/en-us\/geforce\/graphics-cards\/50-series\/rtx-5060-family\/\" rel=\"noopener noreferrer\" target=\"_blank\">NVIDIA: RTX 5060-Familie<\/a><\/li>\n<li><a href=\"https:\/\/www.nvidia.com\/en-eu\/geforce\/graphics-cards\/30-series\/rtx-3090\/\" rel=\"noopener noreferrer\" target=\"_blank\">NVIDIA: RTX 3090<\/a><\/li>\n<li><a href=\"https:\/\/marketplace.nvidia.com\/en-us\/consumer\/graphics-cards\/nvidia-geforce-rtx-5090\/\" rel=\"noopener noreferrer\" target=\"_blank\">NVIDIA: RTX 5090 32 GB<\/a><\/li>\n<li><a href=\"https:\/\/www.nvidia.com\/en-eu\/products\/workstations\/rtx-6000\/\" rel=\"noopener noreferrer\" target=\"_blank\">NVIDIA: RTX 6000 Ada 48 GB<\/a><\/li>\n<li><a href=\"https:\/\/www.nvidia.com\/en-gb\/products\/workstations\/professional-desktop-gpus\/rtx-pro-6000\/\" rel=\"noopener noreferrer\" target=\"_blank\">NVIDIA: RTX PRO 6000 Blackwell 96 GB<\/a><\/li>\n<li><a href=\"https:\/\/www.nvidia.com\/en-au\/geforce\/graphics-cards\/40-series\/rtx-4090\/\" rel=\"noopener noreferrer\" target=\"_blank\">NVIDIA: RTX 4090 24 GB<\/a><\/li>\n<li><a href=\"https:\/\/www.intel.com\/content\/www\/us\/en\/newsroom\/news\/intel-launches-arc-b-series-graphics-cards.html\" rel=\"noopener noreferrer\" target=\"_blank\">Intel: Arc B580 12 GB \/ B570 10 GB<\/a><\/li>\n<li><a href=\"https:\/\/www.intel.com\/content\/www\/us\/en\/products\/sku\/242615\/intel-arc-pro-b50-graphics\/specifications.html\" rel=\"noopener noreferrer\" target=\"_blank\">Intel: Arc Pro B50 16 GB<\/a><\/li>\n<li><a href=\"https:\/\/newsroom.intel.com\/press-kit\/intel-at-computex-2025\" rel=\"noopener noreferrer\" target=\"_blank\">Intel: Arc Pro B60 und B50<\/a><\/li>\n<li><a href=\"https:\/\/www.intel.com\/content\/www\/us\/en\/newsroom\/news\/client-computing\/intel-core-ultra-series-3-with-vpro-powers-next-gen-pcs-on-18a.html\" rel=\"noopener noreferrer\" target=\"_blank\">Intel: Einf\u00fchrung Arc Pro B65 \/ B70<\/a><\/li>\n<li><a href=\"https:\/\/www.intel.com\/content\/dam\/www\/central-libraries\/us\/en\/documents\/2026-03\/datasheet-b70-gpu.pdf\" rel=\"noopener noreferrer\" target=\"_blank\">Intel: Arc Pro B70 \u2013 Datenblatt, 32 GB<\/a><\/li>\n<li><a href=\"https:\/\/www.intel.com\/content\/dam\/www\/central-libraries\/us\/en\/documents\/2026-03\/datasheet-b65-gpu.pdf\" rel=\"noopener noreferrer\" target=\"_blank\">Intel: Arc Pro B65 32 GB \u2013 Datenblatt<\/a><\/li>\n<li><a href=\"https:\/\/www.intel.com\/content\/www\/us\/en\/products\/sku\/243916\/intel-arc-pro-b60-graphics\/specifications.html\" rel=\"noopener noreferrer\" target=\"_blank\">Intel: Arc Pro B60 24 GB<\/a><\/li>\n<\/ul>\n<p class=\"ai-caption\">Dokumentacja sprawdzona: 05.10.2026. Profile sprz\u0119tu: specyfikacje producenta i edytowalne bud\u017cety pami\u0119ci.<\/p>\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Jakie ograniczenia dotycz\u0105 wyniku?<\/h3>\n<p>Wagi = \u0142\u0105czna liczba parametr\u00f3w \u00d7 efektywne bity \/ 8. G\u0119sta pami\u0119\u0107 KV = warstwy \u00d7 g\u0142owy KV \u00d7 wymiar g\u0142owy \u00d7 tokeny \u00d7 sekwencje \u00d7 (bajty K + bajty V). Rozmiar artefaktu nie gwarantuje zu\u017cycia podczas pracy. Kwantyzacja pami\u0119ci, sliding window oraz architektury hybrydowe i rekurencyjne wymagaj\u0105 odpowiednich modeli lub zmierzonego bud\u017cetu. Profile kart podaj\u0105 GB producenta; bud\u017cet GiB to edytowalne za\u0142o\u017cenie do sprawdzenia w runtime. Pami\u0119\u0107 wielu kart nie jest sumowana.<\/p>\n<h3>Jak przetwarzane s\u0105 dane wej\u015bciowe?<\/h3>\n<p>Obliczenia i import plik\u00f3w dzia\u0142aj\u0105 w przegl\u0105darce. Narz\u0119dzia nie przesy\u0142aj\u0105 danych wej\u015bciowych. Istniej\u0105cy pomiar witryny obejmuje identyfikator narz\u0119dzia i etykiety przycisk\u00f3w.<\/p>\n<\/div>\n<\/div>\n<p><script>(function(g){\n\"use strict\";\nconst G=1073741824;\nfunction num(v,min=0,max=1e12,int=false){if(typeof v===\"string\"){if(!v.trim())throw Error(\"value\");v=Number(v.trim().replace(\",\",\".\"));}if(!Number.isFinite(v)||v<min||v>max||(int&&!Number.isInteger(v)))throw Error(\"value\");return v;}\nfunction memory(x){\n const w=x.weightMode===\"file\"?num(x.file,0,1e6)*(x.fileUnit===\"GB\"?1e9:G):num(x.params,.001,1e6)*1e9*num(x.bits,.1,64)\/8;\n let kv=null;\n if(x.arch===\"dense\")kv=num(x.layers,1,10000,true)*num(x.heads,1,10000,true)*num(x.dim,1,10000,true)*num(x.tokens,1,1e7,true)*num(x.seq,1,10000,true)*(num(x.kbytes,.1,16)+num(x.vbytes,.1,16));\n if(x.arch===\"manual\")kv=num(x.cache,0,1e6)*G;\n const runtime=num(x.runtime,0,1e6)*G,other=num(x.other,0,1e6)*G,reserve=num(x.reserve,0,1e6)*G,capacity=num(x.capacity,.01,1e6)*G;\n const total=kv===null?null:w+kv+runtime+other+reserve;\n return {weights:w\/G,cache:kv===null?null:kv\/G,runtime:runtime\/G,other:other\/G,reserve:reserve\/G,total:total===null?null:total\/G,capacity:capacity\/G,remaining:total===null?null:(capacity-total)\/G,fit:total===null?null:total<=capacity};\n}\nfunction costs(x){\n const purchase=num(x.purchase),extra=num(x.extra),resale=num(x.resale),months=num(x.months,1,600,true),hours=num(x.hours,0,744),load=num(x.load,0,744),idle=num(x.idle,0,744);\n if(load+idle>hours||resale>purchase+extra)throw Error(\"hours\");\n const watts=num(x.watts),idleW=num(x.idleW),electricity=num(x.electricity),maintenance=num(x.maintenance),rate=num(x.rate),billed=num(x.billed,0,744),cloudFixed=num(x.cloudFixed);\n const capital=(purchase+extra-resale)\/months,energy=(watts*load+idleW*idle)\/1000*electricity,local=capital+energy+maintenance,cloud=rate*billed+cloudFixed;\n const api=num(x.inputTokens)*num(x.inputPrice)\/1e6+num(x.outputTokens)*num(x.outputPrice)\/1e6+num(x.apiFixed);\n const curves=[];\n for(let h=0;h<=hours;h+=hours\/24||1){\n  const idleAt=x.idlePolicy===\"on\"?hours-h:0;\n  curves.push({hours:h,local:capital+maintenance+(watts*h+idleW*idleAt)\/1000*electricity,cloud:rate*h+cloudFixed});\n }\n const a=capital+maintenance+(x.idlePolicy===\"on\"?hours*idleW\/1000*electricity:0)-cloudFixed;\n const slope=rate-(watts-(x.idlePolicy===\"on\"?idleW:0))\/1000*electricity;\n const cross=Math.abs(slope)<1e-12?null:a\/slope;\n return {capital,energy,local,cloud,api,crossover:cross!==null&#038;&#038;cross>=0&&cross<=hours?cross:null,localCash:purchase+extra+(energy+maintenance)*months-resale,cloudCash:cloud*months,apiCash:api*months,curves};\n}\nfunction stack(x){\n const list=[];\n function add(name,url,why){list.push({name,url,why});}\n const apple=x.hardware===\"apple\";\n if(x.format===\"gguf\"){\n  add(\"llama.cpp\",\"https:\/\/github.com\/ggml-org\/llama.cpp\",\"portable\");\n  add(\"Ollama\",\"https:\/\/docs.ollama.com\/\",\"managed\");\n  if(x.interface===\"gui\")add(\"LM Studio\",\"https:\/\/lmstudio.ai\/docs\",\"gui\");\n }\n if(apple&#038;&#038;x.os===\"mac\"&#038;&#038;x.format===\"mlx\")add(\"MLX LM\",\"https:\/\/github.com\/ml-explore\/mlx-lm\",\"apple\");\n if(x.hardware===\"intel\"&#038;&#038;x.format===\"openvino\"&#038;&#038;x.os!==\"mac\")add(\"OpenVINO GenAI\",\"https:\/\/docs.openvino.ai\/\",\"intel\");\n if(x.use===\"server\"&#038;&#038;x.format===\"hf\"&#038;&#038;[\"linux\",\"wsl\"].includes(x.os)&#038;&#038;[\"nvidia\",\"amd\",\"intel\"].includes(x.hardware))add(\"vLLM\",\"https:\/\/docs.vllm.ai\/en\/latest\/getting_started\/installation\/gpu\/\",\"serving\");\n const download=num(x.download)*1e9*8\/(num(x.bandwidth,.01)*1e6);\n num(x.ram,.1,1e6);num(x.vram,0,1e6);num(x.parallel,1,10000,true);\n return {list,download};\n}\nconst EVIDENCE=[\"identity\",\"pcb\",\"bios\",\"capacityTest\",\"loadTest\",\"restart\",\"returnPolicy\"];\nfunction mod(x){const list=EVIDENCE.map(key=>({key,status:x[key],note:String(x[key+\"Note\"]||\"\").slice(0,2000)}));for(const r of list)if(![\"open\",\"proven\",\"conflict\"].includes(r.status))throw Error(\"status\");return {list,total:num(x.price)+num(x.shipping)+num(x.importCosts)+num(x.returnCosts),proven:list.filter(r=>r.status===\"proven\").length,open:list.filter(r=>r.status===\"open\").length,conflict:list.filter(r=>r.status===\"conflict\").length};}\nconst MODEL_KEYS=[\"model\",\"revision\",\"language\",\"task\",\"hardware\",\"runtime\",\"context\",\"outputTokens\",\"temperature\",\"template\",\"quant\",\"license\",\"sizeGiB\",\"latencyMs\",\"tokensPerSecond\",\"quality\",\"reference\",\"answer\"];\nfunction modelRows(rows){\n if(!Array.isArray(rows)||rows.length>2000)throw Error(\"rows\");\n return rows.map(row=>{\n if(!row||typeof row!==\"object\"||Array.isArray(row))throw Error(\"row\");\n const r={};\n for(const key of MODEL_KEYS){const v=row[key];r[key]=v===null||v===undefined?\"\":String(v).slice(0,4000);}\n if(!r.model||![\"de\",\"en\",\"pl\"].includes(r.language))throw Error(\"model\");\n for(const key of [\"context\",\"outputTokens\",\"temperature\",\"sizeGiB\",\"latencyMs\",\"tokensPerSecond\",\"quality\"])if(r[key]!==\"\")num(r[key],0,key===\"quality\"?100:1e12);\n return r;\n });\n}\nfunction csvParse(s){\n if(s.length>2e6)throw Error(\"size\");\n const rows=[];let row=[],field=\"\",quote=false;\n for(let i=0;i<s.length;i++){const c=s[i];if(c==='\"'){if(quote&#038;&#038;s[i+1]==='\"'){field+='\"';i++;}else if(quote){quote=false;}else if(field===\"\"){quote=true;}else throw Error(\"csv\");}\n else if(c===\",\"&#038;&#038;!quote){row.push(field);field=\"\";}\n else if((c===\"\\n\"||c===\"\\r\")&#038;&#038;!quote){if(c===\"\\r\"&#038;&#038;s[i+1]===\"\\n\")i++;row.push(field);if(row.some(v=>v!==\"\"))rows.push(row);row=[];field=\"\";}\n else field+=c;}\n if(quote)throw Error(\"csv\");\n row.push(field);if(row.some(v=>v!==\"\"))rows.push(row);\n if(!rows.length)return [];\n const header=rows.shift().map(v=>v.replace(\/^\\uFEFF\/,\"\").trim());\n if(new Set(header).size!==header.length||!header.includes(\"model\"))throw Error(\"header\");\n return rows.map(values=>{if(values.length!==header.length)throw Error(\"columns\");return Object.fromEntries(header.map((k,i)=>[k,values[i]]));});\n}\nfunction csv(rows){return rows.map(row=>row.map(v=>{let s=v===null||v===undefined?\"\":String(v);if(\/^[=+\\-@]\/.test(s))s=\"'\"+s;return '\"'+s.replace(\/\"\/g,'\"\"')+'\"';}).join(\",\")).join(\"\\r\\n\");}\nfunction ollama(s){\n if(s.length>2e6)throw Error(\"size\");\n const o=JSON.parse(s),m=o.model_info||{};\n const a=m[\"general.architecture\"],n=a?m[a+\".block_count\"]:undefined;\n if(!a||!n)throw Error(\"metadata\");\n const params=m[\"general.parameter_count\"],heads=m[a+\".attention.head_count_kv\"],all=m[a+\".attention.head_count\"],width=m[a+\".embedding_length\"];\n return {params:params?num(params)\/1e9:null,layers:num(n,1,10000,true),heads:heads?num(heads,1,10000,true):null,dim:all&&width?num(width)\/num(all):null,architecture:a,context:m[a+\".context_length\"]||null};\n}\ng.LWAI={num,memory,costs,stack,mod,modelRows,MODEL_KEYS,csvParse,csv,ollama};\nif(typeof module!==\"undefined\")module.exports=g.LWAI;\n})(globalThis);\n<\/script><script>(function(){\n\"use strict\";\nconst root=document.querySelector(\".lw-ai\");if(!root)return;\nconst c=JSON.parse(root.querySelector(\"[data-config]\").textContent),A=globalThis.LWAI,U=c.common;\nconst form=root.querySelector(\"form\"),status=root.querySelector(\"[data-status]\"),out=root.querySelector(\"[data-result]\");\nlet current=null,rows=[];\nconst get=k=>form.elements.namedItem(k);\nconst node=(tag,text)=>{const n=document.createElement(tag);if(text!==undefined)n.textContent=text;return n;};\nconst format=v=>typeof v===\"number\"?new Intl.NumberFormat(c.lang,{maximumFractionDigits:4}).format(v):v===null?U.unknown:String(v);\nfunction dirty(){current=null;out.replaceChildren();status.textContent=\"\";for(const b of root.querySelectorAll(\"[data-export]\"))b.disabled=true;}\nfunction values(){const x={};let bad=false;for(const f of c.fields){const el=get(f.key);el.removeAttribute(\"aria-invalid\");let v=el.value.trim();if(f.type===\"number\"&&!el.closest(\".ai-field\").hidden){try{v=A.num(v,f.min,f.max,f.integer);}catch(e){el.setAttribute(\"aria-invalid\",\"true\");bad=true;}}else if(v.length>4000){el.setAttribute(\"aria-invalid\",\"true\");bad=true;}x[f.key]=v;}if(bad)throw Error(\"input\");return x;}\nfunction metrics(obj,keys){const dl=node(\"dl\");for(const k of keys){dl.append(node(\"dt\",(c.kind===\"memory\"&&k===\"total\"?c.labels[k]+\" (GiB)\":c.labels[k])||k),node(\"dd\",format(obj[k])));}out.append(dl);}\nfunction table(headers,data){const wrap=node(\"div\");wrap.className=\"ai-scroll\";wrap.tabIndex=0;const t=node(\"table\"),head=node(\"thead\"),tr=node(\"tr\");for(const h of headers)tr.append(node(\"th\",h));head.append(tr);const body=node(\"tbody\");for(const r of data){const tr=node(\"tr\");for(const v of r)tr.append(node(\"td\",format(v)));body.append(tr);}t.append(head,body);wrap.append(t);out.append(wrap);}\nfunction chart(points){\n const svg=document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"svg\");svg.classList.add(\"ai-chart\");svg.setAttribute(\"viewBox\",\"0 0 600 240\");svg.setAttribute(\"role\",\"img\");svg.setAttribute(\"aria-label\",c.labels.local+\" \/ \"+c.labels.cloud);\n const title=document.createElementNS(svg.namespaceURI,\"title\");title.textContent=c.labels.local+\" \/ \"+c.labels.cloud;svg.append(title);\n const max=Math.max(1,...points.flatMap(p=>[p.local,p.cloud])),hours=points[points.length-1].hours||1;\n function text(x,y,s){const t=document.createElementNS(svg.namespaceURI,\"text\");t.setAttribute(\"x\",x);t.setAttribute(\"y\",y);t.setAttribute(\"fill\",\"var(--text-primary)\");t.setAttribute(\"font-size\",\"12\");t.textContent=s;svg.append(t);}\n for(const [key,color,y]of [[\"local\",\"var(--accent)\",15],[\"cloud\",\"var(--text-secondary)\",30]]){const line=document.createElementNS(svg.namespaceURI,\"polyline\");line.setAttribute(\"points\",points.map(p=>(50+520*p.hours\/hours)+\",\"+(200-150*p[key]\/max)).join(\" \"));line.setAttribute(\"fill\",\"none\");line.setAttribute(\"stroke\",color);line.setAttribute(\"stroke-width\",\"3\");svg.append(line);text(50,y,c.labels[key]);}\n text(8,55,format(max));text(8,200,\"0\");text(50,225,\"0 h\");text(510,225,format(hours)+\" h\");out.append(svg);\n}\nconst why={portable:[\"GGUF; CPU \/ GPU-Backend gesondert pr\u00fcfen.\",\"GGUF; verify CPU \/ GPU backend separately.\",\"GGUF; osobna kontrola backendu CPU \/ GPU.\"],managed:[\"Modellverwaltung; Modellimport und Backend pr\u00fcfen.\",\"Model management; verify model import and backend.\",\"Zarz\u0105dzanie modelami; kontrola importu i backendu.\"],gui:[\"Grafische Oberfl\u00e4che; Systemanforderungen pr\u00fcfen.\",\"Graphical interface; verify system requirements.\",\"Interfejs graficzny; kontrola wymaga\u0144 systemowych.\"],apple:[\"Apple Silicon \/ MLX; Modellartefakt erforderlich.\",\"Apple Silicon \/ MLX; model artifact required.\",\"Apple Silicon \/ MLX; wymagany artefakt modelu.\"],intel:[\"Intel \/ OpenVINO IR; Treiber und Konvertierung pr\u00fcfen.\",\"Intel \/ OpenVINO IR; verify drivers and conversion.\",\"Intel \/ OpenVINO IR; kontrola sterownik\u00f3w i konwersji.\"],serving:[\"Linux-\/WSL-Serving; konkretes GPU-\/Versionsprofil pr\u00fcfen.\",\"Linux \/ WSL serving; verify exact GPU \/ version profile.\",\"Serwer Linux \/ WSL; kontrola konkretnego GPU i wersji.\"]};\nfunction modelsDisplay(){out.replaceChildren();const lang=root.querySelector(\"[data-language]\").value,search=root.querySelector(\"[data-search]\").value.toLowerCase();const selected=rows.filter(r=>(lang===\"all\"||r.language===lang)&&[r.model,r.revision,r.task].join(\" \").toLowerCase().includes(search));out.append(node(\"p\",U.modelNotice),node(\"p\",selected.length+\" \/ \"+rows.length));table(A.MODEL_KEYS.map(k=>c.fields.find(f=>f.key===k)?.label||k),selected.map(r=>A.MODEL_KEYS.map(k=>r[k])));}\nfunction render(result,x){\n out.replaceChildren();\n if(c.kind===\"memory\"){metrics(result,[\"weights\",\"cache\",\"runtime\",\"other\",\"reserve\",\"total\",\"remaining\"]);out.append(node(\"p\",result.fit===null?U.unknown:result.fit?U.yes:U.no));}\n if(c.kind===\"cost\"){metrics(result,[\"capital\",\"energy\",\"local\",\"cloud\",\"api\",\"crossover\",\"localCash\",\"cloudCash\",\"apiCash\"]);out.append(node(\"p\",x.currency));chart(result.curves);table([\"h\",c.labels.local,c.labels.cloud],result.curves.map(r=>[r.hours,r.local,r.cloud]));}\n if(c.kind===\"stack\"){\n  metrics({download:result.download\/60},[\"download\"]);const ul=node(\"ul\");\n  const li=c.lang===\"de\"?0:c.lang===\"en\"?1:2;\n  for(const item of result.list){const n=node(\"li\"),a=node(\"a\",item.name);a.href=item.url;a.rel=\"noopener noreferrer\";n.append(a,node(\"p\",why[item.why][li]));ul.append(n);}\n  if(!result.list.length)ul.append(node(\"li\",U.unknown));out.append(ul,node(\"h3\",U.plan));\n  const checks=c.lang===\"de\"?[\"OS, Ger\u00e4t, Treiber und Runtime-Version dokumentieren.\",\"Modellformat und Speicherbedarf mit dem Speicherplaner pr\u00fcfen.\",\"Installation und Modellstart pr\u00fcfen.\",\"GPU-Ausf\u00fchrung durch Runtime-Ausgabe und Speichermessung belegen.\",\"Referenzaufgabe, Neustart und Offline-Betrieb pr\u00fcfen.\"]:c.lang===\"en\"?[\"Record OS, device, driver and runtime version.\",\"Check model format and memory needs with the memory planner.\",\"Verify installation and model startup.\",\"Document GPU execution through runtime output and memory measurements.\",\"Check a reference task, restart and offline operation.\"]:[\"Zapis systemu, sprz\u0119tu, sterownika i wersji runtime.\",\"Kontrola formatu modelu i pami\u0119ci w planerze.\",\"Kontrola instalacji i uruchomienia modelu.\",\"Dow\u00f3d wykonania GPU w wynikach runtime i pomiarach pami\u0119ci.\",\"Kontrola zadania testowego, restartu i pracy offline.\"];\n  const ol=node(\"ol\");for(const s of checks)ol.append(node(\"li\",s));out.append(ol,node(\"p\",get(\"verified\").selectedOptions[0].textContent));\n  if(x.terminal===\"no\")out.append(node(\"p\",c.lang===\"de\"?\"CLI-\/Build-Pfade erfordern zus\u00e4tzlich Terminalkenntnisse.\":c.lang===\"en\"?\"CLI \/ build paths additionally require terminal skills.\":\"\u015acie\u017cki CLI \/ kompilacji wymagaj\u0105 znajomo\u015bci terminala.\"));\n }\n if(c.kind===\"mods\"){metrics(result,[\"total\",\"proven\",\"open\",\"conflict\"]);out.append(node(\"p\",x.currency));table([U.input,U.result,c.lang===\"de\"?\"Nachweis\":c.lang===\"en\"?\"Evidence\":\"Dow\u00f3d\"],result.list.map(r=>[c.evidence[r.key],get(r.key).selectedOptions[0].textContent,r.note]));}\n if(c.kind===\"models\")modelsDisplay();\n}\nfunction run(event){if(event)event.preventDefault();dirty();try{const x=values();let result;\n if(c.kind===\"models\"){const added=A.modelRows([x])[0];if(rows.length>=2000)throw Error(\"rows\");rows.push(added);result={rows};}\n else result=({memory:A.memory,cost:A.costs,stack:A.stack,mods:A.mod}[c.kind])(x);\n current={version:1,kind:c.kind,inputs:x,result};render(result,x);for(const b of root.querySelectorAll(\"[data-export]\"))b.disabled=false;\n }catch(e){status.textContent=U.error;}}\nform.addEventListener(\"submit\",run);form.addEventListener(\"input\",dirty);\nfunction reset(){for(const f of c.fields)get(f.key).value=f.value;rows=[];if(root.querySelector(\"[data-language]\"))root.querySelector(\"[data-language]\").value=\"all\";if(root.querySelector(\"[data-search]\"))root.querySelector(\"[data-search]\").value=\"\";if(root.querySelector(\"[data-paste]\"))root.querySelector(\"[data-paste]\").value=\"\";dirty();if(c.kind===\"models\"){current={version:1,kind:c.kind,inputs:{},result:{rows}};modelsDisplay();for(const b of root.querySelectorAll(\"[data-export]\"))b.disabled=false;}else run();}\nroot.querySelector(\"[data-reset]\").addEventListener(\"click\",reset);\nif(c.kind===\"memory\"){get(\"profile\").addEventListener(\"change\",()=>{const v=get(\"profile\").value;if(v!==\"custom\"){get(\"capacity\").value=v;get(\"other\").value=v===\"128\"?20:0;}dirty();});\n get(\"weightMode\").addEventListener(\"change\",visibility);get(\"arch\").addEventListener(\"change\",visibility);}\nfunction visibility(){if(c.kind!==\"memory\")return;const groups={params:get(\"weightMode\").value===\"params\",bits:get(\"weightMode\").value===\"params\",file:get(\"weightMode\").value===\"file\",fileUnit:get(\"weightMode\").value===\"file\",cache:get(\"arch\").value===\"manual\"};for(const key of [\"layers\",\"heads\",\"dim\",\"tokens\",\"seq\",\"kbytes\",\"vbytes\"])groups[key]=get(\"arch\").value===\"dense\";for(const [key,show]of Object.entries(groups))get(key).closest(\".ai-field\").hidden=!show;}\nfunction exportData(type){if(!current)return;const result=c.kind===\"models\"?{...current,result:{rows}}:current;let text,mime;\n if(type===\"json\"){text=JSON.stringify(result,null,2);mime=\"application\/json\";}\n else{let data;if(c.kind===\"models\")data=[A.MODEL_KEYS,...rows.map(r=>A.MODEL_KEYS.map(k=>r[k]))];\n else {data=[[U.input,U.result],...c.fields.map(f=>[f.label,current.inputs[f.key]])];for(const [key,value]of Object.entries(current.result))data.push([c.labels[key]||key,typeof value===\"object\"&&value!==null?JSON.stringify(value):value]);}text=A.csv(data);mime=\"text\/csv;charset=utf-8\";}\n const blob=new Blob([text],{type:mime}),url=URL.createObjectURL(blob),a=node(\"a\");a.href=url;a.download=c.kind+\".\"+type;a.click();setTimeout(()=>URL.revokeObjectURL(url),1000);}\nfor(const b of root.querySelectorAll(\"[data-export]\"))b.addEventListener(\"click\",()=>exportData(b.dataset.export));\nasync function importData(text){dirty();try{if(new TextEncoder().encode(text).length>2e6)throw Error(\"size\");\n if(c.kind===\"memory\"){const m=A.ollama(text);for(const key of [\"params\",\"layers\",\"heads\",\"dim\"])if(m[key]!==null)get(key).value=m[key];get(\"arch\").value=\"unknown\";visibility();run();status.textContent=U.importSuccess;}\n else if(c.kind===\"models\"){let parsed;if(text.trim().startsWith(\"[\")||text.trim().startsWith(\"{\")){const o=JSON.parse(text);parsed=Array.isArray(o)?o:o.result?.rows||o.rows;}else parsed=A.csvParse(text);rows=A.modelRows(parsed);current={version:1,kind:c.kind,inputs:{},result:{rows}};modelsDisplay();for(const b of root.querySelectorAll(\"[data-export]\"))b.disabled=false;}\n }catch(e){current=null;out.replaceChildren();status.textContent=U.error;}}\nif(root.querySelector(\"[data-import]\"))root.querySelector(\"[data-import]\").addEventListener(\"click\",()=>importData(root.querySelector(\"[data-paste]\").value));\nif(root.querySelector(\"[data-file]\"))root.querySelector(\"[data-file]\").addEventListener(\"change\",async e=>{const f=e.target.files[0];if(!f)return;if(f.size>2e6){dirty();status.textContent=U.error;return;}await importData(await f.text());e.target.value=\"\";});\nif(c.kind===\"models\"){root.querySelector(\"[data-language]\").addEventListener(\"change\",modelsDisplay);root.querySelector(\"[data-search]\").addEventListener(\"input\",modelsDisplay);root.querySelector(\"[data-clear]\").addEventListener(\"click\",()=>{rows=[];current={version:1,kind:c.kind,inputs:{},result:{rows}};modelsDisplay();for(const b of root.querySelectorAll(\"[data-export]\"))b.disabled=false;});}\nroot._aiRun=run;root._aiImport=importData;root._aiReset=reset;root._aiGet=()=>current;\nreset();visibility();\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Osobne obliczenia sk\u0142adnik\u00f3w pami\u0119ci, kontekstu i zapasu. Wystarczaj\u0105cy bud\u017cet nie potwierdza obs\u0142ugi backendu ani szybko\u015bci.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9284,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92346,92226],"class_list":["post-9330","page","type-page","status-publish","hentry","tag-llm-pl","tag-self-hosting-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Planer pami\u0119ci i sprz\u0119tu dla LLM | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Osobne obliczenia sk\u0142adnik\u00f3w pami\u0119ci, kontekstu i zapasu. Wystarczaj\u0105cy bud\u017cet nie potwierdza obs\u0142ugi backendu ani szybko\u015bci.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-ollama-vram-memory-estimator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Planer pami\u0119ci i sprz\u0119tu dla LLM | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Osobne obliczenia sk\u0142adnik\u00f3w pami\u0119ci, kontekstu i zapasu. Wystarczaj\u0105cy bud\u017cet nie potwierdza obs\u0142ugi backendu ani szybko\u015bci.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-ollama-vram-memory-estimator\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-05T14:00:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/llm-ollama-vram-memory-estimator\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/llm-ollama-vram-memory-estimator\\\/\",\"name\":\"Planer pami\u0119ci i sprz\u0119tu dla LLM | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-09T13:37:44+00:00\",\"dateModified\":\"2026-10-05T14:00:12+00:00\",\"description\":\"Osobne obliczenia sk\u0142adnik\u00f3w pami\u0119ci, kontekstu i zapasu. Wystarczaj\u0105cy bud\u017cet nie potwierdza obs\u0142ugi backendu ani szybko\u015bci.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/llm-ollama-vram-memory-estimator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/llm-ollama-vram-memory-estimator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/llm-ollama-vram-memory-estimator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Planer pami\u0119ci i sprz\u0119tu dla LLM\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Planer pami\u0119ci i sprz\u0119tu dla LLM | Lukas Wojcik","description":"Osobne obliczenia sk\u0142adnik\u00f3w pami\u0119ci, kontekstu i zapasu. Wystarczaj\u0105cy bud\u017cet nie potwierdza obs\u0142ugi backendu ani szybko\u015bci.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-ollama-vram-memory-estimator\/","og_locale":"en_US","og_type":"article","og_title":"Planer pami\u0119ci i sprz\u0119tu dla LLM | Lukas Wojcik","og_description":"Osobne obliczenia sk\u0142adnik\u00f3w pami\u0119ci, kontekstu i zapasu. Wystarczaj\u0105cy bud\u017cet nie potwierdza obs\u0142ugi backendu ani szybko\u015bci.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-ollama-vram-memory-estimator\/","og_site_name":"Lukas Wojcik - Blog","article_modified_time":"2026-10-05T14:00:12+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-ollama-vram-memory-estimator\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-ollama-vram-memory-estimator\/","name":"Planer pami\u0119ci i sprz\u0119tu dla LLM | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-09T13:37:44+00:00","dateModified":"2026-10-05T14:00:12+00:00","description":"Osobne obliczenia sk\u0142adnik\u00f3w pami\u0119ci, kontekstu i zapasu. Wystarczaj\u0105cy bud\u017cet nie potwierdza obs\u0142ugi backendu ani szybko\u015bci.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-ollama-vram-memory-estimator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-ollama-vram-memory-estimator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-ollama-vram-memory-estimator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/"},{"@type":"ListItem","position":3,"name":"Planer pami\u0119ci i sprz\u0119tu dla LLM"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9330","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=9330"}],"version-history":[{"count":2,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9330\/revisions"}],"predecessor-version":[{"id":21328,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9330\/revisions\/21328"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9284"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=9330"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=9330"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}