Проблема с установкой MXNet.jl с использованием Julia1.2 в UBUNTU 16.04

У меня возникли проблемы с установкой пакета «MXNet.jl» в julia.

1) Сначала я попытался ввести:

 (v1.2) pkg> add MXNet

и я получаю это:

(v1.2) pkg> add MXNet
  Updating registry at `~/.julia/registries/General`
  Updating git-repo `https://github.com/JuliaRegistries/General.git`
 Resolving package versions...
  Updating `~/.julia/environments/v1.2/Project.toml`
 [no changes]
  Updating `~/.julia/environments/v1.2/Manifest.toml`
 [no changes]

В этот момент ничего плохого не происходило. Никаких сообщений об ошибках не выдавалось. Хороший. Теперь я вернулся к Джулии REPL и попытался использовать модуль, для которого я написал:

julia> using MXNet
[ Info: Precompiling MXNet [a7949054-b901-59c6-b8e3-7238c29bf7f0]
ERROR: LoadError: LoadError: IOError: open: permission denied (EACCES)
Stacktrace:
 [1] uv_error at ./libuv.jl:90 [inlined]
 [2] open(::String, ::UInt16, ::UInt16) at ./filesystem.jl:81
 [3] touch(::String) at ./file.jl:404
 [4] top-level scope at /home/gbrunini/.julia/packages/MXNet/XoVCW/src/base.jl:60
 [5] include at ./boot.jl:328 [inlined]
 [6] include_relative(::Module, ::String) at ./loading.jl:1094
 [7] include at ./Base.jl:31 [inlined]
 [8] include(::String) at /home/gbrunini/.julia/packages/MXNet/XoVCW/src/MXNet.jl:25
 [9] top-level scope at /home/gbrunini/.julia/packages/MXNet/XoVCW/src/MXNet.jl:138
 [10] include at ./boot.jl:328 [inlined]
 [11] include_relative(::Module, ::String) at ./loading.jl:1094
 [12] include(::Module, ::String) at ./Base.jl:31
 [13] top-level scope at none:2
 [14] eval at ./boot.jl:330 [inlined]
 [15] eval(::Expr) at ./client.jl:432
 [16] top-level scope at ./none:3
in expression starting at /home/gbrunini/.julia/packages/MXNet/XoVCW/src/base.jl:57
in expression starting at /home/gbrunini/.julia/packages/MXNet/XoVCW/src/MXNet.jl:138
ERROR: Failed to precompile MXNet [a7949054-b901-59c6-b8e3-7238c29bf7f0] to /home/gbrunini/.julia/compiled/v1.2/MXNet/Sc0jU.ji.
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at ./loading.jl:1253
 [3] _require(::Base.PkgId) at ./loading.jl:1013
 [4] require(::Base.PkgId) at ./loading.jl:911
 [5] require(::Module, ::Symbol) at ./loading.jl:906

и все эти сообщения об ошибках выбрасываются. Зная свою ограниченность в отношении всех этих ошибок, я пошел на вторую попытку, которая заключалась в следующем...

2) Мой второй подход заключался в использовании грубой силы, поэтому я скопировал и вставил всю папку github scr для пакета julia MXNet.jl в заданную папку на моем личном рабочем столе. Это делалось подпрограмма за подпрограммой, папка за папкой, пока я не скопировал каждый файл и папку. Поэтому будет справедливо сказать, что папка scr по этой ссылке: https://github.com/apache/incubator-mxnet/tree/master/julia/src теперь выглядит точно так же, как у меня.

Теперь я зашел в свою папку и продолжил, как если бы «MXNet.jl» был любой другой обычной функцией, которую я использовал в прошлом, поэтому я печатаю (на julia REPL):

julia> include("MXNet.jl")
ERROR: LoadError: LoadError: Cannot find or load libmxnet.so. Please see the document on how to build it.
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] top-level scope at /home/gbrunini/Desktop/TRABAJOS/MTI/MTI_Neural_network/MTI_ejemplo_simple_3/base.jl:55
 [3] include at ./boot.jl:328 [inlined]
 [4] include_relative(::Module, ::String) at ./loading.jl:1094
 [5] include at ./Base.jl:31 [inlined]
 [6] include(::String) at /home/gbrunini/Desktop/TRABAJOS/MTI/MTI_Neural_network/MTI_ejemplo_simple_3/MXNet.jl:25
 [7] top-level scope at /home/gbrunini/Desktop/TRABAJOS/MTI/MTI_Neural_network/MTI_ejemplo_simple_3/MXNet.jl:150
 [8] include at ./boot.jl:328 [inlined]
 [9] include_relative(::Module, ::String) at ./loading.jl:1094
 [10] include(::Module, ::String) at ./Base.jl:31
 [11] include(::String) at ./client.jl:431
 [12] top-level scope at REPL[1]:1
