【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 的编程模型
  • Triton 与 CUDA 的根本区别在于抽象层级:CUDA 以单个线程 为编程单位,Triton 以数据块 (tile/block)为编程单位。开发者用近似 NumPy 的 Python 代码描述计算逻辑,编译器自动处理线程调度、内存层级映射和硬件优化。

1.3 TileLang

  • TileLang(Tile 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
相关推荐
小和尚同志4 小时前
1.8k star 的开源 token 使用量监控神器— TokenTracker
人工智能·ai编程
极客 - L U5 小时前
神经网络 - 激活函数、损失函数、优化器
人工智能·深度学习·神经网络
数字融合5 小时前
透明化视频三维矿山井下照明重建技术
人工智能·python·数码相机
yi0115 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
xiangzhihong86 小时前
创之星花店多端业务闭环拆解
人工智能
奈落246 小时前
AI 编程从助手到 Agent:基于两份资料看哪些环节可以交出去,哪些必须自己攥住
大数据·人工智能
Joker可视化开发平台6 小时前
AI短剧接棒真人剧:开机量跌七成,普通人进场窗口在收窄
大数据·人工智能
澳鹏Appen6 小时前
澳鹏电子书 | 强化学习环境:为AI智能体打造高保真训练场
人工智能
吴佳浩6 小时前
单卡5090跑125B 大模型:Strata 把服务器级 MoE 拉进普通 PC
人工智能
Data-Miner6 小时前
AI做表格软件哪个好?专业评测:五维对比看清差距
人工智能