QMCPACK: 다체론 근사 계산을 위한 오픈소스 Quantum Monte Carlo 코드
요약
QMCPACK은 원자, 분자, 고체 등의 전자 구조를 계산하는 오픈 소스 다체론(many-body) Quantum Monte Carlo 코드를 제공합니다. 이 코드는 금속 및 절연체 시스템 모두에 적용 가능하며, 워크스테이션부터 슈퍼컴퓨터까지 높은 성능과 재현성을 목표로 합니다. 사용자들은 공식 문서를 통해 설치 가이드와 초기 계산 방법을 확인할 수 있으며, 최신 릴리스는 GitHub에서 제공됩니다.
핵심 포인트
- 원자/분자/고체 전자 구조 계산을 위한 오픈소스 QMC 코드 제공
- 금속 및 절연체 시스템 모두에 적용 가능하며 높은 재현성 강조
- 워크스테이션부터 슈퍼컴퓨터까지 다양한 환경 지원 목표
- CMake 기반 빌드 시스템으로 자동 구성 용이
QMCPACK은 원자, 분자, 2D 나노물질 및 고체의 전자 구조를 계산하기 위한 오픈 소스 생산 수준의 다체론 (many-body) ab initio Quantum Monte Carlo 코드를 제공합니다. 이 코드에는 금속계 시스템뿐만 아니라 절연체(insulators)에 대한 고체 상태 기능도 포함되어 있습니다. QMCPACK은 워크스테이션부터 최신 세대 슈퍼컴퓨터까지 원활하게 실행될 것으로 예상됩니다. 높은 성능 외에도 코드 품질과 재현성(reproducibility)에 특별히 중점을 두었습니다.
최신 릴리스는 https://github.com/QMCPACK/qmcpack/releases에서 얻거나, 개발 소스는 https://github.com/QMCPACK/qmcpack에서 클론할 수 있습니다. 전체 설치 가이드와 초기 QMC 계산을 수행하는 단계는 QMCPACK의 광범위한 온라인 문서에 제공됩니다.
CHANGELOG.md 파일에는 각 릴리스에서 이루어진 주요 변경 사항과 개발 버전의 주요 변경 사항이 설명되어 있습니다.
더 많은 정보가 필요하면 http://www.qmcpack.org의 QMCPACK 페이지, https://qmcpack.readthedocs.io/en/develop/index.html의 매뉴얼 또는 docs 디렉토리의 소스를 참조하십시오.
QMCPACK 사용이나 빌드에 문제가 있거나 사용법에 대한 질문이 있으면 Google QMCPACK 그룹에 게시하거나, https://github.com/QMCPACK/qmcpack/issues에서 GitHub 이슈를 생성하거나 개발자에게 문의해 주십시오.
Quantum Monte Carlo의 기초부터 이를 분자 및 고체 상태 시스템에 실제로 적용하는 방법에 대해 배우려면, 가장 최근 QMC 워크숍 자료와 튜토리얼을 참고하십시오. 여기에는 QMCPACK을 직접 설치할 필요 없이 예제를 실행할 수 있는 가상 머신과 스핀-궤도 QMC(spin-orbit QMC)를 다루는 입문 강연의 슬라이드 및 녹화된 비디오가 포함되어 있습니다.
참고 문헌으로 J. Kim et al. J. Phys. Cond. Mat. 30 195901 (2018), https://doi.org/10.1088/1361-648X/aab9c3, 그리고 공간이 허락한다면 P. Kent et al. J. Chem. Phys. 152 174105 (2020), https://doi.org/10.1063/5.0004860 를 인용해 주십시오. 이 논문들은 모두 오픈 액세스(open access)입니다.
QMCPACK을 다운로드, 컴파일 및 설치하는 전체 지침은 매뉴얼에 나와 있습니다. 일반 워크스테이션과 슈퍼컴퓨터에 QMCPACK을 설치하기 위한 가이드가 제공됩니다. 또한 config 디렉토리에는 여러 시스템용 빌드 스크립트도 제공합니다. 다음 섹션들은 간략한 개요를 제공합니다.
필수 조건의 전체 목록과 정기적으로 테스트된 버전의 세부 정보는 설치 필수 조건에 대한 매뉴얼 섹션에서 확인할 수 있습니다.
우리는 각 QMCPACK 릴리스일로부터 2년 이내에 출시된 오픈 소스 컴파일러와 라이브러리를 지원하는 것을 목표로 합니다. 2년이 넘은 소프트웨어 버전을 사용하는 것은 작동할 수도 있지만 권장되지 않으며 테스트되지 않았습니다. 독점 컴파일러(Intel, NVHPC)는 일반적으로 같은 기간 동안 지원되지만 정확한 버전 사용이 필요할 수 있습니다. 또한 우리는 OLCF의 Frontier 및 Summit, ALCF의 Aurora 및 Polaris, NERSC의 Perlmutter와 같은 머신에서 표준 소프트웨어 환경을 지원하는 것을 목표로 합니다. 최고 성능과 가장 쉬운 구성을 위해 가장 최근에 출시된 컴파일러 및 라이브러리 버전을 사용하는 것이 특히 권장됩니다.
QMCPACK의 빌드 시스템은 CMake를 기반으로 합니다. 이는 감지된 컴파일러와 라이브러리를 기반으로 자동 구성됩니다. 이들이 /usr, /usr/local과 같은 표준 위치에 설치되어 있다면 환경 변수나 CMake 변수를 설정할 필요가 없습니다.
매뉴얼은 https://qmcpack.readthedocs.io/en/develop/ 및 https://www.qmcpack.org/documentation 에서 확인하거나 docs/ 소스에서 sphinx를 사용하여 빌드할 수 있습니다. PDF 버전은 여전히 https://qmcpack.readthedocs.io/_/downloads/en/develop/pdf/ 에서 이용 가능합니다.
리눅스 워크스테이션과 같은 표준 UNIX 유사 시스템에서는:
- 가장 안전하고 빠른 빌드 옵션은 C 및 C++ 컴파일러를 해당 MPI 래퍼(wrapper)를 통해 지정하는 것입니다. 여기서는 Intel MPI와 Intel 컴파일러를 사용합니다. 빌드 디렉토리로 이동하여 CMake를 실행하고 make를 수행합니다.
cd build
cmake -DCMAKE_C_COMPILER=mpiicc -DCMAKE_CXX_COMPILER=mpiicpc ..
make -j 8
- 시스템에 맞게 mpicc 및 mpicxx 또는 다른 래핑된 컴파일러 이름을 대체하십시오. 예: OpenMPI 사용 시
cd build
cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx ..
make -j 8
- Non-MPI 빌드:
cd build
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DQMC_MPI=0 ..
make -j 8
- 컴파일러 사양을 생략할 수 있다면 매우 운이 좋은 경우:
cd build
cmake ..
make -j 8
현대 컴퓨터 하드웨어 및 소프트웨어 시스템의 복잡성은 자동 구성 시스템이 올바른 선택을 했고 최적화된 라이브러리 및 컴파일러 설정을 사용했는지 확인해야만 의미 있는 프로덕션 작업을 할 수 있다는 것을 의미합니다. 즉, 아래 세부 사항을 확인하십시오.
여러 환경 변수가 빌드에 영향을 미칩니다. 특히 이들은 라이브러리의 기본 경로, 기본 컴파일러 등을 제어할 수 있습니다. 환경 변수 목록은 다음과 같습니다:
| Environment variable | Description |
|---|---|
| CXX | C++ compiler |
| ... | |
또한 환경 변수를 읽는 것 외에도 CMake는 빌드 및 구성 단계를 제어하기 위해 설정할 수 있는 여러 선택적 변수를 제공합니다. 이 변수들은 CMake에 전달될 때 환경 변수 및 기본 변수보다 우선권을 가집니다. 이를 설정하려면 구성 라인에서 -D FLAG=VALUE를 CMake 명령어와 소스 디렉토리 경로 사이에 추가하십시오. |
- 일반 빌드 옵션
CMAKE_C_COMPILER C 컴파일러를 설정합니다
CMAKE_CXX_COMPILER C++ 컴파일러를 설정합니다
CMAKE_BUILD_TYPE 빌드 유형을 제어하는 변수입니다 (기본값은 Release).
...
- 주요 QMCPACK 빌드 옵션
QMC_COMPLEX ON/OFF(default). 복소수 버전 (일반적인 twist/k-point)을 빌드합니다.
QMC_MIXED_PRECISION ON/OFF(default). 혼합 정밀도 (double/float 혼합) 버전을 빌드합니다.
혼합 정밀도 계산은 상당히 빠를 수 있지만 다음과 같은 점이 있습니다...
- 추가 QMCPACK 옵션
BUILD_AFQMC ON/OFF(default). 보조장 양자 몬테카를로 (Auxiliary-Field Quantum Monte Carlo, AFQMC) 기능을 빌드합니다.
BUILD_AFQMC_WITH_NCCL ON/OFF(default). AFQMC에서 NVIDIA Collective Communications Library (NCCL)을 사용하여 최적화된 코드 경로를 활성화합니다.
이 기능을 활성화하려면 AFQMC와 CUDA 기능이 필요합니다.
...
- libxml2 관련
LIBXML2_INCLUDE_DIR libxml2의 포함 디렉토리입니다.
LIBXML2_LIBRARY Libxml2 라이브러리입니다.
- HDF5 관련
HDF5_PREFER_PARALLEL 1(MPI 빌드 기본값)/0, 병렬 HDF5 라이브러리 검색을 활성화/비활성화합니다.
ENABLE_PHDF5 1(병렬 HDF5 라이브러리 기본값)/0, 병렬 집합 I/O를 활성화/비활성화합니다.
- FFTW 관련
FFTW_INCLUDE_DIRS FFTW의 포함 디렉토리를 지정합니다.
FFTW_LIBRARY_DIRS FFTW의 라이브러리 디렉토리를 지정합니다.
빌드 디렉토리에서 적절한 옵션을 사용하여 cmake를 실행한 다음 make를 실행합니다.
- Intel 컴파일러와 MPI 래퍼 사용. HDF5와 libxml2는 자동으로 감지된다고 가정합니다.
cd build
cmake -DCMAKE_C_COMPILER=mpiicc -DCMAKE_CXX_COMPILER=mpiicpc ..
make -j 8
CMake용 설정 라인을 포함하는 헬퍼 스크립트를 생성하는 것이 좋습니다. 이는 특히 환경 변수를 사용하거나, 패키지가 사용자 지정 위치에 설치되거나, 설정 라인이 길거나 복잡할 수 있을 때 유용합니다. 이 경우, 스크립트가 호출될 때마다 새 설정을 보장하기 위해
QMCPACK을 사용하기 전 테스트를 실행하는 것을 강력히 권장합니다. 자세한 내용은 QMCPACK 매뉴얼에 나와 있습니다. QMCPACK은 코드, 컴파일러, 도구 및 런타임의 정확성을 보장하기 위해 광범위한 검증 테스트를 포함하고 있습니다. 이상적으로는 모든 컴파일 시마다, 그리고 연구 사용 전에 반드시 이 테스트들을 실행해야 합니다. 이 테스트들은 알려진 mean-field, 양자 화학(quantum chemistry), 기타 QMC 결과와 출력값을 비교하는 점검을 포함합니다.
일부 테스트는 완전히 결정론적(deterministic)이지만, QMCPACK의 확률적(stochastic) 특성상 일부 테스트는 통계적이며 간혹 실패할 수 있습니다. 저희는 이러한 차이를 구분하기 위해 다양한 테스트 이름과 라벨링 방식을 사용하며, 알려진 실패 테스트인 개발용 테스트도 마찬가지입니다. 특히, 'deterministic' 테스트는 ctest 테스트 이름에 이를 포함하고 있으며, 불안정하다고 알려진(확률적이든 아니든) 테스트는 ctest 라벨을 사용하여 unstable로 표시합니다.
현재 이 테스트들은 MPI 작업과 OpenMP 스레드의 다양한 조합에서 최대 16개의 코어를 사용합니다. 시스템, 컴파일러 및 라이브러리의 많은 조합에 대한 현재 상태는 https://cdash.qmcpack.org에서 확인할 수 있습니다.
테스트에 사용된 전자(electron) 및 워커(walker) 수가 적기 때문에 성능 측정에는 사용해서는 안 된다는 점에 유의하십시오. 이러한 측정은 실제 연구 계산을 대표하는 문제 크기에서 수행되어야 합니다. 매뉴얼에 설명된 바와 같이, 성능 테스트는 성능 모니터링을 돕기 위해 제공됩니다.
빌드 디렉토리에서 단위 테스트(unit tests)만 지정하여 ctest를 호출하십시오:
ctest -j 16 -R unit --output-on-failure
이 모든 테스트는 몇 분 안에 통과되어야 합니다. 병렬화 설정(-j 16)은 시스템의 코어 수에 맞게 수정하십시오.
빌드 디렉토리에서 결정론적이고 신뢰할 수 있는 테스트만 지정하여 ctest를 호출하십시오:
ctest -j 16 -R deterministic -LE unstable --output-on-failure
현재 이 테스트들은 몇 분 정도 소요되며 모든 단위 테스트를 포함합니다. 모든 테스트는 통과해야 합니다. 실패하는 테스트는 QMCPACK을 추가로 사용하기 전에 해결해야 할 중대한 문제를 나타낼 가능성이 높습니다. 이 ctest 호출은 자동화된 설치 검증 프로세스의 일부로 사용될 수 있습니다. 많은 테스트들이 16의 배수 프로세스를 사용하므로, 코어 수가 많은 머신에서는 -j 64 등으로 상당한 속도 향상을 얻을 수 있습니다.
빌드 디렉토리에서 'short'를 포함하는 테스트만 지정하여 실행하려면 ctest를 호출하십시오. 이 테스트들은 안정적임이 알려져 있기 때문입니다.
ctest -j 16 -R short -LE unstable --output-on-failure
이 테스트들은 현재 최대 약 한 시간을 소요합니다. 평균적으로 모든 테스트는 세 시그마(three sigma) 수준의 신뢰도로 통과해야 합니다. 처음에 실패했던 테스트라도 다시 실행하면 통과할 것입니다.
개별 테스트는 이름을 지정하여 실행할 수 있습니다.
ctest -R name-of-test-to-run
어떤 크기의 기여든 환영합니다. QMCPACK에 기여하는 방법에 대한 지침은 매뉴얼 https://qmcpack.readthedocs.io/en/develop/introduction.html#contributing-to-qmcpack에 포함되어 있습니다. 저희는 풀 리퀘스트(pull request) 검토를 포함한 git flow 모델을 사용합니다. 지속적 통합 시스템(continuous integration system)은 풀 리퀘스트에서 실행됩니다. 자세한 내용은 https://github.com/QMCPACK/qmcpack/wiki를 참조하십시오. 광범위하게 기여하려면 Google QMCPACK 그룹에서 논의하거나, GitHub 이슈를 생성하거나, 사전에 개발자와 직접 대화하는 것이 도움이 될 수 있습니다.
기여는 QMCPACK을 포괄하는 동일한 UIUC/NCSA 오픈 소스 라이선스 하에 이루어집니다. 이 점이 문제가 된다면 연락 주십시오.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기