此页面涵盖了 llama.cpp 存储库中提供的示例应用程序,这些应用程序演示了各种推理模式、模型使用场景和集成方法。这些应用程序可作为实现不同类型语言模型交互的实用参考,并展示了使用 llama.cpp 库的最佳实践。
有关核心 CLI 工具和服务器接口的信息,请参阅 命令行界面 和 HTTP 服务器。
llama.cpp 中的示例应用程序演示了四个主要的功能类别:
所有示例都共享来自 common/ 目录的公共基础设施,并遵循一致的初始化、参数处理和资源管理模式。
来源:common/common.h543-549 common/common.cpp888-1054 examples/embedding/embedding.cpp73-100 examples/speculative/speculative.cpp32-91
来源:examples/embedding/embedding.cpp73-83 examples/parallel/parallel.cpp155-200 common/common.cpp888-1054
嵌入示例演示了如何使用具有不同池化策略的语言模型来计算文本嵌入。
llama_batch 高效处理多个输入文本LLAMA_POOLING_TYPE_NONE、LLAMA_POOLING_TYPE_RANK)batch_decode() 函数处理核心的嵌入计算
来源:examples/embedding/embedding.cpp36-71 examples/embedding/embedding.cpp114-117 examples/embedding/embedding.cpp56-69
投机性解码示例演示了一种高级推理技术,该技术使用一个较小的草稿模型生成候选 token,然后由一个较大的目标模型进行验证。
seq_draft 结构处理多个草稿序列来源:examples/speculative/speculative.cpp18-30 examples/speculative/speculative.cpp240-366 examples/speculative/speculative.cpp367-380
并行示例模拟了一个具有多个并发客户端进行请求的服务器环境,以演示批处理推理功能。
每个客户端由一个 client 结构表示,该结构包含:
common_sampler 的采样上下文来源:examples/parallel/parallel.cpp105-131 examples/parallel/parallel.cpp275-300 examples/parallel/parallel.cpp250-268
save-load-state 示例演示了如何序列化和还原完整的模型状态,包括 KV 缓存、RNG 状态和 logits。
该示例执行三个关键操作:
来源:examples/save-load-state/save-load-state.cpp62-71 examples/save-load-state/save-load-state.cpp108-125 examples/save-load-state/save-load-state.cpp188-209
采样测试框架提供了对采样算法及其数值属性的全面验证。
名为 sampler_tester 的类提供了一个用于测试采样行为的框架。
llama_sampler 接口应用采样算法来源:tests/test-sampling.cpp64-73 tests/test-sampling.cpp86-95 tests/test-sampling.cpp139-159 tests/test-sampling.cpp161-182
所有示例都使用 common_params_parse() 进行一致的参数处理,并使用 common_init_from_params() 进行模型初始化。这为应用程序提供了标准化的选项。
示例遵循一致的资源清理模式
common_sampler_free() 或 llama_sampler_free() 释放采样器llama_batch_free() 释放批次common_init_result 中使用智能指针的 RAII 模式通用的错误处理模式包括
示例展示了几种优化技术
来源:common/common.cpp888-1054 common/common.h543-549 examples/embedding/embedding.cpp333-335 examples/parallel/parallel.cpp333-350