Kubeflow,名字取自 Kubernetes + Tensorflow ,是 Google 为了支持
Tensorflow 的部署而推出的开源平台。Kubeflow 旨在使 Kubernetes
上的机器学习变的轻松、便捷、可扩展,其目标不是重建其他服务,而是提供一种简便的方式找到最好的
OSS 解决方案。Kubeflow 的目标是通过发挥 Kubernetes
的特长,从而更便捷地运用机器学习:

本文来自 网易云社区 。

春节小长假,走亲访友之余,还可以利用一些零碎的时间收集学习资料,给自己充充电,好在
2018 年成为更优秀的自己。我们知道在开源和贡献开源方面,Google
一直是行业的典范。2017
年它开源了哪些优秀的软件,有哪些值得我们借鉴学习呢?让我们一起来看下:

  • 在不同的基础设施上实现简单、可重复的便携式部署

  • 部署和管理松散耦合的微服务

  • 根据需求进行扩展

 

1、硬件加速的机器学习 JavaScript 库 DeepLearn.js

Kubeflow 于2017年底正式开源,并于2018年5月发布了首个 0.1
版本,之后陆续发布了 0.2、0.3 和 0.4 RC
版本。截至2018年12月18日,Kubeflow 已有 100 多个活跃成员,得到 30
多个组织的支持。

Dolphin
是猛犸平台里的一个机器学习功能模块,提供给数据科学家进行机器学习的算法开发、模型训练和服务发布,提供分布式全功能深度学习框架,易学易用,高效灵活,支持
Tensorflow、MXNet、Caffe、Spark
等多种机器或深度学习框架,最大可能的挖掘出数据的价值。

澳门新葡萄京官网首页 1

澳门新葡萄京官网首页 2

Dolphin 是基于 Kubernetes 和 Docker 构建的机器学习的底层架构,通过 OVS
(或 Calico)构建了容器的扁平化网络,通过 Harbor
进行容器管理,系统还实现了 GPU
监控管理、存储、日志、监控、权限管理等功能。

DeepLearn.js 是 Google 推出的一个可用于机器智能并加速 WebGL 的开源
JavaScript 库,完全在浏览器中运行,不需要安装,不需要后端处理。

Kubeflow 产品管理团队近日发布了 2018 年度回顾和 2019
新年计划,并表示目前正在努力让
Kubeflow 达到第一个主要版本 1.0 。这将是项目的一个重要里程碑,计划在
2019 年上半年准备就绪。

 

2、大型微服务系统管理工具 Istio

Kubeflow 1.0 的重点将围绕:

Architecture

澳门新葡萄京官网首页 3

 

  • 基础设施
    整个系统基础设施中包括了 GPU 和 CPU
    的混合计算服务节点,服务器之间通过 InfiniBand
    构建高速的数据交换网络,数据存储在 HDD 和 SSD 盘的 HDFS 文件系统中
  • 澳门新葡萄京官网首页,容器集群
    dolphin 通过 Docker
    对多种机器学习框架、用户开发环境进行实例化和运行,完全通过
    Kubernetes 提供计算集群的部署、维护、 扩展机制等功能
  • 计算框架
    Tensorflow 和 Kubernetes 均是由 Google 开源,Tensorflow
    可以原生态的支持 Kubernetes 的调度和监控管理。Kubernetes
    是高度可配置和可扩展的系统,我们通过扩展 CustomResourceDefinition
    实现 MXNet 等其他机器学习框架的接入
  • 开发平台
    数据科学家在开发平台进行数据管理、特征管理、可视化算法开发和计算流程图设计,一键式服务发布
  • 数据安全
    dolphin 具有字段级别的细粒度数据权限控制能力,能够对
    IMPALA、SPARK、HIVE 实现一致性的 SQL 执行权限校验和对应的 HDFS
    文件访问控制,保障了标签数据、训练数据和模型数据的数据安全
  • 任务管理
    开发了基于队列的任务调度系统,解决了 Kubernetes 没有队列服务的问题
    开发了计算节点的 GPU 监控服务,解决了 Kubernetes 目前无法监控 GPU
    的资源使用情况的问题
    开发了 Kubernetes 中训练服务的参数服务的生命周期管理模块,解决了
    Tensorflow 的参数服务在训练完毕无法自我关闭的问题
  • 监控中心
    通过 Heapster+Influxdb+Grafana 进行集群的监控,通过
    Fluentd+Elasticsearch+Kibana 进行日志的收集

 

