深度学习编译器CINN(1):框架概览和编译安装

news2025/7/28 2:52:00

目录

框架概览

编译安装

参考


框架概览

 

 

CINN是一种在不改变模型代码的条件下加速飞桨模型运行速度的深度学习编译器。CINN致力于创造训推一体自动调优、分布式编译加速等特色功能,对深度学习模型提供全自动、极致的性能优化,并在科研界和工业界建立影响力。

不同于深度学习框架算子,深度学习编译器算子的粒度更细,算子数目也更少,因此在算子融合和自动调优方面具有更大的优势。在对接上层框架时,编译器会将上层的框架算子进一步拆分为若干基础算子,这样做的目的一方面是为了减少算子开发的工作量,仅实现有限的基础算子便可以组合出大量的上层框架算子;另一方面便于算子融合技术在编译器中可以实现跨算子自动融合,减少最终执行时的kernel数目和访存开销,达到更好的性能;此外,结合自动调优技术使得编译器可以自动优化融合后的kernel,提升kernel性能。

batch_norm + elementwise_add算子为例,首先,batch_norm算子可以被拆分为32个基础算子,而后这些基础算子又可与elementwise_add相融合,最终可融合为两个kernel,测试结果表明,融合后的kernel在大部分配置下性能均能优于Paddle原生。

来源:community/CINN_base_operator.md at master · PaddlePaddle/community · GitHub

编译安装

编译的过程中坑还是挺多的:

首先是官方的安装教程:CINN/install.md at develop · PaddlePaddle/CINN · GitHub

按照这个安装教程安装docker镜像:

这个脚本改成下面的:

$ docker run --gpus=all -it -v $PWD/CINN:/CINN registry.baidubce.com/paddlepaddle/paddle:latest-dev-cuda11.2-cudnn8-gcc82 /bin/bash

然后不熟悉docker的朋友们又要踩坑了,这里的命令是新建了一个容器,我们下次进入的时候应该这么操作:

sudo docker start great_elgamal
sudo docker attach great_elgamal
cd /CINN

把 great_elgamal 换成你自己的容器名就行,如果不知道怎么看容器名,用这个命令:

docker ps -a

然后编译按照这个教程:Install CINN using docker — cinn release/v0.1-rc documentation

直接进行第三步:

这时候只需要泡一杯茶,顺便摸摸鱼等待编译就行了:

======================================================================
FAIL: test_check_results (__main__.TestReciprocalCase1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/CINN/CINN/python/tests/ops/test_reciprocal_op.py", line 48, in test_check_results
    self.check_outputs_and_grads()
  File "/CINN/CINN/python/tests/ops/op_test.py", line 104, in check_outputs_and_grads
    max_relative_error, all_equal, equal_nan, "Outputs")
  File "/CINN/CINN/python/tests/ops/op_test.py", line 211, in check_results
    self.assertTrue(is_allclose, msg=error_message)
AssertionError: False is not true : [Check Outputs] [CPU] The 0-th output: total 32 different results, offset=0, shape=(32,), 0.000000e+00 vs 7.132941e+01, maximum_relative_diff=inf (absolute_diff=7.132941e+01).

======================================================================
FAIL: test_check_results (__main__.TestReciprocalCase2)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/CINN/CINN/python/tests/ops/test_reciprocal_op.py", line 48, in test_check_results
    self.check_outputs_and_grads()
  File "/CINN/CINN/python/tests/ops/op_test.py", line 104, in check_outputs_and_grads
    max_relative_error, all_equal, equal_nan, "Outputs")
  File "/CINN/CINN/python/tests/ops/op_test.py", line 211, in check_results
    self.assertTrue(is_allclose, msg=error_message)
AssertionError: False is not true : [Check Outputs] [CPU] The 0-th output: total 10 different results, offset=0, shape=(10,), 0.000000e+00 vs 1.075237e+00, maximum_relative_diff=inf (absolute_diff=1.075237e+00).

