RAxML-NG [TH]

RAxML-NG เป็น software สำหรับการอนุมาน phylogenetic tree โดยใช้ maximum-likelihood (ML)

Software website : RAxML Next Generation: faster, easier-to-use and more flexible

สำหรับการใช้งาน RAxML-NG ในรูปแบบขนาน (parallelization) อย่างมีประสิทธิภาพ สามารถศึกษาข้อมูลเพิ่มเติมได้ที่ Parallelization · amkozlov/raxml-ng Wiki

ตัวอย่าง script ในการ submit job

1. การใช้งานบน compute node(s)

1.1 การใช้งาน 1 node

#!/bin/bash #SBATCH -p compute #SBATCH -N 1 -n 2 -c 20 #SBATCH -t 24:00:00 #SBATCH -J RAxML-NG #SBATCH -A projxxxx module purge module load RAxML-NG/1.0.2-gompi-2019b srun raxml-ng-mpi --msa input.fasta --model GTR+G --prefix output_prefix --thread 20

ตัวอย่างด้านบนจะเรียกใช้งานทรัพยากรจำนวน 1 node (-N 1) 2 MPI tasks (-n 2) แต่ละ task ใช้ 20 cores (-c 20) รวมใช้ 40 cores

สำหรัย RAxML-NG จำนวน thread ที่ใช้ (--thread) ควรจะเท่ากับจำนวน cpus ที่ทำการจอง (-c หรือ --cpus-per-task) ซึ่งในที่นี้คือ 20

ข้อสังเกตุ การระบุจำนวน CPUs ที่ใช้ในแต่ละtask --cpus-per-task สำหรับ RAxML-NG จะระบุเท่ากับจำนวน cores ที่มีในแต่ละ socket ซึ่งคือ 20 cores สำหรับ compute node

1.2 การใช้งาน 2 nodes ขึ้นไป

#!/bin/bash #SBATCH -p compute #SBATCH -N 3 -n 5 -c 20 #SBATCH -t 24:00:00 #SBATCH -J RAxML-NG #SBATCH -A projxxxx module purge module load RAxML-NG/1.0.2-gompi-2019b srun raxml-ng-mpi --msa input.fasta --model GTR+G --prefix output_prefix --thread 20

ตัวอย่างด้านบนจะเรียกใช้งานทรัพยากรจำนวน 1 node (-N 3) 5 MPI tasks (-n 5) แต่ละ task ใช้ 20 cores (-c 20) รวมใช้ 100 cores (2 nodes + 20 cores จึงต้องระบุ -N เท่ากับ 3)

2. การใช้งานบน memory node(s)

1.1 การใช้งาน 1 node

#!/bin/bash #SBATCH -p memory #SBATCH -N 1 -n 4 -c 24 #SBATCH -t 24:00:00 #SBATCH -J RAxML-NG #SBATCH -A projxxxx module purge module load RAxML-NG/1.0.2-gompi-2019b srun raxml-ng-mpi --msa input.fasta --model GTR+G --prefix output_prefix --thread 24

ตัวอย่างด้านบนจะเรียกใช้งานทรัพยากรจำนวน 1 node (-N 1) 4 MPI tasks (-n 4) แต่ละ task ใช้ 24 cores (-c 24) รวมใช้ 96 cores

สำหรัย RAxML-NG จำนวน thread ที่ใช้ (--thread) ควรจะเท่ากับจำนวน cpus ที่ทำการจอง (-c หรือ --cpus-per-task) ซึ่งในที่นี้คือ 24

ข้อสังเกตุ การระบุจำนวน CPUs ที่ใช้ในแต่ละtask --cpus-per-task สำหรับ RAxML-NG จะระบุเท่ากับจำนวน cores ที่มีในแต่ละ socket ซึ่งคือ 24 cores สำหรับ memory node

1.2 การใช้งาน 2 nodes ขึ้นไป

ตัวอย่างด้านบนจะเรียกใช้งานทรัพยากรจำนวน 1 node (-N 2) 10 MPI tasks (-n 10) แต่ละ task ใช้ 24 cores (-c 24) รวมใช้ 240 cores (1 node + 48 cores จึงกำหนด N เท่ากับ 2)

การใช้งาน checkpoint

RAxML-NG สามารถ run งานต่อจากที่ run ไว้ได้ โดยที่ software จะอ่าน checkpoint จาก [prefix].raxml.rba และทำงานต่อจากนั้น การ submit งานให้ run ต่อจาก checkpoint สามารถทำได้โดยการ สั่ง run ด้วยคำสั่งเดิม

ปัญหาที่อาจจะพบ

ERROR: CPU core oversubscription detected!

แก้ไขโดย : ปรับค่า slurm option (-N, --ntasks-per-node ,--cpus-per-task) ซึ่งระบุทรัพยากรที่ต้องการใช้และทรัพยากรที่ใช้จริงในการทำงานของ RAxML-NG ให้เหมาะสมกัน (--thread)

หากไม่ระบุ --thread ค่าตั้งต้นของ RAxML จะตรวจสอบคุณสมบัติเครื่องที่ software ทำงานอยู่ และเรียกใช้ทรัพยากรทั้งหมดที่มี เช่น compute node จะใช้งาน 40 cores หรือ memory node จะใช้งาน 192 cores โดยอัตโนมัติ ซึ่งหากการใช้งานนี้มากกว่าจำนวนทรัพยากรที่ระบุไว้ใน slrum option จะทำให้เกิด core oversubscription และ software ทำงานช้าลงอย่างมาก

การระบุ worker

การระบุจำนวน worker (--worker) จะต้องสัมพันธ์กับจำนวน MPI ranks และจำนวน OMP threads ที่ใช้ หากกำหนดไม่เหมาะสม software จะไม่สามารถทำงานได้ หรือทำงานได้ช้า ทั้งนี้หากไม่มั่นใจสามารถให้ software กำหนดให้แบบอัตโนมัติได้


Related articles