当前位置: 首页 > article >正文

零侵入、极简适配!飞桨CINN实现类CUDA硬件“即插即用”

简介继飞桨框架3.1版本推出“插件式 CUDA兼容类硬件接入方案”飞桨实现插件式硬件图接入方案模型推理加速2.2倍实现运行时Runtime与算子Kernel的高效复用后飞桨成功打通了PaddleCustomDevice仓硬件使用神经网络编译器CINNCompiler Infrastructure for Neural Networks的链路。新方案通过C接口隔离与动态链接机制实现了CINN编译器与硬件底层编译工具链的彻底解耦。CUDA兼容类硬件如天数、沐曦等仅需实现标准化接口即可“即插即用”地接入CINN充分享受飞桨框架编译器带来的图优化与算子自动生成等核心技术红利即彻底告别手写底层代码不仅实现模型端到端训练提速27.4%更在科学计算的微分方程求解场景下取得了比PyTorch快115%的压倒性优势统一多场景自动编译加速——支持动态shape场景一套架构搞定训推需求。飞桨多硬件统一适配方案01整体架构概览分层解耦动态挂载本方案在架构设计上延续了飞桨CustomDevice插件式接入的核心思想将整个链路严格划分为“CinnCustomDevicePlugin 框架接口层”、“C_CinnInterface C接口桥接层”、与“C_DeviceInterface厂商插件层”。CINN编译器实现CUDA兼容类硬件插件式接入方案02核心实现框架与插件的“双向奔赴”为了实现上述架构飞桨核心仓与PaddleCustomDevice硬件插件仓进行了清晰的分工与接口对齐。01框架侧Paddle Repo定义标准与抽象封装框架侧通过抽象接口定义了标准的设备交互规范消除了对任何特定硬件后端的依赖。核心接口定义(C_CinnInterface)定义了三大类跨语言C接口Compiler Toolchain编译工具链包含compile()用于调用外部编译器get_runtime_source()获取设备端运行时源码。Runtime Strategy运行时策略包含module_load/unload()用于加载和卸载编译后的模块get_kernel_address()寻址函数以及launch_kernel()启动执行。Compile Strategy编译优化提供apply_custom_pass()允许厂商应用自定义的IR中间表示优化Pass。C抽象接口与桥接层在custom_device_backend_api.h中定义了 CustomCompilerToolchain 和 CustomRuntimeStrategy 等高层抽象类。通过 CinnCustomDevicePlugin 获取插件实例并在桥接层将框架的 C 调用安全地转换为对 C 接口的调用。02插件侧PaddleCustomDevice Repo动态注册与能力映射硬件厂商以类CUDA硬件为例只需在自定义插件仓中实现对应的逻辑并通过动态库的形式供飞桨加载。插件入口动态注册在InitPlugin()中不仅填充设备管理、显存、通信等基础接口还通过调用InitCinnInterface()将底层实现挂载到C_CinnInterface上。编译器与运行时实现编译阶段通过实现CustomDeviceCompile调用厂商自研编译器如天数的IXCC,沐曦的MXCC将源码编译为二进制格式。同时注入设备端需要的Runtime Source如特定的math函数或reduce原语。运行阶段完美兼容CUDA Driver API范式。例如CustomDeviceModuleLoad底层直接映射为加载编译模块类似cuModuleLoadCustomDeviceLaunchKernel映射为执行类似cuLaunchKernel。03一览全景模型执行的调用链路当用户模型在支持CINN的环境下运行时一条清晰的调用链路被瞬间激活数据与指令在框架与硬件之间高效流转01编译期(CINN Compiler)首先是编译期的深度优化与底层代码生成。飞桨框架的前端在完成基础的图优化后会首先进入由硬件主导的深度定制阶段。此时框架会调用compile_strategy-ApplyCustomPass触发名为apply_custom_pass的C接口。通过该接口系统动态加载并执行硬件厂商自定义的IR Pass中间表示优化与Schedule调度编排策略充分针对特定硬件的寄存器与访存层级进行极致的算力压榨。在经历层层定制优化后系统进入Codegen代码生成环节将优化后的中间表示转化为结构化的底层代码。最后框架获取对应的编译工具链并调用Compile方法进而触发compile C接口直接唤醒硬件厂商自研的底层编译器例如天数的IXCC和沐曦的MXCC由它负责将这些代码最终翻译成目标硬件能懂的高效二进制机器码。02加载期紧接着进入加载期。机器码生成后框架的运行时策略模块会主动调用LoadModule方法这会向下触发module_load这一C接口。该接口的作用是指示底层驱动将刚刚编译好的二进制模块妥善载入设备的显存空间其底层行为完全对标并兼容CUDA中的cuModuleLoad操作。03执行期(Engine)最后是真正的执行期。当模型运行到具体的计算节点时飞桨的执行器会先从加载好的模块中精准寻址提取出对应的函数指针。随后框架调用LaunchKernel方法该调用最终被映射到底层的launch_kernelC接口上在物理硬件层面上真正拉起计算内核的执行如同执行cuLaunchKernel。04适配成本与代码量对比基于本方案对于CINN编译器的硬件适配研发门槛和代码开发量实现了显著降低。以往采用内置侵入式方案需要直接修改飞桨核心代码仓初次跑通往往需要在核心框架内硬编码数千行C代码。而目前沐曦、天数智芯等厂商已采用全新插件式接入方案硬件后端与飞桨主仓解耦。厂商仅需利用自有编译器如天数智芯的IXCC、沐曦的MXCC在PaddleCustomDevice独立仓中实现数十行纯C接口的映射挂载和几百行对应实现即可沿用CINN的基础Schedule、Pass和Codegen逻辑激活CINN基本访存密集型算子融合能力。相比之下该方案能极大降低编译器底层的技术壁垒大幅加速新硬件生态落地飞桨。在真实的工程落地中底层编译适配工作实现了从“月级”到“周级”的跨越。如今以天数智芯和沐曦为例无需侵入式修改Paddle仓仅需不到一周即可完成基本接入。以沐曦为例/work/PaddleCustomDevice/backends/metax_gpu/cinn/cinn_interface.cc中#include cinn_interface.hnamespace paddle {namespace custom_device {namespace metax {// // 外部函数声明 (External Function Declarations)// 这些函数需要在对应的子目录文件中实现 (.cc)// // --- 来自 compiler/compiler.cc ---// 负责调用 mxcc 将 CINN 生成的源代码编译为二进制extern C_Status MetaxCompile(void* dev_ptr, const char* code, char* out_path, size_t len);// 负责提供沐曦 GPU 运行时的基础源码 (类似 cuda_device_runtime.cu)extern const char* MetaxGetRuntimeSource(void* dev_ptr);// --- 来自 runtime/cinn_runtime.cc ---// 负责加载编译好的二进制模块 (.mx / .so)extern C_Status MetaxModuleLoad(void* dev_ptr, const char* path, void** mod_out);// 负责卸载模块extern C_Status MetaxModuleUnload(void* dev_ptr, void* module_handle);// 负责从模块中查找核函数地址extern C_Status MetaxGetKernelAddress(void* dev_ptr, void* module_handle, const char* func_name, void** func_out);// 负责启动核函数 (Launch Kernel)extern C_Status MetaxLaunchKernel(void* dev_ptr, void* func_ptr, void** args, int num_args, int gx, int gy, int gz, int bx, int by, int bz, int shm, void* stream);// --- 来自 passes/pass_manager.cc ---// 负责应用自定义的图优化 Pass由框架在遇到未知 Pass 名时回调extern C_Status MetaxApplyCustomPass(void* dev_ptr, const char* pass_name, void* ir_module);// 返回 MetaX GPU 的有序 Pass 执行列表extern C_Status MetaxQueryPassPipeline(void* dev_ptr, char pass_names[][128], int* count);// // 接口初始化实现 (Interface Initialization)// static C_CinnInterface metax_cinn_impl;void InitCinnInterface(C_DeviceInterface* device_interface) { // 1. 安全起见先清零 std::memset(metax_cinn_impl, 0, sizeof(C_CinnInterface)); // 2. 设置结构体大小 (用于版本校验) metax_cinn_impl.size sizeof(C_CinnInterface); // 3. 设置上下文指针 (可选) // 如果你的实现需要全局状态可以指向一个结构体否则设为 nullptr metax_cinn_impl.dev_ptr nullptr; // 4. 挂载 Compiler Toolchain 接口 metax_cinn_impl.compile MetaxCompile; metax_cinn_impl.get_runtime_source MetaxGetRuntimeSource; // 5. 挂载 Runtime Strategy 接口 metax_cinn_impl.module_load MetaxModuleLoad; metax_cinn_impl.module_unload MetaxModuleUnload; metax_cinn_impl.get_kernel_address MetaxGetKernelAddress; metax_cinn_impl.launch_kernel MetaxLaunchKernel; // 6. 挂载 Compile Strategy 接口 metax_cinn_impl.apply_custom_pass MetaxApplyCustomPass; metax_cinn_impl.query_pass_pipeline MetaxQueryPassPipeline; // 7. 将填好的表挂载到 Paddle 主设备接口上 if (device_interface) { device_interface-cinn_interface metax_cinn_impl; VLOG(3) [MetaX] CINN Interface initialized successfully.; } else { std::cerr [MetaX] Error: device_interface is null during CINN init. std::endl; }}} // namespace metax} // namespace custom_device} // namespace paddle通过插件式方案硬件厂商可以“免费”继承飞桨沉淀多年的前沿技术——无论是复杂的计算图优化、访存密集型算子融合还是未来针对大模型生成的动态Shape优化。彻底省去了深入理解飞桨CINN前后端复杂IR机制的工作只需专注打磨自身的闭源编译器引擎。飞桨将持续深化这套异构计算底座让每一片国产芯片都能以极低的门槛接入顶级AI生态共同释放大模型时代的澎湃算力总结CINN编译器插件式接入方案的落地标志着飞桨在多硬件适配的深度与广度上迈出了坚实的一步。这种设计不仅解耦了Paddle核心与厂商底层的实现细节更让国产硬件生态能够以极低的门槛接入飞桨编译器的核心能力体系共同为开发者带来极致的性能体验。未来飞桨将继续携手广大硬件生态伙伴基于此方案探索更深度的动态Shape优化与算子定制为开发者提供更高效、更灵活的AI基础设施。关注【飞桨PaddlePaddle】公众号获取更多技术内容~

