Как определить во время выполнения, является ли серверная часть dl4j/nd4j процессором или графическим процессором?

Есть оптимизация для dl4j, которая работает только с GPU: DataTypeUtil.setDTypeForContext(DataBuffer.Type.HALF)

Я бы хотел сделать этот вызов только в том случае, если серверная часть является графическим процессором.

В моем Maven pom.xml у меня есть

<!-- CPU or GPU -->
<nd4j.backend>nd4j-native-platform</nd4j.backend>
<!--<nd4j.backend>nd4j-cuda-8.0-platform</nd4j.backend>-->

И я искал способы прочитать это значение из Java, и все они кажутся неуклюжими. Было бы намного проще, если бы я мог запросить у 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)
    }
}

person Benjamin H    schedule 06.03.2018    source источник


Ответы (2)


Посмотрите, можете ли вы использовать Nd4j.backend. Распечатав его с включенным cuda, я получаю:

org.nd4j.linalg.jcublas.JCublasBackend

и без cuda:

org.nd4j.linalg.cpu.nativecpu.CpuBackend
person reden    schedule 07.03.2018

Он также распечатывается в начале при запуске nd4j. Должен быть поставщик, который он распечатывает для бэкэнда.

person Adam Gibson    schedule 08.03.2018