Tensorflow系列:如何安装Tensorflow CPU版(Tensorflow 2.1版本)?

本文详细记录了在Win10环境下,安装TensorFlow 2.x CPU版本的全过程,包括创建虚拟环境、更换pip源、安装及测试过程中的问题解决,适合初学者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

趁着2020年的春节长假,简单学习了一下梦寐以求的python。学完python皮毛,怎么能不尝试下tensorflow,毕竟人家这么火。由于只是尝试,机器性能也一般,咱就不上GPU版本了,只想着装个纯CPU版本的体验体验。但是遇到的问题也不少,在此给大家分享一下,讲述下我的心路历程。

首先声明一下本人操作系统是win10家庭中文版(系统买本自带的,懒得换了),安装的是截止目前最新的Tensorflow2.1版本(网上教程基本是老版本),Python版本也是目前python3.7的最新版本(没有尝试python3.8)

1. 准备篇

1.1 基本要求:

  1. 至少对python有基本的认知,主要是基本语法和pip工具;
  2. 了解windows的shell命令,我用的是powershell,挺好用的,跟linux的bash命令很相似,感觉比cmd好了无数倍;
  3. 了解python虚拟环境,知道怎么创建,我用的是virtualenv工具,简单实用。很多人也可能安装的Anaconda发行版本,那么conda命令也是支持虚拟环境创建的,但是我目前没怎么用,感觉还没到那个火候,毕竟numpy、pandas、matplotlib等常用的包就可以满足我了,不超过20个。
  4. 了解Tensorflow的发行版本,不知道的话自行问搜索引擎。当然,也可参考pypi上的发布历史:https://pypi.org/project/tensorflow/1.12.3/#history   其中,1.15版本是1.×的最后一个发行版本(最新更新是1.15.3 2020年的),自此以后Tensorflow进入2.×时代,自然又别有一番风味。

1.2 为啥要用虚拟环境?

我的理解是没虚拟环境的话,很容易“污染”系统原生python,比如我安个第三方包,自动安装了一大堆的依赖包,后来我不想要了,卸载这个第三方包,但是依赖包还在那,还得一个个卸载,鬼知道安装了多少个依赖包。为啥非要卸载?因为我有强迫症,不用的东西在site-packages里面躺着,我浑身不舒服。所以我要安装虚拟环境,这样我就可以为所欲为(至少学习阶段是这样),包可以随便安,随便试,捣鼓坏了,就把整个环境删了,重新建一个干干净净的,岂不妙哉!

另外,有虚部环境,我就可以尝试不同的tensorflow版本,有利于问题的排查,很有用的。


2. 系统需求

先说说硬件需求,按官方说法,你的CPU需要支持AVX指令集,因为从TensorFlow 1.6版本开始,不能跑在不支持AUX指令集的CPU上。不过不用太担心,只要你的笔记本不是老古董,一般没太大问题,这几年出的CPU都支持。实在不放心,就用CPU-Z工具查看一下。

再来看看官方说的软件需求:

  • Python 3.5–3.7
  • pip 19.0 or later (requires manylinux2010 support)
  • Windows 7 or later (64-bit) (Python 3 only)

看着挺多,其实基本都能满足,目前都是标配吧,没什么可说的。

但是,这里有一个坑,官方没有提及,我在这里先不说,在安装部分会讲到。

给个官方安装说明的网址:https://tensorflow.google.cn/install/pip?hl=zh-CN&lang=python3,感兴趣的可以看一下,琢磨琢磨。


3. 安装步骤

第一步:当然是先创建个虚拟环境了,这个才能大展宏图嘛,创建完记得切换到虚拟环境,不然你会后悔的。

第二步:换个pip的源,换成国内的镜像站点,不然那安装速度绝对是你不能忍的,我怕你把电脑砸了。不知道怎么换,看我自学自写文章。会的以及已经换了的请忽略。我比较喜欢清华镜像......

第三步:用pip命令安装。这里高潮来了,官方还有网上各种命令层出不穷,让人眼花缭乱。下面先列举几个常见的命令方式,声明一下几条命令都能安装成功,但是能不能用就不一定了。

