澳门新葡亰平台官网推荐 10 个饱受好评且功能独特的开源人工智能项目

by admin on 2020年4月20日

澳门新葡亰平台官网 1

摘要:MXNet是深度学习领域的主流框架之一,本文从特点,架构及编程模式等方面展开了对MXNet的全面介绍。解答如何在阿里云上快速部署和运行MXNet,以及介绍了阿里云上的MXNet一些性能实践。

澳门新葡亰平台官网 2

MXNet 是一个轻量级、可移植、灵活的分布式深度学习框架,2017 年 1 月 23
日,该项目进入 Apache 基金会,成为 Apache
的孵化器项目。

演讲嘉宾简介:

关于人工智能的项目,相信大家都看过或者用过不少了,但它们的大多数看上去都十分“高大上”,让人感觉要掌握他们犹如习屠龙之术一样。事实上,有很多关于人工智能的项目还是十分实用的,而且用途还十分有趣,下面就简单为大家盘点
10 个功能独特的开源人工智能项目。

MXNet 项目由 DMLC(Distributied (Deep) Machine Learning
Community)创建,前期开发者主要是 CXXNet,Minerva 和 purine2 的作者。MXNet
项目于 2015 年 9 月开源,目前项目代码托管在 GitHub 上,已经拥有 200
多位贡献者。

谢峰(撷峰),阿里云异构计算技术专家。有丰富的X86、ARM、GPU虚拟化技术经验,加入阿里云之前,曾作为主要开发者参与基于API
Remoting方案的GPU虚拟化项目,并负责基于Xen的NVIDIA
vGPU虚拟化技术的引入和产品落地,并对智能手机虚拟化技术有深入研究。目前从事阿里云GPU异构计算基础设施的研发以及GPU在深度学习等领域的应用研究和性能调优等工作。

1. STYLE2PAINTS:强大的为线稿上色的 AI

推荐理由:新一代的强大线稿上色
AI,可根据用户上传的自定义色彩给线稿进行上色。项目提供了在线使用网站,十分方便使用。

澳门新葡亰平台官网 3

MXNet 的初衷是想结合 Minerva 和 CXXNet 两者的功能:CXXNet
通过配置来定义和训练神经网络,所以在图片分类等使用卷积网络的应用上很方便;而
Minerva 提供类似 numpy 一样的张量计算接口,更灵活。MXNet
就是这样一个两者功能都具备的系统,其名字来自 Minerva 的 M 和 CXXNet 的
XNet,其中 Symbol 的想法来自 CXXNet,而 NDArray 的想法来自 Minerva。

本次直播视频精彩回顾,戳这里! 

2. SerpentAI:基于 Python 的教 AI 打游戏的学习框架

推荐理由:SerpentAI 旨在为机器学习和 AI
研究提供一个有价值的工具。但同时,对于爱好者来说,它也是非常有趣的。

澳门新葡亰平台官网 4

Serpent.AI
中包含大量支持模块,在以游戏为开发环境时经常遇到的场景提供解决方案,同时也提供加速开发的
CLI 工具。支持 Linux、Windows 和 MacOS 。

SerpentAI 是一个 Game Agent
框架(ps:在人机对战中,为了区分玩家,通常称机器玩家为 agent
),简单而又强大。它能把任何一个游戏变成用 Python
编写的沙盒环境,供开发者在其中创造游戏 Game Agent
做实验,使用的都是开发者非常熟悉的 Python 代码。

目前主流的深度学习系统一般采用命令式编程(imperative programming,比如
Torch)或声明式编程(declarative programming,比如 Caffe,theano 和
TensorFlow)两种编程模式中的一种,而 MXNet
尝试将两种模式结合起来,在命令式编程上 MXNet
提供张量运算,而声明式编程中 MXNet
支持符号表达式。用户可以根据需要自由选择,同时,MXNet 支持多种语言的 API
接口,包括 Python、C++(并支持在 Android 和 iOS
上编译)、R、Scala、Julia、Matlab 和 JavaScript。

以下内容根据演讲嘉宾视频分享以及PPT整理而成。

3. Synaptic.js:用于浏览器的神经网络库

推荐理由:Synaptic.js 是一个用于 node.js 和浏览器的 JavaScript
神经网络库,可以构建和训练基本上任何类型的一阶甚至二阶神经网络。

该项目内置了 4 种经典的神经网络算法:多层感知器(multilayer
perceptrons)、长短期记忆网络(multilayer long-short term memory
networks)、液体状态机(Liquid State Machine)、Hopfield神经网络。使用
Synaptic.js ,你可以轻松测试和比较不同体系结构的性能。

