|
| 1 | +# `TensorFlow* Getting Started` Sample |
| 2 | + |
| 3 | +The `TensorFlow* Getting Started` sample demonstrates how to train a TensorFlow* model and run inference on Intel® hardware. |
| 4 | +| Property | Description |
| 5 | +|:--- |:--- |
| 6 | +| Category | Get Start Sample |
| 7 | +| What you will learn | How to start using TensorFlow* on Intel® hardware. |
| 8 | +| Time to complete | 10 minutes |
| 9 | + |
| 10 | +## Purpose |
| 11 | + |
| 12 | +TensorFlow* is a widely-used machine learning framework in the deep learning arena, demanding efficient computational resource utilization. To take full advantage of Intel® architecture and to extract maximum performance, the TensorFlow* framework has been optimized using Intel® oneDNN primitives. This sample demonstrates how to train an example neural network and shows how Intel-optimized TensorFlow* enables Intel® oneDNN calls by default. Intel-optimized TensorFlow* is available as part of the Intel® AI Tools. |
| 13 | + |
| 14 | +This sample code shows how to get started with TensorFlow*. It implements an example neural network with one convolution layer and one ReLU layer. You can build and train a TensorFlow* neural network using a simple Python code. Also, by controlling the build-in environment variable, this sample attempts to demonstrate explicitly how Intel® oneDNN Primitives are called and shows their performance during the neural network training. |
| 15 | + |
| 16 | +## Prerequisites |
| 17 | + |
| 18 | +| Optimized for | Description |
| 19 | +|:--- |:--- |
| 20 | +| OS | Ubuntu* 22.0.4 and newer |
| 21 | +| Hardware | Intel® Xeon® Scalable processor family |
| 22 | +| Software | TensorFlow |
| 23 | + |
| 24 | +> **Note**: AI and Analytics samples are validated on AI Tools Offline Installer. For the full list of validated platforms refer to [Platform Validation](https://github.com/oneapi-src/oneAPI-samples/tree/master?tab=readme-ov-file#platform-validation). |
| 25 | +
|
| 26 | +## Key Implementation Details |
| 27 | + |
| 28 | +The sample includes one python file: TensorFlow_HelloWorld.py. it implements a simple neural network's training and inference |
| 29 | + - The training data is generated by `np.random`. |
| 30 | + - The neural network with one convolution layer and one ReLU layer is created by `tf.nn.conv2d` and `tf.nn.relu`. |
| 31 | + - The TF session is initialized by `tf.global_variables_initializer`. |
| 32 | + - The train is implemented via the below for-loop: |
| 33 | + ```python |
| 34 | + for epoch in range(0, EPOCHNUM): |
| 35 | + for step in range(0, BS_TRAIN): |
| 36 | + x_batch = x_data[step*N:(step+1)*N, :, :, :] |
| 37 | + y_batch = y_data[step*N:(step+1)*N, :, :, :] |
| 38 | + s.run(train, feed_dict={x: x_batch, y: y_batch}) |
| 39 | + ``` |
| 40 | +In order to show the harware information, you must export the environment variable `export ONEDNN_VERBOSE=1` to display the deep learning primitives trace during execution. |
| 41 | +>**Note**: For convenience, code line os.environ["ONEDNN_VERBOSE"] = "1" has been added in the body of the script as an alternative method to setting this variable. |
| 42 | + |
| 43 | +Runtime settings for `ONEDNN_VERBOSE`, `KMP_AFFINITY`, and `Inter/Intra-op` Threads are set within the script. You can read more about these settings in this dedicated document: *[Maximize TensorFlow* Performance on CPU: Considerations and Recommendations for Inference Workloads](https://software.intel.com/en-us/articles/maximize-tensorflow-performance-on-cpu-considerations-and-recommendations-for-inference)*. |
| 44 | + |
| 45 | +### Run the Sample on Intel® GPUs |
| 46 | +The sample code is CPU based, but you can run it using Intel® Extension for TensorFlow* with Intel® Data Center GPU Flex Series. If you are using the Intel GPU, refer to *[Intel GPU Software Installation Guide](https://intel.github.io/intel-extension-for-tensorflow/latest/docs/install/install_for_gpu.html)*. The sample should be able to run on GPU **without any code changes**. |
| 47 | + |
| 48 | +For details, refer to the *[Quick Example on Intel CPU and GPU](https://intel.github.io/intel-extension-for-tensorflow/latest/examples/quick_example.html)* topic of the *Intel® Extension for TensorFlow** documentation. |
| 49 | + |
| 50 | +## Environment Setup |
| 51 | + |
| 52 | +You will need to download and install the following toolkits, tools, and components to use the sample. |
| 53 | + |
| 54 | +**1. Get Intel® AI Tools** |
| 55 | + |
| 56 | +Required AI Tools: 'Intel® Extension for TensorFlow* - CPU' |
| 57 | +<br>If you have not already, select and install these Tools via [AI Tools Selector](https://www.intel.com/content/www/us/en/developer/tools/oneapi/ai-tools-selector.html). AI and Analytics samples are validated on AI Tools Offline Installer. It is recommended to select Offline Installer option in AI Tools Selector.<br> |
| 58 | +please see the [supported versions](https://www.intel.com/content/www/us/en/developer/tools/oneapi/ai-tools-selector.html). |
| 59 | + |
| 60 | +>**Note**: If Docker option is chosen in AI Tools Selector, refer to [Working with Preset Containers](https://github.com/intel/ai-containers/tree/main/preset) to learn how to run the docker and samples. |
| 61 | + |
| 62 | +**2. (Offline Installer) Activate the AI Tools bundle base environment** |
| 63 | + |
| 64 | +If the default path is used during the installation of AI Tools: |
| 65 | +``` |
| 66 | +source $HOME/intel/oneapi/intelpython/bin/activate |
| 67 | +``` |
| 68 | +If a non-default path is used: |
| 69 | +``` |
| 70 | +source <custom_path>/bin/activate |
| 71 | +``` |
| 72 | + |
| 73 | +**3. (Offline Installer) Activate relevant Conda environment** |
| 74 | + |
| 75 | +For the system with Intel CPU: |
| 76 | +``` |
| 77 | +conda activate tensorflow |
| 78 | +``` |
| 79 | +For the system with Intel GPU: |
| 80 | +``` |
| 81 | +conda activate tensorflow-gpu |
| 82 | +``` |
| 83 | +**4. Clone the GitHub repository** |
| 84 | +``` |
| 85 | +git clone https://github.com/oneapi-src/oneAPI-samples.git |
| 86 | +cd oneAPI-samples/AI-and-Analytics/Getting-Started-Samples/IntelTensorFlow_GettingStarted |
| 87 | +``` |
| 88 | +## Run the Sample |
| 89 | + |
| 90 | +>**Note**: Before running the sample, make sure Environment Setup is completed. |
| 91 | +Go to the section which corresponds to the installation method chosen in [AI Tools Selector](https://www.intel.com/content/www/us/en/developer/tools/oneapi/ai-tools-selector.html) to see relevant instructions: |
| 92 | +* [AI Tools Offline Installer (Validated)/Conda/PIP](#ai-tools-offline-installer-validatedcondapip) |
| 93 | +* [Docker](#docker) |
| 94 | +### AI Tools Offline Installer (Validated)/Conda/PIP |
| 95 | +``` |
| 96 | +python TensorFlow_HelloWorld.py |
| 97 | +``` |
| 98 | +### Docker |
| 99 | +AI Tools Docker images already have Get Started samples pre-installed. Refer to [Working with Preset Containers](https://github.com/intel/ai-containers/tree/main/preset) to learn how to run the docker and samples. |
| 100 | +## Example Output |
| 101 | +1. With the initial run, you should see results similar to the following: |
| 102 | + |
| 103 | + ``` |
| 104 | + 0 0.4147554 |
| 105 | + 1 0.3561021 |
| 106 | + 2 0.33979267 |
| 107 | + 3 0.33283564 |
| 108 | + 4 0.32920069 |
| 109 | + [CODE_SAMPLE_COMPLETED_SUCCESSFULLY] |
| 110 | + ``` |
| 111 | +2. Export `ONEDNN_VERBOSE` as 1 in the command line. The oneDNN run-time verbose trace should look similar to the following: |
| 112 | + ``` |
| 113 | + export ONEDNN_VERBOSE=1 |
| 114 | + Windows: set ONEDNN_VERBOSE=1 |
| 115 | + ``` |
| 116 | + >**Note**: The historical environment variables include `DNNL_VERBOSE` and `MKLDNN_VERBOSE`. |
| 117 | + |
| 118 | +3. Run the sample again. You should see verbose results similar to the following: |
| 119 | + ``` |
| 120 | + 2024-03-12 16:01:59.784340: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:117] Plugin optimizer for device_type CPU is enabled. |
| 121 | + onednn_verbose,info,oneDNN v3.2.0 (commit 8f2a00d86546e44501c61c38817138619febbb10) |
| 122 | + onednn_verbose,info,cpu,runtime:OpenMP,nthr:24 |
| 123 | + onednn_verbose,info,cpu,isa:Intel AVX2 with Intel DL Boost |
| 124 | + onednn_verbose,info,gpu,runtime:none |
| 125 | + onednn_verbose,info,prim_template:operation,engine,primitive,implementation,prop_kind,memory_descriptors,attributes,auxiliary,problem_desc,exec_time |
| 126 | + onednn_verbose,exec,cpu,reorder,jit:uni,undef,src_f32::blocked:cdba::f0 dst_f32:p:blocked:Acdb16a::f0,,,10x4x3x3,0.00195312 |
| 127 | + onednn_verbose,exec,cpu,convolution,brgconv:avx2,forward_training,src_f32::blocked:acdb::f0 wei_f32:ap:blocked:Acdb16a::f0 bia_f32::blocked:a::f0 |
| 128 | + dst_f32::blocked:acdb::f0,attr-scratchpad:user attr-post-ops:eltwise_relu ,alg:convolution_direct,mb4_ic4oc10_ih128oh128kh3sh1dh0ph1_iw128ow128kw3sw1dw0pw1,1.19702 |
| 129 | + onednn_verbose,exec,cpu,eltwise,jit:avx2,backward_data,data_f32::blocked:abcd::f0 diff_f32::blocked:abcd::f0,attr-scratchpad:user ,alg:eltwise_relu alpha:0 |
| 130 | + beta:0,4x128x128x10,0.112061 |
| 131 | + onednn_verbose,exec,cpu,convolution,jit:avx2,backward_weights,src_f32::blocked:acdb::f0 wei_f32:ap:blocked:ABcd8b8a::f0 bia_undef::undef::: |
| 132 | + dst_f32::blocked:acdb::f0,attr-scratchpad:user ,alg:convolution_direct,mb4_ic4oc10_ih128oh128kh3sh1dh0ph1_iw128ow128kw3sw1dw0pw1,0.358887 |
| 133 | + ... |
| 134 | + |
| 135 | + >**Note**: See the *[oneAPI Deep Neural Network Library Developer Guide and Reference](https://oneapi-src.github.io/oneDNN/dev_guide_verbose.html)* for more details on the verbose log. |
| 136 | + |
| 137 | +4. Troubleshooting |
| 138 | + |
| 139 | + If you receive an error message, troubleshoot the problem using the **Diagnostics Utility for Intel® oneAPI Toolkits**. The diagnostic utility provides configuration and system checks to help find missing dependencies, permissions errors, and other issues. See the *[Diagnostics Utility for Intel® oneAPI Toolkits User Guide](https://www.intel.com/content/www/us/en/develop/documentation/diagnostic-utility-user-guide/top.html)* for more information on using the utility. |
| 140 | +or ask support from https://github.com/intel/intel-extension-for-tensorflow |
| 141 | + |
| 142 | +## Related Samples |
| 143 | + |
| 144 | +* [Intel Extension For TensorFlow Getting Started Sample](https://github.com/oneapi-src/oneAPI-samples/blob/development/AI-and-Analytics/Getting-Started-Samples/Intel_Extension_For_TensorFlow_GettingStarted/README.md) |
| 145 | + |
| 146 | +## License |
| 147 | + |
| 148 | +Code samples are licensed under the MIT license. See |
| 149 | +[License.txt](https://github.com/oneapi-src/oneAPI-samples/blob/master/License.txt) |
| 150 | +for details. |
| 151 | + |
| 152 | +Third party program Licenses can be found here: |
| 153 | +[third-party-programs.txt](https://github.com/oneapi-src/oneAPI-samples/blob/master/third-party-programs.txt) |
| 154 | + |
| 155 | +*Other names and brands may be claimed as the property of others. [Trademarks](https://www.intel.com/content/www/us/en/legal/trademarks.html) |
0 commit comments