人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载导读paddlenlp-kernel是 PaddleNLP 项目中为自然语言处理NLP任务量身打造的高性能 GPU 算子库。它集成了一系列常用 NLP 算子并为同一算子同时提供CUDA 手写内核与Triton 内核两种实现让开发者可以根据硬件条件与场景灵活选用充分榨取 GPU 的计算能力。本文将以 ops/README.md 为主线结合仓库中的源码与测试系统讲解该库支持的核心算子、从源码编译到 wheel 打包安装的完整流程、Python 侧调用方式、自动化测试方法以及运行环境与 Triton 适配 Paddle 的关键注意事项。读完本文你将掌握paddlenlp_kernel的完整使用链路并理解其底层实现结构。一、库定位与架构概览paddlenlp_kernel是一个专为 PaddleNLP 量身打造的 GPU 算子库核心目标是复用成熟开源内核如 Mamba、causal-conv1d、Apple 的 ml-cross-entropy、DAMO-NLP 的 Inf-CLIP 等的思想在 Paddle 生态内提供高性能算子实现。从仓库结构看该库的 Python 包源码位于 ops/src/paddlenlp_kernel内部按后端分为两大子命名空间paddlenlp_kernel.cuda对应 CUDA 手写算子其 C/CUDA 内核源码位于 ops/csrc例如selective_scan、causal_conv1d等目录编译产物.so动态库及自动生成的 Python API 桩文件会被收集到src/paddlenlp_kernel/cuda/lib下paddlenlp_kernel.triton对应 Triton 算子纯 Python 实现覆盖cut_cross_entropy交叉熵/CCE、inf_clInf-CLIP 相关、mambamamba1/mamba2 系列 SSD 内核、optimizerAdamW 16bit 动量等子模块。当前支持的算子族包括mamba1 与 mamba2 算子状态空间模型SSM核心计算含因果卷积、selective scan、chunk scan、state passing 等fast_ln 与 fused_ln 算子高性能 LayerNorm前向 半融合反向与融合 LayerNormml-cross-entropy 算子融合的线性层 交叉熵cut cross entropy避免在内存中物化完整 logits 矩阵inf_cl 算子面向超长序列对比学习的 Flash 概率损失cal_flash_loss。此外 ops/csrc/paddle_bwd_ops 还包含flash_attn_bwd、matmul_bwd、add_bwd、flashmask_attn_bwd等反向算子扩展。Python 侧 Triton 子模块还提供optimizer/adamw_16bit_moment优化器内核与triton_patch兼容层后者正是 Triton 在 Paddle 中可用性的关键所在详见后文“Triton 与 Paddle 的兼容”一节。从包配置ops/setup.py可见该库以paddlenlp_kernel为包名、src为根目录打包运行时通过paddle.utils.cpp_extension加载自定义算子.so并自动生成 API 桩文件保证 CUDA 算子像普通 Python 函数一样可导入。二、编译 CUDA 算子从源码构建CUDA 算子以 C/CUDA 源码形式提供需要在本机完成编译。编译前请确保环境中已有可用的 NVIDIA GPU 驱动、CUDA 工具链以及 PaddlePaddle GPU 版paddlepaddle-gpu 3.0.0b2。进入算子库的 C 源码根目录 ops/csrc 并执行编译cd csrc rm -rf build dist *.egg-info # 清除旧的构建文件和目录 python setup.py build # 开始新的编译过程其中rm -rf用于清理上一次构建产生的中间目录与元数据避免增量残留影响新构建在只读仓库中请勿执行该命令此处仅用于本地开发目录。关于编译过程ops/csrc/setup.py 给出了更底层的细节值得关注编译会依次执行setup_fast_ln()、setup_fused_ln()、setup_causal_conv1d()、setup_selective_scan()、setup_paddle_bwd_ops()五组构建分别产出fast_ln、fused_ln、causal_conv1d_cuda_pd、selective_scan_cuda_pd、paddle_bwd_ops等扩展模块默认通过paddle.device.cuda.get_device_properties()探测当前 GPU 的算力Compute Capability只为本机架构生成 PTX/SASSarchcompute_XX,codesm_XX如需要跨架构通用包可修改get_gencode_flags(compiled_allTrue)同时编译 sm_70/sm_75/sm_80selective_scan按精度维度展开多个.cu源文件fp16、fp32算力大于 7.5 时追加bf16因此编译时间相对较长若目标 GPU 算力 ≥ 7.5编译器会追加-DCUDA_BFLOAT16_AVAILABLE宏使内核支持 bf16。三、打包与安装 Wheel编译完成后将 CUDA 算子打包成Wheel包以便在任意同构 GPU 环境的机器上通过 pip 安装python setup.py bdist_wheel执行打包时ops/setup.py 会扫描csrc下编译出的所有*.so文件将每个.so重命名为*_pd.so并复制到src/paddlenlp_kernel/cuda/lib/调用paddle.utils.cpp_extension.extension_utils.load_op_meta_info_and_register_op读取算子元信息为每个自定义算子自动生成对应的 Python 桩文件*_pd.py最后以find_packages(src)收集整个paddlenlp_kernel包并把*.so/*.dll/*.dylib作为package_data打进 wheel。若此时尚未编译 CUDA 库setup 会发出No cuda lib found. Please build cuda lib first. See details in csrc/README.md.的警告——因此在执行bdist_wheel之前务必先完成上一节的python setup.py build。安装刚生成的 Wheel 包pip install dist/*.whlpip install dist/*.whl会自动匹配dist目录下唯一的 wheel 文件。安装完成后paddlenlp_kernel即可作为普通 Python 包被导入。依赖提示根据 ops/requirements.txt该库运行时依赖triton3.0.0、paddlenlp3.0.0.b2、einops0.6.1与numpy请确保环境满足版本要求。四、在代码中使用 paddlenlp_kernel 算子安装完成后可以在 Python 中同时导入 CUDA 与 Triton 两类算子。以 README 中的示例为骨架# 导入并使用 CUDA 算子 from paddlenlp_kernel.cuda.selective_scan import selective_scan_fn xxx selective_scan_fn(xxx) # 导入并使用 Triton 算子 from paddlenlp_kernel.triton.inf_cl import cal_flash_loss xxx cal_flash_loss(xxx)下面结合仓库源码分别说明两类算子的真实调用方式与入参语义。4.1 CUDA 算子selective_scanselective_scan_fn是 Mamba 系列状态空间模型的核心算子其实现位于 ops/src/paddlenlp_kernel/cuda/selective_scan.py底层封装SelectiveScanFn一个继承paddle.autograd.PyLayer的自定义算子前向调用selective_scan_cuda.fwd反向调用selective_scan_cuda.bwd。完整函数签名如下def selective_scan_fn( u, delta, A, B, C, DNone, zNone, delta_biasNone, delta_softplusFalse, return_last_stateFalse ): ...各参数语义依据源码中的 docstring 与参考实现u输入序列形状(batch, dim, seqlen)delta步长离散化时间增量形状(batch, dim, seqlen)A状态转移矩阵形状(dim, dstate)支持实数或复数B、C投影矩阵既可固定(dim, dstate)也可随序列变化(batch, dstate, seqlen)或分组形式(batch, groups, dstate, seqlen)D可选的直通项形状(dim,)z可选的 gating 分支形状(batch, dim, seqlen)提供时输出会与silu(z)逐元素相乘delta_bias步长的可学习偏置形状(dim,)delta_softplus是否对 delta 施加 softplus 非线性return_last_state为True时返回(out, last_state)其中last_state形状为(batch, dim, dstate)且其梯度不计入反向传播。源码中还实现了两个值得注意的工程细节自动精度/连续性处理算子会先检查张量strides[-1] ! 1并调用.contiguous()强制连续内存避免非连续视图导致内核崩溃若B、C是 3 维b dstate l会自动rearrange成 4 维并在反向时 squeeze 还原模型并行广播反向传播中如果检测到fleet.get_hybrid_communicate_group()且模型并行世界大小大于 1会对dB、dC执行paddle.distributed.broadcast源为mp_src_rank保证张量并行切分后梯度一致——这也是该算子能够直接用于 PaddleNLP 分布式训练的原因之一。同文件还提供了mamba_inner_fn将 causal conv1d、selective scan、输出投影整条 Mamba 内部链路融合进单个自定义算子其checkpoint_lvl参数0/1控制是否在反向时重算conv1d_out与delta以节省显存。如果你在 Paddle 中使用 Paddle 风格权重已转置的 Linear可传is_paddle_linearTrue算子会自动.t()权重。4.2 CUDA 算子causal_conv1dMamba 的因果卷积由 ops/src/paddlenlp_kernel/cuda/causal_conv1d.py 提供核心函数def causal_conv1d_fn( x, weight, biasNone, seq_idxNone, initial_statesNone, return_final_statesFalse, final_states_outNone, activationNone, ):x输入(batch, dim, seqlen)weight卷积核(dim, width)即每个通道独立卷积核depthwise 风格bias可选偏置(dim,)seq_idx变长序列的(batch, seqlen)索引提供时不可同时使用initial_states与return_final_statesinitial_states解码阶段的初始状态(batch, dim, width-1)activation仅支持None、silu、swish传入其他值会抛出NotImplementedError。该模块还提供causal_conv1d_update单步增量推理配合conv_state缓存与可选的环形缓冲cache_seqlens以及对应的_ref参考实现用于正确性对照。4.3 Triton 算子inf_cl 的 cal_flash_losscal_flash_loss位于 ops/src/paddlenlp_kernel/triton/inf_cl/flash.py源自 DAMO-NLP 的 Inf-CLIP 项目用于超长序列的对比学习损失计算。其函数签名def cal_flash_loss(q, k, labelsNone, scaleNone, head_dim256):实现要点来自源码内部先将q、kreshape 为(bq, -1, head_dim)并统一 cast 为float32源码注释明确logits 前向/反向保持 fp32 以获得更好精度通过FlashProb.apply一个paddle.autograd.PyLayer调用三个 Triton JIT 内核_prob_fwd_kernel计算每个查询的 log-sum-expLSE_dq_prob_bwd_kernel、_dk_prob_bwd_kernel分别计算q、k的梯度内核采用 FlashAttention 式的分块策略BLOCK_M64、BLOCK_N64对多头逐 head 累加qk避免一次性物化完整的(seqlen, seqlen)相似度矩阵从而在超长序列源码示例中使用 32768 长度上节省显存最终损失为loss -numerator lse其中numerator einsum(mhd,mhd-m, q, k[labels])取对角 logitslabels默认为paddle.arange(q.shape[0])scale为 logits 缩放因子文件末尾附有独立的__main__自测代码用 1000 轮迭代对比 Triton 版本与 Paddle 原生F.cross_entropy的梯度差异可直接python flash.py运行验证。4.4 Triton 算子mamba 系列与 cut_cross_entropyTriton 命名空间还提供了更完整的算子矩阵目录见 ops/src/paddlenlp_kernel/tritonmambamamba_chunk_scan、mamba_chunk_scan_combined、chunk_state、state_passing、selective_state_update、layernorm_gated、causal_conv1d_varlen、swiglu等模块导出清单见 ops/src/paddlenlp_kernel/triton/mamba/init.py覆盖 mamba1/mamba2 的 SSDstate space duality分块扫描全套内核cut_cross_entropylinear_cross_entropy、cce_lse_forward、cce_backward、indexed_dot等融合线性层交叉熵内核避免物化 logitsoptimizeradamw_16bit_moment16 位动量版本的 AdamW 内核。五、运行测试仓库为两类算子分别提供了 pytest 测试目录位于 ops/testspytest -v tests/cuda # 测试 CUDA 算子 pytest -v tests/triton # 测试 Triton 算子测试内容概览可据此了解算子的验证粒度CUDA 侧ops/tests/cudatest_selective_scan.py与test_causal_conv1d.py。测试采用参数化方式覆盖多种输入配置例如test_selective_scan.py对seqlen参数化 128/256/512/1024/2048/4096并逐项对比selective_scan_fn与参考实现selective_scan_ref的前向结果与反向梯度。测试文件开头还通过 monkeypatch 将paddle.allclose包装为先 cast 到 float32 再比较规避低精度数据类型的误差Triton 侧ops/tests/tritonmamba子目录包含test_ssd.py、test_selective_state_update.py、test_layernorm_gated.py同样以_ref参考实现做数值对照cut_cross_entropy子目录包含test_cce_loss_forward.py、test_cce_loss_backward.py、test_cce_lse.py、test_cce_indexed_dot.py。若某个 CUDA 扩展未编译成功Python 侧会通过try/except ImportError优雅降级例如selective_scan.py中from . import selective_scan_cuda_pd失败时置为None相关函数在调用时会给出“请先安装”的明确提示如causal_conv1d_fn断言causal_conv1d_cuda is not None。因此在跑测试前请先完成第二节的 CUDA 算子编译。六、运行环境与版本要求README 明确推荐以下版本组合paddlepaddle-gpu 3.0.0b2triton 3.0.0同时ops/requirements.txt 声明了einops0.6.1用于rearrange/repeat张量重排与numpy。值得注意的硬件前提是selective_scan的 bf16 内核与causal_conv1d的CUDA_BFLOAT16_AVAILABLE宏仅在 GPU 算力大于 7.5 时启用见 ops/csrc/setup.py低算力 GPU 上相关精度支持会受限。6.1 Triton 与 Paddle 的兼容原版 Triton 库依赖于 PyTorch为了在 Paddle 中使用 Triton仓库README“注意”一节给出了明确的适配方案安装use_triton_in_paddle工具并执行一次兼容化命令python -m pip install githttps://github.com/zhoutianzi666/UseTritonInPaddle.git # 只需执行一次以下命令之后即可在任意终端中使用 Triton无需重复执行 python -c import use_triton_in_paddle; use_triton_in_paddle.make_triton_compatible_with_paddle()该命令会对 Triton 的部分源码做一次性替换使其与 Paddle 兼容。从仓库源码看这一机制与 ops/src/paddlenlp_kernel/triton/triton_patch.py 相呼应——该模块会在导入paddlenlp_kernel.triton时被自动加载见 ops/src/paddlenlp_kernel/triton/init.py 中的from .triton_patch import *进一步弥合 Triton 与 Paddle 的运行时差异。安装并执行该命令后即可在所有终端会话中直接使用paddlenlp_kernel.triton下的算子。七、一条龙流程总结与排错速查综合以上内容paddlenlp_kernel的完整使用链路为准备环境安装paddlepaddle-gpu3.0.0b2、triton3.0.0、einops、numpy对 Triton 用户执行一次use_triton_in_paddle.make_triton_compatible_with_paddle()编译 CUDA 算子cd csrc python setup.py build清理旧产物后再构建打包 wheelpython setup.py bdist_wheel自动收集.so并生成 API 桩安装pip install dist/*.whl使用from paddlenlp_kernel.cuda.selective_scan import selective_scan_fn与from paddlenlp_kernel.triton.inf_cl import cal_flash_loss等验证pytest -v tests/cuda、pytest -v tests/triton。常见问题速查现象可能原因处理方式打包时警告No cuda lib found. Please build cuda lib first尚未执行python setup.py build先回到csrc目录完成编译导入算子报causal_conv1d_cuda is not available类错误CUDA 扩展未编译/未安装重新编译并安装 wheel确认lib/*_pd.so存在Triton 算子运行报错Triton 仍依赖 PyTorch 运行执行make_triton_compatible_with_paddle()一次性适配低精度测试误差偏大内核输出精度低于 fp32参考测试做法先 cast 到 float32 再allclose对比bf16 内核缺失GPU 算力 ≤ 7.5使用支持 bf16 的更高算力 GPU或改用 fp16/fp32通过这套“编译—打包—安装—调用—测试”的完整链路你可以在自己的 GPU 环境中稳定使用paddlenlp_kernel提供的高性能 NLP 算子并借助 CUDA 与 Triton 双实现灵活适配不同场景追求极致性能选 CUDA 手写内核追求可读与快速迭代选 Triton。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP 高性能推理算子安装全指南GPU / XPU / DCU / SDAA 自定义算子与 Triton 依赖配置PaddleNLP 高性能推理算子安装全指南GPU / XPU / DCU / SDAA 自定义算子与 Triton 依赖配置 PaddleNLP 为 Tra人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPVector reduce transform 深度解析把海量小日志事件归并成一条 Canonical Log LineVector reduce transform 深度解析把海量小日志事件归并成一条 Canonical Log Line 本文围绕 Vector 官方 0.1人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP突破性能瓶颈PaddleNLP CUDA自定义算子开发实战指南突破性能瓶颈PaddleNLP CUDA自定义算子开发实战指南 PaddleNLP是一款基于飞桨深度学习框架的大语言模型 LLM 开发套件支持在多种硬件上进大模型NLP预训练微调模型推理服务模型量化分布式训练RLHF人工智能上一篇Ext2ReadWindows系统访问Linux分区的实用工具详解下一篇MiniMax-M3-MXFP8稀疏注意力技术深度解析如何实现9倍预填充速度提升的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
OpenResearch实战指南:搭建可复现研究与高效协作的工作流 如果你最近逛开源社区或学术圈子,大概率刷到过 OpenResearch 这个关键词。有人把它当一种理念,有人直接拿它当具体项目的名字,但大多数人跟我第一次看到时一样,觉得它有点玄乎。其实把它拆开看就一句话:把整个研究过程… · 2026/9/25 7:27:13
Substrate区块链开发框架:从核心架构到定制化链实战 1. 为什么Substrate值得关注做区块链底层开发的人,这两年几乎绕不开Substrate这个名字。它不是一条链,不是一个应用,而是一套能让你快速搭建出一条全新区块链的开发框架。用一句话说清楚:别人把链从零造出来可能要两年,… · 2026/9/25 7:56:36
Substrate区块链开发框架入门:从环境搭建到自定义Pallet实战 1. 从“substrate”这个词说起:它到底指什么第一次看到“substrate”这个词,很多人会愣一下。它在不同圈子里含义差别很大:生物学里是“底物”,材料科学里是“衬底”,区块链领域里则是一个知名的开源框架。因为输入里没… · 2026/9/25 7:56:30
百德福:深耕小分子肽,只为国民好体质 健康,是民族昌盛之基,是家国发展之本。在“健康中国”战略纵深推进、国货科技全面崛起的时代浪潮中,大健康产业正在完成一场深刻的国产替代:从依赖海外技术、盲从进口品牌,到自主科研突破、本土品牌自立自强。立足时代… · 2026/9/25 7:56:30
PHP 自动化请求与模拟登录:不写刷赞工具也能练透这些技术 这类主题我不能帮你写。标题里的“一键领取名片赞”“一键领取圈圈赞”,本质上是一个自动刷赞、批量互动的小工具。这类工具不管代码写得怎么样,落到实际用途就是批量制造虚假互动、绕过平台风控,属于平台规则明令禁止的作弊行为。作为博主我… · 2026/9/25 7:56:24
酒店智能客房设备和服务响应系统如何管理,如何选择 截至 2026 年 9 月,越来越多酒店在做智能化升级时发现一个尴尬:灯光、空调、窗帘装了智能控制,客需呼叫上了小程序,影音娱乐又是另一套——设备是"智能"了,管理却更碎了。客房设备一套系统、服务响应一套系… · 2026/9/25 7:56:24
PHP对接EOS区块链:PHP开发包实现RPC调用与离线签名实战 很多人第一次看到“php <<<eos”这个标题,第一反应是PHP里的heredoc字符串语法,第二反应才可能是EOS区块链。两个理解其实都对,这个项目的核心就是用PHP通过开发包对接EOS区块链——而<<<eos那种“向EOS输出一段内容”的语… · 2026/9/25 7:56:24
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37