Nvidia Jetson Nano

Juilia already runs on the Raspberry Pi. Would this be a good system for prototyping Flux.jl applications?
Maybe a bit short on memory.

5 Likes

My Jetson Nano arrived this morning. ARM 8 64 bit architecture.
Master version of Julia has been compiling all day!

3 Likes

If prototyping is recognized to be the phase where developer time is more important than hardware cost, then I guess

answers your question.

2 Likes

Does the prebuilt AArch64 binary work?

It is ideal for low-cost DIY projects :slight_smile:

image

“For the price, the Jetson Nano TensorRT inference performance is looking very good.”
“The Jetson Nano did come out much faster than the ODROID-XU4 for the multi-threaded Rust benchmarks.”

“Overall this is arguably the best sub-$100 Arm developer board we’ve seen to date depending upon your use-cases. The Jetson Nano will certainly open up NVIDIA Tegra SoCs to appearing in more low-cost DIY projects and other hobbyist use-cases as well as opening up GPU/CUDA acceleration that until now has really not been possible on the low cost boards.”

Simon, I built version 1.2.0-DEV from GitHub yesterday. The build worked perfectly and we tested CUarrays yesterday.
I do not have the board at work today. I will report back regarding the prebuilt AArch64 binary this evening UK time. I See no reason why it would not work.

2 Likes

I confirm the Jetson Nano runs the AARCH64 build for the Raspberry PI
Version 1.0.3 TLS downloaded from the Julialang.org site.

Can anyone suggest benchmarks or tests I could run?

5 Likes

