《Python大规模机器学习》—1.1.3使用Python进行向上扩展

举报
华章计算机 发表于 2019/06/12 16:43:00 2019/06/12
【摘要】 本节书摘来自华章计算机《Python大规模机器学习》一书中的第1章,第1.1.3节,作者是[荷]巴斯蒂安·贾丁(Bastiaan Sjardin)[意]卢卡·马萨罗(Luca Massaron)[意]阿尔贝托·博斯凯蒂(Alberto Boschetti)王贵财刘春明译。

1.1.3    使用Python进行向上扩展

Python是一种解释性语言,就是说它在运行时将脚本读入内存,并执行它,从而访问必要的资源(文件、内存中的对象等)。除解释性外,使用Python进行数据分析和机器学习时需要考虑的另一个重要方面是Python为单线程。单线程意味着所有Python程序从脚本开始到结束都是按顺序执行的,Python不能利用计算机中多线程和处理器提供的额外处理能力(现在大多数计算机都是多核的)。

考虑到这种情况,可通过不同策略实现对Python的使用进行扩展:

  •  编译Python脚本以实现更高的运行速度。例如,尽管使用PyPy(一种即时编译器,可从http://pypy.org/下载)很容易,但实际上本书中并没有这么做,因为需要从头开始学习使用Python编写算法。

  •  将Python作为打包语言,从而将Python所执行的操作与第三方库和程序(部分支持多核处理)组合在一起。本书中会有很多这样的范例,你可以调用诸如支持向量机库(LIBSVM)等专业库或诸如Vowpal Wabbit(VW)、XGBoost或H2O等程序来实现机器学习。

  •  有效使用矢量化技术,即用于矩阵计算的专用库。这可以通过使用NumPy或pandas来实现,它们都支持GPU计算。GPU犹如多核CPU,每个CPU具有内存和并行处理计算的能力(能计算出有多个微核)。神经网络中,基于GPU的矢量化技术能极大加快计算速度。然而,GPU自身也有局限性;首先,将数据传递到其内存中并将结果返回到CPU时需要执行某些I/O操作,而这需要通过特殊的API进行并行编程,例如,用于由NVIDIA制造的GPU的CUDA(必须安装相应的驱动程序和应用程序)。

  •  将大问题分解为块并在内存中逐个解决每个块(分而治之算法),这需要对内存或磁盘的数据进行分区或子采样,并管理机器学习问题的近似解决方案,这样会非常有效。重要的是要注意,分区和子采样都针对示例和功能(以及两者兼有)进行操作。如果原始数据保存在磁盘中,I/O约束将成为相关性能的决定因素。

  •  根据将要使用的学习算法,有效利用多处理和多线程。某些算法本身就能够将其操作拆分成并行操作。在这种情况下,唯一的约束是CPU和内存(因为你要为将要使用的每个并行工作程序复制数据)。有些算法能在相同内存块上利用多线程,并同时管理更多操作。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。