From 71ba068d0fe39b5546b73eeeb2e17011dbcdcdbb Mon Sep 17 00:00:00 2001 From: justbin-coder Date: Thu, 26 Mar 2026 23:58:05 +0800 Subject: [PATCH 1/5] feat(conf): register triton-ascend as independent community - Add triton-ascend submodule from GitCode official repository - Register as independent community with sidebar mapping in conf.py - Enable dedicated sidebar and community branding --- .gitmodules | 4 ++++ conf.py | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/.gitmodules b/.gitmodules index cfee595d..e2cc60ff 100644 --- a/.gitmodules +++ b/.gitmodules @@ -15,3 +15,7 @@ path = _repos/vllm-ascend url = https://github.com/vllm-project/vllm-ascend.git branch = main +[submodule "_repos/triton-ascend"] + path = _repos/triton-ascend + url = https://gitcode.com/Ascend/triton-ascend.git + branch = main diff --git a/conf.py b/conf.py index ff00b91b..0adb6969 100644 --- a/conf.py +++ b/conf.py @@ -229,6 +229,31 @@ def generate_api_doc(): }, } }, + 'triton-ascend': { + 'display_name': 'Triton-Ascend', + 'sidebar_mapping': { + 'migration_guide': 'Triton 算子迁移指南', + 'examples': '典型算子样例', + 'debug_guide': '算子调试与调优', + 'triton_api': 'Triton API 接口说明', + 'triton_api_extention': '昇腾扩展 API 接口说明', + 'quick_start_group': '快速开始', + 'install_group': '安装指南', + 'arch_group': '架构设计与核心特性', + 'dev_guide_group': 'Triton 算子开发指南', + 'env_group': '环境变量', + 'faq_group': '常见问题', + '__root_files__': { + 'quick_start': 'quick_start_group', + 'installation_guide': 'install_group', + 'architecture_design_and_core_features': 'arch_group', + 'programming_guide': 'dev_guide_group', + 'environment_variable_reference': 'env_group', + 'FAQ': 'faq_group', + 'release_note': 'faq_group', + }, + } + }, } } From 06f5d885e1ef6d0df520d3602bbc6f61da39ce27 Mon Sep 17 00:00:00 2001 From: justbin-coder Date: Thu, 26 Mar 2026 23:58:08 +0800 Subject: [PATCH 2/5] feat(makefile): add triton-ascend to copy-docs pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update PROJECT_CONFIGS to sync _repos/triton-ascend/docs/zh → sources/triton-ascend - Handle root index removal for independent community like vllm-ascend --- Makefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 92be3a63..2e550ed4 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,8 @@ PROJECT_CONFIGS = \ _repos/VeOmni/docs:sources/VeOmni \ _repos/LLaMA-Factory/docs:sources/LLaMA-Factory \ _repos/ms-swift/docs:sources/ms-swift \ - _repos/vllm-ascend/docs/source:sources/vllm-ascend # vllm-ascend 文档根在 docs/source/ 下 + _repos/vllm-ascend/docs/source:sources/vllm-ascend \ + _repos/triton-ascend/docs/zh:sources/triton-ascend # Configure all subprojects generated path GENERATED_DOCS := sources/_generated @@ -69,7 +70,7 @@ copy-docs: init-submodules @echo "Preparing generated docs directory..." @mkdir -p $(GENERATED_DOCS) - # vllm-ascend: 仅删除根 index(避免与 sources/vllm-ascend/index.rst 冲突), + # vllm-ascend / triton-ascend: 仅删除根 index(避免与 sources//index.rst 冲突), # 保留子目录 index(如 tutorials/models/index.md)供 toctree 直接引用。 # 其他社区: 递归删除所有 index,导航由各社区 sources//index.rst 独立定义。 @echo "Copying project documentation..." @@ -82,7 +83,7 @@ copy-docs: init-submodules mkdir -p $$dst; \ echo "Copying $$src to $$dst"; \ cp -r "$$src"/* "$$dst"/ 2>/dev/null || echo " [WARN] Source directory does not exist or is empty: $$src"; \ - if [ "$$rel_dst" = "sources/vllm-ascend" ]; then \ + if [ "$$rel_dst" = "sources/vllm-ascend" ] || [ "$$rel_dst" = "sources/triton-ascend" ]; then \ rm -f "$$dst/index.md" "$$dst/index.rst" "$$dst/index.html" 2>/dev/null || true; \ else \ find "$$dst" -name 'index.*' -delete 2>/dev/null || true; \ From 95e7f1416fe0a43fdf3367e623b1ef9f0fe8103d Mon Sep 17 00:00:00 2001 From: justbin-coder Date: Thu, 26 Mar 2026 23:58:13 +0800 Subject: [PATCH 3/5] feat(index): add triton-ascend landing pages and navigation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create Triton-Ascend landing page with comprehensive documentation structure - Add Triton-Ascend card to main index under 算子开发与编程 category - Optimize Verl and VLLaMA-Ascend landing pages layout - Add Triton-Ascend community logo (_static/images/triton-ascend.png) --- _static/images/triton-ascend.png | Bin 0 -> 306 bytes index.rst | 19 +++ sources/triton-ascend/index.rst | 208 +++++++++++++++++++++++++++++++ sources/verl/index.rst | 2 - sources/vllm-ascend/index.rst | 2 +- 5 files changed, 228 insertions(+), 3 deletions(-) create mode 100644 _static/images/triton-ascend.png create mode 100644 sources/triton-ascend/index.rst diff --git a/_static/images/triton-ascend.png b/_static/images/triton-ascend.png new file mode 100644 index 0000000000000000000000000000000000000000..22646f14b69ec400f6ccd1cc5477f49da7e9a0a1 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1SEZ8zRdwrKRsO>Ln`LHz39lxpultBz|RAU zlLESXY^yw3O?K{lp1Cp7zJr~?!J2{L79+z2K8A)e28J!n3=3o#7~V24WDH#?yPD}o Vv|cO@{s#;M22WQ%mvv4FO#uAOP8|RM literal 0 HcmV?d00001 diff --git a/index.rst b/index.rst index 703d92e7..74d06acd 100644 --- a/index.rst +++ b/index.rst @@ -266,6 +266,18 @@ +

