[가시화] MPI를 이용한 공학 계산결과 병렬 렌더링 – Paraview
출처 : 클루닉스 기술부
보통 클러스터를 통해 계산되는 과학, 공학 해석결과는 그 크기가 엄청나기 때문에 이를 가시화 하기 위해서는 대규모 데이터를 적재할 수 있는 메모리와 신속하게 렌더링을 할 수 있는 환경이 필요하게 됩니다.
LAMMPS 등 계산 소프트웨어를 제작한 바 있는 Sandia 연구소에서 제작한 Paraview는 MPI(MPICH2)를 통해이렇게 복잡한 렌더링을 병렬로 처리할 수 있게 해 주는 가시화 소프트웨어로 CFD, FEM(정확히 어느 어플리케이션의 출력물을 지원하는지는 확인해봐야할듯..) 툴을 비롯한 다양한 데이터를 가시화 할 수 있습니다.
1. 사전준비
(1) cmake
Paraview를 컴파일하기 위해서는 gmake가 아닌(..뿐만아니라) cmake가 필요합니다.
Cmake는 http://www.cmake.org에서 다운받으실 수 있고, 아래 현재 최신버젼 링크를 걸어놓겠습니다
별도의 옵션없이 컴파일 하시면 됩니다.
$ cd /usr/local/src
$ wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
$ tar xvfz cmake-2.8.4.tar.gz
$ cd cmake-2.8.4
$ ./configure && make && make install
$ which cmake
/usr/local/bin/cmake
위와같이 나타나지 않으면 수동으로 PATH를 구성해 줍니다
$ export PATH=$PATH:/usr/local/bin/
(2) qt
Paraview 는 QT기반의 GUI 환경을 제공합니다. paraview 최신 버젼에서 사용하는 QT는 상당히 높은버젼이기 때문에 – RHEL5.5에 기본 포함되어있는 QT4-4.2.1보다 높은 4.6.x를 요구합니다. RHEL6는 OS에 포함된 QT 버젼이 4.6.2이기 때문에 OS설치시 QT를 설치하셨다면 별도로 설치하실 필요는 없습니다 – QT를 다운받아 설치해야 합니다.
현재 최신버전인 4.7.2 버젼은 아래 링크에서 다운받으실 수 있습니다.(노키아 홈페이지네요-_-;;)
(아래 나올 QT 설치 내용은 소스 컴파일을 통한 설치입니다. 특별한 경우가 아니라면 RPM으로 설치하셔도 무방할듯합니다. BUILD가 정말 오래 걸립니다)
$ cd /usr/local/src
$ wget http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.2.tar.gz
$ tar xvfz qt-everywhere-opensource-src-4.7.2.tar.gz
$ cd qt-everywhere-opensource-src-4.7.2Which edition of Qt do you want to use ?
Type ‘c’ if you want to use the Commercial Edition.
Type ‘o’ if you want to use the Open Source Edition.o
This is the Qt for Linux/X11 Open Source Edition.
You are licensed to use this software under the terms of
the Lesser GNU General Public License (LGPL) versions 2.1.
You are also licensed to use this software under the terms of
the GNU General Public License (GPL) versions 3.Type ‘3’ to view the GNU General Public License version 3.
Type ‘L’ to view the Lesser GNU General Public License version 2.1.
Type ‘yes’ to accept this license offer.
Type ‘no’ to decline this license offer.Do you accept the terms of either license? yes
글자들이 주르르륵 지나가면서 configure가 됩니다
configure가 완료되면 아래와같이 빌드/설치하시면 됩니다.
$ make && make install
* 소스파일의 크기가 무려 204MB나 되어 configure옵션이 상당히 많을것으로 예상됩니다. 하지만 본 문서에서는 필요시 추가로 설치하기로 하고 일단 기본 옵션으로 설치하겠습니다
설치가 완료되면 아래 내용을 /etc/profile.d/qt.sh로 저장합니다
#!/bin/sh
QTDIR=/usr/local/Trolltech/Qt-4.7.2/
export PATH=$QTDIR/bin:$PATH
QTINC=$QTDIR/include
QTLIB=$QTDIR/lib
export QTDIR QTINC QTLIB
2. Paraview BUILD
paraview는 공식 웹사이트
이고, 사이트의 Download메뉴에서 바이너리/소스를 다운받으실 수 있습니다.
본 문서 작성일 현재 최신버젼의 소스는 아래 링크를 통해 다운받으실 수 있습니다.
$ wget http://www.paraview.org/files/v3.10/ParaView-3.10.0.tar.gz
$ tar xvfz ParaView-3.10.0.tar.gz
$ cd ParaView-3.10.0
$ mkdir bin
$ cd bin
$ ccmake ../기본 OFF로 설정되어있는 MPI 관련 내용을 포함하여 필요한 내용을 ON으로 바꾸어 줍니다(엔터키 이용)
* MPI와 연동시 Shared Library를 Link하는 과정에서 버그로 추정되는 문제로 링크가 이루어지지 않아 정상적으로 Build하지 못하는 현상이 발견되었습니다(RHEL5) 이러한 문제가 발생하면 PARAVIEW_ENABLE_PYTHON, BUILD_SHARED_LIBS를 OFF로 설정하시고 빌드하시면 발생하지 않습니다
설정이 완료되면 c를 눌러 configure한 뒤 g를 눌러 Makefile을 생성합니다.위와 같이 Makefile이 생성된 것을 확인한 후 build/install을 시작합니다.
$ make && make install
위와같이 빌드 상태가
MPICH2보다예쁘게 출력되며 꽤 오랜 시간(하지만 QT보다는 짧은..)이 지나면 Build가 완료됩니다
3. Paraview 실행
본 문서에서는 위와 같이 렌더링을 수행하는 렌더링 노드와 그 결과를 화면에 보여주는 클라이언트(데스크톱)로 환경을 구성하였습니다
(1) pvserver
pvserver(ParaView Server)는 paraview의 렌더링 서버 + 데이터 서버를 동시에 실행시키는 명령어로, 필요한 경우 pvrenderserver, pvdataserver명령을 통해 렌더링 서버와 데이터 서버를 분리하여 운영할 수 있습니다.
렌더링을 담당할 계산 노드(위의 예에서는 node01)에서 아래와 같이 실행하시면 렌더링을 위한 pvserver 환경이 구성됩니다
$ mpirun -np <Number of processors> /usr/local/bin/pvserver
만약 렌더링 서버에 그래픽카드가 없어 mesa 를 사용해야하는 경우 아래와 같이 –use-offscreen-rendering 옵션을 추가해 주셔야 합니다.
$ mpirun -np <Number of processors> /usr/local/bin/pvserver –use-offscreen-rendering
※ 렌더링중 발생하는 수많은 메세지가 화면에 바로 출력되면 이로인해 렌더링 속도가 늦어질 가능성이 있으므로 되도록 표준출력/표준에러를 파일로 저장하도록 하는것이 좋습니다
$ mpirun -np <Number of processors> /usr/local/bin/pvserver –use-offscreen-rendering > pv.log 2>&1
정상적으로 실행되면 위와 같이 Waiting for client…라는 메세지가 나옵니다.
(2) pvclient(paraview)
실제로 화면을 출력할 데스크톱, 워크스테이션에서는 paraview 명령을 통해 paraview 클라이언트를 실행할 수 있습니다. paraview는 pvserver와 연결이 되지 않은 상태에서는 Standalone Renderer로 작동합니다.
※ 당연한 이야기 이지만, pvserver와 pvclient는 같은 버젼을 사용하셔야 합니다
아래와 같이 실행하시면 됩니다
$ paraview
혹은
$ /usr/local/bin/paraview
정상적으로 실행이 되면 위와 같이 GUI가 나타납니다.
File메뉴의 Connect, 혹은 툴바의 서버 연결모양을 클릭합니다
이와 같이 빈 서버 목록이 나타나면 Add Server버튼을 클릭하여 위에서 설정한 pvserver를 리스트에 추가합니다.
Server Type은 Client/Server, Client/Server(reverse connection), Client / Data Server / Render Server, Client / Data Server / Render Server(Reverse Connection)이 있는데, 데이터서버와 렌더링 서버를 분리하지 않았으므로 기본값인 Client / Server로 설정합니다.
설정이 완료되면 Configure버튼을 눌러 pvserver를 등록합니다.
위와같이 pvserver가 등록되면 Connect 버튼을 눌러 pvserver에 접속합니다
접속이 성공적으로 이루어지면 위와같이 좌측 상단의 Pipeline Browser에 cs://pvserver ip:11111이 나타납니다.
Standalone에서 파일을 읽을때와 마찬가지로 File메뉴의 Open 혹은 툴바 가장 왼쪽의 열기 아이콘을 클릭하여 적당한 데이터를 입력해 줍니다.
pvserver가 데이터 서버와 렌더링 서버의 역할을 모두 수행하고 있기 때문에 열기 버튼을 눌렀을때 pvserver의 파티션과 디렉토리 구조를 확인하실 수 있습니다.
만약 데이터서버를 별도로 설정하시면 위와같은 파일탐색기도 해당 데이터 서버에서 작동하게 됩니다.
렌더링 서버를 통한 렌더링이 완료되었습니다.
렌더링 서버의 top 결과입니다. mesa로 렌더링을 하기 때문에 pvserver의 CPU 사용량이 높게 나타난것을 볼 수 있습니다.
이번 설치/테스트에서는 mesa를 이용하여 큰 규모까지 테스트를 할 수는 없었지만 paraview가 다중노드 / 다중GPU를 지원하기 때문에 실제 사용되는 그래픽 서버 환경에서는 상당한 그래픽 성능이 나타날것으로 예상됩니다.
위의 그림은 미군에서 러시아 대공무기에 평면 전자기파가 지나가는것을 Paraview를 통해 가시화한것으로 무려 25억개의 cell이 사용되었다고 합니다
위의 이미지는 약 4억 7천만개의 폴리곤으로 이루어진 ISOSURFACE입니다.
Sandia에서는 아래와 같은 사양의 워크스테이션 128대를 이용하여 초당 15억개의 폴리곤을 렌더링할 수 있는 시스템을 구축하였으며, 이를통해 4억7천만개의 폴리곤을 약 3~4FPS로 렌더링 할 수 있었다고 합니다
- NVIDIA Quadro FX 3400 PCI Express graphics boards
- Dell Precision 470 workstations equipped with Dual 3.6 GHz Intel Xeon EM64T processors, and 4GB of RAM
- InfiniBand 4x HCA interconnect, allowing the data to be processed across the 128 nodes
테스트를 진행하는 동안, MPI로 실행시 마우스 이벤트에 오작동을 일으켜 Segmentation Fault가 발생하며 프로그램이 종료되는 현상이 자주 나타났습니다. 좀 더 찾아봐야 겠지만 이러한 오작동만 해결된다면 paraview는 MPI환경에서 대용량 해석결과의 가시화를 위한 좋은 툴이 될 수 있을것같습니다
spa music
Thank you very much for sharing, I learned a lot from your article. Very cool. Thanks.