版本须知¶
TopsPlatform 1.2.0¶
TopsPlatform_v1.2.0版本KMD提升了底层驱动的稳定性,Runtime优化launch kernel和多流下发的性能,提升模型效率。 编译器优化dte api codesize,减少icache miss;优化编译器产生的指令效率,提升算子性能。TopsProfiler、TopsGDB、Efsmi等工具也做了改进和优化,方便用户调试使用。
新增¶
TopsGraph mode支持factor算子和topscc算子混跑
新增runtime接口topsExecutableGetBinaryPtr()
新增runtime接口topsStreamCreateWithLaunchLimit API
默认使能L2C/LLC,提升模型性能
新增查询函数,查询buffer是L2还是L3,可通过topsPointerGetAttribute接口查询,topsPointerGetAttributes接口未支持
新增FW热更新
- 新增efsmi接口 efsmi -mcm single/dual -i x,用于配置卡的hash模式,该功能有如下limitation:
仅支持Asic,Asic Passthrough切换hash mode,SRIOV虚拟化环境下仅支持读取hash mode
驱动重新安装或机器重启后,mcm变回默认状态
docker里面切换mcm,需要docker有privileged权限
不支持多个docker并行切换(即使docker内是不同的卡)
新增TopsVisualProfiler选择视图导出csv时支持平铺list导出
新增TopsProfiler支持显示kernel隐式参数信息
新增TopsProfiler支持使能SIP的部分profiling事件而非全部事件
变更¶
efsmi reset移除-F参数
libefdrv.so和libefdrv_static.a以及相关软连接文件从topsruntime package中移除,头文件不变,一些必要的符号从libefdrv中移动到libefrt。如果之前没有直接依赖libefdrv,但是编译脚本中有类似-lefdrv这样的链接语句,需要删除,对于已经编译好的,依赖libefdrv的动态库或者可执行文件,需要重新编译
stream packet 默认使用单线程下发
Hwsync替换gsync,更新TopsPlatform_v1.2.0.4版本后,需拿1.2.0.4的TopsPlatform版本重新编译算子,否则会出现不兼容问题
修复及优化¶
解决kernel param size大且并发度高场景下,导致kernel param分配失败的问题
打开2M device memory pool功能,提升性能
graph support topsLaunchCooperativeKernel
launch kernel优化
多stream性能优化
fix graph capture下申请大内存OOM
efsmi安全增强,在SRIOV模式下,如果检查到当前存在VF,则禁止切换ECC模式或者主动触发reset,并且给用户删除VF的提示
fix 整卡透传VM 触发ras 偶现 ap timeout
fix efsmi -mcm single/dual未检查gcu是否有任务占用,执行该切换命令会导致任务直接中断
fix 容器非特权模式下,efsmi不支持读取加速卡sleep状态
- PF FLR后对VF处理优化:
支持host直接使用VF的场景下,PF FLR,VF销毁后自动重建VF。重新创建的VF,会进行重新编号,设备的编号和发生reset前可能不同,测试脚本需要重新check设备编号再使用;
Docker下使用VF的场景,PF FLR后,VF销毁后也自动创建VF,但需运维人员手动重启docker;
VF透传到VM的场景下,PF RAS后,KMD会halt住SP,终止VF中的业务继续下发,然后主动做PF FLR。后续需运维人员介入进行如下操作:关闭虚拟机、VF重新绑定回KMD、手动删除VF、再重新创建VF
fix 设备在reset后,可用device memory减少的问题
fix S60在多卡环境下profiler,如指定其中一张卡会报错 “topsDeviceGetPCIBusId failed error”,功能无影响
fix 多用户多进程profiling场景时的非法内存访问和机器重启
fix 1vf场景下profiling时,Die1 sip错误得显示在Die0
fix Profiling时,如全开所有的engine则会出现丢profiler数据的情况。建议减少profiling的时间或通过单算子场景做cdte/sdte/odte抓取vpd文件做性能分析
fix TopsProfiler不只是显示tops50的kernel,需要打印所有kernel信息
fix TopsGDB 除0号卡外无法debug的问题
fix虚拟化环境下,开启cdte sdte extra sip&sp等大数据量profile场景下,数据分发处理异常,导致服务器hang
TopsProfiler –enable-activities选项改为optional,不指定时默认使能operator与memcpy
fix 2vf环境下,开启cdte sdte extra sip&sp等大数据量进行profiling会存在时间戳为负数(丢失部分数据,使得数据没有对齐)
TopsProfiler按照stream对GCU Kernels进行分组
TopsProfiler支持区分不同的ODTE搬运方向(DToH, HToD, DToD)
TopsVisualProfiler优化事件视图中的属性显示
编译器codesize优化
编译器实现c slot替换优化,提升算子性能
已知问题¶
L2下沉管理默认开启后,会导致__topsMallocSharedMem接口在多线程多进程情况下概率性crash,后续在DRS方案中修复
1vf环境下,开启cdte sdte extra sip&sp等大数据量进行profiling,kmd dmesg信息会有call trace
TopsPlatform 1.1.0¶
TopsPlatform_v1.1.0版本上TopsCC及TopsRuntime进行了性能优化,增强了资源隔离,提供运行时库Graph功能将整个计算流定义为一个图而不是单个操作的列表,以优化计算流性能。同时,TopsProfiler、TopsGDB、Efsmi等工具也做了改进和优化,方便用户调试使用。
新增¶
新增TopsCC的DTE增量配置优化
新增多进程支持(L2下沉管理)
在topsDeviceSetLimit接口中新增topsLimitMultiProcessorCount和topsLimitMaxThreadsPerBlock选项,用于设置线程上下文中可用的最高processor count和thread per block
launch kernel开销优化:12个sip的启动斜率开销加boot code时间开销优化至3.5us
支持基于stream capture方式构建runtime graph,仅支持如下接口(__topsPushKernelNodeName、__topsPopKernelNodeName、topsStreamBeginCapture、topsStreamEndCapture、topsStreamGetCaptureInfo、topsStreamGetCaptureInfo_v2、topsStreamIsCapturing、topsStreamUpdateCaptureDependencies、topsThreadExchangeStreamCaptureMode、topsGraphGetNodes、topsGraphNodeGetType、topsGraphKernelNodeGetAttribute、topsGraphDebugDotPrint、topsGraphDestroy)
支持基于runtime graph查询算子使用block shared memory大小
支持用户配置算子使用的block shared memory的开始地址
支持命令行安装TopsPlatform.run包增加–no-kernel-modules参数,不自动编译和加载kmd ko
新增TopsGDB支持分析程序生成的coredump功能
TopsProfiler支持按Stream显示timeline
TopsProfiler支持提示“DTE partial write”
在S60上支持多媒体Video进程强杀
S60G默认只支持2VF驱动安装方式
默认支持Sleep功能
提高GCU boot成功率
- Efsmi的改进和优化:
vGCU状态改为GCU virt,并显示为disabled、vgcu、mdev、sriov
efsmi -r默认的reset行为改为FLR
hot reset流程,由kmd ioctl改为unbind+ sysfs reset + bind
efsmi -ecc on/off + efsmi -r hot 即可完成L3容量更新
ECC在VF上不可修改,仅只读
变更¶
TopsPlatform.run不再包含TopsVisualProfiler的windows和mac安装包,TopsVisualProfiler的windows和mac安装包单独提供
修复¶
循环中更新leaptr的offset, 出现tar spill happen
ctrl+c或者SIP超时后,这之前的printf信息不能输出到控制台
当使用-O0对topscc kernel进行编译时,执行该kernel的操作会默认为同步操作
S60 4VF下,虽然property中查询Shared Memory上限为32MB,但运行kernel时使用动态分配32MB Shared Memory时(如kernel<<<1,1,SIZE_32MB>>>),会发生crash。(1VF/2VF/asic运行模式下,Shared Memory上限为64MB,kernel使用动态分配64MB Shared Memory时,如kernel<<<1,1,SIZE_64MB>>>,可以正常运行)
修复pyefml的权限问题
TopsProfiler修改launch kernel与算子的统计方式,默认一个launch kernel对应一个算子
多线程场景下进行profiling,launch kernel数量偶现存在错误
已知问题¶
L2下沉管理默认开启后,会导致__topsMallocSharedMem接口在多线程多进程情况下概率性crash,后续在SVG/PVG方案中修复
S60 4vf打开所有profiler引擎会引起call trace,功能无影响
S60在多卡环境下profiler,如指定其中一张卡会报错 “topsDeviceGetPCIBusId failed error”,功能无影响
TopsPlatform 1.0.2¶
TopsPlatform_v1.0.2版本上TopsCC及TopsRuntime实现了部分的内部优化,TopsProfiler在S60/S60G上支持单机多卡profiling,TopsGDB对GDB版本作了升级
新增¶
TopsCC优化整型vector除法性能
TopsCC增强bank conflict算法,提升程序性能
支持Event底层使用hardware timer计算时间
默认打开kmd odte ifb和vmsys prefetch
支持S60/S60G单机多卡profiling
加载Driver时默认打开kernel profiler
Profiling时支持RAS enable
更新GDB版本,从12.1更新到13.2 GDB 13.2 Changes
变更¶
NA
修复¶
S60/S60G不支持SIP上的kernel程序运行时的强杀
topsEventRecord会造成host memory的泄露
修复DTE操作的size >= 4GB时报错返回
kernel越界访问或L2L3多sip搬运等错误情况就会产生DTE、PTE问题
S60/S60G上使用一个event来同步多个stream时无效,可能造成硬件错误
缺少 acosh asinh atanh cbrt copysign logb 的函数接口
修复需要用户显式添加reserve_r29_for_scavenge属性
如果算子编译的时候不添加fgcu参数,并尝试去收集dma操作时,pti会抛出 the activities missed meta and not find meta for this sip launch debug message
尝试profile sdte/cdte时如果未增加-fgcu参数,会有assert sdma failed call trace
i20上批量执行op+cpu profile用例会抛出unable to handle kernel paging request at 0000000000002559
gcu-utilzation 在kernel_profile=1 的情况下,收集不到数据
TopsGDB attach/ -p pid 形式调试hang的程序,无法查看到gcu线程
已知问题¶
TopsCC kernel函数不支持纯虚类子类的实例化
Launch TopsCC kernel时,线程总数(grid dim * block dim)不能大于1024
topscc使用-O0编译报错
循环中更新leaptr的offset, 出现tar spill happen
kernel使用两个private DTE比只使用一个带来性能下降
cmake不能够使用topscc作为cc(c语言编译器)
S60/S60G不支持local关键字修饰的动态数组
ctrl+c或者SIP超时后,这之前的printf信息不能输出到控制台
当使用-O0对topscc kernel进行编译时,执行该kernel的操作会默认为同步操作
打开staging memcpy功能时,如果EFRT_STAGING_BUFFER_SIZE设置很小(如4KB),在直接使用系统接口malloc()分配的内存进行H2D或D2H操作时可能看到比较大的性能下降。topsHostMalloc()分配的内存,或进行过topsHostRegister()注册的内存则不会受到影响
attach 方式做kernel profile会引起rpc链接失败,从而导致attach无法进行数据收集
topsdnn 进行legacy profiler 收集不到 gcu op 的数据
S60先进行 legacy 只收集op 的profiler,再进行收集全部数据的kernel profiler ,kernel profielr 收集不到sdte的数据
TopsPlatform 0.9.0¶
TopsPlatform_v0.9.0版本首次在S6/S60上使能TopsGDB和TopsProfiler,TopsCC及TopsRuntime提供了更丰富的功能
新增¶
支持Staging Memcpy功能
TopsCC支持软流水
TopsCC支持Barrier同步方式
TopsCC在S6/S60上支持Block超发
TopsRuntime增加打印启动的kernel信息
TopsRuntime增加TopsMemGetInfoExt API以提供每个MC上的内存使用信息
TopsGDB在S6/S60设备上支持C/C++源码级别的调试,包括断点、单步执行、backtrace、查看栈变量和device变量、exception/abort信号捕获
TopsGDB支持多卡环境
TopsProfiler在S6/S60上支持单卡单进程
IDE提供configuration的TopsGDB选项,供用户选择使用
efsmi增加强制reset某张卡
变更¶
移除TopsCC的elemwise、reduction、nn计算接口
修复¶
将设备端函数代码直接写在调用者(caller)的内部和采用函数内联(forceinline)这两种方式生成的代码大小不一致
printf以格式转换说明符结尾时,会多输出(null)
printf(“%%”)多打印了一个%
kernel 函数中最多定义 8 个 constexpr,超过会出现运行时错误
某些intrinsic函数参数需要强制转换成addrespace(5)才能编译
i20上启用TOPS_ENABLE_DTE_CHECK宏之后,DTE一些错误行为会导致程序hang
使用char*类型的指令报错
内层循环中使用printf+set_address之后,qa的targ地址发生变化,导致store出现错误
在同一块memory中,使用循环load和store qacc, 出现core dump,dacc store 地址更新出错
LLVM ERROR: unsupported swap.smr spill
Kernel输入参数为nullptr,应用程序异常退出
topscc中set address store结果错误
Fix 无法从const section进行memcpy h2d的问题
trace-api 在 kernel_profile=1 attach 模式下,收集不到数据
收集不到ODMA event的数据
Profiler算子kernel气泡大
Factor profiler收集OP meta data时没有shape信息
已知问题¶
TopsCC kernel函数不支持纯虚类子类的实例化
Launch TopsCC kernel时,线程总数(grid dim * block dim)不能大于1024
Topscc使用-O0编译报错
kernel使用两个private DTE比只使用一个带来性能下降
cmake不能够使用topscc作为cc(c语言编译器)
循环中更新leaptr的offset, 出现tar spill happen
ctrl+c或者SIP超时后,这之前的printf信息不能输出到控制台
S6/S60不支持local关键字修饰的动态数组
当使用-O0对topscc kernel进行编译时,执行该kernel的操作会默认为同步操作
S6/S60上不支持SIP上的kernel程序运行时的强杀
topsEventRecord会造成host memory的泄露
S6/S60上使用一个event来同步多个stream时无效,可能造成硬件错误
对4G以上的host memory进行topsMemset、topsMemcpy等操作时,可能造成DTE Error
打开staging memcpy功能时,如果EFRT_STAGING_BUFFER_SIZE设置很小(如4KB),在直接使用系统接口malloc()分配的内存进行H2D或D2H操作时可能看到比较大的性能下降。topsHostMalloc()分配的内存,或进行过topsHostRegister()注册的内存则不会受到影响
如果算子编译的时候不添加fgcu参数,并尝试去收集dma操作时,pti会抛出 the activities missed meta and not find meta for this sip launch debug message
尝试profile sdte/cdte时如果未增加-fgcu参数,会有assert sdma failed call trace
i20上批量执行op+cpu profile用例会抛出unable to handle kernel paging request at 0000000000002559
KMD安装时需增加环境变量kernel_profile=1,才能使能topscc profiler
gcu-utilzation 在kernel_profile=1 的情况下,收集不到数据
TopsGDB attach/ -p pid 形式调试hang的程序,无法查看到gcu线程
TopsPlatform 0.8.1¶
TopsPlatform v0.8.1版本包含了如下新功能:TopsCC在S6、S60设备上使能、TopsGDB在i20上支持C/C++源码级别调试、TopsProfiler实现TopsCC-Profiler和Factor-Profiler的整合
新增¶
TopsCC在S6、S60设备上使能
支持配置dma的offset/layout参数的数组初始化,如: config_deslice(hbm_output, csb_input, {0, 0, 0, 0})
新增Runtime API:
topsExtSetProfileMeta for setting profile meta data
topsExecutableGetConstManagedData for getting weight to be refit
topsExecutableGetConstManagedDataV2 for getting weight to be refit
topsExecutableUpdateRuntimeResource for weight in-place replacement
topsExecutableLoadConstData for sharing constant in different executable
topsExecutableLoadConstDataV2 for sharing constant in different executable
topsExecutableQueryInputName for get executable input name
topsExecutableQueryOutputName for get executable output name
topsExtMallocWithBankV2 for expand topsExtMallocWithBank with flags parameter
topsExtMallocWithAffinity for malloc dev memory with logical memory bank
topsScatterInplace for replace scatter old sub mem with new sub mem descriptor
topsDeviceEnablePeerAccessRegion for setup p2p access mapping with peer device’s specified address region
topsDeviceDisablePeerAccessRegion for destroy p2p access mapping with peer device’s specified address region
TopsGDB在i20上支持C/C++源码级别的调试,包括断点、单步执行、backtrace、查看栈变量和device变量
TopsProfiler支持GCU指定事件和活动的采集
TopsProfiler支持CPU堆栈和内存等信息采集
TopsProfiler输出各种采集数据信息
TopsProfiler控制采集程序的启停
变更¶
TopsCC v0.8.1存在默认安装路径及库名字的改变,默认安装路径从/opt/topscc变为/opt/tops,请在使用时做相应修改
TopsGDB默认安装路径从/opt/topscc变为/opt/tops,请在使用时做对应修改
Runtime3.0库的默认安装路径从/usr变为/opt/tops,请在使用时做相应修改
Runtime2.0中头文件路径含dtu字样改成gcu,为兼容原用法,目前保留dtu软链接。软链接将在下次发布中去除,请在该段时间内完成相应修改
修复¶
在__device__ __forceinline__函数内L1数值错乱
编译报错:Incomplete scavenging after 2nd pass
matmul精度问题
topscc编译出来的二进制size较大,比factor编译的code size大3~4倍
二维数组使用vstore编译报错如下:Incomplete scavenging after 2nd pass
使用4个cdma,6个sdma,然后调用printf,hang
1c12s同时d2c,只启动了2个cdma,预期启动4个cdma
支持使用数组初始化列表来配置dmaoffset/layout参数
TopsCC 在 scorpio 上运行,cfunc kernel intrinsic 指令行为与预期不符
TopsCC反汇编intrinsic指令与预期不符,没有打包。需要加attribute
在T20、T21上TopsGDB通过Ctrl+D强制结束后再使用存在异常
已知问题¶
kernel c++不能支持纯虚成员函数
TopsCC在S60上只支持单Block
TopsCC在S6、S60设备上不支持libtopscxx提供的计算接口
kernel使用两个private DTE比只使用一个带来性能下降
cmake不能够使用topscc作为cc(c语言编译器)
ctrl+c或者SIP超时后,这之前的printf信息不能输出到控制台
将设备端函数代码直接写在调用者(caller)的内部和采用函数内联(forceinline)这两种方式生成的代码大小不一致
printf以格式转换说明符结尾时,会多输出(null)
printf(“%%”)多打印了一个%
kernel 函数中最多定义 8 个 constexpr,超过会出现运行时错误
某些intrinsic函数参数需要强制转换成addrespace(5)才能编译
[gcu300]不支持local关键字修饰的动态数组
[gcu200]启用TOPS_ENABLE_DTE_CHECK宏之后,DTE一些错误行为会导致程序hang
Build topscc kernel with -O0 flag and the kernel launch will be synchronized by default
TopsGDB仅支持单卡环境,暂不支持多卡环境
TopsGDB在i20设备上支持C/C++源码调试;在T20、T21设备上支持汇编级别的调试,对于S6、S60等设备的支持以及T20、T21设备上源码调试功能将在后续版本支持
必须增加环境变量kernel_profile=1,才能使能topscc profiler
gcu-utilzation 在kernel_profile=1 的情况下,收集不到数据
trace-api 在 kernel_profile=1 attach 模式下,收集不到数据
收集不到ODMA event的数据
factor profiler收集OP meta data时没有shape信息,Topscc profiler不支持获取OP meta data的shape信息