继上个月 Amazon 宣布将 MXNet 作为 AWS 的深度学习框架,号召开源社区为
MXNet
投入更多的努力(详见之前InfoQ的报道)之后,成为
Apache 孵化器项目是MXNet发展过程中的又一里程碑,以后 MXNet
必将不断优化完善,带来进一步的性能提升。

本次的分享主要围绕以下三个方面:

4. Snake-AI:贪吃蛇游戏的人工智能 

推荐理由:一个用 C/C++
语言编写的贪吃蛇游戏的人工智能。使用了最短路径、最长路径、人工智能算法。

AI 的目的是让蛇尽可能的吃更多的食物,直到吃满整个地图。

Demo

澳门新葡亰平台官网 5

未来,MXNet 将主要关注以下四个方向:

一、MXNet 简介

5. Uncaptcha:破解 reCAPTCHA 系统的 AI 算法

推荐理由:unCAPTCHA 算法以 85% 的成功率击败了 Google reCAPTCHA
系统。它依靠音频验证码攻击 –
使用浏览器自动化软件来解析必要的元素并识别语音号码,并以编程方式传递这些数字,最终成功欺骗目标网站。

澳门新葡亰平台官网 6

  1. 支持更多的硬件

  2. 更加完善的操作子

  3. 更多编程语言

  4. 更多的应用

二、阿里云上部署和运行MXNet

6. Sockeye:基于 Apache MXNet 的神经机器翻译框架

推荐理由:Sockeye 是一个基于 Apache MXNet 的快速而可扩展的深度学习库。

Sockeye 代码库具有来自 MXNet 的独特优势。例如,通过符号式和命令式 MXNet API,Sockeye 结合了陈述式和命令式编程风格;它同样可以在多块
GPU 上并行训练模型。

Sockeye 实现了 MXNet 上当前最佳的序列到序列模型。它同样为所有序列到序列模型的超参数提供恰当的默认值。对于优化,无需担心停止标准、指标跟踪或者权重初始化。可以简单地运行已提供的训练命令行界面(CLI),也可以轻易改变基础模型架构。

来自:InfoQ

三、阿里云上的MXNet性能实践 

7. PHP-ML:PHP 机器学习库

推荐理由:我们都知道 Python 或者是 C++
提供了更多机器学习的库,但他们大多都比较复杂,配置起来让很多新手感到头疼。PHP-ML
这个机器学习库虽然没有特别高大上的算法,但其具有最基本的机器学习、分类等算法,小项目或者小公司做一些简单的数据分析、预测等等足以够用。

澳门新葡亰平台官网 7

PHP-ML 是使用 PHP
编写的机器学习库。同时包含算法,交叉验证,神经网络,预处理,特征提取等。

一、MXNet 简介

8. CycleGAN:生成对抗网络图像处理工具

推荐理由:这个工具功能十分强大,不仅可将绘画作品“还原”成照片(可理解为是一个
“反滤镜”),还能将夏天转换成冬天,或将普通的马转化成斑马。

澳门新葡亰平台官网 8

与其它人工智能绘画不同,CycleGAN
的研究团队试图建立一个可双向转化不丢失信息的双向算法。在 CycleGAN
里照片的细节被要求完全保留,研究人员希望能够将一张图片输入 CycleGAN
后进行多次反复转化(照片→绘画→照片→绘画→照片),最终可以获得与原始照片相同或相近的图片。

澳门新葡亰平台官网 9

1.MXNet特点

9. DeepLearn.js:可实现硬件加速的机器学习 JavaScript 库

DeepLearn.js
是谷歌推出的一个可用于机器智能并加速 WebGL 的开源 JavaScript 库,完全在浏览器中运行,不需要安装,不需要后端处理。。

澳门新葡亰平台官网 10

DeepLearn.js
提供高效的机器学习构建模块,使我们能够在浏览器中训练神经网络或在推断模式中运行预训练模型。它提供构建可微数据流图的 API,以及一系列可直接使用的数学函数。

虽然浏览器上的机器学习库已经存在多年(例如 Andrej Karpathy 的
convnetjs),但是它们受到 JavaScript
速度的限制,或者局限于推理而不能用于训练(例如
TensorFire)。相比之下,deeplearn.js 通过利用 WebGL
在GPU上执行计算,以及进行完全反向传播(full
backpropagation)的能力,实现了显着的加速。

