项目快照:meta-llama/llama,约 59,627 个 Star,9,768 个 Fork;最新推送时间 2025-01-26T21:42:26Z。本文基于仓库公开资料撰写。

项目地址:https://github.com/meta-llama/llama

llama 从代码、运行环境到实践流程的项目封面
llama 的项目能力与实践流程示意。

项目速览(TL;DR)

llama 是 Meta 发布的 Llama 推理代码仓库,README 将其定位为加载 Llama 2 模型并运行推理的最小示例。仓库资料同时明确标注该项目已弃用,并建议后续开发转向 Llama Stack 相关仓库;因此,评估它时应把“理解旧版 Llama 2 推理流程”和“启动新项目”区分开。

README 所述模型覆盖 7B、13B、70B 参数规模,提供预训练模型与微调对话模型的示例。仓库元信息显示默认分支为 main、主要语言为 Python、Star 数为 59627、Fork 数为 9768;这些数字是提供的仓库资料中的快照,不代表实时统计。

项目项资料所示内容阅读时的含义
项目描述Inference code for Llama models重点在模型推理示例,不是完整的训练或托管平台。
README 当前状态标注 Deprecated新开发应先查看 README 推荐的后续仓库。
README 主要对象Llama 2快速开始命令面向 Llama 2 检查点和分词器。
运行入口示例example_chat_completion.py、example_text_completion.py分别展示对话补全与文本续写路径。
许可证元信息NOASSERTION不能仅凭元信息判定许可;应阅读仓库中的 LICENSE。

定位与目标用户

该仓库面向希望在本地运行 Llama 2 推理示例的开发者、研究人员和技术评估人员。它展示如何准备模型文件、加载检查点与分词器,并通过命令行启动文本补全或聊天补全程序;README 还明确将 Hugging Face 用法和更详细示例指向其他仓库。

“最小示例”意味着读者需要自行处理模型访问审批、模型文件下载、运行环境和硬件资源。根据 README,模型权重并非通过仓库代码自动获得,下载前要访问 Meta 网站并接受相应许可;Hugging Face 途径也要求在模型卡片中确认许可并填写申请表。

仓库已经给出弃用提示,因此它更适合作为既有 Llama 2 部署的参考、历史代码阅读材料或受控实验入口。若目标是基于 Llama 3.1 及后续能力构建新系统,README 建议使用其列出的模型、工具链、安全和代理系统仓库,而不是把这个仓库当作持续扩展的统一平台。

核心功能

核心能力是加载检查点并执行生成。使用者提供检查点目录、分词器路径、最大序列长度和最大批量大小,示例程序根据模型并行配置启动推理;生成结果取决于模型类型和输入格式。

  • 文本补全:由 example_text_completion.py 演示,面向预训练模型。README 指出这类模型没有针对聊天或问答进行微调,输入提示应设计成期望答案的自然前文,输出是该提示的延续。
  • 聊天补全:由 example_chat_completion.py 演示,面向微调对话模型。README 要求遵循特定格式,包括 INST 与 <<SYS>> 标记、BOS 与 EOS 词元,以及相应空格和换行;格式不匹配会影响对话输入的解释。
  • 模型并行启动:通过 torchrun 的 --nproc_per_node 参数指定进程数。README 给出的模型并行值为 7B 对应 1、13B 对应 2、70B 对应 8;实际启动参数应与所用模型对应。
  • 安全分类器集成参考:README 提到可部署额外分类器过滤不安全输入和输出,并指向 llama-cookbook 的示例。该仓库所给资料没有提供分类器实现、规则配置或效果指标,不能据此推断默认示例已内置安全过滤。

从输入到输出的路径可以概括为:用户先获得并准备检查点和分词器,再调用相应示例程序;程序读取模型文件,对输入进行处理并生成文本。README 没有在所给资料中说明内部模块调用顺序、采样策略的接口参数或返回值结构,相关细节应以仓库当前代码为准。

系统架构与关键模块

从 README 可确认的架构边界是一个以 Python 推理代码为核心的示例仓库:下载脚本负责获取模型文件,示例脚本负责运行文本或聊天生成,模型权重与分词器则由使用者单独准备。以下只描述资料明确出现的模块,不把未提供的内部实现细节当作事实。

模块或资源资料中可确认的职责输入与输出
download.sh在用户取得授权下载链接后启动模型文件下载流程。输入为邮件提供的签名 URL;README 描述其用于下载模型,但没有给出下载目录布局细节。
example_text_completion.py演示预训练模型的文本补全。输入为检查点、分词器及提示;用于生成自然语言续写。
example_chat_completion.py演示微调聊天模型的对话补全。输入为聊天格式文本及模型文件;输出为模型生成的对话文本。
llama/generation.pyREADME 将聊天格式规范链接到该文件中的 chat_completion。资料仅确认其与聊天补全格式有关,未完整描述函数接口。
tokenizer.model示例命令传入的分词器模型文件。作为运行参数提供;内部编码细节未在所给资料说明。

