Skip to content

本地运行大模型

约 2493 字大约 8 分钟

AI

2026-03-09

本地运行需要推理引擎,常见的各厂家推理引擎有:

  • MNN(Mobile Neural Network):阿里的轻量级深度学习推理引擎,主要针对移动端和边缘设备(手机,loT)
    • 支持多种框架(TensorFlow,PyTorch,ONNX)的模型转换
    • 广泛兼容CPU,GPU,NPU,适合低功耗设备
    • 使用结合量化和高效内存访问的模式,支持批量,但侧重单实例效率
    • 依赖少(C++核心),跨平台
    • 缺点不支持高并发高吞吐
  • llama.cpp:基于GGML(简洁的机器学习库)的c++推理引擎,适合本地运行而非大规模部署
    • GPU(cuda,metal,vulkan) CPU(avx2/simd优化) NPU。支持量化格式GGUF
    • 单用户本地运行 支持简单的api,不适合高并发
    • 轻量无python依赖,消费级硬件上高效,功耗低
    • 多用户场景扩展差
  • vLLM:专注高吞吐低延迟的批量推理
    • 主要NVIDIA GPU,扩展到Intel gpu,amd
    • 连续批处理 支持FP8/INT8
    • 依赖多,消耗高
维度MNNllama.cppvLLM
核心目标 / 主要焦点移动端/边缘设备,资源受限的端侧通用推理消费级硬件上的本地单用户/轻量LLM推理服务器端高并发、高吞吐量的生产级LLM服务
主要硬件手机/平板 CPU / GPU / NPU(ARM/Mobile强)电脑 CPU / Apple Silicon / 入门-中端独显(广兼容)NVIDIA 数据中心级GPU(A100/H100/H200等,最强)
语言/依赖C++ 核心,低依赖(支持Java/Obj-C/Python绑定)C++ 核心,低依赖(Python绑定可选)Python + PyTorch + CUDA,高依赖
量化支持优秀(4-bit+混合量化,端侧优化)极强(GGUF格式已成为行业事实标准,支持极致量化如Q4/Q3/IMatrix)好(AWQ/GPTQ/FP8/INT8),但不如GGUF生态普及
显存/内存效率(端侧内存布局优化)极高(可在16GB内存跑70B Q4模型,内存映射加载快)高(PagedAttention大幅减少碎片,但整体仍偏高)
吞吐量 (单用户,tokens/s)30–60(移动端典型,视芯片)50–150(消费级GPU/Apple Silicon,Q4下高)40–80(单用户提示处理更快,但生成侧不如极致优化)
吞吐量 (多用户/批处理,tokens/s)中等(不针对高并发优化)低–中等(扩展性差,32用户下远低于vLLM)极高(H100上可达12,000–16,000+,多用户下35x+于llama.cpp)
首Token延迟 (TTFT)低(小模型/端侧快)中等(取决于量化,单用户优秀)(连续批处理+预填优化,生产级最稳)
整体延迟低(端侧实时性好)中等(单用户可预测)低–极低(高负载下仍保持优秀TTFT)
功耗极低(移动设备级别,典型几W–几十W)低(消费级硬件700W以内典型)高(数据中心GPU 1200W+)
启动 / 加载时间快(内存映射+端侧优化)(GGUF内存映射极快)慢(模型加载+初始化长,尤其大模型)
部署难度中等(需集成SDK/编译)极低(单二进制或简单Python库)中等(Docker + Python环境 + GPU驱动)
易用性中等(更偏集成到App)高(CLI/llama-server/Ollama等生态)高(OpenAI兼容API,开箱即用)
模型生态通用模型(CV起家,LLM支持快速跟进,如Qwen系列)最丰富(GGUF社区模型最多,几乎所有主流LLM都有)丰富(HuggingFace原生,支持广泛)
典型用户/场景手机App/边缘AI(如淘宝/天猫端侧AI功能)个人开发者、本地知识库、原型、离线聊天云厂商、AI初创/企业API、高负载生产服务
社区/成熟度中等(阿里主导,端侧稳定)极高(GGML/llama.cpp生态最大、最活跃)高(企业+学术支持,生产级成熟)

