首页 文章 精选 留言 我的

精选列表

搜索[零代码],共10000篇文章
优秀的个人博客,低调大师

从零开始初识机器学习 | 京东云技术团队

本篇文章中我们将对机器学习做全面的了解与介绍,其中第一章 初识机器学习分为上下两个小章节,对机器学习是什么、机器学习由来以及机器学习的理论等展开说明。目的是能让即便完全没接触过机器学习的人也能在短时间对机器学习有一个全面了解。后续将推出机器学习的进阶内容,包括经典基础篇(线性模型、决策树、集成学习、聚类等),实战进阶篇(特征工程、模型训练与验证、融合与部署等)。本篇为第一章 初识机器学习(上),我们从这里开始,开启一个全新的学习旅程。 1 机器学习描述 1.1 机器学习是什么? 机器学习(Machine Learning,ML)是使用统计(或数学)技术从观察到的数据中构建模型(或系统)的一个计算机科学领域。机器学习用计算机程序模拟人的学习能力,从样本数据中学习得到知识和规律,然后用于实际的推断和决策。 从广义上来说,机器学习能够赋予“机器”学习的能力,使其实现直接编程无法完成的工作。但从实践意义上来说,机器学习是利用数据训练出模型,并使用模型进行预测的一种方法。“训练”与“预测”是机器学习的两个过程,“模型”则是过程中间的输出结果,“训练”产生“模型”,“模型”指导 “预测”。接下来我们把机器学习的过程与人类对历史经验归纳演绎的过程做个比对。 机器学习中的“训练”与“预测”过程可以对应到人类的“归纳”和“演绎”过程。通过这样的对应,我们可以发现,机器学习的思想并不复杂,仅仅是对人类在生活中学习成长的一个模拟。由于机器学习不是基于编程形成的结果,因此它的处理过程不是因果的逻辑,而是通过归纳思想得出的相关性结论。 人类对历史经验归纳过程 人类在成长、生活过程中积累了很多的历史与经验。人类定期地对这些经验进行“归纳”,获得了生活的“规律”。当人类遇到未知的问题或者需要对未来进行“推测”的时候,人类将使用这些“规律”,对未知问题与未来进行“演绎”,从而指导自己的生活和工作。 1.2 机器学习的应用范围 机器学习应用广泛,在各方面都有其施展的空间,包括:数据分析与挖掘、模式识别、虚拟助手和交通预测等。从行业来看,在金融领域(检测信用卡欺诈、证券市场分析等)、互联网领域(自然语言处理、语音识别、搜索引擎等)、医学领域、自动化及机器人领域(无人驾驶、信号处理等)、游戏领域、刑侦领域等也都有所涉及。 1.2.1 数据分析与挖掘 “数据挖掘”和”数据分析”通常被相提并论,但无论是数据分析还是数据挖掘,都是在帮助人们收集与分析数据,使之成为信息并做出推测与判断。因此可以将这两项合称为数据分析与挖掘。数据分析与挖掘是机器学习技术和大数据存储技术结合的产物,利用机器学习手段分析海量数据,同时利用数据存储机制实现数据的高效读写。机器学习在数据分析与挖掘领域中拥有无可取代的地位,2012年Hadoop进军机器学习领域就是一个很好的例子。 1.2.2 模式识别 模式识别的应用领域广泛,包括计算机视觉、医学图像分析、光学文字识别、自然语言处理、语音识别、手写识别、生物特征识别、文件分类、搜索引擎等,而这些领域也正是机器学习大展身手的舞台,因此模式识别与机器学习的关系越来越密切。 1.2.3 虚拟助手 Siri,Alexa,Google Now都是虚拟助手。在交互过程中,虚拟助手会协助查找信息,搜索相关历史行为,或向其他资源(如电话应用程序)发送命令收集更多信息,以满足人们提出的需求。 1.2.4 交通预测 生活中我们经常使用GPS导航服务,机器学习能够帮助我们预测交通堵塞。当前高德地图,腾讯地图等都应用了机器学习技术,识别拥挤路段,规划最优路线。 2 机器学习发展史 2.1 浅层学习阶段 1957年,Rosenblatt发明了感知机(Perceptron),是神经网络的雏形,同时也是支持向量机的基础,在当时引起了不小的轰动。 1959年,IBM的写出了可以学习的西洋棋程序,并在 IBM Journal of Research and Development期刊上发表了一篇名为《Some Studies in Machine Learning Using the Game of Checkers》的论文中,定义并解释了一个新词——机器学习(Machine Learning,ML)。将机器学习非正式定义为“在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域”。 1960年,Widrow发明了Delta学习规则,即如今的最小二乘问题,立刻被应用到感知机中,并且得到了一个极好的线性分类器。 1970年,Seppo Linnainmaa首次完整地叙述了自动链式求导方法(Automatic Differentiation,AD),是著名的反向传播算法(Back Propagation,BP)的雏形,但在当时并没有引起重视。 1974年,Werbos首次提出把BP算法的思想应用到神经网络,也就是多层感知机(Multilayer Perception,MLP),并在1982年实现,就是现在通用的BP算法,促成了第二次神经网络大发展。 1985-1986年,Rumelhart,Hinton等许多神经网络学者成功实现了实用的BP算法来训练神经网络,并在很长一段时间内BP都作为神经网络训练的专用算法。 1986年,J.R.Quinlan提出了另一个同样著名的ML算法—决策树算法(Iterative Dichotomiser 3,ID3),决策树作为一个预测模型,代表的是对象属性与对象值之间的一种映射关系,而且紧随其后涌现出了很多类似或者改进算法,如ID4,回归树,CART等。 1995年,Yan LeCun提出了卷积神经网络(Convolution Neural Network,CNN),受生物视觉模型的启发,通常有至少两个非线性可训练的卷积层,两个非线性的固定卷积层,模拟视觉皮层中的V1,V2,Simple cell和Complex cell,在手写字识别等小规模问题上,取得了当时世界最好结果,但是在大规模问题上表现不佳。 1995年,Vapnik和Cortes提出了强大的支持向量机(Support Vector Machine,SVM),主要思想是用一个分类超平面将样本分开从而达到分类效果,具有很强的理论论证和实验结果。至此,ML分为NN和SVM两派。 1997年,Freund和Schapire提出了另一个坚实的ML模型AdaBoost,该算法最大的特点在于组合弱分类器形成强分类器,可以形象地表述为:“三个臭皮匠赛过诸葛亮”,分类效果比其它强分类器更好。 2001年,随着核方法的提出,SVM大占上风,它的主要思想就是通过将低维数据映射到高维,从而实现线性可分。至此,SVM在很多领域超过了NN模型。除此之外,SVM还发展了一系列针对NN模型的基础理论,包括凸优化、范化间隔理论和核方法。 2001年,Breiman提出了一个可以将多个决策树组合起来的模型随机森林(Random Forest,RF),它可以处理大量的输入变量,有很高的准确度,学习过程很快,不会产生过拟合问题,具有很好的鲁棒性。 2001年,Hochreiter发现使用BP算法时,在NN单元饱和之后会发生梯度损失(梯度扩散)。简单来说就是训练NN模型时,超过一定的迭代次数后,容易过拟合。NN的发展一度陷入停滞状态。 2.2 深度学习阶段 二十一世纪初,学界掀起了以“深度学习”为名的热潮。所谓深度学习?狭义地说就是“很多层”的神经网络。在若干测试和竞赛上,尤其是涉及语音、图像等复杂对象的应用中,深度学习技术取得了优越性能。以往机器学习技术在应用中要取得好性能,对使用者的要求较高;而深度学习技术涉及的模型复杂度非常高,以至于只要下工夫“调参”,只要把参数调节好,性能往往就好。因此,深度学习虽缺乏严格的理论基础,但它显著降低了机器学习应用者的门槛,为机器学习技术走向工程实践带来了便利。那么它为什么此时才热起来呢?有两个原因,一是数据量增大了,二是计算能力强了。深度学习模型拥有大量参数,若数据样本少,则很容易“过拟合”。如此复杂的模型、如此大的数据样本,若缺乏强力计算设备,根本无法求解。恰恰人类进入了大数据时代,数据储量与计算设备都有了大发展,才使得深度学习技术又焕发一春。 2006年,Hinton和他的学生在《Nature》上发表了一篇深度置信网络(Deep Belief Network,DBN)的文章,从此开启了深度学习(Deep Learning,DL)阶段,掀起了深度神经网络即深度学习的浪潮。 2009年,微软研究院和Hinton合作研究基于深度神经网络的语音识别,历时两年取得成果,彻底改变了传统的语音识别技术框架,使得相对误识别率降低25%。 2012年,Hinton又带领学生在目前最大的图像数据库ImageNet上,基于深度神经网络对图分类问题取得了惊人的结果,将Top5错误率由26%大幅降低至15%。(ImageNet 是一个计算机视觉系统识别项目,是目前世界上图像识别最大的数据库。是美国斯坦福的计算机科学家,模拟人类的识别系统建立的。能够从图片识别物体。) 2012年,由人工智能和机器学习顶级学者Andrew Ng和分布式系统顶级专家Jeff Dean领衔的梦幻阵容,开始打造Google Brain项目,用包含16000个CPU核的并行计算平台训练超过10亿个神经元的深度神经网络,在语音识别和图像识别等领域取得了突破性的进展。该系统通过分析YouTube上选取的视频,采用无监督的方式训练深度神经网络,可将图像自动聚类。在系统中输入“cat”后,结果在没有外界干涉的条件下,识别出了猫脸。 2012年,微软首席研究官Rick Rashid在21世纪的计算大会上演示了一套自动同声传译系统,将他的英文演讲实时转换成与他音色相近、字正腔圆的中文演讲。同声传译需要经历语音识别、机器翻译、语音合成三个步骤。该系统一气呵成,流畅的效果赢得了一致认可,深度学习则是这一系统中的关键技术。 2013年,Google收购了一家叫DNN Research的神经网络初创公司,这家公司只有三个人,Geoffrey Hinton和他的两个学生。这次收购并不涉及任何产品和服务,只是希望Hinton可以将深度学习打造为支持Google未来的核心技术。同年,纽约大学教授,深度学习专家Yann LeCun加盟Facebook,出任人工智能实验室主任,负责深度学习的研发工作,利用深度学习探寻用户图片等信息中蕴含的海量信息,希望在未来能给用户提供更智能化的产品使用体验。 2013年,百度成立了百度研究院及下属的深度学习研究所(Institute of Deep Learning,IDL),将深度学习应用于语音识别和图像识别、检索,以及广告CTR预估(Click-Through-Rate Prediction,CTR),其中图片检索达到了国际领先水平。 2014年,谷歌宣布其首款成型的无人驾驶原型车制造完毕,将会在2015年正式进行路测。 2016年,谷歌旗下DeepMind公司开发的人工智能程序AlphaGo击败围棋职业九段选手李世石。 2017年,DeepMind团队公布了最强版AlphaGo,代号AlphaGo Zero,它能在无任何人类输入的条件下,从空白状态学起,自我训练的时间仅为3天,自我对弈的棋局数量为490万盘,能以100:0的战绩击败前辈。 3 易混淆领域梳理 3.1 机器学习与人工智能 人工智能(Artificial Intelligence,AI)是计算机科学的一个分支,它企图了解智能的本质,生产出一种能比肩人类,并做出智能反应的机器。我们都知道机器学习是人工智能最重要的一种实现方法,但机器学习并不是人工智能一开始就采用的方法。人工智能的发展主要经历了逻辑推理,专家系统,机器学习三个阶段。 第一阶段的重点是逻辑推理,例如数学定理的证明,这类方法采用符号逻辑来模拟人类智能。 第二阶段的重点是专家系统,这类方法为各个领域的问题建立专家知识库,利用这些知识来完成推理和决策。比如将医生的诊断经验转化成一个知识库,然后用这些知识对病人进行诊断。 第三阶段的重点即为机器学习,如今的人工智能主要依赖的不再是逻辑推理和专家系统,而是建立在机器学习的基础上解决复杂问题。无论是基于数学的机器学习模型,还是基于神经网络的深度学习模型,都活跃在如今大多数人工智能应用程序之中。 3.2 机器学习与深度学习 深度学习(Deep Learning,DL)是机器学习的一个重要分支,深度学习和机器学习的关系属于继承和发展的关系。在很多人工智能问题上,深度学习的方法加上大数据的出现以及计算机运行速度的提高,更突出了人工智能的前景。比如,自动驾驶汽车,足以彻底改变我们的出行方式,它的实现就需要深度学习的图像识别技术,需要用到卷积神经网络(Convolutional Neural Networks, CNN)来识别马路上的行人、红绿灯等。 为了更清晰的认识深度学习,我们首先介绍神经网络(Neural Networks, NN),顾名思义,它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。神经网络有输入层、隐藏层(中间层)以及输出层,其中输入层负责神经网络的输入,输出层负责产生输入的映射。机器学习中的逻辑回归,可以看作是一层的神经网络,即除了输入层、输出层之外只有一个隐藏层。 而深度学习,就是指神经网络使用了很多隐藏层。 那么深度学习的每一层都在学什么?? 当你输入一张脸部的照片时,神经网络的第一中间层,可以看成是一个特征探测器或者边缘探测器,它会去找这张照片的各个边缘(第一张图片);第二中间层又把照片里组成边缘的像素们放在一起看,然后它可以把被探测到的边缘组合成面部的不同部分(第二张图片),有眼睛、鼻子等;最后再把这些部分放在一起,比如鼻子眼睛嘴巴,就可以识别或者探测不同的人脸(第三张图片)。 3.3 机器学习与数据挖掘 数据挖掘(Data Mining,DM)是指从大量的数据中搜索隐藏于其中信息的过程。机器学习是数据挖掘的重要工具之一,但数据挖掘不仅仅要研究、拓展、应用一些机器学习方法,还要通过许多非机器学习技术解决大规模数据与数据噪音等实际问题。大体上看,数据挖掘可以视为机器学习和大数据的交叉,它主要利用机器学习提供的技术来分析海量数据,利用大数据技术来管理海量数据。 3.4 机器学习与统计学 1.统计学简述 统计学(Statistics)是基于数据构建概率统计模型并运用模型对数据进行分析与预测的一门学科。统计学依托背后的数学理论,在远早于机器学习大爆发的几十年,率先从解释因果的角度,努力寻找最优函数(或模型)。统计学里最重要的两个部分是回归分析和假设检验。其他的方法或者技术在统计学这个大框架下,最终也是为了这两者服务的。回归分析提供了解释因果的武器,假设检验则给这项武器装上了弹药。单纯的线性回归用最小二乘法求解逼近事实的真相,再使用显著性检验,检测变量的显著性、模型的显著性、模型的拟合精度。当然是否属于线性,也可以使用假设检验的方法检测。非线性回归的问题,使用极大似然估计或者偏最小二乘回归求解模型,后续的显著性检验仍然是一样的思路。 2.机器学习与统计学对比 统计学是个与机器学习高度重叠的学科,统计学近似等于机器学习。但是在某种程度上两者是有分别的,这个分别在于:统计学是理论驱动,对数据分布进行假设,以强大的数学理论解释因果,注重参数推断,侧重统计模型的发展与优化;机器学习是数据驱动,依赖于大数据规模预测未来,弱化了收敛性问题,注重模型预测,侧重解决问题。 3.5 机器学习算法与“普通”算法的异同 这里我们以《算法导论》中所诠释的算法作为机器学习算法的比较对象。其相同点,两者的目的都是通过制定目标,增加约束,求得最优的模型。不同点是《算法导论》里的“算法”,本质上是如何更有效率地求解具有精确解的问题。效率,可以是计算时间更短,也可以是计算过程所需要的空间更少。而机器学习算法要解决的问题一般没有精确解,也不能用穷举或遍历这种步骤明确的方法求解。这里需要强调的是“学习”这个属性,即希望算法本身能够根据给定的数据或变化的计算环境而动态地发现新的规律,甚至改变机器学习算法的逻辑和行为。 作者:京东物流 星火团队 来源:京东云开发者社区