MXNet是一个全功能,灵活可编程和高扩展性的深度学习框架。所谓深度学习,顾名思义,就是使用深度神经网络进行的机器学习。神经网络本质上是一门语言,我们通过它可以描述应用问题的理解。比如,卷积神经网络(CNN)可以表达空间相关性的问题,使用循环神经网络(RNN)可以表达时间连续性方面的问题。MXNet支持深度学习模型中的最先进技术,当然包括卷积神经网络(CNN),循环神经网络(RNN)中比较有代表性的长期短期记忆网络(LSTM)。根据问题的复杂性和信息如何从输入到输出一步一步提取,我们通过将不同大小,不同层按照一定的原则连接起来,最终形成完整的深层的神经网络。MXNet有三个特点,便携(Portable),高效(Efficient),扩展性(Scalable)。

10. TensorFire:基于 WebGL 的浏览器端神经网络框架 

推荐理由:TensorFire 是基于 WebGL
的,运行在浏览器中的神经网络框架。使用 TensorFire
编写的应用能够在实现前沿深度学习算法的同时,不需要任何的安装或者配置就直接运行在现代浏览器中。

澳门新葡亰平台官网 11

与之前某些浏览器内的神经网络框架相比,TensorFire
有着近百倍的速度提升,甚至于能够与那些运行在本地 CPU
上的代码性能相媲美。

开发者也可以使用 TensorFire 提供的底层接口来进行其他的高性能计算,譬如
PageRank、元胞自动机仿真、图片转化与过滤等等。

相信还有其他优秀的开源人工智能项目尚未在本文出现,欢迎各位在评论中留下你们的推荐~

澳门新葡亰平台官网 12

首先看第一个特点,便携(Portable)指方便携带,轻便以及可移植。MXNet支持丰富的编程语言,如常用的C++,python,Matlab,Julia,JavaScript,Go等等。同时支持各种各样不同的操作系统版本,MXNet可以实现跨平台的移植,支持的平台包括Linux,Windows,IOS和Android等等。

第二点,高效(Efficient)指的是MXNet对于资源利用的效率。而资源利用效率中很重要的一点是内存,因为在实际的运算当中,内存通常是一个非常重要的瓶颈,尤其对于GPU,嵌入式设备而言,内存显得更为宝贵。神经网络通常需要大量的临时空间,例如每层的输入,输出变量,每个变量需要独立的内存空间,这回带来高额度的内存开销。如何优化内存开销,对于深度学习框架而言是非常重要的事情。MXNet在这方面做了特别的优化,有数据表明,在运行多达1000层的深层神经网络任务时,MXNet只需要消耗4GB的内存。阿里也与Caffe做过类似的比较之后也验证了这项特点。

第三点,扩展性(Scalable)在深度学习当中一个非常重要的性能指标。更高效的扩展可以让训练新模型的速度得到显著提高,或者在相同的时间内,大幅度提高模型复杂性。扩展性指两方面,首先是单机扩展性,另一个是多机扩展性。MXNet在单机扩展性和多机扩展性方面都有非常优秀的表现。所以扩展性(Scalable)是MXNet最大的一项优势,也是最突出的特点。

2.MXNet编程模式

对于一个优秀的深度学习系统,或者一个优秀的科学计算系统,最重要的是如何设计编程接口,它们都采用一个特定领域的语言,并将其嵌入到主语言当中。比如numpy将矩阵运算嵌入到python当中。嵌入一般分为两种,其中一种嵌入较浅,每种语言按照原来的意思去执行,叫命令式编程,比如numpy和Torch都属于浅深入,命令式编程。另一种则是使用更深的嵌入方式,提供了一整套针对具体应用的迷你语言,通常称为声明式编程。用户只需要声明做什么,具体执行交给系统去完成。这类编程模式包括Caffe,Theano和TensorFlow等。

澳门新葡亰平台官网 13

目前现有的系统大部分都采用上图所示两种编程模式的一种,两种编程模式各有优缺点。所以MXNet尝试将两种模式无缝的结合起来。在命令式编程上MXNet提供张量运算,而声明式编程中MXNet支持符号表达式。用户可以自由的混合它们来快速实现自己的想法。例如我们可以用声明式编程来描述神经网络,并利用系统提供的自动求导来训练模型。另一方面,模型的迭代训练和更新模型法则中可能涉及大量的控制逻辑,因此我们可以用命令式编程来实现。同时我们用它来进行方便地调式和与主语言交互数据。

3.MXNet架构

下图中左边是MXNet架构图,从上到下是分别为各种主从语言的嵌入,编程接口(矩阵运算NDArray,符号表达式Symbolic
Expression,分布式通讯KVStore),还有两种编程模式的统一系统实现,其中包括依赖引擎,还有用于数据通信的通信接口,以及CPU,GPU等各硬件的支持,还有对Android,IOS等多种操作系统跨平台支持。在三种主要编程接口(矩阵运算NDArray,符号表达式Symbolic
Expression,分布式通讯KVStore)中,重点介绍KVStore.

