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.6.3's basic infrastructure and APIs. ZenDNN optimizes several APIs and adds new APIs, which are currently integrated into TensorFlow, and PyTorch.
ZenDNN depends on:
AOCL-BLAS is a required dependency for ZenDNN, whereas the AMD Composable Kernel and FBGEMM are optional dependencies.
The scope of ZenDNN is to support AMD EPYC™ CPUs on the Linux® platform. ZenDNN v5.1 offers optimized primitives, such as Convolution, MatMul, Elementwise, and Pool (Max and Average), Gelu, LayerNorm 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.
Following are the highlights of this release:
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.com portal (https://www.amd.com/en/developer/zendnn.html).
Supported OS and CompilersThis release of ZenDNN supports the following Operating Systems (OS) and compilers:
Binaires will be supported on
Build from source will be supported on
Theoretically, for wheel files any Linux based OS with GLIBC version later than 2.28 could be supported.
For C++ interface binaries, any Linux based OS with GLIBC version later than 2.28 could be supported.
The following prerequisites must be met for this release of ZenDNN:
AOCL-BLAS AOCL-BLAS is a high-performant implementation of the Basic Linear Algebra Subprograms (BLAS). The BLAS was designed to provide the essential kernels of matrix and vector computation and are the most commonly used computationally intensive operations in dense numerical linear algebra. This can be downloaded from https://github.com/amd/blis/archive/refs/tags/AOCL-Weekly-250725.tar.gz
Note: ZenDNN depends only on AOCL-BLAS and has no dependency on any other AOCL library.
The following points must be considered while installing AOCL-BLAS:
<compdir>
in the steps below./home/<user-id>/my_work
.Complete the following steps to setup the GCC compiled AOCL-BLAS library:
cd <compdir>
tar -xvf AOCL-Weekly-250725.tar.gz cd blis-AOCL-Weekly-250725 make clean; make distclean; CC=gcc ./configure -a aocl_gemm --prefix=../amd-blis --enable-threading=openmp --enable-cblas amdzen; make -j install cd ../amd-blis/include mkdir LP64 cp blis/* LP64/ cd ../lib/ mkdir LP64 cp libblis-mt.* LP64/ cd ../ export ZENDNN_BLIS_PATH=$(pwd)
For example:
export ZENDNN_BLIS_PATH=/home/<user-id>/my_work/amd-blis
The bashrc file can be edited to setup ZENDNN_BLIS_PATH environment path. For example, in the case of GCC compiled AOCL-BLAS:
export ZENDNN_BLIS_PATH=/home/<user-id>/my_work/amd-blisComposable Kernel Library Installation
Composable Kernel aims to provide a programming model for writing performance critical kernels for machine learning workloads across multiple architectures including GPUs, CPUs, etc, through general purpose kernel languages, like HIP C++. Composable Kernel can be downloaded from the AMD ROCm Software Platform Repository (https://github.com/ROCmSoftwarePlatform/composable_kernel).
Composable Kernel Library SetupComposable Kernel (CK) for CPU is currently only on the cpu_avx2
branch of the Composable Kernel repository and is at the experimental stage of development.
CK is suitable for these compilers:
git clone https://github.com/ROCmSoftwarePlatform/composable_kernel.git
cd composable_kernel
git checkout origin/cpu_avx2 -b cpu_avx2
From the root directory of Composable Kernel (CK) build CK libraries:
# if use gcc
sh script/cmake-avx2-gcc.sh
cd build
make -j`nproc` example_cpu_conv2d_fwd example_cpu_conv2d_fwd_bias_relu_add
From the root directory of Composable Kernel (CK), this will set up the environment for including CK headers and linking to the CK libraries.
export ZENDNN_CK_PATH=$(pwd)
The Makefile
in this project contains a variable DEPEND_ON_CK
which is set to 0
by default. To enable CK use DEPEND_ON_CK=1
when building the ZenDNN library.
Either modify DEPEND_ON_CK in the Makefile or pass DEPEND_ON_CK as an argument to make by editing scripts/zendnn_build.sh gcc.
The LD_LIBRARY_PATH
variable needs to be updated in order to run code that depends on CK.
export LD_LIBRARY_PATH=${ZENDNN_CK_PATH}/build/lib:${LD_LIBRARY_PATH}
ZenDNN has the following runtime dependencies:
Since ZenDNN is configured to use OpenMP, a C++ compiler with OpenMP 2.0 or later is required for runtime execution.
Clone ZenDNN git:
git clone https://github.com/amd/ZenDNN.git cd ZenDNN
ZENDNN_BLIS_PATH should be defined. example:
export ZENDNN_BLIS_PATH=/home/<user-id>/my_work/amd-blis make clean source scripts/zendnn_build.sh gcc lpgemm_v5_0
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.
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
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 metadata for the op FWK Logs all the framework (TensorFlow, and PyTorch) specific callsFor example:
Enable Log Profiling
To enable the log profiling of zendnn_primitive_create and zendnn_primitive_execute, set
ZENDNN_PRIMITIVE_LOG_ENABLE=1 ZENDNN_LOG_OPTS=ALL:-1,PROF:3
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, LOG_LEVEL_VERBOSE0 = 3, LOG_LEVEL_VERBOSE1 = 4, LOG_LEVEL_VERBOSE2 = 5 };
Refer to the "LICENSE" file for the full license text and copyright notice.
This distribution includes third party software governed by separate license terms.
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.
Please email Zendnn.Maintainers@amd.com for questions, issues, and feedback on ZenDNN.
Please submit your questions, feature requests, and bug reports on the GitHub issues page.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4