需先装最新 AMD NPU 驱动 32.0.203.311 或以上,旧版本不再支持;首次运行需联网从 HuggingFace 下载模型内核,下载损坏可用 flm pull <model_tag> --force 重下;本地服务默认占用 52625 端口。

FastFlowLM
ROCm活跃维护专为 AMD Ryzen AI NPU 深度优化的本地大模型推理引擎,几分钟内就能在 AMD NPU 上跑起 LLM,省去繁琐配置。
Run LLMs on AMD Ryzen™ AI NPUs in minutes; purpose-built and deeply optimized for the AMD NPUs.
flm run llama3.2:1b需要带 XDNA2 NPU 的 AMD Ryzen AI 芯片(Strix、Strix Halo、Kraken、Gorgon Point),无需 GPU;README 未说明显存要求。
在 AMD Ryzen AI NPU 上几分钟内跑起大模型的轻量运行时,无需 GPU
专为 AMD Ryzen AI NPU 深度优化的本地大模型推理引擎,几分钟内就能在 AMD NPU 上跑起 LLM,省去繁琐配置。
核心能力
- 完全跑在 Ryzen AI NPU 上,不占 GPU 与 CPU
- 运行时仅 17 MB,安装约 20 秒
- 单命令 CLI,另有 REST 与 OpenAI 兼容 API
- 支持最长 256k token 上下文窗口
- 支持 LLM、视觉、音频、Embedding 与 MoE 模型
容易踩的坑
- v1.0.12🚀 FastFlowLM v1.0.12 — Speculative Decoding, MiniCPM-V MoE & Less RAM最新正式版2026-11-05 · 2026-11-05 01:48 UTC
This release does four things:
- New models. MiniCPM-V 4.7 35B-A3B, two more Decision 3.0 sizes (
d3:edge,d3:flash), andqwen3.5-flash:2b. - Faster decoding. New DFlash speculative-decoding tags for Nemotron 3.5 Bolt (up to 1.9× faster) and Qwen3.8-27B.
qwen3.8-mtp:27bitself decodes 1.6× faster. The Whisper encoder is about 3× faster. - Less host memory. Gemma 4, Nemotron 3.5 Bolt and Qwen3.5 (0.8B/2B/4B) read their embedding tables from disk instead of copying them into RAM. That saves up to 3.7 GiB per model.
- Many server fixes. These include a server that stopped accepting connections after clients hung up, Qwen3.5 answering
//////after hitting the context limit, wrong vectors fromembed-gemma, and Gemma 4 tool-call parsing.
🆕 New Models
🖼️ MiniCPM-V 4.7 35B-A3B:
minicpm-v-4.7-moe:35b-a3bopenbmb/MiniCPM-V-4.7-35B-A3B is a Mixture-of-Experts vision model: 35B parameters, about 3B active per token.
- Takes text and images.
- Thinking can be turned on. It is off by default, as the model card recommends.
- Supports tool calling and the prefix cache, pictures included.
- Context: up to 256k tokens (32k by default).
- Needs about 22 GB of memory.
flm run minicpm-v-4.7-moe:35b-a3b
⚡ DFlash Speculative Decoding:
nemotron3.5-bolt-dflash:e4b,qwen3.8-dflash2:27bA DFlash draft model proposes up to 7 tokens at a time, and the NPU checks all of them in one pass. The output follows the main model's own distribution.
Tag Main model Decode speed nemotron3.5-bolt-dflash:e4bnemotron3.5-bolt:e4b+ NVIDIA's DFlash draft1.3×–1.9× the base model, from short prompts to 16k tokens of context qwen3.8-dflash2:27bqwen3.8-mtp:27b+ z-lab's DFlash 2 draft1.16× the MTP head on average (0.9×–1.5× per prompt). Code and structured answers gain most. - Two-package tags. A DFlash tag downloads only its small draft (0.27 GB for Bolt, 1.4 GB for Qwen3.8) and reuses the main model's package.
flm pulldownloads whichever is missing.flm rmremoves only the draft, and warns when another tag still needs a base model. - Everything else works as on the main model: thinking, tool calls, vision, audio (Bolt) and the prefix cache.
- With a long context,
qwen3.8-dflash2:27bis about level withqwen3.8-mtp:27b. - Set
FLM_DFLASH=0to turn speculation off and compare against the main model.
flm run nemotron3.5-bolt-dflash:e4b flm run qwen3.8-dflash2:27b📖 Nemotron Bolt DFlash · Qwen3.8 benchmarks
⚡ New Flash Models:
qwen3.5-flash:2b,nemotron3.5-bolt-dflash-flash:e4bFlash models are built for single-turn requests: a fixed 1k context, a clean state for every request, and a system prompt that is saved once and reused. That makes the first token come back faster.
qwen3.5-flash:2bruns the same weights asqwen3.5:2b, so there's nothing new to download. Time to first token is 0.49 s instead of 0.81 s at 1k tokens. Decode is 33 tok/s instead of 29. Large pictures need-r 1.nemotron3.5-bolt-dflash-flash:e4bcombines Flash serving with DFlash speculation. It uses the two packages above, so there's no new download. Time to first token is 0.32 s at 64 tokens, and decode is 33–40 tok/s on code.
Flash models don't support tool calling or
continue_final_message.📖 Flash Models · Flash benchmarks
🧭 Decision 3.0:
d3:edgeandd3:flashTwo more sizes of the d3 decision model, served with
flm serve --decision <tag>on/v1/systemone. They take text and images, liked3:lite, - New models. MiniCPM-V 4.7 35B-A3B, two more Decision 3.0 sizes (
- v1.0.11🚀 FastFlowLM v1.0.11 — Decision Models, a Prefix Cache for Every Chat Model & Logprobs2026-10-29 · 2026-10-29 01:20 UTC
查看更新说明
This release does four things:
- New models. The Decision 3.0 (d3) family from vLLM Semantic Router: five decision models from 0.8B to 27B, served through a new
/v1/systemoneendpoint. Also LFM3-1.7B and Nemotron 3.5 Bolt E4B. - The prefix cache now covers almost every chat model.
flm servekeeps several saved prompts at once, so agents that share a system prompt and tools, or switch between conversations, don't re-read the whole prompt on every request. - More OpenAI API fields:
logprobs/top_logprobs,seed,continue_final_messageandrepeat_last_n. max_tokensis exact. A reply used to be one token longer thanmax_tokensasked for.
It also fixes a
gemma4-it:12bcrash on repeated image or audio requests.
🆕 New Models
🧭 Decision 3.0 (d3):
d3:lite,d3:nano,d3:mini,d3:turbo,d3:ultrad3 is the decision model that vLLM Semantic Router calls for routing, guardrails and tool selection. It doesn't generate text. You send it a
state(any JSON) and one or more questions, and it returns a probability for every option:choice: pick one of up to 255 optionsnoul: no / yesscore: 2 to 10 ordered levels
FLM serves the same HTTP API as the upstream d3 server, so vLLM Semantic Router can use FLM as its d3 backend without changes.
A decision model runs in server mode, on its own or next to a chat model:
flm serve --decision d3:lite # decision model only flm serve qwen3.5:4b --decision d3:lite # next to a chat modelTag Backbone Download Inputs One short question* d3:liteQwen3.5-0.8B 0.8 GB text, images ~0.16 s d3:nanoQwen3.5-2B 2.0 GB text, images ~0.26 s d3:miniQwen3.5-4B 3.4 GB text, images ~0.56 s d3:turboQwen3.5-27B 16.6 GB text, images, videos, box/track/assets~3 s d3:ultraQwen3.5-27B (newer fine-tune) 16.6 GB same as d3:turbo~3 s * About 330 tokens, over HTTP, on an idle machine.
- Endpoints.
POST /v1/systemone(alias/v1/decisions) answers decision requests.GET /v1/systemone/modelslists the decision models this build can serve.
- Input limit: 32,768 tokens per question. A longer prompt gets
max_length_exceededfor that question. Nothing is truncated. - Accuracy. On the Decision Index public suite, every model stays close to the upstream BF16 model. Each model's numbers are on the benchmark page.
d3:turboandd3:ultra:- The state is computed once per request. Every question then reads it, so many questions about one state cost little more than one. That is 2.5× faster at 16 questions and up to 32× with a 4k-token state.
boxandtrackquestions locate objects in images and follow them through videos.assetsput images in questions, options and instructions.- Videos need the FFmpeg shared libraries (FFmpeg 6, 7 or 8) on the machine. FLM doesn't ship FFmpeg. It loads it the first time a video arrives. Without it, encoded videos get a clear 422, and frame lists (
{"frames": [...]}) still work. See the d3 page for install steps. - Memory. Plan for about 28 GB of free memory.
long_context: trueis refused with a 422.
💧 LFM3-1.7B:
lfm3:1.7bLiquidAI LFM3-1.7B runs fully on the NPU, prefill, all 24 layers and the LM head included.
- Thinking is on by default. You can turn it off.
- Supports tool calling.
- Context: up to 32k tokens.
- Uses LiquidAI's Q4_0 quantization-aware b
- New models. The Decision 3.0 (d3) family from vLLM Semantic Router: five decision models from 0.8B to 27B, served through a new
- v1.0.10🚀 FastFlowLM v1.0.10 — Constrained Decoding & More Accurate Whisper2026-10-22 · 2026-10-22 22:59 UTC
查看更新说明
This release does three things:
- Reasoning, tool calls and structured output are handled one way for every model on
/v1/chat/completions. tool_choiceandresponse_formatare enforced while the model generates, not just requested.- Whisper transcription is more accurate, and
/v1/audio/transcriptionsnow supportslanguage,promptandresponse_format.
It also fixes several
flm servebugs, including Lemonade failing to launch FLM on Linux.
✨ New Features
🧩 OpenAI API: Shared Chat Parsing and Constrained Decoding
Every model writes its answer in its own markup. Qwen3 uses
<think>and<tool_call>, Gemma 4 uses a thought channel andcall:f{…}, GPT-OSS uses Harmony channels, and LFM2 writes Python calls. Until now each model had its own parser for this. In v1.0.10, one shared parser handles all of them, so/v1/chat/completionsreturns the same OpenAI-shaped message whatever the model:reasoning_content,contentandtool_callsare split the same way for every model, streamed or not.- The streamed deltas add up to exactly the non-streamed reply.
- Tool-call markup counts as a call only when the request includes
tools. A reply that is only tool calls hascontent: null, as in the OpenAI API.
Constrained decoding. Before each token is sampled, FLM works out which tokens can still lead to valid output and rules out the rest. This uses xgrammar. The model can't misspell a tool name, give an argument the wrong type, leave out a required field, or wrap your JSON in a Markdown fence. You control it with the standard OpenAI request fields:
Field What FLM enforces tool_choice: "none"No tool call tool_choice: "auto"Any tool call is well-formed and names a real tool tool_choice: "required"At least one tool call tool_choice: {"type": "function", ...}A call to that function parallel_tool_callsOne call or several response_format: {"type": "json_object"}Valid JSON response_format: {"type": "json_schema", ...}JSON that matches your schema Bad values return a clear 400 error instead of being ignored. This covers a malformed
tool_choice, an unknown function name,"required"with no tools, and a schema that can't be compiled. Small models that don't see tools in their prompt (Qwen3 up to 1.7B, Qwen3.5 0.8B) also return a 400 for a forced tool call, instead of making up a call to a tool they never saw.When the model's thinking is off, it can no longer slip its answer into a reasoning block. It answers directly in the requested format.
Coming later: a
grammarrequest field, so you can pass your own grammar for output that isn't JSON (for example, digits only or a fixed set of labels). The constrained-decoding engine in this release already supports this. Only the API field is still to come.Other API changes:
- Streaming usage now follows OpenAI. A streamed response carries
usageonly when the request setsstream_options: {"include_usage": true}. In that case the usage comes in one final chunk before[DONE]. ⚠️ If your client readusagefrom streamed responses, addinclude_usage. nullrequest fields are treated as unset. Some OpenAI clients sendnullfor every option they leave out. Before, this could return a 400 or 500 error, for example forparallel_tool_calls: nullortool_choice: null.
New docs:
🎙️ Audio Transcription:
/v1/audio/transcriptionsPR #794, by community contributor [@quine00](https://github.com
- Reasoning, tool calls and structured output are handled one way for every model on
- v1.0.9🚀 FastFlowLM v1.0.9 — `flm validate` Fix2026-10-15 · 2026-10-15 21:35 UTC
查看更新说明
This is a maintenance release. It fixes
flm validateon Linux, which wrongly reported "No NPU device found." in v1.0.8.
🐛 Bug Fixes
✅
flm validateFinds the NPU Again on LinuxIn v1.0.8,
flm validateon Linux printed "No NPU device found." and exited with status 1, even on systems where the NPU worked fine andflm runandflm servehad no problems.The cause: since v1.0.8,
flmopens the NPU device at startup, before it runs any command.flm validatethen tried to open the same/dev/accel/accel*device a second time to check it. The amdxdna driver allows only one open of a device per process, so the second open failed withEBUSY. The check skipped busy devices without saying anything, so it found no device at all.What changed:
flm validatenow runs beforeflmopens the NPU, so its check gets the device.- If a device node is busy,
flm validatenow reports it (device busy) instead of skipping it silently. The--jsonoutput marks it with"busy": true.
If you run
flm validatein a setup script or CI job, upgrade to get the right result back.
📦 MSI Installer: Uninstall v1.0.8 First
The v1.0.8 MSI (
flm-setup.msi) was published with the wrong version number. Windows registered it as version 8 instead of 1.0.8, so it shows up as "8" in Installed apps. Because 8 is higher than 1.0.9, the v1.0.9 MSI treats v1.0.8 as a newer install and stops with "A newer version of flm is already installed."If you installed v1.0.8 with the MSI, uninstall FLM from Settings → Apps → Installed apps first, then run the v1.0.9 MSI. Your downloaded models are kept. The v1.0.9 MSI has the right version number, so later upgrades will work normally again.
This only affects the MSI. The portable
.zippackages and the Linux packages are not affected.
🌟 Summary
Highlight ✅ flm validateon Linux finds the NPU again, instead of reporting "No NPU device found." (broken in v1.0.8)📦 If you installed v1.0.8 with the MSI, uninstall it before running the v1.0.9 MSI Thanks for your support — see you in the next one! 🚀
- v1.0.8Release v1.0.82026-10-12 · 2026-10-12 17:36 UTC
查看更新说明
This release adds
minicpm-v-4.7:1b, a 1B vision-language model with toggleable thinking and tool calling. It also opens up the source of the Gemma 4 engine, so you can build it yourself and swap individual operators through new override hooks. And for the first time, the release ships HRX packages as a preview: builds of FastFlowLM that run on the HRX NPU runtime instead of XRT.
📦 New Model Support
👁️ MiniCPM-V-4.7-1B
FastFlowLM now supports
minicpm-v-4.7:1b, a compact image-text-to-text model from OpenBMB, with toggleable thinking and tool calling.- Tag:
minicpm-v-4.7:1b - Context: 32k by default, up to 256k
Run in CLI mode:
flm run minicpm-v-4.7:1bRun in server mode:
flm serve minicpm-v-4.7:1b🖼️ How It Sees Images
MiniCPM-V-4.7 handles images the same way the original MiniCPM-V does:
- The model always sees a downscaled view of the whole image. Large images are also split into up to 9 tiles of about 448 × 448 pixels each.
- Image TTFT stops growing at about 1080p. From that size up, every image uses the maximum 9 tiles, so a 4K image costs about the same as a 1080p one. Very fine detail in large images is downscaled.
--img-pre-resize(-r) has no effect on this model, because the tiling already decides the input resolution.- Video and audio input are not supported.
🎛️ MiniCPM-V does not ship its own sampling defaults. FLM starts from temperature 0.7, top_p 0.8, top_k 20 and presence penalty 1.5. These are the Qwen3.5 non-thinking defaults, because MiniCPM-V-4.7-1B's language model has the same architecture as Qwen3.5-0.8B.
For more details, see the model card and benchmark results.
🔓 The Gemma 4 Engine Is Now Open Source
Until now, every model engine in FastFlowLM shipped only as a prebuilt library. In this release the source of the Gemma 4 E2B/E4B engine is public. It covers the text decode and prefill paths, the vision encoder and the audio encoder, plus the shared host code they depend on. You can now read exactly how each Gemma 4 operator is dispatched to the NPU, and build the engine yourself. The other engines, including the Gemma 4 flash and 12B variants, still ship prebuilt.
🛠️ Build It from Source
Source builds are opt-in. By default, FLM still links the prebuilt engine, so nothing changes unless you ask for it.
Linux:
cd src cmake --preset linux-default -DFLM_BUILD_GEMMA4E=ON cmake --build buildWindows (developer command prompt):
cd src cmake --preset windows-default -DFLM_BUILD_GEMMA4E=ON cmake --build buildThe source-built library goes into the build tree and does not overwrite the prebuilt one. CMake caches the option, so to switch back, reconfigure with
-DFLM_BUILD_GEMMA4E=OFFor use a fresh build directory.Option Default Effect FLM_BUILD_GEMMA4EOFFBuild the Gemma 4 engine from src/detail/instead of using the prebuilt oneFLM_ENGINE_NATIVE_ARCHOFFAdd -march=native. The result only runs on CPUs like the build machine, so do not redistribute itFLM_ENGINE_VERBOSE0Logging level for the source-built engine FLM_ENGINE_DEBUG_LEVEL0Debug level for the source-built engine FLM_OVERRIDE_FLAGSempty Extra compile flags for operator overrides (see below) Source builds work on Linux, Windows and the HRX backend. CI now builds and sweep-tests a source-built Gemma 4 package on both Linux and Windows.
🧩 Operator Override Hooks for IRON
Every Gemma 4 operator dispatch (52 sites across text, vision, audio and weight preload) is now wrapped in an
FLM_OVERRIDEannotation. In a normal build the annotation expan - Tag:
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
⚡ FastFlowLM (FLM) — Unlock Ryzen™ AI NPUs
Run large language models — now with Vision, Audio, Embedding and MoE support — on AMD Ryzen™ AI NPUs in minutes.
No GPU required. Faster and over 10× more power-efficient. Supports context lengths up to 256k tokens. Ultra-Lightweight (17 MB). Installs within 20 seconds.
📦 The only out-of-box, NPU-first runtime built exclusively for Ryzen™ AI.
🤝 A familiar single-command CLI — deeply optimized for NPUs.
✨ From Idle Silicon to Instant Power — FastFlowLM Makes Ryzen™ AI Shine.
FastFlowLM (FLM) supports all Ryzen™ AI Series chips with XDNA2 NPUs (Strix, Strix Halo, Kraken, and Gorgon Point).
🔗 Quick Links
🔽 Download | 📊 Benchmarks | 📦 Model List
🚀 Quick Start
A packaged FLM Windows installer is available here: flm-setup.msi. For more details, see the release notes.
📺 Watch the quick start video (Windows)
[!IMPORTANT]
⚠️ Use the latest AMD NPU driver — 32.0.203.311 or above (check via Task Manager→Performance→NPU or Device Manager). Earlier versions are no longer supported.
⚙️ Tip:
- RECOMMENDED: Try running Windows Update or Driver Download.
- Official AMD Install Doc (AMD account required).
- Unofficial forum downloads (CAUTION: third-party content not verified by AMD; download and use at your own risk).
After installation, open PowerShell (Win + X → I). To run a model in terminal (CLI Mode):
flm run llama3.2:1b
Notes:
- Internet access to HuggingFace is required to download the optimized model kernels.
- Sometimes downloads from HuggingFace may get corrupted. If this happens, run
flm pull <model_tag> --force(e.g.flm pull llama3.2:1b --force) to re-download and fix them.- By default, models are stored in:
- Windows:
C:\Users\<USER>\.flm\models\- Linux:
~/.config/flm/- During installation on Windows, you can select a different base folder (e.g., if you choose
C:\Users\<USER>\flm, models will be saved underC:\Users\<USER>\flm\models\).- On Linux, you can override the default location by setting the
FLM_MODEL_PATHenvironment variable.- To disable the startup version check, set
FLM_DISABLE_UPDATE_CHECK=1.- ⚠️ If HuggingFace is not accessible in your region, manually download the model (check this issue) and place it in the chosen directory.
🎉🚀 FastFlowLM (FLM) is ready — your NPU is unlocked and you can start chatting with models right away!
Open Task Manager (Ctrl + Shift + Esc). Go to the Performance tab → click NPU to monitor usage.
⚡ Quick Tips:
- Use
/verboseduring a session to turn on performance reporting (toggle off with/verboseagain).- Type
/byeto exit a conversation.- Run
flm listin PowerShell to show all available models.
To start the local server (Server Mode):
flm serve llama3.2:1b
The model tag (e.g.,
llama3.2:1b) sets the initial model, which is optional. If another model is requested, FastFlowLM will automatically switch to it. The local server runs on port 52625 (default).
📰 In the News
-
08/11/2026 🎉 FLM is now part of ROCm (v1.0.0) — the repo has moved to AMD's open-source ROCm organization.
-
08/11/2026 🎉 FLM releases its first SmolVLA model (v1.0.0) — a Vision-Language-Action robotics policy running on the NPU. See the model card and benchmarks.
-
07/17/2026 🎉 FLM is now part of AMD news. Read our story — from a 2025 university project to AMD.
-
03/11/2026 🎉 FLM now supports Linux 🐧 ! To get started, check out the quick start guide or the Lemonade Server docs, and watch the short video for a quick walkthrough of FLM on Linux via Lemonade 🍋.
-
10/01/2025 🎉 FLM was integrated into AMD's Lemonade Server 🍋. Watch this short demo about using FLM in Lemonade.
🧠 Local AI on NPU
FLM makes it easy to run cutting-edge LLMs (and now VLMs) locally with:
- ⚡ Fast and low power
- 🧰 Simple CLI and API (REST and OpenAI API)
- 🔐 Fully private and offline
No model rewrites, no tuning — it just works.
✅ Highlights
- Runs fully on AMD Ryzen™ AI NPU — no GPU or CPU load
- Lightweight runtime (17 MB) — installs within 20 seconds, easy to integrate
- Developer-first flow — a familiar single-command CLI, optimized for NPU
- Support for long context windows — up to 256k tokens (e.g., Qwen3-4B-Thinking-2507)
- No low-level tuning required — You focus on your app, we handle the rest
📄 License
- All orchestration code and CLI tools are open-source under the MIT License.
- The NPU-accelerated binary kernels are not open source, but are completely free for any use, including non-commercial and commercial use, and may be freely redistributed in unmodified form under the FastFlowLM NPU Binary License.
- Please acknowledge FastFlowLM in your README/project page (or product) as follows:
Powered by [FastFlowLM](https://github.com/ROCm/FastFlowLM)
💬 Have feedback/issues or want early access to our new releases? Open an issue or Join our Discord community
🙏 Acknowledgements
- Powered by the advanced AMD Ryzen™ AI NPU architecture
- Inspired by the widely adopted llama.cpp and Ollama
- Tokenization accelerated with MLC-ai/tokenizers-cpp
- Chat formatting via Google/minja
- Constrained decoding (tool calls, structured output) powered by MLC-ai/xgrammar
- Low-level kernels optimized using the powerful IRON+AIE-MLIR
🛠️ Building from Source
For developers who want to build FastFlowLM from source, we provide CMake presets for a convenient and consistent build experience.
Prerequisites
- Git
- CMake (version 3.22 or higher)
- A C++20 compatible compiler (e.g., GCC, Clang, MSVC)
- Ninja (recommended)
Build Instructions
More details on the exact procedure, with dependencies to be installed, for Linux can be found in linux-getting-started.md.
-
Clone the repository:
git clone --recursive https://github.com/ROCm/FastFlowLM.git cd FastFlowLM/src -
Configure CMake using presets:
-
For Linux:
cmake --preset linux-defaultThis will configure the build to install to
/opt/fastflowlm.To build the Gemma 4 engine from source instead of using the prebuilt engine:
cmake --preset linux-default -DFLM_BUILD_GEMMA4E=ON cmake --build buildCMake caches this option. To switch back to the prebuilt engine, reconfigure with
-DFLM_BUILD_GEMMA4E=OFFor use a fresh build directory. -
For Windows (in a developer command prompt):
cmake --preset windows-defaultAdd
-DFLM_BUILD_GEMMA4E=ONto build the Gemma 4 engine from source.
-
-
Build the project:
cmake --build build -
Install the project (optional):
-
For Linux:
sudo cmake --install build -
For Windows (with administrator privileges):
cmake --install build
-