ARTI

ARTI 指南

程序与张量资源

显式表达计算,再决定参数和演进状态分别由谁拥有。

本页内容

组合数值工作

FormulaProgram 用命名轴、输入和 Bank 操作数描述有类型的计算,FormulaFabricV2 执行这份声明。算术、收缩、归约、索引、mask、局部窗口与 Observation 可以组成更大的程序,操作数绑定仍可被检查。

通过资源连接值

TensorResource 声明值的张量契约与生命周期,Connection 关联资源端口。数值节点通过端口读取和发布值。ProgramGraph 为组合提供执行结构,使依赖关系无需全部隐含在应用代码中。

  • 阶段让就绪运算先读取同一快照,再发布已完成的写入。
  • 路由选择声明的分支,汇合跟踪到达同一汇合点的值。
  • 有界循环携带声明状态,并按执行契约停止。

分开声明、参数与状态

程序规定执行什么,参数提供可训练的数值,前向状态则在需要保留的调用之间携带值与执行游标。区分这些对象,应用才能明确选择什么参与学习、什么保持存在,以及梯度在哪里继续。

  • 资源持久存在本身不会使它成为优化器参数。
  • 优化器更新与可微前向写入是不同操作。
  • 对于 carry 和原生 JAX 等函数式状态接口,需要续接时,由调用方将返回状态传入后续调用。

定义程序如何学习

目标由应用提供。共享参数所有者和独立声明的学习区域可以遵循不同 credit 与优化器契约。分支、路由选择或持久值出现在图中,并不会自动获得有效的任务学习规则。

一个小型 Formula 示例

运行阅读上手包后,可以用这个小型 CPU 程序检查声明运算、可学习操作数与返回状态。它是机制示例,不是任务效果 benchmark。

resource-program.py
from json import dumps
from torch import autograd, nn, tensor
from arti import mechanisms as api

pair = api.TensorType(("C",), (2,), dtype="float32")
signal = api.InputBinding("signal", pair)
carry = api.InputBinding("carry", pair)
bank = api.BankBinding("weight", "tutorial/carry-weight@1", "weight", api.TensorType((), (), dtype="float32"))
transition = api.add(carry, api.scale(signal, bank))
summary = api.reduce_tensor(transition, axis="C", mode="sum")
program = api.FormulaProgram.build(outputs=(summary, transition))
parameter = nn.Parameter(tensor(0.75))
provided = dict(signal=tensor([4.0, -2.0]), carry=tensor([1.0, 1.0]))
emitted = api.FormulaFabricV2(program)(inputs=provided, banks=dict(weight=bank.bind(parameter)))
readout, returned_carry = emitted.values
gradient = autograd.grad(readout, parameter)[0]
record = dict(readout=readout.item(), next_carry=returned_carry.detach().tolist(), weight_vjp=gradient.item())
print(dumps(record))

下载 Python 文件 ↗python resource-program.py
本地 CPU 运行结果

读出对权重的 VJP 为 2。原始 carry 保持不变,程序返回新的 carry。

{
  "readout": 3.5,
  "next_carry": [
    4.0,
    -0.5
  ],
  "weight_vjp": 2.0
}

这个例子只运行一次前向与 VJP,没有优化器更新。后续调用是否采用新 carry,由调用方决定。

选择执行边界

固定图与动态搜索有不同的准入和编译要求。ARTILayer 承载配置好的图或 federation;未配置形式提供恒等行为,而不是学到的适配。组件身份、配置 schema 与包版本分别记录。