优秀的个人博客,低调大师

用新服务器从零开始部署 DolphinDB

本文主要介绍在新服务器部署 DolphinDB 时需要注意哪些系统配置,以及如何选择 DolphinDB 部署方式以符合业务需求。合适的系统配置可以提高 DolphinDB 系统的稳定性和可维护性,而合适的部署方式可以提高业务执行的效率。 1. 操作系统配置 本文以 CentOS 7.9.2009 为例,介绍 DolphinDB 相关的系统配置方法。 1.1 平台要求与推荐 1.1.1 支持的平台 平台 处理器架构 是否支持 Linux x86 是 arm 是 龙芯 是 Windows x86 是 Mac - 否 BSD - 否 在 Linux 系统使用 DolphinDB 要求内核版本为 Linux 2.6.19 或以上,推荐使用 CentOS 7 稳定版。 1.1.2 依赖软件 DolphinDB 依赖 gcc 4.8.5 或以上版本。以在 CentOS 7 稳定版上安装为例: # yum install -y gcc 1.1.3 推荐硬件配置 需要为 DolphinDB 元数据,redo log 以及数据实体配置不同的硬盘,以优化系统性能。 元数据和 redo log:建议配一块小容量 SSD;若对可靠性要求较高,建议配置两块 SSD 做 RAID1; 数据实体:如果无需节约成本,优先考虑多块 SSD 以获得较好的读写性能;如果需要节约成本,优先考虑配置多块机械硬盘以实现并行读写,提高读写吞吐量。 硬盘容量取决于实际业务。 数据实体存在1块 SSD 或多块 HDD 的读写性能差距取决于实际情况。 1.2 文件系统与 inode 数量 1.2.1 文件系统说明 推荐:在 Linux 下推荐使用 xfs 文件系统类型,因为 xfs 文件系统不仅支持硬链接,还支持动态调整 inode 数量。在 DolphinDB 运行期间,若可用的 inode 不足,将导致 DolphinDB 无法写入数据,可以通过动态增加 inode 数量解决此类问题。 不推荐:不支持硬链接的文件系统类型,例如 beegfs。其相较于支持硬链接的系统,其数据更新的性能较差。 root 用户(或有 root 权限的用户,下文命令前面添加 sudo)通过 SSH 连接到全新安装的 CentOS 服务器。首先使用 df -T 命令查看文件系统类型: # df -T 文件系统 类型 1K-块 已用 可用 已用% 挂载点 devtmpfs devtmpfs 3992420 0 3992420 0% /dev tmpfs tmpfs 4004356 0 4004356 0% /dev/shm tmpfs tmpfs 4004356 8748 3995608 1% /run tmpfs tmpfs 4004356 0 4004356 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 52403200 1598912 50804288 4% / /dev/sda1 xfs 1038336 153388 884948 15% /boot tmpfs tmpfs 800872 0 800872 0% /run/user/0 /dev/mapper/centos-home xfs 42970624 33004 42937620 1% /home /home 目录对应的文件系统类型为 xfs,因此可以将 DolphinDB 安装在此目录下。 若 /home 目录文件系统类型为 ext4 等不支持动态调整 inode 数量的类型,需要将其格式化为 xfs 类型。格式化步骤如下: 1. 备份 /home 数据 # cp -R /home /tmp 2. 卸载 /home 并删除对应逻辑卷 # umount /home # lvremove /dev/mapper/centos-home Do you really want to remove active logical volume centos/home? [y/n]: y Logical volume "home" successfully removed 3. 查看硬盘剩余可用空间 # vgdisplay | grep Alloc Free PE / Size 10527 / 41.12 GiB # 剩余可用空间为 41.12 GB 4. 新建 /home 逻辑卷并格式化为 xfs # lvcreate -L 41G -n home centos # 根据剩余可用空间填写创建大小 WARNING: xfs signature detected on /dev/centos/home at offset 0. Wipe it? [y/n]: y Wiping xfs signature on /dev/centos/home. Logical volume "home" created. # mkfs.xfs /dev/mapper/centos-home 5. 挂载 /home 并恢复数据 # mount /dev/mapper/centos-home /home # mv /tmp/home/* /home/ # chown owner /home/owner # 重新赋予 home 目录文件的权限给对应 owner,需要根据用户名自行修改 1.2.2 xfs 文件系统动态调整 inode 数量 若使用 DolphinDB 时出现磁盘空间足够,但因没有可用 inode 导致无法写入文件,可通过增加 inode 数量解决问题,步骤如下: 1. 查看 inode 信息: # xfs_info /dev/mapper/centos-home | grep imaxpct data = bsize=4096 blocks=10747904, imaxpct=25 # 即 /dev/mapper/centos-home 的 25% 的空间用于存放 inode # df -i | grep /dev/mapper/centos-home 文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点 /dev/mapper/centos-home 21495808 7 21495801 1% /home 可见配置了 /dev/mapper/centos-home 卷下的 25 % 的空间用于存放 inode,当前可用 inode 数为 21495801 个。 2. 增加 inode 数量: # xfs_growfs -m 30 /dev/mapper/centos-home meta-data=/dev/mapper/centos-home isize=512 agcount=4, agsize=2686976 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=10747904, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=5248, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 inode max percent changed from 25 to 30 3. 再次查看 inode 信息 df -i | grep /dev/mapper/centos-home /dev/mapper/centos-home 25794944 7 25794937 1% /home 可见当前可用 inode 数增加到了 25794937 个。 1.2.3 ext 文件系统设定合适的 inode 数量 如果必须使用 ext4 等不支持动态调整 inode 数量的文件系统类型,则需要在格式化硬盘时预估文件使用情况和增长速度以设定合适的 inode 数量。例如通过 mkfs.ext4 命令的 -N 选项指定 inode 数量。尤其当硬盘空间特别大时,ext4 文件系统默认的 inode 数量往往相对较少,建议设置较大的值。 1.3 挂载新硬盘 硬盘 IO 性能提升对于大数据处理非常重要,推荐硬件配置见 1.1.3 节。 物理安装新硬盘或通过云服务商增加新硬盘后,通过 SSH 连接到 CentOS 服务器。本节通过虚拟机添加容量为 50G 的新硬盘,步骤如下: 1. 使用 fdisk -l 查看硬盘信息: # fdisk -l ... 磁盘 /dev/sdb:53.7 GB, 53687091200 字节,104857600 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 ... 可见 /dev/sdb 为新加的 50G 硬盘。 2. 使用 fdisk 程序对新硬盘进行分区: # fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0x7becd49e 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n # 添加新分区 Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-104857599,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-104857599,默认为 104857599): 将使用默认值 104857599 分区 1 已设置为 Linux 类型,大小设为 50 GiB 命令(输入 m 获取帮助):q 3. 使用 mkfs.xfs 命令格式化新硬盘为 xfs 文件系统类型: # mkfs.xfs /dev/sdb meta-data=/dev/sdb isize=512 agcount=4, agsize=3276800 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=13107200, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=6400, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 4. 创建挂载点并挂载 # mkdir -p /mnt/dev1 # mount /dev/sdb /mnt/dev1 5. 查看新硬盘挂载情况 # df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs tmpfs 3.9G 8.6M 3.9G 1% /run tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 50G 1.6G 49G 4% / /dev/sda1 xfs 1014M 150M 865M 15% /boot /dev/mapper/centos-home xfs 41G 33M 41G 1% /home tmpfs tmpfs 783M 0 783M 0% /run/user/0 /dev/sdb xfs 50G 33M 50G 1% /mnt/dev1 6. 设置开机自动挂载 # blkid /dev/sdb /dev/sdb: UUID="29ecb452-6454-4288-bda9-23cebcf9c755" TYPE="xfs" # vi /etc/fstab UUID=29ecb452-6454-4288-bda9-23cebcf9c755 /mnt/dev1 xfs defaults 0 0 注意这里使用了 UUID 来标识新硬盘,避免了磁盘更换位置导致识别出错。 1.4 开启 core dump core dump 指当程序出错而异常中断时,操作系统会把程序工作的当前状态存储成一个 core 文件。core 文件可以帮助技术支持人员定位问题。因此,在空间足够的情况下,建议开启 core dump。开启步骤如下: 1. 创建存放 core 文件的路径 # mkdir /var/crash # 可自行修改存放目录 注意: 为目录预留足以存放若干 core 文件的空间,其中core文件最大为约为 maxMemSize 配置项的值; 确保 DolphinDB 在该目录具备写权限。 2. 设置开启 core dump # vi /etc/security/limits.conf * soft core unlimited * 指为所有用户开启,也可以指定用户名只为 DolphinDB 用户开启,unlimited 指 core 文件大小无限制。 3. 设置 core 文件输出路径与格式 # vi /etc/sysctl.conf kernel.core_pattern = /var/crash/core-%e-%s-%u-%g-%p-%t 格式说明: %e – 程序执行文件名 %s – 生成 core 文件时收到的信号 %u – 进程用户 ID %p – 进程号 %g – 进程用户组 ID %t – 生成 core 文件的时间戳 %h – 主机名 4. 重启后查看是否生效 # ulimit -c unlimited 1.5 增大文件最大打开数量 DolphinDB 运行时同时打开的文件数量可能会大于 CentOS 7 的文件最大打开数量默认值 1024 个,建议配置文件最大打开数量为 102400 个。配置步骤如下: 1. 查看文件最大打开数量 # ulimit -n # 用户级 1024 # cat /proc/sys/fs/file-max # 系统级 763964 可见用户级文件最大打开数量为 1024 个,系统级为 763964 个。DolphinDB 为用户级,修改用户级文件最大打开数量为 102400 个即可。 2. 修改用户级文件最大打开数量 # vi /etc/security/limits.conf * soft nofile 102400 * hard nofile 102400 * 指对所有用户生效,也可以配置为指定用户名只对 DolphinDB 用户生效。 3. 若系统级最大打开文件数量的配置值小于 102400 个,需要修改为不小于 102400 的值: # vi /etc/sysctl.conf fs.file-max = 102400 本文例子中系统级文件最大打开数量为 763964 个,大于 102400个,故不做修改。 4. 重启后查看配置是否生效 # ulimit -n # 用户级 102400 # cat /proc/sys/fs/file-max # 系统级 763964 1.6 NTPD 若部署多机集群模式,需要配置 NTPD(Network Time Protocol Daemon)进行时间同步,以确保事务发生的先后顺序正确。本文使用两台虚拟机分别配置为 NTPD 服务端和客户端,配置如下: 虚拟机名称 IP 子网掩码 NTPD 配置 虚拟机1 192.168.0.30 255.255.254.0 服务端,与 cn.pool.ntp.org 时间同步 虚拟机2 192.168.0.31 255.255.254.0 客户端,与 192.168.0.30 时间同步 配置步骤如下: 1. 分别在两台虚拟机上安装 ntpd # yum install ntp 2. 在虚拟机1上配置与 cn.pool.ntp.org 时间同步 # vi /etc/ntp.conf ... # Hosts on local network are less restricted. restrict 192.168.0.0 mask 255.255.254.0 nomodify notrap # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). server 0.cn.pool.ntp.org iburst server 1.cn.pool.ntp.org iburst server 2.cn.pool.ntp.org iburst server 3.cn.pool.ntp.org iburst ... 其中第 4 行配置 IP 网段在 192.168.0.0 且子网掩码为 255.255.254.0 的本地网络请求本机的 NTP 服务,nomodify 指客户端不能修改服务端的参数配置,notrap 指不提供 trap 远程登录。 3. 在虚拟机1上配置防火墙,添加 ntp 服务 # firewall-cmd --add-service=ntp --permanent # firewall-cmd --reload 4. 在虚拟机2上配置与虚拟机1时间同步 # vi /etc/ntp.conf ... # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). server 192.168.0.30 iburst # server 0.centos.pool.ntp.org iburst # server 1.centos.pool.ntp.org iburst # server 2.centos.pool.ntp.org iburst # server 3.centos.pool.ntp.org iburst ... 5. 分别在两台虚拟机上启动 ntpd # systemctl enable ntpd # systemctl restart ntpd 6. 等待若干秒后,查看 ntpd 运行状况 虚拟机1: # ntpstat synchronised to NTP server (202.112.31.197) at stratum 2 time correct to within 41 ms polling server every 64 s 虚拟机2: # ntpstat synchronised to NTP server (192.168.0.30) at stratum 3 time correct to within 243 ms polling server every 64 s 1.7 防火墙配置 运行 DolphinDB 前,需要配置防火墙开放 DolphinDB 的各个节点的端口,或者关闭防火墙。 具体开放哪些端口取决于集群配置,以开放 8900 ~ 8903 TCP 端口为例: # firewall-cmd --add-port=8900-8903/tcp --permanent # firewall-cmd --reload # systemctl restart firewalld 若不需要防火墙,可通过如下命令关闭: # systemctl stop firewalld # systemctl disable firewalld.service 1.8 Swap Swap 即交换分区,在物理内存不够用时,操作系统会从物理内存中把部分暂时不被使用的数据转移到交换分区,从而为当前运行的程序留出足够的物理内存空间,保证程序的正常运行,但会造成系统性能下降。如果系统物理内存充足,且用户比较重视性能,建议关闭 Swap,步骤如下: 1. 检查 Swap 是否已关闭 # free -h total used free shared buff/cache available Mem: 7.6G 378M 7.1G 8.5M 136M 7.1G Swap: 7.9G 0B 7.9G 可见 Swap 的 total 值为 7.9G,未关闭。 2. 临时关闭 Swap # swapoff -a 3. 再次检查 Swap 是否已关闭 # free -h total used free shared buff/cache available Mem: 7.6G 378M 7.1G 8.5M 136M 7.1G Swap: 0B 0B 0B 可见 Swap 的 total 值为 0B,已关闭。 4. 永久关闭 Swap,注释掉第 2 列值为 swap 的行 # vi /etc/fstab ... # /dev/mapper/centos-swap swap swap defaults 0 0 ... 2. 部署 DolphinDB 系统配置好后,即可根据业务需求选择合适的部署方式部署 DolphinDB。 2.1 单节点、单机集群、多机集群的选择 本节介绍不同部署方式之间的比较重要的差异,不同部署方式的功能和应用场景的完整列表见《DolphinDB 安装使用指南》第 2.4 节。 2.1.1 相同单机资源,部署单节点和单机集群的差异 单节点指在单机上部署一个 DolphinDB 单机节点,单机集群指在单机上部署多个 DolphinDB 分布式节点。 单节点部署更简单,且在单机配置(CPU核数、内存容量、硬盘个数)不高、计算任务不复杂的情况下,单节点的部署方式减少了节点间的网络传输,在性能方面反而比单机集群更好(但并不明显)。 单机集群通常适合密集型计算场景,将计算任务分发到不同的节点(进程)上,可以有效的隔离内存资源竞争,提高计算效率。 集群与单节点的另外两个差异,一是集群支持横向扩展,即支持在线加入新的数据节点,提高整个集群的最大负载;二是集群支持高可用,容错率更高。 综上,单机部署时,建议部署集群模式。 2.1.2 相同节点的情况下,部署单机集群和多机集群的差异 多机集群部署指将 DolphinDB 分布式节点分别部署到多台机器上。 多机可以充分利用各个节点(机器)的计算资源和存储资源。但是节点间通信引入了网络开销,故建议部署在内网并配置万兆网络以降低网络开销。 另外,假设每台机器故障概率相同,多机比单机更容易出现故障,但由于节点分布在多机上,通过开启高可用支持,多机集群容错率更高。 2.1.3 单机多硬盘与多机部署的差异 对于大吞吐量、低计算的任务来说,单机多硬盘集群模式因网络开销小而具有更好的性能。对于小吞吐量、重计算的场景,多机集群的分布式计算优势更明显。 元数据和redo log的存储,相关配置项包括: chunkMetaDir: 元数据目录 dfsMetaDir: 该目录保存控制器节点上的分布式文件系统的元数据 redoLogDir: OLAP 存储引擎重做日志(redo log)的目录 TSDBRedoLogDir: TSDB 存储引擎重做日志(redo log)的目录 这些配置项建议指定到 SSD 以提高读写性能。 数据实体的存储,相关配置项包括: volumes: 数据文件目录。多个目录用 ',' 隔开,例如: /hdd/hdd1/volumes,/hdd/hdd2/volumes,/hdd/hdd3/volumes diskIOConcurrencyLevel: 读写磁盘数据的线程数,默认为1,若 volumes 全部配置为 HDD 硬盘,建议 diskIOConcurrencyLevel 设置为同 HDD 硬盘个数相同的值 2.2 Docker 和非 Docker 环境运行的选择 Docker 只是轻量化的资源隔离,DolphinDB 部署在 Docker 环境和非 Docker 环境下的运行性能差异不明显,可根据业务需求选择合适的运行环境。 2.3 生产环境配置参数实践 以搭建元数据和流数据高可用集群为例介绍如何配置集群各节点。设集群机器硬件配置相同,集群机器信息如下: 名称 IP 备注 centos-1 175.178.100.3 1控制节点,1代理节点,1数据节点 centos-2 119.91.229.229 1控制节点,1代理节点,1数据节点 centos-3 175.178.100.213 1控制节点,1代理节点,1数据节点 3 台机器上 cluster.nodes 与 cluster.cfg 配置文件内容均相同,而 controller.cfg 和 agent.cfg 需要根据机器 IP 和端口号做相应配置。注意下面只列出部分重要配置。 cluster.nodes cluster.cfg diskIOConcurrencyLevel=0 node1.volumes=/ssd1/dolphindb/volumes/node1,/ssd2/dolphindb/volumes/node1 node1.redoLogDir=/ssd1/dolphindb/redoLog/node1 node1.chunkMetaDir=/ssd1/dolphindb/metaDir/chunkMeta/node1 node1.TSDBRedoLogDir=/ssd1/dolphindb/tsdb/node1/redoLog chunkCacheEngineMemSize=2 TSDBCacheEngineSize=2 ... controller.cfg localSite=175.178.100.3:8990:controller1 dfsMetaDir=/ssd1/dolphindb/metaDir/dfsMeta/controller1 dfsMetaDir=/ssd1/dolphindb/metaDir/dfsMeta/controller1 dataSync=1 ... agent.cfg localSite=175.178.100.3:8960:agent1 sites=175.178.100.3:8960:agent1:agent,175.178.100.3:8990:controller1:controller,119.91.229.229:8990:controller2:controller,175.178.100.213:8990:controller3:controller ... 关于如何配置部分重要配置参数,见下表: 文件 配置参数 说明 cluster.cfg node1.volumes=/ssd1/dolphindb/volumes/node1,/ssd2/dolphindb/volumes/node1 配置多个 SSD 硬盘达到并发读写,以提高读写性能。 cluster.cfg diskIOConcurrencyLevel=0 合理设置该参数,可以优化读写性能。建议配置如下:若 volumes 配置了 SSD 硬盘,建议设置 diskIOConcurrencyLevel = 0;若 volumes 全部配置为 HDD 硬盘,建议 diskIOConcurrencyLevel 设置为同 HDD 硬盘个数相同的值。 cluster.cfg chunkCacheEngineMemSize=2 TSDBCacheEngineSize=2 DolphinDB 目前要求 cache engine 和 redo log 必须搭配使用。若在 cluster.cfg 配置了chunkCacheEngineMemSize 和 TSDBCacheEngineSize(即启动 cache engine)则必须在 controller.cfg 里配置 dataSync=1。 controller.cfg dataSync=1 2.4 部署流程 DolphinDB为各种部署方式提供了详细的教程,在决定部署方式和配置后,根据教程部署即可,本文涉及的部署方式教程链接如下: 单节点部署 单节点部署(嵌入式ARM版本) 单服务器集群部署 多服务器集群部署 高可用集群部署教程 如何扩展集群节点和存储 DolphinDB Docker单机部署方案 基于Docker-Compose的DolphinDB多容器集群部署 更多教程可以前往官方教程仓库查看。 2.5 启动流程 以启动 2.3 节配置的高可用集群为例,将 2.3 节的配置文件相应放在 centos-1、centos-2、centos-3 机器的 DolphinDB 安装目录/clusterDemo/config 目录下。 注意:启动脚本使用了相对路径,故需要到脚本所在目录执行。 2.5.1 启动控制节点 分别在 centos-1、centos-2、centos-3 机器上执行如下命令: $ cd DolphinDB/clusterDemo/ $ ./startController.sh 2.5.2 启动代理节点 分别在 centos-1、centos-2、centos-3 机器上执行如下命令: $ cd DolphinDB/clusterDemo/ $ ./startAgent.sh 2.5.3 启动数据节点 进入任意一个控制节点的 web 集群管理界面,如 http://175.178.100.3:8990,会自动跳转到 leader 节点的集群管理界面。在节点列表选中所有数据节点,点击启动按钮启动即可。web 集群管理界面具体介绍见《DolphinDB GUI手册》。

