Load and run Julia
Note
At the Swedish HPC centers we call the applications available via the module system modules:
Objectives
Learn to load Julia
Get started with the Julia command line
Learn to run Julia scripts
Instructor note
Lecture and demo 15 min
Exercise 15 min
Total time 30 min
Julia can be started after a Julia module is loaded. The module activates paths to a specific version of the julia interpreter and its libraries and packages.
Short cheat sheet
See which modules exists:
module spider
orml spider
.Find module versions for a particular software:
module spider <software>
Modules depending only on what is currently loaded:
module avail
orml av
See which modules are currently loaded:
module list
orml
Load a module:
module load <module>/<version>
orml <module>/<version>
Unload a module:
module unload <module>/<version>
orml -<module>/<version>
Unload all modules except the ‘sticky’ modules:
module purge
orml purge
Warning
Note that the module systems at UPPMAX and HPC2N are slightly different.
All modules at UPPMAX, for instance, not directly related to bio-informatics are shown by ml avail
.
Modules at many other centres are only available when one has loaded all prerequisites,
for instance the compilers (GNU
, Intel
, etc.).
Check for Julia versions
Principle
For some clusters
$ module avail julia
How will it look like?
Example output for Tetralith
$ module avail julia
---------------------------------- /software/sse2/tetralith_el9/modules -----------------------------------
julia/recommendation (D) julia/1.6.1-nsc1-bdist julia/1.9.4-bdist
julia/1.1.0-nsc1-gcc-2018a-eb julia/1.7.2-nsc1-bdist julia/1.10.2-bdist
julia/1.4.1 julia/1.8.5-nsc1-bdist
Where:
D: Default Module
Use "module spider" to find all possible modules and extensions.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
Or, at clusters that hides the modules until relevant dependencies are loaded (HPC2N & PDC)
$ module spider julia
How will it look like?
Example output for Dardel
$ module spider julia
-------------------------------------------------------------------------------------------------------
julia:
-------------------------------------------------------------------------------------------------------
Description:
Julia is a high-level general-purpose dynamic programming language that was originally designed
to address the needs of high-performance numerical analysis and computational science, without
the typical need of separate compilation to be fast, also usable for client and server web use,
low-level systems programming or as a specification language (wikipedia.org). Julia provides
ease and expressiveness for high-level numerical computing, in the same way as languages such as
R, MATLAB, and Python, but also supports general programming. To achieve this, Julia builds upon
the lineage of mathematical programming languages, but also borrows much from popular dynamic
languages, including Lisp, Perl, Python, Lua, and Ruby (julialang.org).
Versions:
julia/1.8.2-cpeGNU-22.06
julia/1.9.3-cpeGNU-22.06
julia/1.9.3-cpeGNU-23.03
julia/1.10.2-cpeGNU-23.03
julia/1.10.2-cpeGNU-23.12
Other possible modules matches:
Julia libuv-julia
-------------------------------------------------------------------------------------------------------
To find other possible module matches execute:
$ module -r spider '.*julia.*'
-------------------------------------------------------------------------------------------------------
For detailed information about a specific "julia" package (including how to load the modules) use the module's full name.
Note that names that have a trailing (E) are extensions provided by other modules.
For example:
$ module spider julia/1.10.2-cpeGNU-23.12
-------------------------------------------------------------------------------------------------------
Load a Julia module
For reproducibility, we recommend ALWAYS loading a specific module for the Julia version instead of using the default one.
Principle
Use the overview of existing module above!
Load the module!
At some clusters:
$ module load julia/1.8.5
or at cluster that includes “architecture” or “build name” in module name:
$ ml julia/1.10.2-bdist
Some clusters will require other modules to be loaded (Kebnekaise and Dardel)
First check how to load (see Check for Julia versions above)
$ module spider julia/1.10.2-cpeGNU-23.12
...
You will need to load all module(s) on any one of the lines below before the "julia/1.10.2-cpeGNU-23.12" module is available to load.
PDC/23.12
Load PDC/23.12 first and then the julia module
$ ml PDC/23.12 julia/1.10.2-cpeGNU-23.12
Run
Run Julia as a session
After loading the appropriate modules for Julia, you will have access to the read-eval-print-loop (REPL) command line by typing
julia
:
$ julia
In julia REPL
How will it look like?
$ ml julia/1.8.5
$ julia
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.8.5 (2023-01-08)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia>
Modes: Julian mode
Julia has different modes, the one we arrive at is the so-called
Julian
mode, where one can execute commands.The description for accessing these modes will be given in the following paragraphs.
Once you are done with your work in any of the modes, you can return to the
Julian
mode by pressing thebackspace
key.
Shell mode
While being on the Julian mode you can enter the shell
mode by typing ;
:
julia>;
shell>pwd
/current-folder-path
this will allow you to use Linux commands. Notice that the availability of these commands depend on the OS, for instance, on Windows it will depend on the terminal that you have installed and if it is visible to the Julia installation.
Package manage mode
Another mode available in Julia is the package manager
mode, it can be accessed by typing
]
in the Julian
mode:
julia>]
(v1.8) pkg>
this will make your interaction with the package manager Pkg easier, for instance,
instead of typing the complete name of Pkg commands such as Pkg.status()
in the
Julian
mode, you can just type status
in the package
mode.
Help mode
The last mode is the help
mode, you can enter this mode from the Julian
one by
typing ?
, then you may type some string from which you need more information:
julia>?
help?> ans
search: ans transpose transcode contains expanduser instances MathConstants readlines
LinearIndices leading_ones leading_zeros
ans
A variable referring to the last computed value, automatically set at the interactive prompt.
Exiting
Exit with
julia> <Ctrl-D>
or
julia> exit()
The Julian modes summary
enter the shell mode by typing
;
go back to Julian mode by
<backspace>
access the package manager mode by typing
]
in the Julian modeuse the help mode by typing
?
in the Julian mode
Run a Julia script
You can run a Julia script on the Linux shell as follows:
$ julia example.jl
where the script is a text file could contain these lines:
println("hello world")
Exercises
1a. Find out which versions are on your cluster from documentation
Find/search for that documentation!
1b. Find out which versions are on your cluster from command line
Use the
spider
oravail
module commands
Solution
Check all available Julia versions with:
$ module avail julia
Check all available version Julia versions with:
$ module spider julia
Notice that the output if you are working on the Intel (kebnekaise.hpc2n.umu.se) or AMD (kebnekaise-amd.hpc2n.umu.se) login nodes is different. In the former, you will see more installed versions of Julia as this hardware is older.
To see how to load a specific version of Julia, including the prerequisites, do
$ module spider Julia/<version>
Example for Julia 1.8.5
$ module spider Julia/1.8.5-linux-x86_64
Check all available version Julia versions with:
$ module spider Julia
To see how to load a specific version of Julia, including the prerequisites, do
$ module spider Julia/<version>
Example for Julia 1.8.5
$ module spider Julia/1.8.5-linux-x86_64
Check all available version Julia versions with:
$ module avail Julia
Example for Julia 1.8.5
$ module spider julia/1.8.5-nsc1-bdist
Check all available version Julia versions with:
$ module spider Julia
To see how to load a specific version of Julia, including the prerequisites, do
$ module spider Julia/<version>
Example for Julia 1.8.5
$ module spider Julia/1.8.5-linux-x86_64
Output at UPPMAX as of Oct 2024
$ module avail julia ----------------------------- /sw/mf/rackham/compilers ----------------------------- julia/1.0.5_LTS julia/1.6.1 julia/1.7.2 julia/1.9.3 (D) julia/1.1.1 julia/1.6.3 julia/1.8.5 (L) julia/1.4.2 julia/1.6.7_LTS julia/1.9.1 Where: D: Default Module Use "module spider" to find all possible modules and extensions. Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
Output at HPC2N as of Oct 2024
$ module spider julia # Assuming you are working on the Intel login nodes ------------------------------------------------------------------------------------------------ Julia: ------------------------------------------------------------------------------------------------ Description: Julia is a high-level, high-performance dynamic programming language for numerical computing Versions: Julia/1.5.3-linux-x86_64 Julia/1.7.1-linux-x86_64 Julia/1.8.5-linux-x86_64 Julia/1.9.3-linux-x86_64 ------------------------------------------------------------------------------------------------ For detailed information about a specific "Julia" package (including how to load the modules) use the module's full name. Note that names that have a trailing (E) are extensions provided by other modules. For example: $ module spider Julia/1.8.5-linux-x86_64 ------------------------------------------------------------------------------------------------
Output at LUNARC as of Oct 2024
$ module spider julia ----------------------------------------------------------------------------------------------------- Julia: ----------------------------------------------------------------------------------------------------- Description: Julia is a high-level, high-performance dynamic programming language for numerical computing Versions: Julia/1.8.5-linux-x86_64 Julia/1.9.0-linux-x86_64 Julia/1.9.2-linux-x86_64 Julia/1.9.3-linux-x86_64 Julia/1.10.4-linux-x86_64
Output at NSC as of Mar 2025
$ module avail julia ---------------------------------- /software/sse2/tetralith_el9/modules ----------------------------------- julia/recommendation (D) julia/1.6.1-nsc1-bdist julia/1.9.4-bdist julia/1.1.0-nsc1-gcc-2018a-eb julia/1.7.2-nsc1-bdist julia/1.10.2-bdist julia/1.4.1 julia/1.8.5-nsc1-bdist
Output at PDC as of Mar 2025
$ module spider julia ------------------------------------------------------------------------------------------------------- julia: ------------------------------------------------------------------------------------------------------- Description: Julia is a high-level general-purpose dynamic programming language that was originally designed to address the needs of high-performance numerical analysis and computational science, without the typical need of separate compilation to be fast, also usable for client and server web use, low-level systems programming or as a specification language (wikipedia.org). Julia provides ease and expressiveness for high-level numerical computing, in the same way as languages such as R, MATLAB, and Python, but also supports general programming. To achieve this, Julia builds upon the lineage of mathematical programming languages, but also borrows much from popular dynamic languages, including Lisp, Perl, Python, Lua, and Ruby (julialang.org). Versions: julia/1.8.2-cpeGNU-22.06 julia/1.9.3-cpeGNU-22.06 julia/1.9.3-cpeGNU-23.03 julia/1.10.2-cpeGNU-23.03 julia/1.10.2-cpeGNU-23.12 Other possible modules matches: Julia libuv-julia ------------------------------------------------------------------------------------------------------- To find other possible module matches execute: $ module -r spider '.*julia.*' ------------------------------------------------------------------------------------------------------- For detailed information about a specific "julia" package (including how to load the modules) use the module's full name.
1c. Which method to trust?
Solution
Looking for modules in a session on the cluster is closer to the truth
2. Try to start julia without having loaded julia module
If you have a
julia
module loaded already, you may unload it with theunload
command.Tip: Type:
unload julia
and press<tab>
until the full module name is shown, then press<enter>
. (If the Julia module starts with an uppercase, use that instead!)
Solution
$ julia
3. Load and start julia
from the command line
Solution
Go back and check which Julia modules were available. To load version 1.8.5, do:
$ module load julia/1.8.5
Note: Lowercase j
.
For short, you can also use:
$ ml julia/1.8.5
$ module load Julia/1.8.5-linux-x86_64
Note: Uppercase J
.
For short, you can also use:
$ ml Julia/1.8.5-linux-x86_64
$ module load Julia/1.8.5-linux-x86_64
Note: Uppercase J
.
For short, you can also use:
$ ml Julia/1.8.5-linux-x86_64
$ module load julia/1.10.2-bdist
Note: lowercase j
.
For short, you can also use:
$ ml julia/1.10.2-bdist
$ module load PDC/23.12 julia/1.10.2-cpeGNU-23.12
Note: lowercase j
.
For short, you can also use:
$ ml PDC/23.12 julia/1.10.2-cpeGNU-23.12
4. Getting familiar with Julia REPL
It is important that you know how to navigate on the Julia command line. Here is where you work live with data and test aout things and you may install packages.
This exercise will help you to become more familiar with the REPL. Do the following steps:
Start a Julia session. In the
Julian
mode, compute the sum the numbers 5 and 6Change to the
shell
mode and display the current directoryNow, go to the
package
mode and list the currently installed packagesFinally, display help information of the function
println
inhelp
mode.
Solution
$ julia julia> 5 + 6 julia>; shell> pwd julia>] pkg> status julia>? help?> println
5. Load another module and run a script
Load the latest version and run
Run the following serial script (
serial-sum.jl
) which accepts two integer arguments as input:x = parse( Int32, ARGS[1] ) y = parse( Int32, ARGS[2] ) summ = x + y println("The sum of the two numbers is ", summ)
Solution for HPC2N
$ ml purge > /dev/null 2>&1 # recommended purge
$ ml Julia/1.8.5-linux-x86_64 # Julia module
$ julia serial-sum.jl Arg1 Arg2 # run the serial script
Solution for UPPMAX
This batch script is for UPPMAX. Adding the numbers 2 and 3. (FIX)
$ ml julia/1.8.5 # Julia module
julia serial-sum.jl Arg1 Arg2 # run the serial script
Solution for LUNARC
This batch script is for UPPMAX. Adding the numbers 2 and 3. (FIX)
$ ml Julia/1.8.5-linux-x86_64 # Julia module
julia serial-sum.jl Arg1 Arg2 # run the serial script
Solution for NSC
This batch script is for UPPMAX. Adding the numbers 2 and 3. (FIX)
$ ml julia/1.10.2-bdist # Julia module
julia serial-sum.jl Arg1 Arg2 # run the serial script
Solution for PDC
This batch script is for UPPMAX. Adding the numbers 2 and 3. (FIX)
$ ml PDC/23.12 julia/1.10.2-cpeGNU-23.12 # Julia module
julia serial-sum.jl Arg1 Arg2 # run the serial script
6. Check your understanding
Check your understanding and answer in the shared document
Can you start Julia without loading a Julia module?
Yes?
No?
Which character to use to toggle
to the
package
mode?back to the
Julia
mode?to the
help
mode?to the
shell
mode?
Keypoints
Before you can run Julia scripts or work in a Julia shell, first load a Julia module with
module load <julia module>
Start a Julia shell session with
julia
It offers several modes that can make your workflow easier, i.e.
Julian
shell
package manager
help
Run scripts with
julia <script.jl>