机器人领域有一件事长期让外部研究者头疼:真正好用的训练框架,要么是各家公司的内部系统,外人根本摸不到;要么开源的只覆盖一段流程,LLM预训练是一套代码,视觉对齐是另一套,机器人动作学习又是第三套,拼起来费时费力还容易出问题。

丰田研究院(TRI)这次做了一件相对彻底的事,把他们内部用来训练机器人视觉-语言-动作模型(VLA)的完整框架开源了,项目叫VLA Foundry,同时放出来的还有两个训练好的模型权重、仿真评估工具、统计分析套件,以及从LLM到VLM再到VLA的所有中间检查点。


换句话说,你现在可以从零开始,按照他们的路子把整条链路自己跑一遍。
PART 01
为什么现有框架都没解决这个问题?
要理解VLA Foundry做了什么,得先想清楚训练一个能控制机器人的视觉-语言-动作模型到底需要几步。
第一步,你需要一个基础语言模型,它得能理解自然语言指令,比如"把苹果放进碗里"。第二步,你要给它接上眼睛——让它能看图,把视觉信息和语言理解结合起来。第三步,再在这基础上加一个动作头,让它不只是"理解"任务,而是能输出机械臂该怎么动的具体指令。
这三步在学术界和工业界通常是分开研究的,用的数据集不同,用的代码框架不同,超参数的哲学也不同。每次想把某个新想法接进来,都要花大量时间搞数据对齐和代码兼容。
TRI内部虽然有一套叫LBM(Large Behavior Model)的闭源系统,但外部研究者没法用它做实验。VLA Foundry要解决的就是这个断层:一套框架,从语言预训练跑到机器人动作,全流程打通,每个环节都可以自己换。
PART 02
VLA Foundry框架的骨架长什么样?
VLA Foundry整体分四层:底层是基于frozen dataclass的YAML配置系统,往上是组件注册表,然后是针对不同数据类型(文本、图像-文本对、机器人数据)的预处理模块,最顶层是模型无关的训练循环。

配置系统用的是一个叫Draccus的库。每个参数在dataclass里声明,可以被YAML配置文件或命令行参数逐级覆盖,优先级依次提高。YAML文件本身支持继承——一个配置文件可以从多个父文件继承,组合出新实验,而不是每次都复制一份完整配置再改。跨模块共享的参数(比如hidden dimension、序列长度)只在一处声明,然后自动传播到整个dataclass树,不会出现A模块改了、B模块忘改的情况。
这个设计最直接的好处是:你想测试一个新模型架构,不需要动训练循环的核心代码。写一个参数dataclass和一个工厂函数,在import时注册进去就可以了。新加数据集也是类似的路子——原始数据通过Ray并行转换成WebDataset格式的tar shard,同时生成训练时归一化需要的统计信息,之后直接扔进训练循环。
机器人数据比普通图文数据要复杂得多,有几个地方需要特别处理。
- 归一化
框架里有个RoboticsNormalizer,支持全局和逐时间步两种方案。不同机器人、不同任务,动作幅度差异很大,逐时间步归一化对于相对动作表示(比如末端执行器的位移)尤其有用,因为预测窗口里不同时刻的位移分布本来就不同。多数据集合并时,均值、标准差、极值都有对应的合并公式,百分位数用了t-digest算法近似计算。
- 动作表示
支持绝对世界坐标系和相对于末端执行器姿态的相对坐标,旋转用6D连续表示格式,相对姿态在SE(3)上复合。动作按时间窗口分块,未来一段时间的动作序列作为监督信号,过去的作为输入。本体感知观测严格限制在过去和当前时间步,不允许看到未来。
训练循环支持FSDP(含可选CPU offloading)、混合精度、梯度检查点、torch.compile和梯度累积,基本覆盖了大规模分布式训练的常见需求。
PART 03
从零训练一个机器人大脑要经过什么?
TRI用这套框架实际走通了两条路线,都开源了。
- 第一条路:完全从头来
他们训练的第一个模型叫Foundry-VLA-1.7B,走的是LLM→VLM→VLA的完整三阶段流程。
第一阶段先训语言模型。用的是标准Transformer架构,12亿参数(按惯例,embedding层的2亿参数不计入这个数字),hidden dimension 2048,24层,16个头。在DCLM数据集上训了5亿样本,大约1万亿token,序列长度2048,学习率用warmup-stable-decay调度。分词器用的是HuggingFace上的SmolVLM2词表,词表大小49280。
训完之后在标准基准测试上跑了一圈:HellaSwag 66.7,PIQA 77.5,ARC-Easy 71.7,BoolQ 65.4。MMLU只有26.6,基本接近随机水平,但这完全正常,MMLU考的是知识密度很高的问题,这个规模的模型又没做指令微调,26.6分不是问题,是预期内的结果。
第二阶段把视觉接进来。在语言模型训到8000亿token的时候(学习率冷却之前),接入一个8600万参数、随机初始化的ViT,架构类似CLIP,处理224×224的输入图像。用pixel-shuffle操作压缩序列长度,然后在公开的DataCompDR-1B数据集上训了2亿样本。论文里有一句话值得注意:DataCompDR-1B里有些图片链接已经失效,这会影响严格复现。在COCO验证集上的图像描述评估,训完2亿样本后BLEU-4是15.57,CIDEr是55.14——论文明确说这些数字只是验证流水线能跑通,不是在宣称最优性能。
第三阶段加上动作预测能力。在VLM基础上,往LLM词表里加一个新的observation token,VLM最后4层对应这个token的隐藏特征被提取出来,用来条件化一个flow transformer,解噪出一段动作序列。这个action head本身是一个3.25亿参数的Transformer,和语言模型同样的架构,输入是VLM的隐层特征、线性层编码的本体感知信息、线性层编码的带噪动作序列,训练目标是flow matching。整个VLA加起来大约1.7B参数,这就是Foundry-VLA-1.7B这个名字的来源。
- 第二条路:站在巨人肩膀上
另一个模型Foundry-Qwen3VLA-2.1B-MT走了完全不同的路:直接用阿里的Qwen3-VL 2B作为骨干,接上同样的action head,做多任务训练。
这条路的逻辑很直接——Qwen3-VL本身就是一个经过大规模训练的多模态模型,视觉理解能力比从头训的VLM强得多。把它拿来做骨干,再加action head微调,理论上应该能得到更强的机器人控制能力。仿真测试的结果也确实印证了这个判断,后面会提到具体数字。
PART 04
张H100上跑起来是什么效果
在SageMaker P5节点(每节点8张H100)上做了吞吐量测试,结果有几个值得关注的地方。

