Проблемы с запуском Dl4j с CUDA

Я пытаюсь запустить модель dl4j, используя графический процессор вместо процессора. Модель отлично работает с процессором. Поэтому я решил попробовать CUDA, чтобы воспользоваться преимуществами моего графического процессора. Я выполнил все шаги, описанные в здесь, а для установки CUDA я следовал инструкциям NVIDIA по установке Набор инструментов CUDA из здесь. Код компилируется нормально, но я получаю сообщение об ошибке:

Skipped [JCublasBackend] backend (unavailable): java.lang.UnsatisfiedLinkError: C:\Users\albertb\.javacpp\cache\cuda-10.2-7.6-1.5.3-windows-x86_64.jar\org\bytedeco\cuda\windows-x86_64\jnicudart.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-бета7
  • nd4j-cuda-10.2
  • CUDA 11.1 — последняя версия на сегодня

Я буду продолжать пытаться решить проблему, но я был бы признателен за любую помощь. Спасибо.


person ABFovox    schedule 24.09.2020    source источник
comment
Какую версию CUDA вы установили? Если я перейду по предоставленной вами ссылке, вы установили CUDA 11.x, и это не будет работать с вашей сборкой Java/CUDA. Похоже, он ищет установку CUDA 10.2.   -  person Robert Crovella    schedule 25.09.2020
comment
Хорошо, так что мне делать? удалить CUDA и установить версию 10 или изменить мой файл POM на более новый идентификатор артефакта? Я думаю, что самая новая доступная зависимость Maven — 10.2, та, что у меня есть сейчас. Кстати, в документации CUDA указано, что каждая версия обратно совместима. так .... Я потерялся здесь.   -  person ABFovox    schedule 25.09.2020
comment
Используя вашу настройку, я бы установил CUDA 10.2. Вам не нужно ничего удалять. На самом деле, при установке CUDA 10.2 я бы отменил выбор установки драйвера, который идет в комплекте с ним. Ваш драйвер, установленный с CUDA 11.x, будет работать с установкой CUDA 10.2. Я подозреваю, что установка CUDA 10.2 может быть единственным, что необходимо для решения этой проблемы. Вы можете получить установщик CUDA 10.2, начиная с здесь.   -  person Robert Crovella    schedule 25.09.2020
comment
Спасибо за ответ !!! Итак, вы говорите, что я могу установить CUDA 11 и 10.2 одновременно? Я считаю, что я должен удалить тот, который у меня есть, прежде чем устанавливать новый, верно?   -  person ABFovox    schedule 25.09.2020
comment
Да, вы можете установить их одновременно. Вам не нужно удалять CUDA11.x перед установкой CUDA 10.2. Кроме того, как уже говорилось, при запуске установщика CUDA 10.2 я бы отменил выбор установки драйвера в комплекте. Удаление не должно быть необходимым.   -  person Robert Crovella    schedule 25.09.2020


Ответы (2)


Вероятно, у вас установлена ​​неправильная версия cuda. Версия nd4j cuda указана в идентификаторе артефакта, например: 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 для всего своего собственного взаимодействия.

person Adam Gibson    schedule 25.09.2020
comment
Я установил CUDA 11.1, последнюю версию - person ABFovox; 25.09.2020
comment
Я попытался изменить идентификатор артефакта на 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) - person ABFovox; 25.09.2020
comment
Пожалуйста, установите точную версию, иначе он не найдет нужную dll - person Adam Gibson; 25.09.2020
comment
Извините, мы поддерживаем только до 10.2 для beta7. У нас будет cuda 11 в следующем выпуске. Вы можете использовать моментальные снимки oss-sonatype для 11.0, если хотите. Также обратите внимание, не смешивайте версии cuda случайным образом. Никакое программное обеспечение, использующее cuda, не будет работать, если вы это сделаете. А если и случается, то случайно. Cuda по определению не имеет обратной совместимости. - person Adam Gibson; 30.10.2020

Я решил это! Теперь мой пример работает на 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!

person Vladimir    schedule 18.11.2020