相关文章:

零侵入、极简适配!飞桨CINN实现类CUDA硬件“即插即用”

简介继飞桨框架3.1版本推出“插件式 CUDA兼容类硬件接入方案”(飞桨实现插件式硬件图接入方案,模型推理加速2.2倍),实现运行时(Runtime)与算子(Kernel)的高效复用后,飞桨…...

实测好用!translategemma-4b-it图文翻译模型快速上手体验

实测好用!translategemma-4b-it图文翻译模型快速上手体验 1. 为什么选择translategemma-4b-it 1.1 轻量级但功能强大 translategemma-4b-it是Google基于Gemma 3架构开发的轻量级翻译模型,仅有4B参数,却支持55种语言的互译任务。最特别的是…...

告别乱码!Win11下Bandizip+Notepad++组合拳完美解决中文压缩包问题

告别乱码!Win11下BandizipNotepad组合拳完美解决中文压缩包问题 每次解压中文压缩包时看到满屏的"锟斤拷"和"烫烫烫",是不是瞬间血压飙升?作为开发者,我们每天要处理大量压缩文件,而编码问题就像隐…...

3步掌握image2cpp:图像转字节数组的Arduino显示终极解决方案

3步掌握image2cpp:图像转字节数组的Arduino显示终极解决方案 【免费下载链接】image2cpp 项目地址: https://gitcode.com/gh_mirrors/im/image2cpp image2cpp图像转换工具是专为嵌入式开发者设计的免费在线工具,能够将普通图像快速转换为适用于O…...

