Posts

Showing posts from July, 2019

Microsoft实习手记第二篇 Distributed Tensorflow

Image
分布式机器学习目前主要有两种实现: Allreduce 和 参数服务器 差别主要在于参数的更新同步模式,Allreduce中各个机器的参数是同步更新的(synchronized),参数服务器的话可以选择BSP ASP SSP各种同步模式[1]。 目前我所接触的工业界想要做的是用参数服务器做数据并行。 Tensorflow的API经常变更,现在也处于一个2.0在beta测试的时间节点。很多设计以及API都在一个更迭时期。这里记录一下怎么在一个分布式环境下用Tensorflow实现参数服务器,本文不会讨论对参数服务器的优化,背后原理,收敛证明等。(本文保质期会很短)

Microsoft实习手记第一篇 Kubernetes

Image
0x00 在实习的第一个Sprint,了解了组里的业务,我这块主要建立在k8s集群上,在这个之上构建分布式机器学习的平台。 由于之前只接触过本机的docker,一时之间触及k8s集群还是有点懵,这里记录些工具和概念。 0x01 概念 k8s集群中的机器们被分成两种 Master Server 和 Kubernetes Node. ref:  https://www.cnblogs.com/menkeyi/p/7134460.html “Node是Kubernetes中的工作节点,最开始被称为minion。一个Node可以是VM或物理机。每个Node(节点)具有运行 pod 的一些必要服务,并由Master组件进行管理,Node节点上的服务包括Docker、kubelet和kube-proxy” ----say by  here 这里引入了一个新的概念Pod。 一言以蔽之:“Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程” ----say by here 这里的Pod里面运行着具体的container,终于触碰到我的已有认知了,这里的container就是docker概念里的那个,通过image产生的实例. Pod : 为什么说Pod是k8s创建或部署的最小单位呢?因为它不直接控制container。一个pod可以包含一个或者多个container,然后k8s直接控制的是pod。在我接触的case中,一个pod包含了多个container,其中一个是负责业务逻辑的,另外的会负责pull data, pull code dependancy..., 以及挂载存储等等。 因为单个pod是一个脆弱的资源,可能因为某些原因crash。对于集群来说需要有个东西来维护它的扩展,重启等等事情。这部分工作不是pod自己来做的,而是交给Controller。 Controller : 可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。例如,如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node上。包含一个或者多个Pod的Controller示例: Deployment StatefulSet Daem