zl程序教程

您现在的位置是:首页 >  其他

当前栏目

利用阿里云容器服务打通TensorFlow持续训练链路

训练容器阿里服务 利用 持续 Tensorflow 链路
2023-09-14 09:00:29 时间

本文是该系列中的第三篇文章, 将为您介绍如何利用阿里云的服务快速搭建TensorFlow从训练到服务的交付平台。

随着google开源TensorFlow的脚步越来越迅猛,机器学习已经渐渐由昔日王谢堂前燕,飞入寻常百姓家。如何把机器学习的成果,迅速转化成服务大众的产品。以TensorFlow为例,一个典型的交付流程,就是TensorFlow根据输入数据进行模型训练,待训练结束和验证确定后,模型会被发布到TensorFlow Serving,就可以为大众服务了。如果能像流水线生产一辆汽车一样来实现机器学习的产品化,听起来是不是让人激动不已?

tensorflow_serving

但是理想很丰满,现实很骨感,一个完整可用的机器学习生产线并不是只有TensorFlow和TensorFlow Serving就够用的,如果希望这个过程更加高效和自动化,它还需要在一些基础架构层面的支持,比如:


从失败节点调度到可用节点 分布式存储保存计算中的checkpoint,可以随时在其它节点继续学习任务

有了这些服务,我们就可以在阿里云容器服务上和机器学习愉快的玩耍了,我们使用的例子是机器学习界的Helloworld --- MNIST

MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片:
MNIST

它也包含每一张图片对应的标签,说明这个是数字几。比如,上面这四张图片的标签分别是5,0,4,1

首先确认OSS数据卷mnist_model被创建出来了, 并且要在mnist_model创建Minst_data文件夹,并下载所需的训练集与测试集数据

2. 用如下的docker-compose模板在阿里云上一键部署TensorFlow Learning的环境,

version: 2

services:

 tensor:

 image: registry-vpc.cn-hangzhou.aliyuncs.com/cheyang/mnist-export

 command:

 - "python" 

 - "/mnist_export.py"

 - "--training_iteration=${TRAIN_STEPS}"

 - "--export_version=${VERSION}"

 - "--work_dir=/mnist_export/Minst_data"

 - "/mnist_export/mnist_model"

 volumes:

 - mnist_model:/mnist_export

 labels:

 - aliyun.log_store_mnist=stdout

 environment:

 - CUDA_VISIBLE_DEVICES=-1

注:

aliyun.log_store_mnist 指示会把日志导入到阿里云的日志服务中,在这里默认是从stdout导入

Volumes使用的就是容器服务的OSS数据卷

由于我们的测试环境是搭建在VPC环境,所以使用的docker image都是需要访问阿里云的vpc registry

在阿里容器服务中创建应用时,就会弹出对话框,里面需要输入的是模型版本和训练参数,我们输入的模型版本为1和训练参数为100

train_config

有了aliyun.log_store_mnist,就可以在阿里云的日志服务中看到整个学习过程, 方便问题的分析和诊断
train_log

当学习任务完成后,可以登录到服务器上看到学习出来的模型

sh-4.2# cd /mnist/model/

sh-4.2# ls

00000001

3. 现在需要做的事情就是启动一个TensorFlow Serving把学习出来的模型发布到生产环境,这里提供如下的docker-compose模板

version: 2

services:

 serving:

 image: registry-vpc.cn-hangzhou.aliyuncs.com/denverdino/tensorFlow-serving

 command:

 - "/serving/bazel-bin/tensorFlow_serving/model_servers/tensorFlow_model_server"

 - "--enable_batching"

 - "--port=9000"

 - "--model_name=mnist"

 - "--model_base_path=/mnist_model"

 volumes:

 - mnist_model:/mnist_model

 labels:

 - aliyun.log_store_serving=stdout

 ports:

 - "9000:9000"

 environment:

 - CUDA_VISIBLE_DEVICES=-1

注:

这里TensorFlow Serving和TensorFlow Learning通过分布式存储共享学习模型(这里用的是OSS,其实更换成NAS数据卷也是非常容易的)

4. 可以在日志服务中直接查看一下TensorFlow Serving的日志,发现版本1的模型已经加载到了serving中了

serving_log

