Appearance
项目概览与构建系统 — 练习
练习 1:从源码编译 llama.cpp
将 llama.cpp 克隆到本地,使用 CMake 编译一个仅 CPU 后端的版本:
bash
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j$(nproc)验证编译产物:确认 llama-cli 和 llama-server 已生成。
参考答案
编译完成后,在 build/bin/ 目录下应能找到:
llama-cli— 命令行推理工具llama-server— OpenAI 兼容 API 服务器
可以运行 ./build/bin/llama-cli --help 验证是否正常工作。
练习 2:梳理模块依赖关系
阅读 CMakeLists.txt,画出 ggml → llama → tools 的依赖链。思考:
llama库链接了哪些ggml的子库?llama-server相比llama-cli多依赖了什么?
参考答案
依赖链:
ggml(核心张量) +ggml-base+ggml-cpu(+ 可选ggml-cuda/ggml-metal)llama链接上述 ggml 子库llama-cli链接llama+commonllama-server额外链接 HTTP 库(如 libcurl)、JSON 解析等
在 tools/server/CMakeLists.txt 中可以看到 server 的额外依赖。
练习 3:探索 C API 的生命周期
阅读 include/llama.h,列出一次完整推理调用的 API 调用顺序(从模型加载到 token 生成)。
参考答案
完整生命周期:
llama_model_default_params()— 获取默认模型参数llama_model_load_from_file()— 加载 GGUF 模型llama_context_default_params()— 获取默认上下文参数llama_init_from_model()— 创建推理上下文llama_tokenize()— 文本转 tokenllama_batch_get_one()— 创建 batchllama_decode()— 执行前向传播llama_sampler_chain_init()— 创建采样器链llama_sampler_chain_add()— 添加采样器llama_sampler_sample()— 采样下一个 tokenllama_token_to_piece()— token 转文本- 重复 6-11 直到生成结束
llama_sampler_free()/llama_free()/llama_model_free()— 清理
拓展挑战
- 编译 CUDA 后端并在 GPU 上运行推理
- 使用
llama-bench对比不同量化级别的性能 - 阅读
examples/simple/simple.cpp理解最小推理示例