Istio 是一个由谷歌、IBM 与 Lyft
共同开发的开源项目,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式。Istio
项目能够为微服务架构提供流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管理与策略等)创造了基础。这款软件利用久经考验的
Lyft Envoy
代理进行构建,可在无需对应用程序代码作出任何发动的前提下实现可视性与控制能力。Istio
项目是一款强大的工具,可帮助 CTO/CIO
们立足企业内部实施整体性安全、政策与合规性要求。

  • API 稳定;

  • PyTorch
    相关问题

  • TFJob
    相关问题

  • 强大的监控和日志记录

  • 扩展和负载测试

  • 集成超参数调优

  • 高级数据管理

Kubernetes Cluster

 

澳门新葡萄京官网首页 4

 

Master

  1. API Server:提供了资源对象的唯一 REST
    操作入口,其他所有组件都必须通过它提供的API来操作 NODE、POD、Service
    资源数据
  2. Controller Manager:作为集群内部的管理控制中心,负责集群内的
    Node、Pod
    副本、Endpoint、Namespace、服务账号、资源定额的管理,当某个 Node
    意外宕机时,Controller Manager
    会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态
  3. Scheduler:收集和分析当前 Kubernetes 集群中所有 Minion
    节点的资源(内存、CPU)负载情况,然后依此分发新建的 Pod 到 Kubernetes
    集群中可用的节点
  4. Etcd:保存了整个 Kubernetes 集群的状态

Minion

  1. Kubelet:节点上的 Pod 管家,负责 Node 节点上 pod
    的创建、修改、监控、删除等全生命周期的管理
  2. Proxy:解决外部网络能够访问跨机器集群中容器提供的应用服务

 

3、可自动生成命令行接口 Python Fire

往更高层面来说,Kubeflow
1.0 关注的重点包括:

Kubernetes Master

 

澳门新葡萄京官网首页 5

Python Fire 是 Google 开源的一个可从任何 Python
代码自动生成命令行接口的库。

  • 面向企业就绪

  • 改进部署和开发体验

  • 实现高级 ML 工作流程

  • 基础设施完善

  • ……

Kubernetes Node

澳门新葡萄京官网首页 6

简易示例:

更多细节可查阅:Kubeflow 2019
roadmap

Etcd – Distributed reliable key-value store

Etcd 服务发现是一个基于 Raft 协议的强一致性、高可用的键值对存储,用于
集群中的服务注册、监控服务健康状态 和共享服务配置,在 Etcd 中 存储了
kubernetes 集群所有的数据。

importfireclass Calculator:”””A simple calculator class.”””def
double(self, number):return2* numberif__name__ ==’__main__’:
fire.Fire(Calculator)

(文/开源中国)    

kubernetes NetWork Model

谷歌内部的基础设施已经保障了所有的容器之间通过平行网络实现互联互通,Kubernetes
预留了网络插件接口,由使用者自行构建网络,目前社区也给出了
Flannel、Calico、OVS
等网络方案,机器学习是一个计算密度型系统,对数据传输性能要求非常高,所以需要慎重考虑使用哪种网络模型。

  • Flannel:是使用桥接接口转发网络包的 overlay
    网络,从一个容器发往另一个容器的网络包将历经两个网络栈,网络传输性能存在一定的损耗,所以没有采纳该方案
  • Calico:是使用了基于 BGP 路由方式的网络模型,数据通过 Linux Kernel
    查找路由表直接转发到对方容器所在的宿主机,避免了 Flannel
    网络存在的数据从内核态到用户态的 2 次处理,效率损耗最小,Calico
    部署十分的方便快捷,非常适合在私有化的环境中进行部署使用
  • OVS:在公有云的部署直接使用网易云的 OVS 网络

 

然后,你可以运行:

Calico

澳门新葡萄京官网首页 7

  1. Felix,主要负责配置路由及ACLs等信息来确保endpoint的连通状态
  2. Etcd,主要负责网络元数据一致性,确保Calico网络状态的准确性
  3. BGPClient(BIRD),主要负责把 Felix 写入 kernel 的路由信息分发到当前
    Calico 网络,确保 workload 间的通信的有效性
  4. BGPRouteReflector(BIRD),大规模部署时使用,摒弃所有节点互联的 mesh
    模式,通过一个或者多个 BGPRouteReflector 来完成集中式的路由分发
  5. Calico 在每一个计算节点利用 Linux kernel 实现了一个高效的 vRouter
    来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的
    workload 的路由信息向整个 Calico
    网络内传播,小规模部署可以直接互联,大规模下可通过指定的
    BGProutereflector 来完成

python calculator.pydouble10# 20python calculator.pydouble–number=15#
30

NVidia Docker

澳门新葡萄京官网首页 8

