{"id":21333,"date":"2026-10-05T15:58:35","date_gmt":"2026-10-05T13:58:35","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?page_id=21333"},"modified":"2026-10-05T16:00:14","modified_gmt":"2026-10-05T14:00:14","slug":"local-cloud-llm-cost-calculator","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/local-cloud-llm-cost-calculator\/","title":{"rendered":"Kalkulator koszt\u00f3w LLM lokalnie i w chmurze"},"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>Por\u00f3wnanie lokalnego sprz\u0119tu, wynajmu GPU i API przy tym samym zadaniu i walucie.<\/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\": \"cost\", \"slug\": \"local-cloud-llm-cost-calculator\", \"title\": \"Kalkulator koszt\u00f3w LLM lokalnie i w chmurze\", \"intro\": \"Por\u00f3wnanie lokalnego sprz\u0119tu, wynajmu GPU i API przy tym samym zadaniu i walucie.\", \"fields\": [{\"key\": \"currency\", \"label\": \"Waluta \/ wsp\u00f3lna podstawa podatkowa\", \"value\": \"EUR\", \"type\": \"text\"}, {\"key\": \"purchase\", \"label\": \"Zakup\", \"value\": 1800, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"extra\", \"label\": \"Dodatkowe komponenty\", \"value\": 0, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"resale\", \"label\": \"Warto\u015b\u0107 ko\u0144cowa\", \"value\": 0, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"months\", \"label\": \"Okres (miesi\u0105ce)\", \"value\": 36, \"min\": 1, \"max\": 600, \"integer\": true, \"type\": \"number\"}, {\"key\": \"hours\", \"label\": \"Godziny w miesi\u0105cu modelowym\", \"value\": 720, \"min\": 1, \"max\": 744, \"integer\": false, \"type\": \"number\"}, {\"key\": \"load\", \"label\": \"Godziny obci\u0105\u017cenia \/ miesi\u0105c\", \"value\": 80, \"min\": 0, \"max\": 744, \"integer\": false, \"type\": \"number\"}, {\"key\": \"idle\", \"label\": \"Godziny bezczynno\u015bci \/ miesi\u0105c\", \"value\": 640, \"min\": 0, \"max\": 744, \"integer\": false, \"type\": \"number\"}, {\"key\": \"watts\", \"label\": \"Ca\u0142y system pod obci\u0105\u017ceniem (W)\", \"value\": 330, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"idleW\", \"label\": \"Ca\u0142y system w spoczynku (W)\", \"value\": 60, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"electricity\", \"label\": \"Cena energii \/ kWh\", \"value\": 0.3, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"maintenance\", \"label\": \"Utrzymanie \/ miesi\u0105c\", \"value\": 0, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"rate\", \"label\": \"Wynajem GPU \/ godzin\u0119\", \"value\": 1, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"billed\", \"label\": \"Rozliczane godziny chmury \/ miesi\u0105c\", \"value\": 80, \"min\": 0, \"max\": 744, \"integer\": false, \"type\": \"number\"}, {\"key\": \"cloudFixed\", \"label\": \"Pami\u0119\u0107 chmury \/ inne koszty miesi\u0119czne\", \"value\": 0, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"inputTokens\", \"label\": \"Tokeny wej\u015bciowe API \/ miesi\u0105c\", \"value\": 0, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"outputTokens\", \"label\": \"Tokeny wyj\u015bciowe API \/ miesi\u0105c\", \"value\": 0, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"inputPrice\", \"label\": \"Cena API \/ milion token\u00f3w wej\u015bciowych\", \"value\": 0, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"outputPrice\", \"label\": \"Cena API \/ milion token\u00f3w wyj\u015bciowych\", \"value\": 0, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"apiFixed\", \"label\": \"Dodatkowe koszty API \/ miesi\u0105c\", \"value\": 0, \"min\": 0, \"max\": 1000000000, \"integer\": false, \"type\": \"number\"}, {\"key\": \"idlePolicy\", \"label\": \"Krzywa koszt\u00f3w: reszta miesi\u0105ca\", \"value\": \"on\", \"options\": [{\"value\": \"on\", \"label\": \"Bezczynno\u015b\u0107\"}, {\"value\": \"off\", \"label\": \"Wy\u0142\u0105czony\"}], \"type\": \"select\"}], \"note\": \"Podzia\u0142 kapita\u0142u = (zakup + komponenty \u2212 warto\u015b\u0107 ko\u0144cowa) \/ miesi\u0105ce. Energia = (W pracy \u00d7 godziny pracy + W spoczynku \u00d7 godziny spoczynku) \/ 1000 \u00d7 cena energii. Krzywa: godziny chmury r\u00f3wne godzinom pracy; dodatkowe koszty sta\u0142e. Bie\u017c\u0105ce obliczenie u\u017cywa wpisanych godzin bezczynno\u015bci i rozlicze\u0144. Pob\u00f3r po wy\u0142\u0105czeniu jest zerowy w modelu. Jako\u015b\u0107 i przepustowo\u015b\u0107 musz\u0105 odpowiada\u0107 temu samemu zadaniu. Brak aktualnej oferty dostawcy; zerowe warto\u015bci API oznaczaj\u0105 brak za\u0142o\u017conego u\u017cycia API.\", \"sources\": [[\"RunPod billing\", \"https:\/\/docs.runpod.io\/pods\/pricing\"]], \"related\": \"llm-api-token-cost-calculator\", \"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-cost-currency\">Waluta \/ wsp\u00f3lna podstawa podatkowa<\/label><input type=\"text\" name=\"currency\" id=\"ai-cost-currency\" value=\"EUR\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-purchase\">Zakup<\/label><input type=\"text\" inputmode=\"decimal\" name=\"purchase\" id=\"ai-cost-purchase\" value=\"1800\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-extra\">Dodatkowe komponenty<\/label><input type=\"text\" inputmode=\"decimal\" name=\"extra\" id=\"ai-cost-extra\" value=\"0\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-resale\">Warto\u015b\u0107 ko\u0144cowa<\/label><input type=\"text\" inputmode=\"decimal\" name=\"resale\" id=\"ai-cost-resale\" value=\"0\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-months\">Okres (miesi\u0105ce)<\/label><input type=\"text\" inputmode=\"decimal\" name=\"months\" id=\"ai-cost-months\" value=\"36\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-hours\">Godziny w miesi\u0105cu modelowym<\/label><input type=\"text\" inputmode=\"decimal\" name=\"hours\" id=\"ai-cost-hours\" value=\"720\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-load\">Godziny obci\u0105\u017cenia \/ miesi\u0105c<\/label><input type=\"text\" inputmode=\"decimal\" name=\"load\" id=\"ai-cost-load\" value=\"80\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-idle\">Godziny bezczynno\u015bci \/ miesi\u0105c<\/label><input type=\"text\" inputmode=\"decimal\" name=\"idle\" id=\"ai-cost-idle\" value=\"640\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-watts\">Ca\u0142y system pod obci\u0105\u017ceniem (W)<\/label><input type=\"text\" inputmode=\"decimal\" name=\"watts\" id=\"ai-cost-watts\" value=\"330\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-idleW\">Ca\u0142y system w spoczynku (W)<\/label><input type=\"text\" inputmode=\"decimal\" name=\"idleW\" id=\"ai-cost-idleW\" value=\"60\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-electricity\">Cena energii \/ kWh<\/label><input type=\"text\" inputmode=\"decimal\" name=\"electricity\" id=\"ai-cost-electricity\" value=\"0.3\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-maintenance\">Utrzymanie \/ miesi\u0105c<\/label><input type=\"text\" inputmode=\"decimal\" name=\"maintenance\" id=\"ai-cost-maintenance\" value=\"0\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-rate\">Wynajem GPU \/ godzin\u0119<\/label><input type=\"text\" inputmode=\"decimal\" name=\"rate\" id=\"ai-cost-rate\" value=\"1\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-billed\">Rozliczane godziny chmury \/ miesi\u0105c<\/label><input type=\"text\" inputmode=\"decimal\" name=\"billed\" id=\"ai-cost-billed\" value=\"80\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-cloudFixed\">Pami\u0119\u0107 chmury \/ inne koszty miesi\u0119czne<\/label><input type=\"text\" inputmode=\"decimal\" name=\"cloudFixed\" id=\"ai-cost-cloudFixed\" value=\"0\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-inputTokens\">Tokeny wej\u015bciowe API \/ miesi\u0105c<\/label><input type=\"text\" inputmode=\"decimal\" name=\"inputTokens\" id=\"ai-cost-inputTokens\" value=\"0\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-outputTokens\">Tokeny wyj\u015bciowe API \/ miesi\u0105c<\/label><input type=\"text\" inputmode=\"decimal\" name=\"outputTokens\" id=\"ai-cost-outputTokens\" value=\"0\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-inputPrice\">Cena API \/ milion token\u00f3w wej\u015bciowych<\/label><input type=\"text\" inputmode=\"decimal\" name=\"inputPrice\" id=\"ai-cost-inputPrice\" value=\"0\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-outputPrice\">Cena API \/ milion token\u00f3w wyj\u015bciowych<\/label><input type=\"text\" inputmode=\"decimal\" name=\"outputPrice\" id=\"ai-cost-outputPrice\" value=\"0\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-apiFixed\">Dodatkowe koszty API \/ miesi\u0105c<\/label><input type=\"text\" inputmode=\"decimal\" name=\"apiFixed\" id=\"ai-cost-apiFixed\" value=\"0\" maxlength=\"4000\"><\/div>\n<div class=\"ai-field\"><label for=\"ai-cost-idlePolicy\">Krzywa koszt\u00f3w: reszta miesi\u0105ca<\/label><select name=\"idlePolicy\" id=\"ai-cost-idlePolicy\"><option value=\"on\" selected>Bezczynno\u015b\u0107<\/option><option value=\"off\">Wy\u0142\u0105czony<\/option><\/select><\/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<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<p class=\"ai-api-link\"><a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/llm-api-token-cost-calculator\/\">Szczeg\u00f3\u0142y: kalkulator token\u00f3w i koszt\u00f3w API LLM<\/a><\/p>\n<h2>\u0179r\u00f3d\u0142a i ograniczenia<\/h2>\n<p>Podzia\u0142 kapita\u0142u = (zakup + komponenty \u2212 warto\u015b\u0107 ko\u0144cowa) \/ miesi\u0105ce. Energia = (W pracy \u00d7 godziny pracy + W spoczynku \u00d7 godziny spoczynku) \/ 1000 \u00d7 cena energii. Krzywa: godziny chmury r\u00f3wne godzinom pracy; dodatkowe koszty sta\u0142e. Bie\u017c\u0105ce obliczenie u\u017cywa wpisanych godzin bezczynno\u015bci i rozlicze\u0144. Pob\u00f3r po wy\u0142\u0105czeniu jest zerowy w modelu. Jako\u015b\u0107 i przepustowo\u015b\u0107 musz\u0105 odpowiada\u0107 temu samemu zadaniu. Brak aktualnej oferty dostawcy; zerowe warto\u015bci API oznaczaj\u0105 brak za\u0142o\u017conego u\u017cycia API.<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.runpod.io\/pods\/pricing\" rel=\"noopener noreferrer\" target=\"_blank\">RunPod billing<\/a><\/li>\n<\/ul>\n<p class=\"ai-caption\">Dokumentacja sprawdzona: 05.10.2026.<\/p>\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Jakie ograniczenia dotycz\u0105 wyniku?<\/h3>\n<p>Podzia\u0142 kapita\u0142u = (zakup + komponenty \u2212 warto\u015b\u0107 ko\u0144cowa) \/ miesi\u0105ce. Energia = (W pracy \u00d7 godziny pracy + W spoczynku \u00d7 godziny spoczynku) \/ 1000 \u00d7 cena energii. Krzywa: godziny chmury r\u00f3wne godzinom pracy; dodatkowe koszty sta\u0142e. Bie\u017c\u0105ce obliczenie u\u017cywa wpisanych godzin bezczynno\u015bci i rozlicze\u0144. Pob\u00f3r po wy\u0142\u0105czeniu jest zerowy w modelu. Jako\u015b\u0107 i przepustowo\u015b\u0107 musz\u0105 odpowiada\u0107 temu samemu zadaniu. Brak aktualnej oferty dostawcy; zerowe warto\u015bci API oznaczaj\u0105 brak za\u0142o\u017conego u\u017cycia API.<\/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>Por\u00f3wnanie lokalnego sprz\u0119tu, wynajmu GPU i API przy tym samym zadaniu i walucie.<\/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],"class_list":["post-21333","page","type-page","status-publish","hentry","tag-llm-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kalkulator koszt\u00f3w LLM lokalnie i w chmurze | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Por\u00f3wnanie lokalnego sprz\u0119tu, wynajmu GPU i API przy tym samym zadaniu i walucie.\" \/>\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\/local-cloud-llm-cost-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kalkulator koszt\u00f3w LLM lokalnie i w chmurze | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Por\u00f3wnanie lokalnego sprz\u0119tu, wynajmu GPU i API przy tym samym zadaniu i walucie.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/local-cloud-llm-cost-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-05T14:00:14+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\\\/local-cloud-llm-cost-calculator\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/local-cloud-llm-cost-calculator\\\/\",\"name\":\"Kalkulator koszt\u00f3w LLM lokalnie i w chmurze | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-05T13:58:35+00:00\",\"dateModified\":\"2026-10-05T14:00:14+00:00\",\"description\":\"Por\u00f3wnanie lokalnego sprz\u0119tu, wynajmu GPU i API przy tym samym zadaniu i walucie.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/local-cloud-llm-cost-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/local-cloud-llm-cost-calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/local-cloud-llm-cost-calculator\\\/#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\\\/toolbox-3\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Kalkulator koszt\u00f3w LLM lokalnie i w chmurze\"}]},{\"@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":"Kalkulator koszt\u00f3w LLM lokalnie i w chmurze | Lukas Wojcik","description":"Por\u00f3wnanie lokalnego sprz\u0119tu, wynajmu GPU i API przy tym samym zadaniu i walucie.","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\/local-cloud-llm-cost-calculator\/","og_locale":"en_US","og_type":"article","og_title":"Kalkulator koszt\u00f3w LLM lokalnie i w chmurze | Lukas Wojcik","og_description":"Por\u00f3wnanie lokalnego sprz\u0119tu, wynajmu GPU i API przy tym samym zadaniu i walucie.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/local-cloud-llm-cost-calculator\/","og_site_name":"Lukas Wojcik - Blog","article_modified_time":"2026-10-05T14:00:14+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\/local-cloud-llm-cost-calculator\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/local-cloud-llm-cost-calculator\/","name":"Kalkulator koszt\u00f3w LLM lokalnie i w chmurze | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-10-05T13:58:35+00:00","dateModified":"2026-10-05T14:00:14+00:00","description":"Por\u00f3wnanie lokalnego sprz\u0119tu, wynajmu GPU i API przy tym samym zadaniu i walucie.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/local-cloud-llm-cost-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/local-cloud-llm-cost-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/local-cloud-llm-cost-calculator\/#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\/toolbox-3\/"},{"@type":"ListItem","position":3,"name":"Kalkulator koszt\u00f3w LLM lokalnie i w chmurze"}]},{"@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\/21333","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=21333"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/21333\/revisions"}],"predecessor-version":[{"id":21334,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/21333\/revisions\/21334"}],"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=21333"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=21333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}