[论文阅读] 人工智能 | 在非CUDA硬件上运行几何学习:基于Intel Gaudi-v2 HPU的PyTorch框架移植实践

在非CUDA硬件上运行几何学习:基于Intel Gaudi-v2 HPU的PyTorch框架移植实践

论文标题:PyTorch-based Geometric Learning with Non-CUDA Processing Units: Experiences from Intel Gaudi-v2 HPUs

arXiv:2507.01031 (cross-list from cs.LG)
PyTorch-based Geometric Learning with Non-CUDA Processing Units: Experiences from Intel Gaudi-v2 HPUs
Fanchen Bu, Kijung Shin
Comments: Conference paper: Accepted in Korea Computer Congress (KCC) 2025. The library is available at this https URL
Subjects: Machine Learning (cs.LG); Software Engineering (cs.SE)

研究背景:当图学习遇上硬件新选择

想象一下,我们生活在一个由"关系"构成的世界里:社交网络中人与人的关注关系、化学分子中原子的连接方式、推荐系统中用户与商品的互动记录,这些都可以用"图"这种数据结构来表示。而几何学习,尤其是图神经网络(GNN),就像是一位擅长解读这些关系的"翻译官",能从图数据中提取有价值的信息,在节点分类、链接预测等任务中大显身手。

过去,Nvidia的CUDA显卡就像几何学习领域的"标准配置电脑",几乎所有算法都为它优化。但随着技术发展,我们有了新的"硬件选择"——比如Intel的Gaudi HPU,它像一台性价比更高的"新型电脑",在性能和能耗上表现亮眼。然而麻烦来了:原来为CUDA"定制"的软件(如PyTorch几何学习框架),在这台"新电脑"上无法直接运行,需要我们当"系统工程师",解决兼容性问题。

创新点:为非CUDA硬件搭建"桥梁"

论文的独特之处在于,它没有仅仅停留在理论分析,而是动手打造了一套"跨平台工具包":

  1. 核心操作重构:针对Gaudi HPU不支持的散射、稀疏索引等基础操作,用PyTorch重新实现,就像为新硬件编写"驱动程序"。

  2. 全流程实践指南:提供16个手把手教程和11个真实案例,从环境搭建到模型训练,覆盖节点分类、点云分析等场景,相当于一份"新电脑使用说明书"。

  3. 问题诊断数据库:记录移植中遇到的错误(如RuntimeError)和解决方法,比如通过移除torch.compile解决兼容性问题,形成"故障排除手册"。

研究方法和思路:三步拆解移植工程

第一步:识别"不兼容零件"

  • 发现torch-scatter(散射操作)、torch-sparse(稀疏矩阵)、torch-cluster(图聚类)等库不支持Gaudi HPU,就像发现新电脑无法识别旧软件的安装包。

第二步:打造"兼容适配器"

  • 散射操作:用纯PyTorch函数重写,比如通过索引聚合实现"散射相加",让新硬件能执行基础数据聚合。
  • 稀疏操作:将稀疏矩阵乘法转换为散射操作,就像把"方言指令"翻译成新硬件能听懂的"普通话"。
  • 高级图操作:先在CPU上计算k-NN搜索等任务,再把结果传给Gaudi HPU,类似"分工合作"的工作模式。

第三步:编写"使用教程"

  • 基于PyTorch Geometric官方教程,改编出从GCN基础到点云分类的实操案例,每个例子都带可运行代码和错误分析,降低上手难度。

主要贡献:让非CUDA硬件"能用、好用"

  1. 降低硬件门槛:以前只有CUDA显卡能高效运行几何学习模型,现在研究人员用Gaudi HPU也能做实验,节省成本且拓宽硬件选择。

  2. 提供一站式资源:公开的GitHub仓库整合了工具代码、教程和故障解决方案,相当于一个"几何学习跨平台加油站",地址:https://github.com/NAVER-INTEL-Co-Lab/gaudi-geometric-learning。

  3. 推动跨平台发展:为几何学习算法在非CUDA硬件上的优化提供了基础,就像为软件跨平台运行铺好了道路。

总结

解决的主要问题

论文解决了Intel Gaudi-v2 HPU与PyTorch几何学习框架的兼容性问题,通过重写核心操作、提供实践教程,让非CUDA硬件能顺利运行图神经网络模型,填补了现有库对新兴加速器支持的空白。

