在人工智能火爆的今天,几行代码可以做什么?

百家 作者:QingCloud 2018-03-01 14:08:27

人工智能(AI)是依靠海量数据从而归纳、学习产生的学科;处理海量数据是云计算「天生」的能力。AI 和云计算的关系非常紧密,利用云计算的特性,AI 得以爆发出更多潜力,那么如何将人工智能应用部署到云端?在云计算与人工智能结合时,给开发带来最大的便利?



海量的数据、非常强大的计算能力和很好的算法和模型是人工智能应用开发的主要影响因素。


现在比较流行的深度学习理论中的卷积神经网络、循环神经网络,其实都是比较传统的神经网络理论。那问题来了,为什么最近几年突然又火起来了呢?主要原因其实是近些年在海量的数据和计算能力方面有非常大的进展。


人工智能应用其实也是一个云端应用,那云端应用的现状是什么呢?



如今,很多的云厂商会在映像市场里提供很多不同类型的映像,用户如果需要某种应用,便会在市场里找到相应的映像,再由映像去创建虚拟机,使用虚拟机运行应用。他们把这种类型的应用叫云端应用。这是不是一种云端应用?其实是,但它是非常初级非常简陋的云端应用。


另外一种类型的应用就是大家熟知的 SaaS 应用。很多人会说 SaaS 应用更为方便,使用浏览器便可以登录,也无需要部署相关环境。以上观点是从用户的角度来讲,但如果从开发者的角度来说,通常 SaaS 应用是部署在云端的,同样会涉及到如何在云端部署和运维的问题?云端 SaaS 应用通常都是大规模分布式的应用,会有多个角色和多个节点,如果都是逐个手动根据映像创建出节点,然后在节点中部署服务,这会非常的麻烦。



基于前面提到的当前云端应用的现状和痛点,我们来看看一个典型云端应用的特性。


首先,它是大规模分布式的,会有多角色多节点。可能是一主一从,也可能是一主多从,或者多主多从。


其实,它是多层次一个应用可能是比较高层的一个 Web 服务,也可能是相对底层的 ES 集群或者 Hadoop 集群。


另一个特性是多类型。有的用户创建的云端应用专供自己使用;有的用户或者叫开发者会将应用发布到云端应用市场里,从而提供给更多的用户来用。


云端应用通常具有弹性伸缩的能力,弹性伸缩包括水平扩展和垂直扩展。拿内存或者 CPU 来说,可以扩大内存或者增加 CPU,当垂直扩展至极限,需要去增加节点进行水平扩展;同样如果资源富裕,也可以进行缩容操作。若通过映像市场逐个创建虚拟机的这种操作方式,会存在许多手动操作。比如说集群有几十个上百个节点,如果每个节点都去手动操作,是非常麻烦的。弹性伸缩的能力对于人工智能的应用来说很重要,很多人工智能应用会用到 GPU,这就涉及到如何管理 GPU 的扩容/缩容,如何添加/删除 GPU 节点。


再就是服务感知。比如一个具有一主多从架构的应用,如果主节点的一个配置变了,从节点需要快速响应,更改配置。


云端应用生命周期的管理是非常重要的,它包括应用的创建、删除、启动、停止、重启。而且对于分布式的大规模、多角色的应用,在启动过程中,还需要考虑到优先级的问题,是先启动主节点,还是先开启从节点。 同理,在关闭的过程中同样要注意相关顺序。


应用生命周期管理还包括健康检查和监控。要能感知应用服务的状态,如果应用服务状态出现问题时,应该采取什么措施,这些都是需要去考虑的。然后就是应用服务在运行过程中会暴露一些数据,比如性能参数会曝露出来,怎样能够让用户很方便地在云端观察到这些数据也是一个问题。


