• 22 Jan 2020 » Dask DataFrame最佳实践
  • 原文:https://docs.dask.org/en/latest/dataframe-best-practices.html 入门Dask DataFrame很容易,但是要很好的使用它需要一些经验。这个页面包含最佳实践,以及常见问题的解决方案。 使用Pandas 对于适合于内存(RAM)的数据,Pandas通常比使用Dask DataFrame更快捷。尽管“大数据”工具很令人兴奋,但是,他们通常在适合常规数据工具的领域比常规数据工具表现差一些。 削减,然后使用Pandas 与上面类似,尽管你有大数据集,但是一定在计算过程中存在一个点,在这个点上数据会削减到更加易于管理的水平。你应该在这个点切换到Pandas。 df = dd.read_parquet('my-giant-file.parquet') df = df[df.name ==...
    Read more...

  • 22 Jan 2020 » Dask最佳实践
  • 原文:https://docs.dask.org/en/latest/best-practices.html 使用Dask API很简单,但是用好他们需要一些经验。本页包含最佳实践建议以及通用问题的解决方案。 这个文档局限在所有Dask API共享的最佳实践。读者应该首先了解具体API的最佳实践文档。 Arrays DataFrames Delayed 从小开始 并行化带来了额外的复杂性和开销。有时对大问题是必须的,通常并不是。在向你的工作负载中添加类似Dask这类并行化计算系统之前,应该尝试一下下面的替代方案: 使用更好的算法或数据结构:Numpy、Pandas、Scikit-learn可能针对你正在做的事情有更快的方法。有必要咨询一下专家或者读一下文档找到更好的内置算法 更好的文件格式:支持随机读写的高效的二进制格式通常可以帮助你简单高效的管理超过内存的数据集。参见下面的高效存储数据部分。 编译代码:用Numba或者Cython编译你的Python代码,可能是并行化没有必要。或者你可以使用这些库提供的多核并行化。 抽样:即使你有很多的数据,使用他们中的所有并不会有很大的优势。通过精巧的抽样,你可能可以获得相同的见解,从一个更好管理的子集中。 调优:如果你想要加速慢的代码,首先知道它为什么慢很重要。花一些时间来调优你的代码能帮助你发现什么使你变慢。这个信息可以帮助你更好的决策并行化是否能有帮助或者其他的方式更有效。...
    Read more...

  • 21 Jan 2020 » 使用s2i封装Python模型-Seldon Core
  • 原文联接 在这个指南中,将演示将python模型封装在docker镜像中,以便Seldon Core随时使用source-to-image app s2i来部署,所需的步骤。 如果对s2i不熟悉,先读一下s2i的基本说明,然后遵循如下步骤。 步骤1-安装s2i 下载安装s2i 使用s2i的前提条件是: Docker Git(如果从远程的git仓库building) 要检查一下所有东西是否就绪,可以运行 s2i usage seldonio/seldon-core-s2i-python3:0.4...
    Read more...

  • 21 Jan 2020 » 人工智能杂谈
  • 机器学习的由来,我觉得可以追溯到哲学家的原始三问:我是谁,我从哪里来,我要去哪里。这三个问题应该是来自哲学家的自我思辨。人类对于世界的探索,从未停止过,对外部世界的探索诞生了物理学,地理,天文等学科,对自身的探索诞生了心理,生理等学科。不过碍于科学技术的发展,人类关于自身的研究一直停留在思辨的阶段,在那个崇尚宗教和神秘力量的年代,也许很多人都想过创造人类来成为上帝,比如弗兰肯斯坦博士。 受益于战争与密码学,计算机技术得到了发展,人类的仿生学和自我观察又有了新的工具。人类能否创造出可以比肩人类自身的智能有一次被提上了日程。彼时的天才科学家图灵提出了最初的计算机原型-图灵机的概念,存储器,CPU,IO系统这些现代计算机上的元素在其上都可以找到对应的影子。同时也提出了人工智能的终极一问:图灵测验,如何判断计算机可以完全模拟人类。让人类和计算机共同回答人类提出的问题,如果人类无法判断哪台是计算机那个是人类,那么就证明计算机已经可以模拟人类。 随着人类对自身认识的发展,心理学和认知科学都有了长足的进步,科学家逐渐开始视图揭开人类智能的密码,了解越多,所能接触到未知领域也就越大。因此,科学家对计算机对人脑的模拟提出了弱化的概念,从最初的结构和功能模拟弱化为单纯的功能类比。虽然通过生理学和认知科学的发展了解到人类传递信息的基础单元神经元的状态与晶体管一直,只有两个状态,但是,人类多个神经元直接的交互方式却是并行进行,而计算机从创造之初就是串行进行(当然按照系统论的角度,串行的底层在更高层上可以实现并行的方式。)。这种差异,也导致直接在功能上想要类比计算机与人脑的计算量在当时是不可能的。另一方面,不追求在结构上进行类比,而仅仅期望计算机可以在某些方面可以实现与人类大脑相似的功能的弱人工智能取得了长足的进步,与之相对前者被称为强人工智能。此时比较令人兴奋的发现当属诺贝尔经济学奖获得者西蒙和纽维尔提出的通用问题求解器,他们用这个程序求解了汉诺塔问题。可以看到的是每一次机器学习的发展必然来自于认知科学的进步,西蒙和纽维尔的发现,得益于认知科学对人类心理过程的描述。汉诺塔问题是一个问题解决中的一个经典问题。在这个阶段,机器学习比较热门的问题是专家系统,即把人类的某些行业经验转化为可以描述的规则,让计算机来简化人类的工作。 反观最近大火的深度学习,其本质也是来源于认知科学一个突破性进展。所谓的深度学习是神经网络算法的进一步发展。在机器学习/数据挖掘中,存在着众多的算法,计算机科学和统计学是算法的主要来源,二者的区别在于计算机科学的算法更注重工程实现,而统计学算法则更注重网络基础。神经网络算法来自于对人类神经系统的模拟。人类的神经系统有感知器,传入神经,神经中枢,传出神经,效应器。人类的神经系统是以神经网络的形式对刺激进行反映,一个刺激会作用于多个神经元,多个神经元共同对刺激作出反映。神经网络算法基于同样的原理。不过受限于计算机的计算能力和可解释性,神经网络一直受到诟病。在这个时期,大放异彩的是支持向量机,随机森林这类浅学习算法。深度学习的灵感来自于认知科学的又一个重大发现。休伯尔和威塞尔,发现在视神经中不同的存在着负责不同功能视神经元,有些神经元负责识别最底层的,在其上的神经元负责从像素中抽象出边,在其上的神经元负责从边的组合中识别出物体的部分,最上层的神经元负责从物体的部分中抽象出物体,视觉神经分层处理的性质给了机器学习科学家启发,模拟人类的视觉神经处理机制,从原始的神经网络中抽取出更多的中间层,从而提高学习的效果。与此同时得益于摩尔定律,计算机的计算性能也得到了几何级数的提升。深度学习模拟(仿生)的源泉是视觉中的物体识别,因为,其在语音识别,图像识别和文本识别这类本身就存在层次化的认知任务中表现了超越其他浅层算法的表现。 综上可以看到,人工智能或机器学习本质上和初衷就是用机器来模拟人类,或者称为人类仿生学,而目前还处于非常初级的阶段。一起回顾一下人类的心理过程,注意、感觉、知觉、记忆、思维、想象、情感、意志。目前从功能类比角度,人工智能只是勉强走到了知觉阶段,目前在一些机器学习算法的前沿研究中,已经开始引入了短时记忆,注意这些机制来提高算法的效果,但目前也仅限于认知相关的研究,距离完全模拟人类还有很长的路要走,真正达到科幻电影中提到的机器人伦理学更是遥遥无期。也许强人工智能本身就是一个违命题,期望通过操作无机物来模拟有机物本身就不可行,我们自身也许是来自不同维度的上帝创造的产物,用低维去模拟高维的起点就存在偏差。
    Read more...

  • 17 Jul 2019 » 使用keras从0开始搭建迁移学习模型
  • 人工智能领域目前最火的莫过于深度学习了,但是,由于深度学习与传统的机器学习从原理和技术上有一些明显的不同,对于一些新人来说,往往有些不知如何入手。本文准备通过keras官方的fine tune代码样例,解释一下搭建迁移学习模型的流程。 深度学习的基本介绍 这里简单介绍一下深度学习相关知识,为了方便大家理解,我会与传统机器学习的一些知识进行类比。深度学习本质上是对人脑视觉生物工作原理上的类比。人脑在处理视觉信息时,最小的处理单元是视神经元,一个视神经元会有某些刺激作出反应,对于视觉来说,神经元会有不同的层次来进行组织,不同的层来处理不同的刺激(特征),上层神经元接受的信息来自下层神经元。例如,最底层的光感受细胞,感受原始的光学刺激,初级视觉皮层的神经元,从光感受细胞的刺激中经过处理获得边缘、方向等信息。再经过更高级的神经网络层,进一步抽取更抽象的特征,例如轮廓、形状等,最终由大脑作出物体类型的判断。 在上面这个过程描述中,引入了神经元、网络层(layer)、网络结构这些深度学习的重要概念。深度学习过程中,是要在一个网络结构上训练对应权重文件,权重文件就是层与层之间神经元传输信息的权重。对应到机器学习领域,网络结构可以理解为一种算法,权重文件是算法经过数据训练后得到的模型。 而我们经常听到的DNN、CNN和RNN这些属于更大的一类网络类型。DNN是深度神经网络,是较早的一类神经网络类型,比如线性感知器多层感知器,主要应用于解决传统的机器学习任务。而CNN是卷积神经网络,是根据人类视觉的流程而模拟出来的,在计算机视觉中有广泛的应用。著名的VGG,mobileNet,inception都是CNN的一种具体网络结构;而RNN则是循环神经网络,主要用于时间序列方面的建模,对于自然语言处理这类带有时间上下文的任务效果显著,著名的LSTM就是RNN的代表,LSTM也是来自于对人类记忆系统的模拟,全称叫做长短时记忆。同样从人类得到其他的还有注意门等等。这类网络类型和机器学习中的算法类别很像。比如机器学习算法类别有广义线性模型,其中有logistic回归,线性回归等。这些具体的算法就像inception,vgg这类网络结构。 其实从人工智能总体的发展流程来看,人工智能的终极目标是使机器产生与人类一样的智能,在具体实现方式上存在两个流派,一类是功能类比,一类是结构类比。前者是不关心具体的实现方式,只要机器可以与人类作出相同的事情,那么就认为机器在相关问题上具有了人类的智能。后者的隐含假设是结构相同的物体也会有相同的功能,如果人类设计的智能体的结构能够和人脑一样,那么也可以表现出与人脑一样的智能。两种流派各有优劣,功能类比面临的问题是无法找到通用智能,在某类任务上表现出的智能未必会适用于其他任务,今年打败各国围棋高手的alpha go也仅仅是适用于围棋类任务,而结构类比,多少有些不可知论的意味。当然随着研究的深入,二者也有逐渐融合的趋势。而深度学习恰恰是二者融合的一个证明,人工智能在用想拖到结构在处理类似的功能,实际效果目前来看也比较乐观。 迁移学习的基本介绍 了解了深度学习的基本知识,接下来看一下本篇文章的主题之一迁移学习。迁移学习本身也是认知/教育心理学的概念。其基本含义是当人类掌握了某项技能或知识后,再学习相近领域的时候时,由于有先前的经验,可以加速学习过程,即先前相近任务的知识经验迁移到新的任务上。如果从生理学角度去思考的话,神经元的放电模型来激活相关神经元,相近任务的神经元的联接拓扑结构更近,更容易得到激活。比如,本身会滑旱冰的人,学习滑冰会很快。 具体到深度学习的任务,在视觉任务中,前面提到的CNN卷积神经网络,在不同的图片分类任务上,用于识别具体像素的网络层,用于学习边缘、方向这些更高一级的网络层,以及用于学习更抽象特征,轮廓、形状的网络层,这些层的作用都是相近的,可以迁移到的不同图片分类任务上,所需要作出修改的通常只是模型最后几层。 下面以keras为例,来说明如何进行深度的学习的迁移学习。keras是比tensorflow更高级(更简单)的深度学习工具,它提供了更很多方便的工具,底层可以使用多种深度学习框架。它与tensorflow的关系,可以用pandas与numpy的关系来类比。 这里与keras官方迁移学习(fine tune)的例子代码作为示例。 from...
    Read more...

  • 07 Jul 2019 » 搭建私有pip源
  • 在项目交付过程中,经常遇到没有外网的环境,这时系统如果需要依赖pip源,那么通常需要搭建私有pip源。这里需要解决三个问题。 搭建私有pip服务器 下载/更新私有pip服务中的pip包 在pip客户端中设置本地pip源 搭建私有pip服务器 官方提供了多个pypi的实现,具体联接为:https://wiki.python.org/moin/PyPiImplementations chishop和djangopypi,基于django Plone Software Center pypiserver,最小化pypi服务器,易于安装和使用 Warehouse,下一代Python包仓库 官网也列出了使用apache搭建私有pip服务器的一些httpd.conf配置。 这里选用轻量级的pypiserver作为私有pip服务器。 安装pypiserver...
    Read more...

  • 27 Jan 2019 » 大规模机器学习-2018的DataOps/MLOps
  • 动机 数据科学可以被概括为两个工作流: 模型开发 模型服务 当数据科学团队较小的时候,不会面临太多的问题,所有事情都相对较好。 需要维护的模型较少 关于模型的知识在数据科学家的头脑中 每个人有跟踪流程的方法 但是,随着数据科学需求的增长,将面临新的问题 数据流的复杂度增加 大量的数据处理工作流 数据没有在标准化的流程中修改 管理复杂的流和定时任务变得不可管理 每个数据科学家有他们自己的工具集 一些喜欢tensorflow...
    Read more...

  • 19 Jan 2019 » 从0开始制造一个docker自定义镜像
  • docker容器技术现在火的一塌糊涂,最近的工作刚好和这部分内容有交集,就动手搞了一下,这里记录下Docker使用的相关流程。 安装Docker 由于我用的是mac,docker是基于linux系统,因此需要下载docker desktop,是一个mac下的app,下载后放入应用程序中就可以运行。 运行起来会后在顶部的状态栏中常驻一个小鲸鱼的小图标,点击这个图标可以进行重启,退出等操作。 这iterm2中输入docker version,能看到docker相关信息就说明docker安装成功了,可以开始你的docker之旅吧。 自定义镜像是由基础镜像和自定义环境构成。这个例子使用的基础镜像是centos,自定义环境使用 tensorflow的模型例子 https://github.com/tensorflow/models 启动一个基础镜像  docker run -it --name...
    Read more...

  • 06 Jan 2019 » Uber机器学习平台米开朗基罗简介
  • Uber在自家的博客上用两篇文章的篇幅介绍了他们自己的机器学习平台(Michelangelo)Meet Michelangelo: Uber’s Machine Learning Platform 和 Michelangelo PyML: Introducing Uber’s Platform for Rapid Python...
    Read more...

  • 30 Dec 2018 » rancher搭建一个k8s集群
  • rancher是一个管理多k8s集群的开源工具,通过rancher可以快速创建和管理多个k8s集群,包括aws,gke,阿里云等公有云厂商及自身的基础设施。 安装rancher rancher自身也是基于docker,因此首先要在集群上安装docker。在centos安装docker可以使用yum install。 yum install docker 按照rancher官网的指导安装rancher镜像。 sudo docker run -d --restart=unless-stopped -p 80:80...
    Read more...