文件最后提交记录最后更新时间
test:add vllm-ascend kernel test Co-authored-by: zhudada0120<zhuguanda@huawei.com> # message auto-generated for no-merge-commit merge: !1175 merge new-kernel into main test:add vllm-ascend kernel test Created-by: zhudada Commit-by: zhudada0120 Merged-by: ascend-robot Description: # 描述 ## 一、背景 非功能修改,UT补充,vllm-ascend中重写过的kernel算子上库,通过ci看护这部分kernel的功能、精度 ## 二、具体改动 1、在third_party/ascend/unittest/kernels/vllm目录下新增13个需要CI看护的vllm-ascend kernel算子 2、enhance精度校验函数: - 数据类型不一致时,根据pytorch的类型提升规则使数据类型一致。 - 提高float16和bfloat16的校验精度。 ## 三、测试 全量算子测试: ![image.png](https://raw.gitcode.com/user-images/assets/7623225/a42a6e0f-df84-454e-8247-b0974f32312d/image.png 'image.png') See merge request: Ascend/triton-ascend!11753 个月前
fix(docs): correct some documents Co-authored-by: KanuaK<zhouyihan1@huawei.com> # message auto-generated for no-merge-commit merge: !1665 merge fix/docs-fix into main fix(docs): correct some documents Created-by: KanuaK Commit-by: KanuaK Merged-by: ascend-robot Description: <!--- The core Triton is a small number of people, and we receive many PRs (thank you!). To help us review your code more quickly, **if you are a new contributor (less than 3 PRs merged) we ask that you complete the following tasks and include the filled-out checklist in your PR description.** Complete the following tasks before sending your PR, and replace [ ] with [x] to indicate you have done them. --> # New contributor declaration - [ ] I am not making a trivial change, such as fixing a typo in a comment. - [ ] I have written a PR description following these [rules](https://cbea.ms/git-commit/#why-not-how). - [ ] I have run pre-commit run --from-ref origin/main --to-ref HEAD. - Select one of the following. - [ ] I have added tests. - /test for lit tests - /unittest for C++ tests - /python/test for end-to-end tests - [ ] This PR does not need a test because FILL THIS IN. - Select one of the following. - [ ] I have not added any lit tests. - [ ] The lit tests I have added follow these [best practices](https://mlir.llvm.org/getting_started/TestingGuide/#filecheck-best-practices), including the "tests should be minimal" section. (Usually running Python code and using the instructions it generates is not minimal.) See merge request: Ascend/triton-ascend!16651 个月前
feat(ci):A set of general-purpose kernel performance comparison test methods designed for subsequent kernel testing. Co-authored-by: zhudada0120<zhuguanda@huawei.com> # message auto-generated for no-merge-commit merge: !1053 merge main-common-kernel-test-method into main feat(ci):A set of general-purpose kernel performance comparison test methods designed for subsequent kernel testing. Created-by: zhudada Commit-by: zhudada0120 Merged-by: ascend-robot Description: # 描述 ## 一、背景 当前triton-ascend仓的CI中没有将上游框架或算子库中的kernel看护起来,例如vllm-ascend中重写过的kernel算子,当前triton-ascend CI没有感知这部分算子问题的能力。 ## 二、改动目标 1、提供一套通用的 Triton kernel 单测框架,统一加载 GPU dump 的 pt 测试用例,运行 NPU 上的 Triton kernel 并与 GPU上的Triton kernel或PyTorch算子 输出做精度比对,避免为每个 kernel 重复编写测试逻辑。当前方案支持sglang也按同样的方式新增测试kernel。 2、将这部分需要看护的算子纳入到CI当中看护起来。 ## 三、具体改动 1、third_party/ascend/unittest下新增kernels文件夹,用于存放三方kernel的算子及通用测试用例,kernels文件夹目录结构如下: kernels |-- vllm/ |-- sglang/ |-- README.md |-- common_kernel.py |-- test_triton_kernel.py |-- test_common.py 内容说明: - 不同的框架或三方库kernels的独立文件夹,如vllm/、sglang/:存放不同来源的kernel - README.md:补充新kernel用例的指导文档 - common_kernel.py:三方kernel中使用频率较高的公用kernel - test_triton_kernel.py:通用的 Triton kernel 测试入口,扫描kernels 下的 kernel 文件,按本地或远端 pt 文件生成参数化用例并调用 run_and_compare_ptfile验证结果精度。 - test_common.py:测试公用方法 2、conftest.py中增加--kernel pytest 选项,可在命令行指定要执行的 kernel(未指定的将被跳过)。 3、Makefile Test部分补充kernel用例执行命令 ## 四、补充新用例的流程 ![drawio.png](https://raw.gitcode.com/user-images/assets/7623225/405d4951-fd69-4b37-9574-e7b8c8a79fd5/drawio.png 'drawio.png') ## 测试 全量算子测试: ![image.png](https://raw.gitcode.com/user-images/assets/7623225/bfa9a391-78b6-432c-bc30-78fb5a9c4e29/image.png 'image.png') 特定算子测试: ![image.png](https://raw.gitcode.com/user-images/assets/7623225/c9cf16fc-0430-4be4-a925-771c3749cc4a/image.png 'image.png') Makefile cmake测试: ![image.png](https://raw.gitcode.com/user-images/assets/7623225/b5181d8c-586f-4d9d-ae82-0e4ab5a7978d/image.png 'image.png') 流水线CI日志: ![image.png](https://raw.gitcode.com/user-images/assets/7623225/bb760868-0c6e-4831-9551-0be564352a2b/image.png 'image.png') master分支的PR: https://gitcode.com/Ascend/triton-ascend/pull/995 See merge request: Ascend/triton-ascend!10534 个月前
test:add vllm-ascend kernel test Co-authored-by: zhudada0120<zhuguanda@huawei.com> # message auto-generated for no-merge-commit merge: !1175 merge new-kernel into main test:add vllm-ascend kernel test Created-by: zhudada Commit-by: zhudada0120 Merged-by: ascend-robot Description: # 描述 ## 一、背景 非功能修改,UT补充,vllm-ascend中重写过的kernel算子上库,通过ci看护这部分kernel的功能、精度 ## 二、具体改动 1、在third_party/ascend/unittest/kernels/vllm目录下新增13个需要CI看护的vllm-ascend kernel算子 2、enhance精度校验函数: - 数据类型不一致时,根据pytorch的类型提升规则使数据类型一致。 - 提高float16和bfloat16的校验精度。 ## 三、测试 全量算子测试: ![image.png](https://raw.gitcode.com/user-images/assets/7623225/a42a6e0f-df84-454e-8247-b0974f32312d/image.png 'image.png') See merge request: Ascend/triton-ascend!11753 个月前
feat(ci):A set of general-purpose kernel performance comparison test methods designed for subsequent kernel testing. Co-authored-by: zhudada0120<zhuguanda@huawei.com> # message auto-generated for no-merge-commit merge: !1053 merge main-common-kernel-test-method into main feat(ci):A set of general-purpose kernel performance comparison test methods designed for subsequent kernel testing. Created-by: zhudada Commit-by: zhudada0120 Merged-by: ascend-robot Description: # 描述 ## 一、背景 当前triton-ascend仓的CI中没有将上游框架或算子库中的kernel看护起来,例如vllm-ascend中重写过的kernel算子,当前triton-ascend CI没有感知这部分算子问题的能力。 ## 二、改动目标 1、提供一套通用的 Triton kernel 单测框架,统一加载 GPU dump 的 pt 测试用例,运行 NPU 上的 Triton kernel 并与 GPU上的Triton kernel或PyTorch算子 输出做精度比对,避免为每个 kernel 重复编写测试逻辑。当前方案支持sglang也按同样的方式新增测试kernel。 2、将这部分需要看护的算子纳入到CI当中看护起来。 ## 三、具体改动 1、third_party/ascend/unittest下新增kernels文件夹,用于存放三方kernel的算子及通用测试用例,kernels文件夹目录结构如下: kernels |-- vllm/ |-- sglang/ |-- README.md |-- common_kernel.py |-- test_triton_kernel.py |-- test_common.py 内容说明: - 不同的框架或三方库kernels的独立文件夹,如vllm/、sglang/:存放不同来源的kernel - README.md:补充新kernel用例的指导文档 - common_kernel.py:三方kernel中使用频率较高的公用kernel - test_triton_kernel.py:通用的 Triton kernel 测试入口,扫描kernels 下的 kernel 文件,按本地或远端 pt 文件生成参数化用例并调用 run_and_compare_ptfile验证结果精度。 - test_common.py:测试公用方法 2、conftest.py中增加--kernel pytest 选项,可在命令行指定要执行的 kernel(未指定的将被跳过)。 3、Makefile Test部分补充kernel用例执行命令 ## 四、补充新用例的流程 ![drawio.png](https://raw.gitcode.com/user-images/assets/7623225/405d4951-fd69-4b37-9574-e7b8c8a79fd5/drawio.png 'drawio.png') ## 测试 全量算子测试: ![image.png](https://raw.gitcode.com/user-images/assets/7623225/bfa9a391-78b6-432c-bc30-78fb5a9c4e29/image.png 'image.png') 特定算子测试: ![image.png](https://raw.gitcode.com/user-images/assets/7623225/c9cf16fc-0430-4be4-a925-771c3749cc4a/image.png 'image.png') Makefile cmake测试: ![image.png](https://raw.gitcode.com/user-images/assets/7623225/b5181d8c-586f-4d9d-ae82-0e4ab5a7978d/image.png 'image.png') 流水线CI日志: ![image.png](https://raw.gitcode.com/user-images/assets/7623225/bb760868-0c6e-4831-9551-0be564352a2b/image.png 'image.png') master分支的PR: https://gitcode.com/Ascend/triton-ascend/pull/995 See merge request: Ascend/triton-ascend!10534 个月前
README.md

