Win10下配置机器学习python开发环境

2019-08-14 16:07:58 浏览数 (1)

近期计划写一写机器学习微信小程序的开发教程,但微信开发工具只提供了Windows和Mac OS版本,作为一名长期使用Linux系统的开发人员,虽然始终认为Linux系统才是对开发者最友好的,但微信团队作出这种选择,肯定经过调查。不管我怎样认为Linux系统如何之好,Windows系统毕竟是主流,大多数开发者使用的系统也是Windows系统,所以打算写一写Windows环境下的机器学习开发环境配置,内容包括Python环境、CUDA、IDE以及微信开发者工具等,这是其中的一篇。

由于历史原因,python长期存在两个版本,python 2和python 3,而且存在兼容问题。虽然经过开发者不断的努力,普遍转向Python 3,但Python 2仍然像打不死的小强,顽强的存在着。比如大多数Linux发行版本,python 2依然是默认版本。再加上python社区非常活跃,各种python库也在不停的向前发展,不同版本python库之间不兼容的情况一直存在。有时开发者也很尴尬,比如发布了一个项目到github,会有读者过来问,为什么代码在我这儿出错?

针对这一状况,建议python开发者使用Anaconda。Anaconda是可以便捷获取python包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。使用Anaconda有什么好处呢?

  1. 可以建立python虚拟环境。 比如针对python 2的历史遗留代码,建立一个虚拟环境,针对python 3 新代码,再建立一个虚拟环境,两套环境互相隔离,互不影响。不会因为在安装了一个python 2的包,而使得python 3代码无法执行。Python虚拟环境和虚拟机有所不同,它是一种轻量级的隔离机制,所以在空间和速度上几乎没有额外的开销。
  2. Anaconda是一揽子解决方案 python的用户可能知道,通过安装virtualenv,也可以建立python虚拟环境,但需要下载python,设置环境变量,安装pip,安装virtualenv,…诸多繁琐步骤,而且为了使用方便,可能还要安装wrap脚本。而anaconda作为python环境一揽子解决方案,安装包中包含了python发行包,集成包管理工具,只需要下载和安装一个软件包,即可解决。而且Anaconda支持Windows、Linux及Mac OS系统,在各操作系统下操作一致,减少操作系统迁移的成本。
  3. Anaconda的虚拟环境可复制 Anaconda的虚拟环境可以导出为一张列表,列表上包含环境中所有python包的名称及版本信息,这样他人可以导入该列表,复制出一个一模一样的python虚拟环境。列表为文本文件,便于分享,可以加入git管理,在开发过程中,哪些python库依赖发生了变化,可以追溯。

下面就说说在Windows 10下如何安装和配置Anaconda。

获取Anaconda

和Windows下其它应用软件的安装类似,首先去Anaconda的官网下载安装包,下载地址为:

https://www.anaconda.com/distribution/

建议选择Python 3.7的64位版本:

这里选择python 3.7,并不意味着python虚拟环境只能是python 3,而是默认的python虚拟环境为python 3。虽然python 2的生命力很顽强,但是新写的代码建议用python 3。

安装软件包。根据安装向导进行安装即可,选择安装类型这个步骤需要注意:

建议选择 Just Me 这个选项,如果选择All users,可能需要管理员权限。如果你是系统的管理员用户,这个倒问题不大。

创建python虚拟环境,安装tensorflow

Anaconda安装之后,我们可以看到Windows启动栏多了Anaconda3 (64-bit) 程序组,点击Anaconda Prompt(Anaconda3)

启动Anaconda命令行:

我们可以注意到命令行前面有一个 (base) 字样,这表明当前Anaconda的虚拟环境名为base,这也是Anaconda默认的虚拟环境。

接下来为tensorflow创建一个虚拟环境。因为TensorFlow有支持GPU的版本,如果要TensorFlow支持GPU,还需要额外安装一些软件和配置,先暂时放一放,到下篇文章再详细展开。我们把虚拟环境命名为tensorflow_gpu:

代码语言:javascript复制
conda create --name tensorflow_gpu

切换到我们创建的tensorflow_gpu虚拟环境:

代码语言:javascript复制
activate tensorflow_gpu

可以注意到,命令行前面的字样变成了 (tensorflow_gpu) ,表明已经切换到tensorflow_gpu这个虚拟环境:

安装tensorflow-gpu包:

代码语言:javascript复制
conda install -c anaconda tensorflow-gpu

当然你也可以采用pip的方式进行安装,这个看个人喜好。

可以使用如下的代码进行测试:

代码语言:javascript复制
import tensorflow as tf

print(tf.__version__)
tf.test.is_gpu_available()

结果如下:

代码语言:javascript复制
1.13.1

2019-08-09 15:45:13.852793: I tensorflow/core/platform/cpu_feature_guard.cc:141]
 Your CPU supports instructions that this TensorFlow binary was not compiled to
