介观张量流

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第三方库


热门话题
java为游戏添加声音。需要帮助   java在获取数据时忽略模型类中的forign键映射   java为什么Microsoft JDBC驱动程序忽略failoverPartner主机名   java可以下载mozswing文件   java等价于ObjectOutputStream,不仅保存其状态,还保存整个对象?   Java Android LiveData根据其他LiveData调用房间查询   java如何使用jackson jsonNode实现这一点并获得所需的输出   在web服务器上作为web应用程序运行java应用程序?   groovy中java类的元类属性   返回空指针的java图形对象   标头中包含用户名和密码的java SOAP客户端请求   具有堆栈实现和递归的Hanoi算法塔(Java)   java当我运行这两个类时,我的老鼠不会移动   使用图像进行java相似图像搜索   Java8并行流机制   使用单例对象作为枚举元素的java Scala枚举,是否有可能对它们进行迭代?   java Webview更改高度大小   不可序列化对象和函数的java Spark Scala编程   java my app在eclipse中运行良好,而不是在jar中