Installing julia in the scaleway bare metal ARMv7 servers

question

#1

Hi everyone,

I come after being redirected from this issue on github repo, regarding how can I install the julia-1.0.1 version to my ARMv7 server.

I tried using the ppa but it doesn’t seem to be there for the ARMv7 architecture.


#2

Maybe you can install from the source.
According to the https://github.com/JuliaLang/julia/blob/master/README.arm.md#julia-on-arm-linux

  • “On the current Scaleway ARM servers, the Julia build works out of the box.”

#3

@ImreSamu, nah I tried and it didn’t work out that well. Have you managed to do it?

And I do think the Readme needs to be updated for ARM devices.


#4

Sorry, I don’t have an experience on ARM.

As I see only ( ARMv7 1.0.0 binaries ) exist now.


#5

I have made a little experiment,

so …

My workaround for SCALEWAY ARMv8 - tested NOW.

INSTANCE TYPE: ARM64-2GB
CORES: 4 ARMv8
MEMORY: 2 GB
IMAGE: Ubuntu Bionic Beaver (18.04 LTS)

Steps:

  • command line upgrade to 18.10 ( complex task ) + reboot
  • apt-get install julia
  • julia
root@arm8julia:~# julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.0.1
 _/ |\__'_|_|_|\__'_|  |  Ubuntu ⛬  julia/1.0.1-0ubuntu1
|__/                   |

julia> versioninfo()
Julia Version 1.0.1
Platform Info:
  OS: Linux (aarch64-linux-gnu)
  CPU: unknown
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, generic)

julia> 

system info:

root@arm8julia:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu Cosmic Cuttlefish (development branch)
Release:	18.10
Codename:	cosmic
root@arm8juliat:~# lscpu
Architecture:        aarch64
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           Cavium
Model:               1
Model name:          ThunderX 88XX
Stepping:            0x1
BogoMIPS:            200.00
NUMA node0 CPU(s):   0-3
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics
root@arm8julia:~# dpkg -l | grep -E 'llvm|julia'
ii  julia                                 1.0.1-0ubuntu1                    arm64        high-performance programming language for technical computing
ii  julia-common                          1.0.1-0ubuntu1                    all          high-performance programming language for technical computing (common files)
ii  libjulia1                             1.0.1-0ubuntu1                    arm64        high-performance programming language for technical computing (runtime library)
ii  libllvm6.0:arm64                      1:6.0.1-9                         arm64        Modular compiler and toolchain technologies, runtime library
root@arm8julia:~# 


#6

FWIW, Fedora 29 (upcoming) also has a Julia package for ARM (and PPC) now.


#7

just a note

I have tried a similar upgrade -> ( ARMv7 (C2) ubuntu 18.04 -> ubuntu 18.10 )
but the julia ( ubuntu18.10 + ARMv7) is not working for me.
( and the Scaleway ARMv7 CPU is extremely slow ( BogoMIPS: 50.00 )

root@scw-dbaef4:~# ldd /usr/bin/julia
	libjulia.so.1 => /usr/bin/../lib/arm-linux-gnueabihf/libjulia.so.1 (0xb6d22000)
	libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xb6d0f000)
	librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0xb6cf9000)
	libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6cd4000)
	libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb6cab000)
	libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6bb1000)
	libutf8proc.so.2 => /usr/bin/../lib/arm-linux-gnueabihf/libutf8proc.so.2 (0xb6b57000)
	libLLVM-6.0.so.1 => /usr/bin/../lib/arm-linux-gnueabihf/libLLVM-6.0.so.1 (0xb416b000)
	libunwind.so.8 => /usr/bin/../lib/arm-linux-gnueabihf/libunwind.so.8 (0xb412c000)
	libstdc++.so.6 => /usr/bin/../lib/arm-linux-gnueabihf/libstdc++.so.6 (0xb4019000)
	libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb3f9e000)
	/lib/ld-linux-armhf.so.3 (0xb6f1c000)
	libffi.so.6 => /usr/lib/arm-linux-gnueabihf/libffi.so.6 (0xb3f88000)
	libedit.so.2 => /usr/lib/arm-linux-gnueabihf/libedit.so.2 (0xb3f57000)
	libz.so.1 => /lib/arm-linux-gnueabihf/libz.so.1 (0xb3f2d000)
	libtinfo.so.6 => /lib/arm-linux-gnueabihf/libtinfo.so.6 (0xb3f01000)
	liblzma.so.5 => /lib/arm-linux-gnueabihf/liblzma.so.5 (0xb3ed7000)
root@scw-dbaef4:~# /usr/bin/julia
ERROR: Unable to find compatible target in system image.
root@scw-dbaef4:~# julia
ERROR: Unable to find compatible target in system image.


root@scw-dbaef4:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu Cosmic Cuttlefish (development branch)
Release:	18.10
Codename:	cosmic
root@scw-dbaef4:~# lscpu
Architecture:        armv7l
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
Vendor ID:           Marvell
Model:               2
Model name:          PJ4B-MP
Stepping:            0x2
CPU max MHz:         1333.0000
CPU min MHz:         666.5000
BogoMIPS:            50.00
Flags:               half thumb fastmult vfp edsp thumbee vfpv3 tls idiva idivt vfpd32 lpae
root@scw-dbaef4:~# dpkg -l | grep -E 'llvm|julia'
ii  julia                           1.0.1-0ubuntu1                    armhf        high-performance programming language for technical computing
ii  julia-common                    1.0.1-0ubuntu1                    all          high-performance programming language for technical computing (common files)
ii  libjulia1                       1.0.1-0ubuntu1                    armhf        high-performance programming language for technical computing (runtime library)
ii  libllvm6.0:armhf                1:6.0.1-9                         armhf        Modular compiler and toolchain technologies, runtime library
root@scw-dbaef4:~# 