新手友好!FUTURE POLICE语音解构模型快速入门:搭建智能音频处理流水线

新手友好!FUTURE POLICE语音解构模型快速入门:搭建智能音频处理流水线 1. 认识FUTURE POLICE语音解构模型 1.1 什么是语音解构技术 想象一下,你有一段会议录音,想要快速找到某个关键词出现的确切时间点。传统语音识别只能告诉你…...

突破描边技术瓶颈:从卡顿到丝滑的URP实现方案

突破描边技术瓶颈:从卡顿到丝滑的URP实现方案 【免费下载链接】Unity-URP-Outlines A custom renderer feature for screen space outlines 项目地址: https://gitcode.com/gh_mirrors/un/Unity-URP-Outlines 问题诊断篇:传统描边方案的五大痛点 …...

ai赋能c语言开发:让快马平台自动生成文件io与链表管理代码

AI赋能C语言开发:让快马平台自动生成文件IO与链表管理代码 最近在做一个C语言的通讯录管理系统项目,需要实现联系人信息的增删改查功能,并且要求数据能够持久化保存。作为一个有经验的开发者,我决定尝试用InsCode(快马)平台的AI辅…...

你的数字员工刚落地欧洲,就被GDPR罚了2000万:AI Agent出海的真实代价

延伸入口 个人博客站点:https://tobemagic.github.io/ai-magician-blog/posts/2026/04/03/你的数字员工刚落地欧洲就被gdpr罚了2000万ai-agent出海的真实代价/公众号:计算机魔术师想看系统化归档、原文版本与后续补充,优先回到个人博客站点&…...

