1. 程式人生 > >學習筆記TF064:TensorFlow Kubernetes

學習筆記TF064:TensorFlow Kubernetes

amd 避免 arw 主機 二進制文件 打開 tools 啟動 --

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

學習筆記TF064:TensorFlow Kubernetes