⚙️ 算子开发与编程

+
+ + +
+

Triton-Ascend

+

适配昇腾 NPU 的 Triton 语言后端,支持高性能算子开发与迁移。

+ +
+ +
+

🎨 多模态应用、评测与工具

@@ -382,6 +394,13 @@ sources/torchchat/index.rst sources/vllm-ascend/index.rst +.. toctree:: + :maxdepth: 1 + :hidden: + :caption: ⚙️ 算子开发与编程 + + sources/triton-ascend/index.rst + .. toctree:: :maxdepth: 1 :hidden: diff --git a/sources/triton-ascend/index.rst b/sources/triton-ascend/index.rst new file mode 100644 index 00000000..e89f0191 --- /dev/null +++ b/sources/triton-ascend/index.rst @@ -0,0 +1,208 @@ +Triton-Ascend +============================================ + +.. raw:: html + + + +
+ +
+

Triton-Ascend

+

+ 适配昇腾 NPU 的 Triton 语言后端 · 高性能算子开发与迁移 +

+ +
+ +

🚀 快速开始

+ + +
+

✨ 核心特性

+
+ 🔌 昇腾 NPU 后端适配 + 🧩 丰富算子样例 + 🔧 调试与性能调优工具 + 🤝 完整 API 参考 +
+
+ +
+ +---- + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: 快速开始 + + ../_generated/sources/triton-ascend/quick_start + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: 安装指南 + + ../_generated/sources/triton-ascend/installation_guide + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: 架构设计与核心特性 + + ../_generated/sources/triton-ascend/architecture_design_and_core_features + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: Triton 算子开发指南 + + ../_generated/sources/triton-ascend/programming_guide + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: Triton 算子迁移指南 + + ../_generated/sources/triton-ascend/migration_guide/architecture_difference + ../_generated/sources/triton-ascend/migration_guide/migrate_from_gpu + ../_generated/sources/triton-ascend/migration_guide/performance_guidelines + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: 典型算子样例 + + ../_generated/sources/triton-ascend/examples/index + ../_generated/sources/triton-ascend/examples/01_vector_add_example + ../_generated/sources/triton-ascend/examples/02_fused_softmax_example + ../_generated/sources/triton-ascend/examples/03_layer_norm_example + ../_generated/sources/triton-ascend/examples/04_fused_attention_example + ../_generated/sources/triton-ascend/examples/05_matrix_multiplication_example + ../_generated/sources/triton-ascend/examples/06_autotune_example + ../_generated/sources/triton-ascend/examples/07_accuracy_comparison_example + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: 算子调试与调优 + + ../_generated/sources/triton-ascend/debug_guide/debugging + ../_generated/sources/triton-ascend/debug_guide/profiling + +.. toctree:: + :maxdepth: 3 + :hidden: + :caption: Triton API 接口说明 + + ../_generated/sources/triton-ascend/triton_api/index + ../_generated/sources/triton-ascend/triton_api/triton/index + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: 昇腾扩展 API 接口说明 + + ../_generated/sources/triton-ascend/triton_api_extention/index + +.. toctree:: + :maxdepth: 1 + :hidden: + :caption: 环境变量 + + ../_generated/sources/triton-ascend/environment_variable_reference + +.. toctree:: + :maxdepth: 1 + :hidden: + :caption: 常见问题 + + ../_generated/sources/triton-ascend/FAQ + ../_generated/sources/triton-ascend/release_note diff --git a/sources/verl/index.rst b/sources/verl/index.rst index ecd91308..4226ed9b 100644 --- a/sources/verl/index.rst +++ b/sources/verl/index.rst @@ -121,8 +121,6 @@ verl

✨ 核心特性

