llama.cpp本地部署LLM

llama.cpp本地部署LLM

环境

  • OS:Windows/Linux
  • GPU: AMD Radeon 660M
    • 专用显存:495MB
    • 共享显存:7886MB
  • 内存:16GB

安装llama.cpp

由于我是AMD显卡,所以用不了CUDA。我试过了用CPU推理,太慢且负载过重了,所以还是要用GPU加速。

这里选择用Vulkan做计算库,用HIP的方式可以参考这篇:https://www.cnblogs.com/eslzzyl/p/18706793

步骤:https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md#vulkan

  1. 安装 Vulkan SDK: https://vulkan.lunarg.com/sdk/home#windows ,直接最新版就行

  2. 下载编译好的llama.cpp产物:https://github.com/ggml-org/llama.cpp/releases/

  3. 将llama.cpp的可执行程序加入PATH

使用

去模型市场下载需要的GGUF格式的模型:https://modelscope.cn/models

然后就可以使用llama-cli或者llama-server了。

常用公共参数:

参数 说明 示例
-m/--model 指定模型文件路径(.gguf 格式,llama.cpp 主流格式) -m D:\models\qwen-7b-q4_0.gguf
-c/--ctx-size 上下文窗口大小(决定模型能记住的对话长度,单位:tokens)最大模型回复的速度越慢 -c 4096(常用值:2048/4096/8192,需匹配模型支持的最大 ctx)
-n/--n-predict 单次生成的最大 tokens 数(回答的最大长度) -n 2048(设为 -1 则无限制,直到模型停止生成)
-t/--threads 启用的 CPU 线程数(建议设为 CPU 核心数的 70%-90%) -t 16(8 核 CPU 设 8,16 核设 12-16)
-ngl/--n-gpu-layers 卸载到 GPU 的层数(核心!利用显卡加速,值越大越省 CPU) -ngl 35(新手建议从 20/30 开始试,拉满设为 99)
-b/--batch-size 批处理大小(影响推理速度,建议设为 ctx-size 的 1/4~1/2) -b 1024(ctx=4096 时设 1024 较合适)

llama-cli

最简单的命令:

llama-server --model /path/to/model.gguf -ngl 100

llama-server

最简单的命令;

llama-server --model /path/to/model.gguf -ngl 100 --host 127.0.0.1 --port 9976 --api-key 123456

启动后可以在浏览器打开监听的端点,就能访问Web UI了。以及可以在opencode里面通过api key的方式接入

辅助脚本

Windows批处理脚本

llama-server异常退出时自动拉起:

@echo off
setlocal EnableExtensions EnableDelayedExpansion

REM ===========================
REM 用户可修改区
REM ===========================
set "MODEL=C:\models\Qwen3.5-35B-A3B-Q4_K_M.gguf"
set "HOST=0.0.0.0"
set "PORT=11434"
set "CTX=131072"
set "RESTART_DELAY=5"

REM ===========================
REM 自动查找 llama-server.exe
REM ===========================
set "SERVER_EXE="

if exist "C:\llama.cpp\build\bin\Release\llama-server.exe" set "SERVER_EXE=C:\llama.cpp\build\bin\Release\llama-server.exe"
if not defined SERVER_EXE if exist ".\build\bin\Release\llama-server.exe" set "SERVER_EXE=.\build\bin\Release\llama-server.exe"
if not defined SERVER_EXE if exist ".\build\bin\llama-server.exe" set "SERVER_EXE=.\build\bin\llama-server.exe"
if not defined SERVER_EXE if exist ".\llama-server.exe" set "SERVER_EXE=.\llama-server.exe"

if not defined SERVER_EXE (
    echo [ERROR] 找不到 llama-server.exe
    pause
    exit /b 1
)

if not exist "%MODEL%" (
    echo [ERROR] 找不到模型文件: %MODEL%
    pause
    exit /b 1
)

echo =========================================
echo llama-server Quick Start
echo -----------------------------------------
echo Server : %SERVER_EXE%
echo Model  : %MODEL%
echo Host   : %HOST%
echo Port   : %PORT%
echo Ctx    : %CTX%
echo =========================================
echo.

set "LLAMA_CHAT_TEMPLATE_KWARGS={"enable_thinking":false}"
set /a RESTART_COUNT=0

:RUN_SERVER
set /a RESTART_COUNT+=1
echo.
echo [INFO] 第 !RESTART_COUNT! 次启动 llama-server...
echo [INFO] 按 Ctrl+C 可手动退出脚本
echo [INFO] 启动时间: %date% %time%
echo.

"%SERVER_EXE%" ^
  -m "%MODEL%" ^
  --host %HOST% ^
  --port %PORT% ^
  --ctx-size %CTX% ^
  --alias "qwen3.5-35b-a3b" ^
  --cache-type-k q8_0 ^
  --cache-type-v q8_0

set "EXITCODE=%ERRORLEVEL%"
echo.
echo [WARN] llama-server 已退出,退出码: !EXITCODE!

if "!EXITCODE!"=="0" (
    echo [INFO] 检测到正常退出,脚本结束。
    goto END
)

echo [WARN] 检测到异常退出,%RESTART_DELAY% 秒后自动重启...
timeout /t %RESTART_DELAY% /nobreak >nul
goto RUN_SERVER

:END
echo.
echo [INFO] 脚本已结束,按任意键关闭窗口...
pause >nul
endlocal
exit /b
作为systemd服务

这里选择用户权限部署,毕竟LLM只是大脑。

tee ~/.config/systemd/user/llama-server.service >/dev/null <<'EOF'
[Unit]
Description=llama.cpp server
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/hupingbo/llama.cpp
ExecStart=/home/hupingbo/llama.cpp/build/bin/llama-server -m /home/hupingbo/Models/Qwen3.5-35B-A3B-Q4_K_M.gguf --alias "qwen3.5-35b-a3b" --host 0.0.0.0 --port 11434 --ctx-size 262144 --cache-type-k q8_0 --cache-type-v q8_0 --chat-template-kwargs '{"enable_thinking": false}'
Restart=always
RestartSec=3

[Install]
WantedBy=default.target
EOF

systemctl --user stop llama-server
systemctl --user daemon-reload
systemctl --user restart llama-server
systemctl --user enable --now llama-server
systemctl --user status llama-server
journalctl --user -u llama-server.service -f

llama-bench

用于测量模型的性能。

FAQ

  1. Q:加载模型时提示“显存不足”怎么办?

    A:换更小参数量的模型(比如从13B换成7B),或选择更低量化版本(比如从Q5_K_M换成Q4_K_M),同时关闭其他占用显存的软件(比如游戏、视频剪辑软件)。

  2. Q:CPU推理速度太慢,每秒只有1-2个token怎么办?

    A:如果有GPU,开启硬件加速(LMStudio在设置中开启,llama.cpp添加“-ngl”参数);Mac用户无需额外操作,Apple Silicon芯片会自动优化;纯CPU用户建议换7B Q2_K量化版,速度会提升不少。

  3. Q:本地部署的大模型,效果和云端GPT-4差距大吗?

    A:7B量化版适合日常使用,复杂推理、深度问答不如GPT-4;但13B及以上版本,配合高质量模型(比如Llama3.1-8B、Qwen2.5-13B),效果接近云端中端模型,足够满足大多数人的需求。

posted @ 2026-04-22 12:55  3的4次方  阅读(393)  评论(0)    收藏  举报