介观张量流
tfmesos的Python项目详细描述
TFMesos是一个轻量级框架,用于帮助在Docker和Nvidia-Docker内的Apache Mesos上运行分布式Tensorflow机器学习任务。
TFMesos动态分配来自Mesos群集的资源,为Tensorflow构建分布式训练群集,并在Docker的帮助下在共享的Mesos群集中管理和隔离不同的训练任务。
先决条件
- 对于Mesos >= 1.0.0:
- Mesos集群(cf:Mesos Getting Started)。群集中的所有节点都应该可以使用其主机名访问,并且所有节点都具有相同的/etc/passwd和/etc/group。
- 设置Mesos Agent以启用Mesos Containerizer和Mesos Nvidia GPU Support(可选)。例如:mesos-agent--containerizers=mesos--image_providers=docker--isolation=filesystem/linux,docker/runtime,cgroups/devices,gpu/nvidia
- (可选)分布式文件系统(例如:MooseFS)
- 确保最新的TFMesosdocker映像(tfmesos/tfmesos)被拉过整个集群
- 对于Mesos < 1.0.0:
- Mesos集群(cf:Mesos Getting Started)。群集中的所有节点都应该可以使用其主机名访问,并且所有节点都具有相同的/etc/passwd和/etc/group。
- Docker(cf:Docker Get Start Tutorial)
- Mesos Docker Containerizer Support(cf:Mesos Docker Containerizer)
- (可选)Nvidia-docker安装(cf:Nvidia-docker installation),并确保可以从远程主机访问nvidia插件(使用-l 0.0.0.0:3476)
- (可选)分布式文件系统(例如:MooseFS)
- 确保最新的TFMesosdocker映像(tfmesos/tfmesos)被拉过整个集群
如果您使用的是AWS G2实例,这里有一个sample脚本来设置大多数先决条件。
运行简单测试
在设置了mesos并在单个节点(或cluser)上拖动docker映像之后,您应该能够使用以下命令运行一个简单的测试。
$ docker run -e MESOS_MASTER=mesos-master:5050 \ -e DOCKER_IMAGE=tfmesos/tfmesos \ --net=host \ -v /path-to-your-tfmesos-code/tfmesos/examples/plus.py:/tmp/plus.py \ --rm \ -it \ tfmesos/tfmesos \ python /tmp/plus.py mesos-master:5050
成功运行测试将在控制台上产生42的输出。
以副本模式运行
这种模式在正式的Distributed Tensorflow Howto
中称为图形复制之间的。谷歌开源的大多数分布式培训模型(比如mnist_replica和inception)都在使用这种模式。在这种模式下,定义了两种名为'ps'和'worker'的作业。'ps'任务充当'parameter server'和'worker'任务运行实际的培训过程。
在这里,我们使用修改后的‘mnist_replica’作为示例:
- 将mnist示例代码签入共享文件系统中的目录,例如:/nfs/mnist
- 假设mesos master是mesos master:5050
- 现在,我们可以使用以下命令启动此脚本:
中央处理器:
$ docker run --rm -it -e MESOS_MASTER=mesos-master:5050 \ --net=host \ -v /nfs/mnist:/nfs/mnist \ -v /etc/passwd:/etc/passwd:ro \ -v /etc/group:/etc/group:ro \ -u `id -u`\ -w /nfs/mnist \ tfmesos/tfmesos \ tfrun -w 1 -s 1\ -V /nfs/mnist:/nfs/mnist \ -- python mnist_replica.py \ --ps_hosts {ps_hosts} --worker_hosts {worker_hosts}\ --job_name {job_name} --worker_index {task_index}
GPU(每个工人一个GPU):
$ nvidia-docker run --rm -it -e MESOS_MASTER=mesos-master:5050 \ --net=host \ -v /nfs/mnist:/nfs/mnist \ -v /etc/passwd:/etc/passwd:ro \ -v /etc/group:/etc/group:ro \ -u `id -u`\ -w /nfs/mnist \ tfmesos/tfmesos \ tfrun -w 1 -s 1 -Gw 1 -- python mnist_replica.py \ --ps_hosts {ps_hosts} --worker_hosts {worker_hosts}\ --job_name {job_name} --worker_index {task_index}
注意:
在此模式下,tfrun用于准备集群并在每个节点上启动培训脚本,worker 0(主要工作)将在本地容器中启动。 tfrun将用每个任务的相应值替换{ps_hosts},{worker_hosts},{job_name},{task_index}。
以细粒度模式运行
此模式在图形复制中称为,在正式的Distributed Tensorflow Howto
在这种模式下,我们可以更好地控制集群规范。集群中的所有节点都是远程的,只运行一个grpc服务器。每个工作线程都由一个本地线程驱动以运行培训任务。
在这里,我们使用修改后的mnist作为示例:
- 将mnist示例代码签入目录,例如:/tmp/mnist
- 假设mesos master是mesos master:5050
- 现在,我们可以使用以下命令启动此脚本:
中央处理器:
$ docker run --rm -it -e MESOS_MASTER=mesos-master:5050 \ --net=host \ -v /tmp/mnist:/tmp/mnist \ -v /etc/passwd:/etc/passwd:ro \ -v /etc/group:/etc/group:ro \ -u `id -u`\ -w /tmp/mnist \ tfmesos/tfmesos \ python mnist.py
GPU(每个工人一个GPU):
$ nvidia-docker run --rm -it -e MESOS_MASTER=mesos-master:5050 \ --net=host \ -v /tmp/mnist:/tmp/mnist \ -v /etc/passwd:/etc/passwd:ro \ -v /etc/group:/etc/group:ro \ -u `id -u`\ -w /tmp/mnist \ tfmesos/tfmesos \ python mnist.py --worker-gpus 1