{"slug": "welvet-a-go-ai-engine-that-trains-and-runs-on-your-hardware-from-raspberry-pi-to", "title": "Welvet: a Go AI engine that trains and runs on your hardware, from Raspberry Pi to CUDA, Metal, Vulkan, ROCm, MLX, and Qualcomm NPU", "summary": "A developer released Welvet v1.7, an open-source Go AI/ML engine that trains and runs neural networks locally across CPU, WebGPU, CUDA, ROCm, Metal, MLX, Vulkan, and Qualcomm Hexagon NPU backends. The engine ships 34 storage dtypes, 20 quantization formats, and 29 named training modes, with unsupported hosts soft-skipping rather than silently falling back, and the author reports Metal Mamba forward passes running 2.4x to 9.1x faster than Go CPU across dtypes.", "body_md": "*Round 1 demos on Linux, Windows, macOS, iOS, and Android. These are working paths on real hardware, not a claim that anything is fastest or best.*\n\nI built [Welvet](https://openfluke.com/welvet) because I wanted a Go engine that can actually train and run neural nets on my own machines, not just ship tensors off to somewhere else.\n\nSource is at [github.com/openfluke/welvet](https://github.com/openfluke/welvet). There's a product page at [openfluke.com/welvet](https://openfluke.com/welvet) and a feature book at [openfluke.github.io/welvet](https://openfluke.github.io/welvet/).\n\nThis is a walkthrough of **v1.7**: backends, training modes, storage, and some of the messier runs (Macs, cheap VMs, ~1GB Raspberry Pi 3Bs).\n\nRoughly four jobs:\n\nDefaults are portable Go: **CPU tiling**, **Plan 9 SIMD**, and **WebGPU**. Extra accelerators are opt-in mounts. No silent \"Prefer\" path that pretends GPU/NPU work happened when it didn't.\n\n| Area | What you get | \n|---|---|\n| Language | Open-source Go AI / ML engine | \n| Core | Train + local inference | \n| Numbers | 34 storage dtypes, 20 quant formats, storage-truth (no QAT morph) | \n| Training | 29 named training modes, including cameral / multi-branch | \n| Defaults | Go CPU tiled, Plan 9 SIMD, WebGPU | \n| Optional CPU | NativeCPU via `welvet.cpp` C ABI | \n| NVIDIA | CUDA sessions (train + `SyncToGo` ) | \n| AMD | ROCm sessions (library validated; GPU compute needs HSA) | \n| Apple | Metal train/run, MLX forward-only | \n| Vulkan | Linux x86_64 train + `SyncToGo` | \n| Qualcomm | Hexagon HTP on Windows ARM64 (Snapdragon X) | \n| Other | Layer packages, spatial grids, MoE / cameral parallelism | \n| Platforms | Linux, Windows, macOS (app also targets iOS and Android) | \n| Docs | Book chapters, examples, `w2a` validation | \n\nParagon and Loom were earlier engines in the same project line. Welvet is the rewrite. They're history, not competing products.\n\nUnsupported hosts soft-SKIP. Caps reject unsupported layer×dtype instead of lying.\n\n`BackendCPUTiled`): full layer set, 34 dtypes, 20 quants, train modes` BackendSIMD`): Dense + Softmax/SiLU fused paths on amd64/arm64` BackendWebGPU`): Dense/MHA/CNN/norms and friends on compatible GPUs\n`BackendNativeCPU` + `SyncToNative` can push FormatNone forward, NormalBP, and TrainMode updates through sibling **[welvet.cpp](https://github.com/openfluke/welvet.cpp)** on linux/amd64. Sync pending weights before writing `.entity`.\n\n| Backend | Sibling | Hosts | Forward | Train | Notes | \n|---|---|---|---|---|---|\n| Apple Metal | `welvet.metal` /`nativemetal.Mount` | Apple silicon macOS | Yes | Yes | Explicit `SyncToGo` . Not Apple Neural Engine. Book §82–88 | \n| Apple MLX | `welvet.mlx` /`nativemlx` | Apple silicon macOS | Yes | No | Forward-only. Book §110–113 | \n| NVIDIA CUDA | `welvet.cuda` /`nativecuda.Mount` | Linux x86_64, Windows amd64 | Yes | Yes | Two weight copies until `SyncToGo()` . Book §89–95 | \n| AMD ROCm | `welvet.rocm` /`nativerocm.Mount` | Linux x86_64, Windows amd64 | Yes (API) | Yes (API) | Library validated; GPU compute untested until HSA. Book §96–102 | \n| Vulkan | `welvet.vulkan` /`nativevulkan.Mount` | Linux x86_64 | Yes | Yes | No silent host fallback labeled as Vulkan. Book §103–109 | \n| Qualcomm Hexagon HTP | `welvet.qnn` /`BackendQNN` | Windows ARM64 (Snapdragon X) | Yes | n/a | Explicit sync/prepare. Never Prefer default. Book §79–81 | \n\nMixed Go/C++/GPU JSON routing exists on the mount backends. Automatic routing is Linux amd64 today. You own sync and placement.\n\n*Dtypes and quants stay real in storage. Not a QAT morph that quietly becomes float32 underneath.*\n\nSame shapes, honest timers from the book / matrices. Not \"peak marketing\" numbers.\n\n**Metal, Mamba forwards** (book §88):\n\n| dtype | Go | Metal | Metal/Go | \n|---|---|---|---|\n| float64 | 89.3ms | 29.0ms | 3.1× | \n| float32 | 69.0ms | 29.0ms | 2.4× | \n| float16 | 190.5ms | 28.9ms | 6.6× | \n| bfloat16 | 149.4ms | 29.0ms | 5.1× | \n| fp8e4m3 | 265.9ms | 29.2ms | 9.1× | \n\n**Qualcomm NPU, large shapes** (`go_v_qnn` on Snapdragon X; DLL `graphExecute` vs Go f32 CPU):\n\n| Layer | dtype | Go f32 | NPU DLL | vs Go | \n|---|---|---|---|---|\n| Dense | u8 | 3.05ms | 164µs | ~95% faster | \n| Dense | f32 | 3.05ms | 201µs | ~93% faster | \n| CNN2 | i8 | 12.56ms | 763µs | ~94% faster | \n| MHA | f16 | 4.51ms | 372µs | ~92% faster | \n\nOnline layers still pay compose cost on the full Go→NPU call. The book calls that out on purpose.\n\nTraining lives in the Go runtime (forward, backward, step, TrainMode). You're not exporting to another framework to learn.\n\nNot just SGD/backprop. See [§67 TrainMode](https://openfluke.github.io/welvet/chapters/67-train-modes.html).\n\nModes include StepBP, Tween*, TweenSplit, HeadProxy, Linear, FastProxy, Sparse, Alt, cameral BranchModes, and more. On the big Tide boards, non-SGD modes beat matched SGD on Acc about 97–98% of the time. SGD still wins some individual boards. It's a baseline, not the religion.\n\nCameral stacks sibling branches that share an input, merge, and can train under different rules. CamSync averages cam weights (and same-shape cross-layer pairs). Useful when you want learn / keep / share jobs running together under load.\n\nLucy scores whether a net can keep serving while it learns:\n\n**Lucy Score ≈ Throughput × Availability × Acc** (scaled)\n\nThat's what drove the Tide/Ocean runs: cameral×LR sweeps, Test53 mode farms, volatile cloud soaks, Pi 1GB layer farms.\n\n| Path | Train? | \n|---|---|\n| Go CPU / SIMD / WebGPU | Yes | \n| NativeCPU ( `welvet.cpp` ) | Yes | \n| Metal | Yes ( `TrainMSE` , then`SyncToGo` ) | \n| CUDA | Yes (train on GPU, `SyncToGo` before save) | \n| Vulkan | Yes | \n| ROCm | API yes; GPU compute pending HSA | \n| MLX | No (forward-only) | \n| QNN | Forward / prepare-exec; see book caps | \n\nMost transformer/CNN FLOPs are weights × activations, so Welvet keeps one Dense stack as the shared MatVec kernel (FormatNone×34 + 20 quants × CPU/SIMD/WebGPU). Layers that are mostly GEMV reuse it.\n\nLayers include Dense, MHA (RoPE / GQA), SwiGLU, RMSNorm, LayerNorm, Embedding, Softmax, Sequential, Residual, CNN1–3, RNN/LSTM, SeqMix, GDN, Mamba, ConvT 1–3, Soft K-Means, Parallel, Metacognition.\n\nAlso: volumetric grids, ENTITY save/reload, HF helpers, tokenizer/sampling, DNA/evolution/tween, telemetry.\n\nCatalogue: [openfluke.com/welvet/experiments](https://openfluke.com/welvet/experiments)\n\nFour experiment waves (cameral LR, Test53 modes, volatile Linode soak, Pi 3B ~1GB farm) finished **90,334** Tide model cells.\n\n`tween_chain` with >100k outputs/sec. CNN1 hit ~94% hard Acc on a Lucy champ. Mode-vs-SGD Acc beat-rates ~97–98%\nI'm not claiming SOTA. The point is live-fit on honest storage, from Macs to $5 VMs to 1GB Pis, with artefacts you can open.\n\nThe library is the Go engine. The **Welvet app** (0.1.0+1) is a different thing: run and serve models on Linux, Windows, macOS, iOS, and Android.\n\nNot language-only. Detection, tracking, classification, depth, segmentation, pose, audio, etc. are in the mix.\n\nEngine code stays in `welvet/`. Proof and wrappers live elsewhere, mainly **[w2a](https://github.com/openfluke/w2a)** (Go↔native parity for cpp/cuda/metal/vulkan/rocm/mlx/qnn), plus C ABI, Python ctypes, and TypeScript/WASM.\n\nSibling engines: `welvet.cpp`, `welvet.cuda`, `welvet.metal`, `welvet.vulkan`, `welvet.rocm`, `welvet.mlx`, `welvet.qnn`.\n\nHard rules: no silent fallbacks, no hardcoded float32 tensors, storage-truth train, fail closed if a sibling binary is missing.\n\n| Resource | Link | \n|---|---|\n| Product page | [openfluke.com/welvet](https://openfluke.com/welvet) | \n| Feature book | [openfluke.github.io/welvet](https://openfluke.github.io/welvet/) | \n| Book on site | [openfluke.com/book](https://openfluke.com/book) | \n| Examples | [openfluke.com/examples](https://openfluke.com/examples) | \n| Experiments | [openfluke.com/welvet/experiments](https://openfluke.com/welvet/experiments) | \n| Source | [github.com/openfluke/welvet](https://github.com/openfluke/welvet) | \n| Architecture dashboard | [files.openfluke.com/.../dashboard](https://files.openfluke.com/1_7/welvet_1_7_technical_architecture_dashboard.html) | \n| Research PDF | [Welvet 1.7 Technical Research](https://files.openfluke.com/1_7/Welvet%201.7_Technical_Research.pdf) | \n| Feature book PDF | [v1.7.0 PDF](https://files.openfluke.com/1_7/welvet-feature-book-v1.7.0.pdf) | \n| Slides | [PDF](https://files.openfluke.com/1_7/Welvet_1.7_Architecture.pdf) /[PPTX](https://files.openfluke.com/1_7/Welvet_1.7_Architecture.pptx) | \n| Home | [openfluke.com](https://openfluke.com) | \n\nIf you write Go and want train+infer in-process, or you care about dtype honesty and learn-while-serve on edge boxes, give it a look.\n\nI'm [Samuel Watson](https://openfluke.com/about) / [OpenFluke](https://openfluke.com), Australia. Forks and harsh readings of the scorecard are welcome. The docs try to keep implemented features, recorded measurements, and stubs clearly separated.", "url": "https://wpnews.pro/news/welvet-a-go-ai-engine-that-trains-and-runs-on-your-hardware-from-raspberry-pi-to", "canonical_source": "https://dev.to/openfluke/welvet-a-go-ai-engine-that-trains-and-runs-on-your-hardware-from-raspberry-pi-to-cuda-metal-2jom", "published_at": "2026-11-12 23:06:53+00:00", "updated_at": "2026-11-12 23:19:39.386505+00:00", "lang": "en", "topics": ["machine-learning", "ai-infrastructure", "ai-tools", "developer-tools", "neural-networks"], "entities": ["Welvet", "OpenFluke", "Go", "CUDA", "ROCm", "Metal", "MLX", "Qualcomm Hexagon"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/welvet-a-go-ai-engine-that-trains-and-runs-on-your-hardware-from-raspberry-pi-to", "markdown": "https://wpnews.pro/news/welvet-a-go-ai-engine-that-trains-and-runs-on-your-hardware-from-raspberry-pi-to.md", "text": "https://wpnews.pro/news/welvet-a-go-ai-engine-that-trains-and-runs-on-your-hardware-from-raspberry-pi-to.txt", "jsonld": "https://wpnews.pro/news/welvet-a-go-ai-engine-that-trains-and-runs-on-your-hardware-from-raspberry-pi-to.jsonld"}}