3. 希姆计算基本概念

3.1. 版本历史

文档版本 对应产品版本 作者 日期 描述
V1.7.0 STCRP V1.5.0 希姆计算 2023-07-31 文档架构调整和编辑优化。
V1.6.0 STCRP V1.4.0 希姆计算 2023-03-30 配套软件概念>TensorTurbo概念章节新增Relay IR、TIR、计算图、组、算子分组、内存层级、空余内存、切分轴、切分因子概念。编辑优化。
V1.5.0 STCRP V1.3.0 希姆计算 2023-02-08 调整部分概念顺序。优化模型、算子概念的说明并补充示例。增加图调度概念的说明。
V1.4.0 STCRP V1.3.0 希姆计算 2023-01-10 监控调试概念章节新增STC-DDK概念,并移除ScheduleViewer和Benchmark概念。
V1.3.0 STCRP V1.2.0 希姆计算 2022-11-30 调整文档章节,对齐最新的配套软件架构。优化L1、LLB、DDR概念描述。
V1.2.0 STCRP V1.1.1 希姆计算 2022-09-29 增加其他概念章节。
V1.1.0 HPE V1.3.2 希姆计算 2022-08-17 同步HPE Release Notes中新增的概念。
V1.0.1 Unknown 希姆计算 2022-06-02 纠正PMU、PMC的英文全称。
V1.0.0 Unknown 希姆计算 2022-04-29 初始版本。

3.2. STCP920 AI推理卡概念

概念 英文全称 描述
NPU Neural-network Processing Unit 神经网络处理器,专门面向大规模神经元和突触处理的处理器。采用数据驱动并行计算的架构,非常适合并行计算的场景。
NeuralScale NeuralScale 希姆计算自研的NPU神经网络计算加速架构,支持基于RISC-V指令集的扩展指令,具有良好的可编程性。
STCP920 Stream Computing P920 希姆计算推出的云端AI推理计算加速板卡,内含可编程NPU,基于NeuralScale架构、软硬件协同设计。
NPC Neural-network Processing Core 希姆计算自研NPU中的神经网络处理核心。 每个NPU中包含多个NPC Cluster,例如STCP920中包含4个NPC Cluster,每个NPC Cluster包括8个NPC,因此STCP920中共包含32个NPC。 每个NPC Cluster通过NPC Cluster ID唯一标识,对N个NPC Cluster,异构编程环境中使用0至N-1依次标记,同一个NPU中的所有NPC Cluster的ID是连续的。
全局内存(DDR) Double Data Rate Synchronous Dynamic Random-Access Memory 访问速度最慢,每个NPC Cluster可用的全局内存,由NPC Cluster内的NPC共享。STCP920中,每个NPC Cluster的全局内存大小为4 GB。
共享内存(LLB) Last Level Buffer 访问速度较快,每个NPC Cluster可用的共享内存,由NPC Cluster内的NPC共享。STCP920中,每个NPC Cluster的共享内存大小为8 MB。
本地内存(L1) L1 访问速度最快,每个NPC私有的本地内存。STCP920中,每个NPC的本地内存大小为1.25 MB。
sysDMA System Direct Memory Access 数据传输通道,用于在NPC Cluster内的共享内存和全局内存间传输数据。
IM Intermediate Buffer 中转缓存, 每个NPC私有的高速内存,STCP920中的大小为256 KB。
PMU Performance Unit 性能数据采集单元。
PMC Performance Counters 性能数据采集单元统计的计数器。
MCU Microcontroller Unit 一款兼容RISC-V指令集架构的微控制器。
MME Matrix MAC Engine 矩阵MAC引擎。
VME Vector MAC Engine 向量MAC引擎。
MTE Memory Transfer Engine 内存传输引擎。

3.3. 异构编程环境概念

HPE(Heterogeneous Programming Engine)是希姆计算推出的异构编程环境,安装HPE后您可以使用C/C++语言开发异构程序,并编译成为可以在希姆计算的NPU上执行的机器码,运行神经网络应用时使用NPU进行并行计算可以显著提高计算性能。HPE相关的概念如下:

