ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

PowerInfer 小模型推理利器:llama-run 极简命令行推理器的完整使用指南

PowerInfer 小模型推理利器:llama-run 极简命令行推理器的完整使用指南 人工智能大模型推理引擎本地部署【免费下载链接】PowerInferHigh-speed Large Language Model Serving for Local Deployment项目地址https://gitcode.com/gh_mirrors/po/PowerInfer点击查看免费下载llama-run是 PowerInfer 仓库中smallthinker工具集提供的一款极简 LLM 推理命令行工具它演示了 llama.cpp 体系中最精简的模型加载、上下文创建与文本生成流程。它最大的特色是无需事先下载模型既可以通过hf://、ollama://、ms://、https://等协议直接远程拉取 GGUF 模型也可以加载本地文件并自动进入交互式对话。读完本文你将掌握 llama-run 的全部命令行参数、模型定位规则、自动下载原理、交互式聊天与流水线输入用法以及其背后的源码级调用链。一、llama-run 是什么llama-run定义于 smallthinker/tools/run/README.md其定位非常明确The purpose of this example is to demonstrate a minimal usage of llama.cpp for running models.它是一个展示 llama.cpp 最小化用法的示例级工具入口源码为 smallthinker/tools/run/run.cpp核心实现只有一个文件外加行编辑库 linenoise.cpp/linenoise.cpp总代码量约 1260 行。与examples/main、server等大型示例不同llama-run 砍掉了复杂的参数体系只保留对话推理最必需的能力非常适合作为学习 llama.cpp 推理管线的入门范本也适合快速验证任意 GGUF 模型在本地能否正常跑通。从构建体系看smallthinker/tools/CMakeLists.txt 通过add_subdirectory(run)将其纳入 CMake 构建smallthinker/Makefile 也将其列为llama-run构建目标。最终产物为可执行文件llama-run编译要求 C17见 tools/run/CMakeLists.txt。二、快速开始一行命令跑通推理最简用法只需指定模型名即可llama-run granite3-moe如果模型名不带协议前缀llama-run 会按规则自动推断来源若本地存在同名文件则按file://处理否则按ollama://处理详见后文模型定位规则。因此这条命令实际等价于从 Ollama 注册表拉取并运行granite3-moe。完整命令行形态为llama-run [options] model [prompt]model必填模型标识符支持多种协议前缀见后文prompt可选若提供则作为单次对话的用户输入若不提供则进入交互式聊天模式。三、命令行参数详解llama-run 的参数极其精简完整清单如下与 run.cpp 的 print_help 保持一致参数含义默认值-c, --context-size value上下文窗口大小2048--chat-template-file path指定包含聊天模板的文件仅支持 Jinja 模板指定后自动隐含--jinja无--jinja使用模型的 Jinja 聊天模板关闭-n, -ngl, --ngl value卸载到 GPU 的层数0纯 CPU--temp value采样温度0.8-t, --threads value生成时使用的线程数由库默认参数决定-v, --verbose, --log-verbose将日志级别提升到无穷输出全部日志便于调试关闭-h, --help显示帮助信息-几点值得注意的细节均可从 run.cpp 的Opt类源码验证-n与--ngl是同义词在parse_options_with_valuerun.cpp中-n、-ngl、--ngl三个短长选项名均解析为 GPU 层数ngl而不是生成 token 数量这与很多其他工具中-n表示生成数量不同需特别注意。默认值并非写死的字面量Opt::initrun.cpp中上下文大小默认值取自llama_context_default_params().n_batchGPU 层数默认值取自llama_model_default_params().n_gpu_layers温度默认值取自common_params_sampling结构体的temp字段。README 中展示的2048 / 0 / 0.8即当前库默认参数的实际数值。参数解析的边界行为--之后的参数全部按位置参数处理parse_options中strcmp(argv[i], --)分支run.cpp位置参数最多两个第一个为model第二个及之后的内容拼接为userprompt多段文字以空格连接run.cpp。若未提供任何参数程序会打印错误与帮助信息并退出run.cpp。四、模型定位规则与自动下载这是 llama-run 最具特色的能力无需预先下载模型文件工具内置多来源拉取逻辑。模型字符串支持以下协议前缀解析逻辑见resolve_modelrun.cpp协议前缀含义huggingface://简写hf://以及hf.co/从 Hugging Face 拉取modelscope://简写ms://从 ModelScope 拉取ollama://从 Ollama 注册表拉取https:///http://直接下载指定 URLhttps://ollama.com/library/除外会回落到 Ollama 逻辑github:/github://从 GitHub 仓库 raw 文件拉取s3://从 AWS S3 拉取需要AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY环境变量走 AWS Signature V4 签名file://本地文件无协议前缀时的回退规则README 原文If no protocol is specified and a file exists in the specified path,file://is assumed, otherwise if a file does not exist in the specified path,ollama://is assumed.即先检查本地路径是否存在同名文件——存在则按本地文件加载不存在则回退为从 Ollama 注册表拉取。对应源码在 run.cpp。4.1 下载与断点续传.partial 机制README 明确说明了下载过程的一致性保障Models that are being pulled are downloaded with.partialextension while being downloaded and then renamed as the file without the.partialextension when complete.下载期间文件以.partial后缀落盘完成后原子重命名为正式文件名。源码中HttpClient::initrun.cpp实现了这一机制并包含两项工程化细节断点续传若.partial文件已存在通过CURLOPT_RESUME_FROM_LARGE从已有字节数继续下载set_resume_pointrun.cpp并发互斥下载期间对.partial文件加排他锁Windows 用LockFileExUnix 用flock(LOCK_EX | LOCK_NB)见File::lockrun.cpp避免多进程同时下载同一模型互相破坏终端进度条通过 libcurl 的CURLOPT_XFERINFOFUNCTION回调实时渲染百分比、进度条、已下载/总大小、速度与预计剩余时间run.cpp。4.2 各来源的底层实现Hugging Face / ModelScope二者共用dl_from_endpoint逻辑run.cpp。模型串有两种形态仅仓库名如QuantFactory/SmolLM-135M-GGUF时会先请求{endpoint}v2/{model}/manifests/{tag}获取 manifest从manifest[ggufFile][rfilename]取出 GGUF 文件名再下载{endpoint}{repo}/resolve/main/{file}若模型串中带文件名第二段包含/则直接拼接下载。HF 端点默认https://huggingface.co/可通过环境变量MODEL_ENDPOINT兼容旧变量HF_ENDPOINT覆盖见 common.cpp 的get_model_endpoint()。Ollama裸模型名会自动补library/前缀如llama3→library/llama3支持ollama://smollm:135m这样的:tag语法冒号解析在extract_model_and_tagrun.cpp。实现上请求https://registry.ollama.ai/v2/{model}/manifests/{tag}从 manifest 的layers中筛选mediaType application/vnd.ollama.image.model的层取其digest拼出 blob 下载地址ollama_dlrun.cpp。GitHub支持github://org/projectbranch/path/to/file.gguf形式之后为分支名默认main最终拼出https://raw.githubusercontent.com/...直链github_dlrun.cpp。S3解析bucket/key使用环境变量中的 AWS 凭证生成 SigV4 授权头后下载s3_dlrun.cpp。4.3 依赖 libcurl 的构建前提远程下载依赖 libcurl。构建选项LLAMA_CURL默认开启见 smallthinker/CMakeLists.txttools/run/CMakeLists.txt 会在开启时查找 CURL 并定义LLAMA_USE_CURL宏common/CMakeLists.txt 也有同样逻辑。若未找到 CURL 会直接报错并提示-DLLAMA_CURLOFF可关闭该特性——但关闭后resolve_model中的download分支会退化为打印 built without libcurl, downloading from an url not supportedrun.cpp即远程拉取功能不可用仅剩本地文件加载。需要远程模型时请确保 libcurl 开发库已安装。五、两种运行模式单次问答与交互式聊天5.1 单次问答在model后追加 prompt 即为单轮模式模型回答完成后进程退出llama-run --ngl 999 some-file4.gguf llama-run --ngl 999 some-file5.gguf Hello World第二行示例中--ngl 999将尽可能多的层卸载到 GPU999 超过实际层数即表示全部Hello World作为用户输入送入模型。5.2 交互式聊天不带 prompt 时进入 REPL 循环chat_looprun.cpp提示符默认是可通过环境变量LLAMA_PROMPT_PREFIX自定义run.cppUnix 平台使用 linenoise 提供行编辑与历史记录linenoiseHistoryAddrun.cpp输入/bye退出会话run.cpp输入空行会忽略并继续等待run.cpp每轮对话都会把用户消息与助手回复追加进消息列表并只对新增部分应用聊天模板process_user_message中通过prev_len/new_len截取增量 promptrun.cpp保证长对话中历史 token 不被重复计算这是性能友好的关键设计。5.3 流水线输入stdin 管道llama-run 还支持标准输入管道当 stdin 不是终端时如echo ... | llama-run modelmain会把管道数据整体读入并作为用户输入run.cpp便于脚本化调用。六、源码级运行链路从模型加载到 token 流式输出llama-run 的推理管线完整覆盖了 llama.cpp 的标准流程非常适合作为研读范本。核心都在 run.cpp 的LlamaData类与generate函数中后端加载与模型解析initialize_modelrun.cpp先调用ggml_backend_load_all()加载所有可用后端再经resolve_model解析/下载模型最后llama_model_load_from_file加载 GGUF 文件上下文创建initialize_contextrun.cpp通过llama_init_from_model创建llama_context并沿用-c指定的上下文大小ctx_params.n_batch n_ctx context_sizerun.cpp采样器链构建initialize_samplerrun.cpp固定使用三段采样器链——min_p(0.05f)过滤低概率 token →temp(opt.temperature)温度缩放 →dist(LLAMA_DEFAULT_SEED)概率分布采样。可见除了--tempmin-p 阈值 0.05 是内置的固定策略聊天模板应用chat_loop中common_chat_templates_init从模型 vocab 初始化模板apply_chat_template调用common_chat_templates_apply见 common/chat.cpp——根据use_jinja标志选择 Jinja 路径common_chat_templates_apply_jinja或传统{{ }}路径common_chat_templates_apply_legacy。通过--jinja或--chat-template-file可强制启用 Jinja 模板后者还会把指定文件内容作为模板源见read_chat_template_filerun.cpptokenizetokenize_promptrun.cpp先调用llama_tokenize两次第一次取长度、第二次填数据并利用llama_kv_self_seq_pos_max判断是否为序列首个 token 以启用特殊 token 解析解码循环generaterun.cpp以llama_batch_get_one构造 prompt batch循环执行llama_decode前先做check_context_size防溢出run.cpp随后llama_sampler_sample采样下一个 tokenllama_vocab_is_eog判断是否到达结束符eos等否则经llama_token_to_piece转回文本并逐 token 流式打印print_word_and_concatenate_to_responserun.cpp日志控制llama_log_set(log_callback, ...)注册回调run.cpp仅在-v开启或错误级别时输出日志run.cpp。另外main开头注册了 Ctrl-C 处理器ctrl_c_handlingrun.cpp在 Unix 和 Windows 上都能保证中断时干净退出。七、官方示例速查README 附带的完整示例均可直接运行llama-run llama3 llama-run ollama://granite-code llama-run ollama://smollm:135m llama-run hf://QuantFactory/SmolLM-135M-GGUF/SmolLM-135M.Q2_K.gguf llama-run huggingface://bartowski/SmolLM-1.7B-Instruct-v0.2-GGUF/SmolLM-1.7B-Instruct-v0.2-IQ3_M.gguf llama-run ms://QuantFactory/SmolLM-135M-GGUF/SmolLM-135M.Q2_K.gguf llama-run modelscope://bartowski/SmolLM-1.7B-Instruct-v0.2-GGUF/SmolLM-1.7B-Instruct-v0.2-IQ3_M.gguf llama-run https://example.com/some-file1.gguf llama-run some-file2.gguf llama-run file://some-file3.gguf llama-run --ngl 999 some-file4.gguf llama-run --ngl 999 some-file5.gguf Hello World其中llama3与some-file2.gguf两条展示了无协议前缀时的回退规则前者回退 Ollama后者命中本地文件hf://与huggingface://、ms://与modelscope://互为同义写法。八、小结llama-run 以极少的参数面覆盖了取模型—建上下文—聊天生成的完整闭环是 PowerInfer 工具集中验证模型、快速试跑和入门 llama.cpp 源码的轻量入口。其核心价值有三一是模型即服务的 URL 解析体系支持 HF / ModelScope / Ollama / GitHub / S3 多源自动拉取并内置断点续传二是增量聊天模板设计长对话中只计算新增内容三是仅约 1260 行源码即可完整呈现 llama.cpp 推理主链路从llama_model_load_from_file到llama_decode、llama_sampler_sample的每一步都可直接对照阅读。深入实现可继续查阅 run.cpp、common/chat.cpp 与 common/common.cpp。赞分享人工智能大模型推理引擎本地部署【免费下载链接】PowerInferHigh-speed Large Language Model Serving for Local Deployment项目地址https://gitcode.com/gh_mirrors/po/PowerInfer点击查看免费下载相关推荐PaddleSpeech 命令行 ASR 离线推理执行器ASRExecutor源码与使用完全指南PaddleSpeech 命令行 ASR 离线推理执行器ASRExecutor源码与使用完全指南 本指南以 PaddleSpeech 官方 API 文档 p人工智能语音音频llama-cli 全参数使用指南基于 PowerInfer SmallThinker 仓库的本地大模型推理入口llama cli 全参数使用指南基于 PowerInfer SmallThinker 仓库的本地大模型推理入口 导读 本文以 PowerInfer 仓库中人工智能大模型推理引擎本地部署llama.cpp 极简推理示例用 llama-simple 完成一次完整的 GGUF 模型文本生成llama.cpp 极简推理示例用 llama simple 完成一次完整的 GGUF 模型文本生成 本文以 llama.cpp 仓库中最精简的推理示例 ex人工智能大模型模型推理服务推理引擎本地部署后端上一篇老华为手机Bootloader解锁用开源PotatoNV免费拿码下一篇ncmdump教程三步把网易云NCM音乐转成可播放的MP3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表