in expression starting at /home/gbrunini/Desktop/TRABAJOS/MTI/MTI_Neural_network/MTI_ejemplo_simple_3/base.jl:51
in expression starting at /home/gbrunini/Desktop/TRABAJOS/MTI/MTI_Neural_network/MTI_ejemplo_simple_3/MXNet.jl:150

Который вернул все это сообщение об ошибке.

Я предполагаю, что с этим libmxnet.so что-то не так (я не знаю, что это такое...), и у меня возникает соблазн выполнить шаги 1–3. в этой документации(руководство по установке MXNet), но я не хочу все испортить, поскольку я действительно не знаю, что делает любая из следующих команд:

sudo apt-get update
sudo apt-get install -y build-essential git ninja-build ccache libopenblas-dev libopencv-dev cmake 
git clone --recursive https://github.com/apache/incubator-mxnet.git mxnet
cd mxnet
cp config/linux.cmake config.cmake  # or config/linux_gpu.cmake for build with CUDA
rm -rf build
mkdir -p build && cd build
cmake -GNinja ..
cmake --build .

ни то, что любое из следующих действий для Джулии:

mkdir julia-depot
export JULIA_DEPOT_PATH=$HOME/julia/julia-depot

а) что такое депо? б) что такое переменная среды (я посмотрел в Интернете, и это меня смущает...)

export MXNET_HOME=$HOME/incubator-mxnet
export LD_LIBRARY_PATH=$HOME/incubator-mxnet/lib:$LD_LIBRARY_PATH
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so:$LD_PRELOAD
export PATH=$HOME/bin:$HOME/.local/bin:$HOME/julia/julia-1.0.3/bin:$PATH
export JULIA_DEPOT_PATH=$HOME/julia/julia-depot
export MXNET_HOME=$HOME/incubator-mxnet
export LD_LIBRARY_PATH=$HOME/incubator-mxnet/lib:$LD_LIBRARY_PATH
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so:$LD_PRELOAD
julia --color=yes --project=./ -e \
      'using Pkg; \
       Pkg.develop(PackageSpec(name="MXNet", path = joinpath(ENV["MXNET_HOME"], "julia")))'

Я действительно просто хочу установить MXNet.jl и использовать его. Если я понимаю все остальное как побочный эффект, тем лучше, но я довольствуюсь тем, что все правильно установлено, поэтому для краткости:

  1. В чем проблема?,
  2. Я могу исправить это, просто «скопировав и вставив» инструкции в шагах документации?
  3. Если нет, то как мне установить MXNet.jl?
  4. Я путаю GPU с установкой CPU (мой вариант)? какие изменения между обоими?. Я не думаю, что это имеет какое-то отношение к тому, что здесь происходит, но...

Заранее большое спасибо, надеюсь, у вас все хорошо.

  • УБУНТУ 16.4
julia> versioninfo()
    Julia Version 1.2.0
    Commit c6da87ff4b (2019-08-20 00:03 UTC)
    Platform Info:
      OS: Linux (x86_64-pc-linux-gnu)
      CPU: Intel(R) Core(TM) i5-2310 CPU @ 2.90GHz
      WORD_SIZE: 64
      LIBM: libopenlibm
      LLVM: libLLVM-6.0.1 (ORCJIT, sandybridge)

РЕДАКТИРОВАТЬ:

Вслед за @Przemyslaw я пошел и установил последнюю версию julia, julia1.4. Я надеялся, что при этом права на запись в .julia будут исправлены. Однако проблема остается. Я все еще получаю следующие сообщения:

(@v1.4) pkg> add MXNet
   Updating registry at `~/.julia/registries/General`
   Updating git-repo `https://github.com/JuliaRegistries/General.git`
  Resolving package versions...
   Updating `~/.julia/environments/v1.4/Project.toml`
  [a7949054] + MXNet v1.5.0
   Updating `~/.julia/environments/v1.4/Manifest.toml`
  [9e28174c] + BinDeps v1.0.1
  [682c06a0] + JSON v0.21.0
  [a7949054] + MXNet v1.5.0
  [69de0a69] + Parsers v1.0.2
  [30578b45] + URIParser v0.4.1
  [8ba89e20] + Distributed 
  [a63ad114] + Mmap 
  [8dfed614] + Test 

