【讲座笔记】从 0 开始构建 GPU 生态——以沐曦集成电路(MeTax)为例
Intro
本笔记整理于 2024 年 4 月 7 日,上海沐曦集成电路 CTO 杨建博士来上科大进行的产业分享讲座。
1. 什么是软件生态
软件和软件生态是不同的。只有有人使用,有反馈和迭代,最终形成的比软件更为复杂的系统才能称之为生态。
定义:软件与开发者及其之间的关系,在同一环境下共同演化的社会-技术系统。
Example:
- Apple 垂直生态
- NVIDIA CUDA 生态
2. MeTax 生态全景图
层级 | 内容 | ||
---|---|---|---|
MXMACA Libs | DNN | ONNX RT | Converter & Quantizer |
MXMACA Languages | MXMACA C++ | MXMACA Fortran | MXMACA OpenMP |
MXMACA Drivers | KMD | UMD | …… |
Hardware |
3. GPU 软件生态的硬件环境
不同的 CPU、OS、软件栈,总共有成千上万种组合。
即使是和服务器厂商合作,也需要 2.5 - 6 个月
- 板卡定制、大量的启动测试
4. Setup Step By Step
4.1. Video BIOS
识别 Device ID
GPU 与 CPU 的 100MHz PCIe RC 对齐
注册最多六个基地址寄存器
- 特权寄存器,用户态寄存器,Firmwave 空间寄存器,Device Memory Space……
- 形成一个树状结构,供 OS 管理
硬件状态的初始化
加密保护
挑战:在不同硬件环境下的健壮性
贯通任务
证明某个功能被正确实现的测试任务。
4.2. GPU Kernel Mode Driver (KMD)
- 也称之为 Direct Rendering Manager
- 进程管理、内存管理……
- 贯通任务:数据的拷贝
4.3. User Mode Driver (UMD)
- C++ Runtime,C++ 数学函数,Device / Context / Stream 管理,API 支持,GPU Kernel 加载,JIT,测试……
- 贯通任务:Vector Add 的二进制 Kernel
4.4. Compiler
- C++,Fortran,OpenAcc,OpenMP,OpenCL,HLSL(DirectX),GLSI(Vulkan)……
- 需要支持混合编译
- 贯通任务:VectorAdd
- Challenge:GCC / LLVM 的更新
- 编译器的难点不在于开发而在于测试!
- 测试集的覆盖率是非常重要的
- 因此,体系结构的支持也非常重要
4.5. 数学库
- GEMM,Conv……
- 对于某个特定的 Kernel,可能有无数种 Implementation
- 常见的性能下降点
- Long Tail(长尾问题):SM 跑满了,新的任务被迫等待
- Bank Conflict
4.6. AI 编译器(训练/推理框架)
- 推理:基本只剩下 OpenAI Triton
- 训练:基本都是 PyTorch
框架支持的精度准确很重要!除了不能太低,也不能太高
4.7 其他生态
- 科学计算生态
- 需要专业人士的参与
- 大模型生态
- 目前大模型四个月一次迭代,即使是 NVIDIA 的 TensoRT 的迭代也落后十个月左右
- Triton 采用 JIT 模式,因此有明显的竞争优势。
【讲座笔记】从 0 开始构建 GPU 生态——以沐曦集成电路(MeTax)为例
https://hypoxanthineovo.github.io/2024/04/07/讲座笔记/MeTax-GPUEchoSystem/