分别采用DDP与FSDP两种并行方案,测试大语言模型、视觉语言模型、视觉语言动作模型在GPU 节点数量扩容时的吞吐性能变化。本次测试基于亚马逊Sagemaker平台完成,使用单节点搭载 8 块英伟达H100显卡的P5算力实例。
LLM阶段用DDP并行,从8张GPU扩到128张GPU,吞吐从约189万token/秒提升到约514万token/秒。但FSDP在这个规模下反而比DDP弱,原因是1.2B参数的模型在这个卡数下每张GPU都能放下全部权重,FSDP的分片带来的通信开销反而成了负担,收益抵不上损耗。
VLM(1.1B)和VLA(1.5B)阶段的扩展性基本能和理想线性缩放对齐。
这组数字说明了一件事:框架在工程层面是认真做过的,不是只能跑demo的玩具。
PART 05
如何用贝叶斯方法避免"数据造假"?
评估部分有个设计细节,值得单独说一下。
VLA Foundry内置了对lbmevaloss的支持,这是TRI基于Drake物理引擎搭建的开源仿真benchmark,总共定义了49个桌面双臂操作任务,评估器以Docker镜像形式分发,避免不同平台的环境差异。
统计分析部分用了一个叫STEP的框架,提供贝叶斯成功率估计的小提琴图,附带Compact Letter Display(CLD)标注——如果两个策略的CLD标注不共享任何字母,就认为它们在5%的家族误差率(FWER)下存在显著差异。
这里有个很具体的工程问题:机器人策略的评估往往不是一次性跑完固定数量的测试,而是可以中途停止,或者觉得结果不够有说服力时追加更多测试。但如果用Barnard's test这类传统统计检验,这种"边看边决定要不要继续"的操作会产生p-hacking问题——本质上是通过反复测试直到得到想要的结论。STEP通过贝叶斯框架规避了这个陷阱,中途停止或追加rollout不会污染结论的可靠性。
多任务聚合时还有一个细节:如果模型A在四个任务上分别跑了50、49、50、50个rollout,第二个任务少了一条,聚合前会把所有任务截断到最小值49,用196条而不是199条做聚合,保证每个任务权重相等,得到无偏估计。论文里提到,TRI自己之前的闭源工作并没有严格执行这个平衡截断,这次一并修正了,并且把旧结果也放进了dashboard里,方便和新模型直接对比。
PART 06
16项任务实测:开源 Foundry模型对标TRI闭源LBM系统
在lbmevaloss的16个任务benchmark上,三个模型跑了对比:
Foundry-VLA-1.7B-MT-sim(多任务训练,仿真数据)在统计上与TRI之前的闭源LBM系统持平,两者没有显著差异。这个结果本身就很有意义——意味着用这套开源框架训出来的模型,在仿真表现上能对齐他们的内部系统。

Foundry-Qwen3VLA-2.1B-MT比前两者高出平均23个百分点,差距在统计上显著。在所有16个任务的CLD标注里,两个模型几乎在每个任务上都被标注了不同字母,说明这不是偶然的数值差异,而是系统性的性能提升。
零样本泛化测试跑了3个训练时没见过的任务:Avocado Bowl→Bin(把牛油果从碗里移到垃圾桶)、Spatula Crock→Plate(把锅铲从砂锅移到盘子)、Mug→Center(把马克杯移到桌子中央)。所有模型都展现出非零成功率,Foundry-Qwen3VLA-2.1B-MT在多数零样本任务上优于Foundry-VLA-1.7B-MT。
需要说明的是,论文里还有另一组数字:开源版本的benchmark(OSS)和TRI内部版本的benchmark(CS)做了对比,两个模型在开源版本上的表现都弱于内部版本。这是因为两个benchmark的场景设置存在分布差异,不完全等价,开源版本可以理解为一个分布偏移的版本。
PART 07
结语与未来
研究团队也同时披露了研究的局限性,评估目前只在仿真环境里跑,没有真实硬件上的数字。这意味着仿真里的成功率能不能直接迁移到真实机器人上,还是未知数。所有实验用的都是flow-matching action head,框架代码里虽然预留了扩散策略等其他action head的接口,但这份报告里没有系统测试。不同训练阶段最优的数据配比没有研究,安全性、对齐、故障检测也完全没有涉及。
框架里预留的扩展接口是做好的——换仿真环境、换机器人形态(embodiment)、换action head,都只需要加新模块,不需要动训练循环。
研究团队的意思是:这是一个起点,不是一个终点。
论文地址:https://arxiv.org/abs/2604.19728
项目地址:https://tri-ml.github.io/vla_foundry/
VLA Foundry 代码库可访问:https://github.com/TRI-ML/vla_foundry
所有多任务模型权重已发布于:https://huggingface.co/collections/TRI-ML/vla-foundry