Stata
👉Вернуться к списку инструкций
Stata — пакет статистического программного обеспечения общего назначения для обработки данных, визуализации, статистики и автоматизированной отчетности. Используется исследователями во многих областях, включая биомедицину, экономику, эпидемиологию и социологию. Доступные версии на суперкомпьютере НИУ ВШЭ
module load stata/v14.2 # релиз 14.2 от 01.2018
В рамкам имеющейся лицензии пользователям доступна возможность использования Stata-MP на 2 ядрах процессора. Для большей производительности рекомендуется использовать дополнительный модуль parallel, не имеющий ограничения на количество ядер.
Пользователи: Центр трудовых исследований, любые подразделения НИУ ВШЭ.
Запуск Stata на суперкомпьютере в пакетном режиме с использованием модуля parallel
Для выполнения расчётов пакетном (неинтереактивном) режиме необходимо подготовить .do файл и скрипт-файл для постановки задачи в очередь Slurm. Примеры файлов доступны на суперкомпьютере в каталоге /opt/software/stata/examples/Пример входного файла для Stata, в котором сравнивается производительность вычислений с использованием parfor (stata_parfor.do):
// Установка модуля parallel
net install parallel, from (/opt/software/stata/packages/parallel/) replace
mata mata mlib index
// Передаём в переменную ncores количество выделенных ядер процессора
args ncores
clear all
timer clear
set seed 123
local n = 5e6
set obs `n'
gen x = runiform()
gen y_pll = .
clonevar y_ser = y_pll
prog def parfor
args var
forval i=1/`=_N' {
qui replace `var' = sqrt(x) in `i'
}
end
timer on 1
// Выполнение алгоритма с использованием модуля parallel
parallel initialize `ncores', f
parallel, prog(parfor): parfor y_pll
timer off 1
timer on 2
// Выполнение алгоритма без использования модуля parallel
parfor y_ser
timer off 2
list in 1/10
gen diff = y_pll != y_ser
tab diff
timer list
// Разница между последовательной и параллельной версиями
di "Parallel is `=round(r(t2)/r(t1),.1)' times faster"
exit
Sbatch-скрипт для запуска задачи в очереди (stata.sbatch):
#!/bin/bash #SBATCH --job-name=stata # Название задачи #SBATCH --cpus-per-task=4 # Количество CPU на одну задачу #SBATCH --mail-user=ваша_почта # Укажите ваш email для отправки уведомлений #SBATCH --mail-type=END,FAIL # События, требующие уведомления module load stata # Загрузка модуля Stata # Запуск Sata с файлом stata_parfor.do # Переменная окружения $SLURM_CPUS_PER_TASK передаёт количество выделенных CPU в переменную ncores в скрипте stata -b stata_parfor.do $SLURM_CPUS_PER_TASK
Для постановки задачи в очередь выполните команду sbatch stata.sbatch
Не забудьте скорректировать параметры в скрипте для своих расчетов!
Посмотреть состояние своих задач можно с помощью команды mj
. list in 1/10
+--------------------------------+
| x y_pll y_ser |
|--------------------------------|
1. | .3132002 .5596429 .5596429 |
2. | .5559791 .7456401 .7456401 |
3. | .9382851 .9686512 .9686512 |
4. | .7363221 .8580921 .8580921 |
5. | .1924075 .4386429 .4386429 |
|--------------------------------|
6. | .1951401 .4417466 .4417466 |
7. | .9509598 .9751717 .9751717 |
8. | .2904454 .5389299 .5389299 |
9. | .8190824 .9050317 .9050317 |
10. | .4882096 .69872 .69872 |
+--------------------------------+
. gen diff = y_pll != y_ser
. tab diff
diff | Freq. Percent Cum.
------------+-----------------------------------
0 | 5,000,000 100.00 100.00
------------+-----------------------------------
Total | 5,000,000 100.00
. timer list
1: 5.90 / 1 = 5.9010
2: 16.81 / 1 = 16.8130
97: 0.36 / 1 = 0.3620
98: 0.40 / 1 = 0.3990
99: 4.94 / 1 = 4.9430
.
. // Разница между последовательной и параллельной версиями
. di "Parallel is `=round(r(t2)/r(t1),.1)' times faster"
Parallel is 2.8 times faster
Дополнительные ресурсы по выполнению расчетов в Stata
Полезные ссылки
- Инструкция по работе с системой HPC TaskMaster
Нашли опечатку?
Выделите её, нажмите Ctrl+Enter и отправьте нам уведомление. Спасибо за участие!
Сервис предназначен только для отправки сообщений об орфографических и пунктуационных ошибках.