【Datawhale2609】算子开发实战 task02-TileLang Add 与 NineToothed Vector Add

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、介绍
    • [1.1 相关概念](#1.1 相关概念)
      • [1.1.1 算子](#1.1.1 算子)
      • [1.1.2 Tile](#1.1.2 Tile)
    • [1.2 Triton](#1.2 Triton)
    • [1.3 TileLang](#1.3 TileLang)
    • [1.4 九齿 NineToothed](#1.4 九齿 NineToothed)
  • 二、任务打卡
    • [2.1 任务一](#2.1 任务一)
    • [2.2 任务二](#2.2 任务二)
  • 总结

前言


一、介绍

  • 随着人工智能(Artificial Intelligence,AI)技术的迅猛发展,深度学习模型的复杂度和规模正呈指数级增长,这给底层计算效率带来了前所未有的挑战。

1.1 相关概念

1.1.1 算子

  • 算子 operator 是构成深度学习模型的基本计算单元,其性能直接决定了整个模型的训练和推理效率 。

  • 相关概念:函数、泛函、算子、函子

数学抽象的主线是:

从处理单个点,到处理整体曲线,再到变换整体,最后到不同数学体系之间做结构翻译。

函数、泛函、算子、函子,就是这四次视角升级。

  • 函数:数 → 数,处理单个元素。
  • 泛函:函数 → 数,处理整条曲线并给出一个总评。
  • 算子:函数 → 函数,把一条曲线变成另一条曲线。
  • 函子:范畴 → 范畴,把一个数学世界整体搬到另一个数学世界,并保持结构。

1.1.2 Tile

  • "Tile" 一词在高性能计算中特指计算分块技术 ,这是优化内存层次结构访问效率的关键方法。
  • 不论是 CPU 的多级缓存系统,还是 GPU 的共享内存与寄存器层次结构,合理的分块策略都是实现高性能计算的必备条件。

1.2 Triton

一门并行编程语言及其编译器。

  • Triton 最初由 Philippe Tillet 开发,2020 年起由 OpenAI 接管并持续演进。它是一个开源的、基于 Python 的领域特定语言(DSL)和编译器,专门用于编写 GPU 上的深度学习 kernel
  • Triton的设计宗旨是提升AI模型训练过程中GPU编程的易用性与效率。
  • 它允许开发者通过 Python 语言编写自定义 GPU 内核,实现与专家级 CUDA 代码相当的性能表现,同时无需掌握底层 CUDA 专业知识。
  • 核心设计 :基于 Tile 的编程模型
  • TritonCUDA 的根本区别在于抽象层级:CUDA单个线程 为编程单位,Triton数据块tile/block)为编程单位。开发者用近似 NumPyPython 代码描述计算逻辑,编译器自动处理线程调度、内存层级映射和硬件优化。

1.3 TileLang

  • TileLangTile Language )是一款基于张量分块(Tiling)抽象的高性能 AI 算子编程语言,属于 领域特定语言(DSL)
  • 它采用声明式语法与类 Python 前端,使开发者能够以接近数学公式的形式描述计算意图,并由编译器自动完成循环优化、内存调度与代码生成。

1.4 九齿 NineToothed

  • 九齿(NineToothed)是一个基于 Triton 的更高层 DSL,引入 tensor-oriented metaprogramming

二、任务打卡

2.1 任务一

  • T.ceildiv(N, BLOCK_N):计算需要启动的 Block 数量,向上取整:确保即使 N 不能被 BLOCK_N 整除时,也能覆盖所有元素。
  • T.Kernel(num_blocks) as pid:定义 Grid 级别的并行,pid 相当于 CUDA 中的 blockIdx.x。
  • T.Parallel(BLOCK_N) as i:定义 Block 内部的线程级并行,i 相当于 CUDA 中的 threadIdx.x。
  • if index < N::边界保护(Tail handling),防止在最后一个 Block 中由于 N 不是 BLOCK_N 的整数倍而导致的全局内存越界访问。
  • return C:将分配并计算完成的 Tensor C 返回。

2.2 任务二

python 复制代码
def arrangement(lhs, rhs, output):
    return lhs.tile((BLOCK_SIZE,)), rhs.tile((BLOCK_SIZE,)), output.tile((BLOCK_SIZE,))
  • 这里的 lhs, rhs, output 是符号张量,代表完整的 1D 数组。
  • .tile((BLOCK_SIZE,)):将一维的长数组,在逻辑上切割成一个个大小为 BLOCK_SIZE 的 Tile。
  • 因为 tile 方法需要知道每个维度的切割大小。对于 1D 张量,必须传入包含一个元素的元组。如果是 2D 矩阵,就会是 (BLOCK_M, BLOCK_N)
python 复制代码
def application(lhs, rhs, output):
    output = lhs + rhs

总结

  • 了解Triton、TileLang、九齿 NineToothed
相关推荐
Hotchip_MEMS2 小时前
传统咪头与MEMS硅麦:雾化器气流传感方案对比
人工智能·笔记·物联网·电脑·制造
4SAPI2 小时前
大模型接口管理平台推荐:多模型时代的API Gateway架构与选型分析
人工智能·agent
皇儒无上2 小时前
智慧矿山-关于推进山西省煤矿灾害差异化智能化建设强化 AI 风险防控的政策建议
人工智能·机器学习·区块链
byte轻骑兵2 小时前
【LE Audio】PBP精讲[4]: 公共广播通告的设计逻辑与数据交互流程
人工智能·音视频·le audio·低功耗蓝牙音频
正经教主2 小时前
【FDE系列】阶段2:Day 28:FastAPI 入门 — 把你的函数变成 API 服务
人工智能·python·fde
天远Date Lab2 小时前
零信任架构实战:基于天远名下企业A构建自动化商户合规网关
人工智能·ai·工具分享
xingyuzhisuan3 小时前
无限画布AI视频:瓦片重叠率对拼接接缝瑕疵率影响实测
人工智能
广州山泉婚姻3 小时前
DeepSeek Harness本地部署指南:Windows环境下解决API、权限、远程访问各类问题
人工智能·深度学习