Проблема с установкой 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]

В этот момент ничего плохого не происходило. Сообщения об ошибках не выдавались. Приятно. Теперь я вернулся к Julia 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) Мой второй подход заключался в использовании грубой силы, поэтому я скопировал и вставил всю папку scr github для пакета 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)

Так,

  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. Есть идеи, что это значит?

1 ответ

Результат вашего add MXNet показывает, что он уже установлен.

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

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

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

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

Другие вопросы по тегам