这个结构将获取权重和执行推理分开。下载脚本依赖用户先取得有效授权链接;推理命令依赖检查点目录、分词器文件以及可用的 PyTorch/CUDA 环境。仓库资料没有给出服务端 API、HTTP 路由、持久化层或容器编排定义,因此不能把它描述为开箱即用的在线推理服务。

依赖与运行环境

README 的快速开始要求在具备 PyTorch 和 CUDA 的 Conda 环境中操作,并通过 editable 安装仓库。下载脚本的前置条件是安装 wget 和 md5sum;这两项针对下载流程,不能据此推断它们是 Python 推理代码的完整依赖清单。

资料未提供 Python、PyTorch、CUDA、Conda 或系统发行版的版本约束,也未给出显存、内存或存储的最低要求。README 说明所有模型支持最长 4096 个词元的序列长度,并且缓存会按照最大序列长度和最大批量大小预分配;这说明参数设定会影响资源占用,但具体占用量没有提供。

  • 运行 Python 推理示例前,应准备 PyTorch/CUDA 环境,并确认安装过程成功。
  • 获取权重前,应满足 Meta 下载流程所需的访问条件;下载脚本需要 wget 与 md5sum。
  • 使用 Hugging Face 下载时,应在对应模型卡片完成许可确认和申请;README 所述审批时间是该文档中的说明,不构成新的访问承诺。
  • 需要核实当前依赖版本时,官方仓库未提供该信息,建议以最新 README 为准。

快速开始

最小流程由安装、授权下载和运行组成。下面的命令沿用 README 中的真实用法;其中 URL、检查点目录和分词器路径需替换为你实际获批并下载得到的资源。

  1. 在 PyTorch/CUDA 可用的 Conda 环境中获取仓库,并安装项目。
  2. 在 Meta 网站申请模型访问;收到签名 URL 后,执行下载脚本并按提示输入链接。
  3. 将命令中的检查点目录与分词器路径改为本机实际位置,再运行聊天补全示例。
Bash
pip install -e .
chmod +x download.sh
./download.sh

./download.sh 会提示输入邮件中的 URL。README 特别提醒不要使用邮件客户端的“Copy Link”选项,而应手动复制邮件中的链接;链接有有效期与下载次数限制,README 给出的有效期为 24 小时。若遇到 403: Forbidden,README 建议重新申请链接。

Bash
torchrun --nproc_per_node 1 example_chat_completion.py \
    --ckpt_dir llama-2-7b-chat/ \
    --tokenizer_path tokenizer.model \
    --max_seq_len 512 --max_batch_size 6

验证方式是确认命令能够启动示例并生成聊天补全文本;资料没有提供固定测试提示、预期输出或自动化验证命令。上例使用 7B 模型对应的模型并行值 1,且将序列长度设为 512、批量大小设为 6;这些是 README 示例参数,不应视为所有硬件的通用默认值。

配置说明

README 展示的是命令行参数,而不是统一配置文件。下表汇总资料中实际出现的字段;除明确给出的模型并行对照外,README 没有声明默认值,因此以“未提供”标记,不能把示例命令中的取值误读成程序默认值。

字段名类型默认值作用
--nproc_per_node整数参数未提供指定 torchrun 启动进程数;README 给出的 7B、13B、70B 模型并行值分别为 1、2、8。
--ckpt_dir路径参数未提供指定模型检查点目录;示例值为 llama-2-7b-chat/ 或 llama-2-7b/。
--tokenizer_path路径参数未提供指定分词器模型文件;示例值为 tokenizer.model。
--max_seq_len整数参数未提供设定最大序列长度;README 说明模型支持最长 4096 个词元,并按该值预分配缓存。
--max_batch_size整数参数未提供设定最大批量大小;缓存会按该值预分配,需结合硬件调整。

配置时应先匹配模型与模型并行进程数,再根据可用硬件选择序列长度和批量大小。README 没有提供自动资源估算公式、参数冲突检查规则或环境变量配置说明;官方仓库未提供该信息,建议以最新 README 为准。

进阶用法

进阶使用的关键不是增加未知参数,而是根据模型训练目标选择正确的输入范式。预训练模型用于提示续写,微调聊天模型则要求遵循对话模板;两种路径都使用检查点、分词器和相应的推理示例程序。

