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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 利用阿里云容器服务打通TensorFlow持续训练链路

本系列将利用Docker和阿里云容器服务,帮助您上手TensorFlow的机器学习方案

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

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

tensorflow_serving

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

  1. 机器学习过程中从系统到应用的监控,其中包括

    1. 整体计算资源特别是GPU的使用情况:使用率,内存,温度
    2. 每个机器学习应用的具体使用资源情况
    3. 机器学习过程的可视化
  2. 快速高效的问题诊断
    通过集中化日志的管理控制台进行轻松的一站式问题诊断
  3. 一键式的失败恢复

    1. 从失败节点调度到可用节点
    2. 分布式存储保存计算中的checkpoint,可以随时在其它节点继续学习任务
  4. 模型的持续改进和发布

    1. 利用分布式存储将模型无缝迁入生产环境
    2. 蓝绿发布
    3. 模型回滚

下面我们就展示一下利用阿里云容器服务快速的搭建一套从模型学习到发布的过程,这会是个逐步迭代不断优化的方案.我们后面的文章会不断迭代优化这一方案,希望容器服务在应用交付和运维方面的经验帮助数据科学家们专注于机器学习价值本身,进而提供最大的价值。目前我们的方案运行在CPU机器上,未来待HPC与容器服务的集成完成后,这个方案非常容易迁移到HPC容器集群。

机器学习生产线的搭建

前期准备

  1. 创建阿里云容器服务,参考https://yq.aliyun.com/articles/3054
  2. 创建OSS数据卷,这个具体步骤可以参考文章https://yq.aliyun.com/articles/7581
  3. 创建阿里云日志服务,具体步骤可以参考https://yq.aliyun.com/articles/9068

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

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

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

  1. 首先确认OSS数据卷mnist_model被创建出来了, 并且要在mnist_model创建Minst_data文件夹,并下载所需的训练集与测试集数据
文件 内容
train-images-idx3-ubyte.gz 训练集图片 - 55000 张 训练图片, 5000 张 验证图片
train-labels-idx1-ubyte.gz 训练集图片对应的数字标签
t10k-images-idx3-ubyte.gz 测试集图片 - 10000 张 图片
t10k-labels-idx1-ubyte.gz 测试集图片对应的数字标签

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

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
25天前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
2月前
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
262 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
3月前
|
机器学习/深度学习 算法 TensorFlow
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
54 0
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
|
3月前
|
Kubernetes 监控 调度
阿里云容器服务ACK
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)提供高性能、可伸缩的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理。在ACK中,利用cGPU(Containerized GPU)技术可以实现GPU资源的共享,提高GPU利用率,降低整体成本。
66 6
|
20天前
|
弹性计算 缓存 Kubernetes
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
弹性容器实例是阿里云的云服务器产品,使用弹性容器实例之后,用户无需管理底层 ECS 服务器,只需要提供打包好的镜像,即可运行容器,与阿里云容器服务无缝对接并仅为容器实际运行消耗的资源付费。本文介绍了阿里云弹性容器实例的、功能特性、产品优势及应用场景。
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
|
2月前
|
机器学习/深度学习 人工智能 API
人工智能应用工程师技能提升系列2、——TensorFlow2——keras高级API训练神经网络模型
人工智能应用工程师技能提升系列2、——TensorFlow2——keras高级API训练神经网络模型
30 0
|
2月前
|
Kubernetes 监控 Cloud Native
阿里云云原生容器高级工程师认证(ACP级-Alibaba Cloud Certification Professional)考试大纲
介绍阿里云云原生容器高级工程师认证(ACP级-Alibaba Cloud Certification Professional)所需具备的知识及学习方法等。
169 2
|
3月前
|
存储 机器学习/深度学习 人工智能
基于Megatron-Core的稀疏大模型训练工具:阿里云MoE大模型最佳实践
随着大模型技术的不断发展,模型结构和参数量级快速演化。大模型技术的应用层出不穷。大模型展现惊人效果,但训练和推理成本高,一直是巨大挑战。模型稀疏化能降低计算和存储消耗。近期以Mixtral为代表的MoE(多专家混合)大模型证明了稀疏MoE技术能大幅降低计算量、提升推理速度,模型效果甚至超过同规模稠密模型。阿里云PAI和NVIDIA团队深入合作,基于Megatron-Core MoE框架,解决了MoE大模型训练落地时会遇到的可拓展性、易用性、功能性以及收敛精度等核心问题,在下游任务上取得了很好的模型效果。
|
3月前
|
人工智能 运维 Kubernetes
期待已久!阿里云容器服务 ACK AI 助手正式上线
期待已久!阿里云容器服务 ACK AI 助手正式上线
|
3月前
|
Kubernetes 容器
要获取ACK(阿里云容器服务)集群中的Deployment
要获取ACK(阿里云容器服务)集群中的Deployment【1月更文挑战第8天】【1月更文挑战第40篇】
64 4

相关产品

  • 容器计算服务