指导:如何新增kernel测试用例

新增kernel测试用例可以分为三大步: 1、准备pt文件 2、在triton-ascend仓中添加kernel算子,完成本地kernel测试 3、将pt文件上传到obs桶中

1、准备pt文件

pt 文件用于把 GPU(或参考实现)上的输入与输出作为 golden 数据,后续测试会在 NPU 上运行 Triton kernel 并与之比对。

三步生成流程

  • 步骤 1 — 构造GPU输入并保存副本预处理成NPU kernel的输入:根据GPU上kernel或pytorch算子的参数构造 input_data(键名须与 kernel 参数一致),把所有 Tensor 克隆到 CPU,形成 input_data_before,若GPU上算子的输入和NPU上算子有出入,需要提前预处理使input_data_before符合NPU上算子入参的要求。
  • 步骤 2 — 运行GPU Kernel获取输出:在GPU上运行GPU kernel,得到 gpu_output,并将 Tensor 转为 CPU。
  • 步骤 3 — 打包并保存:把 input_data_beforegridgpu_output 封装为字典,通过 torch.save 保存为 {kernel_name}.pt。如果有多组用例,保存为 list-of-dicts([case0, case1])。

精简示例

import copy
import torch

DEVICE = torch.device("cuda:0")
batch_size = 2
grid = (batch_size,)

