Skip to main content
 首页 » 编程设计

python之分布式tensorflow复制训练实例: grpc_tensorflow_server之No such file or directory

2024年10月17日29think

我正在尝试按照此博客中的说明进行分布式tensorflow实现:Distributed TensorFlow by Leo K. Tam .我的目标是执行此 post 中提到的复制训练

我已经完成了 安装 tensorflow 并成功运行以下命令并获得结果的步骤:

sudo bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu 

接下来,我要实现的是通过以下命令在其中一个节点上启动 gRPC 服务器:

bazel-bin/tensorflow/core/distributed_runtime/rpc/grpc_tensorflow_server --cluster_spec='worker|192.168.555.254:2500;192.168.555.255:2501' --job_name=worker --task_id=0 & 

但是,当我运行它时,出现以下错误:rpc/grpc_tensorflow_server:No such file directory

-bash: bazel-bin/tensorflow/core/distributed_runtime/rpc/grpc_tensorflow_server: No such file or directory 

我的 rpc 文件夹的内容是:

 libgrpc_channel.pic.a              libgrpc_remote_master.pic.lo       libgrpc_session.pic.lo             libgrpc_worker_service_impl.pic.a  _objs/                              
 libgrpc_master_service_impl.pic.a  libgrpc_remote_worker.pic.a        libgrpc_tensor_coding.pic.a        libgrpc_worker_service.pic.a        
 libgrpc_master_service.pic.lo      libgrpc_server_lib.pic.lo          libgrpc_worker_cache.pic.a         librpc_rendezvous_mgr.pic.a 

我显然错过了中间的一步,博客中没有提到。我的目标是能够运行上面提到的命令(启动 gRPC 服务器),以便我可以在其中一个节点上启动工作进程。

请您参考如下方法:

grpc_tensorflow_server 二进制文件是分布式 TensorFlow 预发布版本中使用的临时措施,不再默认构建或包含在二进制分发版中。它的替代品是 tf.train.Server Python 类,更可编程,更易于使用。

您可以使用 tf.train.Server 编写简单的 Python 脚本来重现 grpc_tensorflow_server 的行为:

# ps.py. Run this on 192.168.0.1. (IP addresses changed to be valid.) 
import tensorflow as tf 
server = tf.train.Server({"ps": ["192.168.0.1:2222"]}, 
                         {"worker": ["192.168.0.2:2222", "192.168.0.3:2222"]}, 
                         job_name="ps", task_index=0) 
server.join() 
 
# worker_0.py. Run this on 192.168.0.2. 
import tensorflow as tf 
server = tf.train.Server({"ps": ["192.168.0.1:2222"]}, 
                         {"worker": ["192.168.0.2:2222", "192.168.0.3:2222"]}, 
                         job_name="worker", task_index=0) 
server.join() 
 
# worker_1.py. Run this on 192.168.0.3. (IP addresses changed to be valid.) 
import tensorflow as tf 
server = tf.train.Server({"ps": ["192.168.0.1:2222"]}, 
                         {"worker": ["192.168.0.2:2222", "192.168.0.3:2222"]}, 
                         job_name="worker", task_index=1) 
server.join() 

很明显,这个示例可以通过命令行标志等进行清理和重用,但 TensorFlow 没有为这些规定特定的形式。需要注意的主要事项是 (i) 每个 TensorFlow 任务有一个 tf.train.Server 实例,(ii) 所有 Server 实例必须使用相同的“集群定义”(将作业名称映射到地址列表的字典),以及 (iii) 每个任务都由一对唯一的 job_name 和 task_index 标识。

在各自的机器上运行这三个脚本后,您可以创建另一个脚本来连接它们:

import tensorflow as tf 
 
sess = tf.Session("grpc://192.168.0.2:2222") 
# ...