민둉이의 책갈피
[ERROR] java.lang.RuntimeException: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException 본문
JAVA/ERROR
[ERROR] java.lang.RuntimeException: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException
김민둉 2021. 4. 22. 17:04Error Detail
INDArray 선언하는 부분에서 에러가 발생했다. 아무리 try catch 문을 돌려도 에러 메시지가 뜨지 않아서 새로운 프로젝트를 만들어서 테스트하니 그제서야 뜨더라. 출력이 왜 안 됐는지는 잘 모르겠음.
INDArray X = Nd4j.zeros(5000, 500);
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.ExceptionInInitializerError
at Main.main(Main.java:88)
Caused by: java.lang.RuntimeException: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException: Please ensure that you have an nd4j backend on your classpath. Please see: https://deeplearning4j.konduit.ai/nd4j/backend
at org.nd4j.linalg.factory.Nd4j.initContext(Nd4j.java:5094)
at org.nd4j.linalg.factory.Nd4j.<clinit>(Nd4j.java:270)
... 1 more
Caused by: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException: Please ensure that you have an nd4j backend on your classpath. Please see: https://deeplearning4j.konduit.ai/nd4j/backend
at org.nd4j.linalg.factory.Nd4jBackend.load(Nd4jBackend.java:221)
at org.nd4j.linalg.factory.Nd4j.initContext(Nd4j.java:5091)
... 2 more
해결 과정
메시지를 보면 nd4j backend가 없다고 되어있다. 출력된 링크를 타고 들어가면
https://deeplearning4j.konduit.ai/config/backends
종속성을 추가할 수 있는 라인이 있다.
에러가 발생한 이유를 추측하자면.. 변수를 cuda에 할당해야 하는데, 할당할 cuda가 없어서 발생한 것 같다. 하지만 나는 gpu가 없으므로 cpu에서 사용할 수 있는 코드를 추가했다. 링크에는 artifactId를 nd4j-native로 설정했는데, 그렇게 하니까 안 되었고 그 하단에 있는 nd4j-native-platform으로 변경하니 정상적으로 구동되었다.
내가 해결한 방법
다음 라인을 pom.xml에 추가하였다. 버전은 deeplearning4j 과 맞춰주었다.
<!-- https://mvnrepository.com/artifact/org.nd4j/nd4j-backends -->
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-beta7</version>
</dependency>