Я выполняю R на нескольких узел кластер Linux. Я хотел бы выполнить свой анализ R использование сценариев или пакетного режима, не используя программное обеспечение параллельных вычислений, таких как MPI или снег.
Я знаю, что это может быть сделано путем деления входных данных, таким образом, что каждый узел выполняет различные части данных.
Мой вопрос состоит в том, как я иду об этом точно? Я не уверен, как я должен кодировать свои сценарии. Пример был бы очень полезен!
Я запускал свои скрипты до сих пор с помощью PBS, но это только, кажется, работает на одном узле, поскольку R является единственной программой потока. Следовательно, я должен выяснить, как скорректировать мой код, таким образом, он распределяет работу всем узлам.
Вот то, что я делал до сих пор:
1) командная строка:
> qsub myjobs.pbs
2) myjobs.pbs:
> #!/bin/sh
> #PBS -l nodes=6:ppn=2
> #PBS -l walltime=00:05:00
> #PBS -l arch=x86_64
>
> pbsdsh -v $PBS_O_WORKDIR/myscript.sh
3) myscript.sh:
#!/bin/sh
cd $PBS_O_WORKDIR
R CMD BATCH --no-save my_script.R
4) my_script. R:
> library(survival)
> ...
> write.table(test,"TESTER.csv",
> sep=",", row.names=F, quote=F)
Любые предложения будут цениться!Спасибо!
Копия:
Это скорее вопрос PBS; Обычно я создаю сценарий R (с путем Rscript после #!) И заставляю его собирать параметр (с помощью функции commandArgs
), который определяет, какую «часть задания» должен выполнять этот текущий экземпляр. Поскольку я часто использую многоядерный
, мне обычно приходится использовать только 3-4 узла, поэтому я просто отправляю несколько заданий, вызывая этот сценарий R с каждым из возможных значений управляющего аргумента.
С другой стороны, использование pbsdsh
должно сделать свою работу ... Тогда значение PBS_TASKNUM
можно использовать в качестве управляющего параметра.