본 문서는 누리온 시스템에서 i-PI 소프트웨어 사용을 위한 기초적인 정보를 제공하고 있습니다.
따라서, i-PI 소프트웨어 사용법과 누리온/리눅스 사용법 등은 포함되어 있지 않습니다.
누리온/리눅스 사용법에 대한 정보는 KISTI 홈페이지 (https://www.ksc.re.kr)의 기술지원 > 지침서 내 누리온 사용자 지침서 등을 참고하시기 바랍니다.
가. i-PI 소개
i-PI는 Python으로 작성된 Universal force engine 인터페이스입니다.
원자간 상호작용에 대한 제일원리 평가 소프트웨어와 함께 사용하도록 설계되어 있습니다.
본 문서는 i-PI와 LAMMPS를 같이 사용하는 경우에 대해 서술합니다.
LAMMPS 등 타 소프트웨어와 연동하여 계산을 수행하는 경우 상호간 통신에 Socket을 사용합니다.(Unix Domain Socket, Internet Socket)
(출처: http://ipi-code.org/about/interface/)
※ 자세한 사항은 i-PI 홈페이지를 방문하시기 바랍니다. (http://ipi-code.org)
나. 소프트웨어 설치 정보
i-PI는 별도의 설치가 필요하지 않으며, 배포처(https://github.com/i-pi/i-pi)에서 소스코드를 내려받아 바로 사용하실 수 있습니다.
LAMMPS는 누리온 시스템에 기설치된 12Dec18 버전을 모듈 환경설정하여 사용합니다.
다. 소프트웨어 실행 방법 - Unix Domain Socket 방식 (Single node only)
i-PI와 타 소프트웨어를 연동하여 사용할 경우 Socket으로 통신을 수행합니다.
Unix Domain Socket 방식은 오직 한 노드 내에서만 사용할 수 있으며, 파일시스템을 거쳐 통신이 이루어지기 때문에 전체 네트워크 프로토콜 스택을 거쳐 통신이 이루어지는 Internet Socket(TCP/IP) 대비 오버헤드가 적어 성능상 유리합니다.
#!/bin/sh
#PBS -V
#PBS -N i-PI_test
#PBS -q normal
#PBS -l select=1:ncpus=68:mpiprocs=68:ompthreads=1
#PBS -l walltime=12:00:00
#PBS -A etc
cd $PBS_O_WORKDIR
source {i-PI 설치 경로}/env.sh
rm -fv EXIT
OMP_NUM_THREADS=4 # i-PI 실행 스레드 수 지정
if [ -f "RESTART" ]; then
i-pi RESTART >& log.i-pi &
else
i-pi input.xml >& log.i-pi &
fi
OMP_NUM_THREADS=1 # LAMMPS 실행 스레드 수 지정
sleep 10
mpirun -n 64 lmp_mpi -in in.lmp # 실행할 MPI 프로세스 수 명시적으로 지정
touch EXIT
...
<ffsocket name='lmpserial' mode='inet'>
<address> 172.31.27.3 </address>
<port> 34567 </port> # port 주소 지정
</ffsocket>
...
...
fix 1 all ipi 172.31.27.3 34567
...
#!/bin/sh
#PBS -V
#PBS -N i-PI_test
#PBS -q normal
#PBS -l select=1:ncpus=68:mpiprocs=68:ompthreads=1
#PBS -l walltime=12:00:00
#PBS -A etc
cd $PBS_O_WORKDIR
source {i-PI 설치 경로}/env.sh
rm -fv EXIT
OMP_NUM_THREADS=4 # i-PI 실행 스레드 수 지정
IPINODE=grep "${HOSTNAME} " /etc/hosts | awk '{print $1}' # 현재 i-PI가 실행중인 노드의 IP 주소
if [ -f "RESTART" ]; then
sed -i "s:fix 1 all ipi .* :fix 1 all ipi ${IPINODE} :g" in.lmp
sed -i "s:address>.<:address>${IPINODE}<:g" RESTART
sed -i "s:port>.<:port>34567<:g" RESTART
i-pi RESTART >& log.i-pi &
else
sed -i "s:fix 1 all ipi .* :fix 1 all ipi ${IPINODE} :g" in.lmp
sed -i "s:address>.<:address>${IPINODE}<:g" input.xml
sed -i "s:port>.<:port>34567<:g" input.xml
i-pi input.xml >& log.i-pi &
fi
OMP_NUM_THREADS=1 # LAMMPS 실행 스레드 수 지정
sleep 10
mpirun -n 64 lmp_mpi -in in.lmp # 실행할 MPI 프로세스 수 명시적으로 지정
touch EXIT