======================================================================
FAIL: test_check_results (__main__.TestReciprocalCase3)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/CINN/CINN/python/tests/ops/test_reciprocal_op.py", line 48, in test_check_results
    self.check_outputs_and_grads()
  File "/CINN/CINN/python/tests/ops/op_test.py", line 104, in check_outputs_and_grads
    max_relative_error, all_equal, equal_nan, "Outputs")
  File "/CINN/CINN/python/tests/ops/op_test.py", line 211, in check_results
    self.assertTrue(is_allclose, msg=error_message)
AssertionError: False is not true : [Check Outputs] [CPU] The 0-th output: total 10 different results, offset=0, shape=(1, 10), 0.000000e+00 vs 1.194706e+00, maximum_relative_diff=inf (absolute_diff=1.194706e+00).

======================================================================
FAIL: test_check_results (__main__.TestReciprocalOp)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/CINN/CINN/python/tests/ops/test_reciprocal_op.py", line 48, in test_check_results
    self.check_outputs_and_grads()
  File "/CINN/CINN/python/tests/ops/op_test.py", line 104, in check_outputs_and_grads
    max_relative_error, all_equal, equal_nan, "Outputs")
  File "/CINN/CINN/python/tests/ops/op_test.py", line 211, in check_results
    self.assertTrue(is_allclose, msg=error_message)
AssertionError: False is not true : [Check Outputs] [CPU] The 0-th output: total 32 different results, offset=0, shape=(32,), 0.000000e+00 vs 1.340948e+00, maximum_relative_diff=inf (absolute_diff=1.340948e+00).

----------------------------------------------------------------------
Ran 4 tests in 4.816s

FAILED (failures=4)

174/181 Test #177: tests/ops/test_subtract_op ..............   Passed    2.95 sec
175/181 Test #178: tests/ops/test_sum_op ...................   Passed    2.67 sec
176/181 Test #179: tests/ops/test_transpose_op .............   Passed    2.52 sec
177/181 Test #180: tests/ops/test_unary_elementwise_op .....   Passed    2.56 sec
178/181 Test #181: tests/ops/test_uniform_random_op ........   Passed    2.58 sec
179/181 Test #176: tests/ops/test_squeeze_op ...............   Passed    7.53 sec
180/181 Test   #1: test_auto_tuner .........................   Passed   67.97 sec
181/181 Test #120: test02_matmul_case ......................   Passed  113.88 sec

99% tests passed, 2 tests failed out of 181

Total Test time (real) = 123.51 sec

The following tests FAILED:
        134 - test_broadcast_to_op (Failed)
        164 - tests/ops/test_reciprocal_op (Failed)
Errors while running CTest

编译的结果是有两个test文件会编译失败,问题不大,我们用给的demo试一试能不能编译成功:

编译是成功了,但是运行报错:

./demo: error while loading shared libraries: libcinnapi.so: cannot open shared object file: No such file or directory

我又尝试在GPU上编译:

bash ./build.sh gpu_on ci

但是还是有很多失败的test啊:

77% tests passed, 57 tests failed out of 251

Total Test time (real) = 249.36 sec

