本文记录如何在 macOS、Python 3.7上安装 TensorFlow,遇到的问题以及解决办法和参考网页链接。鉴于Python 3.7与TensorFlow 1.10.0存在一些兼容问题,如无特殊必要,建议使用Python 3.6安装TensorFlow。

一、环境准备

笔记本电脑:MacBook Pro (15-inch, 2017)
操作系统:macOS MoJave Version 10.14
Python:3.7
TensorFLow:1.10.0

二、安装方式

根据TensorFlow官方教程(https://www.tensorflow.org/install/install_mac?hl=zh-cn),目前可支持如下几种安装 TensorFlow 的方式:

  • Virtualenv
  • “原生”pip
  • Docker
  • 从源代码安装

现选择比较简单安装方式Virtualenv。

三、安装过程

通过发出以下命令安装 pip 和 Virtualenv:

$ sudo easy_install pip
$ pip install --upgrade virtualenv

通过发出以下某种格式的命令创建 Virtualenv 环境:

$ virtualenv --system-site-packages -p python3 targetDirectory # for Python 3.n

其中 targetDirectory 表示 Virtualenv 树的顶层目录。我们的指令假定 targetDirectory 为 ~/tensorflow,但您可以选择任何目录。

通过发出下列其中一条命令激活 Virtualenv 环境:

$ cd targetDirectory
$ source ./bin/activate # If using bash, sh, ksh, or zsh

执行上述 source 命令后,您的提示符应该会变成如下内容:

(targetDirectory)$

确保安装 pip 8.1 或更高版本:

(targetDirectory)$ easy_install -U pip

发出以下某个命令,将 TensorFlow 及其所需的所有软件包安装到活动 Virtualenv 环境中:

(targetDirectory)$ pip install --upgrade tensorflow

运行以下Python代码,无警告信息输出,说明TensorFlow安装成功

>>> import os
>>> os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
b'Hello, TensorFlow!'

四、问题和解决办法

4.1. 安装时问题

4.1.1 Could not find a version that satisfies the requirement tensorflow (from versions: ) No matching distribution found for tensorflow

(targetDirectory)$ pip3 install --upgrade tensorflow # for Python 3.n
Could not find a version that satisfies the requirement tensorflow (from versions: ) No matching distribution found for tensorflow

原因:

找不到对应Python 3.7合适的tensorflow版本。

参考:

python – TensorFlow not found using pip – Stack Overflow
https://stackoverflow.com/questions/38896424/tensorflow-not-found-using-pip

解决办法:

办法一:安装时指定具体版本的binaryURL。如:
$ pip3 install --upgrade https://download.tensorflow.google.cn/mac/cpu/tensorflow-1.10.0-py3-none-any.whl
Collecting tensorflow==1.10.0 from https://download.tensorflow.google.cn/mac/cpu/tensorflow-1.10.0-py3-none-any.whl

办法二:安装合适的Python 3.x(如Python 3.6)和对应的pip、Virtualenv。

4.2 运行时问题

4.2.1 def TFE_ContextSetAsyncForThread(arg1, async): SyntaxError: invalid syntax

>>> import tensorflow as tf

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "/Users/blogbin/tftest/lib/python3.7/site-packages/tensorflow/__init__.py", line 22, in <module>

    from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import

  File "/Users/blogbin/tftest/lib/python3.7/site-packages/tensorflow/python/__init__.py", line 49, in <module>

    from tensorflow.python import pywrap_tensorflow

  File "/Users/blogbin/tftest/lib/python3.7/site-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>

    from tensorflow.python.pywrap_tensorflow_internal import *

  File "/Users/blogbin/tftest/lib/python3.7/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 154

    def TFE_ContextSetAsyncForThread(arg1, async):

                                               ^

SyntaxError: invalid syntax

原因:

从Python 3.7开始将async, await作为保留字,与tensorflow定义的方法变量重名。

参考:

python – Can’t install Tensorflow Mac – Stack Overflow
https://stackoverflow.com/questions/51337939/cant-install-tensorflow-mac

解决办法:

方法一:文本编辑器(如vi)编辑错误提示中的pywrap_tensorflow_internal.py文件,将async替换为其它变量名(如async1)。共计有4处。

办法二:同上。安装合适的Python 3.x(如Python 3.6)和对应的pip、Virtualenv。

4.2.2 RuntimeWarning: compiletime version 3.6 of module ‘tensorflow.python.framework.fast_tensor_util’ does not match runtime version 3.7
return f(*args, **kwds)

>>> import tensorflow as tf
/Users/blogbin/tftest/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: compiletime version 3.6 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.7
return f(*args, **kwds)

原因:

tensorflow.python.framework.fast_tensor_util是Python 3.6版本编译的,不匹配当前运行环境Python 3.7版本。

解决办法:

方法一:忽略警告

在代码中加入如下代码,忽略警告:

import os 
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

方法二:同上。安装合适的Python 3.x(如Python 3.6)和对应的pip、Virtualenv。

4.2.3 Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA

>>> sess = tf.Session()
2018-09-27 14:06:58.946429: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA

https://blog.csdn.net/hq86937375/article/details/79696023

原因:

你的CPU支持AVX扩展,但是你安装的TensorFlow版本无法编译使用。
由于tensorflow默认分布是在没有CPU扩展的情况下构建的,例如SSE4.1,SSE4.2,AVX,AVX2,FMA等。默认版本(来自pip install tensorflow的版本)旨在与尽可能多的CPU兼容。另一个观点是,即使使用这些扩展名,CPU的速度也要比GPU慢很多,并且期望在GPU上执行中型和大型机器学习培训

参考:

警告:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA – CSDN博客 https://blog.csdn.net/hq86937375/article/details/79696023

解决办法:

方法一:如果安装的是GPU版本
如果你有一个GPU,你不应该关心AVX的支持,因为大多数昂贵的操作将被分派到一个GPU设备上(除非明确地设置)。在这种情况下,您可以简单地忽略此警告:

import os 
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

方法二:如果安装的是CPU版本(pip install tensorflow)

1.在代码中加入如下代码,忽略警告:

import os 
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

2.编译TensorFlow源码
如果您没有GPU并且希望尽可能多地利用CPU,那么如果您的CPU支持AVX,AVX2和FMA,则应该从针对CPU优化的源构建tensorflow。在这个问题中已经讨论过这个问题,也是这个GitHub问题。 Tensorflow使用称为bazel的ad-hoc构建系统,构建它并不是那么简单,但肯定是可行的。在此之后,不仅警告消失,tensorflow性能也应该改善。

五、参考

在 macOS 上安装 TensorFlow  |  TensorFlow
https://www.tensorflow.org/install/install_mac?hl=zh-cn

python – TensorFlow not found using pip – Stack Overflow
https://stackoverflow.com/questions/38896424/tensorflow-not-found-using-pip

python – Can’t install Tensorflow Mac – Stack Overflow
https://stackoverflow.com/questions/51337939/cant-install-tensorflow-mac

警告:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA – CSDN博客 https://blog.csdn.net/hq86937375/article/details/79696023

封面图片
https://zhuanlan.zhihu.com/p/28362186

打赏

Leave a Reply

Your email address will not be published. Required fields are marked *