penzai

GitHub
1.9k 69 简单 2 次阅读 2天前Apache-2.0开发框架
AI 解读 由 AI 自动生成,仅供参考

penzai 是一个基于 JAX 的开源研究工具包,致力于让神经网络的构建、编辑和可视化变得更加直观。它的名字源自“盆栽”艺术,寓意着像修剪盆景一样精细地塑造模型结构。

不同于传统框架侧重训练流程,penzai 的核心优势在于模型训练后的操作。它解决了研究人员在进行逆向工程、组件消融、内部激活探测以及模型手术时,难以灵活修改和分析网络结构的痛点。因此,penzai 特别适合深度学习研究员、算法工程师以及对模型可解释性感兴趣的开发者使用。

技术层面,penzai 将神经网络表示为易读的函数式树形数据结构,让用户能像操作普通数据一样直接干预模型逻辑。其独特亮点包括:内置的 Treescope 可视化工具,能清晰展示深层嵌套结构;灵活的选择器,支持复杂的重写与补丁;以及命名轴系统,简化了张量操作风格。此外,它还提供了 Gemma、Llama 等主流 Transformer 架构的模块化参考实现,极大便利了架构调试与训练动态分析。

使用场景

一位算法研究员正在对预训练的 Gemma 大模型进行可解释性分析,试图通过屏蔽特定注意力头来验证其对长文本逻辑推理的具体影响。

没有 penzai 时

  • 面对深层嵌套的 Flax 或 Equinox 模型结构,手动遍历查找特定层参数极其繁琐且易错。
  • 修改权重时需要编写大量样板代码处理 JAX PyTree 的不可变性,无法直接就地更新。
  • 缺乏可视化工具,难以直观观察模型内部激活值的分布变化,调试过程如同在黑盒中摸索。
  • 处理参数共享和可变状态时,常规库往往需要额外的封装逻辑,增加了维护成本。

使用 penzai 后

  • 利用 pz.select 强大的选择器功能,可直接通过语义路径精准定位并修改任意深度的注意力头。
  • Treescope 交互式渲染让复杂的神经网络树形结构清晰可见,瞬间确认修改范围与层级关系。
  • 内置的 named axes 系统自动管理张量维度,无需手动 reshape 即可无缝切换编程风格。
  • 支持原地 Patch 操作和可变状态追踪,无需重新加载模型即可高效完成多次消融实验。

penzai 将复杂的模型手术转化为直观的树形编辑,大幅提升了可解释性研究与架构调试的效率。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明

依赖
notes1. 必须先安装 JAX,具体安装步骤取决于平台,请参考 JAX 文档;2. 推荐使用 Colab 或 IPython 环境,并配置 Treescope 为默认打印器以增强可视化体验;3. 当前版本为 V2 API,存在破坏性变更,旧版 V1 功能可通过 deprecated.v1 子模块保留;4. 该项目非 Google 官方支持产品。
python未说明
jax
treescope
penzai hero image

快速开始

Penzai

盆 ("pen", 托盘) 栽 ("zai", 种植) - 一种将树木和景观微缩化的古老中国艺术,也称为盆景,是日本盆景艺术的祖先。

Penzai 是一个 JAX 库,用于将模型编写为可读的、函数式的 pytree 数据结构(一种树形数据结构),并提供可视化工具、修改和分析它们的工具。Penzai 专注于在模型训练后轻松进行操作,使其成为涉及逆向工程或消融模型组件、检查和探测内部激活、执行模型手术、调试架构等的绝佳选择。(但如果你只是想构建和训练一个模型,也可以这样做!)

有了 Penzai,你的神经网络可能看起来像这样:

Screenshot of the Gemma model in Penzai