澳门新葡亰平台官网 14

KVStore是MXNet提供的一个分布式的key-value存储,用来进行数据交换。KVStore的本质上的实现是基于参数服务器。1.通过引擎来管理数据一致性,这使得参数服务器的实现变得相当简单,同时使得KVStore的运算可以无缝的与其他部分结合在一起。2.使用一个两层的通讯结构,原理如下图所示。第一层的服务器管理单机内部的多个设备之间的通讯。第二层服务器则管理机器之间通过网络的通讯。第一层的服务器在与第二层通讯前可能合并设备之间的数据来降低网络带宽消费。同时考虑到机器内和外通讯带宽和延时的不同性,可以对其使用不同的一致性模型。例如第一层用强的一致性模型,而第二层则使用弱的一致性模型来减少同步开销。在第三部分会介绍KVStore对于实际通讯性能的影响。

澳门新葡亰平台官网 15

二、阿里云上部署和运行MXNet

1.阿里云提供的弹性GPU服务

深度学习的发展依赖于三个重要的要素。第一,算法的大幅改进;第二个是大数据的提供;第三个是算力的大幅提升。其中GPU的性能大幅度提升是对算力的巨大贡献。阿里云提供的弹性GPU计算计算服务,提供了丰富的GPU实例、软件(镜像市场)和服务(如容器服务)来给客户。

1)GPU实例支持M40、P4、P100、V100多种GPU,和丰富的CPU、内存配置,覆盖深度学习训练和推理场景。

2)镜像市场提供了预装NVIDIA GPU 驱动和CUDA
库的镜像,以及预装开源深度学习框架(包括MXNet)的镜像。

3)提供容器服务一键部署、运行深度学习任务,提供ROS资源编排服务创建需要的GPU实例资源等等。

澳门新葡亰平台官网 16

阿里云的容器服务可以提供分布式的运算模型,并且可以利用阿里云丰富的存储资源,如使用高效云盘或者SSD云盘,OSS对象存储,可以使用NAS文件存储来存储用户训练数据。

澳门新葡亰平台官网 17

阿里云可以基于容器,实现弹性GPU服务一键式部署,包括支持GPU资源调度,挂载共享存储,负载均衡,弹性伸缩,CPU、GPU监控以及丰富的日志管理。

澳门新葡亰平台官网 18

基于容器的工作方式相对于很多传统的方式有非常多巨大便利。我们需要搭建深度学习环境,对数据做准备,对模型进行开发,然后对开发的模型进行训练和预测。而传统的部署过程全部都需要手动完成,这是极其复杂的过程。利用容器的一键式部署可以极大缩短部署时间

澳门新葡亰平台官网 19

2.使用容器服务部署MXNet

下面是使用容器服务部署MXNet的过程。首先可以在阿里云控制台上找到容器服务解决方案,如下图所示。在当中选择机器学习,可以看到支持模型开发,模型训练及模型预测。选择创建数据卷,可以选择OSS,NAS云盘等多种不同的存储设备,之后将训练数据放到存储设备上;可以选择模型开发,并且创建一个GPU集群,选择需要的训练框架,GPU数据,数据来源。数据来源可以是主机目录,或者是之前创建的数据源。之后便可以部署MXNet框架任务,部署过程是非常方便的。

澳门新葡亰平台官网 20

3.基于Docker使用NVIDIA GPU CLOUD部署

我们还可以使用开源Docker部署NVIDIA GPU CLOUD镜像。NVIDIA GPU
CLOUD实际上是一个开放的深度学习的容器镜像的仓库。我们可以通过安装最新的Docker,以及安装nvidia-docker的插件,之后注册NGC,pull最新的MXNet容器镜像。在MXNet容器镜像当中,NVIDIA装了最新的CUDA
Driver,最新的深度学习加速库cuDNN,以及多GPU加速库NCCL等。所以我们可以使用已经优化好的整套软件来部署到系统之上。

4.一个简单MXNet单机训练任务的运行例子

1)选择一个单机图像分类模型的训练作为示例

2)选择CNN网络Inception-v3,选择Imagenet数据集

3)Github下载最新的MXNet源码,并且在Example中找到图像分类

4) 并执行命令,运行train_imagenet.py(这是一个性能benchmark):python
train_imagenet.py –benchmark1 –gpus 0 –network inception-v3
–batch-size 64 –image-shape 3,299,299 –num -epochs 1 –kv-store local

