1. 前言¶
1.1. 词汇表¶
术语 |
分类 |
含义解释 |
---|---|---|
TopsRider |
软件 |
驭算TopsRider是燧原科技自主知识产权的计算及编程平台,通过软硬件协同,充分释放邃思的强大性能。 |
TopsAten |
软件 |
A Tensor Library developed for Enflame devices,针对燧原设备深度优化的张量库。 |
Tensor |
软件 |
张量,文档中把标量、向量、矩阵也统称为张量,不做区分。 |
GCU |
硬件 |
General Compute Unit,燧原科技通用计算单元。 |
燧原S60 |
硬件 |
第三代人工智能推理加速卡。 |
1.2. API列表¶
TopsAten API列表详见《TopsAten API 参考》。
2. TopsAten概述¶
TopsAten 是经 GCU 加速的针对张量处理的算子库, 其对外提供的 API 语义与 torch aten 算子库语义对齐; TopsAten API 基于C++语法构造,用户可以调用TopsAten API 完成各类需求的功能搭建。
2.1. 快速入门¶
TopsAten 是一组 Host API 的算子库,通过这组 API 可以在 GCU 上进行相关运算,可以直接从设备上访问数据。 TopsAten 提供了丰富的 API 可以完成 Tensor 的创建、计算及销毁等操作。 TopsAten 在使用时,需要配套 Host Runtime API 来协同工作。 Host Runtime API 的文档可参看 《Host Runtime API参考》。 Host Runtime API 用来管理 Device 及 Device memory,使用时需要引用单独的头文件:”tops/tops_runtime.h”。 调用者可参考如下调用顺序完成所需的功能搭建:
step1 : 通过 topsatenInit() 初始化;
step2 : 通过 topsStreamCreate() 创建异步流来控制后续计算等时序(如不创建将使用default stream);配合 topsDeviceSynchronize() 来做同步;
step3 : 调用 Runtime API 分配 Device memory 并创建计算所需的 Tensor 对象;
step4 : 调用所需 Aten 功能 API 完成功能搭建, 如topsaten::topsatenAdd(z, x, y, alpha, stream);
step5 : 对指定 Stream 作同步 topsStreamSynchronize(stream);
step6 : 资源释放, 销毁 Device memory 及 Tensor;
step7 : 调用 topsatenFinalize() 结束本次使用。
TopsAten API 返回值类型为 topsatenStatus_t, 该返回值记录了运行中的各种状态,该值为枚举类型,每一种状态对应具体运行状态可参考《TopsAten API 参考》。 使用者需要对返回值进行检查, 防止错误传递。
3. 安装使用¶
3.1. TopsAten 软件包内容¶
组件 |
文件 |
说明 |
安装和运行 环境 |
---|---|---|---|
TopsAten |
topsaten_{version_number}.deb topsaten-{version_number}.rpm |
TopsAten 软件开发包 |
Docker |
3.2. 支持的操作系统¶
发行版 |
架构 |
Kernal 版本 |
GCC |
GLIBC |
---|---|---|---|---|
Ubuntu 18.04.z (z<=6) |
x86 |
4.15 & 5.4 |
7.5 |
2.27 |
Ubuntu 20.04.z (z<=4) |
x86 |
5.4 & 5.11 & 5.13 |
9.3 |
2.31 |
CentOS 7.9 |
x86 |
3.10.0 |
5.x |
2.17 |
RHEL 8.y (y=0, 3, 4) |
x86 |
4.18.0 |
8.5.0 |
2.28 |
3.3. 硬件环境¶
TopsAten v2.6.0 暂仅支持 燧原S60 卡上运行 软件环境 ———
TopsAten 运行依赖 Enflame Runtime 和 Enflame Driver,使用 TopsAten 前请确保已安装好。具体参见《TopsRider软件栈安装手册》。
3.4. TopsAten 软件安装¶
安装TopsAten软件包¶
centos测试跑sample需要安装rpm包,安装命令是:
# rpm -i topsaten-{version_number}.rpm
并且需要export:
# export LD_LIBRARY_PATH=/opt/tops/lib:/usr/lib:$LD_LIBRARY_PATH
如需安装TopSAten包,进入存放TopsAten安装包的目录,安装命令为:
# dpkg -i topsaten_{version_numnber}_amd64.deb
确认是否安装成功,可查看 /usr/include/gcu/topsaten/ 是否已经生成了对应的目录和头文件,请执行:
# ls /usr/include/gcu/topsaten/
检查 “libtopsaten.so” 是否存在于目录 /usr/lib 下:
# ls /usr/lib/ |grep topsaten
如果需要更新 TopsAten,可以直接覆盖安装。
安装TopsDNN软件包¶
如果需要运行TopsAten和TopsDNN混跑的case,需要安装TopsDNN软件包。
进入存放TopsDNN安装包的目录,安装命令为:
# dpkg -i topsdnn_{version_numnber}_amd64.deb
确认是否安装成功,可查看 /usr/include/gcu/lib/topsdnn/include/ 是否已经生成了对应的目录和头文件,请执行:
# ls /usr/include/gcu/topsdnn/
并检查 “libtopsdnn.so” 是否存在于目录 /usr/lib 下:
# ls /usr/lib/ | grep topsdnn
3.5. 运行 TopsAten samples¶
TopsAten软件包安装完成后,对应的samples 被一并安装值/usr/src/topsaten_samples目录下。
此次共提供两个demo samples:
binary_op_test
该 demo 提供了TopsAten binary op 的调用执行过程,编译运行步骤如下:
cd binary_op_test && make
./binary_op_test
aten_dnn_test
该 demo 提供了TopsAten 和 TopsDNN 混跑的case, case 中先调用了topsatenAdd 后又调用了TopsDNN的卷积, 两个不同库中算子以Device memory 及属性参数作中转。编译运行步骤如下:
cd aten_dnn_test && make
./aten_dnn_test