Giter VIP home page Giter VIP logo

mkl-dnn's Introduction

Intel MKL-DNN repository migrated to https://github.com/intel/mkl-dnn. The old address will continue to be available and will redirect to the new repo. Please update your links.

Intel(R) Math Kernel Library for Deep Neural Networks (Intel(R) MKL-DNN)

v0.16 beta

Intel(R) Math Kernel Library for Deep Neural Networks (Intel(R) MKL-DNN) is an open source performance library for deep learning applications. The library accelerates deep learning applications and framework on Intel(R) architecture. Intel(R) MKL-DNN contains vectorized and threaded building blocks which you can use to implement deep neural networks (DNN) with C and C++ interfaces.

DNN functionality optimized for Intel architecture is also included in Intel(R) Math Kernel Library (Intel(R) MKL). API in this implementation is not compatible with Intel MKL-DNN and does not include certain new and experimental features.

This release contains performance critical functions that improve performance of of the following deep learning topologies and variations of these.

Application Example topology
Image recognition AlexNet, VGG, GoogleNet, ResNet, MobileNet
Image segmenation FCN, SegNet, MaskRCNN, U-Net
Volumetric segmentation 3D-Unet
Object detection SSD, Faster R-CNN, Yolo
Neural Machine Translation (experimental) GNMT
Speech Recognition (experimental) DeepSpeech
Adversarial Networks DCGAN, 3DGAN
Reinforcement Learning A3C

Intel MKL-DNN is used in the following software products:

License

Intel MKL-DNN is licensed under Apache License Version 2.0. This software includes the following third party components:

Documentation

  • Introduction explains programming model and basic concepts
  • Reference manual provides detailed functionality description
  • Examples demonstrate use of C and C++ APIs in simple topologies
  • Tutorial provides step by step installation instructions and an example walkthrough

Support

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

WARNING The following functionality has preview status and might change without prior notification in future releases:

  • Convolutions with s16 data type in source, weights or destination
  • Convolutions and auxiliary primitives for 3D spatial data
  • RNN, LSTM and GRU primitives
  • Intel Threading Building (Intel TBB*) support

How to Contribute

We welcome community contributions to Intel MKL-DNN. If you have an idea how to improve the library:

  • Share your proposal via GitHub issues.
  • Ensure you can build the product and run all the examples with your patch
  • In the case of a larger feature, create a test
  • Submit a pull request

We will review your contribution and, if any additional fixes or modifications are necessary, may provide feedback to guide you. When accepted, your pull request will be merged the repository.

System Requirements

Intel MKL-DNN supports Intel(R) 64 architecture and compatible architectures. The library is optimized for the systems based on

  • Intel Atom(R) processor with Intel(R) SSE4.1 support
  • 4th, 5th, 6th and 7th generation Intel(R) Core processor
  • Intel(R) Xeon(R) processor E5 v3 family (formerly Haswell)
  • Intel Xeon processor E5 v4 family (formerly Broadwell)
  • Intel Xeon Platinum processor family (formerly Skylake)
  • Intel(R) Xeon Phi(TM) processor x200 product family (formerly Knights Landing)
  • Intel Xeon Phi processor x205 product family (formerly Knights Mill)

and compatible processors.

The software dependencies are:

  • Cmake 2.8.0 or later
  • Doxygen 1.8.5 or later
  • C++ compiler with C++11 standard support

The software was validated on RedHat* Enterprise Linux 7 with

on Windows Server* 2012 R2 with

on macOS* 10.13 (High Sierra) with

The implementation uses OpenMP* 4.0 SIMD extensions. We recommend using Intel(R) Compiler for the best performance results.

Installation

Download Intel MKL-DNN source code or clone the repository to your system

	git clone https://github.com/intel/mkl-dnn.git

Ensure that all software dependencies are in place and have at least minimal supported version.

Intel MKL-DNN can take advantage of optimized matrix-matrix multiplication (GEMM) function from Intel MKL. The dynamic library with this functionality is included in the repository. If you choose to build Intel MKL-DNN with the binary dependency download Intel MKL small libraries using provided script

Linux/macOS
	cd scripts && ./prepare_mkl.sh && cd ..
Windows
	cd scripts && call prepare_mkl.bat && cd ..

or manually from GitHub release section and unpack it to the external directory in the repository root. Intel MKL-DNN can also be built with full Intel MKL, if the latter is installed on the system. You might need to set MKLROOT environment variable to the path where full Intel MKL is installed to help cmake locate the library.

You can choose to build Intel MKL-DNN without binary dependency. The resulting version will be fully functional, however performance of certain convolution shapes and sizes and inner product relying on SGEMM function may be suboptimal.

Note

Using Intel MKL small libraries currently work for Intel MKL-DNN built with OpenMP* only. Building with Intel TBB requires either full Intel MKL library or standalone build.

Intel MKL-DNN uses a CMake-based build system

	mkdir -p build && cd build && cmake $CMAKE_OPTIONS .. && make

