[{"data":1,"prerenderedAt":929},["ShallowReactive",2],{"navigation_docs_en":3,"-en-self-hosting-performance-and-memory":123,"-en-self-hosting-performance-and-memory-surround":924},[4,36,107],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"Getting started","i-lucide-rocket","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"What is Chronicler","\u002Fen\u002Fgetting-started\u002Fwhat-is-chronicler","en\u002F1.getting-started\u002F1.what-is-chronicler","i-lucide-help-circle",{"title":16,"path":17,"stem":18,"icon":19},"Install the app","\u002Fen\u002Fgetting-started\u002Finstall-the-app","en\u002F1.getting-started\u002F2.install-the-app","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Cloud quick start","\u002Fen\u002Fgetting-started\u002Fcloud-quickstart","en\u002F1.getting-started\u002F3.cloud-quickstart","i-lucide-cloud",{"title":26,"path":27,"stem":28,"icon":29},"Your first chat","\u002Fen\u002Fgetting-started\u002Fyour-first-chat","en\u002F1.getting-started\u002F4.your-first-chat","i-lucide-messages-square",{"title":31,"path":32,"stem":33,"icon":34},"Managing users","\u002Fen\u002Fgetting-started\u002Fmanaging-users","en\u002F1.getting-started\u002F5.managing-users","i-lucide-users",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"Self-hosting","i-lucide-server","\u002Fen\u002Fself-hosting","en\u002F2.self-hosting",[42,47,52,57,62,67,72,77,82,87,92,97,102],{"title":43,"path":44,"stem":45,"icon":46},"Overview","\u002Fen\u002Fself-hosting\u002Foverview","en\u002F2.self-hosting\u002F1.overview","i-lucide-layout-dashboard",{"title":48,"path":49,"stem":50,"icon":51},"Backups and restore","\u002Fen\u002Fself-hosting\u002Fbackups","en\u002F2.self-hosting\u002F10.backups","i-lucide-database-backup",{"title":53,"path":54,"stem":55,"icon":56},"Updating","\u002Fen\u002Fself-hosting\u002Fupdating","en\u002F2.self-hosting\u002F11.updating","i-lucide-refresh-cw",{"title":58,"path":59,"stem":60,"icon":61},"Security and networking","\u002Fen\u002Fself-hosting\u002Fsecurity-and-networking","en\u002F2.self-hosting\u002F12.security-and-networking","i-lucide-shield",{"title":63,"path":64,"stem":65,"icon":66},"Troubleshooting","\u002Fen\u002Fself-hosting\u002Ftroubleshooting","en\u002F2.self-hosting\u002F13.troubleshooting","i-lucide-life-buoy",{"title":68,"path":69,"stem":70,"icon":71},"Requirements","\u002Fen\u002Fself-hosting\u002Frequirements","en\u002F2.self-hosting\u002F2.requirements","i-lucide-cpu",{"title":73,"path":74,"stem":75,"icon":76},"Quick start (guided)","\u002Fen\u002Fself-hosting\u002Fquick-start","en\u002F2.self-hosting\u002F3.quick-start","i-lucide-wand-2",{"title":78,"path":79,"stem":80,"icon":81},"Manual install","\u002Fen\u002Fself-hosting\u002Fmanual-install","en\u002F2.self-hosting\u002F4.manual-install","i-lucide-terminal",{"title":83,"path":84,"stem":85,"icon":86},"GPU acceleration","\u002Fen\u002Fself-hosting\u002Fgpu-acceleration","en\u002F2.self-hosting\u002F5.gpu-acceleration","i-lucide-zap",{"title":88,"path":89,"stem":90,"icon":91},"Performance and memory","\u002Fen\u002Fself-hosting\u002Fperformance-and-memory","en\u002F2.self-hosting\u002F6.performance-and-memory","i-lucide-gauge",{"title":93,"path":94,"stem":95,"icon":96},"Configuration reference","\u002Fen\u002Fself-hosting\u002Fconfiguration-reference","en\u002F2.self-hosting\u002F7.configuration-reference","i-lucide-sliders-horizontal",{"title":98,"path":99,"stem":100,"icon":101},"Models","\u002Fen\u002Fself-hosting\u002Fmodels","en\u002F2.self-hosting\u002F8.models","i-lucide-brain",{"title":103,"path":104,"stem":105,"icon":106},"Licensing and activation","\u002Fen\u002Fself-hosting\u002Flicensing","en\u002F2.self-hosting\u002F9.licensing","i-lucide-key-round",{"title":108,"icon":109,"path":110,"stem":111,"children":112,"page":35},"Reference","i-lucide-book-open","\u002Fen\u002Freference","en\u002F3.reference",[113,118],{"title":114,"path":115,"stem":116,"icon":117},"How it works","\u002Fen\u002Freference\u002Fhow-it-works","en\u002F3.reference\u002F1.how-it-works","i-lucide-workflow",{"title":119,"path":120,"stem":121,"icon":122},"Data and privacy","\u002Fen\u002Freference\u002Fdata-and-privacy","en\u002F3.reference\u002F2.data-and-privacy","i-lucide-lock",{"id":124,"title":88,"body":125,"description":915,"extension":916,"links":917,"meta":918,"navigation":919,"path":89,"seo":920,"stem":90,"__hash__":923},"docs_en\u002Fen\u002F2.self-hosting\u002F6.performance-and-memory.md",{"type":126,"value":127,"toc":899},"minimark",[128,132,155,162,167,170,291,294,320,323,327,338,416,423,426,442,451,457,464,478,481,486,492,497,505,508,512,518,562,585,600,603,607,613,617,752,756,864,870,874,895],[129,130,131],"p",{},"Chronicler is slow for one of three reasons, in this order of likelihood:",[133,134,135,143,149],"ol",{},[136,137,138,142],"li",{},[139,140,141],"strong",{},"There's no GPU",", or there is one and it isn't being used.",[136,144,145,148],{},[139,146,147],{},"Docker doesn't have enough memory",", so the model reloads constantly.",[136,150,151,154],{},[139,152,153],{},"The model is too big"," for the machine and is spilling to disk.",[129,156,157,158,161],{},"Fix them in that order. ",[159,160,83],"a",{"href":84},"\ncovers the first, this page covers the rest.",[163,164,166],"h2",{"id":165},"_1-give-docker-more-memory","1. Give Docker more memory",[129,168,169],{},"This is the setting people mean when they say \"allocate more RAM\", and it lives\nin Docker, not in Chronicler. Nothing in the compose file can raise it.",[171,172,173,247,267],"tabs",{},[174,175,178,186,222,225,237,240],"tabs-item",{"icon":176,"label":177},"i-lucide-monitor","Windows",[129,179,180,181,185],{},"Docker Desktop with the WSL2 backend takes memory through WSL, and by default\nit will take up to half the machine. To set it explicitly, create or edit\n",[182,183,184],"code",{},"%UserProfile%\\.wslconfig",":",[187,188,194],"pre",{"className":189,"code":190,"filename":191,"language":192,"meta":193,"style":193},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[wsl2]\nmemory=16GB\nprocessors=8\nswap=8GB\n",".wslconfig","ini","",[182,195,196,204,210,216],{"__ignoreMap":193},[197,198,201],"span",{"class":199,"line":200},"line",1,[197,202,203],{},"[wsl2]\n",[197,205,207],{"class":199,"line":206},2,[197,208,209],{},"memory=16GB\n",[197,211,213],{"class":199,"line":212},3,[197,214,215],{},"processors=8\n",[197,217,219],{"class":199,"line":218},4,[197,220,221],{},"swap=8GB\n",[129,223,224],{},"Then, in an admin PowerShell:",[187,226,231],{"className":227,"code":228,"filename":229,"language":230,"meta":193,"style":193},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","wsl --shutdown\n","PowerShell","powershell",[182,232,233],{"__ignoreMap":193},[197,234,235],{"class":199,"line":200},[197,236,228],{},[129,238,239],{},"Restart Docker Desktop. Leave the host at least 4–8 GB — starving Windows to\nfeed the model makes everything worse.",[241,242,243,246],"caution",{},[182,244,245],{},"wsl --shutdown"," stops your containers. Do it when nobody is using the server.",[174,248,251,254,255,258,259,262,263,266],{"icon":249,"label":250},"i-lucide-apple","macOS",[139,252,253],{},"Docker Desktop → Settings → Resources",". Raise ",[139,256,257],{},"Memory"," and ",[139,260,261],{},"CPUs",", then\n",[139,264,265],{},"Apply & restart",".",[174,268,270,273],{"icon":81,"label":269},"Linux",[129,271,272],{},"Containers use the host's memory directly — there's nothing to raise. Just make\nsure the machine has enough free, and that swap exists so a spike doesn't get\nthe backend killed outright:",[187,274,279],{"className":275,"code":276,"filename":277,"language":278,"meta":193,"style":193},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","free -h\n","Terminal","bash",[182,280,281],{"__ignoreMap":193},[197,282,283,287],{"class":199,"line":200},[197,284,286],{"class":285},"sBMFI","free",[197,288,290],{"class":289},"sfazB"," -h\n",[129,292,293],{},"Check what Docker actually got:",[187,295,297],{"className":275,"code":296,"filename":277,"language":278,"meta":193,"style":193},"docker info --format \"{{.MemTotal}}\"\n",[182,298,299],{"__ignoreMap":193},[197,300,301,304,307,310,314,317],{"class":199,"line":200},[197,302,303],{"class":285},"docker",[197,305,306],{"class":289}," info",[197,308,309],{"class":289}," --format",[197,311,313],{"class":312},"sMK4o"," \"",[197,315,316],{"class":289},"{{.MemTotal}}",[197,318,319],{"class":312},"\"\n",[129,321,322],{},"Under 4 GiB and the backend will be killed as soon as a model loads.",[163,324,326],{"id":325},"_2-tune-the-model-runtime","2. Tune the model runtime",[129,328,329,330,333,334,337],{},"These go in the ",[182,331,332],{},".env"," next to your compose file. Each is optional — leave it out\nand Ollama's own default applies. Run ",[182,335,336],{},"docker compose up -d"," after a change.",[339,340,341,357],"table",{},[342,343,344],"thead",{},[345,346,347,351,354],"tr",{},[348,349,350],"th",{},"Setting",[348,352,353],{},"Default",[348,355,356],{},"What it does",[358,359,360,376,389,401],"tbody",{},[345,361,362,368,373],{},[363,364,365],"td",{},[182,366,367],{},"OLLAMA_KEEP_ALIVE",[363,369,370],{},[182,371,372],{},"5m",[363,374,375],{},"How long the model stays loaded after a question.",[345,377,378,383,386],{},[363,379,380],{},[182,381,382],{},"OLLAMA_NUM_PARALLEL",[363,384,385],{},"automatic",[363,387,388],{},"How many questions one model answers at once.",[345,390,391,396,398],{},[363,392,393],{},[182,394,395],{},"OLLAMA_MAX_LOADED_MODELS",[363,397,385],{},[363,399,400],{},"How many different models stay in memory.",[345,402,403,408,413],{},[363,404,405],{},[182,406,407],{},"OLLAMA_CONTEXT_LENGTH",[363,409,410],{},[182,411,412],{},"16384",[363,414,415],{},"Default context for clients that don't ask for one.",[417,418,420,422],"h3",{"id":419},"ollama_keep_alive-the-one-worth-changing",[182,421,367],{}," — the one worth changing",[129,424,425],{},"Ollama unloads the model five minutes after the last question. The next question\npays the full cold load again: one to three minutes on a CPU, several seconds on\na GPU. On a dedicated server there's no reason to keep paying that.",[187,427,429],{"className":275,"code":428,"filename":332,"language":278,"meta":193,"style":193},"OLLAMA_KEEP_ALIVE=-1\n",[182,430,431],{"__ignoreMap":193},[197,432,433,436,439],{"class":199,"line":200},[197,434,367],{"class":435},"sTEyZ",[197,437,438],{"class":312},"=",[197,440,441],{"class":289},"-1\n",[129,443,444,447,448,266],{},[182,445,446],{},"-1"," keeps the model resident permanently. The cost is exactly the model's memory\n(3–20 GB depending on which one), held whether anyone is asking or not. On a\nshared machine that has other work to do, prefer something like ",[182,449,450],{},"2h",[417,452,454,456],{"id":453},"ollama_num_parallel-for-several-people-at-once",[182,455,382],{}," — for several people at once",[129,458,459,460,463],{},"Each parallel slot gets its own context memory, on top of the model weights.\nDoubling it roughly doubles the per-context memory. With one or two users, leave\nit alone; a spare ",[182,461,462],{},"1"," also frees memory on a small machine.",[187,465,467],{"className":275,"code":466,"filename":332,"language":278,"meta":193,"style":193},"OLLAMA_NUM_PARALLEL=4\n",[182,468,469],{"__ignoreMap":193},[197,470,471,473,475],{"class":199,"line":200},[197,472,382],{"class":435},[197,474,438],{"class":312},[197,476,477],{"class":289},"4\n",[129,479,480],{},"Only useful with memory to spare. If the machine is already tight, more parallel\nslots make everything slower, not faster.",[417,482,484],{"id":483},"ollama_max_loaded_models",[182,485,395],{},[129,487,488,489,491],{},"Chronicler generates with a single model, so leaving this alone is right for\nalmost everyone. Setting it to ",[182,490,462],{}," on a small machine guarantees a second model\nnever sneaks into memory.",[417,493,495],{"id":494},"ollama_context_length",[182,496,407],{},[498,499,500,501,504],"warning",{},"Raising this ",[139,502,503],{},"does not give chat a bigger context window."," The Chronicler\nbackend asks for its own context size on every request, and that value is fixed\nin the image. This setting only affects other clients talking to the same Ollama.",[129,506,507],{},"Included for completeness. Changing it is almost never the fix you're looking\nfor.",[163,509,511],{"id":510},"_3-tune-the-database","3. Tune the database",[129,513,514,515,517],{},"Also in ",[182,516,332],{},". The defaults are Postgres' own, which are famously conservative.",[339,519,520,530],{},[342,521,522],{},[345,523,524,526,528],{},[348,525,350],{},[348,527,353],{},[348,529,356],{},[358,531,532,547],{},[345,533,534,539,544],{},[363,535,536],{},[182,537,538],{},"POSTGRES_SHARED_BUFFERS",[363,540,541],{},[182,542,543],{},"128MB",[363,545,546],{},"Database cache. The one that matters for search across a big library.",[345,548,549,554,559],{},[363,550,551],{},[182,552,553],{},"POSTGRES_WORK_MEM",[363,555,556],{},[182,557,558],{},"4MB",[363,560,561],{},"Memory per sort. Raise in small steps.",[187,563,565],{"className":275,"code":564,"filename":332,"language":278,"meta":193,"style":193},"POSTGRES_SHARED_BUFFERS=2GB\nPOSTGRES_WORK_MEM=32MB\n",[182,566,567,576],{"__ignoreMap":193},[197,568,569,571,573],{"class":199,"line":200},[197,570,538],{"class":435},[197,572,438],{"class":312},[197,574,575],{"class":289},"2GB\n",[197,577,578,580,582],{"class":199,"line":206},[197,579,553],{"class":435},[197,581,438],{"class":312},[197,583,584],{"class":289},"32MB\n",[129,586,587,588,591,592,595,596,599],{},"A common rule of thumb for ",[182,589,590],{},"shared_buffers"," is 25% of the memory you're willing\nto give the database. ",[182,593,594],{},"work_mem"," is allocated ",[139,597,598],{},"per sort",", not per connection, so\na large value times many concurrent queries is how servers run out of memory —\n32 MB is generous, 1 GB is a mistake.",[129,601,602],{},"Only worth touching once you have thousands of documents. Below that, the default\nis fine and the model is your bottleneck.",[163,604,606],{"id":605},"_4-right-size-the-model","4. Right-size the model",[129,608,609,610,612],{},"A model that doesn't fit is the worst case: it spills to disk and each answer\ntakes minutes. Match the model to the memory you actually have — see\n",[159,611,98],{"href":99},". Smaller and resident beats bigger and\nswapping, every time.",[163,614,616],{"id":615},"worked-examples","Worked examples",[618,619,620,654,702],"card-group",{},[621,622,625,631],"card",{"icon":623,"title":624},"i-lucide-laptop","Laptop, no GPU, 16 GB",[129,626,627,628,266],{},"Docker: 8 GB. Model: ",[182,629,630],{},"gemma4:e2b",[187,632,634],{"className":275,"code":633,"language":278,"meta":193,"style":193},"OLLAMA_KEEP_ALIVE=30m\nOLLAMA_NUM_PARALLEL=1\n",[182,635,636,645],{"__ignoreMap":193},[197,637,638,640,642],{"class":199,"line":200},[197,639,367],{"class":435},[197,641,438],{"class":312},[197,643,644],{"class":289},"30m\n",[197,646,647,649,651],{"class":199,"line":206},[197,648,382],{"class":435},[197,650,438],{"class":312},[197,652,653],{"class":289},"1\n",[621,655,657,663],{"icon":38,"title":656},"Office server, no GPU, 32 GB",[129,658,659,660,266],{},"Docker: 24 GB. Model: ",[182,661,662],{},"gemma4:e4b",[187,664,666],{"className":275,"code":665,"language":278,"meta":193,"style":193},"OLLAMA_KEEP_ALIVE=-1\nOLLAMA_NUM_PARALLEL=2\nPOSTGRES_SHARED_BUFFERS=2GB\nPOSTGRES_WORK_MEM=16MB\n",[182,667,668,676,685,693],{"__ignoreMap":193},[197,669,670,672,674],{"class":199,"line":200},[197,671,367],{"class":435},[197,673,438],{"class":312},[197,675,441],{"class":289},[197,677,678,680,682],{"class":199,"line":206},[197,679,382],{"class":435},[197,681,438],{"class":312},[197,683,684],{"class":289},"2\n",[197,686,687,689,691],{"class":199,"line":212},[197,688,538],{"class":435},[197,690,438],{"class":312},[197,692,575],{"class":289},[197,694,695,697,699],{"class":199,"line":218},[197,696,553],{"class":435},[197,698,438],{"class":312},[197,700,701],{"class":289},"16MB\n",[621,703,705,714],{"icon":86,"title":704},"Workstation, 24 GB NVIDIA",[129,706,707,710,711,266],{},[182,708,709],{},"COMPOSE_PROFILES=nvidia",". Model: ",[182,712,713],{},"gemma4:26b",[187,715,717],{"className":275,"code":716,"language":278,"meta":193,"style":193},"OLLAMA_KEEP_ALIVE=-1\nOLLAMA_NUM_PARALLEL=4\nPOSTGRES_SHARED_BUFFERS=4GB\nPOSTGRES_WORK_MEM=32MB\n",[182,718,719,727,735,744],{"__ignoreMap":193},[197,720,721,723,725],{"class":199,"line":200},[197,722,367],{"class":435},[197,724,438],{"class":312},[197,726,441],{"class":289},[197,728,729,731,733],{"class":199,"line":206},[197,730,382],{"class":435},[197,732,438],{"class":312},[197,734,477],{"class":289},[197,736,737,739,741],{"class":199,"line":212},[197,738,538],{"class":435},[197,740,438],{"class":312},[197,742,743],{"class":289},"4GB\n",[197,745,746,748,750],{"class":199,"line":218},[197,747,553],{"class":435},[197,749,438],{"class":312},[197,751,584],{"class":289},[163,753,755],{"id":754},"check-what-you-changed","Check what you changed",[187,757,759],{"className":275,"code":758,"filename":277,"language":278,"meta":193,"style":193},"docker compose config | grep -A6 \"OLLAMA_\"        # what compose resolved\ndocker exec chronicler-ollama env | grep OLLAMA   # what the container actually got\ndocker exec chronicler-postgres psql -U chronicler -d chronicler_app -c 'show shared_buffers;'\ndocker stats --no-stream                          # what everything is using now\n",[182,760,761,792,815,851],{"__ignoreMap":193},[197,762,763,765,768,771,774,777,780,782,785,788],{"class":199,"line":200},[197,764,303],{"class":285},[197,766,767],{"class":289}," compose",[197,769,770],{"class":289}," config",[197,772,773],{"class":312}," |",[197,775,776],{"class":285}," grep",[197,778,779],{"class":289}," -A6",[197,781,313],{"class":312},[197,783,784],{"class":289},"OLLAMA_",[197,786,787],{"class":312},"\"",[197,789,791],{"class":790},"sHwdD","        # what compose resolved\n",[197,793,794,796,799,802,805,807,809,812],{"class":199,"line":206},[197,795,303],{"class":285},[197,797,798],{"class":289}," exec",[197,800,801],{"class":289}," chronicler-ollama",[197,803,804],{"class":289}," env",[197,806,773],{"class":312},[197,808,776],{"class":285},[197,810,811],{"class":289}," OLLAMA",[197,813,814],{"class":790},"   # what the container actually got\n",[197,816,817,819,821,824,827,830,833,836,839,842,845,848],{"class":199,"line":212},[197,818,303],{"class":285},[197,820,798],{"class":289},[197,822,823],{"class":289}," chronicler-postgres",[197,825,826],{"class":289}," psql",[197,828,829],{"class":289}," -U",[197,831,832],{"class":289}," chronicler",[197,834,835],{"class":289}," -d",[197,837,838],{"class":289}," chronicler_app",[197,840,841],{"class":289}," -c",[197,843,844],{"class":312}," '",[197,846,847],{"class":289},"show shared_buffers;",[197,849,850],{"class":312},"'\n",[197,852,853,855,858,861],{"class":199,"line":218},[197,854,303],{"class":285},[197,856,857],{"class":289}," stats",[197,859,860],{"class":289}," --no-stream",[197,862,863],{"class":790},"                          # what everything is using now\n",[129,865,866,867,869],{},"A setting you left out of ",[182,868,332],{}," won't appear in the container at all. That's\ncorrect — it means the runtime's own default is in force.",[163,871,873],{"id":872},"speed-that-isnt-about-memory","Speed that isn't about memory",[875,876,877,883,889],"ul",{},[136,878,879,882],{},[139,880,881],{},"Scope your questions."," A conversation pointed at three documents is far\nfaster than one pointed at everything.",[136,884,885,888],{},[139,886,887],{},"Index during quiet hours."," Bulk uploads, especially scanned ones, compete\nwith chat for the same CPU.",[136,890,891,894],{},[139,892,893],{},"Use an SSD."," Loading a 20 GB model off a spinning disk is a bad minute.",[896,897,898],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":193,"searchDepth":206,"depth":206,"links":900},[901,902,910,911,912,913,914],{"id":165,"depth":206,"text":166},{"id":325,"depth":206,"text":326,"children":903},[904,906,908,909],{"id":419,"depth":212,"text":905},"OLLAMA_KEEP_ALIVE — the one worth changing",{"id":453,"depth":212,"text":907},"OLLAMA_NUM_PARALLEL — for several people at once",{"id":483,"depth":212,"text":395},{"id":494,"depth":212,"text":407},{"id":510,"depth":206,"text":511},{"id":605,"depth":206,"text":606},{"id":615,"depth":206,"text":616},{"id":754,"depth":206,"text":755},{"id":872,"depth":206,"text":873},"Give the stack more RAM, and know which knob actually changes anything.","md",null,{},{"icon":91},{"title":921,"description":922},"Tuning Chronicler memory and performance","Raise Docker's memory limit, tune Ollama and Postgres, and size the stack for several concurrent users.","lXvHlB0SYc7HgOtAYnSqPBhbbouocN3Qxm-SsBG8BIw",[925,927],{"title":83,"path":84,"stem":85,"description":926,"icon":86,"children":-1},"Use the graphics card you already have — the difference between a minute and a few seconds.",{"title":93,"path":94,"stem":95,"description":928,"icon":96,"children":-1},"Every setting you can change, where it lives, and what is deliberately fixed.",1785092107301]