2017-06-20 5 views
0

GPMを持つ特定のコンフィグレーションでモデルをトレーニングして、このモデルを予測に使用したいと考えているとします。モデルビルダーを使用して保存します(予測メソッドシグネチャが構築されます)。私はこのモデルを使用して、GPUを使用できないJava環境で予測を行いたいと思っています。私は、複数のCPUでそれらを並列化する操作をチューニングしたいと思います。ロードされたテンソルフローモデルでデバイスコンフィグを変更する方法

これをJava APIでどのように実現できますか? 新しい操作を作成した場合、setDeviceを使用してデバイスを割り当てることができますが、既存の操作カムをロードされたモデルからどのように変更できますか?出来ますか?それはJava APIで可能ですか?

このような状況を克服する正しい方法は何ですか?

答えて

1

オプションは、Pythonトレーニングプロセスからモデルをエクスポートするときにデバイスをクリアすることです。 SavedModelBuilderを使用する場合、これはclear_devices=Trueに設定されます。

"複数のCPUで並列化する操作のチューニングについて" - Java APIの基礎となるTensorFlowランタイムは、可能な場合は操作を並列にスケジューリングし、可能であれば個々の操作に複数のスレッドを使用する必要があります。

あなたが本当にConfigProtoで指定されたコンフィギュレーションを制御したい場合は、ConfigProto.Builder Java classorg.tensorflow:proto Mavenのパッケージ)を使用して、適切なプロトを構築することができ、それをシリアル化し、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'の使い方を含めました。ただし、デフォルトでは2ではなく0であることに注意してください。[適切な数を選択することを意味します](https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/core/protobuf/config .proto#L194)。 (config.protoはプロトコルバッファのスキーマの説明ですので、デフォルト値ではなく、メッセージのフィールドに「= 2」というタグが付けられています) – ash

+0

はい、あなたは正しいです。 – kecso

関連する問題