模型能否在 AWS Trainium 上运行?查一下即可

torch-neuronx 是 AWS Trainium 的原生 PyTorch 后端。有了它,Transformers 在 Trainium 上运行自己的建模代码,和其他设备一样,所以 Hugging Face Hub 上的 Transformers 模型理论上都能跑。但实际哪些能跑?一个名为 torch-neuronx 模型支持查询的 Space 专门回答这个问题。

Space 默认打开 Selected 视图,是按下载量和趋势分选出的头部模型。每一行显示:模型能否不加修改地在 Trainium 上运行、分片到多少个 Trainium 核心、运行墙钟时间(含编译)、峰值设备内存。切换 Trending 或 Downloads 视图,可以按 Hub 自己的排名逐任务查看。输入模型名称的一部分就能查指定的模型。如果某个模型被刻意跳过,Space 会说明原因:多数是没排上优先级,少数才是真正不兼容。还可以挑选 neuronx-cc 编译器和 Transformers 的版本。目前只测试了 Transformers 模型,且局限在文本生成和图像文本到文本任务;计划扩展到 diffusers、sentence transformers 等其他 Transformers 任务。

选中模型后,Space 给出测试用的完整软件栈、需要额外安装的包,以及实际运行的 run.py 脚本。脚本的套路和 TorchNeuron 公告一致:用 from_pretrained 加载模型,必要时分片,再用静态缓存和 torch.compile(backend=”neuron”) 做生成。在 trn2 实例上装好依赖后,直接 python3 run.py 就能跑,不需要 torchrun;脚本会在分片时自己启动 torch.distributed 的多个 rank。第一次运行要先编译模型的计算图;如果想跳过这步,可以从公共 NEFF 缓存桶把测试时编译好的图同步下来,Space 会给出对应编译器版本的命令。

所谓“能跑”有明确判定标准:每个测试都在 trn2 实例上加载模型,分片到能放下权重的最少 Trainium 核心数。多数模型走 tensor parallelism;没有 tensor-parallel 方案的 MoE 模型只做 expert parallelism。测试生成 32 个 token 并检查输出。单核心时,token 逐位和同一 checkpoint 的 CPU 运行结果比较;分片时,改由一个小型 judge 模型判断文本是否为流利英语。

目前有明确的边界:只测最多 4 个 Trainium2 设备(16 核) 能放下的模型;测试结果是 PASS 也不说明吞吐量,更不说明更长生成的表现。Space 里的全部数据来自公开数据集 aws-neuron/torch-neuronx-model-support,每个 neuronx-cc 和库版本组合对应一个 Parquet 文件。每行记录模型结果、失败时的错误、整套软件版本和 run.py。想自己分析的话,可以直接用 pandas 读取 Parquet 文件查询。下次你犹豫某个模型能不能跑在 AWS Trainium 上,直接去这个 Space 查一下就行。

Does Your Model Run on AWS Trainium? Look It Up

查看原文