• A
  • A
  • A
  • АБВ
  • АБВ
  • АБВ
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта

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 нужно выполнить следующие действия:

  1. Загрузить модуль 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

Дополнительная информация


 

Нашли опечатку?
Выделите её, нажмите Ctrl+Enter и отправьте нам уведомление. Спасибо за участие!
Сервис предназначен только для отправки сообщений об орфографических и пунктуационных ошибках.