学习笔记TF064:TensorFlow Kubernetes

AlphaGo,每个实验1000个节点,每个节点4个GPU,4000 GPU。Siri,每个实验2个节点,8个GPU。AI研究,依赖海量数据计算,离性能计算资源。更大集群运行模型,把周级训练时间缩短到天级小时级。Kubernetes,应用最广泛容器集群管理工具,分布式TensorFlow监控、调度生命周期管理。容器集群自动化部署、扩容、运维开源平台,提供任务调度、监控、失败重启。TensorFlow、Kubernetes都是谷歌公司开源。https://kubernetes.io/ 。谷歌云平台化解决方案。https://cloud.google.com/ 。

分布式TensorFlow在Kubernetes运行。

部署、运行。安装Kubernetes。Minikube创建本地Kubernetes集群。Mac 先安装VirtualBox虚拟机。https://www.virtualbox.org/ 。Minikube Go语言编写,发布形式独立二进制文件,下载入到对应目录。命令:

curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.14.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

客户端kubectl,kubectl命令行与集群交互。安装:

curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/v1.5.1/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/

Minikube启动Kubernetes集群:

minikube start

Docker Hub最新镜像tensorflow/tensorflow(1.0版本) https://hub.docker.com/r/tensorflow/tensorflow/ 。配置参数服务器部署(deployment)文件,命名tf-ps-deployment.json:

{
"apiVersion": "extensions/v1beta1",
"kind": "Deployment",
"metadata": {
"name": "tensorflow-ps2"
},
"spec": {
"replicas": 2,
"template": {
"metadata": {
"labels": {
"name": "tensorflow-ps2",
"role": "ps"
}
}
},
"spec": {
"containers": [
{
"name": "ps",
"image": "tensorflow/tensorflow",
"ports": [
{
"containerPort": 2222
}
]
}
]
}
}
}

配置参数服务器服务(Service)文件,命名tf-ps-service.json:

{
"apiVersion": "v1",
"kind": "Service",
"spec": {
"ports": [
{
"port": 2222,
"targetPort": 2222
}
],
"selector": {
"name": "tensorflow-ps2"
}
},
"metadata": {
"labels": {
"name": "tensorflow",
"role": "service"
}
},
"name": "tensorflow-ps2-service"
}

配置计算服务器部置文件,命名tf-worker-deployment.json:

{
"apiVersion": "extensions/v1beta1",
"kind": "Deployment",
"metadata": {
"name": "tensorflow-worker2"
},
"spec": {
"replicas": 2,
"template": {
"metadata": {
"labels": {
"name": "tensorflow-worker2",
"role": "worker"
}
}
},
"spec": {
"containers": [
{
"name": "worker",
"image": "tensorflow/tensorflow",
"ports": [
{
"containerPort": 2222
}
]
}
]
}
}
}

配置计算服务器服务文件,命名tf-worker-servic.json:

{
"apiVersion": "v1",
"kind": "Service",
"spec": {
"ports": [
{
"port": 2222,
"targetPort": 2222
}
],
"selector": {
"name": "tensorflow-worker2"
}
},
"metadata": {
"labels": {
"name": "tensorflow-worker2",
"role": "service"
}
},
"name": "tensorflow-wk2-service"
}

执行命令:

kubectl create -f tf-ps-deployment.json
kubectl create -f tf-ps-service.json
kubectl create -f tf-worker-deployment.json
kubectl create -f tf-worker-service.json

运行 kubectl get pod,查看参数服务器和计算服务器全部创建完成。
进入每个服务器(Pod),部署mnist_replica.py文件。运行命令查看ps_host、worker_host IP地址。

kubectl describe service tensorflow-ps2-service
kubectl describe service tensorflow-wk2-service

打开4个终端,分别进入4个Pod。

kubectl exec -ti tensorflow-ps2-3073558082-3b08h /bin/bash
kubectl exec -ti tensorflow-ps2-3073558082-4x3j2 /bin/bash
kubectl exec -ti tensorflow-worker2-3070479207-k6z8f /bin/bash
kubectl exec -ti tensorflow-worker2-3070479207-6hvsk /bin/bash

mnist_replica.py部署到4个Pod。

curl https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/tools/dist_test/python/mnist_replica.py -o mnist_replica.py

在参数服务器容器执行:

python mnist_replica.py --ps_hosts=172.17.0.16:2222,172.17.0.17:2222 --worker_bosts=172.17.0.3:2222,172.17.0.8:2222 --job_name="ps" --task_index=0
python mnist_replica.py --ps_hosts=172.17.0.16:2222,172.17.0.17:2222 --worker_bosts=172.17.0.3:2222,172.17.0.8:2222 --job_name="ps" --task_index=1

在计算服务器容器执行:

python mnist_replica.py --ps_hosts=172.17.0.16:2222,172.17.0.17:2222 --worker_bosts=172.17.0.3:2222,172.17.0.8:2222 --job_name="worker" --task_index=0
python mnist_replica.py --ps_hosts=172.17.0.16:2222,172.17.0.17:2222 --worker_bosts=172.17.0.3:2222,172.17.0.8:2222 --job_name="worker" --task_index=1

