2017-06-20 47 views
0

假設我在給定配置的GPU上訓練我的模型比我想使用此模型進行預測,因此我使用模型構建器(構建預測方法簽名)將其保存。比我喜歡用這個模型來做一個java環境下的預測,並且沒有GPU可用,我想對操作進行一些調整,以便在多個CPU上並行化它們。如何更改加載張量流模型中的設備配置

我該如何用java api實現這個功能? 我發現如果我建立新的操作,我可以使用setDevice爲其分配設備,但是如何從已加載的模型更改現有的操作凸輪?可能嗎? java api可能嗎?

或者在這種情況下克服什麼是正確的方法?

回答

1

一種選擇是在從Python培訓過程中導出模型時清除設備。當使用SavedModelBuilder時,這相當於設置clear_devices=True

關於「在多個CPU上並行化操作的一些調整」 - 基於Java API的TensorFlow運行時應自動爲您執行此操作 - 儘可能並行調度操作,並儘可能使用多個線程進行單獨操作。

如果你真的想控制由ConfigProto指定的配置,你可以建立基於該ConfigProto.Builder Java classorg.tensorflow:proto行家包)適當原,序列化,並將其提供給Session構造,使用這樣的事情:

ConfigProto config = ConfigProto.newBuilder() 
    .setInterOpParallelismThreads(1) 
    .build(); 
try (Session sess = new Session(graph, config.toByteArray())) { 
    System.out.println("Created Session with: " + config.toString()); 
} 

希望有幫助。

+0

但我必須正確設置intra_op_parallelism_threads是不是?默認情況下它是2,我可以增加我有的核心數量!? – kecso

+0

我編輯的答案包括如何使用'ConfigProto'。但是,請注意,默認情況下它是0而不是2,這意味着它會選擇一個合適的數字(https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/core/protobuf/config .proto#L194)。 (請注意,config.proto是一個協議緩衝區模式描述,所以「= 2」是給予消息字段的標記,而不是默認值) – ash

+0

是的你是對的。 – kecso

相關問題