The following tests FAILED:
        167 - test_cinn_fake_resnet (Failed)
        175 - test_broadcast_to_op (Failed)
        177 - tests/ops/test_add_op (Failed)
        178 - tests/ops/test_batch_norm_op (Failed)
        179 - tests/ops/test_binary_elementwise_op (Failed)
        180 - tests/ops/test_cast_op (Failed)
        182 - tests/ops/test_ceil_op (Failed)
        185 - tests/ops/test_concat_op (Failed)
        187 - tests/ops/test_divide_op (Failed)
        189 - tests/ops/test_fill_constant_op (Failed)
        190 - tests/ops/test_floor_divide_op (Failed)
        191 - tests/ops/test_gather_nd_op (Failed)
        192 - tests/ops/test_gather_op (Failed)
        194 - tests/ops/test_gelu_op (Failed)
        195 - tests/ops/test_isclose_op (Failed)
        197 - tests/ops/test_lookup_table_op (Failed)
        198 - tests/ops/test_matmul_op (Failed)
        199 - tests/ops/test_max_op (Failed)
        200 - tests/ops/test_mod_op (Failed)
        201 - tests/ops/test_multiply_op (Failed)
        202 - tests/ops/test_norm_op (Failed)
        203 - tests/ops/test_one_hot_op (Failed)
        205 - tests/ops/test_pow_op (Failed)
        206 - tests/ops/test_reciprocal_op (Failed)
        207 - tests/ops/test_reduce_op (Failed)
        208 - tests/ops/test_relu_op (Failed)
        210 - tests/ops/test_scatter_add (Failed)
        212 - tests/ops/test_select_op (Failed)
        213 - tests/ops/test_sigmoid_op (Failed)
        214 - tests/ops/test_sign_op (Failed)
        216 - tests/ops/test_slice_op (Failed)
        217 - tests/ops/test_split_op (Failed)
        219 - tests/ops/test_subtract_op (Failed)
        220 - tests/ops/test_sum_op (Failed)
        221 - tests/ops/test_transpose_op (Failed)
        222 - tests/ops/test_unary_elementwise_op (Failed)
        225 - tests/op_mappers/test_atan2_op (Failed)
        226 - tests/op_mappers/test_bitwise_op (Failed)
        227 - tests/op_mappers/test_compare_op (Failed)
        228 - tests/op_mappers/test_cumsum_op (Failed)
        229 - tests/op_mappers/test_elementwise_op (Failed)
        230 - tests/op_mappers/test_expand_op (Failed)
        231 - tests/op_mappers/test_expand_v2_op (Failed)
        232 - tests/op_mappers/test_fill_constant_op (Failed)
        233 - tests/op_mappers/test_gather_nd_op (Failed)
        234 - tests/op_mappers/test_gather_op (Failed)
        237 - tests/op_mappers/test_log1p_op (Failed)
        238 - tests/op_mappers/test_logical_op (Failed)
        240 - tests/op_mappers/test_pow_op (Failed)
        241 - tests/op_mappers/test_reduce_op (Failed)
        242 - tests/op_mappers/test_scale_op (Failed)
        243 - tests/op_mappers/test_sign_op (Failed)
        244 - tests/op_mappers/test_split_op (Failed)
        246 - tests/op_mappers/test_stack_op (Failed)
        247 - tests/op_mappers/test_transpose2_op (Failed)
        248 - tests/op_mappers/test_unary_op (Failed)
        250 - tests/op_mappers/test_where_op (Failed)
Errors while running CTest

大致浏览一下这些fatal都是什么报错:

======================================================================
FAIL: test_check_results (__main__.TestSqrtOp)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/CINN/CINN/python/tests/op_mappers/test_unary_op.py", line 55, in test_check_results
    self.check_outputs_and_grads()
  File "/CINN/CINN/build/python/tests/ops/op_test.py", line 104, in check_outputs_and_grads
    max_relative_error, all_equal, equal_nan, "Outputs")
  File "/CINN/CINN/build/python/tests/ops/op_test.py", line 211, in check_results
    self.assertTrue(is_allclose, msg=error_message)
AssertionError: False is not true : [Check Outputs] [NVGPU] The 0-th output: total 2048 different results, offset=641, shape=(32, 64), 5.755169e-04 vs 4.795379e-01, maximum_relative_diff=8.322300e+02 (absolute_diff=4.789624e-01).

======================================================================
FAIL: test_check_results (__main__.TestTanOp)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/CINN/CINN/python/tests/op_mappers/test_unary_op.py", line 55, in test_check_results
    self.check_outputs_and_grads()
  File "/CINN/CINN/build/python/tests/ops/op_test.py", line 104, in check_outputs_and_grads
    max_relative_error, all_equal, equal_nan, "Outputs")
  File "/CINN/CINN/build/python/tests/ops/op_test.py", line 211, in check_results
    self.assertTrue(is_allclose, msg=error_message)