主要成果

  • 开发了Gaudi HPU兼容的散射、稀疏等操作工具集;
  • 整理了16个教程和11个案例,覆盖从基础到复杂的几何学习任务;
  • 建立公开仓库,分享移植经验和故障解决方案,助力非CUDA硬件上的几何学习研究。

一段话总结

本文聚焦于在Intel Gaudi-v2 HPU等非CUDA处理单元上运行基于PyTorch的几何学习框架的实践,介绍了开发的核心实用工具(如散射、稀疏索引、k近邻等操作),提供了十六个引导教程和十一个真实案例,包含遇到的故障诊断分析及详细解决方法,相关资源整合在公开的GitHub仓库中,为研究人员在非CUDA硬件上实验几何学习算法和模型降低了门槛,为进一步优化和跨平台可移植性奠定了基础。


思维导图

在这里插入图片描述


详细总结

一、研究背景与目标
  1. 几何学习的重要性:几何学习已成为建模非欧几里得数据(尤其是图结构数据)的强大范式,应用涵盖社交网络、分子结构、知识图谱和推荐系统等领域。
  2. 硬件现状:Nvidia支持CUDA的GPU在深度学习硬件领域占主导地位,但英特尔的Gaudi HPU等新兴加速器在性能和能效方面具有竞争力。
  3. 面临挑战:使用此类非CUDA处理单元需要大量的工程工作和新颖的软件适配,例如稀疏操作不支持、关键内核的反向传播问题等。
  4. 研究目标:将基于PyTorch的几何学习框架移植到Gaudi-v2 HPU,降低研究人员在非CUDA硬件上实验几何学习算法和模型的门槛。
二、核心贡献
  1. 开发核心实用工具:恢复了Gaudi-v2 HPU上的基本操作,如散射、稀疏索引、k-最近邻等。
  2. 提供丰富资源:整合了16个引导教程和11个真实世界的例子,并对遇到的故障进行了诊断分析,提供了详细的解决方法。
  3. 建立公开仓库:将所有经验整合到一个公开的GitHub存储库中,为进一步优化和跨平台可移植性提供了基础。
三、GitHub存储库概述
部分内容详情
文档包含用户友好的README,包括环境设置说明、在Gaudi上启动作业的指导以及相关外部材料的链接
核心实用工具一套辅助模块,旨在弥补现有库的不足,支持在Gaudi上进行散射、稀疏索引和邻域计算等操作,无需底层编程
教程和例子包含分步教程和实际例子,涵盖从基本图卷积网络(GCN)构建到链接预测和点云分类等任务,每个都有可运行的代码和对在Gaudi-v2上遇到的挑战的分析
四、核心实用工具
  1. 散射操作
    • 挑战:torch-scatter库提供了CPU和CUDA后端的实现,但缺乏对Gaudi HPU的原生支持。
    • 解决方案:使用纯PyTorch函数重新实现散射操作,确保与Gaudi-v2 HPU兼容。
  2. 稀疏操作
    • 挑战:torch-sparse库提供了CPU和CUDA后端的实现,但缺乏对Gaudi HPU的原生支持。
    • 解决方案:将几个稀疏张量操作转换为等效的散射操作,例如稀疏矩阵和密集矩阵之间的乘法可以通过基于散射的聚合重新实现。
  3. 高级图操作
    • 挑战:k-最近邻(k-NN)搜索和METIS分区等高级图操作缺乏对Gaudi HPU的支持。
    • 解决方案:提供在CPU上执行这些图实用程序的指南和实现,然后将结果传输到Gaudi HPU进行进一步处理。
五、教程和例子
  1. 教程
    • GCN和GAT管道:涵盖基本的图卷积和注意力机制。
    • 嵌入和聚合函数:说明如何在Gaudi上高效实现和执行节点嵌入和聚合函数。
    • 图池化和读出:演示各种用于图级表示学习和总结的技术。
    • DeepWalk和Node2Vec实践:通过随机游走介绍表示学习,强调用于下游任务的节点嵌入。
  2. 例子
    • 节点分类:使用基准数据集的分步工作流程,包括训练和评估程序。
    • 链接预测:演示如何使用GNN建模实体之间的关系,包括推荐等任务的实际工作流程。
    • 用DGCNN进行点云分类:说明超越图的几何深度学习,特别是针对3D点云分类任务。
  3. 诊断分析
    • 记录了将现有PyTorch几何教程和例子适配到Gaudi-v2 HPU时遇到的各种兼容性问题,包括不支持的操作、意外的运行时错误和细微的数值不匹配,并提供了系统的调试过程和解决方法。