其他的一些引擎:

  • SGLang: vLLM 的强竞争者,更快于多轮对话和代理工作流(16,200 tokens/s on H100)。适合工具调用和批处理,Python-based。优于 vLLM 在长上下文,但生态稍弱。
  • LMDeploy: 量化模型专家(支持 AWQ/EXL2),在低精度下极快(16,200 tokens/s)。适合资源有限的生产,易部署。比 vLLM 更省 VRAM。
  • TensorRT-LLM (NVIDIA): 针对 NVIDIA 硬件的最大吞吐(优于 vLLM 在规模化),但设置复杂。适合企业级,需 CUDA。
  • Ollama: 基于 llama.cpp 的用户友好包装,一键运行。适合新手/原型,添加模型管理和 GUI。
  • mlc-llm: 类似于 MNN,针对移动/边缘的编译优化(TVM-based)。更好于跨设备部署,支持 MoE 模型。
  • TGI (Text Generation Inference): Hugging Face 的 Rust-based 服务器,平衡 vLLM 的吞吐和 llama.cpp 的效率。支持 gRPC,适合混合负载。

**推荐:

  • 如果是移动/嵌入式: MNN 或 mlc-llm。
  • 单用户本地: llama.cpp 或 Ollama。
  • 高并发生产: vLLM、SGLang 或 LMDeploy(视量化需求)。 测试时,用你的硬件和模型基准(如 Llama 3.1)比较实际性能。

编译llama.cpp


apt install -y build-essential git cmake libopenblas-dev libgomp1

# `build-essential`: 包含 gcc、g++、make 等核心编译工具;
# `git`: 用于克隆 llama.cpp 源码;
# `cmake`: llama.cpp 新版默认用 CMake 构建;
# `libopenblas-dev`: 提供 BLAS 加速(提升矩阵运算性能);
# `libgomp1`: 支持 OpenMP 多线程加速(N100 有 4 核 8 线程,能充分利用)


git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp

#确认环境&生成编译脚本

	#-DBUILD_SHARED_LIBS=OFF #构建静态库还是动态库,是否生成动态库(.so文件) 只跑服务用off
	#DLLAMA_OPENCL=ON #使用核显 需要安装 apt install -y ocl-icd-opencl-dev
	#-DLLAMA_AVX2=ON: 开启 AVX2 指令集 提升计算性能
	#-DLLAMA_FMA=ON: 开启 FMA 融合乘加指令 优化浮点运算 
	#-DLLAMA_OPENBLAS=ON: 启用 OpenBLAS 加速矩阵运算
	#-DCMAKE_BUILD_TYPE=Release: 编译为发布版本(优化性能 无调试信息)
rm -rf ./build && cmake -B build -DBUILD_SHARED_LIBS=OFF -DGGML_AVX2=ON -DGGML_FMA=ON -DLLAMA_CUDA=OFF -DGGML_OPENCL=ON -DCMAKE_BUILD_TYPE=Release && cmake --build build -j$(nproc)







#开始执行编译
cmake --build build --config Release -j$(nproc) # $(nproc)编译线程数按需调整

关于开启opencl使用核显

#查看OpenCL库的位置 
ldconfig -p | grep OpenCL

#将位置带入编译命令重新编译
rm -rf build && cmake -B build -DBUILD_SHARED_LIBS=OFF -DGGML_AVX2=ON -DGGML_FMA=ON -DGGML_CUDA=OFF -DGGML_OPENCL=ON -DOpenCL_LIBRARY=/lib/x86_64-linux-gnu/libOpenCL.so.1 -DCMAKE_BUILD_TYPE=Release && cmake --build build -j$(nproc)
#-DOpenCL_LIBRARY=/lib/x86_64-linux-   #连接opencl库

