# acl **Repository Path**: jiangRun1_admin/acl ## Basic Information - **Project Name**: acl - **Description**: ACL作为AI计算语言开发和运行平台,提供了Device管理、Context管理、Stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等API,供用户开发AI应用,实现目标识别、图像分类、语言和文字处理等功能。 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 153 - **Created**: 2024-09-19 - **Last Updated**: 2024-09-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [View English](./README.en.md) - [acl](#acl) - [概述](#概述) - [目录结构说明](#目录结构说明) - [环境准备](#环境准备) - [源码下载](#源码下载) - [配置环境变量](#配置环境变量) - [编译第三方库](#编译第三方库) - [编译](#编译) - [本地验证](#本地验证) - [安装](#安装) - [回滚](#回滚) - [贡献指南](#贡献指南) - [附录](#附录) # acl ## 概述 `ACL`作为AI计算语言开发和运行平台,提供了`Device`管理、`Context`管理、`Stream`管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等`API`,供用户开发AI应用,实现目标识别、图像分类、语言和文字处理等功能。 ## 目录结构说明 本源码仓目录结构如下: ```angular2html ├── c # 轻量化图执行 ├── common # 基础接口 ├── inc # 头文件 ├── model # 模型推理 ├── runtime # 运行时接口 ├── single_op # 单算子模型 ├── stub # 桩实现 ├── tensor_data_transfer # 用于Host与Device之间传递Tensor数据接口 ├── tests # 开发者测试目录 ├── third_party # 依赖的三方库 ├── toolchain # profiling/dump工具 ├── utils # 工具方法类 ``` ## 环境准备 `ACL`支持源码编译,在源码编译前,请确保环境满足如下要求: - 已安装CANN开发套件包(Ascend-cann-toolkit_\\_linux\_\)。 CANN开发套件软件包请从[Link](https://www.hiascend.com/developer/download/community/result?module=cann)获取。支持的操作系统、安装依赖及安装步骤详细可参见对应版本[用户手册](https://hiascend.com/document/redirect/CannCommunityInstSoftware)的“CANN软件包支持的操作系统”与“安装开发环境”章节。 **CANN开发套件包安装命令示例:** - 使用默认路径安装 ```shell ./Ascend-cann-toolkit__linux_.run --install ``` - 指定路径安装 ```shell ./Ascend-cann-toolkit__linux_.run --install --install-path=${install_path} ``` - 已安装以下依赖: - GCC >= 7.3.0 - CMake >= 3.14.0 (建议使用3.20.0版本) - ccache compile cache,编译器缓存优化工具,加快二次编译速度。 ```shell sudo apt-get install ccache ``` - bash >= 5.1.16 由于测试用例开启了地址消毒,代码中执行system函数会触发低版本的bash被地址消毒检查出内存泄露。建议版本不低于5.1.16。 ## 源码下载 `ACL`源码托管在码云平台,可以使用如下命令下载: ``` git clone https://gitee.com/cann/acl.git cd acl git submodule init && git submodule update --recursive ``` ## 配置环境变量 配置`ASCEND_INSTALL_PATH`环境变量,指定`Ascend-cann-toolkit`安装后相关软件存储路径。 - `Ascend-cann-toolkit`使用root用户、默认路径安装场景,配置示例: ```shell export ASCEND_INSTALL_PATH=/usr/local/Ascend/ascend-toolkit/latest ``` - `Ascend-cann-toolkit`使用非root用户、默认路径安装场景,配置示例: ```shell export ASCEND_INSTALL_PATH=$HOME/Ascend/ascend-toolkit/latest ``` - `Ascend-cann-toolkit`指定路径安装场景,若安装路径为${install_path},配置示例: ```shell export ASCEND_INSTALL_PATH=${install_path}/ascend-toolkit/latest ``` **说明:** 若开发者使用IDE CLion进行后续的源码编译与测试用例执行,编译执行前需要进行CLion的CMake配置,详细请参见[CLion配置](#clion_set)。 ## 编译第三方库 `ACL`仓依赖一些第三方库, 在正式编译`ACL`之前,需要首先完成依赖的三方库编译: ```bash bash build_third_party.sh --output_path=${3RD_LIB_PATH} ``` 此命令下载所有依赖的第三方库源码,并完成编译,编译生成的三方库结果会输出到${3RD_LIB_PATH}目录。如果不指定任何选项,上述脚本从`gitee`下载三方库源代码,完成编译后,二进制生成到`./output/third_party`目录。 您可以通过`-h`查看脚本选项,选择期望的下载方式和生成路径。该脚本仅需在编译`ACL`前调用一次,生成的二进制目录不会被其他脚本删除。 当指定源代码目录为本地目录时,本地目录的组织形式为: ```angular2html some-path-name └── libs ├── abseil-cpp │ └── abseil-cpp-20220623.1.tar.gz ├── benchmark │ └── v1.5.5.tar.gz ├── cares │ └── c-ares-cares-1_18_1.tar.gz ├── ge_gtest │ └── release-1.11.0.tar.gz ├── ge_nlohmann_json │ └── v3.11.2 │ └── include.zip ├── grpc │ └── grpc-v1.41.1.tar.gz ├── libjpeg-turbo │ └── 2.1.1.tar.gz ├── openssl │ └── openssl-3.0.9.tar.gz ├── protobuf │ └── v3.13.0.tar.gz ├── pybind11 │ └── v2.10.3.tar.gz ├── re2 │ └── re2-2021-11-01.tar.gz └── zlib └── zlib-v1.2.13.tar.gz ``` ## 编译 `ACL`提供一键式编译能力,可通过如下命令进行编译: ```shell bash build.sh --ascend_install_path=${CANN_INSTALL_PATH} --ascend_3rd_lib_path=${3RD_LIB_PATH} ``` `--ascend_install_path`选项的默认值为`/usr/local/Ascend/ascend-toolkit/latest`,编译完成后会在`output/package`目录下生成`CANN-acl-linux.{x86_64/aarch64}.run`软件包。 `build.sh`脚本默认从`./output/third_party`下查找三方库,若在执行`build_third_party.sh`时,指定了其他生成三方库的目录,可以通过`build.sh --ascend_3rd_lib_path=<指定的三方库路径>`选项做配置。 更多编译参数可以通过`bash build.sh -h`查看。 ## 本地验证 **说明:`UT`测试用例不支持使用`root`用户执行,请使用非`root`用户执行以下命令。** 编译完成后,用户可进行开发测试(DT:Development Testing )。 - 编译执行所有的UT测试用例: ```shell bash tests/run_test.sh --ut --ascend_install_path=${CANN_INSTALL_PATH} --ascend_3rd_lib_path=${3RD_LIB_PATH} ```` `UT`测试用例编译输出目录为`build_ut`,如果想清除历史编译记录,可以如下操作: ```bash rm -rf build_ut/ output/ build/ ``` 注:`tests/run_test.sh`脚本支持的详细命令参数可以执行`bash tests/run_test.sh -h`查看。 ## 安装 本地验证完成后,可执行如下命令安装编译生成的ACL软件包。 ```shell ./CANN-acl-linux.{x86_64/aarch64}.run --full ``` ## 回滚 若您想回退安装的自定义`ACL`软件包,恢复到安装`Ascend-cann-toolkit`后的状态,可执行如下命令。 ```shell ./CANN-acl-linux.{x86_64/aarch64}.run --rollback ``` ## 贡献指南 `ACL`仓欢迎广大开发者体验并参与贡献,在参与社区贡献前,请参见[cann-community](https://gitee.com/ascend/cann-community/blob/master/README.md)了解行为准则,进行CLA协议签署,了解参与贡献的详细流程。 针对`ACL`仓,开发者准备本地代码与提交PR时需要重点关注如下几点: 1. 请输出满足Google编程规范的代码,详细可参见[Google 开源项目风格指南 ](https://zh-google-styleguide.readthedocs.io/en/latest/)。 2. 提交PR时,请按照PR模板仔细填写本次PR的业务背景、目的、方案等信息。 3. 若您的修改不是简单的bug修复,而是涉及到新增特性、新增接口、新增配置参数或者修改代码流程等,请务必先通过Issue进行方案讨论,以避免您的代码被拒绝合入。若您不确定本次修改是否可被归为“简单的bug修复”,亦可通过提交Issue进行方案讨论。 ## 附录 ### CLion配置 若开发者使用IDE CLion编译源码并执行测试用例,编译执行前需要进行如配置: 1. 在菜单栏选择“File -> Settings”,进入“Settings”配置页面。 2. 在“Settings”窗口左侧选择“Build,Execution,Deployment -> CMake”,进入“CMake”配置界面。 3. 在“CMake”配置界面进行如下配置。 - Build type,设置为“GCOV”。 - CMake options,设置为如下值: ``` -DENABLE_OPEN_SRC=True -DENABLE_ACL_UT=ON -DASCEND_INSTALL_PATH=${CANN_INSTALL_PATH} -DASCEND_3RD_LIB_PATH=${3RD_LIB_PATH} ``` 关于`ASCEND_INSTALL_PATH`的取值说明请参见[配置环境变量](#env_set)。