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

llama.cpp增加模型目录的检查深度(匹配LM Studio的模型目录)

最近使用llama.cpp时候(b9038),发现Qwen3.6 35B下输出速度比Ollama快出一倍(llama.cpp 79 t/s VS ollama 44t/s),但是之前一直是直接指定模型载入。

近期和部分网友交流时发现了llama.cpp实际已经支持了模型路由(多模型切换),通过 --models-dir 参数就能实现多模型载入。

之前一直都是用LM Studio做模型下载器和初步尝试,这里试了下,实际模型只能加载量级目录下的模型,再深一级,就没法识别。

载入模型命令如下:

./llama-server --models-dir ~/.lmstudio/models/lmstudio-community/ --ctx-size 32768 --n-gpu-layers 9999 --main-gpu 0 --split-mode none --host 0.0.0.0 --port 8080

这样就会加载 ~/.lmstudio/models/lmstudio-community/  目录下的多个模型。

现在遇到的问题就是LM Studio会将不同的模型分类到不同的来源目录下,比如除了上述的目录,我这边还有HauhauCS的目录。

image

 如果直接从~/.lmstudio/models/目录传入路径,就没法正常载入模型,只能选择其目录下的一个子目录。

实际上,通过创建HauhauCS的快捷到lmstudio-commuity中,也能解决模型的加载,但是这样一来,LM Studio中就会出现重复的模型,对于强迫症的我比较难接受。

为了彻底解决这个问题,那就得动llama.cpp的源码了。

image

 通过修改common/preset.cpp下的load_from_models_dir方法,就能达到目的。

修改代码:

common_presets common_preset_context::load_from_models_dir(const std::string & models_dir) const {
if (!std::filesystem::exists(models_dir) || !std::filesystem::is_directory(models_dir)) {
throw std::runtime_error(string_format("error: '%s' does not exist or is not a directory\n", models_dir.c_str()));
}

std::vector<local_model> models;
auto scan_subdir = [&models](const std::string & subdir_path, const std::string & name) {
auto files = fs_list(subdir_path, false);
common_file_info model_file;
common_file_info first_shard_file;
common_file_info mmproj_file;
for (const auto & file : files) {
if (string_ends_with(file.name, ".gguf")) {
if (file.name.find("mmproj") != std::string::npos) {
mmproj_file = file;
} else if (file.name.find("-00001-of-") != std::string::npos) {
first_shard_file = file;
} else {
model_file = file;
}
}
}
// single file model
local_model model{
/* name */ name,
/* path */ first_shard_file.path.empty() ? model_file.path : first_shard_file.path,
/* path_mmproj */ mmproj_file.path // can be empty
};
if (!model.path.empty()) {
models.push_back(model);
}
};

auto files = fs_list(models_dir, true);
bool has_subdir = false;
for (const auto & file : files) {
if (file.is_dir) {
has_subdir |= true;
scan_subdir(file.path, file.name);
auto infiles = fs_list(file.path, true);
for (const auto & infile : infiles) {
if (infile.is_dir) {
scan_subdir(infile.path, infile.name);
}
}
} else {
has_subdir |= false;
}
}
if(!has_subdir) {
// if there is no subdir, treat the main dir as the model dir
scan_subdir(models_dir, std::filesystem::path(models_dir).filename().string());
}

// convert local models to presets
common_presets out;
for (const auto & model : models) {
common_preset preset;
preset.name = model.name;
preset.set_option(*this, "LLAMA_ARG_MODEL", model.path);
if (!model.path_mmproj.empty()) {
preset.set_option(*this, "LLAMA_ARG_MMPROJ", model.path_mmproj);
}
out[preset.name] = preset;
}

return out;
}

 

修改后,重新编译,并再次尝试载入:

./llama-server --models-dir ~/.lmstudio/models/ --ctx-size 32768 --n-gpu-layers 9999 --main-gpu 0 --split-mode none --host 0.0.0.0 --port 8080

 

这样models目录下的所有模型就都能载入了。

image

 

 

修改代码时,顺带解决了一个载入缺陷(通过代码发现的),就是如果直接载入模型级目录(目录下只有模型文件,没有其他子目录),此时模型多模态视觉部分不会被载入(mmproj),只会载入大语言模型部分的gguf文件。

遇到相同问题的人,可以参考,动手完善下。

 

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

相关文章:

  • ARM处理器独占访问指令与异常处理机制详解
  • 保姆级教程:在Ubuntu 20.04上从零搭建PX4 Gazebo垂起固定翼仿真环境
  • 从STOPPED到STARTED:深入AutoSar CAN Driver状态机,解决你的控制器初始化失败难题
  • Python新手必看:pip install packaging 报错?手把手教你搞定ModuleNotFoundError
  • 别再折腾虚拟机了!Win11下用WSL2搞定FreeSurfer 7.1.0,从MRI到3D头模型一条龙
  • #2026国内橱柜公司Top10推荐:广东广州等地公司品质可靠实力出众 - 十大品牌榜
  • 2026年最新英文降ai:留学生AI率从95%降到0%,用好这4种方法稳过英文aigc - 殷念写论文
  • 抖音去水印免费工具怎么选?抖音视频如何去掉水印?2026实测方法全汇总 - 科技热点发布
  • Node.js终端Canvas渲染引擎:构建交互式TUI应用与数据可视化
  • FPA功能点分析实战:我们如何用它为团队节省了20%的预算,并说服了客户
  • 保姆级教程:用Qt和Python给你的软件加个‘扫码枪’(从模拟到真实设备调试)
  • 2026年佛山物料输送设备厂家口碑推荐榜:佛山输送机、佛山污泥破碎机、佛山皮带输送机、佛山提升机选择指南 - 海棠依旧大
  • ibkr-cli:命令行驱动盈透证券API,打造透明量化交易工作流
  • 抖音去水印工具怎么选?免费安全的去水印工具推荐,2026实测好用的方法全汇总 - 科技热点发布
  • #2026国内护墙板公司Top10推荐:广东广州等地公司工艺成熟品质可靠 - 十大品牌榜
  • 龙芯2k0300 - 走马观碑组WiFi驱动移植
  • 2026 年广州头部 GEO 公司盘点:5 家主流厂商深度测评与全场景选型指南 - GEO优化
  • AWS for SAP MCP Server 正式 GA:AI Agent 安全接入 SAP ERP
  • 五年制专转本英语备考为什么选择蓝洋五年制专转本英语培训? - 奔跑123
  • 从Turbo码到LDPC码:手把手分析5G/4G信号背后,信道编码如何‘偷偷’提升你的网速和稳定性
  • 五分钟教程使用curl命令测试taotoken大模型api连通性
  • VisionFive 2 RISC-V开发板开箱与系统配置实战
  • PREM、AK135、STW105:三大地球模型在负荷变形计算中的表现差异与选择建议
  • 量子计算模拟Fermi-Hubbard模型的技术突破与应用
  • Mac新手必看:用SourceTree和Git搞定Gitee/GitHub仓库(含SSH密钥配置避坑指南)
  • 告别玄学调试:用‘信号完整性’的视角根治Camera底层MIPI/DVP报错
  • 对话式AI智能体创建:用自然语言定制你的Gemini CLI助手
  • 3DMAX异形空间地板建模救星:用FloorGenerator搞定弧形、带洞和不规则地面
  • 2026 年苏州主轴维修厂家口碑推荐榜:苏州电主轴维修、苏州高速主轴维修、苏州精密主轴维修、苏州磨床主轴维修、苏州进口主轴维修选择指南 - 海棠依旧大
  • 蓝洋无忧单招项目核心优势 - 奔跑123