2017-08-12 27 views
0

我正嘗試使用服務器和一個或多個使用它的客戶端創建分佈式Tensorflow應用程序。在Tensorflow中執行本地設備放置

指定應該在服務器中放置哪些變量或操作符很容易。剛開始用ClusterSpec一個tf.train.Server定義「服務器」工作,做到:

with tf.device('/job:server/task:0'): 
    server_vars = ... 
    server_ops = ... 

但是,如果我想要做同樣放置其他增值經銷商或OPS在客戶端,那麼我m被迫爲每個客戶端定義一個新的作業,爲它啓動一個新的tf.train.Server,在每個特定的客戶端上定義新的變量和操作,並在ClusterSpec中包含所有的客戶端地址和端口。

有什麼方法可以使用tf.device在本地放置ops和vars嗎?不一定對任何特定設備(CPU,GPU),但不在服務器中遠程。

# No device is specified, so it's up to TF to decide where to place it. 
# Let's say it decides to place it locally. How can we enforce that? 
# Is there a tf.device(/local/) or similar? 
client_vars = ... 
client_ops = ... 

with tf.Session('grpc://%s' % SERVER) as session: 
    # Do stuff. 
    # Can we run client ops from this session? 

注意:我假設服務器工作被動,並且從不嘗試直接訪問任何客戶端操作或變量。而是,客戶端訪問服務器操作和變量。

+0

沒有'device/local'。你可以使用'tf.device(/ job:../ task:/ ...)'語法在本地放置ops,因爲客戶端知道它正在運行哪個任務/任務 –

+0

但是這迫使我啓動一個tf.train。服務器在客戶端並打開一個會話以便在本地運行它的操作,不是嗎? 這實際上對我來說很成問題,因爲例如Tensorflow C API(用於Windows)不支持啓動服務器。 – user3176103

回答

1

如果您沒有tf.Server在本地運行,那麼您在本地運行op的唯一選項是創建本地會話tf.Session()並在該會話中運行ops。不同的會話不能直接通信。如果您使用的是分佈式TensorFlow,則必須從分佈式會話中獲取數據並自己將數據提供給本地會話。 (也可以是vica)

相關問題