概念 英文全称 描述
SHC Stream Computing Heterogeneous C++ 异构编程语言,完整兼容C++17标准,并针对异构程序扩展了语法和函数库,例如支持调用核函数的<<< >>>符号。
核函数 Kernel Function 一个核函数对应一个计算任务,由主机端(CPU)部署到设备端(NPU),并在设备端的多个NPC上并行执行。
stc-dkms Stream Computing Dynamic Kernel Module Support 异构驱动模块,对应有异构驱动stc.ko文件。主机端与设备端使用PCIe总线连接,异构驱动将主机端的操作请求通过PCIe总线传递到设备端。 stc-dkms方便异构驱动适应不同的Linux内核版本,不用逐版本手动编译也能保证异构驱动始终可用,主机端和设备端的交互不会因Linux内核版本变化而产生异常。
stc-kernel-common Stream Computing Kernel Common 自动添加设备节点规则。
hpert Heterogeneous Programming Engine Runtime 主机端运行时库,为主机端程序提供控制设备端内存访问、核函数执行等操作的接口。
npurt NPU Runtime 设备端运行时库,为设备端程序提供信息打印、内存拷贝等操作的接口。
hpert-dev Heterogeneous Programming Engine Runtime Device 设备端程序接口,用于设备端信息打印、内存拷贝等操作。
stcc Stream Computing Heterogeneous C++ Compiler 异构程序编译器,统一编译异构程序中的主机端程序和设备端程序,生成可执行文件。
stc-smi Stream Computing System Management Interface 设备管理工具,管理和监控NPU设备的状态。
stc-prof Stream Computing Profiler 性能调优工具,采集异构程序的性能数据,分析异构程序的性能。
说明:stc-prof是命令行工具,希姆计算还提供了接口形式的性能调优工具STCPTI( Stream Computing Profiling Tool Interface)。
stc-vprof Stream Computing Visual Profiler 可视化性能调优工具,主要用于异构程序的可视化性能分析。
stc-gdb Stream Computing Debugger 异构程序调试工具,监视程序运行状态,获取和修改程序的中间运行结果。stc-gdb完全兼容GDB原生命令,并添加了希姆计算的扩展命令。
hpe-example HPE Example HPE示例异构程序。
libstc-common Library Stream Computing Common 解决整数线性规划(Integer Linear Programming,ILP)问题的C++库。

3.3.1. TensorTurbo概念

TensorTurbo是AI编译器,将来自不同框架的模型编译为希姆硬件上的可执行文件。TensorTurbo基于TVM定制,通过在计算图层面提供算子组合、拆分、重新排布执行顺序等图调度的能力,减少内存使用不平衡带来的额外数据传输开销,从而改善因内存限制导致的推理性能瓶颈。TensorTurbo相关的概念如下:

概念 英文全称 描述
模型 Model 泛指神经网络模型,例如ResNet-50、BERT,经常以计算图的形式表现其中的计算逻辑与状态。
计算图 Computation Graph 是一种用于描述计算过程的图形表示方法。在深度学习中,计算图通常用于表示神经网络中的前向传播计算过程。
Relay IR Relay Intermediate Representation Relay IR是一个用于表示深度学习模型和计算图的中间表示格式,属于图层IR。模型通过模型接口导入TensorTurbo后会率先被转换为Relay IR,用于表示与硬件无关的计算和控制流程。
TIR Tensor Intermediate Representation 算子层的IR,将Relay IR转换为TIR后,可用于各种硬件相关的优化和代码生成,后端执行硬件相关的后端优化。
图调度 Graph Scheduling 基于各深度学习模型的特点构建粗粒度的子图,并进行一系列定制性优化,提高局部性和并行度,从而充分利用硬件算力,达到获取最优性能的目的。 提高局部性的目的是实现在计算过程中数据常驻L1/LLB,避免因数据量大溢出至速度相对较慢的DDR。提高并行度的目的是实现并行处理没有相互依赖的计算,减少时间步骤的同时充分利用硬件资源。
算子 Operator 泛指神经网络模型中的算子,是一个数学逻辑单元,例如二维卷积算子Conv2D。各种算子组成一个有向无环图(Directed Acyclic Graph,DAG),构成一个模型的计算图。
元算子 Primitive Operator TensorTurbo中特有的概念,指类似加减乘除等基本的数学计算操作算子。
图算子 Graph Operator TensorTurbo中特有的概念,是一个由元算子组成的子图,存在于图层抽象。例如Softmax可以是一个图算子,定义在图层抽象中,在Lower到算子层时,由元算子自动拼接编译得到。
Group 图调度功能中引入的概念。Group是根据模型网络结构划分的组,其中包含若干内存占用相似的Block/算子,或拆分逻辑、调度参数相同的算子。每个Group对应整网计算图中一个片段,即子图。分组后各Group作为独立的调度单元,视为一个整体对其内部所有算子进行调度。
算子分组 Grouping 根据算子的性质和特点,将模型中的算子划分为多个Group。例如将拆分逻辑、调度参数相同的算子分为一组。分组后各Group作为独立的调度单元,视为一个整体对其内部所有算子进行调度,简化后续的子图拆分等操作以减少计算量和内存访问、提高计算效率。
内存层级 Memory Scope Group/算子输出数据的存储位置,可存储在DDR、LLB、L1上。
空余内存 Free Memory 指的是内存中当前未被任何程序或进程使用且可以分配的部分。在每步计算时预估,方便算子内部做数据切分时提供额外信息。
切分轴 Split Axis 指的是在进行张量切分(Tensor Split)操作时,要选择的对应维度的轴。应当尽量选取可以贯穿Group内部所有算子的轴来进行切分,通常为Batch轴。
切分因子 Split Factor 基于Split Axis对Tensor切分的份数,即算子的输入输出所使用的Memory的峰值与L1内存之间的比值。

3.4. STC_DDK概念

概念 英文全称 描述
STC_DDK Stream Computing Deploy Development Kits STC_DDK是希姆计算基于TensorTurbo开发的模型编译和部署工具,通过简洁的接口即可将基于主流框架实现的模型编译为在希姆计算推理卡上执行的格式,并执行模型。
STCGraph Stream Computing Graph 计算图,用于描述模型结构和计算过程。STC_DDK通过解析转储的model.json文件得到,由多个STCNode构成的有向无环图(Directed Acyclic Graph,简称DAG )。
STCTensor Stream Computing Tensor 张量,在计算图中流动的数据,用于STCGraph交互,包含多个属性信息,例如Shape、Type、Data、Location等,能够和ONNX或TensorFlow的Tensor相互转换。
STCNode Stream Computing Node 节点,可用于构成STCGraph,计算图中的一个节点代表着一个计算操作。每个节点都有一个或多个输入张量,以及一个或多个输出张量。
STCGraphExecutor Stream Computing Graph Executor 计算图执行器,负责将计算图中的节点按照正确的顺序执行,并将每个节点的输出作为下一个节点的输入。计算图执行器通常会优化计算图的执行,以提高计算效率。

3.5. 其他概念

概念 英文全称 描述
STCRP Stream Computing System Reference Platform 希姆计算配套软件以STCRP的形式交付,包括了异构编程环境HPE、AI编译器TensorTurbo,以及满足监控调试、部署集成等用途的工具。
stc-hpaa Stream Computing Half-precision Accuracy Analyzer 分析模型精度问题的工具,可帮助您在整网精度调试时,快速定位精度问题的根因,提高精度分析效率。
Gem5 Gem5 分析模型性能问题的工具,可帮助您在整网性能调试时,定位出网络模型可能存在的性能问题。
stc-k8s-device-plugin Stream Computing Kubernetes Device Plugin 部署该插件后,在创建Pod时Kubernetes集群会自动申请使用NPU设备,并跟踪NPU设备的健康状况。