I replaced ollama with LocalAI and its been smooth sailing ever since.
LocalLLaMA
Welcome to LocalLLaMA! Here we discuss running and developing machine learning models at home. Lets explore cutting edge open source neural network technology together.
Get support from the community! Ask questions, share prompts, discuss benchmarks, get hyped at the latest and greatest model releases! Enjoy talking about our awesome hobby.
As ambassadors of the self-hosting machine learning community, we strive to support each other and share our enthusiasm in a positive constructive way.
Rules:
Rule 1 - No harassment or personal character attacks of community members. I.E no namecalling, no generalizing entire groups of people that make up our community, no baseless personal insults.
Rule 2 - No comparing artificial intelligence/machine learning models to cryptocurrency. I.E no comparing the usefulness of models to that of NFTs, no comparing the resource usage required to train a model is anything close to maintaining a blockchain/ mining for crypto, no implying its just a fad/bubble that will leave people with nothing of value when it burst.
Rule 3 - No comparing artificial intelligence/machine learning to simple text prediction algorithms. I.E statements such as "llms are basically just simple text predictions like what your phone keyboard autocorrect uses, and they're still using the same algorithms since <over 10 years ago>.
Rule 4 - No implying that models are devoid of purpose or potential for enriching peoples lives.
Can it load models straight from lhuggingface?
The main reason anyone would "need to" switch to llama.cpp is if they want to do partial offloading, i.e. split the model between GPU and CPU. This works quite well for MoE models, but you didn't say anything about this, so I'm just wondering what your goals are.
Absolutely nothing wrong with switching to llama.cpp, I also use it, but that's because I occasionally want to run models larger than my VRAM. It has official docker images and a server with both API access and a decent web-UI.
If you're only going to run models which fully fit in VRAM, then tabbyAPI is also a good option. However, it uses Exl3 format instead of gguf, so llama.cpp probably makes more sense if you already have a lot of models in gguf format. tabby also comes with docker files and API support, so either should be quite easy to integrate with your setup.
Llama.cpp has its own built-in web UI that is fairly decent. Not as full featured as open web UI, but depends what you're after.
It's surprisingly good, I switched from OWUI to it. Supports MCP servers, has chats and history, can run llama.cpp built in tools, and is super light weight.
So I'd recommend testing this at least!
I'd not use ollama, it's basically just a fancy wrapper around lama.cpp.
There's also modules/docker containers to hot swap models with lama.cpp
My model hosting setup is: Lama.cpp -> Open web UI
Lama.cpp is running in a local shell on my Mac Mini, since setting up GPU support with metal is (or was?) a pain. And open web UI sits in a docker with a local storage mounted so it have persistence when updating or moving the docker.
16gigs vram however ain't too much, you'll be fairly limited to fairly low quants. It will be reasonably fast tho. If you can use most of your system ram you could go and host f.e. qwen 3.6 bf8(~56gb) or bf4 (~30gb). It would be slower but you also gain a lot of usability from that.
Or you host two models a smaller one on the GPU and bigger one with system ram so you can switch between "knowledge" and speed.
Using lama.cpp you'll have to take a look at huggingface & use gguf models.
OpenWebUI works with plain llama.cpp
16 is a bit small so try a MoE (e.g. QWEN 3.6 35BA3B) model and put experts on the CPU (although DDR4 may be underwhelming) which you can do with llama ( with offloading and drafting for T/s) but not ollama (spitting noise). Here's a good starting point. You'll likely get 60+T/s on say a 6 bit quant.
You can use a container approach, but llama.cpp is a bit of a moving target, with new cool features coming along regularly to support new models. I build it in a distrobox and running it is a simple call. When it doesn't want to build anymore because dependencies have changed too much, I just spin up a new distrobox and leave the old one there for older models. I find it a good balance between flexibility and ease of maintenance, and technically it's also a container approach. Take notes so you know how to set up the new one.