同时需要查看一下该服务的Endpoint,在这里TensorFlow Serving的Endpoint是10.24.2.11:9000。当然我们还可以将服务发布到SLB上,这在文章利用Docker和阿里云容器服务轻松搭建TensorFlow Serving集群中已经有了比较详细的描述,就不在本文中赘述了。

serving_port

5. 为了验证TensorFlow Serving,需要部署一个测试的客户端,下面是测试客户端的docker-compose模板

version: 2

services:

 tensor:

 image: registry-vpc.cn-hangzhou.aliyuncs.com/denverdino/tensorFlow-serving

 command:

 - "/serving/bazel-bin/tensorFlow_serving/example/mnist_client"

 - "--num_tests=${NUM_TESTS}"

 - "--server=${SERVER}"

 - "--concurrency=${CONCURRENCY}"

创建应用的时候就会需要输入测试次数NUM_TESTS,TensorFlow Serving的EndpointSERVER,以及并发访问量CONCURRENCY

client_config

当应用创建完成后,可以看到运行结果如下,我们发现这时候的错误率是13.5

serving-client_tensor_1 | 2016-10-11T12:46:59.314358735Z D1011 12:46:59.314217522 5 ev_posix.c:101] Using polling engine: poll

serving-client_tensor_1 | 2016-10-11T12:47:03.324604352Z (Extracting, /tmp/train-images-idx3-ubyte.gz)

serving-client_tensor_1 | 2016-10-11T12:47:03.324652816Z (Extracting, /tmp/train-labels-idx1-ubyte.gz)

serving-client_tensor_1 | 2016-10-11T12:47:03.324658399Z (Extracting, /tmp/t10k-images-idx3-ubyte.gz)

serving-client_tensor_1 | 2016-10-11T12:47:03.324661869Z (Extracting, /tmp/t10k-labels-idx1-ubyte.gz)

serving-client_tensor_1 | 2016-10-11T12:47:04.326217612Z ........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

serving-client_tensor_1 | 2016-10-11T12:47:04.326256766Z Inference error rate: 13.5%

serving-client_tensor_1 | 2016-10-11T12:47:04.326549709Z E1011 12:47:04.326484533 69 chttp2_transport.c:1810] close_transport: {"created":"@1476190024.326451541","description":"FD shutdown","file":"src/core/lib/iomgr/ev_poll_posix.c","file_line":427}

6. 为了提升识别效果,就需要调整参数重新运行一次TensorFlow Learning应用重新发起一次训练.可以直接在容器云服务的页面点击变更配置

application

这时会弹出对话框,里面需要输入的是模型版本和训练参数,我们输入的模型版本为2和训练参数为2000

config_change

当学习完成后,再次查看NAS服务器,发现多了一个新的模型

sh-4.2# pwd

/mnist/model/

sh-4.2# ls

00000001 00000002

而这个时候查看TensorFlow Serving的日志,就会发现模型已经更新到了版本2

serving_log

此时重新运行测试客户端,可以发现错误率降低到8.5%,看到新的模型在识别能力上有一定的提升

serving-client_tensor_1 | 2016-10-11T16:54:34.926822231Z D1011 16:54:34.926731204 5 ev_posix.c:101] Using polling engine: poll

serving-client_tensor_1 | 2016-10-11T16:54:37.984891512Z (Extracting, /tmp/train-images-idx3-ubyte.gz)

serving-client_tensor_1 | 2016-10-11T16:54:37.984925589Z (Extracting, /tmp/train-labels-idx1-ubyte.gz)

serving-client_tensor_1 | 2016-10-11T16:54:37.984930097Z (Extracting, /tmp/t10k-images-idx3-ubyte.gz)

serving-client_tensor_1 | 2016-10-11T16:54:37.984933659Z (Extracting, /tmp/t10k-labels-idx1-ubyte.gz)

serving-client_tensor_1 | 2016-10-11T16:54:39.038214498Z ........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

serving-client_tensor_1 | 2016-10-11T16:54:39.038254350Z Inference error rate: 8.5%

serving-client_tensor_1 | 2016-10-11T16:54:39.038533016Z E1011 16:54:39.038481361 68 chttp2_transport.c:1810] close_transport: {"created":"@1476204879.038447737","description":"FD shutdown","file":"src/core/lib/iomgr/ev_poll_posix.c","file_line":427}

