1 Star 0 Fork 1

zhaomingming / ZenDNN

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

Zen Deep Neural Network Library (ZenDNN)

ZenDNN (Zen Deep Neural Network) Library accelerates deep learning inference applications on AMD CPUs. This library, which includes APIs for basic neural network building blocks optimized for AMD CPUs, targets deep learning application and framework developers with the goal of improving inference performance on AMD CPUs across a variety of workloads, including computer vision, natural language processing (NLP), and recommender systems. ZenDNN leverages oneDNN/DNNL v2.2's basic infrastructure and APIs. ZenDNN optimizes several APIs and adds new APIs, which are currently integrated into TensorFlow, ONNXRT, and PyTorch. ZenDNN uses AMD BLIS (BLAS-like Library Instantiation Software) library for its BLAS (Basic Linear Algebra Subprograms) API needs.

Table of Contents

Scope

The scope of ZenDNN is to support AMD EPYCTM CPUs on the Linux® platform. ZenDNN v3.2 offers optimized primitives, such as Convolution, MatMul, Elementwise, and Pool (Max and Average) that improve performance of many convolutional neural networks, recurrent neural networks, transformer-based models, and recommender system models. For the primitives not supported by ZenDNN, execution will fall back to the native path of the framework.

Release Highlights

Following are the highlights of this release:

  • ZenDNN library is integrated with TensorFlow (v2.7), ONNXRT v1.8.0, and PyTorch (v1.9.0).
  • Python v3.6-v3.9 has been used to generate the TensorFlow v2.7 wheel files (*.whl).
  • Python v3.8 has been used to generate the ONNXRT v1.8.0 wheel file (*.whl).
  • Python v3.6-v3.9 has been used to generate the PyTorch v1.9.0 wheel files (*.whl).
  • NHWC (default format) and Blocked Format (NCHWc8) are supported.

ZenDNN library is intended to be used in conjunction with the frameworks mentioned above and cannot be used independently.