应用通常会有备份、恢复以及升级的需求,怎么去满足这些需求也是应用生命周期管理很重要的方面。接下来我们就看一下,如何开发一个云端应用:在传统方式中,开发人员首先会去研究云端的 API, 但是很多云厂商没有提供足够开放的 API , 只能联系厂商通过合作的方式获取私有 API。此外,还需要解决云端应用的部署、运维、计费等问题。但是,这些问题对于应用的开发者来说,过度消耗了开发者的精力,这是非常不友好的事情。


如果你是开发者并需要将你的 AI 应用发布到云端,那会涉及到另外一个问题:如何去管理应用的版本,如何上线、下线应用;应用该如何定价;如果用户在使用出现问题,他如何联系到开发者;开发者如何去根据用户的信息进行定位等问题。 


一个云端应用,只有满足了这些通用的需求,才能称作一个真正的云端应用。



接下来我们就看一下,如何开发一个云端应用:


在传统方式中,开发人员首先会去研究云端的 API, 但是很多云厂商没有提供足够开放的 API , 只能联系厂商通过合作的方式获取私有 API。此外,还需要解决云端应用的部署、运维、计费等问题。但是,这些问题对于应用的开发者来说,过度消耗了开发者的精力,这是非常不友好的事情。


云端应用开放平台


为了简化云端应用开发的成本,我们自 2016 年便着手开发云端应用开放平台,并在 2017 年的三月份公开发布。


青云QingCloud 云端应用开放平台 —— 让开发部署变得简单,使 AI 爆发出真正的潜力。


青云QingCloud 云端应用开放平台提供从开发部署,到日常运维、升级更新、版本控制、监控告警,直至最终下线退出的应用全生命周期管理功能,帮助合作伙伴有效管理应用服务的日常运行。同时,云端应用开放平台还提供包括计费、支付、财务报表、监控告警、工单系统、用户管理等一系列运营管理功能,为合作伙伴提供完善的商业运营支持。


云端应用开放平台 —— Framework



可以看到在 IaaS 层,是我们的软件定义网络 SDN、软件定义存储 SDS 以及虚拟主机、物理主机等服务。


在 IaaS 层之上是云端应用框架,抽象并提供一个典型云端应用应该具备的通用的特性,并以非常简单的方式暴露给开发者。


在云端应用框架的上层,是云原生应用(Cloud Native Applications)。它可以直接部署在 Virtual Machine、Docker、LXC 容器中,也可以部署到我们最近发布的物理主机 Bare Metal 中,并且用一致的方式来管理云端应用。在此之上,便是 AppCenter 2.0 的框架,在此框架中,我们提供了用户门户、开发者门户,可以方便地在其中进行部署和运维。


云端应用框架,它是连通底层资源供应与管理、中层调度与编排及上层应用管理的应用服务框架。


云端应用开放平台 —— 技术架构


那它的架构是怎么样的?其实包含很重要的两块:开发者控制台、用户控制台。我们把很多能力都封装到 framework 中,开发者只需做两件事,一个是创建应用的映像(VM 映像或者 Docker 映像);然后将配置文件上传到开发者控制台中,便创建了应用。用户在使用的过程中,通过 Metadata Service 服务将开发者上传的配置文件进行解析。与此同时,Metadata Service 服务也可以完成配置变更及服务感知。Metadata Service 服务(metad)基于 etcd 二次开发,并且已在 Github 中完成开源。



在云端应用服务框架之上,有许多由青云QingCloud 合作伙伴和青云QingCloud 开发的云端应用。应用覆盖多种类型,例如:人工智能应用、大数据平台、容器平台、物联网及区块链等。它们共同组成了应用市场,用户可直接在市场中下载应用使用。下图为 AI 应用市场截图:



开发和部署


部署应用



以 Face++ 为例,在 Web 端中,通过点击鼠标便可以完成应用的部署,无需一个个逐个操作,即可完成整个集群配置。


开发应用



在 Framework 框架层中,因为已经封装了很多通用的能力,所以只需定义两个配置文件以及创建一个映像,便可以完成应用的开发。