input_data = {
"output_token_ids_ptr": torch.zeros((batch_size, 4), dtype=torch.int32, device=DEVICE),
"cu_num_draft_tokens_ptr": torch.tensor([2, 1], dtype=torch.int32, device=DEVICE),
# ... 其它字段
}

# 保存输入副本到 CPU
input_data_before = {
 k: (v.clone().cpu() if isinstance(v, torch.Tensor) else copy.deepcopy(v))
 for k, v in input_data.items()
}
# 预处理 input_data_before 符合 NPU kernel 输入
input_data_before["npu_need_param_key"] = NPU_NEED_PARAMS_VALUE
# 运行 kernel(在 GPU / 参考实现上)并收集输出
triton_kernel[grid](**input_data)
# 这里用 input_data 作为示例,实际应调用对应的 triton/pytorch 函数
gpu_output = {k: (v.cpu() if isinstance(v, torch.Tensor) else v) for k, v in input_data.items()}

save_obj = {"input_data": input_data_before, "grid": grid, "gpu_output": gpu_output}
torch.save(save_obj, "<kernel_name>.pt")
# 多组用例场景:torch.save([save_obj1, save_obj2], "<kernel_name>.pt")

2、在triton-ascend新增三方kernel测试用例

  • 步骤 1 — 在triton-ascend仓中新增kernel算子 :本地验证阶段,在 kernels/xxx(例如vllm、sglang) 下新增与算子同名的 Python 文件,内容为Triton kernel函数。
  • 步骤 2 — 本地测试 :将pt文件放在kernels目录下,在项目根目录运行 python -m pytest -v third_party/ascend/unittest/kernels/test_triton_kernel.py

说明

  • 指定单个 kernel:在项目根目录下执行 python -m pytest -v third_party/ascend/unittest/kernels/test_triton_kernel.py --kernel={kernel_name}
  • pt文件查找策略:优先使用仓库内匹配的本地 pt,若本地不存在则按需从远端 OBS 下载 {kernel_name}.pt文件。
  • 本地已存在的pt文件,在执行完测试后不会删除,从obs桶取的文件在跑完测试后会被测试程序直接删除。

3、将pt文件上传至obs桶

本地验证通过后,将pt文件统一上传到OBS桶当中,OBS桶链接:https://triton-ascend-artifacts.obs.cn-southwest-2.myhuaweicloud.com/test/kernels/{xxx}_pt/{kernel_name}.pt,xxx为vllm或sglang