AssertionError: False is not true : [Check Outputs] [NVGPU] The 0-th output: total 2048 different results, offset=315, shape=(32, 64), 1.842093e-04 vs 4.241378e-01, maximum_relative_diff=2.301478e+03 (absolute_diff=4.239536e-01).

提了个issue,继续学习去了……

跟着教程编译报错 libcinnapi.so · Issue #1214 · PaddlePaddle/CINN · GitHub

有可能是显卡版本的问题,我在3090的机器上试就可以成功,P4卡上编译就有各种奇奇怪怪的bug,很迷。 

参考

  • 飞桨AI Studio - 人工智能学习与实训社区
  • community/CINN_base_operator.md at master · PaddlePaddle/community · GitHub
  • 手把手教你为神经网络编译器CINN增加One-Hot算子_飞桨PaddlePaddle的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/368074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【布隆过滤器(Bloom Filter)基本概念与原理、Bloom Filter优点与缺点、以及应用场景】

布隆过滤器(Bloom Filter)基本概念与原理、Bloom Filter优点与缺点、以及应用场景 Bloom Filter 基本概念 布隆过滤器是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在…

DualCor: Event Causality Extraction with Event Argument Correlations论文解读

Event Causality Extraction with Event Argument Correlations(带有事件论元相关性的事件因果关系抽取) 论文:2301.11621.pdf (arxiv.org) 代码:cuishiyao96/ECE: Dataset and code for COLING2022 paper Event Causality Extraction with Event Argum…

【vue 10 第一个vue-cli程序】

1.什么是vue-cli vue-cli官方提供的一个脚手架,用于快速生成一个vue的项目模版; 预先定义好的目录结构及基础代码,就好比咱们在创建Maven项目时可以选择创建一个骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速…

FC总线知识点小结

FC总线 (一)特点: FC具备通道和网络双重优势,具备高带宽、高可靠性、高稳定性,抵抗电磁干扰等优点,能够提供非常稳定可靠的光纤连接,容易构建大型的数据传输和通信网络,目前支持1x…

2022阿里,字节跳动,JAVA岗(一线企业校招、社招)面试题合集

前言 以下面试题全属于一线大厂社招以及校招的面试真题,各位在做这些题目对照自己的时候请平凡心对待,不要信心受挫。其实 做为致力于一线企业校招或者社招的你来说,能把每个知识模块的一小部分问题去深入学习和总结,已经很棒了&…

SpringBoot整合阿里云OSS文件上传、下载、查看、删除

SpringBoot整合阿里云OSS文件上传、下载、查看、删除1、开发准备1.1 前置知识1.2 环境参数1.3 你能学到什么2. 使用阿里云OSS2.1 创建Bucket2.2 管理文件2.3 阿里云OSS文档3. 项目初始化3.1 创建SpringBoot项目3.2 Maven依赖3.3 安装lombok插件4. 后端服务编写4.1 阿里云OSS配置…

Ask林曦|来回答,30个你关心的日常问题(三)

在林曦老师的线上书法直播课上,上课前后的聊天时间里,时常有同学向林曦老师提问,这些问题涵盖了日常生活的诸多方面,从身体的保养,到快乐的法门,皆是大家感兴趣的,也都共同关切的。      暄…

Spring Cloud @RefreshScope 原理分析:扫描 Bean 定义

背景 最近读了一下 spring cloud 的 RefreshScope 生效的源码,总结一下该注解的 refresh 类型的类实例化的过程。 关键技术点: 扫描过程中对 RefreshScope 注解做了特殊处理,会额外注册两个BeanDefinition。GenericScope 实现了 BeanDefin…

医疗影像工具LEADTOOLS 入门教程: 从 PDF 中提取附件 - 控制台 C#