pip install tensorflow  #最新的稳定发行版本,2.0×后默认是CPU和GPU版本在一起,1.×只表示CPU版本
pip install tensorflow-gpu  #1.×的GPU版本
pip install tensorflow==1.15  # 1.×的最后一个更新版本,2019年发布
  • 第一个指令:什么叫CPU和GPU版本在一起?我理解的意思就是,CPU和GPU一家亲,不搞什么分裂,一条安装命令搞定就可以了嘛,至于怎么选择,看你机器的显卡支不支持CUDA了。因此,对于显卡支持gpu版本,而又只想用cpu版本练手的小伙伴来说,就不要用第一条命令进行安装,要不然在导包的时候就会有一大堆错误,缺这个少那个,基本是由显卡驱动程序版本、CUDA版本、cuDDN版本等问题引起的。如果不想安装gpu版本,何必自找麻烦呢。
  • 第二个指令:安装1.×的GPU版本,我们不涉及,请忽略。
  • 第三个指令:按照对于1.×版本,tensorflow默认是CPU版本的逻辑,这个应该不会有啥问题了吧。确实,安装成功后能用,诚不欺我。虽然能运行成功,但是总是输出一些异常干什么,看着烦的很,再次强调我有强迫症。如果有的小伙伴不想试的话我贴个结果给大家看看。

       测试代码:

import tensorflow as tf

version = tf.__version__
gpu_ok = tf.test.is_gpu_available()
print("tf version:", version, "\nuse GPU", gpu_ok)

       运行结果。大致意思是,我的显卡支持GPU版本,所以提示我找不到一些库,如果想用gpu版本,请安装这些库,并且最后正确输出了Tensorflow的版本是1.15,无法使用gpu。虽然程序正常运行结束,但是明显基于计算机的硬件,官方还是强推了gpu版本,输出了一大堆的提示来安利你。可是,我明明只是想用cpu版本的,不想要推荐,这些输出我看着好烦啊。如果你不介意,当然也可以凑活着这么用。

2020-02-11 21:07:37.172620: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_100.dll'; dlerror: cudart64_100.dll not found
2020-02-11 21:07:37.172864: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2020-02-11 21:07:40.361931: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2020-02-11 21:07:40.413280: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2020-02-11 21:07:41.058786: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties: 
name: GeForce MX150 major: 6 minor: 1 memoryClockRate(GHz): 1.5315
pciBusID: 0000:01:00.0
2020-02-11 21:07:41.060130: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_100.dll'; dlerror: cudart64_100.dll not found
2020-02-11 21:07:41.061137: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cublas64_100.dll'; dlerror: cublas64_100.dll not found
2020-02-11 21:07:41.062137: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cufft64_100.dll'; dlerror: cufft64_100.dll not found
2020-02-11 21:07:41.063130: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'curand64_100.dll'; dlerror: curand64_100.dll not found
2020-02-11 21:07:41.064307: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusolver64_100.dll'; dlerror: cusolver64_100.dll not found
2020-02-11 21:07:41.065401: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusparse64_100.dll'; dlerror: cusparse64_100.dll not found
2020-02-11 21:07:41.066423: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudnn64_7.dll'; dlerror: cudnn64_7.dll not found
2020-02-11 21:07:41.066626: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1641] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices...
2020-02-11 21:07:41.178436: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1159] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-02-11 21:07:41.178643: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1165]      0 
2020-02-11 21:07:41.178754: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1178] 0:   N 
tf version: 1.15.0 
use GPU False

上面说了这么多(大家不要烦我啊),那到底怎么才能满足我们的基本需求(只是想静静的用一下cpu版本怎么这么难)呢?答案就是,利用下面的命令安装,强制安装CPU版本。这么好用的命令,官方竟然不告诉我们,简直忍无可忍(当然也可能是我头发长、见识短,大家莫怪)。

pip install tensorflow-cpu

基于上述命令,完美的安装了最新的tensorflow 2.1 cpu版本,开心的不行。

第四步:当然是要测试一下正不正常了。

先导一下包:import tensorflow as tf. 看到结果我崩溃了,满满的红啊,贴一下结果,竟然提示dll加载失败,找不到指定的模块,这是什么鬼,心中悲恸不已,但是问题还是要解决的啊。

