news 2026/9/14 2:55:38

llama2.c 如何导出 Code Llama 并指定自定义 tokenizer 完成推理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
llama2.c 如何导出 Code Llama 并指定自定义 tokenizer 完成推理

llama2.c 如何导出 Code Llama 并指定自定义 tokenizer 完成推理

【免费下载链接】llama2.cInference Llama 2 in one file of pure C项目地址: https://gitcode.com/GitHub_Trending/ll/llama2.c

如果你已经拿到 Meta 发布的 Code Llama 7B 权重,想在本仓库 llama2.c 里用纯 C 的run.c推理引擎跑它,需要完成三件事:把 Meta 格式的 checkpoint 导出为 llama2.c 能读取的.bin文件、为 Code Llama 构建对应的 tokenizer.bin文件、再在推理时通过-z参数把两者接起来。README 明确说明:Code Llama 的推理支持不完整,plain 和 instruct 两个变体都必须构建自己的 tokenizer 并在推理时传入,否则 C 端会默认加载仓库自带的 Llama 2 tokenizer(run.c 中tokenizer_path默认值为tokenizer.bin)。

准备条件

  1. Code Llama 权重:先按 README「Meta's Llama 2 models」一节的流程从 Meta 官方渠道获取 checkpoint,得到一个包含params.jsonconsolidated.*.pth分片文件的目录,后文用/path/to/CodeLlama-7b指代该目录(export.py 的load_meta_model正是读取params.json并按consolidated.*.pth排序加载的)。
  2. Python 依赖
pip install -r requirements.txt
  1. 编译 C 推理程序
make run

该目标会编译出run(float32 前向)和runq(int8 量化版)两个可执行文件。大模型推理更推荐 Makefile 中的 OpenMP 目标(如make runomp),本文主路径使用make run

导出 Code Llama 7B 权重

python export.py codellama2_7b.bin --meta-llama /path/to/CodeLlama-7b

要点:

  • 第一个参数是输出文件名,导出完成后codellama2_7b.bin出现在当前目录。
  • --meta-llama指向 Meta 格式 checkpoint 所在目录;--checkpoint(本仓库训练出的.pt文件)和--hf(Hugging Face 目录)二选一互斥,本场景用--meta-llama
  • 不加--version时默认按 version 0 的 float32 格式导出。README 中 7B 模型(llama2_7b)的同类导出约需 10 分钟、生成 26GB 文件(7B 权重的 float32 体积),Code Llama 7B 是同一量级,导出前确认磁盘空间。

构建 Code Llama 的 tokenizer

Code Llama 不能直接复用仓库默认的 Llama 2 tokenizer,需要把 checkpoint 目录里自带的 sentencepiecetokenizer.model转换成 C 端可加载的.bin

python tokenizer.py --tokenizer-model=/path/to/CodeLlama-7b/tokenizer.model

tokenizer.py 会先断言--tokenizer-model指向的文件存在,加载 sentencepiece 模型后,把.model同目录同名的tokenizer.bin写出。所以上面执行完,产物路径就是/path/to/CodeLlama-7b/tokenizer.bin,正好对应 README 里推理命令用的路径。

这一步是 README 的硬性要求:"Make sure to build the tokenizer for the plain and instruct variants and pass it when doing inference."

运行推理

./run codellama2_7b.bin -z /path/to/CodeLlama-7b/tokenizer.bin
  • -z指定自定义 tokenizer 路径(run.c 帮助文本:-z <string> optional path to custom tokenizer)。不带-z时加载默认 Llama 2 tokenizer,README 的 custom tokenizers 一节说明此时模型输出的整数序列会用错误的词表翻译成文本,看起来是乱码。
  • 可叠加采样参数控制输出,例如:
./run codellama2_7b.bin -z /path/to/CodeLlama-7b/tokenizer.bin -t 0.8 -n 256 -i "def sort(arr):"

README 建议的采样参数是 temperature 1.0(默认)配合 top-p 0.9(默认),即-t 1.0 -p 0.9;调节多样性时建议温度与 top-p 二者只动一个。

