在之前的文章《使用 llama.cpp 在 Windows 本地部署多模态大模型》中,我们介绍了如何在 Windows 环境下部署和使用 llama.cpp。本文将深入探讨如何配置 llama.cpp 以实现多模型切换功能。
背景
在实际应用中,我们往往需要同时支持多个不同参数规模的模型,比如 Qwen3.6-35B 和 Qwen3-Coder-30B 等。为了灵活地在这些模型间切换,我们需要配置一个模型管理机制,使系统能够在运行时根据需求加载和切换模型。
核心配置文件
models.ini 配置文件
models.ini 文件定义了不同模型的配置参数。每个模型都有自己的节(section),并包含特定的推理参数:
[Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q4_K_M]
ctx-size = 65536
threads = 4
reasoning = off
load-mode = none
load-on-startup = false
ncmoe = 25
alias = qwen3.6-35b-a3b
[Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ2_M]
ctx-size = 65536
threads = 4
reasoning = off
load-mode = none
load-on-startup = false
flash-attn = on
mmproj = D:\APP\OLLAMA_MODELS\import\Qwen\mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf
alias = qwen3.6-35b-a3b-fast
[Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL]
ctx-size = 65536
threads = 4
load-mode = none
reasoning = off
jinja = true
temp = 0.7
top-p = 0.8
top-k = 20
repeat-penalty = 1.05
alias = qwen3-coder-30b-a3b
每个模型节包含以下关键参数:
ctx-size: 上下文大小,控制模型处理的最大文本长度threads: 线程数,决定推理时使用的 CPU 核心数量load-mode: 模型加载模式load-on-startup: 是否在启动时预加载模型alias: 模型别名,便于识别和调用
启动脚本 run-llama.bat
run-llama.bat 脚本负责启动 llama-server 并指定配置:
@echo off
setlocal
set "LLAMA_DIR=D:\APP\llama.cpp"
set "MODEL_DIR=D:\APP\OLLAMA_MODELS\import\Qwen"
set "WEBUI=%LLAMA_DIR%\webui\llama-b10919"
set "PRESET_FILE=%MODEL_DIR%\models.ini"
cd /d "%LLAMA_DIR%"
if not exist "%LLAMA_DIR%\llama-server.exe" (
echo Error: llama-server.exe was not found in "%LLAMA_DIR%".
pause
exit /b 1
)
if not exist "%PRESET_FILE%" (
echo Error: model preset file was not found at "%PRESET_FILE%".
pause
exit /b 1
)
llama-server.exe ^
--models-dir "%MODEL_DIR%" ^
--models-preset "%PRESET_FILE%" ^
--models-max 1 ^
--path "%WEBUI%" ^
--host 127.0.0.1 ^
--port 8080
endlocal
实现多模型切换
通过配置文件和启动脚本,我们可以实现以下功能:
- 模型预加载:在
models.ini中设置load-on-startup = true可以让特定模型在启动时自动加载 - 按需加载:设置为
false可以实现按需加载,节省资源 - 参数优化:针对不同模型调整参数,如
ncmoe、flash-attn等,以优化性能 - 统一接口:通过
alias字段提供统一的模型调用接口
使用建议
在实际部署中,可以考虑以下几点:
- 将常用模型设置为预加载,提高响应速度
- 为不同用途的模型设置不同的参数组合
- 合理分配资源,避免同时加载过多大模型
- 利用 WebUI 提供的 API 实现前端模型切换功能
通过这种方式,我们可以在 llama.cpp 中轻松实现多模型切换支持,为用户提供更灵活、高效的推理体验。