#这没用上opencl
/llama$ ./llama-cli -m ./models/Qwen3.5-0.8B-UD-Q4_K_XL.gguf -p "你好啊"
ggml_opencl: platform IDs not available.

#这,识别了 OpenCL 库,但运行时绿联系统的 OpenCL 驱动仍未正确加载**(`platform IDs not available`)
#权限的问题,普通用户无法调用集成显卡
yuchen@MOSS5202:/volume1/docker/llama$ ./llama-cli -m ./models/Qwen3.5-0.8B-UD-Q4_K_XL.gguf -p "你好啊(回答问题不要过度思考)" -ngl 99 ggml_opencl: platform IDs not available. warning: no usable GPU found, --gpu-layers option will be ignored warning: one possible reason is that llama.cpp was compiled without GPU support warning: consult docs/build.md for compilation instructions Loading model...


#N100 核显的 OpenCL 平台已经识别到了!! 但是跟默认开启的高通Adreno显卡冲突 了 关闭它
yuchen@MOSS5202:/volume1/docker/llama$ sudo ./llama-cli -m ./models/Qwen3.5-0.8B-UD-Q4_K_XL.gguf -p "你好啊(回答问题不要过度思考)" -ngl 99 ggml_opencl: selected platform: 'Intel(R) OpenCL Graphics' ggml_opencl: device: 'Intel(R) UHD Graphics (OpenCL 3.0 NEO )' ggml_opencl: Adreno-specific kernels should not be enabled for non-Adreno GPUs; run on an Adreno GPU or recompile with CMake option `-DGGML_OPENCL_USE_ADRENO_KERNELS=OFF` ggml_opencl: drop unsupported device. warning: no usable GPU found, --gpu-layers option will be ignored warning: one possible reason is that llama.cpp was compiled without GPU support warning: consult docs/build.md for compilation instructions


#将位置带入编译命令重新编译
rm -rf build && cmake -B build -DBUILD_SHARED_LIBS=OFF -DGGML_AVX2=ON -DGGML_FMA=ON -DGGML_CUDA=OFF -DGGML_OPENCL=ON -DGGML_OPENCL_USE_ADRENO_KERNELS=OFF -DOpenCL_LIBRARY=/lib/x86_64-linux-gnu/libOpenCL.so.1 -DCMAKE_BUILD_TYPE=Release && cmake --build build -j$(nproc)
#-DGGML_OPENCL_USE_ADRENO_KERNELS=OFF  禁用高通显卡
#-DOpenCL_LIBRARY=/lib/x86_64-linux-   #连接opencl库


#来了!!!
yuchen@MOSS5202:/volume1/docker/llama$ sudo ./llama-cli -m ./models/Qwen3.5-0.8B-UD-Q4_K_XL.gguf -p "你好啊(回答问题不要过度思考)" -ngl 99
ggml_opencl: selected platform: 'Intel(R) OpenCL Graphics'

ggml_opencl: device: 'Intel(R) UHD Graphics (OpenCL 3.0 NEO )'
ggml_opencl: OpenCL driver: 24.22.29735.27
ggml_opencl: vector subgroup broadcast support: false
ggml_opencl: device FP16 support: true
ggml_opencl: mem base addr align: 128
ggml_opencl: max mem alloc size: 3390 MB
ggml_opencl: device max image buffer size (pixels): 222171392
ggml_opencl: device max workgroup size: 512
ggml_opencl: SVM coarse grain buffer support: true
ggml_opencl: SVM fine grain buffer support: false
ggml_opencl: SVM fine grain system support: false
ggml_opencl: SVM atomics support: false
ggml_opencl: flattening quantized weights representation as struct of arrays (GGML_OPENCL_SOA_Q)
ggml_opencl: loading OpenCL kernels....................................................................................
ggml_opencl: default device: 'Intel(R) UHD Graphics (OpenCL 3.0 NEO )'

