So quick napkin math can give you the VRAM usage for loading the model. 7b can be ~14GB full, 7GB in fp8 and ~3.5GB in 4bit (AWQ, int4, q4_k_m, etc). But that's just to load the model in VRAM. You also need some available VRAM to run inference, and there are a lot of things to consider there too. You need to be able to run a forward pass on the required context, you can keep a kv cache to speed up inference, you can do multiple sessions in parallel, and so on.
Context length is important to take into account because images take a lot of tokens. So what you could do with a 7b LLM at full precision on a 16GB VRAM GPU might not be possible with a VLM, because the context of your query might not fit into the remaining 2GB.
The direct parm conversion math tends to be much less reliable than one would expect once quants are involved.
e.g.
7B @ Q8 = 7.1gb [0]
30B @ Q8 = 34.6gb [1]
btw you can also roughly estimate expected output speed too if you know the device memory throughput. Noting that this doesn't work for MoEs
Also recently discovered that in CPU mode llama.cpp does memory mapping. For some models it loads less than a quarter into memory.