TensorFlow on Kubernetes

< > >
作者:王滔

TensorFlow,GitHub,70k +星星,Kubernetes GitHub 27k +明星都是各自领域中的两个领导人。从tensorflow运行的角度,梳理和思考融合其中,看看有什么可以产生火花。
> >强> 1。分布式tensorflow <H2>
四月,
2016,TensorFlow发布了0.8版,公布了分布式计算的支持,我们称之为分布式TensorFlow。

这是一个非常重要的特征,因为在人工智能、大数据领域,训练数据的尺寸通常让人瞠目结舌,提到如谷歌大脑实验室公布了今年的“非常大神经网络的sparsely-gated mixture-of-experts层”的弹性模量可以达到680亿层模型参数表,这样一个复杂的模型,如果只有一个单一的训练,这是难以接受的时间。通过分布式tensorflow,多个服务器可以用于建造TensorFlow Cluster大大提高训练效率。
< >
整个系统涉及以下核心组件:

  • TensorFlow:1.3.0
  • Kubernetes:1.62
  • 泊坞窗:1.12.6
  • GlusterFS:3.10.5
  • 港:1.1.2
  • Contiv netplugin:0.1-12-23-2016.19-44-42 UTC 。
  • 简单:1.3.5
  • Haproxy:1.7.8
  • etcd2:2.3.7
  • etcd3:3.2.1

    网络方案:contiv + OVS + <br / netplugin VLAN
    日志格式:fluentd +卡夫卡+沙+ Kibana
    监测方案:cadvisor +普罗米修斯+ grafana


    CAAS的细节不在这里讨论,但这是一个非常熟悉的方案。
    > >强> 5。演示 >
    我们可以参考凯尔

    https: / / GitHub。COM /凯仁/ workshop413 ”,他在这里与NFS作为后端存储,你需要改变你的记忆,你试试,我不会一步一步,好无聊。

    这个演示,我改变nodeport模式揭露Jupyter Nodebook,并输入正确的令牌时登录:


    < > >

    这是一个简单的演示,实际使用中,各种PS,自动生成相应的Kubernetes YAML的工人,PVC,使用域名服务,或者如果你使用的IP,你可能需要使用POD ProStart钩任务IP每个反馈,这将是更多的麻烦。
    > >强> 6。思考 > >
    在社区中,很多人都在讨论这个过程。(问题4173),与Kubernetes的结合,我们可以简单地完成回收PS过程的目的。

    一:DevOps的TAAS模块,每个tensorflow集群启动协程,检查计数器达到职工人数(工人作业,看工作成功,下来后,计数器就增加1),如果数等于工人,是训练结束后,对服务器的API调用Kubernetes PS部署/服务接口将被删除后等待30s,实现PS。


    q:工作人员是无状态的,ps是有状态的,ps无法执行检查点。如何训练保存和恢复?

    一:工人是无状态的,但tf.train.saver提供开展检查工作的能力。一般原则是从ps任务中一个接一个地获取参数,并且保存是持久的。

    问:如何让用户指定一个小数目,如PS和工人数量自动生成Kubernetes YAML的参数?

    答:因为目前我们没有前端门户TaaS,所以金贾的模板自动生成。tensorflow /生态/ Kubernetes可以用来生成Kubernetes YAML PS只有通过指定参数少的工人。

    ,例如,是下面的一个例子,tfcluster_template.yaml.jinja,用户只需要关注前4项。
    {~集名称=“Imagenet”% } #算法。
    { %集worker_replicas = 3 - % } #职工人数
    { %集ps_replicas = 2 - % } # PS数
    HTTP下载设置脚本路径{ % =“http:/ / XXX,XX,XX,XXX:80 / ImageNet / ImageNet .py”% } #算法脚本
    {~集图像% } =“tensorflow / tensorflow:1.3.0”
    { %集data_dir % } =“/数据”
    { %集log_dir % } =“日志”
    {设置端口- % = 2222
    { %集副本= {“工人”:worker_replicas“PS”,:ps_replicas } % }
    {~宏(worker_hosts)% }
    {~我在范围(worker_replicas)% }
    {~如果不loop.first % },{ % endif % }
    名称} -工作人员{ {我} }:转向端口}
    {~ENDFOR % }
    {~endmacro % }
    {~宏(ps_hosts)% }
    {~我在范围(ps_replicas)% }
    {~如果不loop.first % },{ % endif % }
    名称} - ps { {我} }:转向端口}
    {~ENDFOR % }
    {~endmacro % }
    {“%”-用于“工作”、“ps”“% }”中的作业
    { -我在范围(副本[作业])- % }
    类型:服务
    apiversion:V1
    元数据:
    名称

    资料全部来自网络,如果有问题可以发邮件到站长邮箱