FRCRN语音降噪工具实战教程:单麦16k音频一键去噪保姆级指南

FRCRN语音降噪工具实战教程:单麦16k音频一键去噪保姆级指南 1. 快速了解FRCRN语音降噪 你是不是经常遇到这样的困扰:录制的语音通话背景噪音太大,播客内容被环境声干扰,或者重要的会议录音听不清楚人声?FRCRN语音降噪…...

Sambert语音合成镜像新手教程:Web界面操作,简单易上手

Sambert语音合成镜像新手教程:Web界面操作,简单易上手 1. 为什么选择Sambert语音合成镜像 语音合成技术正在改变我们与数字世界的交互方式。Sambert多情感中文语音合成镜像是一个开箱即用的解决方案,特别适合没有深度学习背景但需要快速实现…...

SiameseUIE模型Git使用进阶:团队协作开发指南

SiameseUIE模型Git使用进阶:团队协作开发指南 1. 开篇:为什么团队开发需要Git规范 咱们做AI项目开发时,经常遇到这样的场景:几个人同时修改代码,结果合并时冲突不断;或者某位同事的代码把整个项目搞崩了&…...

小说下载器终极指南:从零开始掌握多平台小说下载与本地化阅读

小说下载器终极指南:从零开始掌握多平台小说下载与本地化阅读 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader novel-downloader 是一款功能强大的浏览器脚本工具&#xf…...

iPhone上跑Transformer模型?手把手教你用EfficientFormer部署移动端AI应用

iPhone上部署EfficientFormer:移动端Transformer模型实战指南 当苹果在2023年发布会上演示Stable Diffusion在iPhone 15 Pro上实时运行时,整个科技圈都意识到:移动端AI推理的时代已经到来。作为移动开发者,你是否也想过在自己的Ap…...

百度网盘限速难题如何破解?BaiduPCS-Web带来的下载体验革新

百度网盘限速难题如何破解?BaiduPCS-Web带来的下载体验革新 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 三个直击痛点的灵魂拷问 你是否经历过这样的场景:加班回家想下载一份工作资料&#xff0c…...

tchMaterial-parser:开源教育工具助力电子教材高效获取

tchMaterial-parser:开源教育工具助力电子教材高效获取 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地址…...

如何快速使用网络性能测试工具:面向初学者的完整指南

如何快速使用网络性能测试工具:面向初学者的完整指南 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 想要准确测量网络带宽、排查网速问…...

别再傻傻分不清了!用大白话和Python代码讲透PID控制与阻抗控制的区别(附机器人动力学关联)

从开车到推门:用Python代码拆解PID与阻抗控制的本质差异 想象一下你正在驾驶一辆汽车。当你发现车速低于预期时,会本能地加深油门;而当车速过快时,又会自然松开踏板——这种基于误差不断调整的行为,正是PID控制的朴素体…...

5步掌握多平台资源捕获:res-downloader全场景应用指南

5步掌握多平台资源捕获:res-downloader全场景应用指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在数字化内…...

FunASR语音识别镜像亲测:支持中英日韩粤语,一键生成字幕和文本

FunASR语音识别镜像亲测:支持中英日韩粤语,一键生成字幕和文本 1. 引言 1.1 为什么选择FunASR 作为一名长期关注语音技术的开发者,我一直在寻找一个既强大又易用的语音识别解决方案。FunASR作为阿里达摩院开源的语音识别工具包&#xff0c…...

【learn-claude-code】S06ContextCompact - 上下文压缩:上下文会满,你需要腾出空间