把需要执行的源代码入训练数据、测试数据放在持久卷(persistent volume),在多个Pod间共享,避免在每一个Pod分别部署。
TensorFlow GPU Docker集群部署,Nvidia提供nvidia-docker方式,利用宿主机GPU设备,映射到容器。https://github.com/NVIDIA/nvidia-docker 。

训练好模型,打包制作环境独立镜像,方便测试人员部署一致环境,对不同版本模型做标记、比较不同模型准确率,从整体降低测试、部署上线工作复杂性。

参考资料:
《TensorFlow技术解析与实战》

欢迎推荐上海机器学习工作机会,我的微信:qingxingfengzi

时间: 2024-10-12 19:51:56

学习笔记TF064:TensorFlow Kubernetes的相关文章

Google TensorFlow 学习笔记一 —— TensorFlow简介

"TensorFlow is an Open Source Software Library for Machine INtenlligence" 本笔记参考tensorflow.org的教程,翻译并记录作者的学习过程,仅供参考,如有不当之处,请及时指出并多多包涵. TensorFlow是一款开源的数学计算软件,使用data flow graphs的形式进行计算.这种灵活的架构允许我们使用相同的API在单或多CPUs或GPU,servers设置移动设备上进行计算. Data Flow

学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字

TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology database),简单机器视觉数据集,28X28像素手写数字,只有灰度值信息,空白部分为0,笔迹根据颜色深浅取[0, 1], 784维,丢弃二维空间信息,目标分0~9共10类.数据加载,data.read_data_sets, 55000个样本,测试集10000样本,验证集5000样本.样本标注信

学习笔记TF050:TensorFlow源代码解析

TensorFlow目录结构. ACKNOWLEDGMENTS #TensorFlow版本声明 ADOPTERS.md #使用TensorFlow的人员或组织列表 AUTHORS #TensorFlow作者的官方列表 BUILD CONTRIBUTING.md #TensorFlow贡献指导 ISSUE_TEMPLATE.md #提ISSUE的模板 LICENSE #版权许可 README.md RELEASE.md #每次发版的change log WORKSPACE #配置移动端开发环境 b

学习笔记TF056:TensorFlow MNIST,数据集、分类、可视化

MNIST(Mixed National Institute of Standards and Technology)http://yann.lecun.com/exdb/mnist/ ,入门级计算机视觉数据集,美国中学生手写数字.训练集6万张图片,测试集1万张图片.数字经过预处理.格式化,大小调整并居中,图片尺寸固定28x28.数据集小,训练速度快,收敛效果好. MNIST数据集,NIST数据集子集.4个文件.train-label-idx1-ubyte.gz 训练集标记文件(28881字节)

学习笔记TF057:TensorFlow MNIST,卷积神经网络、循环神经网络、无监督学习

MNIST 卷积神经网络.https://github.com/nlintz/TensorFlow-Tutorials/blob/master/05_convolutional_net.py .TensorFlow搭建卷积神经网络(CNN)模型,训练MNIST数据集. 构建模型. 定义输入数据,预处理数据.读取数据MNIST,得到训练集图片.标记矩阵,测试集图片标记矩阵.trX.trY.teX.teY 数据矩阵表现.trX.teX形状变为[-1,28,28,1],-1 不考虑输入图片数量,28x

学习笔记TF062:TensorFlow线性代数编译框架XLA

XLA(Accelerated Linear Algebra),线性代数领域专用编译器(demain-specific compiler),优化TensorFlow计算.即时(just-in-time,JIT)编译或提前(ahead-of-time,AOT)编译实现XLA,有助于硬件加速.XLA还在试验阶段.https://www.tensorflow.org/versions/master/experimental/xla/ . XLA优势.线性代数领域专用编译器,优化TensorFlow计算

学习笔记TF066:TensorFlow移动端应用,iOS、Android系统实践

TensorFlow对Android.iOS.树莓派都提供移动端支持. 移动端应用原理.移动端.嵌入式设备应用深度学习方式,一模型运行在云端服务器,向服务器发送请求,接收服务器响应:二在本地运行模型,PC训练模型,放到移动端预测.向服务端请求数据可行性差,移动端资源稀缺.本地运行实时性更好.加速计算,内存空间和速度优化.精简模型,节省内存空间,加快计算速度.加快框架执行速度,优化模型复杂度和每步计算速度.精简模型,用更低权得精度,量化(quantization).权重剪枝(weight prun

学习笔记CB014:TensorFlow seq2seq模型步步进阶

神经网络.<Make Your Own Neural Network>,用非常通俗易懂描述讲解人工神经网络原理用代码实现,试验效果非常好. 循环神经网络和LSTM.Christopher Olah http://colah.github.io/posts/2015-08-Understanding-LSTMs/ . seq2seq模型基于循环神经网络序列到序列模型,语言翻译.自动问答等序列到序列场景,都可用seq2seq模型,用seq2seq实现聊天机器人的原理 http://suriyade

Tensorflow学习笔记2:About Session, Graph, Operation and Tensor

简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节点之间则是由张量(Tensor)作为边来连接在一起的.所以Tensorflow的计算过程就是一个Tensor流图.Tensorflow的图则是必须在一个Session中来计算.这篇笔记来大致介绍一下Session.Graph.Operation和Tensor. Session Session提供了O