Loading model...


成是成了,速度慢了3倍????????????????????????????????
还是因为显卡太差了,还需要把数据搬运到显卡中处理 所以更慢

sudo ./llama-cli -m ./models/Qwen3.5-0.8B-UD-Q4_K_XL.gguf -p "你好啊(回答问题不要过度思考)" -ngl 0 --no-mmap --temp 0.7
还是用-ngl 0吧 纯CPU

下载模型

https://huggingface.co/unsloth,建议下载量化为 UD-Q4_K_XL

运行

可以交互式运行llama-cli,也可服务式运行llama-server

cli: ./llama-cli -m ./models/Qwen3.5-0.8B-UD-Q4_K_XL.gguf -p "你好啊" server: ./llama-server -m ./models/DeepSeek-R1-Distill-Qwen-1.5B-UD-Q4_K_XL.gguf --port 8684 -ngl 0./llama-server -m ./models/DeepSeek-R1-Distill-Qwen-1.5B-UD-Q4_K_XL.gguf --port 8684 -ngl 0 -c 2048 --no-mmap --mlock 0 -t 2 --no-warmup

  • -c 2048 上下文窗口降到 2048
  • -ngl 0 禁用 GPU,纯 CPU 运行
/llama$ ./llama-cli -m ./models/Qwen3.5-0.8B-UD-Q4_K_XL.gguf -p "你好啊"
ggml_opencl: platform IDs not available.

Loading model...  


▄▄ ▄▄
██ ██
██ ██  ▀▀█▄ ███▄███▄  ▀▀█▄    ▄████ ████▄ ████▄
██ ██ ▄█▀██ ██ ██ ██ ▄█▀██    ██    ██ ██ ██ ██
██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀
                                    ██    ██
                                    ▀▀    ▀▀

build      : b8281-0cec84f99
model      : Qwen3.5-0.8B-UD-Q4_K_XL.gguf
modalities : text

available commands:
  /exit or Ctrl+C     stop or exit
  /regen              regenerate the last response
  /clear              clear the chat history
  /read               add a text file


> 你好啊

[Start thinking]
Here‘s a thinking process that leads to the suggested response:

1.  **Analyze the Request:**
    *   **User:** "你好啊" (Hello).
    *   **Tone:** Friendly, conversational, warm.
    *   **Context:** AI assistant.
    *   **Intent:** The user is initiating a conversation. They are greeting me.
    *   **Constraint:** I need to respond politely and helpfully, maintaining the persona of a helpful AI assistant.

2.  **Determine the Response Strategy:**
    *   **Greeting:** Acknowledge the greeting warmly.
    *   **Self-Introduction:** Briefly state who I am (to show understanding).
    *   **Offer Assistance:** Invite them to ask questions or share something interesting.
    *   **Engagement:** Ask a question or suggest a topic to start.

[ Prompt: 25.3 t/s | Generation: 18.2 t/s ]



yuchen@MOSS5202:/volume1/docker/llama$ ./llama-bench -m ./models/Qwen3.5-0.8B-UD-Q4_K_XL.gguf 
ggml_opencl: platform IDs not available.
| model                          |       size |     params | backend    | ngl |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | --------------: | -------------------: |

| qwen35 0.8B Q4_K - Medium      | 522.43 MiB |   752.39 M | OpenCL     |  99 |           pp512 |         33.73 ± 1.75 |
| qwen35 0.8B Q4_K - Medium      | 522.43 MiB |   752.39 M | OpenCL     |  99 |           tg128 |         17.50 ± 0.78 |

build: 0cec84f99 (8281)

有时候可能会出现运行模型就会被kill掉的情况。 一般是因为内存不够了 使用参数 -c 限制上下文长度


有显卡的话推荐vLLM来运行,相比GGUF,vLLM 能做到 零进度损失,速度更快(GPU),支持高并发,还能多GPU运行