NAMD¶
Το NAMD (NAnoscale Molecular Dynamics) είναι μια εφαρμογή μοριακής δυναμικής υψηλών επιδόσεων, σχεδιασμένη για παράλληλη επεξεργασία. Αναπτύχθηκε από την Ομάδα Θεωρητικής και Υπολογιστικής Βιοφυσικής του Πανεπιστημίου του Illinois, με στόχο την προσομοίωση μεγάλων βιομοριακών συστημάτων. Διατίθεται δωρεάν ως λογισμικό ανοιχτού κώδικα και κλιμακώνεται αποδοτικά σε εκατοντάδες χιλιάδες πυρήνες, ενώ συχνά χρησιμοποιείται σε συνδυασμό με το VMD για την ανάλυση των αποτελεσμάτων.
Για περισσότερες πληροφορίες σχετικά με το λογισμικό, επισκεφθείτε την επίσημη ιστοσελίδα.
Σύνδεση στο Nefeli Cluster
Πριν από οποιαδήποτε ενέργεια, ο χρήστης πρέπει να έχει συνδεθεί επιτυχώς στο Nefeli cluster. Οι οδηγίες σύνδεσης παρέχονται στο ακόλουθο εγχειρίδιο.
NAMD nightly build version 3.0.2¶
Παράδειγμα χρήσης σε GPU nodes¶
Στο $HOME μας στο login node, δημιουργούμε ένα νέο φάκελο (έστω namd-test), μεταφερόμαστε εκεί και αντιγράφουμε τα κατάλληλα αρχεία (έστω της πρωτεΐνης bbl) καθώς και τον φάκελο toppar, ο οποίος περιέχει παραμέτρους τύπου Force Field CHARMM36. Όλα τα παραπάνω παρέχονται με την εγκατάσταση του λογισμικού στην κεντρική διαδρομή των εφαρμογών και απαιτείται απλώς η μεταφορά τους στο working directory μας.
mkdir namd-test
cd namd-test
module load namd/gpu-3.0.2
cp $NAMD_EXAMPLES/bbl/topology/* .
cp -r $NAMD_EXAMPLES/../toppar .
Μέσα στο ίδιο working directory, δημιουργούμε και τοποθετούμε το αρχείο εισόδου μας, έστω namd-test.conf στο οποίο ορίζουμε τις παραμέτρους προσομοίωσης του συστήματος. Μερικές από αυτές μπορεί να είναι η θερμοκρασία, το χρονικό βήμα (timestep) καθώς και ο αριθμός των βημάτων για ελαχιστοποίηση ενέργειας (minimization).
Μέσα στο αρχείο εισόδου μας κρίνεται απαραίτητο να δηλώσουμε τις διαδρομές για τα αρχεία παραμέτρων (.prm και .str) που βρίσκονται στον φάκελο toppar.
Δημιουργούμε ή μεταφέρουμε το script για την υποβολή της εργασίας, (έστω namd-case.sh) το οποίο θα εκτελεστεί σε GPU node. O κώδικάς του, παρουσιάζεται αναλυτικά παρακάτω:
SLURM submission script
#!/bin/bash
#SBATCH --job-name=namd-GPU-Job
#SBATCH --partition=a100
#SBATCH --gres=gpu:1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --output=output.out
module load namd/gpu-3.0.2
namd3 +setcpuaffinity +p8 test.conf > test.log
Στη συνέχεια, υποβάλουμε την εργασία με την εντολή sbatch <filename.sh> ως εξής:
sbatch namd-case.sh
Παρακολουθούμε την εξέλιξη της εργασίας μέσω της εντολής squeue. Εφόσον η εργασία έχει εκκινήσει, μπορούμε να ελέγχουμε την πρόοδο της επίλυσης σε πραγματικό χρόνο:
tail -f test.log
Η επιτυχής ολοκλήρωση επιβεβαιώνεται από τη δημιουργία των αρχείων εξόδου (όπως το αρχείο τροχιάς .dcd) και από την παρουσία των τιμών ενέργειας ENERGY: στο αρχείο καταγραφής.
Terminal output
# grep "ENERGY:" test.log
Info: ABSOLUTE IMPRECISION IN FAST TABLE ENERGY: 1.69407e-21 AT 11.9974
Info: RELATIVE IMPRECISION IN FAST TABLE ENERGY: 1.13046e-16 AT 11.9974
ENERGY: 0 140.1681 371.6800 356.7853 24.7048 -47678.4135 4292.1724 0.0000 0.0000 0.0000 -42492.9028 0.0000 -42492.9028 -42492.9028 0.0000
ENERGY: 1 166.2011 285.4899 347.8530 11.8055 -48062.3845 4119.4419 0.0000 0.0000 0.0000 -43131.5931 0.0000 -43131.5931 -43131.5931 0.0000
ENERGY: 2 811.0992 411.8933 349.3284 14.8386 -48414.5188 3977.2489 0.0000 0.0000 0.0000 -42850.1103 0.0000 -42850.1103 -42850.1103 0.0000
... ... ... ...
ENERGY: 100 56.7688 175.5095 304.3876 7.8865 -57516.1192 5456.5350 0.0000 0.0000 3006.9770 -48508.0548 112.6213 -51515.0318 -48505.5806 106.2274
Παράδειγμα χρήσης σε CPU nodes¶
Στο $HOME μας στο login node, δημιουργούμε ένα νέο φάκελο (έστω namd-cpu-test), μεταφερόμαστε εκεί και αντιγράφουμε ολόκληρο τον φάκελο topology, τα αρχεία πρωτεΐνης bbl καθώς και τον φάκελο toppar, ο οποίος περιέχει παραμέτρους τύπου Force Field CHARMM36. Όλα τα παραπάνω παρέχονται με την εγκατάσταση του λογισμικού στην κεντρική διαδρομή των εφαρμογών και απαιτείται απλώς η μεταφορά τους στο working directory μας.
Προετοιμασία Working Directory
mkdir namd-cpu-test
cd namd-cpu-test
module load namd/cpu-3.0.2
cp -r $NAMD_EXAMPLES/bbl/topology .
cp $NAMD_EXAMPLES/bbl/bbl.namd .
cp -r $NAMD_EXAMPLES/../toppar .
sed -i "s|../../|$NAMD_ROOT/lib/namdcph/|g" bbl.namd
Kρίνεται απαραίτητο να τρέξουμε την εντολή sed προκειμένου να βρεθούν αυτόματα και να αντικατασταθούν τα paths της εγκατάστασης.
Δημιουργούμε ή μεταφέρουμε στο working directory το script για την υποβολή της εργασίας, (έστω namd-cpu-case.sh) το οποίο θα εκτελεστεί σε CPU node. O κώδικάς του, παρουσιάζεται αναλυτικά παρακάτω:
SLURM submission script
#!/bin/bash
#SBATCH --job-name=NAMD-CPU
#SBATCH --output=output_cpu.out
#SBATCH --partition=highcpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=16
#SBATCH --time=00:30:00
module load namd/cpu-3.0.2
echo "Starting NAMD Multicore job on $(hostname)"
export CONFIG_FILE="bbl.namd"
# NAMD runs using 16 CPUs
namd3 +setcpuaffinity +p$SLURM_CPUS_PER_TASK bbl.namd > test_cpu.log
Στη συνέχεια, υποβάλουμε την εργασία με την εντολή sbatch <filename.sh> ως εξής:
sbatch namd-cpu-case.sh
Εφόσον η εργασία έχει εκκινήσει, μπορούμε να ελέγχουμε την πρόοδο της επίλυσης σε πραγματικό χρόνο μέσω της εντολής squeue.
```bash squeue -u username
```
Terminal output
JOBID PARTITION NAME USER TIME TIME_LIMIT ST NODES CPUS
11928 highcpu NAMD-CPU username 1:19 30:00 CF 1 16
Το NAMD ανακατευθύνει (redirects) την έξοδο της προσομοίωσης σε ένα νέο αρχείο με όνομα bbl-test.log. Επομένως, για να δούμε τα αποτελέσματα, τρέχουμε την εντολή grep όπως ακριβώς φαίνεται παρακάτω.
Terminal output
# grep "ENERGY:" bbl-test.log
ENERGY: 0 147.4506 384.8399 364.3042 25.1318 -51026.1306 4215.9813 0.0000 0.0000 0.0000 -45888.4227 0.0000 -45888.4227 -45888.4227 0.0000 19070.5958 -20174.8179 129726.3581 19070.5958 -20174.8179
ENERGY: 1 80.6371 304.0900 357.8785 15.5778 -51195.1088 4105.9046 0.0000 0.0000 0.0000 -46331.0208 0.0000 -46331.0208 -46331.0208 0.0000 18957.9009 216.3024 129726.3581 18957.9009 216.3024
... ... ... ...
ENERGY: 200 50.4170 140.6313 311.3595 6.1362 -58430.6193 3970.8185 0.0000 0.0000 0.0000 -53951.2567 0.0000 -53951.2567 -53951.2567 0.0000 17740.2093 17703.2098 129726.3581 17740.2093 17703.2098
Γιατί καθυστερεί η ολοκλήρωση της διεργασίας μου κατά την εκτέλεση σε CPU node;
Είναι απολύτως φυσιολογικό η προσομοίωσή σας να χρειάζεται πολλαπλάσιο χρόνο για να ολοκληρωθεί σε ένα CPU Partition σε σύγκριση με ένα GPU Partition. Μια GPU μπορεί να υπολογίσει χιλιάδες ζεύγη ατομικών αλληλεπιδράσεων την ίδια ακριβώς στιγμή, ενώ η CPU πρέπει να τα επεξεργαστεί σε πολύ μικρότερες "δόσεις". Αν ο χρόνος είναι κρίσιμος παράγοντας για την έρευνά σας, συνιστάται η αξιοποίηση των GPU nodes του cluster.
Γιατί στο παραπάνω αρχείο test_cpu.log τυπώνονται σφάλματα;
Τα έτοιμα παραδείγματα CpH που παρέχονται από το NAMD, είναι συχνά προγραμματισμένα να αναζητούν από προεπιλογή πόρους GPU για τα ενδιάμεσα βήματα υπολογισμών (π.χ. τα βήματα Monte Carlo που συμβαίνουν κάθε 100 steps). Ακόμα κι αν έχουμε φορτώσει σωστά το CPU module, το εσωτερικό script της προσομοίωσης θα αναζητήσει συγκεκριμένες μεταβλητές περιβάλλοντος όπως τα GPU_PATH και CONFIG_FILE για να κάνει επανεκκίνηση της διεργασίας. Εάν αυτές οι μεταβλητές είναι κενές, η προσομοίωση θα διακοπεί απότομα, τυπώνοντας ένα σφάλμα τύπου Environment variable GPU_PATH not specified. Για να παρακάμψουμε αυτή τη συμπεριφορά και να υποδείξουμε στο script ότι πρέπει να εκτελεστεί αποκλειστικά σε CPU, πρέπει να ορίσουμε ρητά τις απαραίτητες μεταβλητές μέσα στο Slurm script μας.