As I have gotten more involved in machine learning training and inference at home, I have gone through three graphics cards. I run my own business, and I prefer to run things locally when I can. It keeps my costs predictable and gives me more control over my data.
My NVIDIA Tesla P40
My first “big” GPU was an NVIDIA Tesla P40 that I bought on eBay for around $200. It is a passively cooled server card, so I initially paired it with a fan and a 3D-printed enclosure that someone had designed for it. The fan sounded like a jet taking off, though, so I eventually added an AIO water cooler.
That made the P40 quiet enough to live with, and I could finally leave my computer running overnight for long training sessions. I used it to fine-tune an ImageNet-pretrained model to detect geomorphological features. I also used it for other client work, and it served me well.
The Sparkle Arc Pro A770
After a while, I wanted to try something newer. The P40 had 24 GB of VRAM, but it was showing its age. I also had trouble keeping CUDA and other NVIDIA libraries consistent on my desktop. Occasionally, a software update would even break support for my primary display card, a separate NVIDIA GPU with 6 GB of VRAM.
I had also grown tired of what felt like NVIDIA SKU shenanigans, so I started looking at Intel. The performance and value of the Sparkle Arc Pro A770 impressed me enough to make the switch.
The A770 served me well for two years. I used Intel’s Docker image and its SYCL-enabled version of `llama.cpp`, along with Intel-compatible builds of PyTorch and TensorFlow. It worked well, but video memory became my ceiling. The larger mixture-of-experts models I tried generally produced fewer than 10 generated tokens per second, and I had to keep their context windows modest enough to fit in VRAM.
That Does Not Look Right
Then came an unusual fan failure. I noticed that my case would wobble and rattle whenever the A770’s cooling fans spun up. I tightened everything in the case and ran it with the side panel removed, but I still could not find the source.
Eventually, I discovered that one of the fan blades on the A770 had broken off. The damaged fan was unbalanced, and the GPU supports transferred its vibration into the rest of the case.
When the fan failed, my first thought was not “upgrade.” It was “repair.” That led to a different calculation, though: What was my time worth, and what could I do with hardware that better matched my current workloads?
I searched online but could not find a reliable source for the exact replacement fan. I would have needed to disassemble the entire card just to look for identifying information. Sparkle was not able to help me purchase replacement parts, either. As I get older, I find myself less inclined to pull hardware apart just to keep it running.
The Intel Arc Pro B70
I decided that upgrading was worth my time. I removed the A770 and temporarily switched to the integrated GPU in my AMD processor. That kept the computer usable, but it meant putting my local ML work on hold. I limped along for a couple of weeks, and it was far from ideal.
I had already been reading about Intel’s Battlemage cards, and my system had the Intel oneAPI and SYCL SDKs installed. I also needed a business expense for the fiscal year – or at least that was how my self-justification worked – so I bought Intel’s reference Arc Pro B70 card.
I chose the Intel reference design because it draws some power from the PCIe slot and requires only one auxiliary PCIe power connector. Some board-partner versions require multiple connectors.
The Arc Pro B70 Experience
The practical difference has been substantial. On the B70, I run 27B- and 35B-class models, including mixture-of-experts models, at useful interactive speeds with `llama.cpp`. I have also successfully run the models listed later in this post with 256K-token context windows without exhausting the card’s memory.
For my current setup, the Vulkan backend has been both faster and more stable than the SYCL backend. Backend performance changes as the software matures, so this is an observation about my system rather than a universal result.
With tools such as the Hermes agent and OpenCode, I typically see generation rates of around 30 tokens per second. Prompt processing is a separate operation and can be much faster, sometimes reaching roughly 2,500 tokens per second. Those figures are not directly comparable, but together they make agent workflows feel considerably more responsive than they did on the A770.
These are not standardized benchmarks. LLM performance depends on the model architecture, quantization, context length, backend, and `llama.cpp` version. A reproducible comparison would require the same model file, prompt, context, software build, and measurement method on every GPU.
My conclusion is narrower: for the local models and agent workflows I use, the B70 gives me a much more responsive experience and enough memory headroom to run workloads that were impractical on my A770.
More Than Raw Speed
Memory capacity has mattered as much as speed. With quantized model weights and a quantized KV cache, I successfully run my daily models with 256K-token context windows. That does not mean every request consumes the entire available window; memory use and performance depend on how much context a particular request uses.
The Intel ML ecosystem has also changed since I bought the A770. Intel has increasingly contributed its GPU support to upstream projects, including PyTorch and `llama.cpp`, rather than relying entirely on Intel-maintained forks. Much of Intel’s Linux GPU work happens in public and contributes to open-source projects.
NVIDIA still has a substantial lead in software maturity and in many workloads. CUDA has a large ecosystem, broad framework support, and years of optimization behind it. Intel still has compatibility and software-maturity gaps, but it appears to be closing them quickly. A competitive market involving Intel, NVIDIA, and AMD can only be good for consumers.
Local inference also lets me keep prompts and outputs on my own machine. Hosted services have different retention and training policies depending on the provider and account type, so I have to evaluate those policies before sending sensitive material. Running locally gives me another option.
What I Can Do on Intel Hardware
The Arc Pro B70 is not merely a demonstration platform for me. I use it for real development work:
- LLM inference: I run 27B- and 35B-class quantized models at useful interactive speeds. The Vulkan backend in llama.cpp handles my workloads efficiently, and the available memory supports long context windows.
- CNN training: Intel’s oneAPI, SYCL, and framework GPU support give me options for convolutional neural-network work. CUDA remains more mature, but building around open standards can reduce dependence on a single hardware vendor.
- Inference optimization: OpenVINO provides tools for model optimization and deployment. Performance is not only about raw compute; the software stack also determines how effectively an application uses the hardware.
Intel hardware still requires more investigation before a purchase. Framework support, operating system support, drivers, and backend maturity all depend on the workload. The hesitation around Intel is partly technical, but some of it also comes from the inertia of an ecosystem built around CUDA.
Cost and Value
For my workloads, the NVIDIA alternatives were difficult to justify financially. Cards offering the VRAM capacity I wanted cost substantially more than the roughly US$1,000 I paid for the B70. NVIDIA’s software ecosystem remains more mature, but I decided that advantage was not worth the additional cost for the models and tools I use.
That does not make Intel the right choice for everyone. Training requirements, framework compatibility, power constraints, and support needs can easily change the calculation. It does mean that Intel deserves serious consideration for local inference and development work.
If you are shopping for GPU hardware for machine learning:
- Look beyond brand names and compare performance, memory, and cost for your actual workload.
- Test the backend you intend to use. Its maturity and performance may matter more than headline hardware specifications.
- Consider total cost of ownership, including the time required to maintain the software stack.
- Think carefully about vendor lock-in and whether your tools leave room to change hardware later.
The fan blade broke, and the hardware was replaced. The more important upgrade was recognizing that I had more options than I initially assumed. Intel hardware is capable enough for my daily ML development work, and competition gives all of us better choices.
Technical Configuration
My llama.cpp Setup
I typically run llama-server in router mode. This lets me use Hermes and OpenCode while changing models as needed. The following models.ini configuration works well for my current workloads:
[*] n-gpu-layers = auto fit = on flash-attn = on cache-type-k = q8_0 cache-type-v = q5_1 threads = 8 threads-batch = 8 ubatch-size = 2048 parallel = 1 [Gemma-4-26B] model = /path/to/models/gemma-4-26B-A4B-it-UD-Q8_K_XL.gguf ctx-size = 262000 temperature = 1.0 top-p = 0.95 top-k = 64 [Ornith-1.0-35B] model = /path/to/models/ornith-1.0-35b-Q6_K.gguf ctx-size = 262144 temperature = 0.6 top-p = 0.95 top-k = 20 [Qwen-3.6-35B] model = /path/to/models/Qwen3.6-35B-A3B-UD-Q5_K_XL.gguf ctx-size = 262144 temperature = 1.0Key Configuration Choices top-p = 0.95 top-k = 20 [Agents-A1-Q4_K_M] model = /path/to/models/Agents-A1-Q4_K_M.gguf ctx-size = 262144 temperature = 0.85 top-p = 0.95 top-k = 20
Key Configuration Choices
- n-gpu-layers = auto: The application and backend select GPU offloading based on the available resources.
- fit = on: Helps fit the model into the available VRAM and system memory.
- cache-type-k = q8_0 and cache-type-v = q5_1: Use mixed KV-cache precision to reduce memory consumption. This seems to be the sweet spot in shrinking the size of the KV cache while still maintaining accuracy.
- flash-attn = on: Materially improves memory use and performance in my workloads.
- ubatch-size = 2048: Provides a useful balance between throughput and latency on my system.
Models I Run Daily
- Gemma-4-26B (Q8_K_XL): My usual choice for complex reasoning tasks.
- Ornith-1.0-35B (Q6_K): Useful for specialized domain knowledge and coding.
- Qwen-3.6-35B (Q5_K_XL): Useful for creative writing and brainstorming.
- Agents-A1 (Q4_K_M or Q6_K): Specialized for workflow automation.





