LEADTOOLS 是一个综合工具包的集合,用于将识别、文档、医疗、成像和多媒体技术整合到桌面、服务器、平板电脑、网络和移动解决方案中,是一项企业级文档自动化解决方案,有捕捉,OCR,OMR,表单识别和处理&#…

ARM平台搭建Python环境

ARM平台搭建Python环境写在最前常见问题1. 主机(Ubuntu)安装Python3.8.101.1 安装前的准备1.2 Ubuntu安装Python3.8.101.3 Ubuntu配置Python3.8.102. 宿主机(AMR)安装Python3.8.102.1 主机安装交叉编译工具2.2 交叉编译zlib库2.3 …

简析RE中python的exe文件

0x00. 前置学习 简单了解 python为什么要打包成exe文件?在日常生活中的应用是因为传输源文件以及源代码给他人是需要配置好一定的环境才能进行编译操作,而打包成exe文件就可以跟电脑软件一样打开就可以运行也可以分享给他人。 而对于ctf比赛来说&…

(三十三)大白话MySQL运行时多个事务同时执行是什么场景?

到目前为止,我们已经给大家深入讲解了MySQL的buffer pool机制、redo log机制和undo log机制,相信大家现在对我们平时执行一些增删改语句的实现原理,都有了一定较为深入的理解了! 因为平时我们执行增删改的时候,无非就…

Python|Leetcode刷题日寄Part04

Python|Leetcode刷题日寄Part0401:环形链表02:跳跃游戏03:括号生成04:二分查找05:打家劫舍06:搜索旋转排序数组07:Z字形变换08:买卖股票的最佳时机Ⅱ09:最后一个单词的长…

国产蓝牙耳机300左右哪个牌子的好?三百左右蓝牙耳机推荐

现在的蓝牙耳机样式越来越五花八门,各种性能也越来越好。特别是国产蓝牙耳机,近几年的发展十分快速。那么,三百左右哪个牌子的国产蓝牙耳机好?接下来,我来给大家推荐几款三百左右的蓝牙耳机,一起来看看吧。…

Java加密算法:base64,MD5加密,对称加密,非对称加密

目录 Java:密码算法 1、base64加密方式 2、jdk原生api实现MD5 3、使用codec依赖实现MD5加密 4、SHA加密 5、MAC算法加密 6、对称加密 7、非对称加密 Java:密码算法 1、base64加密方式 public class demo {//设置编码格式private static final S…

搜索引擎的6个技巧

今天看了一期seo优化的视频,其中就有这么一篇关于百度搜索的几个小技巧,这里整理出来,分享给大家。不是标题党,真的99%的人都不知道这个6个小技巧。 搜索引擎一般都会有一些高级的搜索技巧,掌握这些技巧之后就可以过滤…

spring的启动过程(二) :springMvc的启动过程

在上一篇文章中,我们详解了spring的启动过程,这一篇介绍spring mvc的启动过程,那么spring和spring mvc有什么联系呢。 1.Spring和SpringMVC是父子容器关系。2.Spring整体框架的核心思想是容器,用来管理bean的生命周期,…

CAN总线开发一本全(3) - 微控制器集成的FlexCAN外设

CAN总线开发一本全(3) - 微控制器集成的FlexCAN外设 苏勇,2023年2月 文章目录CAN总线开发一本全(3) - 微控制器集成的FlexCAN外设引言硬件外设模块系统概要总线接口单元 - 寄存器清单数据结构 - 消息缓冲区MB初始化过…

taobao.top.oaid.merge( OAID订单合并 )

¥开放平台免费API必须用户授权 基于OAID(收件人ID, Open Addressee ID)做订单合并,确保相同收件人信息的订单合并到相同组。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请…

win10环境下安装java开发环境安装java

一:环境介绍 安装系统版本:win10 java版本:java SE 17 二:下载Java安装包 官网下载Java安装包:Java Downloads | Oracle 中国 选择需要的Java版本进行下载,如果没有要选择的版本,可以选择最新…