其他
视觉大模型训练和推理加速
推理上的算子融合不需要考虑反向,所以 kernel 开发过程中不需要考虑保存计算梯度所需要的中间结果; 推理过程允许预处理,我们可以对一些只需要一次计算便可重复使用的操作,提前算好,保留结果,每次推理时直接调用从而避免重复计算。
另外,关于 cublasLt 中 INT8 矩阵乘法,还需要考虑数据的布局问题,cublasLt 支持两种布局,一种 IMMA-specific 的布局,其中涉及到一些比较复杂的格式,而且在这种布局只支持 NT-gemm,另外一种是常规的列优先的布局,在此布局下支持 TN-gemm。
首先我们需要创建句柄和乘法描述符; 接下来我们为每个矩阵创建一个矩阵描述符; 因为一般我们的输入都是常规 layout 的,所以我们需要对常规布局的矩阵进行布局转换,使其变为 IMMA-specific 的布局; 然后再进行 int8 矩阵乘法,得到结果之后,我们可以考虑继续用这个结果进行下游的乘法计算,这样可以避免转变会常规布局的开销; 只有最后一个矩阵乘法的结果,我们需要转换常规布局以便输出。
首先 IMMA-specific 布局对矩阵是有特定的尺寸要求,为了避免推理过程中需要额外分配空间的操作,我们会提前分配好符合 IMMA-specific 布局尺寸的 buffer; 然后,由于 weight 可以一次处理重复使用,所以我们会提前对 weight(相当于乘法中的 B 矩阵)进行布局变换,避免在推理过程中反复变换 weight; 第三个技巧是,对于不得不进行特殊布局变换的 A 和 C,我们会把变换和上游或下游 op 进行算子融合,以便隐藏这部分的开销; 最后一点,是与布局无关,而是 int8 矩阵乘法必有的量化和反量化的操作,我们同样会采用算子融合的方式,把它的 latency 隐藏起来。
云原生 AI 的资源调度和 AI 工作流引擎设计分享 AI 训练加速原理解析与工程实践分享 AI 推理加速原理解析与工程实践分享 双引擎 GPU 容器虚拟化,用户态和内核态的技术解析和实践分享 超大规模AI异构计算集群的设计和优化 AI 应用的全流程存储加速方案技术解析和实践分享 面向高性能计算场景的存储系统解决方案 构建AI原生的智能计算基础设施,百度百舸·AI异构计算平台2.0发布