java图形处理器_为多个模型指定CPU或GPU tensorflow java的工作

在Java中使用TensorFlow API加载多个模型时,遇到如何指定模型A在GPU运行,而B和C模型在CPU运行的问题。当前代码设置ConfigProto不允许软放置并尝试指定GPU可见设备列表为空,但并未按预期工作。寻求解决方案。
摘要由CSDN通过智能技术生成

我正在使用Tensorflow java API(1.8.0),我加载了多个模型(在不同的会话中).使用SavedModelBundle.load(…)方法从.pb文件加载这些模型.这些.pb文件是通过保存Keras的模型获得的.

假设我要加载3个模型A,B,C.

为此,我实现了一个java Model类:

public class Model implements Closeable {

private String inputName;

private String outputName;

private Session session;

private int inputSize;

public Model(String modelDir, String input_name, String output_name, int inputSize) {

SavedModelBundle bundle = SavedModelBundle.load(modelDir, "serve");

this.inputName = input_name;

this.outputName = output_name;

this.inputSize = inputSize;

this.session = bundle.session();

}

public void close() {

session.close();

}

public Tensor predict(Tensor t) {

return session.runner().feed(inputName, t).fetch(outputName).run().get(0);

}

}

然后,我可以轻松地使用此类实例化与我的A,B和C模型相对应的3个Model对象,并在同一个java程序中使用这3个模型进行预测.

我还注意到如果我有一个GPU,就会加载3个模型.

但是,我只希望模型A在GPU上运行并强制其他2个在CPU上运行.

通过阅读文档并深入了解源代码,我没有找到方法.我试图将可见设备的新ConfigProto定义为None,并使用图形实例化一个新的Session,但它不起作用(参见下面的代码).

public Model(String modelDir, String input_name, String output_name, int inputSize) {

SavedModelBundle bundle = SavedModelBundle.load(modelDir, "serve");

this.inputName = input_name;

this.outputName = output_name;

this.inputSize = inputSize;

ConfigProto configProto = ConfigProto.newBuilder().setAllowSoftPlacement(false).setGpuOptions(GPUOptions.newBuilder().setVisibleDeviceList("").build()).build();

this.session = new Session(bundle.graph(),configProto.toByteArray());

}

当我加载模型时,它使用可用的GPU.你对这个问题有什么解决方案吗?

谢谢您的回答.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值