The latest information on the ZenDNN release and installers is available on AMD Developer Central (https://developer.amd.com/zendnn/).

Supported OS and Compilers

This release of ZenDNN supports the following Operating Systems (OS) and compilers:

OS

  • Ubuntu® 18.04 LTS and later
  • Red Hat® Enterprise Linux® (RHEL) 8.0 and later
  • CentOS 7.9 and later

Compilers

Theoretically, any Linux based OS with GLIBC version later than 2.17 could be supported.

Prerequisites

The following prerequisites must be met for this release of ZenDNN:

  • AOCC 3.0 and AOCL (AMD-BLIS) 3.0.6 must be installed for PyTorch and ONNXRT binary packages.
    • Note: While GCC 7.5 and later are also supported compilers, AOCC is recommended for optimal performance of the ZenDNN library.

AOCC and AMD-BLIS Library Installation

AOCC is a high performance, production quality code generation tool. AOCC can be downloaded from AMD Developer Central (https://developer.amd.com/amd-aocc/).

ZenDNN compiled with AOCC may provide better performance as compared to the other open-source counterparts.

AMD-BLIS is a portable open-source software framework for instantiating high-performance Basic Linear Algebra Subprograms (BLAS), such as, dense linear algebra libraries. AMD-BLIS is part of AOCL and can be downloaded from AMD Developer Central (https://developer.amd.com/amd-aocl/).

Note: ZenDNN depends only on AMD-BLIS and has no dependency on any other AOCL library.

General Convention

The following points must be considered while installing AOCC and AMD-BLIS:

  • Change to the preferred directory where ZenDNN will be downloaded.
  • This parent folder is referred to as folder <compdir> in the steps below.
  • It is good practice to keep AOCC 3.0 and AMD-BLIS 3.0.6 downloads in the same parent folder.
  • Assume that the parent folder for user setup follows this convention: /home/<user-id>/my_work.

AMD-BLIS Library Setup

Complete the following steps to setup the AOOC compiled BLIS library:

  1. Execute the command cd <compdir>
  2. Download aocl-linux-aocc-3.0-6.tar.gz.
  3. Execute the following commands:
    tar -xvf aocl-linux-aocc-3.0-6.tar.gz
    cd aocl-linux-aocc-3.0-6
    tar -xvf aocl-blis-linux-aocc-3.0-6.tar.gz
    cd amd-blis

This will set up the environment for BLIS AOCC path:

export ZENDNN_BLIS_PATH=$(pwd)

For example:

export ZENDNN_BLIS_PATH=/home/<user-id>/my_work/aocl-linux-aocc-3.0-6/amd-blis

Complete the following steps to setup the GCC compiled BLIS library:

  1. Execute the command cd <compdir>.
  2. Download aocl-linux-gcc-3.0-6.tar.gz.
  3. Execute the following commands:
    tar -xvf aocl-linux-gcc-3.0-6.tar.gz
    cd aocl-linux-gcc-3.0-6
    tar -xvf aocl-blis-linux-gcc-3.0-6.tar.gz
    cd amd-blis

This will set up the environment for BLIS GCC path:

export ZENDNN_BLIS_PATH=$(pwd)

For example:

export ZENDNN_BLIS_PATH=/home/<user-id>/my_work/aocl-linux-gcc-3.0-6/amd-blis

AOCC Installation

Complete the following steps to install AOCC:

  1. Execute the command cd <compdir>.
  2. Download aocc-compiler-3.0.0.tar from the AMD Developer Central (https://developer.amd.com/amd-aocc/).
  3. Execute the command
    tar -xvf aocc-compiler-3.0.0.tar
  4. Execute the command
    cd aocc-compiler-3.0.0

This will install the compiler and display the AOCC set up instructions.

  1. Execute the command
    bash install.sh

This will set up the environment for the AOCC path:

 export ZENDNN_AOCC_COMP_PATH=$(pwd)

For example:

export ZENDNN_AOCC_COMP_PATH=/home/<user-id>/my_work/aocc-compiler-3.0.0

The bashrc file can be edited to setup ZENDNN_AOCC_COMP_PATH environment path. For example, in the case of AOCC compiled AMD-BLIS:

export ZENDNN_AOCC_COMP_PATH=/home/<user-id>/my_work/aocc-compiler-3.0.0
export ZENDNN_BLIS_PATH=/home/<user-id>/my_work/aocl-linux-aocc-3.0-6/amd-blis

For example, in the case of GCC compiled AMD-BLIS:

export ZENDNN_BLIS_PATH=/home/<user-id>/my_work/aocl-linux-gcc-3.0-6/amd-blis

Runtime Dependencies

ZenDNN has the following runtime dependencies:

  • GNU C library (glibc.so)
  • GNU Standard C++ library (libstdc++.so)
  • Dynamic linking library (libdl.so)
  • POSIX Thread library (libpthread.so)
  • C Math Library (libm.so)
  • OpenMP (libomp.so)
  • Python v3.6-v3.9 for TensorFlow v2.7
  • Python v3.6-v3.9 for PyTorch v1.9.0
  • Python v3.8 for ONNXRT v1.8.0

Since ZenDNN is configured to use OpenMP, a C++ compiler with OpenMP 2.0 or later is required for runtime execution.

Build from Source

Clone ZenDNN git:

git clone https://github.com/amd/ZenDNN.git
cd ZenDNN

AOCC compiler

ZENDNN_AOCC_COMP_PATH and ZENDNN_BLIS_PATH should be defined. example:

export ZENDNN_AOCC_COMP_PATH=/home/<user-id>/my_work/aocc-compiler-3.0.0
export ZENDNN_BLIS_PATH=/home/<user-id>/my_work/aocl-linux-aocc-3.0-6/amd-blis
make clean
source scripts/zendnn_aocc_build.sh

When new terminal is opened, user need to set up environment variables:

source scripts/zendnn_aocc_env_setup.sh

GCC compiler

ZENDNN_BLIS_PATH should be defined. example:

export ZENDNN_BLIS_PATH=/home/<user-id>/my_work/aocl-linux-gcc-3.0-6/amd-blis
make clean
source scripts/zendnn_gcc_build.sh

When new terminal is opened, user need to set up environment variables:

source scripts/zendnn_gcc_env_setup.sh

Please note above scripts must be sourced only from ZenDNN Folder.

Validate the build

After the library is built on Linux host, user can run unit tests using:

source scripts/runApiTest.sh

Corresponding tests are located in the tests/api_tests directory. These unit tests don't produce any information/logs in the terminal. Library logs can be enabled with:

ZENDNN_LOG_OPTS=ALL:2 source scripts/runApiTest.sh

Logs

Logging is disabled in the ZenDNN library by default. It can be enabled using the environment variable ZENDNN_LOG_OPTS before running any tests. Logging behavior can be specified by setting the environment variable ZENDNN_LOG_OPTS to a comma-delimited list of ACTOR:DBGLVL pairs.

The different ACTORS are as follows:

ACTORS Usage
ALGO Logs all algorithms executed
CORE Logs all the core ZenDNN library operations
API Logs all the ZenDNN API calls
TEST Logs used in API tests, functionality tests and regression tests
PROF Logs the performance of operations in millisecond
FWK Logs all the framework (TensorFlow, ONNXRT, and PyTorch) specific calls

For example:

  • To turn on info logging, use ZENDNN_LOG_OPTS=ALL:2
  • To turn off all logging, use ZENDNN_LOG_OPTS=ALL:-1
  • To only log errors, use ZENDNN_LOG_OPTS=ALL:0
  • To only log info for ALGO, use ZENDNN_LOG_OPTS=ALL:-1,ALGO:2
  • To only log info for CORE, use ZENDNN_LOG_OPTS=ALL:-1,CORE:2
  • To only log info for API, use ZENDNN_LOG_OPTS=ALL:-1,API:2
  • To only log info for PROF (profile), use ZENDNN_LOG_OPTS=ALL:-1,PROF:2
  • To only log info for FWK, use ZENDNN_LOG_OPTS=ALL:-1,FWK:2

The Different Debug Levels (DBGLVL) are as follows:

enum LogLevel {
	LOG_LEVEL_DISABLED = -1,
	LOG_LEVEL_ERROR    =  0,
	LOG_LEVEL_WARNING  =  1,
	LOG_LEVEL_INFO     =  2,
};

License

ZenDNN is licensed under Apache License Version 2.0. Refer to the "LICENSE" file for the full license text and copyright notice.

This distribution includes third party software governed by separate license terms.

3-clause BSD license:

Apache License Version 2.0:

Boost Software License, Version 1.0:

BSD 2-Clause license:

This third party software, even if included with the distribution of the Advanced Micro Devices software, may be governed by separate license terms, including without limitation, third party license terms, and open source software license terms. These separate license terms govern your use of the third party programs as set forth in the THIRD-PARTY-PROGRAMS file.

Technical Support

Please email zendnnsupport@amd.com for questions, issues, and feedback on ZenDNN.

Please submit your questions, feature requests, and bug reports on the GitHub issues page.

Apache License * Copyright (c) 2018 Advanced Micro Devices, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ============================================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS ============================================================================ Copyright 2016-2020 Intel Corporation Copyright 2018 YANDEX LLC Copyright 2020 Arm Limited and affiliates Copyright 2019-2020 FUJITSU LIMITED Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. This distribution includes third party software ("third party programs"). This third party software, even if included with the distribution of the Advanced Micro Devices software, may be governed by separate license terms, including without limitation, third party license terms, other Advanced Micro Devices software license terms, and open source software license terms. These separate license terms govern your use of the third party programs as set forth in the "THIRD-PARTY-PROGRAMS" file.

简介

AMD显卡的ZenDNN 展开 收起
C++ 等 4 种语言
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/anjiang2020_admin/ZenDNN.git
git@gitee.com:anjiang2020_admin/ZenDNN.git
anjiang2020_admin
ZenDNN
ZenDNN
main

搜索帮助

344bd9b3 5694891 D2dac590 5694891