˙``

#8

Thanks for the replies on this one, guys! :slight_smile:

However, I really do prefer using an LTS in Ubuntu ( if the new julia build aren’t available for CentOS etc ) .

Moreover, I tried downloading the binaries mentioned in https://julialang-s3.julialang.org/bin/linux/armv7l/1.0/julia-1.0.0-linux-armv7l.tar.gz but when I try to use that it throws the following error

root@pup:~#  ./julia-1.0.0/bin/julia
Invalid ARM instruction at 0xadc03274: 0xf2800050

signal (4): Illegal instruction
in expression starting at no file:0
__init__ at ./sysinfo.jl:92
jl_apply_generic at /buildworker/worker/package_linuxarmv7l/build/src/gf.c:2182
jl_apply at /buildworker/worker/package_linuxarmv7l/build/src/julia.h:1536 [inlined]
jl_module_run_initializer at /buildworker/worker/package_linuxarmv7l/build/src/toplevel.c:90
_julia_init at /buildworker/worker/package_linuxarmv7l/build/src/init.c:811
julia_init__threading at /buildworker/worker/package_linuxarmv7l/build/src/task.c:302
main at /buildworker/worker/package_linuxarmv7l/build/ui/repl.c:227
__libc_start_main at /lib/arm-linux-gnueabihf/libc.so.6 (unknown line)
_start at ./julia-1.0.0/bin/julia (unknown line)
Allocations: 2997 (Pool: 2992; Big: 5); GC: 0
Illegal instruction (core dumped)```

#9
  • the (Scaleway)ARMv7 is important ? imho the (Scaleway)ARMv8 is better ( same price + >4x performance )
  • on ARMv8 - you can containerize the Julia system.

on (Scaleway)ARMv8 + Ubuntu18.04 LTS

  • apt install docker.io

v1. ubuntu:18.10 - looks OK

  • docker run -it ubuntu:18.10 bash
  • apt-get update
  • apt-get install julia

v2. fedora:29 - looks OK

  • docker run -it fedora:29 bash
  • dnf update
  • dnf install julia

or you can create a customized JULIA docker image with your packages

FROM ubuntu:18.10
RUN    apt-get update \
    && apt-get install -y --no-install-recommends \
        build-essential \
        ca-certificates \
        git \
        nano \
        sqlite3 \
        julia \
        wget \
    && rm -rf /var/lib/apt/lists/* /tmp/*
RUN julia -O3 -e 'using Pkg; Pkg.REPLMode.pkgstr("add CSV        ; precompile"); using CSV'
RUN julia -O3 -e 'using Pkg; Pkg.REPLMode.pkgstr("add DataFrames ; precompile"); using DataFrames'
RUN julia -O3 -e 'using Pkg; Pkg.REPLMode.pkgstr("add DataStreams; precompile"); using DataStreams'
root@scw-058524:~/julia# docker run -it julia  julia 
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.0.1
 _/ |\__'_|_|_|\__'_|  |  Ubuntu ⛬  julia/1.0.1-0ubuntu1
|__/                   |

julia> 

#10

Hi @ImreSamu

Thanks for the speed comparisons! I have since switched to ARMv8 servers and I installed docker already.

However, the nature of my experiement is that I’d have to call julia from python pyjulia library and see if I could use the julia libraries together from python. I don’t know whether this is possible using the docker image ?

Please let me know if there’s a julia-1.0 build which I could run natively on the ARMv8 instance :slight_smile:


#11

You can subscribe to the https://github.com/JuliaLang/julia/issues/28783 notifications.
I prefer the AMD64 platform -> more user -> less surprise. ( imho: this is much better platform for the first experiments with julia + python pyjulia ) If it works - you can re-test on ARMv8.

you can put and run everything (python + julia + R + … ) inside to the docker image.
for example : Jupyter datascience-notebook ( x86_64 )

or math-server-docker

I prefer the Docker-based development/experimenting. - because I have a clean environment and no package problems.


#12

Hi @ImreSamu,

I have since moved away from the ARM servers based on this experience and the issues I’ve been facing. I do agree with your advice regarding sticking with what’s more generally used.

And I am grateful for the docker based links you have shared! :+1:


#13

Don’t the default binaries from julialang.org for ARM just work? We just need to delete README.arm.md.

-viral


#14

As I see - no ARMv7 / ARMv8 binaries link ( for the latest Julia (>= v1.0) ) here :

Only Julia v0.5.2 (unmaintained) for ARMv7

Or on the old website: v0.7.0-beta2 for ARMv7

  • http://www_old.julialang.org/downloads/

The https://status.julialang.org/download/linux-arm - link (from README.arm.md ) not working for me.

As I see the Ubuntu 18.10 Julia (ARMv8) compiled with USE_SYSTEM_LLVM=1 flags.
but "Using an unpatched or different version of LLVM will result in errors and/or poor performance. "