在SkyForm ECP上运行深度学习框架
Posted 天云软件SkyForm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SkyForm ECP上运行深度学习框架相关的知识,希望对你有一定的参考价值。
作者 | 张伟、 马巍娜
深度学习框架简介
近两年随着AlphGo的走红,深度学习技术已然成为最流行技术中的佼佼者,各种开源的深度学习框架也层出不穷,其中Tensorflow、MXNet和Caffe等凭借易部署、易上手、灵活性高等特点大大降低了深度学习技术的入门门槛。
Tensorflow、MXNet和Caffe的简单对比如下表:
随着训练任务的复杂度不断提高,训练数据的规模不断扩大,深度学习框架的集群方案受到用户越来越多的关注。在大规模的集群环境下,对所有的机器、任务等进行管理是一项繁琐的工作,尤其是TensorFlow,每次启动任务必须登录到每台机器上执行启动命令,这种使用方式尤为不便。容器集群技术为简化这些工作提供了新的思路。
SkyForm ECP简介
SkyForm ECP是一个开放的、基于容器技术的应用集群管理平台。SkyForm ECP内置丰富的容器镜像及通用中间件基础服务,结合强大的应用编排功能,可以帮助企业在已有的IT基础架构之上快速构建出大规模具有弹性的应用系统,提高业务效率,降低IT成本,从繁杂的基础架构管理中解脱,更加专注于业务。
SkyForm ECP把每一种深度学习框架看做一个应用模板封装在应用市场中,通过配置一些自定义参数,可以一键创建符合自己需求的深度学习框架集群。
TensorFlow与SkyForm ECP集成
TensorBoard是SkyForm ECP中的一个RC实例,有对应的service对外部提供服务。它可以加载训练任务中产生的log,用来展示训练过程中的数据变化、记录训练过程中的图像、音频等等。
Tensorflow-Serving也是SkyForm ECP中的一个RC实例,它用来加载训练好的模型,将训练好的机器学习模型部署到线上,使用 gRPC 作为接口接收外部调用。同时Tensorflow-Serving支持模型热更新与自动模型版本管理。
整体的框架如下图所示:
整体的工作流程是一个循环迭代的过程,主要包括启动训练任务、保存模型、提供服务、优化Code、重新训练等几个阶段。
具体的流程细节如下图所示:
准备工作:创建共享存储,上传训练代码、训练数据到共享存储的特定目录。
Step1. 启动训练任务。指定需要的ps个数、资源大小等信息,worker个数、资源大小等信息,以及TensorBoard提供service的信息。(如果只有部分ps或者worker启动,已经启动的组件会持续等待其它组件正常启动,然后执行训练任务。TensorBoard是一个独立的组件,不受其它组件影响)。
Step 2. 保存训练好的模型、输出日志等信息到共享存储上。
Step 3. Tensorflow-serving加载训练好的模型(模型版本是1),对外提供服务。
Step 4. 外部用户通过Tensorflow -serving接口提交请求,获取响应结果。
Step 5. 开发人员通过反馈优化训练代码。
Step 6. 使用优化后的代码重新提交训练任务。
Step 7. 保存新的模型和输出日志等信息到共享存储上。
Step 8. Tensorflow-serving热加载新版本的模型(模型版本是2),对外提供服务。
Step 9. 外部用户通过Tensorflow -serving接口提交请求,Tensorflow -serving内部使用模型版本2处理请求。
MXNet与SkyForm ECP集成
MXNet和SkyForm ECP集成的原理与TensorFlow类似,此处不做过多介绍。需要注意的是MXNet可以使用ssh、mpirun等方式组建集群, SkyForm ECP平台使用的是ssh方式,在MXNet的基础镜像要配置ssh免密钥登录,在启动任务的时候指定使用ssh方式组建集群。
运行结果展示
本节以TensorFlow为例,展示深度学习框架在SkyForm ECP上的运行结果。
1、准备工作,上传代码和训练数据到共享存储:
2、创建TensorFlow集群:
在应用市场中选择TensorFlow,修改自定义参数(包括启动命令、使用的共享存储、是否启动TensorBoard、ps和worker的副本数、每种资源的资源需求等):
测试例子中选择的Tensorflow模板版本是0.1.0,启用TensorBoard,部署成功后可以看到应用下包含TensorBoard,tensorflow-ps和tensorflow-worker三个子服务,其中TensorBoard的类型是replication controller,包含一个外部端口可以从外部访问服务,tensorflow-ps和tensorflow-worker的类型是job,ps的副本数和worker的副本数都是2。
3、使用TensorBoard外部端口访问服务:
4、在应用市场中选择TensorFlow Serving,修改自定义参数(包括副本数、日志文件目录等),启动TensorFlow Serving(可动态扩缩Serving的副本数):
5、测试model:
—end—
以上是关于在SkyForm ECP上运行深度学习框架的主要内容,如果未能解决你的问题,请参考以下文章
在 Jetson nano 和 jetson xavier 上运行 Nvidia-docker 以实现 tensorflow 等深度学习框架