#java #cuda #dl4j
#java #cuda #dl4j
Вопрос:
Я пытаюсь запустить модель dl4j, используя графический процессор вместо процессора. Модель отлично работает с использованием процессора. Поэтому я решил попробовать CUDA, чтобы иметь возможность использовать преимущества моего графического процессора. Я выполнил каждый шаг, описанный здесь, и для установки CUDA я следовал инструкциям от NVIDIA по установке CUDA Toolkit отсюда. Код компилируется нормально, но я получаю сообщение об ошибке:
Skipped [JCublasBackend] backend (unavailable): java.lang.UnsatisfiedLinkError: C:Usersalbertb.javacppcachecuda-10.2-7.6-1.5.3-windows-x86_64.jarorgbytedecocudawindows-x86_64jnicudart.dll: Can't find dependent libraries
Exception in thread "main" java.lang.ExceptionInInitializerError
at TestCUDA.run(TestCUDA.java:12)
at TestCUDA.main(TestCUDA.java:7)
Caused by: java.lang.RuntimeException: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException: Please ensure that you have an nd4j back-end 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)
... 2 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)
... 3 more
Мой проект был создан с использованием Maven на IntelliJ. Я думаю, что все зависимости в порядке, иначе код не компилировался бы. Должно быть, отсутствует какая-то внутренняя зависимость, библиотека или установка.
Проблема может быть в несовместимости версий.
Сообщение Please ensure that you have an nd4j backend on your classpath
дает мне некоторый намек на какой-то внутренний jar, который должен быть там. Но Maven должен позаботиться об этом … насколько я знаю.
Я искал в Интернете какое-либо решение, пример или учебное пособие.. что угодно!! Все двоеточия одной и той же инструкции приведены по ссылкам выше.
Некоторая техническая информация:
- Windows 10
- Java 1.8 IntelliJ Maven
- dl4j 1.0,0-beta7
- nd4j-cuda-10.2
- CUDA 11.1 — последняя версия на сегодняшний день
Я буду продолжать пытаться решить проблему, но я был бы признателен за любую помощь. Спасибо.
Комментарии:
1. Какую версию CUDA вы установили? Если я перейду по предоставленной вами ссылке, вы установили CUDA 11.x, и это не будет работать с вашей сборкой Java / CUDA. Похоже, он ищет установку CUDA 10.2.
2. Хорошо, так что мне делать? удалите CUDA и установите версию 10 или измените мой POM-файл на более новый идентификатор артефакта? Я думаю, что новейшая доступная зависимость Maven — это 10.2, та, которая у меня есть сейчас. Кстати, в документации CUDA указано, что каждая версия обратно совместима. so…. Я здесь потерялся.
3. Используя имеющуюся у вас настройку, я бы установил CUDA 10.2. Вам не нужно ничего удалять. Фактически, при установке CUDA 10.2 я бы отменил выбор опции для установки драйвера, который поставляется с ним. Ваш драйвер, установленный с CUDA 11.x, будет работать с установкой CUDA 10.2. Я подозреваю, что установка CUDA 10.2 может быть единственным, что необходимо для решения этой проблемы. Вы можете получить установщик CUDA 10.2, начиная с этого .
4. Спасибо за ответ!!! Итак, вы говорите, что я могу установить оба CUDAs 11 и 10.2 одновременно? Я полагаю, что я должен удалить тот, который у меня есть, прежде чем устанавливать новый, верно?
5. Да , вы можете установить их оба одновременно. Вам не нужно удалять CUDA11.x перед установкой CUDA 10.2. Кроме того, как уже говорилось, при запуске установщика CUDA 10.2 я бы отменил выбор опции для установки драйвера в комплекте. Удаление не требуется.
Ответ №1:
Вероятно, у вас установлена неправильная версия cuda. Версия cuda nd4j указана в идентификаторе артефакта, например: nd4j-cuda-11.0 / 10.2.
Если вы хотите, вы можете использовать артефакты redist из javacpp для этого: https://search.maven.org/artifact/org.bytedeco/cuda-platform-redist/11.0-8.0-1.5.4/jar
Это последняя версия для cuda 11. Nd4j просто использует javacpp для всего своего собственного взаимодействия.
Комментарии:
1. Я установил CUDA 11.1, версию las
2. Я попытался изменить идентификатор артефакта на CUDA 11.0… Это то, что я получаю:
Could not find artifact org.nd4j:nd4j-cuda-11.0:pom:1.0.0-beta7 in central (https://repo.maven.apache.org/maven2)
3. Пожалуйста, установите точную версию, иначе она не найдет нужную dll
4. Ах, извините, мы поддерживаем только до 10.2 для beta7. В следующем выпуске у нас будет cuda 11. Вы можете использовать моментальные снимки oss-sonatype для версии 11.0, если хотите этого. Также обратите внимание, не смешивайте случайно версии cuda. Никакое программное обеспечение, использующее cuda, не будет работать, если вы это сделаете. Или, если это произойдет, это случайно. Cuda по определению не имеет обратной совместимости.
Ответ №2:
Я решил это! Теперь мой пример работает на GeForce3090!!!
Часть моего POM:
org.example
dl4jCuda
1.0-SNAPSHOT
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-cuda-11.0</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-core</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
Также вам необходимо собрать nd4j-cuda-11.0 из исходных текстов и добавить все * jar и dll файлы в ваш проект!