TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速

转载链接:http://nooverfit.com/wp/tensorflow%E5%A6%82%E4%BD%95%E5%85%85%E5%88%86%E4%BD%BF%E7%94%A8%E6%89%80%E6%9C%89cpu%E6%A0%B8%E6%95%B0%EF%BC%8C%E6%8F%90%E9%AB%98tensorflow%E7%9A%84cpu%E4%BD%BF%E7%94%A8%E7%8E%87%EF%BC%8C%E4%BB%A5/

TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速

许多朋友使用服务器时,碰巧服务器没有安装GPU或者GPU都被占满了。可是,服务器有很多CPU都是空闲的,其实,把这些CPU都充分利用起来,也可以有不错的训练效果。

但是,如果你是用CPU版的TF,有时TensorFlow并不能把所有CPU核数使用到,这时有个小技巧David 9要告诉大家:

  1. with tf.Session(config=tf.ConfigProto(
  2. device_count={"CPU":12},
  3. inter_op_parallelism_threads=1,
  4. intra_op_parallelism_threads=1,
  5. gpu_options=gpu_options,
  6. )) as sess:

在Session定义时,ConfigProto中可以尝试指定下面三个参数:

  1. device_count, 告诉tf Session使用CPU数量上限,如果你的CPU数量较多,可以适当加大这个值
  2. inter_op_parallelism_threads和intra_op_parallelism_threads告诉session操作的线程并行程度,如果值越小,线程的复用就越少,越可能使用较多的CPU核数。如果值为0,TF会自动选择一个合适的值。

David 9亲自试验,训练似乎有1倍速度的提高。

另外,有的朋友的服务器上正好都是Intel的CPU,很可能需要把Intel的MKL包编译进TensorFlow中,以增加训练效率。这里David 9把MKL编译进TF的关键点也指出一下。

官方的指导是如下3 步:

  1. Run “./configure” from the TensorFlow source directory, and it will download latest Intel MKL for machine learning automatically in tensorflow/third_party/mkl/mklml if you select the options to use Intel MKL
  2. Execute the following commands to create a pip package that can be used to install the optimized TensorFlow build.
    • PATH can be changed to point to a specific version of GCC compiler:
      export PATH=/PATH/gcc/bin:$PATH
    • LD_LIBRARY_PATH can also be changed to point to new GLIBC :
      1. export LD_LIBRARY_PATH=/PATH/gcc/lib64:$LD_LIBRARY_PATH.
    • Build for best performance on Intel Xeon and Intel Xeon Phi processors:
      1. bazel build --config=mkl --copt="-DEIGEN_USE_VML" -c opt //tensorflow/tools/pip_package:
      2. build_pip_package

3. Install the optimized TensorFlow wheel

  1. bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/path_to_save_wheel
  2. pip install --upgrade --user ~/path_to_save_wheel /wheel_name.whl

与官网编译TF的大致流程类似,就是先./configure,再用bazel编译TensorFlow。

最后用编译好的bazel工具生成whl的包,用来安装pip TensorFlow。

唯一的不同要注意用–config=mkl的选项编译TensorFlow:

bazel build –config=mkl –copt=”-DEIGEN_USE_VML” -c opt //tensorflow/tools/pip_package: build_pip_package

这样,用pip安装完成TF后,mkl就集成在TF中了。

参考文献:

  1. https://software.intel.com/es-es/articles/tensorflow-optimizations-on-modern-intel-architecture
  2. https://richardstechnotes.wordpress.com/2016/08/09/encouraging-tensorflow-to-use-more-cores/
  3. https://www.tensorflow.org/install/install_sources

注:本文系转载,如有版权或者问题,解释权归原博主

TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速相关推荐

  1. linux java 查询cpu核数,linux java 查询cpu核数

    linux java 查询cpu核数 [2021-02-06 01:50:36]  简介: 在Linux中,可以使用"cat /proc/cpuinfo| grep "cpu co ...

  2. linux查看cpu核数命令,centos查看CPU以及核数命令

    1.cd - :返回上次所在的目录 2.查看系统版本 cat /etc/redhat-release 3.查看linux内核版本 1)cat /proc/version 2) uname -a 3) ...

  3. linux查看物理机cpu核数,linux 查看物理cpu核数

    SCC(超级计算集群)简介 SCC概述 超级计算集群(Super Computing Cluster,SCC)使用高速RDMA网络互联的CPU以及GPU等异构加速设备,面向高性能计算.人工智能/机器学 ...

  4. linux cpu核数和线程数,cpu个数、核数和线程的理解

    1.查看物理cpu个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 2.查看核心数量 grep 'core id' /proc/cpuinfo ...

  5. Linux-系统物理CPU个数、CPU核数

    首先要明确物理cpu个数.核数.逻辑cpu数的概念 1.物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id) 2.cpu核数:单块CPU上 ...

  6. 物理cpu数和cpu核数和逻辑cpu数和vcpu区别

    物理cpu数和cpu核数和逻辑cpu数和vcpu区别 1.物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id) 2.cpu核数:单块CPU ...

  7. cpu核数和逻辑个数的区别_区别: CPU 路数、CPU 核数、物理 CPU 个数、逻辑 CPU 个数...

    Overview CPU 路数(物理 CPU 个数) 机器的主板上实际插入插槽的 CPU 个数 CPU 核数 CPU 核数:单块 CPU 上面能处理数据的芯片组的数量,如双核.四核等 (cpu cor ...

  8. cpu核数和逻辑个数的区别_CPU逻辑核心数和物理核心数是什么意思?

    展开全部 1.物理cpu数:主板上实际插入的cpu数量,可以数不重e69da5e887aa3231313335323631343130323136353331333366303666复的 physic ...

  9. linux cpu核数查看

    1.首先要明确物理cpu个数.核数.逻辑cpu数的概念 1.物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id) 2.cpu核数:单块CP ...

最新文章

  1. 瓜分60万现金大奖,第二届云原生编程挑战赛等你来报名!
  2. CentOS7 安装LNMP(Linux+Nginx+MySQL+PHP)
  3. 人生第一次手术:0806
  4. ZOJ3370. Radio Waves(2-sat)
  5. asp.net截取指定长度的字符串内容
  6. 10853k1_领导学基础_21秋考试
  7. C# WPF 显示图片和视频显示 EmuguCv、AForge.Net测试
  8. 联想Y 系列 四面壳展示
  9. 【codevs1245】最小的N个和
  10. 大数据开发笔记(九):Flink基础
  11. 【数据分析】基于matlab GUI学生成绩查询系统【含Matlab源码 604期】
  12. java嗅探网页视频_网页视频嗅探器( API钩子 )
  13. 思科模拟器配置路由表详细教程
  14. Zookeeper ipv6的坑
  15. 快手私信名片如何制作?
  16. 中拓互联携手企信易为企业构建信息,传递信任
  17. 扫描版pdf重排 linux,【Kindle Pdf Viewer中文安装教程】支持扫描版PDF重排及其他主流文件格式...
  18. MATLAB利用仿射变换实现图像的缩放,旋转,剪切,平移操作
  19. 我的世界显示服务器头像,我的世界怎么让服务器升级换头像 | 手游网游页游攻略大全...
  20. 一些提取api key的正则表达式

热门文章

  1. 树莓派 linux0.12,12 个可替代树莓派的单板机
  2. kvm架构服务器_顺应云计算变革大势,腾讯云全新星星海自研服务器真正为云而生...
  3. 计算机发现概述教案,计算机网络概述教案
  4. golang runtime.systemstack 泄漏排查
  5. Design Pattern IDisposable Pattern C
  6. 数据结构 - 二叉排序树
  7. 专题 20 常用调试技术
  8. VSCODE常见问题(设置为4个空格)
  9. 教师节html源码,教师节_实用电脑小技巧:通俗解答html 自己动手建一个非常简单的网页_沪江英语...
  10. 机器视觉_Java机器学习,第2部分