核心理念 “上下文会满,你需要腾出空间” – 三层压缩策略,实现无限会话。 源码:https://github.com/xiayongchao/learn-claude-code-4j/blob/main/src/main/java/org/jc/agents/S06ContextCompact.java原版:https://github.com…...

PyFluent:基于gRPC架构的Ansys Fluent Python自动化接口设计与实现

PyFluent:基于gRPC架构的Ansys Fluent Python自动化接口设计与实现 【免费下载链接】pyfluent Pythonic interface to Ansys Fluent 项目地址: https://gitcode.com/gh_mirrors/pyf/pyfluent PyFluent作为Ansys Fluent的官方Python接口,通过gRPC远…...

图解numpy轴运算:用动画演示argmin/argmax在不同维度下的工作原理(附可运行代码)

用空间思维理解NumPy轴运算:argmin/argmax的维度穿越指南 当你第一次在NumPy中遇到axis参数时,是否感觉像在解一道空间几何题?本文将通过视觉化的思维模型,带你穿透维度的迷雾,掌握argmin和argmax在不同维度数组中的行…...

Asterisk 实战速成:从零搭建企业级呼叫中心

1. 为什么选择Asterisk搭建企业级呼叫中心 第一次接触Asterisk是在2015年,当时公司需要快速搭建一个200坐席的客服系统。市面上商业解决方案动辄几十万的报价让我们望而却步,而Asterisk这个开源PBX系统完美解决了我们的需求。十年过去了,Aste…...

ai辅助c++开发:让快马平台的kimi和deepseek帮你写红黑树

AI辅助C开发:让快马平台的Kimi和DeepSeek帮你写红黑树 最近在准备面试时,突然被问到红黑树的实现细节。虽然理解它的五大性质,但要手写一个完整的红黑树还是有点发怵。这时我想起了InsCode(快马)平台的AI辅助功能,决定试试用AI来…...

damaihelper:智能票务自动化系统 - 重新定义公平抢票技术范式

damaihelper:智能票务自动化系统 - 重新定义公平抢票技术范式 【免费下载链接】damaihelper 支持大麦网,淘票票、缤玩岛等多个平台,演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 一、技术赋能&#…...

Ansys Circuit新手必看:导入IBIS模型时,Pin Import和Buffer Import到底怎么选?

Ansys Circuit实战指南:IBIS模型导入的Pin与Buffer选择策略 第一次打开Ansys Circuit准备进行SIPI仿真时,那个看似简单的IBIS模型导入界面往往会让新手工程师陷入沉思——Pin Import和Buffer Import这两个选项到底有什么区别?选择错误会导致仿…...

新手福音:在快马平台用openclaw启动项目迈出机器人开发第一步

作为一名刚接触机器人开发的新手,第一次听说openclaw启动项目时,我完全不知道从何入手。机械爪控制、PWM信号、硬件通信这些术语听起来就让人头大。好在发现了InsCode(快马)平台,它帮我用最直观的方式理解了整个流程。 项目框架搭建 平台提供…...

别再死记硬背了!用‘四体交叉’和‘双端口RAM’的实战题目,彻底搞懂计算机组成原理的存储器提速

从四体交叉到双端口RAM:用实战思维破解存储器提速难题 计算机组成原理中那些晦涩的存储器提速概念,是否总让你在题海中迷失方向?当"单体多字"、"多体并行"、"四体交叉"这些术语在教材里冰冷排列时,…...

E-Ink Launcher架构设计如何解决电子墨水屏性能瓶颈:深度解析Android启动器优化策略

E-Ink Launcher架构设计如何解决电子墨水屏性能瓶颈:深度解析Android启动器优化策略 【免费下载链接】E-Ink-Launcher E-reader Launcher for Android, Electronic paper book... 项目地址: https://gitcode.com/gh_mirrors/ei/E-Ink-Launcher E-Ink Launche…...

QuickLook.Plugin.OfficeViewer-Native:Office文件秒级预览的轻量化技术实现解析

QuickLook.Plugin.OfficeViewer-Native:Office文件秒级预览的轻量化技术实现解析 【免费下载链接】QuickLook.Plugin.OfficeViewer-Native View Word, Excel, and PowerPoint files with MS Office and WPS Office components. 项目地址: https://gitcode.com/gh_…...