六、结论

本文展示了将基于PyTorch的几何学习工作流适配到Intel Gaudi-v2 HPU的努力,通过开发核心实用工具弥补了功能差距,提供的教程和例子展示了在非CUDA硬件上的端到端GNN训练,所有资源整合在公开仓库中,降低了研究人员在替代加速器上探索图神经网络的门槛。


关键问题

  1. 问题:在Gaudi-v2 HPU上运行PyTorch几何学习框架面临的主要挑战是什么?
    答案:主要挑战包括现有库(如torch-scatter、torch-sparse、torch-cluster)缺乏对Gaudi HPU的原生支持,导致散射操作、稀疏操作和高级图操作(如k-NN搜索)无法直接使用,还存在反向传播等问题。
  2. 问题:针对散射操作缺乏支持的问题,采取了什么解决方案?
    答案:使用纯PyTorch函数重新实现了散射操作,确保与Gaudi-v2 HPU兼容,无需依赖原生不支持的torch-scatter库。
  3. 问题:GitHub存储库中包含哪些主要部分来支持在Gaudi-v2 HPU上的几何学习?
    答案:存储库包含三个主要部分,分别是文档(提供环境设置、作业启动等指导)、核心实用工具(实现散射、稀疏等操作)、教程和例子(涵盖从基础到实际应用的各种任务及代码和分析)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89829.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python-多线程-threading

1 需求 2 接口 3 示例 4 参考资料 Python treading 模块 | 菜鸟教程

2025年- H91-Lc199-- 62.不同路径(多维动态规划)--Java版

1.题目描述 2.思路 dp含义:代表到当前位置的路径数 递推公式:dp[i][j]dp[i-1][j]dp[i][j-1] dp数组初始化,我们要确保第一行和第一列是有值的. dp数组的遍历顺序:我们需要从左往右遍历,从上往下遍历。并且把第一行和第…

char 不是 Java 中的 2 字节(16 位)吗? 为什么用 UTF-8 编码写入时,一个中文要占 3 个字节?

char 不是 Java 中的 2 字节(16 位)吗? 为什么用 UTF-8 编码写入时,一个中文要占 3 个字节? ✅ 一、Java 中的 char 是什么? Java 的 char 是一个 固定大小的 2 字节(16 位)类型&am…

【Elasticsearch】检索排序 分页

检索排序 & 分页 1.测试数据准备2.排序功能2.1 简单字段排序2.2 多字段排序2.3 日期排序 3.分页功能3.1 基础分页3.2 深度分页(不推荐大数据量使用)3.3 使用 search_after 进行高效分页 4.综合示例:高亮排序分页5.实践建议 1.测试数据准备…

Delta、Jackknife、Bootstrap

