2017-02-22 22 views
1

パラメータサーバとn人の作業者を持つ分散テンソルフローモデルを作成するために、例hereに従っています。私は、私はすべてのいくつかのステップに私の変数を保存したいのですが、すべての作業がチーフ労働者で 分散Tensorflowの保存に失敗しました

CPU

で配布され、任意のGPUを持っていない次の例外でセーバー結果を呼び出す:

Cannot assign a device to node 'save_1/RestoreV2_21': 
Could not satisfy explicit device specification 
'/job:ps/task:0/device:CPU:0' because no devices matching that 
specification are registered in this process; available devices: 
/job:localhost/replica:0/task:0/cpu:0 

[[Node: save_1/RestoreV2_21 = RestoreV2[dtypes=[DT_INT32], 
_device="/job:ps/task:0/device:CPU:0"](save_1/Const, 
save_1/RestoreV2_21/tensor_names, save_1/RestoreV2_21/shape_and_slices)]] 

I試してみました:

server = tf.train.Server(cluster, 
         job_name=self.calib.params['job_name'], 
         task_index=self.calib.params['task_index'], 
         config=tf.ConfigProto(allow_soft_placement=True) 

私はスーパーバイザーを使用しています:

sv = tf.train.Supervisor(
         is_chief=is_chief, 
         ...) 

と作成を

sess = sv.prepare_or_wait_for_session(server.target) 

が、私はまだ

答えて

3

エラーメッセージにこの行正確に同じエラーが生じています:私のsesionは、次のように

available devices: /job:localhost/replica:0/task:0/cpu:0 

...あなたのtf.Sessionが接続されていないことを示唆していますあなたが作成したtf.train.Server特に、ローカルの(または「直接」)セッションは、ローカルプロセスのデバイスにしかアクセスできないようです。

この問題を解決するには、セッションを作成するときに、server.targetを初期化子に渡します。たとえば、セッションの作成に使用するAPIに応じて、次のいずれかを使用できます。

# Creating a session explicitly. 
with tf.Session(server.target) as sess: 
    # ... 

# Using a `tf.train.Supervisor` called `sv`. 
with sv.managed_session(server.target): 
    # ... 

# Using a `tf.train.MonitoredTrainingSession`. 
with tf.train.MonitoredTrainingSession(server.target): 
    # ... 
+0

ありがとうございます。私はあなたが言うようにセッションを作成しています。私は質問にそれを追加します – volatile

+0

質問を更新して、私はすでにセッション作成でそれを行うことを明確にしました – volatile

関連する問題