Tensorflow and Onednn in Partnership

Tensorflow and Onednn in Partnership

TensorFlow and oneDNN in Partnership Penporn Koanantakool Google oneAPI Developer Summit at ISC, June 22, 2021 Presenting the work of many people from Google and Intel What is TensorFlow? 2 200M+ downloads 52M+ tutorial and guide views 1M+ learners on open online courses Agenda ● Intel-optimized TensorFlow (TensorFlow-oneDNN) ○ What it does ○ Where it is used ○ Recent optimizations: bfloat16 and int8vectorizations ○ Arm aarch64 support ● Vanilla TensorFlow ○ oneDNN experimental flag in default TF packages ● Pluggable Device 4 Intel-optimized TensorFlow (TensorFlow-oneDNN) --config=mkl 5 >3 years of collaboration Some highlights v1.4 v1.14 TensorFlow-MKL int8 (AVX512_VNNI) (TensorFlow-oneDNN) Cascade Lake 2018 2019 2020 2021 v2.2 bfloat16 (AVX512_BF16) Cooper Lake 6 TensorFlow-oneDNN ● Replaces some of the most compute-intensive vanilla TF ops with custom oneDNN ops. ● Has optimizations such as op fusions and primitive caching. ● x86 and Arm backends. Input Filter Input Filter layout layout Input Filter _MklConv2D Conv2D TF-oneDNN Layout conversion Eigen::TensorContraction + oneDNN forward Vanilla TF convolution primitive 7 Users ● Google Cloud Deep Learning VMs, containers, notebooks, etc. ○ Also on AWS and Azure. ● Supercomputers: ○ Cori / Perlmutter @NERSC, ○ Fugaku @RIKEN (Arm backend), etc. ● Google Health’s DeepVariant ○ Open-source tool for analyzing DNA sequence. ● Tencent’s 3D digital face reconstruction ○ For games, education, e-commerce, etc. ● Laika’s stop motion animation 8 int8 vectorization ● Utilizes AVX512_VNNI, first available in Cascade Lake. ○ Up to 4⨉ speedups over fp32. ● Quantize models using Intel® Low Precision Optimization Tool (LPOT) Top-1 Accuracy Model Throughput Speedup FP32 (Skylake) INT8 (Cascade Lake) ResNet-50 74.30 73.75 3.9⨉ ResNet-101 76.40 75.66 4.0⨉ InceptionV3 76.75 76.51 3.1⨉ Accelerating TensorFlow Inference with Intel® Deep Learning Boost on 2nd Gen Intel® Xeon® Scalable Processors 9 bfloat16 vectorization ● Utilizes AVX512_BF16, first available in Cooper Lake. ○ ~2⨉ speedups over fp32 for both mixed-precision training and inference. ● Can be used through Keras mixed-precision API. Speedups over fp32 Accelerating AI performance on 3rd Gen Intel® Xeon® Scalable processors with TensorFlow and Bfloat16 10 Vanilla TensorFlow 11 Another way to call oneDNN oneDNN uses OpenMP, which cannot coordinate with TF’s thread pool. v1.4 TensorFlow-MKL v1.14 (TensorFlow-oneDNN) int8 (AVX512_VNNI) Cascade Lake 2018 2019 2020 2021 v2.2 v1.13 bfloat16 TensorFlow Vanilla TF calls oneDNN’s (AVX512_BF16) uses oneDNN single-threaded matmul Cooper Lake in two ways. 12 oneDNN in Vanilla TensorFlow As of TF 1.13 (early 2019) Input Filter Conv2D Eigen::TensorContraction ⨉ ⨉ ⨉ ⨉ Eigen single-threaded matmul 13 oneDNN in Vanilla TensorFlow As of TF 1.13 (early 2019) Input Filter 29% speedup Conv2D More optimized matmul, dynamic dispatch. Eigen::TensorContraction (TF is compiled with only AVX.) ⨉ ⨉ ⨉ ⨉ Eigen single-threaded matmul oneDNN 14 Fast-forwarding to now... oneDNN ops available in vanilla TF under a runtime flag v1.4 TensorFlow-MKL v1.14 v2.5 (TensorFlow-oneDNN) int8 (AVX512_VNNI) oneDNN ops in Vanilla TF Cascade Lake 2018 2019 2020 2021 v2.2 v1.13 bfloat16 Vanilla TF calls oneDNN’s (AVX512_BF16) single-threaded matmul Cooper Lake 15 How to Get oneDNN Ops in Vanilla TF ● oneDNN v1.4 (April 2020) can take a custom thread pool. ○ oneDNN v2.x can also support TF native format (NHWC). ■ Convenient for Eager mode. ● Starting in TF 2.5 (May 2021), oneDNN ops are included in vanilla TF. ○ Disabled by default. ○ Enable by setting the environment variable TF_ENABLE_ONEDNN_OPTS=1. ● Throughput improvements up to ○ 3⨉ in inference ○ 2.4⨉ in training ● Supports bfloat16 mixed-precision computation. Leveraging Intel Deep Learning Optimizations in TensorFlow 16 TensorFlow Device Support 17 Pluggable Device ● Before TF 2.5, device integration requires changes to core TF. ○ Complex build dependencies and compiler toolchains. ○ Slow development time (needs PR reviews). ○ Combinatorial #build configurations to test for (multiplicative). ○ Easy to break. ● PluggableDevice ○ Scalable device integration. ○ Builds upon Modular TensorFlow. ○ Device support as plug-ins. (No device-specific code added to TF.) ○ Designed, developed, and driven by the TensorFlow community. ■ Largely by Intel. ■ Apple Metal plug-in available now. PluggableDevice: Device Plugins for TensorFlow 18 References: ● StreamExecutor C API RFC ● PluggableDevice RFC PluggableDevice: Features ● Graph optimization C API RFC ● Kernel C API Extension for Variable Ops RFC ● Pluggable Profiler RFC ● Tutorial under development More background: Device plug-in ● Modular TensorFlow RFC ● Kernel and op registration C API RFC Functions for - PluggableDevice creation TensorFlow - Stream management - Memory management PluggableDevice StreamExecutor C API - Timer factory Custom Ops Op Registry Kernel and Op Registration C API Custom Kernels Kernel Registry Custom Graph Custom Graph Optimization Pass Graph Optimization C API Optimizer Registry 19 PluggableDevice: Demo $ pip install tensorflow-apu-0.0.1-cp36-cp36m-linux_x86_64.whl APU: Awesome Processing Unit Successfully installed tensorflow-apu-0.0.1 $ python APU plug-in has one op: ReLU >>> import tensorflow as tf # TensorFlow registers PluggableDevices here >>> tf.config.list_physical_devices() [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:APU:0', device_type='APU')] >>> a = tf.random.normal(shape=[5], dtype=tf.float32) # Runs on CPU >>> b = tf.nn.relu(a) # Runs on APU because PluggableDevice has higher device priority. >>> with tf.device("/APU:0"): # Users can also use 'with tf.device' syntax ... c = tf.nn.relu(a) # Runs on APU >>> with tf.device("/CPU:0"): # Users can put ReLU on other devices like normal. ... d = tf.nn.relu(a) # Runs on CPU >>> @tf.function # Defining a tf.function ... def run(): ... e = tf.random.uniform(shape=[100], dtype=tf.float32) # Runs on CPU ... f = tf.nn.relu(e) # Runs on APU >>> run() # PluggableDevices also work with tf.function and graph mode. 20 PluggableDevice: Demo $ pip install tensorflow-apu-0.0.1-cp36-cp36m-linux_x86_64.whl APU: Awesome Processing Unit Successfully installed tensorflow-apu-0.0.1 $ python APU plug-in has one op: ReLU >>> import tensorflow as tf # TensorFlow registers PluggableDevices here >>> tf.config.list_physical_devices() [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:APU:0', device_type='APU')] >>> a = tf.random.normal(shape=[5], dtype=tf.float32) # Runs on CPU >>> b = tf.nn.relu(a) # Runs on APU because PluggableDevice has higher device priority. >>> with tf.device("/APU:0"): # Users can also use 'with tf.device' syntax ... c = tf.nn.relu(a) # Runs on APU >>> with tf.device("/CPU:0"): # Users can put ReLU on other devices like normal. ... d = tf.nn.relu(a) # Runs on CPU >>> @tf.function # Defining a tf.function ... def run(): ... e = tf.random.uniform(shape=[100], dtype=tf.float32) # Runs on CPU ... f = tf.nn.relu(e) # Runs on APU >>> run() # PluggableDevices also work with tf.function and graph mode. 21 PluggableDevice: Demo $ pip install tensorflow-apu-0.0.1-cp36-cp36m-linux_x86_64.whl APU: Awesome Processing Unit Successfully installed tensorflow-apu-0.0.1 $ python APU plug-in has one op: ReLU >>> import tensorflow as tf # TensorFlow registers PluggableDevices here >>> tf.config.list_physical_devices() [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:APU:0', device_type='APU')] # TensorFlow can see APU >>> a = tf.random.normal(shape=[5], dtype=tf.float32) # Runs on CPU >>> b = tf.nn.relu(a) # Runs on APU because PluggableDevice has higher device priority. >>> with tf.device("/APU:0"): # Users can also use 'with tf.device' syntax ... c = tf.nn.relu(a) # Runs on APU >>> with tf.device("/CPU:0"): # Users can put ReLU on other devices like normal. ... d = tf.nn.relu(a) # Runs on CPU >>> @tf.function # Defining a tf.function ... def run(): ... e = tf.random.uniform(shape=[100], dtype=tf.float32) # Runs on CPU ... f = tf.nn.relu(e) # Runs on APU >>> run() # PluggableDevices also work with tf.function and graph mode. 22 PluggableDevice: Demo $ pip install tensorflow-apu-0.0.1-cp36-cp36m-linux_x86_64.whl APU: Awesome Processing Unit Successfully installed tensorflow-apu-0.0.1 $ python APU plug-in has one op: ReLU >>> import tensorflow as tf # TensorFlow registers PluggableDevices here >>> tf.config.list_physical_devices() [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:APU:0', device_type='APU')] # TensorFlow can see APU >>> a = tf.random.normal(shape=[5], dtype=tf.float32) # Runs on CPU >>> b = tf.nn.relu(a) # Runs on APU because PluggableDevice has higher device priority. >>> with tf.device("/APU:0"): # Users can also use 'with tf.device' syntax ... c = tf.nn.relu(a) # Runs on APU >>> with tf.device("/CPU:0"): # Users can put ReLU on other devices like normal. ... d = tf.nn.relu(a) # Runs on CPU >>> @tf.function # Defining a tf.function ... def run(): ... e = tf.random.uniform(shape=[100], dtype=tf.float32) # Runs on CPU ... f = tf.nn.relu(e) # Runs on APU >>> run() # PluggableDevices also work with tf.function and graph mode. 23 PluggableDevice: Demo $ pip install tensorflow-apu-0.0.1-cp36-cp36m-linux_x86_64.whl APU: Awesome Processing Unit Successfully installed tensorflow-apu-0.0.1 $ python APU plug-in has one op: ReLU >>> import tensorflow

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    28 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us