用班级平均身高的案例,展示 ​Delta、Jackknife、Bootstrap​ 的完整计算过程。 ​0. 数据准备​ ​原始数据(4个学生的身高)​​: 真实均值(目标统计量)​​: ​1. Delta 方法(公式…

企业智脑技术架构设计:紧贴企业场景规划面向未来的发展趋势与实现路径

摘要 本文深入探讨了企业智脑技术架构的设计理念与发展趋势,分析了当前企业智能化转型的技术需求与挑战,提出了一个面向未来的企业智脑技术架构设计方案。文章从底层技术支撑、核心能力构建、应用场景适配、安全合规保障以及未来发展路径五个维度展开论…

新手向:Python方向讲解

从NASA火星任务到TikTok推荐算法,从自动化脚本到量子计算,Python用import antigravity重新定义了编程边界 一、设计哲学:优雅明确的编程禅学 Python之禅(import this): 优美胜于丑陋(Beautifu…

Chrome谷歌浏览器插件ModHeader,修改请求头,开发神器

文章目录一、介绍与下载二、使用一、介绍与下载 ModHeader顾名思义就是让我们可以自定义HTTP请求头或者是重写响应头,包括新增请求头/响应头或者覆盖Chrome浏览器设置的请求头的默认值,同时还可以根据URL Pattern来只对特定网站生效。 有条件的同学可以…

SEW:无监督预训练在语音识别中的性能-效率权衡

摘要 本文研究了自动语音识别(ASR)中预训练模型的性能-效率权衡问题。我们聚焦于 wav2vec 2.0,并形式化了多种影响模型性能和效率的架构设计。基于所有观察结果,我们提出了 SEW(Squeezed and Efficient Wav2vec&#…

linux系统部署express+vue项目

一、准备阶段: 1、安装linux上所需要的环境:npm nodejs nginx pm2 //安装 npm(Node 包管理器) sudo apt install npm//判断是否安装成功 npm -v//安装 Node.js(可以根据需要选择版本) sudo apt inst…

PixiJS教程(004):点击事件交互

1.6 事件交互实现要求:点击宝剑,修改宝剑的颜色。1️⃣实现代码: // 为精灵添加交互事件 sprite.interactive true; sprite.on(click, () > {// 点击精灵时,改变精灵的颜色sprite.tint Math.random() * 0xFFFFFF; });说明&am…

创客匠人助力家庭教育IP破局:从0到1打造创始人个人品牌全攻略

一、IP定位:细分赛道的精准锚定与用户画像构建 在家庭教育8000亿市场规模的竞争中,创始人IP的差异化定位成为破局关键。创客匠人通过“标签化定位”工具,帮助教育者锁定垂直领域,如亲子沟通、青春期教育等细分赛道。以景丽霞老师…

使用坚果云扩容Zotero同步空间的简单快捷方法

本文介绍基于坚果云的WebDAV协议,用于文献管理软件Zotero的文件同步,从而实现Zotero存储空间扩容的方法。 在之前的文章Zotero文献管理软件入门使用方法:软件下载、文献导入、引文插入(https://blog.csdn.net/zhebushibiaoshifu/a…

Java启动脚本

Java启动脚本 编写代码,然后打包 Java-1.0-SNAPSHOT.jar public class test {public static void main(String[] args) {System.out.println("Hello IDEA");} }编写运行脚本 #!/bin/sh WORKDIR$(cd $(dirname $0); pwd) cd $WORKDIRexport JAVA_OPTS"…

VSCode使用ssh远程连接阿里云

1. 终端选择 Windows使用PowerShell Ubuntu和Mac使用Terminal 2. 设置ssh 2.1. 第一台电脑 生成密钥 ssh-keygen -o -t rsa -b 4096 -C "emailexample.com" 按三次回车 查看密钥 cat ~/.ssh/id_rsa.pub 拷贝密钥,粘贴到服务器的密钥框中 2.2. 第…

XLSR-Wav2Vec2:用于语音识别的无监督跨语言表示学习

摘要 本文提出了 XLSR,该方法通过从多种语言的原始语音波形中预训练单个模型,以学习跨语言的语音表示。我们基于 wav2vec 2.0 构建模型,该方法通过对掩蔽后的潜在语音表示解决对比任务进行训练,并联合学习在多种语言之间共享的潜…

图灵完备之路(数电学习三分钟)----数据选择器与总线

1.数据选择器之前我们学习了逻辑与算数的计算,得知两个数字之间的加减和与或的结果是不同的,而一个通用的数字电路不可能只有一个功能,所以我们将在本节引入电路选择器这一“器件”,来实现对两个输入的运算方式的选择,…

Linux下如何设置CUDA的路径

今天遇到一个关于CUDA的问题,我要跑的深度学习代码,他里面有cuda编程,需要编译。但是你运行就报错。 代码提示我大段报错。 (score-denoise) ubuntuGPUA10002:~/wbd/score-denoise_Transformerdepth20$ python train.py Detected CUDA fil…

js树的排序

树 树的前中后序遍历 树是一种重要的非线性数据结构,尤其是二叉树。二叉树的遍历是操作树的基础,主要有前序遍历、中序遍历和后序遍历三种方式。 前序遍历 访问顺序:根结点 -> 左子树 -> 右子树。 遍历规则:首先访问根结…

解码 Red Stuff:Walrus 高效可靠存储的引擎

Red Stuff 是 Walrus 所采用的二维(2D)纠删码协议,定义了数据如何被编码和存储。它是实现高效、安全、且高可用的去中心化存储的关键。通过 Red Stuff,Walrus 成功解决了去中心化存储系统常见的三大难题:安全性、复制效…