llama-cli or another runner that reports tokens/s, nvidia-smi for RTX 4090, and the AMD monitoring tool documented for Strix Halo.
./models/<model>.gguf. Replace <model> with the file you actually downloaded.llama-cli; check llama-cli --help for your build.nvidia-smi. Verify with:nvidia-smi --query-gpu=name,memory.total,driver_version --format=csv
Expected: a header plus one row with the GPU name, a non-zero memory total, and a driver version. If the command is not found, install the NVIDIA driver tools first.
rocm-smi or radeontop are common examples, but use what your platform documents.Example: if your model card lists a 5 GB file for 4-bit quantization, write 5 in the budget calculator in Step 1. If the card does not list a context-cache size, check the runner documentation for the KV-cache formula.
What to do: calculate the minimum memory your target model needs before you install or buy anything. Use the model file size, the context cache, and a runtime overhead allowance.
python3 - <<'PY'
model_gb = float(input("model file GB: "))
ctx_gb = float(input("context cache GB: "))
runtime_gb = 2.0
print(f"minimum budget: {model_gb + ctx_gb + runtime_gb:.1f} GB")
PY
Example:
model file GB: 5
context cache GB: 2
minimum budget: 9.0 GB
Why: the model weights and KV cache are the two largest fixed allocations. The runtime allowance covers temporary buffers, graph memory, and fragmentation. If the budget is close to the usable memory reported by the OS or GPU, expect an out-of-memory failure at longer context.
How to check: compare the result with the memory the platform actually reports.
free -g
Expected on a Linux machine: a Mem: row with total, used, free, and available columns. On RTX 4090, also run:
nvidia-smi --query-gpu=memory.total,memory.used --format=csv
Expected: a header and one row with non-zero memory.total and memory.used. If available or free VRAM is below your budget, reduce context, quantization, or offloaded layers before benchmarking.

What to do: run one fixed prompt with one fixed model on both machines. Record prompt-eval tokens/s, eval tokens/s, wall time, and peak memory.
/usr/bin/time -f "wall=%e s, maxrss=%M KB" \
llama-cli -m ./models/<model>.gguf \
-p "Summarize the following text in 200 words: <fixed text>" \
-n 256 -c 4096 -ngl 99
-ngl 99 means “offload all layers to the GPU.” If the run fails with an out-of-memory error, lower it, for example -ngl 20. On AMD Strix Halo, confirm the backend flag and offload behavior in your platform documentation; the linked AMD guide is the starting point.
Example: your output should contain lines in this format:
llama_perf_context_print: prompt eval time = 1200.00 ms / 50 tokens (24.00 ms per token, 41.67 tokens per second)
llama_perf_context_print: eval time = 25000.00 ms / 256 runs (97.66 ms per token, 10.24 tokens per second)
Record 41.67 and 10.24 in the table. Your values will differ; the format is what matters.
Why: the same model and prompt isolate the platform, backend, and memory behavior. If you change the model or prompt between runs, you are comparing workloads, not hardware.
How to check: the command must exit with code 0 and print both prompt eval time and eval time. If it prints only CPU lines, the GPU backend is not active. Record the results:
| Metric | AMD Strix Halo | NVIDIA RTX 4090 | Pass condition |
|---|---|---|---|
| Peak memory used | `<value>` | `<value>` | Below usable memory |
| Prompt-eval tokens/s | `<value>` | `<value>` | Higher is better |
| Eval tokens/s | `<value>` | `<value>` | Above your target |
| Wall time for 256 tokens | `<value>` | `<value>` | Lower is better |
| Driver/runtime version | `<value>` | `<value>` | Matches platform docs |
| Option | What changes in the local LLM workflow | Price |
|---|---|---|
| AMD Strix Halo | You test the AMD GPU backend and watch system-wide memory; confirm the exact memory topology and usable memory in your platform documentation. | Not stated in the source posts; check current retail price. |
| NVIDIA RTX 4090 | You test the CUDA backend and watch VRAM; when VRAM is exhausted, layers spill to system RAM or the run fails. | Not stated in the source posts; check current retail price. |
If you are still choosing the model itself, use Best AI models and neural networks in 2026 before repeating this step.

What to do: apply three rules to the table from Step 2.
1. If the model does not fit on RTX 4090 at your required context, and it fits on Strix Halo at acceptable tokens/s, choose Strix Halo.
2. If both fit and both meet your tokens/s target, choose the lower total cost of ownership: purchase price, power draw, cooling, and noise.
3. If neither meets your tokens/s target, reduce quantization, reduce context, or choose a smaller model. Do not buy a platform to fix a workload that is too large.
Example decision record:
cat > decision.txt <<'EOF'
Target: 15 tokens/s, 8K context, 4-bit model
AMD Strix Halo: fit=yes, eval=18 tokens/s
RTX 4090: fit=no at 8K, eval=12 tokens/s at 4K
Choice: AMD Strix Halo
EOF
This is an example only; replace the numbers with your measured results.
Why: a local LLM purchase fails in two ways: the model does not fit, or it fits but is too slow for the workflow. The table makes both failure modes visible before you spend money.
How to check: open decision.txt and confirm every claim points to a measured row in the Step 2 table.
cat decision.txt
Expected: a short record with a target, one fit result per platform, and one choice. If a line has no measured value, the decision is not ready.
Problem. RTX 4090 run stops with an out-of-memory error at full offload.
CUDA error: out of memory-ngl value.llama-cli -m ./models/<model>.gguf -p "<prompt>" -n 128 -c 4096 -ngl 20
If it still fails, use a smaller quantization or a smaller model.
Problem. AMD build starts but does not use the GPU.
hipErrorNoBinaryForGpu: Unable to find code object for all current devicesrocminfo | grep -i gfx
Then follow the AMD setup guide for the correct backend and build flags. If rocminfo is not installed, install the platform tools first.
Problem. The model file loads on one machine but not the other.
llama_model_load: error loading model: unknown model architecturels -lh ./models/<model>.gguf
file ./models/<model>.gguf
If the file is incomplete, download it again. If the architecture is unsupported, convert it to GGUF with a compatible tool or choose another model.
Run the memory-budget calculation and the same benchmark on both machines, then choose the platform that meets your tokens/s target without exceeding usable memory. Next, lock the driver and runtime versions and save the benchmark command in a script so you can repeat the comparison after updates.
Is Strix Halo better than RTX 4090 for local LLMs?
There is no universal answer. It depends on whether your model and context fit, and whether the measured tokens/s meets your target. Use the Step 2 table.
Can RTX 4090 run a 70B model?
Check the model card and run the Step 1 budget calculation. If the model file plus context cache exceeds usable VRAM, reduce quantization or offload layers; expect lower speed when offloading.
How much memory do I need for a 7B model?
Use the model card’s file size plus the context cache plus runtime overhead. The Step 1 calculator gives the minimum; do not rely on a single universal number.
Does llama.cpp support AMD Strix Halo?
Support depends on your build and backend. Follow the AMD guide linked in Requirements, then verify with a real model load and a GPU monitoring tool. If the run uses CPU only, the backend is not active.