预训练模型的文本续写

预训练模型没有针对聊天或问答进行微调。使用者应将提示组织为答案的自然前文,并调用文本补全脚本;README 的示例将最大序列长度设为 128、最大批量大小设为 4,模型并行进程数为 1。

Bash
torchrun --nproc_per_node 1 example_text_completion.py \
    --ckpt_dir llama-2-7b/ \
    --tokenizer_path tokenizer.model \
    --max_seq_len 128 --max_batch_size 4

聊天模型的输入格式

微调聊天模型需要按仓库定义构造输入,包括 INST、<<SYS>>、BOS、EOS,以及标签之间的空格与换行。README 建议对输入调用 strip(),以避免重复空格;实际模板应核对仓库中与 chat_completion 关联的实现,不能仅凭标签名称自行省略格式元素。

安全检查器的扩展边界

README 提到可在输入和输出侧添加安全检查器,并给出 llama-cookbook 的示例作为参考。该扩展属于调用方自行集成的能力;所给资料没有定义分类器接口、部署方式、审计记录格式或误报漏报指标,实施时需另行验证适用性。

可观测性与运维

所给 README 主要覆盖下载和本地推理示例,没有描述指标采集、结构化日志、分布式追踪、健康检查、服务级目标或故障恢复机制。因而不能据此声称仓库提供生产环境的可观测性或运维控制面。

实际运行时可先围绕资料明确的环节做人工核验:模型下载是否完成,检查点目录和分词器路径是否正确,进程数是否与模型并行配置一致,以及命令能否产出文本。以上属于依据 README 操作步骤给出的检查建议,不代表仓库内置了专用监控组件。

  • 下载问题:核实 wget、md5sum 是否可用,并检查签名 URL 是否过期或达到下载次数限制。
  • 启动问题:检查 --ckpt_dir 与 --tokenizer_path 是否指向已下载文件,并核对模型对应的 --nproc_per_node。
  • 资源问题:README 指出缓存按 max_seq_len 和 max_batch_size 预分配;应结合目标硬件调整这两个参数。
  • 服务化运维:服务端部署、并发策略、日志字段、指标名称和恢复流程均未在所给资料中提供。

安全与合规边界

该项目涉及模型权重访问、生成内容风险和模型材料分发,使用时应同时核对许可条款、可接受使用政策及数据处理边界。README 明确提醒 Llama 2 是带有潜在使用风险的新技术,并提供 Responsible Use Guide;本文不将示例推理代码等同于已完成风险控制的生产系统。

“Llama 2 is a new technology that carries potential risks with use. Testing conducted to date has not — and could not — cover all scenarios.”

来源:README

许可证要求使用遵守适用法律法规,并遵循 Llama Materials 的 Acceptable Use Policy;协议还限制将相关材料及其输出或结果用于改进其他大型语言模型,但对 Llama 2 或其衍生作品作了条款中的例外。部署方应在获授权的环境中处理模型与输入数据,并根据自身适用的隐私、行业和组织要求建立访问控制与数据保留规则;这些控制措施不属于 README 所述内置能力。

下载链接属于访问凭证,应避免公开传播或写入公开日志。模型输出需要按具体用途进行评估;README 提供了输入和输出安全分类器的扩展参考,但没有承诺该检查器覆盖所有风险,也没有给出安全效果保证。

许可证与商用条款

仓库元信息中的许可证字段为 NOASSERTION,但所给 LICENSE 文件正文标题为 LLAMA 2 COMMUNITY LICENSE AGREEMENT,版本发布日期为 2023 年 7 月 18 日。判断具体权利义务时应以仓库 LICENSE 的完整文本及适用的模型材料条款为准,不能把 GitHub 元信息的 NOASSERTION 解读为无许可限制。

协议授予非独占、全球范围、不可转让、免版税的有限许可,涉及使用、复制、分发、制作衍生作品和修改 Llama Materials。协议允许研究和商业实体使用,但这不等于不受条件限制的通用开源许可;使用者仍需遵守协议中的分发、可接受使用政策和其他条款。

  • 再分发 Llama Materials 或其衍生作品时,须向第三方提供协议副本。
  • 分发的副本须在随附的 Notice 文本文件中保留指定归属声明:Llama 2 is licensed under the LLAMA 2 Community License, Copyright (c) Meta Platforms, Inc. All Rights Reserved.
  • 协议规定,若在 Llama 2 发布日,使用者及其关联方产品或服务的前一日历月月活用户超过 7 亿,须向 Meta 申请许可;是否授予由 Meta 决定,在明确授权前不得行使协议项下权利。
  • 协议包含免责声明、责任限制、终止条件和适用法律与管辖条款;具体解释以仓库 LICENSE 为准。

