Julia
👉Вернуться к списку инструкций
Julia – это высокопроизводительный язык программирования, созданный специально для научных вычислений, численного моделирования и анализа данных. Он сочетает в себе скорость низкоуровневых языков, таких как C и Fortran, с простотой и выразительностью высокоуровневых языков, таких как Python и MATLAB. Julia разработана с акцентом на параллелизм, многопоточность и возможность работы с массивами и матрицами «из коробки», что делает её особенно удобной для задач в области вычислительной физики, статистики, машинного обучения и обработки больших данных.
Официальный сайт: https://julialang.org
Доступные версии на суперкомпьютере НИУ ВШЭ
module load julia/v1.5.3 # Julia версии 1.5.3
module load julia/v1.7.3 # Julia версии 1.7.3
module load julia/v1.9.0 # Julia версии 1.9.0
module load julia/v1.11.5 # Julia версии 1.11.5
Обновление версий производится по запросу пользователей.
Пользователи: Департамент анализа данных и искусственного интеллекта, любые подразделения НИУ ВШЭ.
Ключевые особенности
-
Высокая производительность: благодаря технологии JIT-компиляции (через LLVM) Julia достигает скоростей, сопоставимых с C и Fortran, при этом сохраняя удобство высокоуровневого синтаксиса.
-
Нативная поддержка параллельных и распределённых вычислений, включая многопоточность, кластерные вычисления и ускорение расчетов на GPU.
-
Гибкость и простота синтаксиса, что делает язык удобным как для быстрого прототипирования, так и для разработки масштабируемых научных приложений.
-
Интеграция с другими языками программирования, включая вызов функций из C, Python, R, MATLAB и Fortran без потери производительности.
-
Поддержка пакетов для машинного обучения (Flux.jl, MLJ.jl), дифференцируемого программирования (Zygote.jl), численного моделирования, визуализации данных.
Рис. 1. Пример визуализации на Julia с использованием библиотеки Makie.jl
Выполнение расчетов на суперкомпьютере с помощью JupyterHub
Для работы с Julia на суперкомпьютере с возможностью выполнения кода в Jupyter нужно выполнить следующие действия:
- Загрузить модуль Julia:
module load julia/v1.7.3
2. Запустить Julia:
julia
3. Установить пакет для Jupyter:
import Pkg;
Pkg.add("IJulia")
4. При необходимости, установить дополнительные пакеты. Их можно будет установить и позднее, уже во время работы в ноутбуке. Например:
import Pkg; Pkg.add("Ripserer") Pkg.add("Plots") Pkg.add("Distances") Pkg.add("NPZ")
5. Запустить Jupyter-notebook через систему HPC TaskMaster (https://lk.hpc.hse.ru/jupyter). Дождаться выделения ресурсов.
6. Запустить ноутбук и выбрать нужное ядро:
7. Готово! Теперь ноутбук работоспособен.
Выполнение расчетов на суперкомпьютере с помощью sbatch
Для выполнения расчёта на суперкомпьютере необходимо подготовить скрипт-файл для очереди задач с запросом требуемых ресурсов (см. общую инструкцию по запуску задач на суперкомпьютере). Для постановки задачи в очередь сформируем скрипт julia.sbatch со следующим текстом:
#!/bin/bash #SBATCH --job-name=julia-test # Название задачи #SBATCH --time=01:00:00 # Максимальное время выполнения (1 час) #SBATCH --error=julia-%j.err # Файл для вывода ошибок #SBATCH --output=julia-%j.log # Файл для вывода результатов #SBATCH --constraint="type_a|type_b|type_c" # Предпочитаемые типы вычислительных узлов #SBATCH --nodes 1 # Число используемых узлов #SBATCH --ntasks 4 # Количество MPI процессов = ядер CPU #SBATCH --mail-user=ваша_почта # Укажите ваш email для отправки уведомлений #SBATCH --mail-type=END,FAIL # События, требующие уведомления
# Деактивация окружения
source deactivate
# Очистка модулей
module purge # Загрузка модуля Julia module load julia/v1.7.3
# Команда запуска
julia <program_name>.jl
Для постановки задачи в очередь необходимо выполнить команду sbatch julia.sbatch. Посмотреть состояние своих задач можно с помощью команды mj. Результат выполнения скрипта будет сохранён в файл julia-kit-00000.log (где 00000 - номер задачи в очереди). Сообщения, выводимые в процессе работы Julia, будут записаны в файл julia-00000.err (где 00000 - номер задачи в очереди).
О параллельных вычислениях на Julia
Некоторые пакеты, такие как Ripserer.jl, автоматически используют доступные вычислительные ресурсы, включая несколько ядер процессора. Однако в ряде случаев реализация параллельных участков кода требует ручного управления. Для этого необходимо запускать Julia с указанием числа потоков с помощью флага -t. Для мониторинга использования процессорных ресурсов рекомендуется воспользоваться средствами отслеживания нагрузки в системе HPC TaskMaster. Пример с ручным управлением потоками:
using Base.Threads
function process_data_parallel(data)
results = zeros(length(data))
@threads for i in eachindex(data)
println("Thread $(threadid()) is processing element $i")
results[i] = data[i]^2
end
return results
end
data = 1:10
result = process_data_parallel(data)
println(result)
Запустим скрипт на 4-х ядрах CPU:
julia -t 4 example.jl
Или укажем Julia самостоятельно выбрать количество потоков:
julia -t auto example.jl
Дополнительная информация
- Документация Julia
- Бесплатные учебные материалы JuliaAcademy
- Репозиторий Julia на GitHub
- Руководство по визуализации с помощью Makie
- Инструкция по работе с системой мониторинга эффективности HPC TaskMaster
Нашли опечатку?
Выделите её, нажмите Ctrl+Enter и отправьте нам уведомление. Спасибо за участие!
Сервис предназначен только для отправки сообщений об орфографических и пунктуационных ошибках.