运行效果如下图中所示,我们可以发现运行之后屏幕会实时打印出当前运行的性能及精度,性能单位:每秒处理的图像张数。

澳门新葡亰平台官网 21

三、阿里云上的MXNet性能实践 

1.阿里云GPU服务器MXNet性能数据

首先来看单GPU性能数据,选择Inception-V3网络,用MXNet在ImageNet数据集上做图像分类模型训练的Benchmark性能测试。从下图中的测试数据来看,我们发现搭载V100的GN6实例因为使用TensorCore混合精度,性能接近搭载P100的GN5实例的3倍。可以看到由于NVIDIA每年在GPU硬件上的性能巨大的提升,使得在GPU上运行深度学习的速度大幅度提升。

澳门新葡亰平台官网 22

之后看单机多GPU性能数据,使用GN5(P100)8卡实例,同样测试了MXNet的图像分类模型训练的单机扩展性。从下图中发现AlexNet,GoogleNet,Inception-V3和ResNet152等四种经典的卷积神经网络测试当中,单机多卡接近线性加速。这证明了MXNet在单机的扩展性上的确非常优秀。

2.KVStore策略对性能的影响

在第一部分有提到KVStore是MXNet数据通讯的模块。KVStore策略对最终性能有巨大影响。深度学习过程有两部分组成,前向和后向。前向指的是通过正向运算取得结果,然后利用损失函数,计算结果与基准结果的偏差,再对偏差进行反向求导,计算偏差减小的最大梯度方向,在最大梯度方向减少偏差从而更新新的权值,再利用新的权值运算新的结果。不断反复迭代运算,最终结果会无限逼近最终想要达到的基准结果。那么在迭代运算的过程当中,会涉及到两个主要数据流向。并行计算当中,会有很多的设备。以GPU为例,就是有很多GPU
worker,每个workers计算完自己的梯度之后要汇集到一起合成完整梯度,所以会有梯度聚合的梯度流向。第二个数据流向,计算完梯度后,在梯度反向对网络权值进行更新,之后更新后的权值会更新到每个GPU
worker上。

KVStore的不同参数主要是两个不同数据流向的选择,目前的KVStore可以支持local和device两种参数,在1.0版本之后,新增了nccl参数。

1)local:所有的梯度都拷贝到CPU内存完成聚合,同时在CPU内存上完成权值的更新并拷贝回每个GPUworker。这种方式主要在于CPU与GPU,主要的性能负载在于CPU拷贝的负载。

2)device:梯度聚合和权值更新都在GPU上完成。GPU之间的如果支持Peer to
Peer通信(PCIe or
NVLink),将避免CPU拷贝的负载,可以大大减轻CPU的负担,仅受限于通信带宽。PCIe
与NVLink通信带宽不同,NVLink具备告诉的Peer to Peer通信带宽

3)ccl:1.0版本后新增,类似于device,利用NVIDIA的NCCL通信库,相比device,会有潜在的性能提升(尤其是针对NVLink有特别优化),但是NCCL本身会消耗GPU资源,所以往往GPU数量较多时效果明显,目前MXNet对NCCL的支持还属于实验版本,在PCIe上的效果并不好。从下图数据来看,对于Inception-V3网络来说,使用local参数性能最优,使用device较差,nccl最差。当然因为nccl对于NVLink有特别优化,后续阿里云上会推出最新NVLink版本的V100的实例。可以期待在新的设备之上,会有更优的表现。

澳门新葡亰平台官网 23

3.分布式通信性能

前面提到的都是单机通信,主要取决于通信基础设施,比如PCle和NVLink带宽。在多机通信中性能主要瓶颈在于网络通信。普通的我们使用的以太网因为通信延迟的原因,会大大影响多机扩展性。从下图中可以看到,InfiniBand(IB)网络和RoCE网络因为支持RDMA,大大降低了通信延迟,相比之下,20G的以太网格延迟会大大提升。为了改善延迟,阿里云超级计算机集群使用InfiniBand或者RoCE网络,支持GPURDMA,可以大大降低延迟,增加多机扩展性。

当然,对于现有的普通以太网络,也可以通过别的方法优化通信带宽的减少,比方说梯度压缩。通过梯度压缩,减少通信带宽消耗的同时,保证收敛速度和精度不会有明显下降。MXNet官方提供了梯度压缩算法,按照官方数据,最佳的时候可以达到两倍的训练速度提升,同时收敛速度和精度的下降不会超过百分之一。

澳门新葡亰平台官网 24

本文由云栖志愿小组董黎明整理,编辑百见

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图