因此,商业使用不能只根据仓库的语言、星标或 README 概述判断。应核对实际使用的模型材料版本、分发方式、组织规模与可接受使用政策,并在需要时寻求适当的法律审查。

局限性与已知限制

最重要的项目状态限制是 README 已声明弃用,并提供了后续仓库方向。该仓库的说明主体围绕 Llama 2,不能由此推断它包含 Llama 3.1 的完整能力、模型卡片或统一工具链。

  • 资源要求没有量化:资料给出模型规模、最大序列长度及缓存预分配行为,但没有最低显存、内存、磁盘空间或吞吐数据。
  • 依赖版本没有列明:所给资料未提供 Python、PyTorch、CUDA 或其他依赖的版本矩阵。
  • 运行形态有限:README 展示本地命令行推理,没有说明服务化 API、认证、租户隔离或生产部署方案。
  • 安全机制不是默认保证:分类器仅作为可集成的扩展示例被提及,所给资料没有覆盖率或安全效果数据。
  • 模型访问有前置条件:Meta 下载需要接受许可并取得邮件链接;链接有效期与下载次数有限制。Hugging Face 途径也需要确认许可并提交申请。

针对维护状态、兼容性或当前下载流程的具体问题,官方仓库未提供该信息,建议以最新 README 为准。仓库弃用提示也意味着后续项目的接口、安装方式和许可不能直接假定与此处一致。

适合谁与不适合谁

是否采用该仓库,应由项目阶段、模型版本、运行环境和合规要求共同决定。下面的判断信号依据 README 所述用途及限制整理;超出明确资料的取舍属于根据本文作者的经验判断。

适合的场景

  • 需要复现或理解 Llama 2 本地推理命令,并且团队能自行准备检查点与分词器。
  • 项目目标是对比预训练文本续写和微调聊天补全两种输入方式,而不是寻找托管推理服务。
  • 运行环境已具备 README 所要求的 PyTorch/CUDA 条件,且团队能够根据模型设置模型并行进程数。
  • 组织能够接受并审查 Llama 2 Community License Agreement、Acceptable Use Policy 和相关分发义务。
  • 维护既有 Llama 2 代码或进行历史实现评估,需要以旧版示例作为参考。

不适合的场景

  • 新系统需要一个仍在此仓库持续演进的统一开发入口;README 已建议将新开发转向其他仓库。
  • 项目要求无需申请即可获取权重,或无法接受签名下载链接、模型许可确认等前置步骤。
  • 业务要求明确的服务端接口、并发保证、可用性指标或生产支持承诺;所给资料没有提供这些内容。
  • 团队无法满足 PyTorch/CUDA 环境要求,或无法为 13B、70B 模型提供与 README 所列模型并行值相对应的运行资源。
  • 合规审查要求使用无附加条件的通用开源许可;该仓库所给 LICENSE 是 Llama 2 Community License Agreement,且包含具体限制。

常见问题与排查(FAQ / Troubleshooting)

常见故障集中在模型访问、输入文件路径、进程数与输入格式。以下排查项只复述资料中可核对的条件;对于错误日志的完整解释,官方仓库未提供该信息,建议以最新 README 为准。

运行下载脚本时出现 403

README 指出下载链接会在 24 小时后过期,并受下载次数限制;出现 403: Forbidden 时可重新申请链接。检查复制的是否为邮件中的完整链接,并按 README 提示手动复制,不使用“Copy Link”选项。

推理程序找不到模型或分词器

核对 --ckpt_dir 是否指向所下载模型的检查点目录,且 --tokenizer_path 是否指向实际的分词器文件。README 示例中的目录和文件名只是示例值,需要替换成下载结果对应的路径。

应该设置多少个启动进程

按 README 的模型并行对照设置:7B 使用 1、13B 使用 2、70B 使用 8。所给资料没有说明其他模型变体的映射,官方仓库未提供该信息,建议以最新 README 为准。

为什么序列长度或批量大小影响运行

README 说明缓存按 max_seq_len 与 max_batch_size 预分配,并要求按硬件调整。资料未给出资源估算表或具体错误与参数之间的映射,需在目标环境中验证。

聊天输出格式异常应检查什么

确认输入符合聊天补全模板,包括 INST、<<SYS>>、BOS、EOS 和必要的空白符;README 建议对输入调用 strip() 以避免双空格。预训练模型不针对聊天或问答微调,应改用自然续写式提示并选择文本补全示例。

项目地址与资源

本节集中列出仓库资料中出现的项目与官方资源入口,便于核对代码、模型访问条件、安全说明和后续维护方向。