Here $CMAKE_OPTIONS are options to control the build. Along with the standard cmake options such as CMAKE_INSTALL_PREFIX or CMAKE_BUILD_TYPE, user can also pass Intel MKL-DNN specific ones:

Option Possible Values (defaults in bold) Description
MKLDNN_LIBRARY_TYPE SHARED, STATIC Defines resulting library type
MKLDNN_THREADING OMP, TBB Defines threading type
WITH_EXAMPLE ON, OFF Controls building examples
WITH_TEST ON, OFF Controls building tests
VTUNEROOT path Enables integration with Intel(R) Vtune(tm) Amplifier

Please check cmake/options.cmake for more options and details.

Intel MKL-DNN includes unit tests implemented using the googletest framework. To validate your build, run:

	make test

Documentation is provided inline and can be generated in HTML format with Doxygen:

	make doc

Documentation will reside in build/reference/html folder.

Finally,

	make install

will place the header files, libraries and documentation in /usr/local. To change the installation path, use the option -DCMAKE_INSTALL_PREFIX=<prefix> when invoking CMake.

Linking your application

Intel MKL-DNN includes several header files providing C and C++ APIs for the functionality and one or several dynamic libraries depending on how Intel MKL-DNN was built. The minimal installation:

File Description
include/mkldnn.h C header
include/mkldnn.hpp C++ header
include/mkldnn_types.h auxiliary C header
lib/libmkldnn.so Intel MKL-DNN dynamic library
lib/libmkldnn.a Intel MKL-DNN static library (if built with MKLDNN_LIBRARY_TYPE=STATIC)

Intel MKL-DNN with OpenMP

If Intel MKL-DNN is built with Intel MKL small libraries the following extra libraries would be installed:

File Description
lib/libiomp5.so Intel OpenMP* runtime library
lib/libmklml_gnu.so Intel MKL small library for GNU* OpenMP runtime
lib/libmklml_intel.so Intel MKL small library for Intel(R) OpenMP runtime

Intel MKL-DNN uses OpenMP* for parallelism and requires an OpenMP runtime library to work. As different OpenMP runtimes may not be binary compatible it's important to ensure that only one OpenMP runtime is used throughout the application. Having more than one OpenMP runtime initialized may lead to undefined behavior resulting in incorrect results or crashes.

Intel MKL-DNN library built with binary dependency will link against Intel OpenMP runtime included with Intel MKL small libraries package. Intel OpenMP runtime is binary compatible with GNU OpenMP and CLANG OpenMP runtimes and is recommended for the best performance results. Here are example linklines for GNU C++ compiler and Intel C++ compiler.

	g++ -std=c++11 -I${MKLDNNROOT}/include -L${MKLDNNROOT}/lib simple_net.cpp -lmkldnn -lmklml_intel -liomp5
	icpc -std=c++11 -qopenmp -I${MKLDNNROOT}/include -L${MKLDNNROOT}/lib simple_net.cpp -lmkldnn -lmklml_intel

Using GNU compiler with -fopenmp and -liomp5 options will link the application with both Intel and GNU OpenMP runtime libraries. This will lead to undefined behavior of the application.

Intel MKL-DNN library built standalone will use OpenMP runtime supplied by the compiler, so as long as both the library and the application use the same compiler correct OpenMP runtime will be used.

	g++ -std=c++11 -fopenmp -I${MKLDNNROOT}/include -L${MKLDNNROOT}/lib simple_net.cpp -lmkldnn
	icpc -std=c++11 -qopenmp -I${MKLDNNROOT}/include -L${MKLDNNROOT}/lib simple_net.cpp -lmkldnn

Intel MKL-DNN with Intel TBB

Intel MKL-DNN built with Intel TBB doesn't require special handling:

	g++ -std=c++11 -I${MKLDNNROOT}/include -L${MKLDNNROOT}/lib simple_net.cpp -lmkldnn -ltbb

Please note that Intel MKL-DNN has limited optimizations done for Intel TBB and has some functional limitations if built with Intel TBB.

Functional limitations:

  • Convolution with Winograd algorithm is not supported

Performance limitations (mostly less parallelism than in case of OpenMP):

  • Batch normalization
  • Convolution backward by weights
  • mkldnn_sgemm

WARNING

If the library is built with full Intel MKL user is expected to set MKL_THREADING_LAYER environment variable to either tbb or sequential to force Intel MKL to use Intel TBB for parallelization or to be sequential respectively. Without this setting Intel MKL (RT library) by default would try to use OpenMP for parallelization.


Legal Information

mkl-dnn's People

Contributors

igorsafo avatar ankalinin avatar nshustrov avatar vpirogov avatar msotoflo avatar kwiersch avatar mistler avatar akharito avatar skazakov1 avatar tprimak avatar shelleygoel avatar qyi1 avatar irinasok avatar espetrov avatar mgouicem avatar andersanton avatar densamoilov avatar nastafie avatar kolbusa avatar dmitry-gorokhov avatar vladimir-dudnik avatar kruus avatar tkarna avatar sknepper avatar caozhongz avatar jbobba avatar tensor-tang avatar uyongw avatar okdshin avatar pruthvi1990 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.