因为 GPU 属于特定的厂商产品,需要特定的 Driver,Docker 本身并不支持
GPU。以前如果要在 Docker 中使用 GPU,就需要在 Container 中安装主机上使用
GPU 的 Driver,然后把主机上的 GPU 设备(例如:/dev/nvidia0)映射到
Container 中,所以这样的 Docker image 并不具备可移植性。

 

英伟达公司的 Nvidia-docker 项目就是为了解决这个问题,它让 Docker image
不需要知道底层 GPU 的相关信息,而是通过启动 Container 时 mount
设备和驱动文件来实现的,通过查看 Nvidia-docker 的源代码,我们可以了解到
Nvidia-docker 是对 Docker
的 create 和 run 命令进行了封装,将驱动信息映射到 Container 中。

 

澳门新葡萄京官网首页 9

 

通过执行 curl -s Nvidia 驱动信息:

--device=/dev/nvidiactl --device=/dev/nvida-uvm --device=/dev/nvidia3 --device=/dev/nvidia2 --device=/dev/nvidia1 --device=/dev/nvidia0 --volume-drivre=nvidia-docker --volume=/usr/local/nvidia/nvidia_driver_361.48

那么我们就可以直接通过 docker run -it -rm curl -s nvidia/cuda nvidia-smi 直接启动一个支持
GPU 的 Docker Container,在了解了 Nvidia-docker
的运行原理之后,我们完全可以直接使用原生态的 Docker 而不需要使用
Nvidia-docker 项目。

 

4、谷歌深度学习库TensorFlow Fold

TensorFlow

TensorFlow
是谷歌开源的深度学习工具包,它将深度学习复杂的计算过程抽象成了数据流图(Data
Flow
Graph),并提供简介灵活的高级抽象接口,通过简单的学习就可以使用「高大上」的深度学习了。

澳门新葡萄京官网首页 10

上图中的示例显示了从数据 Input
开始,沿着有向图进行计算,图中每个节点都是一次计算,称为
option,TensorFlow 中数据以 Tensor 为格式,输入一个 Tensor ,经过一次 op
后输出另一个 Tensor,然后根据数据流图进入下一个 op
作为输入,因此,整个计算过程其实是一个 Tensor
数据的流动过程,所以谷歌将这个系统形象的叫做 TensorFlow。

 

有了数据流图后下一个问题是如何在各种设备上很好的运行,TensorFlow
通过一个会话 Session 来控制整个数据流图的执行。TensorFlow
一个很大的优点是将复杂的运算(如矩阵运算,softmax)封装成了高级函数,用户只要使用就好了,在内部,TensorFlow
将这些函数转化成可以高效在 CPU 或 GPU 执行的机器码。Session
的主要作用是将这张数据流图合理的切分(尽量减少 Session 与 CPU 或 GPU
之间的交互,因为很慢),按照一定的顺序提交给 CPU 或者
GPU,然后(可能)还进行一些容错的机制,Session 负责高效地让数据流图被
CPU 或 GPU 执行完成的。

 

澳门新葡萄京官网首页 11

Tensorflow on Kubernetes

如果让数据科学家直接使用 Tensorflow
的时候,会遇到例如租户隔离、资源隔离、网络隔离、难以指定 GPU
进行任务调度等等一系列软件工程问题,这也是为什么需要引入 Kubernetes
的原因。

  • Tensorflow 资源无法隔离
    Kubernetes 提供租户隔离,容器资源隔离和网络隔离等多种机制
  • Tensorflow 缺乏 GPU 资源的调度
    Kubernetes-v1.4 开始支持 GPU 调度
  • Tensorflow 存在进程遗留问题、无法区分正常完成还是故障退出
    Kubernetes 提供容器生命周期管理,进程和容器共生死
    不过在进行分布式 Tensorflow 训练的时候,社区仍然没有解决 Work
    已经工作完毕,Parameter Server
    无法自行退出的问题,需要自己开发训练任务进度监控让 Parameter Server
    退出
  • Tensorflow 集群服务器定位
    Kubernetes 提供 DNS 服务器提供服务器位置,省去了 Tensorflow
    的计算集群的服务节点 IP 地址配置
  • Tensorflow 不方便日志查看
    Kubernetes 提供了较为完善的 Monitoring 和 Logging 功能
  • Tensorflow 存在训练数据和模型存储问题
    Kubernetes 支持对接 Cephfs,GlusterFS 等 Read
    性能更好的分布式存储系统
  • 多种机器学习框架支持
    通过定制化开发 Kubernetes 的 Custom Resource 和 Operator 接口支持
    MXNet 等其他机器学习框架

 

TensorFlow Fold 是用于创建使用结构化数据的 TensorFlow
模型库,其中计算图的结构取决于输入数据的结构。

Dolphin

作为数据科学家的开发工具,如何让数据科学家能够在算法编写、参数调整的时候能够直接获取交互式的反馈信息,我们通过深度定制
Jupyter 内核开发了完全在可视化的 dolphin WEB
系统,让数据科学家在交互式操作界面中所见即所得的编写算法、调试参数、输出可视化图表并形成算法报告。

澳门新葡萄京官网首页 12

 

Dolphin 根据数据科学家选用的不同的机器学习算法框架,通过 Kubernetes
编排出相应的机器学习计算集群,如下图所示通过 dolphin 调度起来的
Tensorflow 计算集群,创建出 Parameter Server 和 Work 的 POD 以及
SVC,通过 HDFS Mount 模块将用户数据空间映射到 Docker Container
中,执行用户的算法脚本进行模型训练和服务发布。

 

澳门新葡萄京官网首页 13

 

本文已由作者刘勋授权网易云社区发布,原文链接:猛犸机器学习开发实践

TensorFlow Fold 使得处理不同数据尺寸和结构的深度学习模型更容易实现。Fold
实现动态批处理,变换任意形状的计算图形的批次以产生静态计算图形。
该图具有相同的结构,而不管其接收到什么输入,并且可以通过 TensorFlow
有效地执行。

5、Go 运行 Python:Grumpy

澳门新葡萄京官网首页 14

Grumpy 是一个 Python to Go 源代码翻译编译器和运行时,旨在替代 CPython
2.7。

关键的区别是它将 Python 源代码编译为 Go
源代码,然后将其编译为本机代码,而不是字节码。这意味着 Grumpy 没有
VM。编译的 Go 源代码是对 Grumpy 运行时的一系列调用,Go 库服务与 Python C
API 类似的目的(尽管不直接支持 C API)。

6、基于 TensorFlow 的神经网络库 Sonnet

澳门新葡萄京官网首页 15

Sonnet
库使用面向对象的方法,允许创建定义一些前向传导计算的模块。模块用一些输入
Tensor 调用,添加操作到图里并返回输出
Tensor。其中一种设计选择是通过在随后调用相同的模块时自动重用变量来确保变量分享被透明化处理。

7、控制 headless Chrome 的 Node.js API :Puppeteer

澳门新葡萄京官网首页 16

Puppeteer 是一个控制 headless Chrome 的 Node.js API 。它是一个 Node.js
库,通过DevTools 协议提供了一个高级的 API
来控制headlessChrome。它还可以配置为使用完整的(非 headless)Chrome。

8、图像算法工具 Guetzli

澳门新葡萄京官网首页 17澳门新葡萄京官网首页 18

Guetzli,在瑞士德语中是“cookie”的意思,是一个针对数码图像和网页图像的
JPEG 编码器,能够通过产生更小的 JPEG
文件来达到更快的在线体验,并且同时保持与当前浏览器,图像处理应用和 JPEG
标准的兼容性。Google 称 Guetzli 创建高质量的 JPEG
图像文件的大小比当前的压缩方法要再小 35%。

9、Google 开源机器学习数据集可视化工具 Facets

澳门新葡萄京官网首页 19

Facets 是 Google 开源的一款可视化工具,帮助理解、分析和调试 ML 数据集。

Facets 包含两个部分 —— Facets Overview 和 Facets Dive
,允许用户以不同的粒度查看其数据的整体图像。Facets Overview
可用于可视化数据的每一个特征,Facets Dive 用来探索个别的数据观察集。

10、机器学习工具库 Kubeflow

Kubeflow 是谷歌发布的一个机器学习工具库,Kubeflow 项目旨在使 Kubernetes
上的机器学习变的轻松、便捷、可扩展,其目标不是重建其他服务,而是提供一种简便的方式找到最好的
OSS 解决方案。该库包含包含的清单用于创建:

用于创建和管理交互式 Jupyter notebook 的 JupyterHub

可配置为使用 CPU 或 GPU,并通过单一设置调整至单个集群大小的 TensorFlow
训练控制器(Tensorflow Training Controller)

TF 服务容器(TF Serving container)

11、游戏状态自动管理框架 BOARDGAME.IO

BOARDGAME.IO 是 Google
开源的一个游戏框架,旨在允许游戏作者将游戏规则从本质上转化为一系列简单的函数,这些函数用于描述当一个指定动作发生时游戏的状态变化,框架负责处理表述性状态传递。
无需再手动编写任何网络或后端代码。

12、开源量子软件 OpenFermion

OpenFermion
是一个开源的软件,用于编译和分析量子算法来模拟费米子系统,包括量子化学,在其他功能中,当前版本的特征是用数据结构和工具获取和操纵费米子和量子位哈密顿算子的表示。

更多 Google 开源软件查看请点击: