为 Windows 平台预编译的 llama-cpp-python 安装包,支持 Intel Arc GPU (SYCL) 加速。
基于 JamePeng 的分支 编译,为 Intel Arc GPU 提供 SYCL 加速支持。
手工安装/升级whl的步骤扫盲包 https://www.yuque.com/allan-gmwqz/xq0z39/ckgeuiklqkazz75k?singleDoc#
核心亮点:LiliCorr 投机解码 + Soprano TTS + MTMD 媒体缓存优化(一并覆盖上游 0.4.4)
- 升级至 llama-cpp-python 0.4.5(基于 JamePeng
3fc39b2,同步 llama.cpp74bca39= b11870,子模块跨 167 个提交,零本地补丁)。⚠️ 上游 0.4.4 有 CHANGELOG 段但未单独发版,__version__从 0.4.3 直跳 0.4.5,故本版一并覆盖 0.4.4 + 0.4.5 两段内容(距 0.4.3 共 26 个提交) - LiliCorr 投机解码(本版主线):新增块解码、projected anchor 处理与 checkpoint 恢复,对齐 MTP/DFlash 的 CPU 抑制与候选概率;上游 Nemotron-3.5-Bolt-74B + LiLiCorr 实测解码 132.6 → 198.0 tok/s(1.49x)
- Soprano TTS:新增音频流行数 / flush 进度查询(可选 int64 API),支持非流式 WAV/PCM 合成并做模型专属校验;Qwen3-TTS / Pocket TTS 在固定种子下输出逐字节不变
- MTMD 媒体缓存优化(多轮对话收益最大):无投机引擎占槽时改用设备侧媒体 checkpoint、跨轮保留可复用历史与媒体 checkpoint、归一化 BOS/EOS 与 Qwen vision 边界防重复 → 上游实测 Qwen3.5 第 2/3 轮首 token 延迟降约 60%、图像缓存命中 0% → 100%
LlamaModel.suppress_tokens()新增(位于llama_cpp._internals,非顶层导出);采样侧改为在候选过滤前合并模型 suppression 与用户 logit bias,且不再修改调用方参数- 投机解码 / hybrid 状态可靠性(0.4.4 段):跳过无用的 final target checkpoint(上游实测每请求少导出约 50 MiB、清理 27–28 ms → 约 0.1 ms、吞吐 +8~12%);MTP 验证钩子与 native rollback 对齐;checkpoints 关闭时仍保留有效前缀复用;hybrid checkpoint 恢复不再因 export size 变化被拒;RAM / disk / trie 前缀匹配统一
- SYCL 后端收益(llama.cpp 侧 167 个提交,SYCL 16 项):ESIMD kernel 在 FFN 路径恢复启用、XMX 矩阵引擎多列
mul_mat_vec_q重构、get_rows在 reorder 权重上的修复(本构建Reorder=Y直接命中)、graph 录制/重放(默认关闭)、反量化 fp16/fp32 开关合并、fattn-mkl 显式依赖替代 host wait、CONV_2D 非连续输入错误结果修复、memset改有序写 - XMX 的覆盖面(按合并后源码核实):六种 K-quant / Q8_0 类型全部支持;单列自回归解码是否走 XMX 由
ggml_sycl_xmx_min_cols(type) == 1决定,实际为 Q2_K / Q3_K / Q4_K —— 本模型的 Q4_K 权重在单 token 解码时即走 XMX int8 DPAS;Q5_K / Q6_K / Q8_0 需 ≥2 列才启用。多列路径覆盖 2–80 列(面向投机解码验证与短提示批),融合 gate/up GLU kernel 最多 16 列。前置条件是Reorder=Y(权重已 reorder)与 BMG / LNL 架构 - 显存工作集与 0.4.3 完全一致:
SYCL0 compute buffer513.02 MiB、SYCL_Host28.03 MiB,两次运行均matches expectation,未增长、无泄漏 - 新增 3 个 SYCL 环境变量:
GGML_SYCL_ENABLE_XMX_ESIMD(1) /GGML_SYCL_XMX_MAX_COLS(80) /GGML_SYCL_GRAPH_EVICTION_TIMEOUT(10);另有 4 个编译期宏(GGML_SYCL_XMX_GLU_MAX_COLS=16 等)无法用环境变量设置,其中XMX_GLU_MAX_COLS会以宏值形式出现在启动日志里,易被误认为 env。GGML_SYCL_ENABLE_GRAPH默认0,graph 重放需显式开启(该开关 0.4.3 已存在但无实现,本版才实装)
ctx_checkpoints=0 首 decode 崩溃
- 现象:Qwen3.5 等带 SWA 层的 hybrid 视觉模型,大图(约 4000+ vision tokens)下 prefill 正常,但首 decode token 崩溃(
failed to prepare attention ubatches/failed to find a memory slot for batch of size 1) - 根因:调用方传
ctx_checkpoints=0会强制 hybrid 模型走 "Bypassing rollback" fast-path,大 prefill 下无槽余量给首 decode token - 本版状态:未做真机复测。上游 0.4.4 含一条
fix(state): preserve valid prefix reuse with checkpoints disabled,与该校验路径高度相关,疑似即该问题的修复,但未经本机验证;同时Llama.generate()相关代码已大幅重写(0.4.3 的llama.py:2174-2178快路径已不存在) - 规避:建议继续沿用
ctx_checkpoints默认-1 - ✅ 官方推荐插件已修复:comfyui-sg-llama-cpp 已在
1f0fc15将ctx_checkpoints默认改为-1并加响应式n_ctxhint。使用此插件无需手动处理 - 本 wheel 本身无此 bug:纯
llama_cpp.Llama同模型同大图在n_ctx=8192下已验证正常
🚀 实测性能(Qwen3.5-4B 视觉模型 + 图像,0.4.5):
⚠️ 测试硬件说明:本次测试机临时更换为 Intel Arc Pro B70 32GB(B580 暂不在机内),只做了两张图的跑通验证。下表只列本版绝对数字,不与任何历史版本做对比 —— B580 与 B70 在算力(160 → 256 CU)与显存带宽上的差距过大,跨硬件横比没有意义。
| 指标 | 小图 1088×1440(热跑) | 大图 1792×2304(冷跑) |
|---|---|---|
| 视觉 token 数 | 1530 | 4032 |
| 图像编码耗时 | 1120 ms(clip_encode) | 21670 ms(clip_encode) |
| 图像解码耗时 | 515 ms(batch 1/1) | 3101 ms(batch 1/2)+ 2403 ms(batch 2/2) |
| prompt eval | 1756.58 t/s(886.38 ms / 1557 tokens) | 34.07 t/s(119133.96 ms / 4059 tokens) |
| 生成速度 | 117.45 t/s(eval 9859.19 ms / 1158 runs) | 111.58 t/s(eval 10871.25 ms / 1213 runs) |
| 总耗时 | 19.00 s | 165.56 s |
| load time | 99.41 ms(热) | 62993.54 ms(冷) |
| Hybrid checkpoint | host 1×50.25 MiB(pos 64)+ device(pos 72 / 1230) | host 1×50.25 MiB(pos 91)+ device(pos 99 / 1312) |
| SYCL 计算缓冲 | SYCL0 513.02 MiB / SYCL_Host 28.03 MiB | 同左 |
测试场景:Qwen3.5-4B-Uncensored + mmproj-BF16,hybrid 架构(含 SWA 层),
ctx_checkpoints=-1,n_ctx=8192,n_batch=2048(大图按2048 + 1984两批喂入)。大图为冷跑(
load time62993.54 ms):其 prompt eval 34.07 t/s 含 SYCL kernel 首次 JIT 编译与 oneDNN primitive 创建的一次性成本(同图第二次运行会回到热跑量级),不可与本版小图热跑横比。小图load time99.41 ms 为热跑稳定态。需要版本间性能结论时,请在 B580 上复测后单独记录,不要引用本表做跨硬件或跨版本比较。
社区反馈:
✅ "Qwen 3.8 27B working fine with
llama_multimodal.GenericMTMDChatHandler" —— 视觉模型兼容性良好 详见:JamePeng/llama-cpp-python#169 (comment)
安装包:llama_cpp_python-0.4.5+sycl-cp313-cp313-win_amd64.whl(约 42 MB,精简版,需预装 oneAPI 2026.1)
从 0.3.39 版本开始,llama-cpp-python 引入了重大的 MTMD(Multi-Modal Token Decomposition)重写,对视觉模型的支持方式做了底层重构:
| 变更项 | 0.3.38 及之前 | 0.3.39+ |
|---|---|---|
| 视觉模型加载方式 | 手动创建 clip_model_path handler 注入 Llama() |
mmproj_path 直接传给 Lama(),内部自动创建 handler |
| 视觉 handler 类 | 模型特定 handler(如 Qwen3VLChatHandler) |
GenericMTMDChatHandler 统一处理 |
| handler 参数传递 | 直接传给 handler 构造函数 | 通过 chat_handler_kwargs dict 传递 |
| 混合架构模型 | 无特殊处理 | 用默认 ctx_checkpoints=-1(如 Qwen3.5);勿传 0,0.3.48+ 会触发 hybrid fast-path 首 decode 崩溃 |
重要:不要直接使用
pip install --upgrade,旧版本残留文件可能与新版冲突。请按以下步骤操作:
pip uninstall llama-cpp-python -ypip install llama_cpp_python-0.4.5+sycl-cp313-cp313-win_amd64.whl如果你在 ComfyUI 中使用此 whl,必须使用适配 0.3.39+ 的插件版本(见下方第 3 节)。
原版 comfyui-sg-llama-cpp 插件不支持 0.3.39+ 的 MTMD 重写。以下 fork 已完成适配:
https://github.com/allanmeng/comfyui-sg-llama-cpp
适配内容:
clip_model_path→mmproj_path:直接传给Llama(),不再手动创建 handlerGenericMTMDChatHandler参数过滤:取GenericMTMDChatHandler∪MTMDChatHandler参数并集,过滤掉force_reasoning、enable_thinking等 0.3.39+ 不接受的参数- 新增
ctx_checkpoints选项(默认-1):混合架构模型(Qwen3.5 等 Transformer+Mamba)使用默认即可;勿设为0,0.3.48+ 会触发 hybrid fast-path 首 decode 崩溃 vision_image_min_tokens默认值从-1改为1024(Qwen-VL 最低要求)- 移除无效 UI 参数:
vision_enable_thinking、vision_force_reasoning、vision_add_vision_id
安装方式:
cd ComfyUI/custom_nodes
git clone https://github.com/allanmeng/comfyui-sg-llama-cpp从 0.3.43 开始,本项目的构建环境升级到 Intel oneAPI Base Toolkit 2026(对应 Intel Deep Learning Essentials 2026.0)。升级动机:
- Intel 官方建议安装并使用最新 oneAPI / 显卡驱动,以确保 Intel Arc B580 / B70(Battlemage)的性能与兼容性。
- 0.3.43 的编译需要搭配 Python XPU 运行时(
intel-xpu-backend-for-pytorch/ PyTorch XPU)≥ 2.13(即 PyTorch 2.13 生态)。oneAPI 2026 与之在 ABI 与运行时层面匹配;若混用旧版 Python XPU 后端(如 2.12 + oneAPI 2025)可能导致运行时不匹配。
重要:若你的 ComfyUI / 推理环境使用 PyTorch XPU 方案,请确保
intel-xpu-backend-for-pytorch≥ 2.13,与 0.3.43 的 oneAPI 2026 构建保持一致。
自 0.3.45 起,发布的 whl 采用方案 A(精简版):不包含 oneAPI 运行时 DLL(dnnl.dll、mkl_core.3.dll、mkl_sycl_blas.6.dll、mkl_tbb_thread.3.dll、tbb12.dll 均已移除),whl 体积约 36–37 MB。因此部署目标机 必须预先安装 Intel oneAPI(SYCL 核心运行时 sycl9.dll / OpenCL.dll 及上述数值库由 oneAPI 提供)。
⚠️ 注意:libomp140.x86_64.dll保留在 whl 中(OpenMP 预加载修复依赖),不可删除。
若目标机未安装 oneAPI,SYCL 运行时无法加载,推理会失败。请先按下方「前置要求」安装 oneAPI Base Toolkit。
方案 A 的 whl 本身已不含 oneAPI 冗余 DLL,目标机安装 oneAPI 后这些运行时由 oneAPI 经 setvars.bat 或系统 PATH 提供。whl 内仅保留 libomp140.x86_64.dll(必需)。
若你从旧版(0.3.43/0.3.44 自包含 whl)升级,site-packages 里可能残留旧版 oneAPI DLL,建议先
pip uninstall清理再装新版。
0.3.43 版本本地应用了 PR #25880(ggml-org/llama.cpp)补丁,修复了 SYCL onednn flash-attention 路径下的 use-after-return 问题。
症状:在较长上下文(n_kv ≥ ~26k,如多轮对话第二轮)时,oneDNN fattn 的输出塌缩为重复 token("GGGGG…" 模式)。
根因:SDPA scale 值通过 async memcpy 从 CPU 上传到 GPU device buffer,源是栈局部变量。当 K/V staging 内核在 in-order 队列中先于 memcpy 完成时,栈帧已被回收,memcpy 读到垃圾值 → 后续 SDPA 使用错误的 scale → 输出乱码。
修复方案:
- 将 scale 上传改为同步 memcpy(
.wait()),确保拷贝完成后再返回 buffer 指针 - 使用 per-device device scalar 缓存(
static std::unordered_map),scale 值仅首次同步上传一次,后续复用缓存,消除重复 sync 开销 - 新增环境变量
GGML_SYCL_FA_ONEDNN_MAX_KV(默认 0 = 不限),可在极长序列场景选择性回退到原生 FA kernel
与之前 PR #25741 的区别:原先的 #25741 使用无条件 wait_and_throw() 来掩盖问题(靠撑住栈帧让 async memcpy 完成),但每调用付出 ~6% PP 性能代价。#25880 从根因修复,且单设备无性能损失。
安装前,请确保已完成以下步骤:
从以下地址下载并安装最新的 Intel Arc 显卡驱动: https://www.intel.com/content/www/us/en/download/785597/intel-arc-iris-xe-graphics-windows.html
SYCL 运行时依赖 Intel oneAPI,但 无需安装完整工具包,只需安装以下组件:
| 组件 | 用途 |
|---|---|
| Intel oneAPI DPC++/C++ Compiler | 提供 SYCL 编译器(icx)与 OpenCL.dll |
| Intel oneAPI DPC++ Library | 提供 sycl9.dll 运行时(oneAPI 2026.1) |
| Intel oneAPI Math Kernel Library (oneMKL) | 提供 MKL SYCL 运行时 |
| Intel oneAPI Deep Neural Network Library (oneDNN) | 提供 dnnl.dll |
| Intel oneAPI Threading Building Blocks (oneTBB) | 提供 tbb12.dll |
下载 Intel oneAPI Base Toolkit(安装时选择自定义安装): https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html
提示: 安装时选择「自定义安装」,只勾选上表中的这几个组件,可节省大量磁盘空间。oneAPI 2025+ 中 DPC++ Library 是独立于 Compiler 的组件,需单独勾选。
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10/11 x64 |
| 显卡 | Intel Arc(炼金师 / 战法师架构) |
| 驱动 | Intel Arc 显卡驱动(最新版) |
| oneAPI | 必须安装 — DPC++ Compiler、oneMKL、oneDNN、oneTBB |
| 版本 | 文件 | 大小 |
|---|---|---|
| 0.4.5 | llama_cpp_python-0.4.5+sycl-cp313-cp313-win_amd64.whl |
~42 MB |
| 0.4.3 | llama_cpp_python-0.4.3+sycl-cp313-cp313-win_amd64.whl |
~39 MB |
| 0.4.2 | llama_cpp_python-0.4.2+sycl-cp313-cp313-win_amd64.whl |
~37 MB |
| 0.4.1 | llama_cpp_python-0.4.1+sycl-cp313-cp313-win_amd64.whl |
~37 MB |
| 0.4.0 | llama_cpp_python-0.4.0+sycl-cp313-cp313-win_amd64.whl |
~36 MB |
| 0.3.49 | llama_cpp_python-0.3.49+sycl-cp313-cp313-win_amd64.whl |
~36 MB |
| 0.3.48 | llama_cpp_python-0.3.48+sycl-cp313-cp313-win_amd64.whl |
~36 MB |
| 0.3.47 | llama_cpp_python-0.3.47+sycl-cp313-cp313-win_amd64.whl |
~36 MB |
| 0.3.46 | llama_cpp_python-0.3.46+sycl-cp313-cp313-win_amd64.whl |
~35 MB |
| 0.3.45 | llama_cpp_python-0.3.45+sycl-cp313-cp313-win_amd64.whl |
~36 MB |
| 0.3.44 | llama_cpp_python-0.3.44+sycl+pr25880-cp313-cp313-win_amd64.whl |
~36 MB |
| 0.3.43 | llama_cpp_python-0.3.43+sycl+pr25880+oneapi2610-cp313-cp313-win_amd64.whl |
~109 MB |
| 0.3.41 | llama_cpp_python-0.3.41+sycl-cp313-cp313-win_amd64.whl |
~27 MB |
| 0.3.38 | llama_cpp_python-0.3.38+sycl-cp313-cp313-win_amd64.whl |
~22 MB |
| 0.3.36 | llama_cpp_python-0.3.36+sycl-cp313-cp313-win_amd64.whl |
~20 MB |
| 0.3.35 | llama_cpp_python-0.3.35+sycl-cp313-cp313-win_amd64.whl |
~19 MB |
| 0.3.34 | llama_cpp_python-0.3.34+sycl-cp313-cp313-win_amd64.whl |
~19 MB |
| 0.3.33 | llama_cpp_python-0.3.33+sycl-cp313-cp313-win_amd64.whl |
~18 MB |
| 0.3.32 | llama_cpp_python-0.3.32+sycl-cp313-cp313-win_amd64.whl |
~18 MB |
| 0.3.31 | llama_cpp_python-0.3.31+sycl-cp313-cp313-win_amd64.whl |
~174 MB |
| 0.3.30 | llama_cpp_python-0.3.30+sycl-cp313-cp313-win_amd64.whl |
~180 MB |
从 Releases 页面下载。
pip uninstall llama-cpp-python -y
pip install llama_cpp_python-0.4.5+sycl-cp313-cp313-win_amd64.whl先 uninstall 再 install 是最干净的安装方式。
- 将 whl 文件重命名为
.zip后解压 - 将
llama_cpp文件夹复制到site-packages目录:your_python\Lib\site-packages\llama_cpp\
安装完 oneAPI 后,在 ComfyUI 的启动 .bat 文件里, Python 启动之前 加入以下一行:
call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" --force启动脚本示例 start_comfyui.bat:
@echo off
call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" --force
......
......
"C:\python\python.exe" main.py --listen 0.0.0.0注意(自 0.3.43 起):
llama_cpp在导入时会自动将自身lib/目录注册到 DLL 搜索路径(继承上游 0.3.42 的 Windows DLL 搜索修复)。因此 通常情况下,ComfyUI 中不再需要放置sycl-preloader插件。以下内容仅供需要兼容 0.3.42 及更早版本,或自定义部署环境的用户参考。
另注(自 0.3.45 起):whl 采用方案 A(精简版),不再自带 oneAPI 运行时 DLL;但仍会自动注册自身
lib/目录,且目标机需预装 oneAPI(见上文「whl 打包方式」)。
为所有基于 llama-cpp-python 的 ComfyUI 节点启用 SYCL GPU 加速,需要创建一个专用的预加载插件。
mkdir "your_comfyui\custom_nodes\sycl-preloader"echo. > "your_comfyui\custom_nodes\sycl-preloader\__init__.py"import os
import importlib.util
from pathlib import Path
def sycl_preloader():
if os.name != "nt":
return
try:
_spec = importlib.util.find_spec('llama_cpp')
if not _spec:
print("[SYCL] 找不到 llama_cpp 包")
return
_pkg_dir = Path(_spec.origin).parent
for _sub in ['', 'lib', 'bin']:
_d = _pkg_dir / _sub if _sub else _pkg_dir
if _d.exists():
os.add_dll_directory(str(_d))
for _p in os.environ.get("PATH", "").split(os.pathsep):
if "Intel" in _p and os.path.exists(_p):
os.add_dll_directory(_p)
print("[SYCL] DLL搜索路径注册完成")
except Exception as e:
print(f"[SYCL] Error: {e}")
sycl_preloader()编译并安装 SYCL 版本的 llama-cpp-python 之后,直接用 Python 脚本调用时 GPU 可以正常工作。但是,ComfyUI 里基于 llama-cpp-python 的插件(例如提示词反推插件)却无法激活 SYCL,只能回退到 CPU 运行。
根本原因是 Python 3.8+ 在 Windows 上引入的 DLL 加载限制:
出于安全考虑,Python 3.8+ 在加载 DLL 时完全忽略
PATH环境变量。即使setvars.bat已经正确地把 oneAPI 路径写入了PATH,Python 也不会通过这个机制找到 SYCL DLL。唯一可靠的方式是在 Python 代码里显式调用os.add_dll_directory(),在需要 DLL 之前提前注册搜索路径。
- 启动
.bat文件:可以设置PATH和环境变量,但无法调用 Python 的os.add_dll_directory(),DLL 加载限制依然存在。 - ComfyUI 的
main.py:看起来是个选项,但main.py第一行就开始导入 ComfyUI 核心模块(import comfy.options等),这些 import 会间接触发插件加载链,导致llama_cpp可能在预加载代码执行之前就已经被导入了。时机太晚,不可靠。
ComfyUI 内置了一个钩子函数 execute_prestartup_script()。启动时,ComfyUI 会扫描 custom_nodes\ 下每一个子文件夹,找到并执行其中名为 prestartup_script.py 的文件。这个过程发生在 所有插件节点被导入之前,是整个 ComfyUI 进程中最早能可靠运行 Python 代码的时机。
启动顺序如下:
main.py 基础初始化
↓
execute_prestartup_script() ← prestartup_script.py 在这里执行
↓
加载各插件的 __init__.py / nodes.py
↓
启动服务器
通过 os.add_dll_directory() 和 ctypes.CDLL() 加载 SYCL DLL 之后,效果是 进程级别 的。后续所有基于 llama-cpp-python 的插件(ComfyUI-QwenVL、comfyui-sg-llama-cpp 等)都能自动找到已经在内存中的 DLL,无需每个插件单独配置。
如果把 prestartup_script.py 放在某个现有插件的文件夹里(例如 comfyui-sg-llama-cpp),风险很高——一旦那个插件被删除或更新,这个文件就消失了。最稳妥的做法是创建一个只包含两个文件的最小专用插件目录:
custom_nodes\sycl-preloader\
__init__.py (空文件)
prestartup_script.py (SYCL DLL 预加载器)
这个文件夹没有节点、没有依赖,永远不会被 ComfyUI Manager 的更新机制修改。它只有一个职责:在正确的时机为整个 ComfyUI 进程完成 SYCL DLL 的预加载。
| 参数 | 推荐值 |
|---|---|
n_gpu_layers |
-1(所有层卸载到 GPU) |
n_ctx |
4096 |
n_threads |
4 |
n_threads_batch |
4 |
ctx_checkpoints |
-1(默认;混合架构模型如 Qwen3.5 用默认即可,勿设 0——0.3.48+ 会触发 hybrid fast-path 首 decode 崩溃) |
vision_image_min_tokens |
1024(Qwen-VL 最低要求) |
vision_image_max_tokens |
-1(使用默认值) |
- Intel Arc(SYCL0)的 Flash Attention 通过 oneDNN 路径实现(
GGML_SYCL_DNNL,默认开启):B 系列(B580/B70 等)实测GGML_SYCL_ENABLE_FLASH_ATTN/GGML_SYCL_FA_ONEDNN/GGML_SYCL_ENABLE_MKL_FA均为开启;上游对 A 系列(Alchemist) 做了 oneDNN 特性 gate,A 系列上该路径不可用。无论哪种情况,显存占用都高于 CUDA 方案 - 部分 CLIP 图计算算子会回退到 CPU,视觉编码性能受限
- Qwen3.5-2B(混合/循环架构)可能导致不稳定,建议改用 Qwen3-2B
| 项目 | 版本 |
|---|---|
| 显卡 | Intel Arc Pro B70 32GB(本版实测;B580 未复测) |
| 驱动 | 最新版(本版实测 SYCL 20.2 / driver 1.15.39183+4) |
| 操作系统 | Windows 11 x64 |
| Python | 3.13.11 |
| oneAPI | 2026.1 |
| ComfyUI | 0.16.3 |
- llama-cpp-python by abetlen
- JamePeng 的 SYCL 分支
- llama.cpp by ggml-org