近期计划写一写机器学习微信小程序的开发教程,但微信开发工具只提供了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有什么好处呢?
- 可以建立python虚拟环境。 比如针对python 2的历史遗留代码,建立一个虚拟环境,针对python 3 新代码,再建立一个虚拟环境,两套环境互相隔离,互不影响。不会因为在安装了一个python 2的包,而使得python 3代码无法执行。Python虚拟环境和虚拟机有所不同,它是一种轻量级的隔离机制,所以在空间和速度上几乎没有额外的开销。
- Anaconda是一揽子解决方案 python的用户可能知道,通过安装virtualenv,也可以建立python虚拟环境,但需要下载python,设置环境变量,安装pip,安装virtualenv,…诸多繁琐步骤,而且为了使用方便,可能还要安装wrap脚本。而anaconda作为python环境一揽子解决方案,安装包中包含了python发行包,集成包管理工具,只需要下载和安装一个软件包,即可解决。而且Anaconda支持Windows、Linux及Mac OS系统,在各操作系统下操作一致,减少操作系统迁移的成本。
- 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的支持,敬请关注。
参考
- https://docs.conda.io/projects/conda/en/latest/index.html
- Installing a Python Based Machine Learning Environment in Windows 10
- Anaconda介绍、安装及使用教程