Проблема установки M XNet .jl с использованием Julia1.2 в UBUNTU 16.04 - PullRequest
2 голосов
/ 24 апреля 2020

У меня возникли проблемы с установкой пакета "M XNet .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) Мой второй подход заключался в использовании грубой силы, поэтому я скопировал и вставил все github scr папка для пакета julia M XNet .jl в заданную папку на моем личном рабочем столе. Это было сделано подпрограммой подпрограммой, папка за папкой, пока я не скопировал каждый файл и папку. Поэтому справедливо сказать, что папка scr в этой ссылке: https://github.com/apache/incubator-mxnet/tree/master/julia/src теперь выглядит точно так же, как моя.

Теперь я подошел к своей папке и продолжил, как если бы «M XNet .jl» была любой другой обычной функцией, которую я использовал в прошлом, поэтому я набираю (On 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

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

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

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")))'

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

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

Заранее большое спасибо, я надеюсь, что вы все делаете хорошо.

  • UBUNTU 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 я пошел и установил последнюю версию Джулии, 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 подпрограмма M XNet .jl. Есть идеи, что это значит?

1 Ответ

2 голосов
/ 25 апреля 2020

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

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

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

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

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

...