
人工智能大模型推理引擎本地部署【免费下载链接】PowerInferHigh-speed Large Language Model Serving for Local Deployment项目地址https://gitcode.com/gh_mirrors/po/PowerInfer点击查看免费下载导读本文以 PowerInfer 仓库中 smallthinker/tools/main/README.md 为核心系统讲解llama-cli命令行推理程序的完整用法——从模型下载、单轮生成、对话模式到交互式输入、上下文管理、十余种采样器调优以及性能与内存优化选项。读完本文你将能够用llama-cli在本地 CPU/GPU 上高效运行 GGUF 格式的大模型含本项目面向端侧部署的 SmallThinker 稀疏 MoE 模型并根据任务需求组合出可复制的命令行方案。llama-cli是该仓库smallthinker/tools/main目录下编译出的可执行目标由 CMakeLists.txt 声明add_executable(llama-cli main.cpp)链接common、llama运行时库与系统线程库C17其入口实现在 main.cpp共 977 行。该程序专为 LLaMA 系模型设计基于 llama.cpp 的纯 C/C 实现支持可选的 4-bit 量化推理面向桌面 CPU 做了优化同时也能与 GPU 后端协同工作。快速开始首先需要准备一个 GGUF 格式的模型文件。原文档以 Gemma 1.1 7B 指令版Q4_K_M 量化为例将该文件下载后放入models/目录例如models/gemma-1.1-7b-it.Q4_K_M.gguf。如果使用本项目配套的 SmallThinker 模型则需先按 smallthinker/README.md 中的流程将 safetensors 转换为 GGUF 并量化python3 convert_hf_to_gguf.py ... --outtype f16再用llama-quantize --pure ... Q4_0转换与编译等操作均须在smallthinker目录下完成。编译llama-cli目标以 x86 为例来自 smallthinker/README.mdcmake -S . -B build \ -DCMAKE_C_COMPILERclang-21 \ -DCMAKE_CXX_COMPILERclang-21 \ -DCMAKE_BUILD_TYPERelWithDebInfo \ -DGGML_OPENMPOFF -DLLAMA_CURLOFF \ -DBUILD_SHARED_LIBSOFF -DAZ_ENABLE_PERFETTOOFF \ -DPOWERINFER_NO_FFN_REPACKON -DPOWERINFER_WITH_TRACINGOFF \ -DGGML_CPU_AARCH64OFF cmake --build build --config RelWithDebInfo --target llama-cli -j32Unix 系系统Linux、macOS 等一次性输入提示one-and-done./llama-cli -m models/gemma-1.1-7b-it.Q4_K_M.gguf -no-cnv --prompt Once upon a time对话模式可持续与模型交互./llama-cli -m models/gemma-1.1-7b-it.Q4_K_M.gguf --chat-template gemma使用模型内置 jinja 聊天模板的对话模式./llama-cli -m models/gemma-1.1-7b-it.Q4_K_M.gguf --jinja使用 jinja 自定义 system prompt 起始提示的单轮查询./llama-cli -m models/gemma-1.1-7b-it.Q4_K_M.gguf --jinja --single-turn -sys You are a helpful assistant -p Hello无限生成可用Ctrl-C停止./llama-cli -m models/gemma-1.1-7b-it.Q4_K_M.gguf --ignore-eos -n -1Windows对应的 Windows 命令使用llama-cli.exe与反斜杠路径分隔符./llama-cli.exe -m models\gemma-1.1-7b-it.Q4_K_M.gguf -no-cnv --prompt Once upon a time ./llama-cli.exe -m models\gemma-1.1-7b-it.Q4_K_M.gguf --chat-template gemma ./llama-cli.exe -m models\gemma-1.1-7b-it.Q4_K_M.gguf --jinja ./llama-cli.exe -m models\gemma-1.1-7b-it.Q4_K_M.gguf --jinja --single-turn -sys You are a helpful assistant -p Hello llama-cli.exe -m models\gemma-1.1-7b-it.Q4_K_M.gguf --ignore-eos -n -1如果希望由程序直接从远程 URL 拉取模型可使用-mu/--model-url若通过-hf/--hf-repo指定 Hugging Face 仓库-m未给出时模型会自动保存到LLAMA_CACHE环境变量指定的路径或系统本地缓存中详见后文附加选项。常用参数以下是最常使用的参数默认值以 common/arg.cpp 中的参数解析器为准参数说明-m FNAME, --model FNAME指定 LLaMA 模型文件路径如models/gemma-1.1-7b-it.Q4_K_M.gguf若设置了--model-url则从其推断。底层写入params.model.path见 arg.cpp 的-m/--model定义。-mu MODEL_URL, --model-url MODEL_URL指定远程 http 下载地址程序会据此获取模型文件。-i, --interactive以交互模式运行允许直接输入并获得实时回复。-n N, --n-predict N设置生成时的预测 token 数量直接影响生成文本长度。-c N, --ctx-size N设置提示词上下文大小默认 4096若模型支持更长上下文调大该值可获得更好的长输入效果。-mli, --multiline-input允许多行输入/粘贴无需在每行结尾加\。-t N, --threads N生成时使用的线程数推荐设为物理 CPU 核心数。-ngl N, --n-gpu-layers N编译了 GPU 支持时将若干层卸载到 GPU 计算通常能提升性能。输入提示llama-cli提供了多种方式向模型提供输入--prompt PROMPT直接在命令行给出提示词。--file FNAME从文件读取提示词对应-f解析时读取文件内容并去掉末尾换行见 arg.cpp。--system-prompt PROMPT提供系统提示词否则使用聊天模板自带的默认系统提示若有。--system-prompt-file FNAME从文件读取系统提示词对应-sysf。--interactive-first以交互模式运行并立即等待输入详见下文。在 main.cpp 中提示词被 tokenize 后进入主循环若提示词 token 数超过n_ctx - 4程序会直接报错退出prompt is too long当输入为空且需要 BOS 时会自动补充 BOS token。交互模式llama-cli提供流畅的人机交互体验可通过--interactive或--interactive-first触发。在交互模式下生成过程中随时按CtrlC打断并输入自己的内容按Return提交给模型若要继续追加多行而不结束输入可在行尾加\再回车。单 token 的反向提示词检测与CtrlC打断逻辑都由 main.cpp 中的sigint_handler与主循环实现Unix 使用sigactionWindows 使用SetConsoleCtrlHandler。交互相关选项-i, --interactive交互模式实时对话或下达指令。--interactive-first交互模式并立即等待用户输入等价于先设置interactive见 main.cpp。-cnv, --conversation对话模式——不打印特殊 token 与前后缀使用默认或指定的聊天模板若检测到聊天模板默认开启。底层由COMMON_CONVERSATION_MODE_AUTO自动判定见 main.cpp。-no-cnv强制关闭对话模式默认 false。-st, --single-turn只处理一轮对话用户输入后退出。--jinja启用 jinja 聊天模板解析器使用模型内置模板或用户提供的模板默认 false。--color彩色输出区分提示、用户输入与生成文本。反向提示词Reverse Prompts反向提示词用于打造聊天式体验当生成文本中出现指定字符串时暂停生成并切回交互模式。-r PROMPT, --reverse-prompt PROMPT指定一个或多个反向提示词来暂停生成。例如-r User:可在轮到用户发言时切回对话。注意以空格结尾的反向提示词不生效因为会与后续输入连成一体难以精确匹配。从源码看主循环每次采样后会取最近 32 个 tokenn_prev 32拼接成字符串检查反向提示词是否出现在末尾非交互模式下还会多放宽 2 个字符的搜索窗口见 main.cpp。In-Prefix--in-prefix用于在输入前添加前缀最常见的用途是在反向提示词后补一个空格./llama-cli -r User: --in-prefix In-Suffix--in-suffix用于在输入后追加后缀典型场景是补上 Assistant: 提示。它会追加在自动添加到用户输入末尾的换行符\n之后./llama-cli -r User: --in-prefix --in-suffix Assistant:注意启用--in-prefix或--in-suffix时聊天模板--chat-template会被禁用参见 arg.cpp 与 main.cpp 中的提示日志。聊天模板Chat Templates--chat-template JINJA_TEMPLATE设置自定义 jinja 聊天模板。它接受字符串而非文件名默认取模型元数据中的模板。llama.cpp 仅支持若干预定义模板包括llama2、llama3、gemma、monarch、chatml、orion、vicuna、vicuna-orca、deepseek、command-r、zephyr等。示例--chat-template gemma。--chat-template-file FNAME从外部文件加载自定义 jinja 模板适合模型自带模板过时或不兼容的情况。模板字符串最终写入params.chat_template由common_chat_templates_init统一管理当模板可用时对话模式会自动开启可通过-no-cnv关闭见 main.cpp。上下文管理大模型的上下文长度有限只能看到一定数量的输入与生成 token。上下文填满时模型会内部重置可能丢失对话开头的信息或指令。上下文管理选项用于维持长对话的连贯性。上下文大小-c N, --ctx-size N设置提示上下文大小默认 40960表示从模型加载。若模型原生上下文更长增大该值可显著改善长输入/长推理效果。源码中低于 8 会被钳制为最小值 8见 main.cpp。扩展上下文部分微调模型通过对 RoPE 进行缩放来扩展上下文。例如原始预训练模型上下文为 40964k微调模型为 32k则缩放系数为 8——将--ctx-size设为 3276832k并配合--rope-scale 8即可。--rope-scale NN 为微调模型使用的线性缩放系数。底层实现是params.rope_freq_scale 1.0f / N见 arg.cpp另有--rope-scalingnone/linear/yarn、--rope-freq-base、--rope-freq-scale、--yarn-orig-ctx等扩展项可查阅--help。Keep Prompt--keep N指定模型重置内部上下文时从初始提示中保留的 token 数。默认 0不保留任何 token-1表示保留初始提示的全部 token。上下文耗尽时主循环会执行上下文滑动context shift保留n_keep个初始 token丢弃n_keep之后一半的 token并通过llama_kv_self_seq_rm/llama_kv_self_seq_add重排 KV 缓存后继续生成见 main.cpp。这正是-n -1无限生成得以跨越有限上下文窗口的机制。生成参数采样控制以下选项控制生成过程用于调节文本的多样性、创造性与质量。所有默认值均可在--help输出中核对。预测 token 数-n N, --predict N设置预测 token 数默认-1-1 无限-2 直到上下文填满。-1会开启无限生成上下文填满后--keep保留的 token 之后的一半旧 token 会被丢弃上下文必须重新评估才能继续生成——在大模型或大上下文窗口上会造成明显的停顿。若不想停顿用-2让生成在上下文填满时立即停止。--no-context-shift可关闭无限生成时的上下文滑动一旦有限窗口填满即停止。需要注意生成的文本可能短于指定 token 数——遇到 End-of-SequenceEOStoken 或反向提示词时会提前停止。交互模式下暂停并把控制权交还用户非交互模式下程序结束。若希望模型永不自行输出 EOS可用--ignore-eos等价于--logit-bias EOS-inf见 arg.cpp。温度Temperature--temp N调整生成文本的随机性默认 0.8。温度影响模型输出 token 的概率分布温度越高如 1.5输出越随机、越有创造性越低如 0.5越聚焦、确定、保守。默认 0.8 是随机性与确定性的平衡点。极端情况下温度 0 每次都选取概率最大的 token多次运行结果完全一致。示例--temp 0。源码会对该值做max(0, value)钳制见 arg.cpp。重复惩罚Repeat Penalty--repeat-penalty N控制生成文本中 token 序列的重复程度默认 1.01.0 禁用。--repeat-last-n N考虑惩罚重复的最近 token 数默认 640 禁用-1 ctx-size。repeat-penalty越高如 1.5对重复的惩罚越强越低如 0.9越宽松默认 1 即不惩罚。repeat-last-n决定回看多远的生成历史来惩罚重复越大回看得越远0 禁用-1 等价于上下文大小。源码会校验该值不小于 -1见 arg.cpp。DRY 重复惩罚Dont Repeat YourselfDRY 采样通过在长上下文中依据 token 近期使用模式进行惩罚能有效减少重复文本即使跨很长的上下文也有效。--dry-multiplier NDRY 采样乘数默认 0.00.0 禁用。--dry-base NDRY 采样底数默认 1.75。--dry-allowed-length NDRY 采样允许长度默认 2。--dry-penalty-last-n NDRY 惩罚最近 n 个 token默认 -10 禁用-1 上下文大小。--dry-sequence-breaker STRING为 DRY 采样添加序列分隔符可多次使用以添加多个使用该选项会清空默认分隔符[\n, :, , *]若传none则完全不用分隔符。dry-multiplier控制 DRY 效果强度0.0 禁用越大影响越强常用推荐值 0.8。dry-base设置指数惩罚计算的底数越大对重复的惩罚越激进。dry-allowed-length设置不被惩罚的最大重复序列长度不超过该长度的短重复常见词、短语不惩罚。dry-penalty-last-n控制应用 DRY 惩罚时考虑多少近期 token-1 考虑整个上下文。dry-sequence-breaker中断序列匹配将输入拆分为可分段匹配的片段。DRY 采样提供了更精细的生成控制尤其擅长减少长程重复、维持全局连贯性。示例--dry-multiplier 0.8 --dry-base 1.75 --dry-allowed-length 2 --dry-penalty-last-n -1 --dry-sequence-breaker — --dry-sequence-breaker ##dry-sequence-breaker使用时会清空默认分隔符的逻辑由 arg.cpp 实现。Top-K 采样--top-k N仅从概率最高的 K 个 token 中选择下一个 token默认 40。Top-K 有助于降低生成低概率或无意义 token 的风险但也可能限制输出多样性。值越大如 100考虑的 token 越多、文本更多样越小如 10越保守。示例--top-k 30。Top-P 采样Nucleus Sampling--top-p N从累积概率达到阈值 P 的 token 子集中采样默认 0.9。Top-P 在多样性与质量之间取得平衡。值越大如 0.95输出越多样越小如 0.5越聚焦保守。示例--top-p 0.95。Min-P 采样--min-p N为 token 选择设置最小基础概率阈值默认 0.1。Min-P 被设计为 Top-P 的替代方案兼顾质量与多样性。参数p表示 token 被考虑所需的最小概率相对最可能 token 的概率。例如p0.05、最可能 token 概率为 0.9 时logit 低于 0.045 的 token 会被过滤。示例--min-p 0.05。局部典型采样Locally Typical Sampling--typical N启用参数为 p 的局部典型采样默认 1.01.0 禁用。局部典型采样通过采样符合周边上下文预期的 token 来促进上下文连贯且多样的文本。p 介于 0 与 1 之间越接近 1 越偏向上下文连贯越接近 0 越多样等于 1 时禁用。示例--typical 0.9。Mirostat 采样--mirostat N启用 Mirostat 采样控制生成过程中的困惑度默认 00 禁用1 Mirostat2 Mirostat 2.0。--mirostat-lr NMirostat 学习率参数 eta默认 0.1。--mirostat-ent NMirostat 目标熵参数 tau默认 5.0。Mirostat 在生成过程中主动把文本质量维持在期望区间内避免因过度重复boredom traps或前后不一致confusion traps导致的低质量输出。学习率 eta 影响算法对生成文本反馈的响应速度越小调整越慢越大越灵敏。目标熵 tau 即期望的困惑度越低文本越聚焦连贯越高越多样可能连贯性下降。示例--mirostat 2 --mirostat-lr 0.05 --mirostat-ent 3.0。XTC 采样Exclude Top Choices--xtc-probability N设置移除 token 的概率在采样器启动时检查一次默认 0.0。--xtc-threshold N设置被移除 token 的最小概率阈值默认 0.1。XTC 是一种独特的采样器以xtc-probability的概率寻找概率达到xtc-threshold的 token然后移除其中除最小概率那个之外的所有 token。通过移除高概率 tokenXTC 能提升回答多样性、打破写作陈词滥调、抑制重复陈词与重复短语通常概率更高保留阈值以上的最后一个 token 则保证回答仍然连贯。XTC 面向创作类任务默认关闭实验性。推荐的组合是 Min-P 后接 XTC--sampling-seq mx --min-p 0.02 --xtc-probability 0.5。示例--xtc-probability 0.5 --xtc-threshold 0.1。Top-nσ 采样--top-nsigma N限制在 softmax 之前的 logits 中、与最大 logit 相差不超过 n·σ 的 token 子集内采样默认 -1-1 禁用。Top-nσ 直接在预 softmax logits 上按统计阈值筛选 token不依赖温度缩放即可维持稳定的采样空间在高温下做推理任务reasoning表现良好无需复杂概率操作即可高效过滤 token。值越大如 5纳入的噪声 token 越多越小如 1越聚焦信息量高的区域。示例--top-nsigma 1。Logit Bias-l TOKEN_ID(/-)BIAS, --logit-bias TOKEN_ID(/-)BIAS修改指定 token 在生成补全中出现的可能性。可以手动提高或压低特定 token 的概率。例如--logit-bias 150431提高 token Hello 的出现概率--logit-bias 15043-1降低用负无穷--logit-bias 15043-inf可确保 Hello 永不出现。一个实用场景LLaMA 推理中常出现 LaTeX 代码可用-l 29905-inf把\token29905设为负无穷从而禁止生成\code{begin}、\code{end}这类内容。示例--logit-bias 29905-inf。解析逻辑在 arg.cpp按token 符号 数值格式解析并乘以符号。RNG 种子-s SEED, --seed SEED设置随机数生成器RNG种子默认 -1-1 随机种子。固定种子可让相同输入与设置的多轮运行产生一致、可复现的结果便于测试、调试或对比不同选项何时分叉。种子小于 0 时使用随机种子每次运行输出不同。采样链的源码级说明以上采样器并非各自独立生效而是组成一条采样链按序执行。默认链与各采样器字符、规范名称的映射定义在 common/sampling.cpp 与 common/arg.cpp--samplers name1;name2;...按名称分号分隔指定采样链支持dry、top_k、top_p、top_n_sigma、typ_p、min_p、temperature、xtc、infill、penalties等规范名也接受top-k、nucleus、typical、temp等别名。--sampling-seq/--sampler-seq SEQUENCE按单字符缩写指定简化采样链如mx表示 min_p → xtc。主循环每次生成时调用common_sampler_sample得到 token、再调用common_sampler_accept更新采样器状态启动时还会打印sampler chain供确认见 main.cpp。性能调优与内存选项以下选项用于改善模型运行的性能与内存占用可按机器能力精细调节。线程数-t N, --threads N生成时的线程数。推荐设为物理核心数而非逻辑核心数用对线程数能大幅提升性能。源码中若传 0 或负数会自动回退到hardware_concurrency()见 arg.cpp。-tb N, --threads-batch N批处理/提示词处理阶段的线程数。某些系统上批处理用更多线程更有利未指定时与生成线程数相同。Mlock--mlock将模型锁定在内存中防止内存映射后被换出。可提升性能但代价是占用更多 RAM模型需整载入内存加载时间可能变慢并部分失去内存映射的优势。关闭内存映射--no-mmap不对模型做内存映射。默认模型按需映射进内存系统只加载需要的部分。若模型大于总内存、或系统内存紧张mmap 可能增加页换出pageout风险。关闭 mmap 加载更慢但在未使用--mlock时可能减少换出。若模型大于总内存关闭 mmap 会导致模型完全无法加载。NUMA 支持--numa distribute将等量线程固定到每个 NUMA 节点上的核心负载散布到所有核心、利用全部内存通道代价是跨节点访问需要走慢速互联。--numa isolate把全部线程固定到程序启动所在的 NUMA 节点限制可用核心与内存但保证所有内存访问都在本节点内。--numa numactl按启动时通过 numactl 工具传入的 CPU 映射固定线程最灵活——例如用满第一个节点全部核心、在第二个节点只放足以饱和跨节点内存总线的核心数。这些标志尝试针对非一致内存访问NUMA系统做优化当前包含上述三种策略之一并会关闭 mmap 的预取与预读页面在首次访问时按需调入配合线程固定更多页面落在实际使用的 NUMA 节点上。注意若模型已在系统页缓存中如之前未加该选项运行过除非先清页缓存否则效果甚微——可重启系统或在 Linux 上以 root 执行echo 3 /proc/sys/vm/drop_caches。批大小-ub N, --ubatch-size N物理批大小单次最多并行处理的 token 数。增大可提升提示词处理性能但内存占用更高。默认512。-b N, --batch-size N逻辑批大小。在使用多 GPU 流水线并行时增大到超过物理批大小可提升提示词处理性能。默认2048。主循环按n_batch分批调用llama_decode处理 token见 main.cpp。提示缓存Prompt Caching--prompt-cache FNAME指定文件缓存初始提示处理后的模型状态。使用长提示时能显著加快启动速度首次运行创建该文件后续运行复用并更新。注意恢复缓存并不等于恢复保存时的精确会话状态因此即使指定了种子也无法保证与原始生成得到完全相同的 token 序列。源码层面启动时若缓存文件存在则通过llama_state_load_file载入并比对与当前提示的 token 匹配度低于一半匹配时会提示将大部分重新评估首次采样后通过llama_state_save_file保存见 main.cpp。相关变体--prompt-cache-all连用户输入与生成也存入缓存、--prompt-cache-ro只读缓存、不更新。语法约束Grammars 与 JSON Schema--grammar GRAMMAR, --grammar-file FILE以内联字符串或文件形式指定 GBNF 语法把模型输出约束到特定格式——例如强制输出 JSON或只允许说 emoji。语法细节参见 smallthinker/grammars/README.mdGBNF 指南可直接用./llama-cli -m model --grammar-file grammars/some-grammar.gbnf -p Some prompt试玩仓库 smallthinker/grammars 目录下有json.gbnf、list.gbnf、c.gbnf等现成示例。--json-schema SCHEMA指定 JSON Schema 约束输出如{}表示任意 JSON 对象或{items: {type: string, minLength: 10, maxLength: 100}, minItems: 10}表示带长度/数量约束的 JSON 字符串数组。若 Schema 含外部$ref应改用--grammar $( python examples/json_schema_to_grammar.py myschema.json )。底层由 arg.cpp 调用json_schema_to_grammar即时把 Schema 编译为 GBNF 语法。量化4-bit 量化可显著提升性能并降低内存占用相关准备与量化流程请参考本仓库 smallthinker/README.md其中给出了llama-quantize --pure ... Q4_0的转换命令并注明 SmallThinker 稀疏模型需使用 Q4_0 量化、最多 8 线程运行。LoRA低秩适配适配器--lora FNAMELoRA 适配器路径缩放系数 1.0。可与--lora-scaled混用可重复出现以叠加多个适配器。--lora-scaled FNAME带自定义缩放系数的 LoRA 适配器路径可与--lora混用并重复。用法示例--lora my_adapter_1.gguf --lora my_adapter_2.gguf ... --lora-scaled lora_task_A.gguf 0.5 --lora-scaled lora_task_B.gguf 0.5要点LoRA 适配器必须为GGUF 格式Hugging Face 格式可用仓库根目录的convert_lora_to_gguf.py脚本转换参见 smallthinker/convert_lora_to_gguf.py。适配器在推理时单独加载并应用不与主模型合并因此使用 LoRA 时仍可完全支持 mmap 模型加载。旧版--lora-base标志已移除因为不再执行合并。源码中每个适配器以{路径, 缩放系数}记录到params.lora_adapters模型初始化时统一应用见 arg.cpp 与 main.cpp 的 load the model and apply lora adapter 流程。附加选项-h, --help显示全部可用选项及默认值。参数与默认值变化频繁文档可能滞后以--help输出为准。--verbose-prompt生成前打印详细提示词含逐 token 拆解见 main.cpp。--no-display-prompt生成时不打印提示词。-mg i, --main-gpu i多 GPU 时指定哪个 GPU 承载小张量跨 GPU 拆分收益不划算的部分。该 GPU 会多占一点显存做临时结果的 scratch buffer。默认 GPU 0。-ts SPLIT, --tensor-split SPLIT多 GPU 时指定大张量在各 GPU 间的拆分比例。SPLIT为逗号分隔的非负值序列按顺序给每块 GPU 分配数据比例例如3,2表示 GPU 0 分 60%、GPU 1 分 40%。默认按显存比例拆分但未必是最优性能方案。-hfr URL --hf-repo URLHugging Face 模型仓库地址配合--hf-file-hff使用。模型会下载并保存到-m/--model指定的文件若未提供-m则自动保存到LLAMA_CACHE环境变量路径或系统本地缓存。仓库还支持-hf简写、user/model[:quant]形式quant 可选、默认 Q4_K_M、--hf-token等扩展见 arg.cpp。源码视角llama-cli 的完整调用链最后从实现层面串一遍llama-cli的完整工作流程便于理解上述参数如何落到推理路径上均位于 main.cpp参数解析common_params_parse(argc, argv, params, LLAMA_EXAMPLE_MAIN, print_usage)统一解析所有命令行参数失败即返回 1。后端初始化llama_backend_init()llama_numa_init(params.numa)随后common_init_from_params加载模型并应用 LoRA 适配器。线程池通过 ggml 后端动态注册的ggml_threadpool_new创建生成线程池与批处理线程池两者参数一致时可复用llama_attach_threadpool挂载到上下文。对话模式判定聊天模板可用时自动启用-cnv否则回退为普通补全模式。会话/提示缓存存在--prompt-cache文件时载入并与当前提示做前缀匹配尽量复用已计算的 KV。主生成循环按n_batch分批llama_decode→common_sampler_sample采样 →common_sampler_accept更新采样器与语法状态 → 检测反向提示词最近 32 token与 EOG token → 上下文满时执行 KV 滑动llama_kv_self_seq_rm/add→ 交互模式下读入用户输入并注入前缀/后缀。收尾common_perf_print打印性能统计释放采样器、线程池并调用llama_backend_free()。正因如此llama-cli既适合脚本化的批量补全-no-cnv -p也适合本地对话式交互--jinja/--chat-template/-r反向提示词还可以配合 smallthinker/grammars 做结构化输出约束是本仓库本地部署推理最直接的命令行入口。赞分享人工智能大模型推理引擎本地部署【免费下载链接】PowerInferHigh-speed Large Language Model Serving for Local Deployment项目地址https://gitcode.com/gh_mirrors/po/PowerInfer点击查看免费下载相关推荐PowerInfer smallthinker 微调实战基于 llama-finetune 与 GGML 的本地 LLM 全参数微调指南PowerInfer smallthinker 微调实战基于 llama finetune 与 GGML 的本地 LLM 全参数微调指南 导读 本文围绕 sm人工智能大模型推理引擎本地部署PowerInfer smallthinker 实战使用 llama-gritlm 示例理解 GRIT 统一嵌入与文本生成模型PowerInfer smallthinker 实战使用 llama gritlm 示例理解 GRIT 统一嵌入与文本生成模型 导读 本文围绕 smallth人工智能大模型推理引擎本地部署PowerInfer smallthinker 最小示例解析用 llama-simple 跑通本地 LLM 文本生成全流程PowerInfer smallthinker 最小示例解析用 llama simple 跑通本地 LLM 文本生成全流程 llama simple 是 Po人工智能大模型推理引擎本地部署上一篇NS-USBLoader 使用教程Switch文件传输与系统管理全攻略下一篇Yew 服务端渲染SSR实战从 trunk 构建 hydration 包到 warp 服务器的完整流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考