🧬 多样化 RL 算法
-
🔗 无缝框架集成
-
📊 灵活设备映射
业界领先吞吐量
🤗 HuggingFace 集成
🎯 昇腾 NPU 支持
diff --git a/sources/vllm-ascend/index.rst b/sources/vllm-ascend/index.rst index 01ca4173..7eba58f2 100644 --- a/sources/vllm-ascend/index.rst +++ b/sources/vllm-ascend/index.rst @@ -60,7 +60,7 @@ vLLM-Ascend display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; margin-top: 20px; } .va-feature-tag { - display: inline-flex; align-items: center; gap: 6px; + display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; background: white; border: 1px solid var(--va-border); border-radius: 20px; padding: 8px 18px; font-size: 0.9rem; color: var(--va-text-main); transition: all 0.3s ease; From a029ed22c487983d2aec5242fccdc124632941d3 Mon Sep 17 00:00:00 2001 From: justbin-coder Date: Fri, 27 Mar 2026 00:33:25 +0800 Subject: [PATCH 4/5] feat(triton-ascend): add official Triton logo to landing page - Replace placeholder with official Triton logo - Display logo (60px height) centered in hero section --- _repos/LLaMA-Factory | 2 +- _repos/VeOmni | 2 +- _repos/ms-swift | 2 +- _repos/verl | 2 +- _repos/vllm-ascend | 2 +- _static/images/triton-ascend.png | Bin 306 -> 21826 bytes sources/triton-ascend/index.rst | 1 + 7 files changed, 6 insertions(+), 5 deletions(-) diff --git a/_repos/LLaMA-Factory b/_repos/LLaMA-Factory index 9e7cf341..4d8b23ac 160000 --- a/_repos/LLaMA-Factory +++ b/_repos/LLaMA-Factory @@ -1 +1 @@ -Subproject commit 9e7cf3413b04a7deb078fe75c1c87e9dc58e6eb8 +Subproject commit 4d8b23ace1cbb4c7ea57a9ac455b3c16ba348ed8 diff --git a/_repos/VeOmni b/_repos/VeOmni index 3868ebb5..06f4d87b 160000 --- a/_repos/VeOmni +++ b/_repos/VeOmni @@ -1 +1 @@ -Subproject commit 3868ebb5e5fb366c7153d1654f9d2dfc0635c2be +Subproject commit 06f4d87be83514d2e4f01fe20115cd693f691894 diff --git a/_repos/ms-swift b/_repos/ms-swift index a8cc2341..b59a105e 160000 --- a/_repos/ms-swift +++ b/_repos/ms-swift @@ -1 +1 @@ -Subproject commit a8cc234140773dfe3301a6611edcba5c5b396373 +Subproject commit b59a105ec77a974b1839175c9b416f6ddc7988f9 diff --git a/_repos/verl b/_repos/verl index 77476af8..7402ca73 160000 --- a/_repos/verl +++ b/_repos/verl @@ -1 +1 @@ -Subproject commit 77476af84cc074edf5a6437f8d5ea418d7a54916 +Subproject commit 7402ca73bcf2b85b5337393b4ccc9ec45ea96b6d diff --git a/_repos/vllm-ascend b/_repos/vllm-ascend index 2916601e..55c68007 160000 --- a/_repos/vllm-ascend +++ b/_repos/vllm-ascend @@ -1 +1 @@ -Subproject commit 2916601e6c0705cb147387409c679cceab5c3ce9 +Subproject commit 55c680073d07ee65b6683bf5b49039141089a877 diff --git a/_static/images/triton-ascend.png b/_static/images/triton-ascend.png index 22646f14b69ec400f6ccd1cc5477f49da7e9a0a1..fbfe7adf148f869620ce550cc5657ff95582ef93 100644 GIT binary patch literal 21826 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 literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1SEZ8zRdwrKRsO>Ln`LHz39lxpultBz|RAU zlLESXY^yw3O?K{lp1Cp7zJr~?!J2{L79+z2K8A)e28J!n3=3o#7~V24WDH#?yPD}o Vv|cO@{s#;M22WQ%mvv4FO#uAOP8|RM diff --git a/sources/triton-ascend/index.rst b/sources/triton-ascend/index.rst index e89f0191..b4490462 100644 --- a/sources/triton-ascend/index.rst +++ b/sources/triton-ascend/index.rst @@ -71,6 +71,7 @@ Triton-Ascend
+ Triton-Ascend Logo

Triton-Ascend

适配昇腾 NPU 的 Triton 语言后端 · 高性能算子开发与迁移 From 9143223e403719f39ed584ba8007838f449f0635 Mon Sep 17 00:00:00 2001 From: justbin-coder Date: Wed, 1 Apr 2026 21:08:02 +0800 Subject: [PATCH 5/5] feat(triton-ascend): update logo to custom Triton-Ascend wordmark --- _static/images/triton-ascend.png | Bin 21826 -> 9611 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/_static/images/triton-ascend.png b/_static/images/triton-ascend.png index fbfe7adf148f869620ce550cc5657ff95582ef93..ce970e4e868a1df88a071bc2f39fa1f83b6c7df1 100644 GIT binary patch delta 9051 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 VPCmH1x&CL1k^i6~T_b54{6F*@N{avh delta 21362 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