登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
轻量养虾,开箱即用!低 Token + 稳定算力,Gitee & 模力方舟联合出品的 PocketClaw 正式开售!点击了解详情~
代码拉取完成,页面将自动刷新
仓库状态说明
开源项目
>
人工智能
>
AI-人工智能
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
97
Star
77
Fork
127
Ascend
/
triton-ascend
暂停
代码
Issues
100
Pull Requests
91
Wiki
统计
流水线
服务
JavaDoc
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
开发画像分析
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
支持tensor_descriptor算子(make/load/store_tensor_descriptor)
DONE
#ICTF5R
需求
candyhong
创建于
2025-08-18 13:01
## 一、需求场景&价值 `tensor_descriptor` 系列算子用于在 Triton 中显式描述张量的**布局信息**(shape、stride、block 结构等),并支持将该描述符用于后续的内存读写操作(load/store)等等。 **价值**:可以提前构建张量布局信息,避免在每次内存操作时重复计算地址,提高指令效率。 ## 二、算子设计 ### 1. make_tensor_descriptor 简介:创建张量描述符对象 表达式: ```python triton.language.make_tensor_descriptor(base: tensor, shape: List[tensor], strides: List[tensor], block_shape: List[constexpr]) -> tensor_descriptor ``` 参数说明: | 参数名 | 类型 | 说明 | | ------------- | ----------------- | ----------------------------------------- | | `base` | `tensor` | 张量数据的起始地址 | | `shape` | `List[tensor]` | 张量各维度大小 | | `strides` | `List[tensor]` | 各维度的 stride,前面的维度必须是16字节的整数倍、最后一维必须是连续存储的 | | `block_shape` | `List[constexpr]` | 从全局内存加载/存储的块的形状 | 返回值:tensor_descriptor描述符对象(不可以直接算数运算,需配合load/store使用) ### 2. load_tensor_descriptor 简介:从张量描述符中读取张量数据 表达式: ```python triton.language.load_tensor_descriptor(desc: tensor_descriptor_base, offsets: Sequence[constexpr | tensor])→ tensor ``` 参数说明: | 参数名 | 类型 | 说明 | | --------- | ------------------------------- | ----- | | `desc` | `tensor_descriptor_base` | 张量描述符 | | `offsets` | `Sequence[constexpr \| tensor]` | 元素偏移 | 返回值:tensor ### 3. store_tensor_descriptor 简介:向张量描述符指向的张量位置写入数据 表达式: ```python triton.language.store_tensor_descriptor(desc: tensor_descriptor_base, offsets: Sequence[constexpr | tensor], value: tensor) → tensor ``` 参数说明: | 参数名 | 类型 | 说明 | | --------- | ------------------------------- | ----- | | `desc` | `tensor_descriptor_base` | 张量描述符 | | `offsets` | `Sequence[constexpr \| tensor]` | 元素偏移 | | `value` | `tensor` | 写入数据 | 返回值:tensor 参考文档: https://triton-lang.org/main/python-api/generated/triton.language.make_tensor_descriptor.html ## 三、改进建议 ### 目标 1. 为 Triton 增加 `make/load/store_tensor_descriptor` 三个 IR 操作及其 Python API 2. 确保新增功能不影响现有 Triton 算子与优化 ### 方案对比 #### 方案一:基于 triton-patch 扩展 1. Triton IR 与方言扩展 * 核心定义IR文件:`triton_patch/include/triton/Dialect/Triton/IR/TritonOps.td`、`triton_patch/lib/Dialect/Triton/IR/Ops.cpp` * python C++绑定:`triton_patch/python/src/ir.cc` * python 层接口注册和实现: 注册用户API - `triton_patch/python/triton_patch/language/core.py` 实现语义函数 - `triton_patch/python/triton_patch/language/semantic.py` 2. TritonTolinalg 转换逻辑(修改triton-adapter) - `MakeTensorDescriptorOp`:仅作为元信息容器,无需直接 Lower - `DescriptorLoadOp` / `DescriptorStoreOp`:Lower 为 `make_tensor_ptr + load/store` 的组合 ✅ 优点: * 改动范围小:只需在 patch 和 adapter 中新增对应 IR 与转换逻辑,不影响整体编译和现有算子 * 风险可控:不涉及底层架构和依赖大幅调整,短期内更容易验证和交付 * 快速落地:适合当前阶段尽快接入 tensor_descriptor 功能 ⚠️ 缺点: * 依赖 triton-patch:与上游社区存在差异,后续需要持续维护 patch * 功能受限:部分算子逻辑依赖 Triton 新版本,旧版本 patch 难以完整支持 * 潜在兼容性问题:随着社区演进,维护 patch 成本可能逐步增加 #### 方案二:基于新版本 Triton 1. 升级 third_party 中的 Triton 至 `3.4.0` 2. 在新版本基础上增加 `TritonTolinalg` 转换逻辑 ✅ 优点: * 对齐社区主线:减少与上游差异,后续维护与升级更轻量 * 长期可持续:便于直接继承社区新特性、优化 pass 和后端适配 * 扩展性强:新版本语义和 IR 更规范,有利于未来在 tensor_descriptor 之外拓展更多功能 ⚠️ 缺点: * 编译流程变更:升级 Triton 至 3.4 需要调整现有的编译脚本、依赖管理方式 * 语义层(semantic)重构:新版本 Triton 的 semantic 定义方式有明显变化,需要重新对接、适配 * 存量算子逻辑变动:部分已有算子的行为或实现细节在新版本中有所调整(如cast等),需要逐一回归验证 * C++依赖文件变化:部分接口/文件已被移除或重构(如 TritonTypeInterfaces.td),需重新对接 Dialect include 与 lib * 短期成本高:升级涉及面广,不仅需要升级,还要重写和适配大量已有逻辑,短期内会显著增加研发和测试成本 ### 建议 - **短期**:采用方案一,快速接入 tensor_descriptor - **中长期**:跟进 Triton 主线版本(3.4.0),逐步迁移到方案二
## 一、需求场景&价值 `tensor_descriptor` 系列算子用于在 Triton 中显式描述张量的**布局信息**(shape、stride、block 结构等),并支持将该描述符用于后续的内存读写操作(load/store)等等。 **价值**:可以提前构建张量布局信息,避免在每次内存操作时重复计算地址,提高指令效率。 ## 二、算子设计 ### 1. make_tensor_descriptor 简介:创建张量描述符对象 表达式: ```python triton.language.make_tensor_descriptor(base: tensor, shape: List[tensor], strides: List[tensor], block_shape: List[constexpr]) -> tensor_descriptor ``` 参数说明: | 参数名 | 类型 | 说明 | | ------------- | ----------------- | ----------------------------------------- | | `base` | `tensor` | 张量数据的起始地址 | | `shape` | `List[tensor]` | 张量各维度大小 | | `strides` | `List[tensor]` | 各维度的 stride,前面的维度必须是16字节的整数倍、最后一维必须是连续存储的 | | `block_shape` | `List[constexpr]` | 从全局内存加载/存储的块的形状 | 返回值:tensor_descriptor描述符对象(不可以直接算数运算,需配合load/store使用) ### 2. load_tensor_descriptor 简介:从张量描述符中读取张量数据 表达式: ```python triton.language.load_tensor_descriptor(desc: tensor_descriptor_base, offsets: Sequence[constexpr | tensor])→ tensor ``` 参数说明: | 参数名 | 类型 | 说明 | | --------- | ------------------------------- | ----- | | `desc` | `tensor_descriptor_base` | 张量描述符 | | `offsets` | `Sequence[constexpr \| tensor]` | 元素偏移 | 返回值:tensor ### 3. store_tensor_descriptor 简介:向张量描述符指向的张量位置写入数据 表达式: ```python triton.language.store_tensor_descriptor(desc: tensor_descriptor_base, offsets: Sequence[constexpr | tensor], value: tensor) → tensor ``` 参数说明: | 参数名 | 类型 | 说明 | | --------- | ------------------------------- | ----- | | `desc` | `tensor_descriptor_base` | 张量描述符 | | `offsets` | `Sequence[constexpr \| tensor]` | 元素偏移 | | `value` | `tensor` | 写入数据 | 返回值:tensor 参考文档: https://triton-lang.org/main/python-api/generated/triton.language.make_tensor_descriptor.html ## 三、改进建议 ### 目标 1. 为 Triton 增加 `make/load/store_tensor_descriptor` 三个 IR 操作及其 Python API 2. 确保新增功能不影响现有 Triton 算子与优化 ### 方案对比 #### 方案一:基于 triton-patch 扩展 1. Triton IR 与方言扩展 * 核心定义IR文件:`triton_patch/include/triton/Dialect/Triton/IR/TritonOps.td`、`triton_patch/lib/Dialect/Triton/IR/Ops.cpp` * python C++绑定:`triton_patch/python/src/ir.cc` * python 层接口注册和实现: 注册用户API - `triton_patch/python/triton_patch/language/core.py` 实现语义函数 - `triton_patch/python/triton_patch/language/semantic.py` 2. TritonTolinalg 转换逻辑(修改triton-adapter) - `MakeTensorDescriptorOp`:仅作为元信息容器,无需直接 Lower - `DescriptorLoadOp` / `DescriptorStoreOp`:Lower 为 `make_tensor_ptr + load/store` 的组合 ✅ 优点: * 改动范围小:只需在 patch 和 adapter 中新增对应 IR 与转换逻辑,不影响整体编译和现有算子 * 风险可控:不涉及底层架构和依赖大幅调整,短期内更容易验证和交付 * 快速落地:适合当前阶段尽快接入 tensor_descriptor 功能 ⚠️ 缺点: * 依赖 triton-patch:与上游社区存在差异,后续需要持续维护 patch * 功能受限:部分算子逻辑依赖 Triton 新版本,旧版本 patch 难以完整支持 * 潜在兼容性问题:随着社区演进,维护 patch 成本可能逐步增加 #### 方案二:基于新版本 Triton 1. 升级 third_party 中的 Triton 至 `3.4.0` 2. 在新版本基础上增加 `TritonTolinalg` 转换逻辑 ✅ 优点: * 对齐社区主线:减少与上游差异,后续维护与升级更轻量 * 长期可持续:便于直接继承社区新特性、优化 pass 和后端适配 * 扩展性强:新版本语义和 IR 更规范,有利于未来在 tensor_descriptor 之外拓展更多功能 ⚠️ 缺点: * 编译流程变更:升级 Triton 至 3.4 需要调整现有的编译脚本、依赖管理方式 * 语义层(semantic)重构:新版本 Triton 的 semantic 定义方式有明显变化,需要重新对接、适配 * 存量算子逻辑变动:部分已有算子的行为或实现细节在新版本中有所调整(如cast等),需要逐一回归验证 * C++依赖文件变化:部分接口/文件已被移除或重构(如 TritonTypeInterfaces.td),需重新对接 Dialect include 与 lib * 短期成本高:升级涉及面广,不仅需要升级,还要重写和适配大量已有逻辑,短期内会显著增加研发和测试成本 ### 建议 - **短期**:采用方案一,快速接入 tensor_descriptor - **中长期**:跟进 Triton 主线版本(3.4.0),逐步迁移到方案二
评论 (
0
)
登录
后才可以发表评论
状态
DONE
TODO
WIP
DONE
CLOSED
REJECTED
负责人
未设置
标签
未设置
项目
未立项任务
未立项任务
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (
-
)
标签 (
-
)
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
预计工期
(小时)
参与者(1)
1
https://gitee.com/ascend/triton-ascend.git
git@gitee.com:ascend/triton-ascend.git
ascend
triton-ascend
triton-ascend
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册