介观张量流

tfmesos的Python项目详细描述


Join the chat at https://gitter.im/douban/tfmesoshttps://img.shields.io/travis/douban/tfmesos.svghttps://img.shields.io/pypi/v/tfmesos.svghttps://img.shields.io/docker/automated/tfmesos/tfmesos.svg

TFMesos是一个轻量级框架,用于帮助在DockerNvidia-Docker内的Apache Mesos上运行分布式Tensorflow机器学习任务。

TFMesos动态分配来自Mesos群集的资源,为Tensorflow构建分布式训练群集,并在Docker的帮助下在共享的Mesos群集中管理和隔离不同的训练任务。

先决条件

  • 对于Mesos >= 1.0.0
  1. Mesos集群(cf:Mesos Getting Started)。群集中的所有节点都应该可以使用其主机名访问,并且所有节点都具有相同的/etc/passwd/etc/group
  2. 设置Mesos Agent以启用Mesos ContainerizerMesos Nvidia GPU Support(可选)。例如:mesos-agent--containerizers=mesos--image_providers=docker--isolation=filesystem/linux,docker/runtime,cgroups/devices,gpu/nvidia
  3. (可选)分布式文件系统(例如:MooseFS
  4. 确保最新的TFMesosdocker映像(tfmesos/tfmesos)被拉过整个集群
  • 对于Mesos < 1.0.0
  1. Mesos集群(cf:Mesos Getting Started)。群集中的所有节点都应该可以使用其主机名访问,并且所有节点都具有相同的/etc/passwd/etc/group
  2. Docker(cf:Docker Get Start Tutorial
  3. Mesos Docker Containerizer Support(cf:Mesos Docker Containerizer
  4. (可选)Nvidia-docker安装(cf:Nvidia-docker installation),并确保可以从远程主机访问nvidia插件(使用-l 0.0.0.0:3476
  5. (可选)分布式文件系统(例如:MooseFS
  6. 确保最新的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_replicainception)都在使用这种模式。在这种模式下,定义了两种名为'ps''worker'的作业。'ps'任务充当'parameter server''worker'任务运行实际的培训过程。

在这里,我们使用修改后的‘mnist_replica’作为示例:

  1. mnist示例代码签入共享文件系统中的目录,例如:/nfs/mnist
  2. 假设mesos master是mesos master:5050
  3. 现在,我们可以使用以下命令启动此脚本:

中央处理器:

$ 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作为示例:

  1. mnist示例代码签入目录,例如:/tmp/mnist
  2. 假设mesos master是mesos master:5050
  3. 现在,我们可以使用以下命令启动此脚本:

中央处理器:

$ 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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaPax考试:从非标准Maven存储库解析Karaf特性存储库(XML文件)   java Spring启动Bean创建异常   java中将ArrayList转换为数组的方法   Android Studio的java Unity插件。   java在CheckStyle中从方法计数中排除getter和setter   HibernateJava。sql。SQLSyntaxErrorException:表/视图“序列”不存在   与命令行程序Java vs C通信   java WebView膨胀异常   java在O(n)java8流中寻找两个列表的交集   java使用Gradle运行单元测试时,最大堆大小在哪里设置?   ssl加载java应用程序(CXF)内的jks文件   CI:Jenkins Git:Simple Java项目:希望在特定时间在脚本上发送消息   java根据位置更改数字   java按数值排序字符串数组   macos java版本“1.6.0_65”是否与java 6模棱两可?   Cassandra中的java时间戳