本文展示如何使用Arena提交TensorFlow的单机训练作业,并通过TensorBoard可视化查看训练作业。
前提条件
已给集群配置了Arena使用的PVC,并且PVC已填充本文使用的数据集,详情请参见配置NAS共享存储。
背景信息
本文示例从Git URL下载源代码,数据集放在共享存储系统(基于NAS的PV和PVC)中。示例假设您已经获得了一个名称为training-data的PVC实例(一个共享存储),里面存在一个目录tf_data,存放了示例所使用的数据集。
操作步骤
执行以下命令检查可用的GPU资源。
arena top node
预期输出:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 0 ----------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 0/6 (0%)
由上可见,有3个包含GPU的节点可供运行训练作业。
执行
arena submit tfjob/tf [--flag]
命令即可提交TensorFlow作业。通过以下代码示例提交一个单机单卡的TensorFlow任务。
arena submit tf \ --name=tf-git \ --working-dir=/root \ --gpus=1 \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow:1.5.0-devel-gpu \ --sync-mode=git \ --sync-source=https://code.aliyun.com/xiaozhou/tensorflow-sample-code.git \ --data=training-data:/mnt \ --tensorboard \ --logdir=/mnt/tf_data/logs \ "python code/tensorflow-sample-code/tfjob/docker/mnist/main.py --log_dir /mnt/tf_data/logs --data_dir /mnt/tf_data/"
预期输出:
configmap/tf-git-tfjob created configmap/tf-git-tfjob labeled service/tf-git-tensorboard created deployment.apps/tf-git-tensorboard created tfjob.kubeflow.org/tf-git created INFO[0000] The Job tf-git has been submitted successfully INFO[0000] You can run `arena get tf-git --type tfjob` to check the job status
参数解释如下表。
参数
是否必选
解释
默认值
--name
必选
指定提交的作业名字,全局唯一,不能重复。
无
--working-dir
可选
指定当前执行命令所在的目录。
/root
--gpus
可选
指定作业Worker节点需要使用的GPU卡数。
0
--image
必选
指定训练环境的镜像地址。
无
--sync-mode
可选
同步代码的模式,您可以指定git、rsync。本文使用Git模式。
无
--sync-source
可选
同步代码的仓库地址,需要和--sync-mode一起使用,本文示例使用Git模式,该参数可以为任何github项目地址。阿里云code项目地址等支持Git的代码托管地址。项目代码将会被下载到--working-dir下的code/目录中。本文示例即为:/root/code/tensorflow-sample-code。
无
--data
可选
挂载共享存储卷PVC到运行环境中。它由两部分组成,通过分号
:
分割。冒号左侧是您已经准备好的PVC名称。您可以通过arena data list
查看当前集群可用的PVC列表;分号右侧是您想将PVC的挂载到运行环境中的路径,也是您训练代码要读取数据的本地路径。这样通过挂载的方式,您的代码就可以访问PVC的数据。说明执行
arena data list
查看本文示例当前集群可用的PVC列表。NAME ACCESSMODE DESCRIPTION OWNER AGE training-data ReadWriteMany 35m
如果没有可用的PVC,您可创建PVC。具体操作,请参见配置NAS共享存储。
无
--tensorboard
可选
为训练任务开启一个TensorBoard服务,用作数据可视化,您可以结合--logdir指定TensorBoard要读取的event路径。不指定该参数,则不开启TensorBoard服务。
无
--logdir
可选
需要结合--tensorboard一起使用,该参数表示TensorBoard需要读取event数据的路径。
/training_logs
重要如果您使用非公开Git代码库,则可以使用以下命令。
arena submit tf \ ... --sync-mode=git \ --sync-source=https://code.aliyun.com/xiaozhou/tensorflow-sample-code.git \ --env=GIT_SYNC_USERNAME=yourname \ --env=GIT_SYNC_PASSWORD=yourpwd \ "python code/tensorflow-sample-code/tfjob/docker/mnist/main.py
arena命令使用git-sync同步源代码。您可以设置在git-sync项目中定义的环境变量。
执行以下命令查看当前通过Arena提交的所有作业。
arena list
预期输出:
NAME STATUS TRAINER AGE NODE tf-git RUNNING TFJOB 20s 192.1xx.x.xx
执行以下命令检查作业所使用的GPU资源。
arena top job
预期输出:
NAME GPU(Requests) GPU(Allocated) STATUS TRAINER AGE NODE tf-git 1 1 RUNNING tfjob 1m 192.1xx.x.xx Total Allocated GPUs of Training Job: 1 Total Requested GPUs of Training Job: 1
执行以下命令检查集群所使用的GPU资源。
arena top node
预期输出:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 1 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 0 ----------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 1/6 (16%)
执行以下命令获取作业详情。
arena get tf-git
预期输出:
STATUS: SUCCEEDED NAMESPACE: default PRIORITY: N/A TRAINING DURATION: 1m NAME STATUS TRAINER AGE INSTANCE NODE tf-git SUCCEEDED TFJOB 18m tf-git-chief-0 192.16x.x.xx Your tensorboard will be available on: http://192.16x.x.xx:31619
说明本文示例因为开启TensorBoard,在上述作业详情中最后两行,可以看到TensorBoard的Web访问地址;如果没有开启TensorBoard,最后两行信息不存在。
通过浏览器查看TensorBoard。
在本地执行如下命令,将集群中的TensorBoard映射到本地9090端口。
重要请注意kubectl port-forward建立的端口转发不具备生产级别的可靠性、安全性和扩展性,因此仅适用于开发和调试目的,不适合在生产环境使用。更多关于Kubernetes集群内生产可用的网络方案的信息,请参见Ingress概述。
kubectl port-forward svc/tf-git-tensorboard 9090:6006
在浏览器中访问
localhost:9090
,即可查看TensorBoard。如下图所示。
执行以下命令获取作业日志信息。
arena logs tf-git
预期输出:
WARNING:tensorflow:From code/tensorflow-sample-code/tfjob/docker/mnist/main.py:120: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version. Instructions for updating: ... Accuracy at step 9970: 0.9834 Accuracy at step 9980: 0.9828 Accuracy at step 9990: 0.9816 Adding run metadata for 9999 Total Train-accuracy=0.9816
您还可以通过命令
arena logs $job_name -f
实时查看作业的日志输出,通过命令arena logs $job_name -t N
查看尾部N行的日志,以及通过arena logs --help
查询更多参数使用情况。查看尾部N行的日志示例代码如下。
arena logs tf-git -t 5
预期输出:
Accuracy at step 9970: 0.9834 Accuracy at step 9980: 0.9828 Accuracy at step 9990: 0.9816 Adding run metadata for 9999 Total Train-accuracy=0.9816