如上图所示,你只需简单书写 Json 语句,就可以使用云端的负载均衡器,无需调用云厂商 API 以及传参数等一系列复杂操作。在该文件中,它的类型(docker)、生命周期(service)、健康检查(health_check)等特性都可以通过语句定义。


深度学习平台


青云QingCloud 深度学习平台同样以应用的形式发布在云端应用开放平台之上,其最底层为 GPU, 在其之上是应用服务框架,在框架层之上为 GPU 需要的驱动如CUDA, cuDNN 以及 Python 数据包等。青云QingCloud 深度学习平台集成 TensorFlow, Caffe, PyTorch, Keras等框架。



目前,青云QingCloud 深度学习平台可使用 GPU 或 CPU 进行单机或分布式深度学习模型训练与推断,并可享受云计算弹性特性,按需进行横向、纵向扩展。另外配有 Jupyter notebook 前端开发环境,助力用户快速部署深度学习开发环境。同时,青云QingCloud 深度学习平台无缝对接 QingStor™ 对象存储,用户可存储海量训练数据到对象存储中;通过集成 QingStor™ 对象存储命令行工具,配置 QingStor™ 对象存储相关参数,可便捷地从 QingStor™ 对象存储中获取海量训练数据,完成模型的训练。



深度学习平台的开发



等同于云端应用的开发,我们可以通过 Json 语句定制 GPU 资源。


那么如何进行 AI 应用的运维呢?




通过日志系统,开发者可以方便进行应用的运维工作。当用户有问题,便可以通过工单系统提交问题,开发者可以直接进行处理。通过日志可以快速地定位客户的问题。


资源监控



通过 Web 页面,开发者可以直观地看出用户资源的使用情况,了解到每一个节点的使用情况。

云端 AI 应用解决方案


如何利用云端应用开放平台的应用,去做一个 AI 的解决方案呢?AI 应用开发大致分为两种类型:推断型及训练型。我们针对两种类型采用不同的解决方案:


推断型:



例如:某交通行业的客户,他需要将高速公路收费站拍到的车辆车牌信息保存在云端,同时,他要从云端把车牌识别出来,然后保存在数据库里。


我们通过异步数据处理框架配合云端应用开发平台中合作伙伴提供的人工智能应用来实现以上需求。当车牌信息上传到 QingStor™ 对象存储时,QingStor™ 对象存储就会触发一个事件到异步数据处理框架,异步数据处理框架便会调用我们后端的车辆检测识别服务。

鉴黄/鉴暴


QingStor™ 对象存储会存储很多视频、图片等内容,若手动检测其中是否不良信息是非常耗时耗力的。结合异步数据处理框架和我们的云端开放平台,能进行自动化处理,调用人工智能应用去查找黄色暴力视频、音频等不良内容。

训练型:



如何训练一个模型?举个例子来讲,如果想实时的根据数据训练模型,那么在云端需要一个 Kafka 集群,收集到实时的数据,通过 Spark Streaming 或者 Storm 进行数据清洗,在数据清洗完成之后,形成有价值的训练样本数据,再传到后端的深度学习平台更新模型。


What's next?



之后,我们会将 AI 的能力应用到运维中。例如,通过云平台产生的数据,通过 AI 来判断它的特征,预测将来的某一物理机或者某个区域会发生拥堵,预测哪些物理机它容易产生故障等问题,并提前做出预防和检测。


AI 与容器



在容器中,部署和训练 AI 应用已经不再稀奇。青云QingCloud 应用开放平台的开源版本 —— OpenPitrix 也将会支持 k8s, 支持应用以相同的方式部署到 k8s 中。


OpenPitrix 名字的由来 Pitrix =PaaS +IaaS + Matrix (应用矩阵)它将支持多云环境部署,例如:AWS、OpenStack、k8s 等。


青云QingCloud 希望通过应用开放平台,带给用户更好的体验。同时,欢迎大家将应用部署到我们平台中。丰富用户体验的同时,建立一个良好的行业生态。

- FIN -


关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接