Penzai 被结构化为一系列模块化工具的集合,它们共同设计但可独立使用:

  • 一个功能强大的交互式 Python 美化打印机:

    • Treescope (pz.ts): 它是普通 IPython/Colab 渲染器的即插即用替代品,最初是 Penzai 的一部分,但现在作为独立包可用。它旨在帮助理解 Penzai 模型和其他深层嵌套的 JAX pytrees,内置支持可视化任意维度的 NDArrays(多维数组)。
  • 一组 JAX 树和数组操作实用工具:

    • penzai.core.selectors (pz.select):一个 pytree 瑞士军刀,将 JAX 的 .at[...].set(...) 语法推广到任意类型驱动的 pytree 遍历,使得对 Penzai 模型和其他数据结构进行复杂重写或即时修补变得容易。

    • penzai.core.named_axes (pz.nx):一个轻量级的命名轴系统(named axes),它将普通的 JAX 函数提升为按命名轴向量化,并允许你在命名和位置编程风格之间无缝切换,而无需学习新的数组 API。

  • 一个基于声明式组合器的神经网络库,其中模型表示为易于修改的数据结构:

    • penzai.nn (pz.nn):这是 Flax、Haiku、Keras 或 Equinox 等其他神经网络库的替代方案,它使用声明式组合器暴露模型前向传播的完整结构。与 Equinox 一样,模型表示为 JAX PyTrees,这意味着你可以通过美化打印看到模型所做的所有事情,并使用 jax.tree_util 注入新的运行时逻辑。然而,penzai.nn 模型也可以在树的叶子节点包含可变变量,使它们能够跟踪可变状态和参数共享。
  • 常见 Transformer 架构的模块化实现,以支持可解释性、模型手术和训练动态的研究:

    • penzai.models.transformer:参考 Transformer 实现,可以加载 Gemma、Llama、Mistral 和 GPT-NeoX / Pythia 架构的预训练权重。使用模块化组件和命名轴构建,以简化复杂的模型操作工作流。

Penzai 的文档可在 https://penzai.readthedocs.io 找到。

[!IMPORTANT] Penzai 0.2 包含神经网络的许多破坏性更改。这些更改旨在通过引入对可变状态和参数共享的一等支持并移除不必要的样板代码来简化常见工作流。你可以在 "Changes in the V2 API" 概述中阅读旧版 "V1" API 与当前 "V2" API 之间的差异。

如果你目前正在使用 V1 API 且尚未转换为 V2 系统,你可以通过从 penzai.deprecated.v1 子模块导入来保留旧行为,例如:::

from penzai.deprecated.v1 import pz
from penzai.deprecated.v1.example_models import simple_mlp

入门指南

如果你还没有安装 JAX,你应该先安装,因为安装过程取决于你的平台。你可以在 JAX documentation 中找到说明。之后,你可以使用以下命令安装 Penzai:

pip install penzai

并使用以下方式导入:

import penzai
from penzai import pz

(penzai.pz 是一个别名命名空间,这使得引用常见的 Penzai 对象更加容易。)

当在 Colab 或 IPython 笔记本中工作时,我们建议还将 Treescope(Penzai 的配套美化打印机)配置为默认的美化打印机,并启用一些交互使用的实用工具:

import treescope
treescope.basic_interactive_setup(autovisualize_arrays=True)

以下是初始化和可视化简单神经网络的方法:

from penzai.models import simple_mlp
mlp = simple_mlp.MLP.from_config(
    name="mlp",
    init_base_rng=jax.random.key(0),
    feature_sizes=[8, 32, 32, 8]
)

# 当你从 Colab/IPython 笔记本单元格输出模型和数组时,它们会自动可视化:
mlp

以下是捕获和提取逐元素非线性变换之后的激活值的方法:

@pz.pytree_dataclass
class AppendIntermediate(pz.nn.Layer):
  saved: pz.StateVariable[list[Any]]
  def __call__(self, x: Any, **unused_side_inputs) -> Any:
    self.saved.value = self.saved.value + [x]
    return x

var = pz.StateVariable(value=[], label="my_intermediates")

# 创建一个保存其激活值的模型副本:
saving_model = (
    pz.select(mlp)
    .at_instances_of(pz.nn.Elementwise)
    .insert_after(AppendIntermediate(var))
)

output = saving_model(pz.nx.ones({"features": 8}))
intermediates = var.value

要了解如何使用 Penzai 构建和操作神经网络,我们建议从 "How to Think in Penzai" tutorial 开始,或者查看 Penzai documentation 中的其他教程。

引用

如果你发现 Penzai 对你的研究有用,请考虑引用以下文章(也可在 arXiv 上获取):

@article{johnson2024penzai,
    author={Daniel D. Johnson},
    title={{Penzai} + {Treescope}: A Toolkit for Interpreting, Visualizing, and Editing Models As Data},
    year={2024},
    journal={ICML 2024 Workshop on Mechanistic Interpretability}
}

这不是官方支持的 Google 产品。

版本历史

v0.2.52025/04/08
v0.2.42024/12/16
v0.2.32024/11/21
v0.2.22024/09/11
v0.2.12024/08/07
v0.2.02024/07/26
v0.1.52024/07/16
v0.1.42024/07/09
v0.1.32024/06/28
v0.1.22024/05/28
v0.1.12024/05/03
v0.1.02024/04/18

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架