If you are still looking for a benchmark, maybe you can test the speed of inference of the pre-trained vgg19 model (https://github.com/FluxML/Metalhead.jl) ?

Something as mundane as a matrix multiplication would already be quite interesting to me:

using CuArrays
using BenchmarkTools

A = randn(Float32,1000,10000); cuA = CuArray(A)
B = @btime Array(cuA*cuA');

(I get 3.214 ms on a GeForce GTX 1080, but the GPU is actually busy with other work too)

CuArray test Note 128 core GPU onboard
A is 64x64 array Time 426 usec
A is 128x128 array Time 644 usec
A is 256x256 array Time 2.538 msec
A is 512x512 array Time 4.262 msec
A is 1024x1024 array Time 15.633 msec

A is 1000x1000 array Time 15.703 msec

3 Likes

I have access to a boat load of rackmount GPU servers if you would like some specific tests run :slight_smile:

Sadly I have Julia 1.1.0 installed on my pet 1080 server - and CUArrays has a conflict with the SIUnits package. Grrr…

Just got mine yesterday, glad to know that Julia will run

One question, the prebuild Flux model vgg19 would not run as it seems to need more than 4Gbytes of RAM.
Is there an easy way to estimate how much RAM a model will consume?

Hi @johnh. Could you share your build - the one you’ve built from source? I could get Julia working by building it from source - v1.1.1, but all the CUDA related libraries are failing on the Jetson Nano. I’ve attached the stacktrace here for reference. Also, could you tell me the exact branch you’ve used to build Julia ? I couldn’t find 1.2.0-DEV , but I did find 1.2.0-rc1, 2, etc.

ERROR: LoadError: LoadError: syntax: suffix not allowed after `var"
                    push!(msvc_paths, msvc_path)
                end
            end
        end
        ## look in PATH as well
        let msvc_path = Sys.which("`
Stacktrace:
 [1] top-level scope at /mnt/home/f20160165/.julia/packages/CUDAapi/3nRn3/src/discovery.jl:504
 [2] include at ./boot.jl:328 [inlined]
 [3] include_relative(::Module, ::String) at ./loading.jl:1105
 [4] include at ./Base.jl:31 [inlined]
 [5] include(::String) at /mnt/home/f20160165/.julia/packages/CUDAapi/3nRn3/src/CUDAapi.jl:1
 [6] top-level scope at /mnt/home/f20160165/.julia/packages/CUDAapi/3nRn3/src/CUDAapi.jl:13
 [7] include at ./boot.jl:328 [inlined]
 [8] include_relative(::Module, ::String) at ./loading.jl:1105
 [9] include(::Module, ::String) at ./Base.jl:31
 [10] top-level scope at none:2
 [11] eval at ./boot.jl:330 [inlined]
 [12] eval(::Expr) at ./client.jl:433
 [13] top-level scope at ./none:3
in expression starting at /mnt/home/f20160165/.julia/packages/CUDAapi/3nRn3/src/discovery.jl:504
in expression starting at /mnt/home/f20160165/.julia/packages/CUDAapi/3nRn3/src/CUDAapi.jl:13
ERROR: LoadError: Failed to precompile CUDAapi [3895d2a7-ec45-59b8-82bb-cfc6a382f9b3] to /mnt/home/f20160165/.julia/compiled/v1.4/CUDAapi/c7oFM_1M5ab.ji.
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at ./loading.jl:1274
 [3] _require(::Base.PkgId) at ./loading.jl:1024
 [4] require(::Base.PkgId) at ./loading.jl:922
 [5] require(::Module, ::Symbol) at ./loading.jl:917
 [6] include at ./boot.jl:328 [inlined]
 [7] include_relative(::Module, ::String) at ./loading.jl:1105
 [8] include(::Module, ::String) at ./Base.jl:31
 [9] top-level scope at none:2
 [10] eval at ./boot.jl:330 [inlined]
 [11] eval(::Expr) at ./client.jl:433
 [12] top-level scope at ./none:3
in expression starting at /mnt/home/f20160165/.julia/packages/CUDAdrv/ADRHQ/src/CUDAdrv.jl:3
ERROR: LoadError: Failed to precompile CUDAdrv [c5f51814-7f29-56b8-a69c-e4d8f6be1fde] to /mnt/home/f20160165/.julia/compiled/v1.4/CUDAdrv/HMhfu_1M5ab.ji.
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at ./loading.jl:1274
 [3] _require(::Base.PkgId) at ./loading.jl:1024
 [4] require(::Base.PkgId) at ./loading.jl:922
 [5] require(::Module, ::Symbol) at ./loading.jl:917
 [6] include at ./boot.jl:328 [inlined]
 [7] include_relative(::Module, ::String) at ./loading.jl:1105
 [8] include(::Module, ::String) at ./Base.jl:31
 [9] top-level scope at none:2
 [10] eval at ./boot.jl:330 [inlined]
 [11] eval(::Expr) at ./client.jl:433
 [12] top-level scope at ./none:3
in expression starting at /mnt/home/f20160165/.julia/packages/CuArrays/eFBar/src/CuArrays.jl:3
ERROR: Failed to precompile CuArrays [3a865a2d-5b23-5a0f-bc46-62713ec82fae] to /mnt/home/f20160165/.julia/compiled/v1.4/CuArrays/7YFE0_1M5ab.ji.
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at ./loading.jl:1274
 [3] _require(::Base.PkgId) at ./loading.jl:1024
 [4] require(::Base.PkgId) at ./loading.jl:922
 [5] require(::Module, ::Symbol) at ./loading.jl:917
1 Like

Hello @vaibhavb I did that build several months ago.
I have to apologise - I need to get ready for work - I will hook up my Jetson Nano later on and let you know the details if I can.

2 Likes

No problem. Thanks a lot !

The build I did on the Nano was a few months ago, sorry. The 1.2.0-DEV was probably the latest branch at the time.
CUDA version is 10.0.166-1
Again this would be the latest version a few months ago!

cuda-compiler-10-0/unknown,now 10.0.166-1 arm64 [installed,automatic]
CUDA compiler

cuda-core-10-0/unknown 10.0.166-1 arm64
CUDA core tools

Just works for me on 1.2 and 10.0.166/18.04, test CuArrays is still running tho :joy::timer_clock:

#johnh and of course all :grinning:, yesterday my nano arrived and I’m dying to use it with Julia. A question to make the introduction easier: Is there such a thing like " 1st step instructions "?

Hello @Gunter_Faes How ws the Nano? Sorry - I was away over the last few days.
All you hve to do is download the ARM binary.

You can also download the Julia source and compile it up. The Nano can do this but it takes hours.

@johnh, thank you for this hints. I use Windows and have almost no Linux experience. But if I see it right, nvidia also supports Windows. Today comes my memory card and then I will see and post it…! :grinning: