前面的文章
炼丹师的优雅内功一:TensorFlow on kubernetes
炼丹师的优雅内功二:PyTorch on kubernetes
kubeflow是什么
kubeflow 是2017年由国内外多家公司共同开源,经历了多年的发展kubeflow 已经变成了一个庞大的项目,让我们很难的用一句话全面概括,我们可以看下官网的描述
The Kubeflow project is dedicated to making deployments of machine learning (ML) workflows on Kubernetes simple, portable and scalable. Our goal is not to recreate other services, but to provide a straightforward way to deploy best-of-breed open-source systems for ML to diverse infrastructures. Anywhere you are running Kubernetes, you should be able to run Kubeflow. 简单来说kubeflow 是kubernetes 的ML工具集
通过kubeflow 官网提供的架构图我们可以简单了解
图中可以看出kubeflow 底层依赖于kubernetes,主要功能依赖于各种控制器适配ML相关的框架,同时提供了各种各样的ML tools。
kubeflow 提供了很多的Operator 这些operator 主要是针对不同的ML提供资源调度和分布式训练能力
Kubeflow核心组件介绍
- jupyter 多租户NoteBook服务
- Tensorflow PyTorch MPI MXnet Chainer 当前主要支持的机器学习引擎
- Seldon 提供在Kubernetes上对机器学习模型的部署
- TF-Serving 提供对Tensorflow模型的在线部署,支持版本控制及无需停止线上服务,切换模型等功能
- Argo 基于Kubernetes的工作流引擎
- Ambassador 对外提供统一服务的网关(API Gateway)
- Istio 提供微服务的管理,Telemetry收集
- Ksonnet Kubeflow使用ksonnet来向kubernetes集群部署需要的k8s资源
kubeflow 安装
这个我懒得写大家自己看官网吧
kubeflow 下发TensorFlow 作业
tf-operator
从kubeflow 的training-operator仓库中可以看到
pkg/controller.v1/tensorflow/tfjob_controller.go
代码中的主要逻辑和我们在之前的文章炼丹师的优雅内功一:TensorFlow on kubernetes中在k8s 上部署的流程一样,
- 1 解析TFjob
func (jc *JobController) ReconcileJobs(
job interface{},
replicas map[apiv1.ReplicaType]*apiv1.ReplicaSpec,
jobStatus apiv1.JobStatus,
runPolicy *apiv1.RunPolicy) error {
......
......
......
......
}
- 2 获取pod
......
pods, err := jc.Controller.GetPodsForJob(job)
if err != nil {
log.Warnf("GetPodsForJob error %v", err)
return err
}
......
- 3 获取service
......
services, err := jc.Controller.GetServicesForJob(job)
if err != nil {
log.Warnf("GetServicesForJob error %v", err)
return err
}
......
- 4 部署
......
err := jc.Controller.ReconcilePods(metaObject, &jobStatus, pods, rtype, spec, replicas)
if err != nil {
log.Warnf("ReconcilePods error %v", err)
return err
}
err = jc.Controller.ReconcileServices(metaObject, services, rtype, spec)
if err != nil {
log.Warnf("ReconcileServices error %v", err)
return err
}
......
TFjob
在炼丹师的优雅内功一:TensorFlow on kubernetes这篇文章中有写,当时在k8s 集群中部署的方式也是job,相对于k8s原生的job TFjob 是kubernetes自定义资源,它是kubeflow 创建的资源 部署文件如下
apiVersion: kubeflow.org/v1
kind: TFJob
metadata:
generateName: tfjob
namespace: your-user-namespace
spec:
tfReplicaSpecs:
PS:
replicas: 1
restartPolicy: OnFailure
template:
metadata:
annotations:
sidecar.istio.io/inject: "false"
spec:
containers:
- name: tensorflow
image: gcr.io/your-project/your-image
command:
- python
- -m
- trainer.task
- --batch_size=32
- --training_steps=1000
Worker:
replicas: 3
restartPolicy: OnFailure
template:
metadata:
annotations:
sidecar.istio.io/inject: "false"
spec:
containers:
- name: tensorflow
image: gcr.io/your-project/your-image
command:
- python
- -m
- trainer.task
- --batch_size=32
- --training_steps=1000
分布式TensorFlow 作业通常包含0个或者多个以下进程
- Chief 负责协调训练和执行模型检查点
- Ps ps是参数服务器;这些服务器为模型参数提供分部署数据
- Worker 负责训练模型的实际工作。在某些情况下work 0 也可作为chief
- Evaluator 在训练模型时计算评估之变
使用GPU
使用GPU 必须满足如下配置
- 节点必须有GPU
- Kubernetes 集群必须识别
nvidia.com/gpu
资源类型。 - 集群上的节点必须安装GPU驱动
apiVersion: "kubeflow.org/v1"
kind: "TFJob"
metadata:
name: "tf-smoke-gpu"
spec:
tfReplicaSpecs:
PS:
replicas: 1
template:
metadata:
creationTimestamp: null
spec:
containers:
- args:
- python
- tf_cnn_benchmarks.py
- --batch_size=32
- --model=resnet50
- --variable_update=parameter_server
- --flush_stdout=true
- --num_gpus=1
- --local_parameter_device=cpu
- --device=cpu
- --data_format=NHWC
image: gcr.io/kubeflow/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3
name: tensorflow
ports:
- containerPort: 2222
name: tfjob-port
resources:
limits:
cpu: "1"
workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
restartPolicy: OnFailure
Worker:
replicas: 1
template:
metadata:
creationTimestamp: null
spec:
containers:
- args:
- python
- tf_cnn_benchmarks.py
- --batch_size=32
- --model=resnet50
- --variable_update=parameter_server
- --flush_stdout=true
- --num_gpus=1
- --local_parameter_device=cpu
- --device=gpu
- --data_format=NHWC
image: gcr.io/kubeflow/tf-benchmarks-gpu:v20171202-bdab599-dirty-284af3
name: tensorflow
ports:
- containerPort: 2222
name: tfjob-port
resources:
limits:
nvidia.com/gpu: 1
workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
restartPolicy: OnFailure
其他功能
- kubeflow notebook比如常用的jupyter notebook
- Pipeline
后续
欢迎大家订阅本专栏,后续会持续不断更新云原生&云计算相关的内容!! 炼丹师的优雅内功四:volcano 基础