如何在运行时确定 dl4j/nd4j 后端是 CPU 还是 GPU?
How to determine at runtime if the dl4j/nd4j backend is CPU or GPU?
对 dl4j 进行了优化,仅适用于 GPU:
DataTypeUtil.setDTypeForContext(DataBuffer.Type.HALF)
我只想在后端是 GPU 时进行该调用。
在我的 Maven pom.xml 中,我有
<!-- CPU or GPU -->
<nd4j.backend>nd4j-native-platform</nd4j.backend>
<!--<nd4j.backend>nd4j-cuda-8.0-platform</nd4j.backend>-->
我正在寻找从 Java 中读取该值的方法,所有这些看起来都很笨拙。如果我可以为 "What flavor of backend are we running?" 查询 dl4j 或 nd4j,然后基于它进行优化调用,那会容易得多。
根据答案编辑:
Nd4jBackend.load().let { be->
println("nd4j Backend: ${be.javaClass.simpleName}")
if(be.javaClass.simpleName.toLowerCase().contains("gpu")) {
println("Optimizing for GPU")
DataTypeUtil.setDTypeForContext(DataBuffer.Type.HALF)
}
}
看看你能不能用Nd4j.backend
。在启用 cuda 的情况下打印它我得到:
org.nd4j.linalg.jcublas.JCublasBackend
没有cuda:
org.nd4j.linalg.cpu.nativecpu.CpuBackend
启动nd4j的时候也会在开头打印出来。应该有它为后端打印出的供应商。
对 dl4j 进行了优化,仅适用于 GPU:
DataTypeUtil.setDTypeForContext(DataBuffer.Type.HALF)
我只想在后端是 GPU 时进行该调用。
在我的 Maven pom.xml 中,我有
<!-- CPU or GPU -->
<nd4j.backend>nd4j-native-platform</nd4j.backend>
<!--<nd4j.backend>nd4j-cuda-8.0-platform</nd4j.backend>-->
我正在寻找从 Java 中读取该值的方法,所有这些看起来都很笨拙。如果我可以为 "What flavor of backend are we running?" 查询 dl4j 或 nd4j,然后基于它进行优化调用,那会容易得多。
根据答案编辑:
Nd4jBackend.load().let { be->
println("nd4j Backend: ${be.javaClass.simpleName}")
if(be.javaClass.simpleName.toLowerCase().contains("gpu")) {
println("Optimizing for GPU")
DataTypeUtil.setDTypeForContext(DataBuffer.Type.HALF)
}
}
看看你能不能用Nd4j.backend
。在启用 cuda 的情况下打印它我得到:
org.nd4j.linalg.jcublas.JCublasBackend
没有cuda:
org.nd4j.linalg.cpu.nativecpu.CpuBackend
启动nd4j的时候也会在开头打印出来。应该有它为后端打印出的供应商。