Traceback (most recent call last):
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow_core\python\pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import * 
File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow_core\python\pywrap_tensorflow_internal.py", line 28, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow_core\python\pywrap_tensorflow_internal.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
  File "C:\Programs\Python\tensorflow210_cpu\lib\imp.py", line 242, in load_module
    return load_dynamic(name, filename, file)
  File "C:\Programs\Python\tensorflow210_cpu\lib\imp.py", line 342, in load_dynamic
    return _load(spec)
ImportError: DLL load failed: 找不到指定的模块。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow\__init__.py", line 101, in <module>
    from tensorflow_core import *
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow_core\__init__.py", line 40, in <module>
    from tensorflow.python.tools import module_util as _module_util
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow\__init__.py", line 50, in __getattr__
    module = self._load()
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow\__init__.py", line 44, in _load
    module = _importlib.import_module(self.__name__)
  File "C:\Programs\Python\tensorflow210_cpu\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow_core\python\__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow_core\python\pywrap_tensorflow.py", line 74, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow_core\python\pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow_core\python\pywrap_tensorflow_internal.py", line 28, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "C:\Programs\Python\tensorflow210_cpu\lib\site-packages\tensorflow_core\python\pywrap_tensorflow_internal.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
  File "C:\Programs\Python\tensorflow210_cpu\lib\imp.py", line 242, in load_module
    return load_dynamic(name, filename, file)
  File "C:\Programs\Python\tensorflow210_cpu\lib\imp.py", line 342, in load_dynamic
    return _load(spec)
ImportError: DLL load failed: 找不到指定的模块。

先搜索引擎搜一遍,众说纷纭,毫无作用。最后,看一个官方的编译和安装错误消息吧,找到了一个极其类似的,大家有兴趣可以观摩一下:Installation issue with Tensorflow-cpu, no module named '_pwyrap_tensorflow_internal'。总结一下,经过作者的仔细推敲,出现它这个问题(跟我的问题差不多)就是因为在system32系统目录下缺少了msvcp140.dll文件,安装一下 Microsoft Visual C++ 2015 Redistributable 64 bits就可以了。

回到我们的问题,我用everyting搜了下整个硬盘(这个软件确实给力,速度嗖嗖的),在system32下我有msvcp140.dll文件啊,为毛还能出现这种问题。忽然,我灵光一现,咦.......,是不是Tensorflow最新版本需要高版本的Microsoft Visual C++ 版本啊。

赶紧到控制中心程序那看一下,发现我最高版本竟然是2017,上官网一看都2019版本了,赶紧更新一下,重启电脑后竟然导包成功了,真是不容易啊。到现在,还感觉有些莫名其妙。

第五步:再次测试一下,把上面的测试代码再撸一遍,果然运行成功,正确输出了Tensorflow的版本以及GPU信息。但是等等,怎么还有个Warining提示,看一下原来是在新版本中,有些API在未来要被drop了,建议使用新的API。

WARNING:tensorflow:From C:/Users/zhang/PycharmProjects/timegeekbang/tensorflowtest.py:4: is_gpu_available (from tensorflow.python.framework.test_util) is deprecated and will be removed in a future version.
Instructions for updating:
Use `tf.config.list_physical_devices('GPU')` instead.
2020-02-11 21:41:13.222175: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorF

那就再按新的API重新写一下测试代码吧,如下所示。输出结果正确,也有任何提示,看着真是清爽啊,舒服。

import tensorflow as tf

version = tf.__version__
# pu_ok = tf.test.is_gpu_available()
gpu_ok = tf.config.list_physical_devices("GPU")
print("tf version:", version, "\nGPU number", gpu_ok)

# 输出结果
tf version: 2.1.0 
GPU number []

4. 后记

本人只是记录了一下自己的心路历程,如果能给大家带来些许启发,我也就甚感欣慰了。随着Tensorflow版本的不断更新,在安装甚至使用过程中,肯定还会有这样或那样的问题。要想解决问题,除了寻找前人的踪迹外,还需要不断的尝试、总结和思考,切不能照搬照做。说不定不久后,我写的这个会被人嗤之以鼻,但是我只想描述这么一种经历,并不想去阐述固定的东西,因为永远不变的是变化。

 

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值