Loading example…
Loading example…
LLM chat application with Arm CPU inference provided by llama.cpp. This project demonstrates running large language models on CPU with inference provided by the llama.cpp server. The upstream Linux Arm64 image includes architecture-specific CPU backend variants for Armv8.0 baseline, Armv8.2 dot product/FP16/SVE, Armv8.6 int8 matrix multiply/SVE2, and Armv9.2 SME-capable CPUs. The stack includes: - llama.cpp - Quantized SmolLM2 135M default model loaded through llama.cpp - Built-in web chat interface - No GPU required - pure CPU inference Perfect for demos and testing! The default SmolLM2-135M-Instruct model gives the project a small ready-to-use model reference by default. Ideal for testing LLM workloads on Arm hardware without GPU dependencies while avoiding a source build during Topo Project deployment.
View on GitHubThis is a Topo Project and follows the Topo Project Specification.
Complete LLM chat application with Arm CPU inference provided by llama.cpp.
This project demonstrates running large language models on CPU with inference provided by the llama.cpp server and a configurable GGUF model.
The upstream Linux Arm64 llama.cpp server image is built with architecture-specific CPU backend variants enabled. llama.cpp can then load a backend variant that matches the Arm CPU features available at runtime.
The stack includes:
The prebuilt ghcr.io/ggml-org/llama.cpp:server image currently enables llama.cpp CPU backend variants for Linux Arm. This project pins the image digest so these exact variants remain stable.
The Linux Arm backend variants and feature combinations are defined in upstream ggml/src/CMakeLists.txt, and the CPU server image is built with GGML_CPU_ALL_VARIANTS=ON in upstream .devops/cpu.Dockerfile.
| Backend variant | Arm features included |
|---|---|
armv8.0_1 | Baseline Armv8.0 |
armv8.2_1 | Dot product |
armv8.2_2 | Dot product, FP16 vector arithmetic |
armv8.2_3 | Dot product, FP16 vector arithmetic, SVE |
armv8.6_1 | Dot product, FP16 vector arithmetic, SVE, int8 matrix multiply |
armv8.6_2 | Dot product, FP16 vector arithmetic, SVE, int8 matrix multiply, SVE2 |
armv9.2_1 | Dot product, FP16 vector arithmetic, SVE, int8 matrix multiply, SME |
armv9.2_2 | Dot product, FP16 vector arithmetic, SVE, int8 matrix multiply, SVE2, SME |
Note:
MODELmust point to a supported single-file.ggufmodel artifact. Use a Hugging Face repo ID to auto-select a CPU-friendly quantization (preferring Q4_K_M), a Hugging Face repo plus quantization suffix as<repo>:<quantization>, or a direct.ggufURL. Sharded GGUFs and multimodal projector files (mmproj) are rejected with a clear error because this project only supports single-file text model GGUFs today. Not all model repos include GGUF quantizations — look for repos with-GGUFin the name. The selected model is downloaded when the service starts and cached inside the container.
| Parameter | Description | Default |
|---|---|---|
MODEL | Hugging Face GGUF repo, <repo>:<quantization>, or direct .gguf URL | unsloth/SmolLM2-135M-Instruct-GGUF |
MODEL_ENDPOINT | Hugging Face API-compatible endpoint for repository model downloads | https://huggingface.co |
The easiest way to deploy is using topo. Download and install topo from here
topo clone https://github.com/Arm-Examples/topo-llama-web-ui.git
cd topo-lama-web-ui
topo deploy --target <ip-address-of-target>
Use a different model:
topo deploy --target <ip-address-of-target> \
--arg MODEL=bartowski/Qwen_Qwen3.5-0.8B-GGUF
Select an exact quantization:
topo deploy --target <ip-address-of-target> \
--arg MODEL=unsloth/SmolLM2-135M-Instruct-GGUF:Q4_K_M
Open your browser to http://<ip-address-of-target>:8080 to start chatting!