当前位置: 首页 > news >正文

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 EnableDelayedExpansionREM ===========================
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.exepauseexit /b 1
)if not exist "%MODEL%" (echo [ERROR] 找不到模型文件: %MODEL%pauseexit /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_0set "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
EOFsystemctl --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),效果接近云端中端模型,足够满足大多数人的需求。

http://www.jsqmd.com/news/681965/

相关文章:

  • ESP32蓝牙开发避坑指南:从零开始移植NimBLE协议栈(基于FreeRTOS)
  • 别再手动调图了!用MATLAB代码批量美化论文折线图(附完整参数设置清单)
  • 如何快速修复Windows程序启动问题:Visual C++运行库终极解决方案
  • 3分钟掌握Win11Debloat:让你的Windows 11性能飙升44%的终极优化指南
  • 2026年创新科技:便携式地震床,安全守护新选择 - GrowthUME
  • 【2026-04-21】下班闲记
  • 3步掌握Python知乎API:轻松获取社交数据的神器
  • 八大网盘直链下载助手完整教程:告别限速,轻松获取真实下载地址
  • Vue3-Marquee:现代前端开发中的流动艺术
  • 终极免费Flash反编译工具:JPEXS Free Flash Decompiler完整使用指南
  • 终极指南:LRCGet批量歌词下载与管理工具的完整解决方案
  • SPDK安装后,你的NVMe SSD真的准备好了吗?从绑定设备到性能测试的完整验证流程
  • 如何让微信聊天记录成为你的个人数字资产?WeChatMsg完全指南
  • FME建库核心技巧:手把手教你用PythonCaller构建动态schema(含字段映射与坐标系设置)
  • 2026工程基建与零基础跑通篇:YOLO26的yaml文件魔改入门:教你像搭乐高一样构建SOTA网络架构
  • CCPC2025郑州区域赛题解
  • 从零到一:手把手教你用Zephyr RTOS在STM32上点亮第一个LED(附完整工程)
  • 别再死记硬背了!用ChatGPT/Notion AI帮你快速生成LaTeX数学公式(附常用符号清单)
  • 用TensorFlow Lite在树莓派上部署目标检测
  • 番茄小说下载器完整使用指南:从零开始掌握小说离线保存技巧
  • 仅限内部分享:微软Build 2024未公开的.NET 11 System.AI预览版API清单(含3个已标记[Obsolete]但仍在用的关键接口)
  • PowerToys中文汉化版:解锁Windows效率潜能的终极解决方案
  • League Akari:英雄联盟玩家的智能私人助手,全面解决游戏效率与数据隐私难题
  • 用LVGL官方Demo给你的STM32 TFT屏快速做个UI原型:以Widgets Demo为例
  • 别再手动克隆了!用VMware SRM搞定多站点容灾,这份部署避坑指南请收好
  • Blender建筑建模终极指南:Building Tools插件让你的3D创作提速10倍
  • 从‘乱炖’到‘泾渭分明’:一致性聚类(Consensus)如何拯救你的生物信息学数据分析
  • 别再手动导数据了!用Kettle 9.2零代码搞定MySQL表同步(附JDBC驱动避坑指南)
  • Java原生镜像内存优化已进入深水区!这4个被官方文档刻意弱化的Substrate VM内存陷阱,正在 silently 吞噬你的SLA
  • 魔兽争霸3优化升级指南:5分钟解锁现代游戏体验