我们推出 CASS,这是首个用于跨架构 GPU 代码转换的大规模数据集和模型套件,目标是实现源级(CUDA ↔ HIP)和汇编级(英伟达 SASS ↔ AMD RDNA3)的转换。
该数据集包含 7 万个经过验证的主机和设备代码对,填补了低级 GPU 代码可移植性方面的关键空白。利用这一资源,我们训练了特定领域的 CASS 语言模型系列,实现了 95% 的源级转换准确率和 37.5% 的汇编级转换准确率,大幅超越了诸如 GPT-4o、Claude 和 Hipify 等商业基线模型。
我们生成的代码在超过 85% 的测试用例中与原生代码性能匹配,保留了运行时和内存行为。为严格的实验评估,我们引入了 CASS-Bench,这是一个精心设置的基准测试,涵盖 16 个 GPU 领域,并带有实际执行结果。
所有数据、模型和评估工具均开源发布,以促进 GPU 编译器工具、二进制兼容性以及由大语言模型引导的硬件转换方面的进展。数据集和基准测试可在 HuggingFace 上获取,代码可在 GitHub 上获取。
一、引言
图形处理单元(GPU)由于其高吞吐量并行性,已成为现代机器学习和科学计算工作负载的基础。英伟达的统一计算设备架构(CUDA)已经成为 GPU 加速的主导编程模型,但其与专有硬件的紧密耦合带来了严重的供应商锁定问题:由于指令集架构(ISA)不兼容,CUDA 代码无法在非英伟达 GPU 上运行。
因此,拥有大量基于 CUDA 代码库的组织在迁移到替代平台时面临着高昂的工程成本。
与此同时,AMD 的 GPU 在性价比方面具有潜在优势,在数据中心和消费设备中越来越多地被采用,这使得在不进行全面软件重写的情况下,在 AMD 硬件上运行遗留 CUDA 程序的需求日益增长。
作为回应,AMD 推出了可移植性异构计算接口(HIP),这是一个内置于 ROCm 堆栈中的 C++ GPU API,旨在模仿 CUDA 的功能,同时支持跨平台开发。HIP 为英伟达和 AMD 的 GPU 提供了统一的代码库。像 HIPIFY 这样的静态转换器工具,通过将特定于 CUDA 的结构转换为等效的 HIP 结构,辅助代码迁移,简化了 ROCm 堆栈的采用过程。然而,HIPIFY 仅在源级别运行,无法执行预编译的 CUDA 二进制文件。此外,在转换 CUDA 程序时,它的失败率较高,这凸显了对更可靠、更低级别的转换方法的需求。
跨厂商的 GPU 汇编翻译受到不同指令集和编译管道的阻碍。
- 英伟达采用以 nvcc 为核心的专有工具链,生成 PTX(并行线程执行)和低级 SASS(英伟达汇编语言)
- 而 AMD 则使用通过开源 ROCm 堆栈和 hipcc 编译的 GCN/RDNA 架构(图 2 详细展示了不同堆栈的情况)
在汇编级别弥合这一差距,对于实现硬件计算领域的公平竞争、跨厂商转移特定于硬件的优化,以及实现超越源级重写的自动化(特别是对于包含大量低级调优的遗留 CUDA 代码库)至关重要。我们的模型为英伟达到 AMD 的汇编和源级转换奠定了基础,专注于正确性和一致性。虽然目前还未考虑优化,但它为未来能够在不同 GPU 后端保留和适配关键性能模式的系统铺平了道路。
为了解决跨架构 GPU 翻译数据集的缺乏问题,我们推出了 CASS(CUDA - AMD 汇编和源映射),这是一个大规模的语料库,包含 7 万个语义对齐的 CUDA - HIP 源文件对,以及它们对应的主机(CPU - x86 ISA)和设备(GPU)汇编代码,适用于英伟达(SASS)和 AMD(RDNA3)平台。每个样本都包含不同厂商之间功能等效的低级代码,这些代码通过成功编译和执行进行了验证,有助于跨越执行边界进行指令级分析。与像 The Stack 这样缺乏 GPU 对齐且可编译内容的通用代码语料库不同,CASS 提供了涵盖两个 GPU 计算堆栈的完整源级和二进制表示。为构建 CASS,我们开发了一个完全开源的流程,用于抓取、合成、转换(通过 HIPIFY)、编译和对齐 GPU 代码。我们从两个维度评估 CASS:
1.指令覆盖率,涵盖各种 SASS 和 RDNA3 操作码;
2.领域覆盖率,涵盖来自机器学习、图形和高性能计算等实际计算内核。
❝
CASS 是首个支持 GPU 架构源级和汇编级转换研究的数据集。
为了验证我们数据集的实用性,我们推出了 CASS 模型系列,这是一套针对源级和汇编级 GPU 代码翻译进行微调的特定领域大语言模型。这些模型在我们精心整理的语料库上进行训练,与 GPT-4o、Claude-3.7 等当前最优的专有系统以及 HIPIFY 等传统工具相比,有显著改进——源级翻译准确率达到 95%,汇编级翻译准确率达到 37.5%。为确保严格评估,我们还贡献了 CASS-Bench,这是首个针对跨架构 GPU 转换的基准测试。它涵盖 16 个不同的 GPU 领域,包含经过执行验证的源文件和汇编文件对,为未来低级转换和性能感知代码生成的研究提供了标准化的测试平台。
我们的贡献总结如下:
- CASS 数据集:我们推出 CASS,这是首个用于 GPU 转换的大规模数据集,包含 7 万个语义对齐的英伟达与 AMD 源级(CUDA ↔ HIP)和汇编级(SASS ↔ RDNA3)代码对,覆盖 16 个实际的 GPU 领域。
- CASS-Bench:我们贡献了首个跨架构 GPU 翻译评估基准测试,涵盖 16 个领域的 40 个精心策划的任务,包括功能验证的输出以及对齐的 CUDA/HIP 源文件和 SASS/RDNA3 汇编文件。
- CASS 模型:我们发布了经过跨架构代码翻译训练的特定领域 CASS 大语言模型。我们的 70 亿参数模型在源级和汇编级的准确率分别达到 95%和 37.5%,在 CASS-Bench 基准测试中优于 GPT-4o 和 Claude(准确率为 0%)。至关重要的是,与原生代码相比,85%的翻译汇编代码保留了执行运行时和内存使用情况,证实了语义和性能的保真度。
- CASS 数据集构建流程:我们设计了一个可扩展的流程,用于抓取、合成、转换和编译 CUDA/HIP 代码,将其转换为英伟达和 AMD GPU 上对齐的主机和设备汇编代码。
本文的其余部分安排如下:
- 第 2 节回顾了英伟达到 AMD 以及汇编翻译的先前工作。
- 第 3 节描述了我们的数据收集、转换和过滤流程。
- 第 4 节分析了数据集的结构和覆盖范围。
- 第 5 节概述了模型训练和评估,
- 第 6 节给出结果和消融实验。
最后,第 7 节列出了局限性和未来工作,第 8 节为总结性评论。
二、相关工作
在本节中,我们将介绍 GPU 翻译工作(§2.1)、汇编级转换(§2.2)以及该领域相关基准测试(及其不足之处)(§2.3)的先前研究。
2.1 从英伟达到 AMD 的翻译
❝
GPU 软件生态系统的碎片化催生了对强大的 CUDA 到 HIP 翻译工具的需求。
HIPIFY 通过直接的语法替换,将 CUDA 源代码静态转换为 HIP,实现与 ROCm 的兼容性。在更低的抽象层次上,CuPBoP-AMD 利用 LLVM 工具链将 NVVM IR 转换为与 HIP 兼容的 LLVM IR,提供了更灵活的中间级互操作性。早期,GPU Ocelot 探索了动态二进制翻译,在运行时将 CUDA 重新编译为 AMD/x86 ISA。尽管具有创新性,但它受限于扩展性差和开销高的问题,对于现代 GPU 工作负载来说并不实用。所有这些工具都缺乏持续更新以跟上 CUDA 的发展,存在可用性问题,并且仅在源级别运行。
最近,ZLUDA 引入了一个运行时系统,通过拦截 CUDA API,并通过 LLVM 将 PTX/SASS 转换为与 AMD 兼容的代码,从而在无需访问源代码的情况下,在 AMD GPU 上执行未经修改的 CUDA 二进制文件。最初它针对的是英特尔,现在通过运行时补丁支持 AMD RDNA3。ZLUDA 在 LLVM IR 级别运行,而不是硬件汇编级别。虽然这是一个合理的目标层次,但 ZLUDA 无法从低于 PTX 级别的英伟达低级后端优化中获益,并且仅限于 AMD 堆栈的后端优化。
在我们的工作中,我们的目标是汇编到汇编的翻译,试图利用中间表示(IR)级别以下特定于硬件的优化,这些优化在相应的 AMD 代码库中可能完全缺失。
2.2 汇编到汇编的翻译
❝
由于指令集和执行模型的差异,跨指令集架构(ISA)的汇编翻译具有挑战性。
最近的工作利用语言模型来完成这项任务,包括 CRT(一种从 x86 汇编(CISC,复杂指令集计算机)到 ARM(RISC,精简指令集计算机)的轻量级转换器)和 Guess & Sketch(它将语言模型与符号推理相结合,在 ARMv8 和 RISC-V 之间进行翻译)。这些近期的成功为在尚未探索的 GPU 到 GPU 领域进行汇编到汇编的翻译打开了大门。它们成功的一个关键因素是大量以 CPU 为中心的数据集,使得能够在不同的指令集架构之间进行训练。鉴于 GPU 领域缺乏这样丰富的数据集,这项工作的一个主要目标是在 GPU 厂商之间进行这样的探索和转换,在英伟达/CUDA 目前主导市场的关键 GPU 和机器学习加速领域实现计算的公平竞争。
2.3 CUDA 和 HIP 的数据集和基准测试
如表 1 所示,GPU 领域现有的基准测试通常侧重于运行时性能,没有针对汇编级别的测试,并且在英伟达/AMD 代码库之间没有配对/对齐的数据。
- ComputeEval 仅包含用于硬件评估的 CUDA 代码。Rodinia 和 SHOC 使用 CUDA/OpenCL/OpenMP 提供异构基准测试,但省略了 AMD 代码和汇编。
- PolyBench 使用 CUDA/OpenCL 内核评估编译器,但缺乏汇编级支持或对 AMD 的支持。
- BabelStream 对 HIP/CUDA/OpenCL 的内存带宽进行基准测试,但不包含汇编和领域多样性。Hetero-Mark 针对 CPU - GPU 工作负载,其中 GPU 代码占比极少。
- The Stack 数据集包含近 20 万个 CUDA 文件,但没有 AMD 相关内容或对齐的汇编代码。
❝
相比之下,CASS 仅此一家地提供了 7 万个语义对齐的 CUDA - HIP 源文件和 SASS - RDNA3 汇编文件对,涵盖主机和设备,支持指令级分析,并构成了首个专门为跨厂商 GPU 汇编翻译构建的数据集。
据我们所知,现有数据集都没有提供配对的英伟达 - AMD 源级和汇编级代码,这阻碍了有效的训练和基准测试。
三. 方法
本节概述了 CASS-Instruct 背后的端到端方法,包括数据收集、代码转换以及针对英伟达和 AMD GPU 的编译。我们通过三种策略从高级 CUDA 代码构建低级汇编语料库:抓取公共代码库、生成合成样本以及应用有针对性的代码生成框架。
3.1 CUDA 代码抓取
我们利用 Stackv2 数据集提取 CUDA 源文件。这个数据集是从大量公共代码库中整理而来的,提供了经过去重且符合许可规定的样本,便于构建多样化的面向 GPU 的代码语料库。为了在后续阶段最大化编译文件的数量,我们使用数据集的元数据来识别并下载 CUDA 文件数量最多的前 200 个代码库。
这种基于代码库的下载方式保留了原始目录结构和相对导入,如图 1 所示,与单独文件抓取相比,编译成功率提高了 23.7%。提取后,我们进行了额外的过滤,去除过长的文件(超过 7000 行)、过短的文件(少于 10 行)、简单的样板示例(例如“Hello World”)以及缺少 CUDA 内核定义的文件。
❝
这个过程最终产生了 2.4 万个可用样本。
3.2 合成数据生成
我们使用一个面向编码的大语言模型(Qwen2.5-Coder32B),通过我们的变量增强角色策略来合成 CUDA 内核代码。这个过程首先定义一组带有变量占位符的自然语言提示模板。例如,一个模板可能是:
为了填充这些模板,我们准备了预定义的变量值列表。例如,{size}
可以用 32、64 和 128 等值实例化,而{optimization}
可以从“内存带宽”、“寄存器使用”和“多 GPU 扩展”等选项中采样。这使我们能够系统地生成广泛的提示,每个提示为模板中的占位符指定不同的值。
然后将这些提示传递给大语言模型,它会相应地生成 CUDA 源文件。虽然这种方法引入了一些功能不一致的问题,需要在生成后进行大量过滤(语法错误、定义缺失或无效内存操作),但它能够创建丰富多样的 CUDA 样本。
❝
我们总共生成了 8.5 万个 CUDA 样本,其中 49.1%成功编译,最终得到 4.63 万个有效文件。
3.3 转换和编译
在前面阶段收集到 CUDA 文件后,我们进行去重操作,以确保数据集中的所有样本都是唯一的。然后,我们使用 AMD 的 Hipify 工具,通过将特定于 CUDA 的 API 调用替换为等效的 HIP 调用来转换 CUDA 源文件。转换失败的文件(约 43.9%)被丢弃。一旦有了 CUDA - HIP 文件对,我们使用-Os 编译标志将它们编译为主机和设备汇编代码,与 O3 相比,平均减少了 9.3%的标记数量。鉴于两个堆栈的架构差异(见图 2),它们的编译管道有很大不同,需要付出大量努力来设计和规范我们描述的工作流程。
在图 2 中,CUDA 和 HIP 编译管道的一个关键区别在于它们对主机和设备汇编分离的管理方式。在 ROCm 中,设备二进制文件通常在从 BitCode 转换为汇编的过程中嵌入到主机二进制文件中。我们修改了这种行为,将插入操作推迟到主机汇编转换为目标代码之后,这样可以:
- 独立提取纯主机和设备汇编代码;
- 进行选择性重组,以进行可控的转换和评估。
- *
相反,英伟达没有提供对其二进制注入过程的访问权限,设备和主机汇编代码仍然交织在一起,并且没有官方的提取或重新集成方法。由于我们的目标是支持主机到主机和设备到设备的转换,因此在 CUDA 端不需要重组。相反,我们开发了一个基于正则表达式的过滤流程,在 CUDA 编译过程中分离主机和设备汇编部分。
在将两个堆栈都编译为 SASS 和 RDNA3 后,我们只保留在英伟达和 AMD 编译管道中都成功编译的样本,以处理不对称的失败情况。最终的数据集包括:
- 匹配的 CUDA - HIP 源文件对
- SASS - RDNA3 设备汇编代码
- 主机汇编代码
❝
通过这些步骤,我们得到了 6.4 万个样本。
3.4 OpenCL 流程
❝
OpenCL 是在 CUDA/HIP 框架之外生成英伟达到 AMD 映射数据集的独立流程。换句话说,它也可以在不经过上述堆栈的情况下编译到汇编级别,作为 GPU 代码开发的单一“源”。
我们从 Stack 数据集中收集了大约 6000 个 OpenCL 代码片段,并将它们编译为设备汇编代码。
- 在英伟达堆栈上,使用一个包装的 C++函数来封装 OpenCL 提供的 clBuildProgram 库,并将它们转换为 PTX,然后使用 CUDA 堆栈将其编译为汇编代码。
- 在 AMD 堆栈上,使用 clang 直接将 OpenCL 文件转换为设备汇编代码,同时在此过程中强制它生成中间的 LLVM 代码。
总的来说,这些流程产生了 7 万个对齐的汇编样本,最终分布详见表 2。所有编译都是在一台配备英伟达 A100 PCIe GPU 的机器上针对 CUDA 堆栈(SASS sm85 ISA)进行的,在 AMD Radeon RX 7900 XT GPU 上针对 AMD 堆栈(RDNA3 ISA)进行的。
四、CASS-Instruct 和 CASS-Bench 数据集
最终的指令训练数据集(CASS-Instruct)包含 70,694 个样本,涵盖广泛的领域,如图 3 所示,主要集中在 GPU 计算和与 GPU 相关的数据结构。该数据集还包括相应的 CUDA 和 HIP 源代码以及它们编译后的汇编表示。所有样本均已通过验证可成功编译,并且具有成对的源/汇编对齐。
4.1 数据集分析
CASS 揭示了 CUDA 和 HIP 在源级别和汇编级别都存在显著的结构差异,这突出了跨架构 GPU 转换固有的复杂性。我们通过查看汇编文件的长度、它们的语法相似性和操作码多样性来分析这一点。
- 汇编文件的长度:图 4(左)显示:
我们发现源复杂度和汇编大小之间存在指数关系,对于等效代码,CUDA 生成的输出比 HIP 更冗长。这表明随着代码复杂度的增加,汇编级翻译的难度也在增加。见下图,完整细节见附录 A.4.1。
- 在合成子集和 Stack 子集中,AMD 设备汇编平均长度是英伟达的两倍。
- 而在 OpenCL 子集中,英伟达的设备汇编比 HIP 设备汇编长 50%。
- 代码效率和分析:汇编准确率因领域而异。
这凸显了保留低级语义的挑战。尽管如此,翻译后的代码在执行上与原始代码非常接近:内存使用偏差小于 ±0.3%,执行时间偏差在 ±11.8%以内,超过 85%的样本在这两个指标上偏差在 ±5.6%以内。
- 在数学、数据结构和图形任务中为 0%
- 在线性代数和内存操作中为 25 - 50%
- 在物理模拟中高达 100%
- 语法相似性:如图 4(右)所示,CHRF 分数表明,HIP 和 CUDA 汇编在设备代码和主机代码的语法相似性较低,特别是在 OpenCL 和 Stackv2 子集中。相比之下,源代码翻译,尤其是在合成子集中,显示出较高的重叠度,这突出了表面级语法在源代码中比在编译后的汇编表示中保留得更好。
- 操作码多样性:我们注意到,张量操作在 CUDA 和 HIP 汇编中占主导地位,尤其是在设备代码中,与内存相关的指令(如 mov 和 call)出现频率最高(见附录 A.4)。此外,HIP 操作码(如 s_mov_b32 和 v_add_co_u32)被广泛使用,反映了 AMD 指令集架构特有的低级向量和内存操作,而英伟达则以其自己版本的常见指令(如 movq、call 和 jmp)为主,并且主机端集成度更高(见附录 A.4)。两个堆栈都有常见的控制和内存操作(如 mov、test),但 HIP 提供了对 GPU 内部更细粒度的访问,揭示了对并行性的更深入洞察。合成子集强调面向内存的指令,这与由大语言模型驱动的模板优化一致。图 6 进一步展示了操作码嵌入的 t-SNE 聚类,表明尽管后端存在差异,但英伟达和 AMD 在设备和主机级别共享语义对齐的操作码分布。
4.2 CASS-Bench
CASS-Bench 是一个包含 40 个样本的评估套件,涵盖 16 个以 GPU 为中心的领域,每个领域由 1 - 5 个精选提示表示。对于每个样本,我们
- 使用 Claude-3.7 生成 CUDA 实现;
- 在英伟达硬件上编译并执行以获得参考输出;
- 然后促使 Claude-3.7 生成相应的 AMD 代码。
如果由于编译错误、格式差异或随机生成器差异导致输出不匹配,则重新生成 AMD 代码。只有经过手动验证输出等效的样本才被纳入。所有最终的英伟达 - AMD 对都使用我们的流程(第 3 节)进行处理,以提取对齐的主机和设备汇编代码。图 3(右)显示了类别分布。
五、实验
我们通过对不同参数规模的 Qwen2.5-Coder 模型进行指令监督微调来评估 CASS 数据集。开发了两个模型变体:一个用于汇编翻译,另一个用于源翻译。我们将这些模型与专有和开源基线进行基准测试,包括规模更大的系统。
指令监督微调
为确保输入样本适合大语言模型 16K Token 的上下文窗口,我们通过删除冗余空格和注释对 CUDA 汇编代码进行规范化处理,这使 Token 数量大致减少了 15%。由于 HIP 汇编代码对空格变化敏感,因此未对其进行预处理。
我们在 4 个 A100 GPU 上对参数规模为 15 亿、30 亿和 70 亿的 Qwen2.5-Coder 模型进行微调,批处理大小为 4,梯度累积为 32(有效批处理大小为 512),学习率为 。由于数据集与模型预训练语料库的分布差异,我们选择了相对激进的学习率。
训练过程中使用了 DeepSpeed,并采用优化器状态分片以最大化硬件效率,实现了 98%的 GPU 利用率。此外,我们结合了 Liger Kernel 和分页 Adam 优化器来加速训练并更有效地管理内存。我们使用 LLaMAFactory 来实现所有这些优化。
所有模型都在 16K Token 的上下文窗口下进行训练。在推理时,我们应用旋转位置嵌入(RoPE)外推法以支持高达 32.7K Token 。推理效率较高,每个 16K Token 的样本大约需要 56 秒。
# RoPE 外推法科普
在模型训练里,RoPE外推法(Rotary Position Embedding外推法,
旋转位置嵌入外推法 )是个很有用的技术,主要和处理数据的位置信息
有关。
## RoPE位置编码
给信息“贴标签”:我们可以把模型处理的信息想象成排队的小朋友。每个
小朋友都带着不同的信息,而RoPE就像是给小朋友们贴上有顺序的“位置
标签”,告诉模型谁站在第几个位置。它不是简单按顺序标个号,而是用
一种特殊的数学方法——旋转向量,把位置信息融入到信息本身里面。比如
有两个小朋友A和B,RoPE能让模型知道A在B前面,而且还能知道A和B之
间隔了几个小朋友,这样模型就能更好地理解信息之间的顺序关系啦。
## 外推法
突破“队伍长度”限制**:模型在训练的时候,能“看到”的信息数量是有
限的,就好像队伍不能太长,太长了模型就照顾不过来。但是实际用的
时候,可能会遇到很长很长的“队伍”。RoPE外推法就像是一个神奇的魔法,
能让模型突破这个“队伍长度”的限制。就算来的小朋友数量超过了原来
训练时的数量,模型也能根据之前学到的“贴标签”方法,给新加入的
小朋友也贴上合适的“位置标签”,然后像训练时一样去理解和处理这些信息。
## 好处:让模型更厉害
RoPE外推法给模型带来了很多好处。有了它,模型可以处理更长的信息,
就像一个人能一口气读完更长的文章,理解得更好。在处理代码翻译时,
能处理更长的代码文本,让翻译更准确。而且它还能让模型在不同长度的
信息面前都表现得很稳定,不会因为信息多一点或少一点就“犯错”。
评估协议
对于源级和汇编级转换,由大语言模型生成的代码(HIP 源文件或主机/设备汇编代码)都要进行编译和执行。然后将生成的输出与 CASS-Bench 中的真实结果进行比较,以验证功能正确性。
六、结果
6.1 汇编到汇编的性能
表 3 报告了不同大语言模型(LLMs)和工具在 CASS-Bench 基准测试中的结果。除了 Qwen2.5-Coder-32B 模型达到 25%的准确率之外,包括专有模型和大型开源模型在内的所有基线模型准确率均为 0%。
ZLUDA 作为一个运行时级别的系统,尽管直接对已编译的二进制文件进行操作,但汇编准确率仅为 2.5%,这可能归因于其对 RNDA1 的兼容性问题。相比之下,我们的 CASS 模型准确率高达 37.5%,这突出表明我们的数据集赋予了现有工具和模型所缺乏的关键汇编级知识。
6.2 源到源的性能
为了进一步验证数据集的实用性,我们还评估了源转换的性能,结果如表 3 所示。
这项任务与许多专有模型的一些预训练目标更为契合,这在它们相对较强的性能(准确率在 80%到 90%之间)中有所体现。
- 尽管如此,即使是最小的 CASS 模型(15 亿参数)也显著优于所有基线模型,达到了 90%的准确率。
- 70 亿参数的变体表现出了卓越的性能,准确率高达 95%。
尽管我们的 CUDA 数据集完全由 Hipify 进行翻译,并且我们只保留了语义对齐的样本,但我们的模型比 Hipify 的准确率高出 7.5%。
6.3 消融研究
表 4 显示,仅使用 Stack 数据进行训练时,汇编准确率为 17.5%。
- 添加合成数据后,准确率提高了 12.5%,这突出了合成数据在学习低级模式方面的作用。
- OpenCL 数据使准确率提高了 2.5%,提供了补充覆盖。
- 而 RoPE 外推法通过扩展上下文容量将准确率提高到 37.5%。
七、局限性与未来工作
尽管在汇编转换方面取得了领先的成果,但由于在复杂或代表性不足的领域中准确率有限,目前的性能仍不足以用于实际生产。
扩展类别多样性对于解决这一问题至关重要。当前的数据集每个供应商仅涵盖一对主机/设备(RTX 4090 和 RX7900),这限制了在具有不同指令集架构的 GPU 架构上的通用性。为了支持实际部署,需要更广泛的架构表示。
最后,为了适应 16K Token 的上下文窗口,数据集的规模被最小化,这排除了许多特定于供应商的低级优化。要纳入这些优化,未来的模型需要更大的上下文容量,或者采用更先进的分块和注意力策略。
八、结论
❝
我们提出了 CASS,这是首个用于跨架构 GPU 代码转换的大规模数据集和模型套件,涵盖了英伟达和 AMD 平台的7 万个对齐的源级和汇编级代码对。
我们的数据集独特地涵盖了源到源(CUDA 到 HIP)和汇编到汇编(SASS 到 RDNA3)的映射,解决了低级代码可移植性方面的关键差距。为了验证其有效性,我们训练了 CASS 模型系列,在源级翻译中达到了 95%的准确率,在汇编级翻译中达到了 37.5%的准确率,显著优于专有模型和开源基线模型。
此外,我们转换后的代码保留了功能行为:超过 85%的样本在内存使用和运行时方面与原生代码的执行情况相匹配。我们还引入了 CASS-Bench,这是一个专门构建的涵盖 16 个以 GPU 为中心的领域的评估套件。
所有模型、数据和基准测试均作为开源资源发布,为未来在编译器工具、硬件互操作性和性能感知代码生成方面的研究奠定了基础。
参考文献
END
作者:MBZUAI,ANU
来源:卡巴拉花园
推荐阅读
- MGIoU革命 | 统一损失函数高效优化任意凸形状,计算延迟锐减40倍超越KFIoU
- Meta Shuffling 的 MoE Grouped GEMM kernel benchmark
- Soft 最近邻插值 SNI 对齐特征 +ESD 增强空间保留,效率精度双突破
- 图解Vllm V1系列4:加载模型权重(load_model)
- 减少 55% 代码行数、 CPU 和 GPU 峰值内存,加速训练推理!
欢迎大家点赞留言,更多 Arm 技术文章动态请关注极术社区嵌入式AI专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。