优秀的个人博客,低调大师

分享 | OpenVINO™入门 · 从零开始安装配置 OpenVINO

点击蓝字 关注我们,让开发变得更有趣 内 容 来 源 |郭春旭 排 版 | 卢书晴 原文链接:https://mc.dfrobot.com.cn/thread-306568-1-1.html 一、简要介绍 笔者之前对于神经网络的边缘计算加速和部署并不是很了解,在队友的帮助下逐步了解 OpenVINO 和神经计算棒的一些用法,期间由于没有经验踩了不少的坑,在此分享一下 OpenVINO 的安装和跑通自带示例的过程。 主要参考了 OpenVINO 官网的安装教程【https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_windows.html】,从小白(不就是我吗)视角讲如何将 OpenVINO 安装在 win10 系统上! 首先,OpenVINO 本身需要 CMAKE , python 和 VS 这三个依赖项,其本身是对神经网络模型的优化与部署工具,简而言之就是模型本身比较大、可能不适合在边缘计算设备上运行,这个工具包可以将其从各类框架的模型转化为一种网络的中间表示(IR),用于描述这个模型,包括了两个部分: ①.xml 描述网络的拓扑结构 ②.bin网络的权重与偏置的二进制数据 推理引擎使用的是一套通用的 CPU ,可以在 CPU 、 GPU 以及 VPU 上进行运算,之前听OpenVINO的讲座发现这也可以算是这个工具套件的一大亮点,使得使用更加方便了。我们只需要在推理的时候选择运行设备为 VPU ,就可以自动部署网络到这类硬件级别的加速单元上进行高效的推理了,听说这款 Movidius 神经计算棒的功耗仅有1w左右,这样的效能比还是非常惊人的。 这类低成本的边缘神经网络的推理神器很适合编程爱好者与创客做一些需要用到神经网络的小作品。 二、下载安装 1.下载并安装 OpenVINO 安装包的 win10 发行版 这个工具包需要在https://software.intel.com/content/www/us/en/develop/tools/openvino-toolkit/choose-download/windows.html?elq_cid=6430695 下载,是一个免费的工具包,但是英特尔需要用户使用邮箱进行注册,我们按照提示选择页面上的【Register & Download】。进入注册页面,填写邮箱,选择下载 win10 版本。我们尽量在接下去的安装过程中都选择默认目录进行安装,将组件全部勾选进行安装,安装完成后可能提示缺少一些安装项,不要紧我们继续点击【Finish】完成即可。 2.下载与安装特定版本的python 【注意版本要求!!】 在 python 官网的 win10 版下载页面【https://www.python.org/downloads/windows/】 下载 python 文件进行安装, OpenVINO 对 python 的版本要求为 3.5-3.7 ,不要选择太高的版本,笔者之前一直用的最新的版本 3.8.x ,之后再运行 OpenVINO 的时候会报错。与我们平常安装 python 一样,记得要勾选将 python 添加到路径的选项,不然会运行时找不到。 3.下载安装VS2019与CMake3.14 【选对工作负载和版本!!尽量安装在默认目录!!】 官网对这两项依赖的要求是 CMake2.8.12 或更高以及 VS2017 或 2019 ,但是如果要使用 VS2019 的话就必须使用 CMake3.14 ,正常下载安装即可,但是有一点值得注意,那就是在 V S 进行安装的时候,需要勾选三个负载 【.NET 桌面开发】【使用 C++ 的桌面开发】【通用 windows 平台开发】,笔者一开始只勾选了一项导致后面在命令行中验证 OpenVINO 安装的时候会报错。 4.确定系统硬件要求 【看某些处理器是否不支持!!】 官网上列出的支持的硬件包括六代之后的酷睿、至强和神经计算棒等,但是笔者在实测 LattePanda Delta 时会报错,网上解释是不支持 AVX512 指令集,查遍网络也没发现解决方案,最终将运行设备从 CPU 切换为神经计算棒后可以正常运行,可能就是因为这块 LattePanda Delta 使用的是 N4100 处理器,不在官方支持的 N4200 / 5 , N3350 / 5 或 N3450 / 5 之列吧,在个人 PC(i7-8750H) 上运行时就没有这样的问题。 5.设置环境变量与配置模型优化器 只有设置完临时系统环境变量后才能进行下一步的工作,运行 C:\ Program Files(x86)\ IntelSWTools \ openvino \ bin \setupvars.bat 即可,后期可以按照官网上的教程手动设置永久环境变量。 之后要设置模型优化器,模型优化器是一个 python 文件,输入各种框架的模型文件或者 ONNX 这种通用模型文件格式,将其输出为中间表示文件 【IR】,用于进一步的部署与推理。目前了解下来, Caffe 和 Tensorflow 等框架是直接支持转换的,其他如 pytorch 等则需要先转化为 ONNX 再进行模型优化。 安装时可以选择一次配置完所有模型的优化器或者单独为某个模型配置优化器,运行 C:\ Program Files(x86)\ IntelSWTools \ openvino \ deployment_tools \ model_optimizer \ install_prerequisites目录下的install_prerequisites.bat 或 install_prerequisites_tf.bat 等文件即可。 笔者在为 tensorflow 配置优化器的时候报出了 tensorflow 版本不匹配的错误,卸载 tensorflow 后再运行这个批处理文件会自动再安装上,可以正常使用,推荐将 pip 先更换至国内镜像加快下载速度。 6.验证步骤 验证部分也只需要处理两个批处理文件。 在推理引擎目录 C:\ Program Files(x86)\ IntelSWTools \ openvino \ deployment_tools \ demo \ 下运行 demo_squeezenet_download_convert_run.bat 可以进行图形分类验证, 运行 demo_security_barrier_camera.bat 可以进行车牌识别,这两个模型也都是需要再重新下载和安装的,可能需要一些时间。 7.BAT中目录错误问题 刚才就提到了在下载和安装依赖的时候要尽量安装在默认目录,但是由于 LattePanda Delta 板载存储只有 32G ,笔者最后加了个128G 固态并把软件都安装在了非默认位置,但是点开 BAT 看发现疑似目录都是写在默认位置的,之后强行修改了 BAT 中的各目录才解决了这个问题。 END 如果你还在为自己的模型而发愁,不妨使用 OpenVINO 。如果你对建模感兴趣,不妨学学 OpenVINO 。更多精彩内容请关注 OpenVINO 中文社区。从小白到大佬的进阶之路,我们一路陪伴。 👇欢迎在留言区与我们互动哦, 点击小程序 留言区 即可参与 留言区 --------------------------------------- *OpenVINO and the OpenVINO logo are trademarks of Intel Corporation or its subsidiaries. ----------------------------- OpenVINO 中文社区 微信号 : openvinodev B站:OpenVINO中文社区 “开放、开源、共创” 致力于通过定期举办线上与线下的沙龙、动手实践及开发者交流大会等活动,促进人工智能开发者之间的交流学习。 ○点击“在看”,让更多人看见 点击阅读原文立即体验OpenVINO 本文分享自微信公众号 - OpenVINO 中文社区(openvinodev)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册