结果验证

  • 推理正常时,终端会流式打印采样出的文本。
  • 如果-z路径写错,run.cbuild_tokenizer会打印couldn't load <path>并直接退出,这是检查 tokenizer 路径最直接的信号。
  • 注意 README 的已知限制:Code Llama 部分超参数与 Llama 2 不同(例如 RoPE 层的常量),"the inference is not exactly correct and a bit buggy right now",即输出正确性不保证完全一致,属于文档明示的当前状态,不是导出流程做错了。

可选分支:Code Llama Instruct 对话模式

instruct 变体需要单独导出并构建自己的 tokenizer,然后用-m chat进入对话模式:

python export.py codellama2_7b_instruct.bin --meta-llama /path/to/CodeLlama-7b-Instruct python tokenizer.py --tokenizer-model=/path/to/CodeLlama-7b-Instruct/tokenizer.model ./run codellama2_7b_instruct.bin -m chat -z /path/to/CodeLlama-7b-Instruct/tokenizer.bin

限制与边界

  • 不要尝试 7B 以上:README 说明 13B+ 因指针运算的整型流转目前跑不通,且本仓库只做 float32 推理,更大模型即使能加载也基本不可用。
  • 量化路径不适用于本场景的默认导出:--version 2的 Q8_0 导出配合 runq.c 使用,README 给出的 Code Llama 命令未包含量化版本。
  • 编译加速、OpenMP 线程数等属于性能话题,可按 README 的 performance 一节单独处理,不影响本文的导出与推理主路径。

【免费下载链接】llama2.cInference Llama 2 in one file of pure C项目地址: https://gitcode.com/GitHub_Trending/ll/llama2.c

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 2:55:35

Python文件操作与异常处理实战指南

1. Python文件操作实战指南文件操作是Python编程中最基础也最重要的技能之一。让我们从最基础的打开文件开始&#xff0c;逐步深入到高级用法。1.1 文件打开模式详解Python的open()函数支持多种模式&#xff0c;每种模式都有其特定用途&#xff1a;# 基本读写模式 file open(e…

作者头像 李华
网站建设 2026/9/14 2:53:28

Argo CD v3.4 到 v3.5 升级指南:Breaking Changes 全解析与迁移实践

Argo CD v3.4 到 v3.5 升级指南&#xff1a;Breaking Changes 全解析与迁移实践 【免费下载链接】argo-cd Declarative Continuous Deployment for Kubernetes 项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd 导读 本文基于仓库中的官方升级文档 3.4-3.5.m…

作者头像 李华
网站建设 2026/9/14 2:52:02

国产文件传输方案如何解决FTP三大痛点?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 2:50:30

车载CAN-LIN网关OTA升级实战:协议转换与刷写可靠性设计

1. 项目概述&#xff1a;为什么一个车载网关的刷写升级方案值得拆解到毫米级CAN-LIN网关不是一块简单的“翻译器”&#xff0c;它是整车电子电气架构里真正意义上的神经中枢——一边连着高速、高可靠性的CAN总线&#xff08;比如发动机控制单元ECU、ABS模块、仪表盘&#xff09…

作者头像 李华
网站建设 2026/9/14 2:50:22

去中心化微博链上数据模型:以太坊存哈希 + IPFS 存正文的架构实践

简介&#xff1a;基于以太坊的去中心化微博系统设计与实现资料包&#xff0c;面向计算机科学、软件工程、信息工程等专业学生&#xff0c;以及正在入门区块链应用开发的开发者。项目定位为毕业设计与课程设计参考&#xff0c;完整涵盖智能合约、前端界面与设计文档&#xff0c;…

作者头像 李华
网站建设 2026/9/14 2:49:26

Grok与Codex代码理解范式对比:架构差异决定Agent落地成败

1. 项目概述&#xff1a;一场关于“理解力”的硬核实测最近两周&#xff0c;我连续在三套不同规模的开发环境里跑通了 Grok 的本地推理链路——不是调 API&#xff0c;是真刀真枪从模型权重加载、Tokenizer 初始化、KV Cache 管理到响应流式输出全链路手调。标题里那句“强&…

作者头像 李华