1、背景

GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译
体验GE仓的编译。
在这里插入图片描述
欢迎大家踊跃体验:

https://www.hiascend.com/cann/graph-engine

本文主要是对GE仓库的编译进行体验,体验链接:
https://gitcode.com/cann/ge/blob/master/docs/build.md

2、体验过程

首先是依赖安装环节,仓库提供了两种方式:

  • 方式一 (手动安装)

  • 方式二(Docker容器)

注意: Docker只是完成基础环境准备,并不是GE完整的开发环境。也就是说,这个docker只把依赖包安装了,cann相关的包并没有安装。

本次选择的是手动安装,如下所示,安装依赖。
在这里插入图片描述
这一步骤,与常见的仓库编译安装依赖一样,折腾一下,基本都能解决。接着进行到第2步。

在这里插入图片描述
这里要注意一点,选择“最新版本”
这里有一些基础背景:
1、cann的toolkit包在不断的迭代优化过程中,包中的内容会一直在变化。
2、cann中有基本的运行接口和文件依赖(runtime等基础api,或者报错信息error,或者日志等接口等),如果cann中修改了,代码仓没做适配,大概率会报错。比如:
在这里插入图片描述
比如:这个“error_codes_define.h”文件,在cann-9.0.0上存在,在cann-8.5.0-beta.1不存在,如果当前的代码仓中代码是最新代码(master分支,如适配cann-9.0.0),编译就会报错。如果不懂cann的这层依赖包关系,解决这个问题,基本摸不着头脑,会深度怀疑是CANN的tookit包没安装对。

顺便吐槽:cuda的driver、toolkit包安装好一个版本后,开发者的代码仓库只要编译成功一次后,后续对于本仓的优化修改(不涉及cuda接口层这种),基本不影响仓库编译。cann的toolkit包希望尽快稳定,也能够做到这方面的优化。

ok,吐槽完了,接着往下继续执行。
在这里插入图片描述
下载源码基本不会有问题,回到编译上。
编译一段时间后,就报错了error: 'is_final' has not been declared in 'std'error: 'remove_cv_t' has not been declared in 'std'。玩过C++的都知道,remove_cv_t这种语法都是c++14标准中的内容。这就说明,在编译boost的时候,当前的编译环境是c++ < 14
在这里插入图片描述
从图中的waining报错中,也可以看出,boost代码在编译前,已经提示:

warning: #warning “The minimum language standard to use Boost.Math
will be C++14 starting in July 2023 (Boost 1.82 release)”

boost提示代码行:ge/output/third_party/boost/include/boost/math/tools/config.hpp:28
在这里插入图片描述

那到底是哪里影响了?
往编译命令bash build.sh刚开始时,打印出的环境信息进行查看。果真找到了问题原因,
在这里插入图片描述

咦,谁给配置的c++11环境? 继续往前看,发现问题。
在这里插入图片描述
过程应该是:在编译symengine_build-build,然后发现对boost有依赖,然后去编译boost。而boost是在.h中对c++标准进行了要求,而且boost其代码目录如下,直接去编译boost的c++文件,并没有设置std或者CMAKE_CXX_FLAGS变量。有理由怀疑,是symengine设置了。
在这里插入图片描述
那就果断去看下symengine的CMakeLists文件,文件在/home/ge/output/third_party/symengine/CMakeLists.txt
打开show code:
在这里插入图片描述
果然是在这里指定了CXX的编译环境是的c++11,并且设置到了CMAKE_CXX_FLAGS变量。
那就修改成c++14呗。
在这里插入图片描述
如上图所示修改,并重新编译。在编译时的初始环境中,可以看到对应的CMAKE_CXX_FLAGS已经改成了c++14。
在这里插入图片描述
那就继续编译,等待一段时间后,出现:
在这里插入图片描述
哟,编译成功了。

那是否应该会有3个run包?
在这里插入图片描述
查看对应目录:
在这里插入图片描述
编译是真成功了。
那中间遇到c++11的编译问题怎么办?去提单就好了,本问题见:https://gitcode.com/cann/ge/issues/82

3、总结

本文主要目的是将使用cann过程中的问题进行总结,希望能给各位开发者提供一些帮助。

在这里插入图片描述
另外:
1、大家遇到CANN开源仓的问题,欢迎大家踊跃提出issue,如GE提单地址:https://gitcode.com/cann/ge/issues
2、希望更多的开发者同学们能参与到CANN的建设,https://gitcode.com/cann

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