use: AVX AVX2
2019-08-09 15:45:15.069595: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1
433] Found device 0 with properties:
name: GeForce GTX 950M major: 5 minor: 0 memoryClockRate(GHz): 1.124
pciBusID: 0000:01:00.0
totalMemory: 2.00GiB freeMemory: 1.92GiB
2019-08-09 15:45:15.085195: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1
512] Adding visible gpu devices: 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:Anaconda3envstensorflow_gpulibsite-packagestensorflowpythonfra
meworktest_util.py", line 1242, in is_gpu_available
    for local_device in device_lib.list_local_devices():
  File "C:Anaconda3envstensorflow_gpulibsite-packagestensorflowpythoncli
entdevice_lib.py", line 41, in list_local_devices
    for s in pywrap_tensorflow.list_devices(session_config=session_config)
  File "C:Anaconda3envstensorflow_gpulibsite-packagestensorflowpythonpyw
rap_tensorflow_internal.py", line 1829, in list_devices
    return ListDevices(status)
  File "C:Anaconda3envstensorflow_gpulibsite-packagestensorflowpythonfra
meworkerrors_impl.py", line 528, in __exit__
    c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InternalError: cudaGetDevice() failed. S
tatus: CUDA driver version is insufficient for CUDA runtime version

可以看出,tensorflow包导入和使用没有问题,当前使用的TensorFlow 1.13.1版本,但没有GPU支持。如何让TensorFlow支持GPU加速,下一篇文章再详细说明。

如果要退出当前的虚拟环境,可以使用如下命令:

代码语言:javascript复制
conda deactivate
导出和导入虚拟环境

现在我们创建了一个名为tensorflow_gpu的虚拟环境,如果要分享给他人,可以将环境导出为一个文本文件:

代码语言:javascript复制
activate tensorflow_gpu

conda env export > c:/tensorflow_gpu.yml

上面的命令将环境导出到tensorflow_gpu.yml文件中,我们可以用文本编辑器打开看一看里面的内容:

代码语言:javascript复制
name: tensorflow_gpu
channels:
  - anaconda
  - defaults
dependencies:
  - _tflow_select=2.1.0=gpu
  - absl-py=0.7.1=py37_0
  - astor=0.7.1=py37_0
  - blas=1.0=mkl
  - ca-certificates=2019.5.15=0
  - certifi=2019.6.16=py37_0
  - cudatoolkit=10.0.130=0
  - cudnn=7.6.0=cuda10.0_0
  - gast=0.2.2=py37_0
  - grpcio=1.16.1=py37h351948d_1
  - h5py=2.9.0=py37h5e291fa_0
  - hdf5=1.10.4=h7ebc959_0
  - icc_rt=2019.0.0=h0cc432a_1
  - intel-openmp=2019.4=245
  - keras-applications=1.0.8=py_0
  - keras-preprocessing=1.1.0=py_1
  - libprotobuf=3.8.0=h7bd577a_0
  - markdown=3.1.1=py37_0
  - mkl=2019.4=245
  - mkl-service=2.0.2=py37he774522_0
  - mkl_fft=1.0.12=py37h14836fe_0
  - mkl_random=1.0.2=py37h343c172_0
  - mock=3.0.5=py37_0
  - numpy=1.16.4=py37h19fb1c0_0
  - numpy-base=1.16.4=py37hc3f5095_0
  - openssl=1.1.1=he774522_0
  - pip=19.1.1=py37_0
  - protobuf=3.8.0=py37h33f27b4_0
  - pyreadline=2.1=py37_1
  - python=3.7.3=h8c8aaf0_1
  - scipy=1.3.0=py37h29ff71c_0
  - setuptools=41.0.1=py37_0
  - six=1.12.0=py37_0
  - sqlite=3.29.0=he774522_0
  - tensorboard=1.13.1=py37h33f27b4_0
  - tensorflow=1.13.1=gpu_py37h83e5d6a_0
  - tensorflow-base=1.13.1=gpu_py37h871c8ca_0
  - tensorflow-estimator=1.13.0=py_0
  - tensorflow-gpu=1.13.1=h0d30ee6_0
  - termcolor=1.1.0=py37_1
  - vc=14.1=h21ff451_3
  - vs2015_runtime=15.5.2=3
  - werkzeug=0.15.4=py_0
  - wheel=0.33.4=py37_0
  - wincertstore=0.2=py37_0
  - zlib=1.2.11=h62dcd97_3
prefix: C:Anaconda3envstensorflow_gpu

内容比较容易理解,就是安装了哪些依赖包。除了导出之外,我们还可以手工创建,也可以修改导出的yml文件,比如修改虚拟环境的名称,这属于比较高级的操作,有兴趣可以看看Anaconda官方文档。

他人在得到这份yml文件后,可以复刻Anaconda虚拟环境:

代码语言:javascript复制
conda env create -f tensorflow_gpu.y

到此,Windows 10下的机器学习python开发环境就配置好了,接下来还需要更进一步,下一篇文章将讲讲Windows 10下GPU的支持,敬请关注。

参考
  1. https://docs.conda.io/projects/conda/en/latest/index.html
  2. Installing a Python Based Machine Learning Environment in Windows 10
  3. Anaconda介绍、安装及使用教程

0 人点赞