
Short review: Local LM on GTX 1060 3 GB • AMD E2-2000 • 8 GB DDR3
I guess, this is a real LowEnd station, so I thought I share this here:
Overview of all models with speed test.
This is a pretty old I PC I'm testing out just for fun and honestly, it's somehow fine. I'm running some of the smaller models and they give me between 20 and 30tps. Prefill is between 200 and 600 tps with longer inputs up to 1200.
Of course, the capabilities are far from typical Qwen 27B, butI think it's pretty good for a system with 10-15 year old components.
Using claude I did a simple PI-Benchmark:
Results without thinking (✅ pass with time; ❌ fail; ⏱ hit the 6-min limit; benchmark and tables created by Claude):
| Task | Qwen3.5-2B | Granite 4.1 3B | Ministral 3 3B | MiniCPM5-2B | Qwen3.5-4B | NeoHorse-1-4B |
|---|---|---|---|---|---|---|
| fizzbuzz | ✅ 217 s | ✅ 50 s | ✅ 29 s | ✅ 108 s | ✅ 40 s | ✅ 42 s |
| binsearch-bug | ✅ 22 s | ✅ 22 s | ✅ 32 s | ✅ 146 s | ✅ 57 s | ✅ 112 s |
| roman | ⏱ | ❌ | ✅ 27 s | ⏱ | ✅ 52 s | ❌ |
| duration | ⏱ | ❌ | ❌ | ❌ | ❌ | ✅ 264 s |
| wordfreq-cli | ⏱ | ✅ 47 s | ❌ | ✅ 32 s | ✅ 23 s | ✅ 110 s |
| inventory | ⏱ | ❌ | ✅ 41 s | ✅ 38 s | ✅ 50 s | ✅ 51 s |
| csv-two-bugs | ⏱ | ❌ | ✅ 51 s | ✅ 31 s | ✅ 66 s | ✅ 159 s |
| spiral | ✅ 21 s | ✅ 60 s | ✅ 21 s | ✅ 13 s | ✅ 21 s | ⏱ |
| Score | 3/8 | 4/8 | 6/8 | 6/8 | 7/8 | 6/8 |
| Total time | ~34 min | 6 min | 5 min | 15 min | 10 min | 24 min |
Results with thinking:
| Task | MiniCPM5-2B | Qwen3.5-4B | NeoHorse-1-4B | Ministral 3 3B Reasoning |
|---|---|---|---|---|
| fizzbuzz | ✅ 28 s | ✅ 55 s | ✅ 43 s | ❌ |
| binsearch-bug | ✅ 38 s | ⏱ | ❌ | ✅ 29 s |
| roman | ⏱ | ✅ 227 s | ❌ | ❌ |
| duration | ✅ 153 s | ❌ | ❌ | ❌ |
| wordfreq-cli | ✅ 85 s | ✅ 69 s | ✅ 175 s | ✅ 35 s |
| inventory | ✅ 65 s | ✅ 73 s | ✅ 164 s | ❌ |
| csv-two-bugs | ⏱ | ✅ 58 s | ❌ | ❌ |
| spiral | ✅ 85 s | ✅ 41 s | ✅ 56 s | ❌ |
| Score | 6/8 | 6/8 | 4/8 | 2/8 |
| Total time | 19 min | 19 min | 25 min | 7 min |
Setup: GTX 1060 3 GB, AMD E2-2000 (2 cores, no AVX), 2×4 GB DDR3-800, llama.cpp (CUDA). All layers on the GPU (-ngl 99, batch 256, q8_0 KV cache); any CPU offload is unusable on this CPU.
The 8 tasks (each starts in an empty folder with a unit-test file; the agent may read, write and run tests until they pass; 6 min limit; tests are restored before grading):
| # | Task | What the agent has to do |
|---|---|---|
| 1 | fizzbuzz | Write fizzbuzz(n) from a one-sentence spec |
| 2 | binsearch-bug | Find and fix an off-by-one bug in an existing binary search |
| 3 | roman | Write to_roman / from_roman for 1–3999 incl. error handling (round-trip tested for all 3999 numbers) |
| 4 | duration | Write a parser for "1h30m", "2h5s" … with strict validation (wrong order, duplicates, u |
| 5 | wordfreq-cli | Write a command-line tool that prints the top N words of a file (case-insensitive, ties alphabetical) |
| 6 | inventory | Extend an existing 3-file package: remove() with 3 error cases + total_value() using |
| 7 | csv-two-bugs | Fix a CSV summary function that has two separate bugs (skips a data row, truncates floats) |
| 8 | spiral | Write spiral_order(matrix) incl. edge cases (single column, empty) |
| Model | Quant | Size | Gen tok/s | Prefill tok/s (>500 tok) | Context |
|---|---|---|---|---|---|
| Qwen3.5-2B | UD-Q5_K_XL | 1.5 GB | 36.5 | 1210 | 128k |
| MiniCPM5-2B | Q6_K | 2.1 GB | 34.4 | 876 | 16k |
| Granite 4.1 3B | Q4_K_M | 2.1 GB | 33.7 | 615 | 8k |
| Ministral 3 3B | UD-Q4_K_XL | 2.2 GB | 29.4 | 622 | 8k |
| Qwen3-4B-2507 | Q4_K_M | 2.5 GB | 28.8 | 509 | 4k |
| Qwen3.5-4B | IQ4_XS | 2.5 GB | 26.7 | 549 | 16k |
| Gemma 4 E2B | Q3_K_M | 2.5 GB | 23.3 | 746 | 64k |
| NeoHorse-1-4B | i1-IQ3_M | 2.2 GB | 23.3 | 508 | 16k |
Takeaways:
- Qwen3.5-4B (no thinking) solved the most (7/8). Ministral 3 3B is the efficiency winner: 6/8 in 5 minutes.
- MiniCPM5-2B reaches 6/8 at only 2B parameters and is one of the fastest models on this card (34 tok/s).
- Thinking didn't pay off for these small models in agent use: the same or worse scores at about twice the time. NeoHorse even dropped from 6/8 to 4/8.
- Caveat: these are 8 small tasks with one run each, so a difference of one task is noise. Real projects (bigger codebases, vague requirements) would be harder, especially with only 8–16k of context.