Проблема с установкой 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 и использовать его. Если я понимаю все остальное как побочный эффект, тем лучше, но я соглашусь с тем, что все установлено правильно, поэтому для краткости:
- В чем проблема?,
- Могу ли я исправить это, просто "скопировав и вставив" инструкции из документации?
- Если нет, как мне установить MXNet.jl?,
- Я путаю 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)
Так,
- Почему установка новой julia не решает проблему заново
.julia
? - Все остальные пакеты, которые у меня установлены, работают нормально,
MXNet.jl
единственный пакет, который нужно переписать.julia
? - Проблема, похоже, связана со строками:
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
(поэтому вам следует перестроить). В нынешней Юлии есть более изящное решение с артефактами Юлии.