JuliaHPC
moduleOn Noctua, the julia
executable is only available after loading a Julia module (see Julia: Getting Started). To use the Julia VS Code extension within a VS Code SSH remote session you must make sure that a Julia module is automatically loaded when the Julia Language Server starts (i.e. when opening or creating a Julia file) or when you open the Julia REPL (i.e. Julia: Start REPL
). This can be done by pointing the extension to a wrapper script which loads the module and then starts julia.
We provide a default wrapper script under /opt/software/pc2/julia/julia_vscode
on Noctua 2 (/cm/shared/apps/pc2/julia/julia_vscode
on Noctua 1) and you should point the Julia VS Code extension to this wrapper by specifying the Julia: Executable Path
(julia.executablePath
) setting.
Note that the default wrapper above automatically loads the latest version of the JuliaHPC
module and, correspondingly, the latest Julia version. If you want to use a specific version, you may point the Julia VS Code extension to version specific wrapper scripts that we provide in the root directory of the module (given by the environment variable $EBROOTJULIAHPC
after you’ve loaded the module). Example: /opt/software/pc2/EB-SW/software/JuliaHPC/1.8.2-foss-2022a-CUDA-11.7.0/julia_vscode
on Noctua 2.
Open a terminal and ssh into Noctua 2.
Load the Julia
or JuliaHPC
module that you want to use, e.g. module load lang/JuliaHPC/1.8.5-foss-2022a-CUDA-11.7.0
.
Start julia
and install the IJulia
package into the default, global environment (i.e. v1.8
in this example case).
Afterwards, execute using IJulia
and use IJulia.installkernel("Noctua 2 JuliaHPC")
.
Finally, open VS Code, open a remote session on Noctua 2, and select your custom IJulia kernel when running Jupyter notebook files.
Note: If you plan to use your custom IJulia kernel in our centrally hosted JupyterHub service, use IJulia.installkernel("Noctua 2 JuliaHPC"; env=Dict("JULIA_DEPOT_PATH"=>ENV["JULIA_DEPOT_PATH"]))
.
An exemplary julia wrapper script on Noctua 2:
#!/bin/bash # ------------------------------------------------------------ export MODULEPATH=/etc/modulefiles:/usr/share/modulefiles || : source /usr/share/lmod/lmod/init/profile if [ -f "/opt/software/pc2/lmod/modules/DefaultModules.lua" ];then export MODULEPATH="$MODULEPATH:/opt/software/pc2/lmod/modules" export LMOD_SYSTEM_DEFAULT_MODULES="DefaultModules" else if [ -f "/usr/share/modulefiles/StdEnv.lua" ];then export LMOD_SYSTEM_DEFAULT_MODULES="StdEnv" fi fi module --initial_load restore # ------------------------------------------------------------ module load lang module load JuliaHPC # or module load Julia exec julia "${@}" |
Afterwards, make the wrapper executable (i.e. via chmod u+x julia_wrapper.sh
) and make the "Executable Path" setting of the Julia extension (julia.executablePath
) point to this file. (Note: The first block makes the module
command available.)
direnv
environment with the integrated Julia REPLModify the script above to the following:
#!/bin/bash # ------------------------------------------------------------ export MODULEPATH=/etc/modulefiles:/usr/share/modulefiles || : source /usr/share/lmod/lmod/init/profile if [ -f "/opt/software/pc2/lmod/modules/DefaultModules.lua" ];then export MODULEPATH="$MODULEPATH:/opt/software/pc2/lmod/modules" export LMOD_SYSTEM_DEFAULT_MODULES="DefaultModules" else if [ -f "/usr/share/modulefiles/StdEnv.lua" ];then export LMOD_SYSTEM_DEFAULT_MODULES="StdEnv" fi fi module --initial_load restore # ------------------------------------------------------------ DIRENV=$HOME/.local/bin/direnv # path to you direnv binary export DIRENV_BASH=/bin/bash ml lang ml JuliaHPC if [ -z "${JULIA_LANGUAGESERVER}" ]; then # REPL process; use direnv exec to load .envrc file exec "${DIRENV}" exec "${PWD}" julia "${@}" else # Language Server process; exec the fallback julia exec julia "${@}" fi |
This will load the direnv
environment when starting the integrated Julia REPL (and only the JuliaHPC
module when starting the Julia Language Server).
You can same approach as above but the module related paths are different. Specifically, on Noctua 1 the module part should be
# ------------------------------------------------------------ export MODULEPATH=/cm/shared/apps/pc2/lmod/modules:/cm/shared/apps/pc2/EB-SW/modules/all || : source /usr/share/lmod/lmod/init/profile if [ -f "/cm/shared/apps/pc2/lmod/modules/DefaultModules.lua" ];then export LMOD_SYSTEM_DEFAULT_MODULES="DefaultModules" else if [ -f "/usr/share/modulefiles/StdEnv.lua" ];then export LMOD_SYSTEM_DEFAULT_MODULES="StdEnv" fi fi module --initial_load restore # ------------------------------------------------------------ |