菜单

打包与分发

相关源文件

本文档涵盖了 llama-models Python 包的构建过程、CI/CD 流水线和分发机制。它解释了该仓库如何打包以进行 PyPI 分发,包括资产包含、版本管理和自动化发布工作流。

有关分发后安装和设置包的信息,请参阅安装和设置。有关正在打包的核心模型实现的详细信息,请参阅模型架构

包结构和清单

包的分发由 MANIFEST.in 文件控制,该文件明确定义了除标准 Python 源代码外,所有要包含在分发包中的文件。

包含的资产

清单指定了必须与包捆绑在一起的几类资产

资产类型文件目的
配置pyproject.toml, README.md包元数据和文档
分词器llama3/tokenizer.model, llama4/tokenizer.model模型专用分词
示例图片resources/dog.jpg, resources/pasta.jpeg测试和演示
文档llama3_1/prompt_format.md, llama3_2/text_prompt_format.md, llama3_2/vision_prompt_format.md模型专用格式指南

清单中包含 models/llama_models/ 目录结构中的文件,以支持不同的导入模式。

包资产分发

来源:MANIFEST.in1-16

构建系统

该软件包使用 Python 的标准构建工具,其中包含 pyproject.toml 配置和用于旧版兼容的 setup.py 文件。构建过程会创建源分发版(sdist)和二进制 wheel 包。

构建流程

自动化构建过程遵循以下步骤

  1. 环境设置:Python 3.11 环境及 pypa/build 工具
  2. 版本管理:基于触发源的动态版本更新
  3. 资产收集:收集 MANIFEST.in 中指定的文件
  4. 分发包创建:生成 wheel 包和源 tarball
  5. 构件存储:存储构建好的包以供分发

构建流水线架构

来源:.github/workflows/publish-to-test-pypi.yml38-50

CI/CD 流水线

自动化发布流水线使用 GitHub Actions 实现,具有两种主要的触发机制和对 PyPI 服务的可信发布。

触发机制

该工作流支持两种激活方法

触发类型来源目的
repository_dispatch外部 llama-stack 仓库自动化夜间构建
workflow_dispatch手动激活候选版本构建

流水线阶段

CI/CD 过程包含两个主要作业

构建阶段:

  • 检出仓库,禁用凭据持久化
  • 基于触发源的动态版本注入
  • Python 环境设置 (3.11)
  • 使用 pypa/build 构建包
  • 用于分发作业的构件存储

发布阶段:

  • 从构建阶段下载构件
  • 使用 OpenID Connect 可信发布到 TestPyPI
  • 环境专用部署配置

CI/CD 工作流架构

来源:.github/workflows/publish-to-test-pypi.yml1-75

版本管理

版本管理通过使用 sed 命令直接修改 setup.py 文件,在构建过程中动态处理。

版本更新策略

该流水线根据触发源实现不同的版本控制方法

仓库分发 (自动化):

  • 版本从 client_payload.version 中提取
  • source == 'llama-stack-nightly' 时应用
  • 命令:sed -i 's/version="\([^"]*\)"/version="${{ github.event.client_payload.version }}"/' setup.py

手动分发 (发布候选版本):

  • 通过工作流输入参数指定版本
  • 用户提供的版本字符串(例如,0.0.63.dev20250111
  • 命令:sed -i 's/version="\([^"]*\)"/version="${{ inputs.version }}"/' setup.py

版本管理系统支持自动化夜间构建和手动发布候选版本生成,并采用适当的版本编号方案。

来源:.github/workflows/publish-to-test-pypi.yml26-33

分发流程

软件包分发使用 PyPI 的可信发布机制,通过 OpenID Connect 身份验证,无需 API 令牌。

发布配置

发布作业在具有特定权限的专用 testrelease 环境中运行

  • 环境testrelease,URL 为 https://test.pypi.org/p/llama-models
  • 权限id-token: write 用于可信发布
  • 仓库:TestPyPI (https://test.pypi.org/legacy/)

分发流程

  1. 构件检索:从构建作业下载已构建的包
  2. 身份验证:OpenID Connect 令牌生成
  3. 发布:使用 pypa/gh-action-pypi-publish 上传到 TestPyPI
  4. 验证:包在 TestPyPI URL 上的可用性

分发过程确保 MANIFEST.in 中定义的所有资产都正确包含在发布的软件包中,从而使分词器模型、示例资源和文档可供软件包使用者使用。

分发安全模型

来源:.github/workflows/publish-to-test-pypi.yml52-75