julia> using MXNet
[ Info: Precompiling MXNet [a7949054-b901-59c6-b8e3-7238c29bf7f0]
ERROR: LoadError: LoadError: IOError: open: permission denied (EACCES)
Stacktrace:
 [1] uv_error at ./libuv.jl:97 [inlined]
 [2] open(::String, ::UInt16, ::UInt16) at ./filesystem.jl:87
 [3] touch(::String) at ./file.jl:422
 [4] top-level scope at /home/gbrunini/.julia/packages/MXNet/XoVCW/src/base.jl:60
 [5] include(::Module, ::String) at ./Base.jl:377
 [6] include(::String) at /home/gbrunini/.julia/packages/MXNet/XoVCW/src/MXNet.jl:25
 [7] top-level scope at /home/gbrunini/.julia/packages/MXNet/XoVCW/src/MXNet.jl:138
 [8] include(::Module, ::String) at ./Base.jl:377
 [9] top-level scope at none:2
 [10] eval at ./boot.jl:331 [inlined]
 [11] eval(::Expr) at ./client.jl:449
 [12] top-level scope at ./none:3
in expression starting at /home/gbrunini/.julia/packages/MXNet/XoVCW/src/base.jl:57
in expression starting at /home/gbrunini/.julia/packages/MXNet/XoVCW/src/MXNet.jl:138
ERROR: Failed to precompile MXNet [a7949054-b901-59c6-b8e3-7238c29bf7f0] to /home/gbrunini/.julia/compiled/v1.4/MXNet/Sc0jU_ATtl5.ji.
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at ./loading.jl:1272
 [3] _require(::Base.PkgId) at ./loading.jl:1029
 [4] require(::Base.PkgId) at ./loading.jl:927
 [5] require(::Module, ::Symbol) at ./loading.jl:922

julia> versioninfo()
Julia Version 1.4.1
Commit 381693d3df* (2020-04-14 17:20 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i5-2310 CPU @ 2.90GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, sandybridge)

So,

  1. Почему установка новой julia не решает проблему с .julia?
  2. Все другие пакеты, которые я установил, работают нормально, является ли MXNet.jl единственным пакетом, который нужно перезаписать поверх .julia?
  3. Проблема кажется связанной со строками:
    if isempty(MXNET_LIB)
      # touch this file, so that after the user properly build libmxnet, the precompiled
      # MXNet.ji will be re-compiled to get MXNET_LIB properly.
      touch(@__FILE__)
      error("Cannot find or load libmxnet.$(Libdl.dlext). " *
            "Please see the document on how to build it.")
    else
      include_dependency(MXNET_LIB)
    end

в подпрограмме base.jl файла MXNet.jl. Есть идеи, что это значит?


person german brunini    schedule 24.04.2020    source источник


Ответы (1)


Вывод вашей команды add MXNet показывает, что она уже установлена.

Однако предварительную компиляцию выполнить не удается, поскольку у вашего процесса Julia нет достаточных разрешений.

Ваша Джулия должна иметь возможность писать в /home/gbrunini/.julia/, иначе модули не смогут предварительно скомпилироваться и загрузиться. Попробуйте настроить разрешения и пересобрать пакет с помощью build MXNet

Указанная выше папка является вашей JULIA_DEPOT_PATH по умолчанию. Вы можете настроить эту переменную для хранения всех пакетов Julia в другом месте, но это, похоже, не ваша проблема (если только вы не можете настроить разрешение для /home/gbrunini/.julia/ по какой-либо другой причине).

Подход грубой силы никогда не был хорошим способом, поскольку пакеты Julia имеют много внешних зависимостей. На Юлии 1.2 они управлялись загрузкой файлов при запуске пакета build (поэтому и надо пересобирать). В текущей юлии есть более изящное решение с артефактами юлии.

person Przemyslaw Szufel    schedule 25.04.2020
comment
Привет @Przemyslaw Прежде всего, спасибо за быстрый ответ. Я отредактировал вопрос выше, чтобы мы могли следить за этой проблемой. По сути, я установил последнюю версию julia, и проблема остается ... у вас есть какие-либо идеи? (выше приведены некоторые пояснения того, что я сделал) ... - person german brunini; 25.04.2020
comment
Вы удаляли папку /home/gbrunini/.julia/ после установки новой версии Юлии? или вы все еще используете старый со всеми пакетами? - person Przemyslaw Szufel; 26.04.2020