PS:整个工作流程中,我们并没有SSH登录到任何主机上,完全是在容器服务管理平台上操作的。

这仅仅是一个开始,TensorFlow和TensorFlow Serving也仅仅是一个描述阿里云容器服务对于高性能计算支持的一个例子,在本节中,我们通过OSS实现了从把学习出的模型交付到对外服务,并且实现了模型的迭代,同时又利用日志服务一站式查看容器工作日志。这种方式只是实现了最基本的持续学习持续改善的概念,在生产环境还需要更加严格的验证和发布流程,我们将在未来文章中,介绍我们的方法和实践。

阿里云容器服务还会和高性能计算(HPC)团队一起配合,之后在阿里云上提供结合GPU加速和Docker集群管理的机器学习解决方案,在云端提升机器学习的效能。

想了解更多容器服务内容,请访问 https://www.aliyun.com/product/containerservice


AI训练性能提升30%,阿里云发布GPU计算裸金属实例ebmgn7ex ChatGPT、AIGC(人工智能生成内容)等技术潮流快速兴起,让普通人也感受到了人工智能技术应用落地对用户体验带来的巨大改变。应用的快速落地,离不开背后基础设施的支撑。人工智能模型的训练场景,往往要求高算力、高吞吐、低延时,可以大大加快训练速度,加速模型迭代。
基于阿里云eRDMA的GPU实例大幅提升多机训练性能 2023年3月23日14:00(中国时间),NVIDIA GTC开发者大会,阿里云开发者社区观看入口正式开放,阿里云高级技术专家李伟男;阿里云弹性计算产品专家宋迪共同带来了题为《基于阿里云eRDMA的GPU实例大幅提升多机训练性能》的分享
基于阿里云弹性GPU服务的神龙AI加速引擎无缝提升AI训练性能 2023年3月23日14:00(中国时间),NVIDIA GTC开发者大会阿里云开发者社区观看入口正式开放,阿里云高级技术专家林立翔带来了题为《基于阿里云弹性GPU服务的神龙AI加速引擎无缝提升AI训练性能》的分享。
QCon大会精彩分享:数据湖、可观测、自动驾驶训练,阿里云存储独家技术详解与案例实践! QCon 全球软件开发大会是由极客邦科技旗下 InfoQ 中国主办的综合性技术盛会,每年在伦敦、北京、纽约、圣保罗、上海、旧金山召开。自2007年3月份开始举办以来,已经有超万名有多年从业经验的技术人员参加过QCon大会。QCon 内容源于实践并面向社区,演讲嘉宾依据热点话题,面向5年以上工作经验的技术团队负责人、架构师、工程总监、开发人员分享技术创新和实践。
阿里云PAI-DSW入门学习:基于官方文档训练文本分类模型 EasyTransfer旨在帮助自然语言处理(NLP)场景的迁移学习开发者方便快捷地构建迁移学习模型。本文以文本分类为例,介绍如何在dsw中训练出文本分类模型
阿里云机器学习平台PAI与香港大学合作论文入选INFOCOM 2022,有效减少大规模神经网络训练时间 近日,阿里云机器学习平台 PAI 与香港大学吴川教授团队合作的论文”Efficient Pipeline Planning for Expedited Distributed DNN Training”入选INFOCOM(IEEE International Conference on Computer Communications) 2022,论文提出了一个支持任意网络拓扑的同步流水线并行训练算法,有效减少大规模神经网络的训练时间。
阿里云机器学习平台PAI-AI行业插件-视觉模型平台OCR模型训练使用简明教程 AI行业插件提供视觉模型训练插件和通用模型训练插件,他们支持在线标注、自动模型训练、超参优化及模型评估。您只需要准备少量标注数据,并设置训练时长,就可以得到深度优化的模型。同时,插件平台与PAI-EAS高效对接,可以快速将训练模型部署为RESTful服务。视觉模型训练插件支持视觉领域常用模型的标注、训练及发布,并针对移动端场景进行了模型深度优化,您可以通过手机扫码快速体验模型效果,也可以将模型进行服务端部署。本文着重讲述OCR文字识别使用简明教程
必嘫 阿里云技术专家,在应用性能监控和软件交付方面有丰富的实践经验,目前专注于容器服务,微服务以及机器学习等领域。