>> Trung tâm Vật lý tính toán

Cụm máy tính

Chạy chương trình

Các chương trình cần được chạy trên cluster thông qua hệ thống xếp hàng và quản lý tài nguyên PBS Torque. Hệ thống này cho phép chương trình tiếp tục chạy ngay cả sau khi cluster bị shutdown do sự cố mất điện.

Hệ thống xếp hàng gồm hàng (queue) serial (mặc định, dành cho các chương trình đơn lẻ dùng một CPU), hàng para6 và all (dành cho các chương trính song song). Các chương trình tính toán bắt buộc phải gửi vào hệ thống xếp hàng. Chương trình do người dùng chạy trên các nút không qua hệ thống xếp hàng là không hợp lệ và sẽ bị dừng không báo trước. Khi tất cả các nút tính toán đều bận, người dùng có thể chạy các chương trình không yêu cầu nhiều bộ nhớ RAM và thời gian chạy ngắn (không quá 30 phút) trực tiếp trên máy chủ nhưng không nhiều hơn 01 chương trình cùng lúc.

Hàng serial chấp nhận tối đa 24 chương trình/một người dùng ở mỗi thời điểm, trong đó cho phép nhiều nhất 12 chương trình được chạy cùng một lúc. Giới hạn thời gian mỗi chương trình được phép chạy là 480h, nhưng giới hạn này sẽ thay đổi nếu có nhiều chương trình đang phải xếp hàng chờ.

Hàng para6 chấp nhận tối đa 6 chương trình/một người dùng ở mỗi thời điểm, trong đó cho phép nhiều nhất 3 chương trình được chạy cùng lúc. Mỗi chương trình được dùng nhiều nhất 6 CPUs. Giới hạn thời gian mỗi chương trình được phép chạy là 480h (mặc định 72h).

Hàng all chấp nhận tối đa 3 chương trình/một người dùng ở mỗi thời điểm, trong đó cho phép nhiều nhất 1 chương trình được chạy. Mỗi chương trình được dùng nhiều nhất 24 CPUs. Giới hạn thời gian mỗi chương trình được phép chạy là 72h (mặc định 12h).

Cụm máy tính của trung tâm VLLT và VLTT được chia sẻ dùng chung cho tất cả các nhóm/cán bộ nghiên cứu, NCS, học viên cao học và cộng tác viên của Viện Vật lý. Vì vậy, việc sử dụng tài nguyên cần theo nguyên tắc "fairplay". Hệ thống xếp hàng hiện nay hoạt động theo nguyên tắc FIFO (first in first out) đơn giản nên jobs submit trước sẽ chạy trước. Việc áp đặt nguyên tắc fairplay từ phía admin bằng các biện pháp, chẳng hạn như giới hạn số chương trình của mỗi người dùng ở một thời điểm, giới hạn thời gian chạy, thứ tự ưu tiên của chương trình, ... sẽ dẫn tới việc sử dụng cluster không hiệu quả do có những thời điểm rất ít người dùng, nhưng có thời điểm mọi người lại phải xếp hàng để chờ đến lượt. Vì vậy đề nghị mỗi người dùng cố gắng tuân theo nguyên tắc fairplay bằng cách tự giới hạn số lượng tài nguyên mình dùng khi có nhiều người có nhu cầu sử dụng (phải chờ trên queue system).

a) Chạy chương trình đơn lẻ (không dùng MPI)

Cách đơn giản nhất để gửi một chương trình vào hệ thống PBS Torque là dùng lệnh rsub. Ví dụ, để chạy chương trình "myprog" trên cluster, gõ lệnh:

$ rsub myprog

rsub sẽ tạo ra script có tên "run.sh" trong thư mục hiện tại và tự động gửi script này vào hàng tính toán bằng lệnh "qsub run.sh". Thôn tin về nút tính toán mà chương trình được gửi đến để chạy sẽ được in ra trong file myprog.o**** với **** là jobid.

File script "run.sh" có nội dung như sau:

#!/bin/sh 
 
### Set the number of computing nodes needed (1 for a serial job)
#PBS -l nodes=1:ppn=1
 
### Specification of which queue to submit to:
#PBS -q serial
 
### Name of program as it will appear in the queue-list
#PBS -N myprog
 
### Make PBS look in the directory where the command was submitted from:
cd $PBS_O_WORKDIR
 
### Print the name of compute node that the program runs on it
echo "This program runs on computing node $HOSTNAME"

### execute the program:
./myprog

Để xem tình trạng của chương trình đã gửi, gõ lệnh qstat:

$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
1758.tcp             myprog           hoang           00:01:23 R serial

Trong bảng hiện ra, cột "S" cho ta biết tình trạng (status) của chương trình đã gửi với các ký hiệu: R - đang chạy (running), Q - đang xếp hàng (queueing), E - đang kết thúc (ending). "1758.tcp" là mã số của chương trình.

Để hủy chương trình đang chạy, dùng lệnh qdel:

$ qdel 1758.tcp

Để xem tình trạng các máy tính trong cluster, gõ lệnh:

$ pbsnodes

Tình trạng được thông báo bao gồm: free - tự do, job-exclusive - đang chạy chương trình, down - tắt, offline - không kết nối v.v.

b) Chạy chương trình song song (dùng MPI)

Phiên bản MPI được cài trên cluster là OpenMPI. Để dùng được OpenMPI cần nạp module openmpi trước khi dịch hoặc chạy chương trình (xem thêm về các module trong mục các ứng dụng):

$ module load openmpi

Để dịch chương trình dùng mpif77, mpif90 và mpicc. Ví dụ:

$ mpif90 -O2 myprog.f90 -o myprog

Để chạy chương trình "myprog" song song trên nhiều nút, tạo script "run.sh" với nội dung như sau:

 
#!/bin/sh 
 
### Set the number of computing nodes needed 
#PBS -l nodes=4:ppn=6 
 
### Specification of which queue to submit to:
#PBS -q all

### Name of program as it will appear in the queue-list
#PBS -N myprog
 
### Make PBS look in the directory where the command was submitted from:
cd $PBS_O_WORKDIR
 
### execute the program:
module load openmpi 
mpirun  -np 24 ./myprog

Trong script trên chương trình "myprog" được đặt để chạy 24 quá trình (process) song song trên 4 nút. Chú ý các phần tô đỏ: nodes là số nút sử dụng, ppn là "processes per node". Vì các CPU trong cluster là lõi 6 nên cấu hình tối ưu là ppn=6.

Sau đó dùng qsub để gửi chương trình vào hàng all:

$ qsub run.sh

Để xem tình trạng chương trình đang chạy, gõ lệnh qstat:

$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
1759.tcp             run.sh           hoang           00:00:00 R all

Xem tình trạng các nút, gõ lệnh pbsnodes:

$ pbsnodes
c01
     state = job-exclusive
      .....................
c02
     state = job-exclusive
      .....................
c03
     state = job-exclusive
      .....................
c04
     state = job-exclusive
      .....................
c05
     state = free
      .....................

Kết quả hiện ra cho thấy chương trình đang chạy song song và sử dụng toàn bộ CPUS của 4 nút (job-exclusive) và hiện tại có 1 nút còn trống (free).

Lệnh nodes cho thông tin về số CPUs đang sử dụng của mỗi nút

$ nodes
c01: job-exclusive (6/6 CPUs busy)
c02: job-exclusive (6/6 CPUs busy)
c03: job-exclusive (6/6 CPUs busy)
c04: job-exclusive (6/6 CPUs busy)
c05: free          (4/6 CPUs busy)

Để xóa chương trình đang chạy, dùng lệnh qdel:

$ qdel 1759.tcp