Skip to content

Commit 2add562

Browse files
[Fix]An Intel Build test for abacus with PEXSI support (#6688)
* [Fix]Install libraries for PEXSI and update abacus build Added installation steps for GKlib, METIS, ParMETIS, SuperLU_DIST, and PEXSI in the Dockerfile. Updated the abacus build process to use a specific version. * Update build arguments for Intel and GNU toolchains * Update Dockerfile.intel * Update elecstate_lcao.cpp * Update Dockerfile.intel * Update Dockerfile.intel --------- Co-authored-by: Mohan Chen <[email protected]>
1 parent 1f926b8 commit 2add562

File tree

2 files changed

+107
-1
lines changed

2 files changed

+107
-1
lines changed

.github/workflows/build_test_cmake.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
build_args: "-DUSE_CUDA=1"
2828
name: "Build with CUDA support"
2929
- tag: gnu
30-
build_args: "-DENABLE_LCAO=OFF"
30+
build_args: "-DENABLE_LCAO=0"
3131
name: "Build without LCAO"
3232
- tag: gnu
3333
build_args: "-DUSE_ELPA=0 "

Dockerfile.intel

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,116 @@ RUN wget -q https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-
7474
unzip -q /tmp/libtorch.zip -d /opt && rm -f /tmp/libtorch.zip
7575
ENV CMAKE_PREFIX_PATH=/opt/libtorch/share/cmake:${CMAKE_PREFIX_PATH}
7676

77+
78+
###### PEXSI PART: pexsi and gklib and metis and parmetis and superlu_dist
79+
ENV GKLIB_VERSION="master"
80+
ENV METIS_VERSION="master"
81+
ENV PARMETIS_VERSION="main"
82+
ENV SUPERLU_DIST_VERSION=7.2.0
83+
ENV PEXSI_VERSION=2.0.0
84+
ENV GKLIB_ROOT=/usr/local/gklib-${GKLIB_VERSION}
85+
ENV METIS32_ROOT=/usr/local/metis32-${METIS_VERSION}
86+
ENV PARMETIS32_ROOT=/usr/local/parmetis32-${PARMETIS_VERSION}
87+
ENV PEXSI32_ROOT=/usr/local/pexsi32-${PEXSI_VERSION}
88+
ENV SUPERLU_DIST32_ROOT=/usr/local/superlu_dist32-${SUPERLU_DIST_VERSION}
89+
90+
# 2. install GKlib
91+
RUN wget https://codeload.github.com/KarypisLab/GKlib/zip/refs/heads/${GKLIB_VERSION} -O GKlib-${GKLIB_VERSION}.zip && \
92+
unzip GKlib-${GKLIB_VERSION}.zip && \
93+
cd GKlib-${GKLIB_VERSION} && \
94+
make config shared=1 prefix=${GKLIB_ROOT} openmp=set && \
95+
make -j$(nproc) && \
96+
make install && \
97+
ls ${GKLIB_ROOT}/lib && \
98+
cp ${GKLIB_ROOT}/lib/libGKlib.so.0 ${GKLIB_ROOT}/lib/libGKlib.so && \
99+
cd / && rm -rf GKlib-${GKLIB_VERSION} GKlib-${GKLIB_VERSION}.zip
100+
#.so file CANNOT be found otherwise.
101+
# 2. install METIS
102+
RUN export LD_LIBRARY_PATH=${GKLIB_ROOT}/lib:${LD_LIBRARY_PATH} && \
103+
wget https://codeload.github.com/KarypisLab/METIS/zip/refs/heads/${METIS_VERSION} -O METIS-${METIS_VERSION}.zip && \
104+
unzip METIS-${METIS_VERSION}.zip && \
105+
cd METIS-${METIS_VERSION} && \
106+
make config shared=1 prefix=${METIS32_ROOT} gklib_path=${GKLIB_ROOT} && \
107+
make -j$(nproc) && \
108+
make install && \
109+
cd / && rm -rf METIS-${METIS_VERSION} METIS-${METIS_VERSION}.zip
110+
111+
# 3. install ParMETIS
112+
RUN export LD_LIBRARY_PATH=${METIS32_ROOT}/lib:${GKLIB_ROOT}/lib:${LD_LIBRARY_PATH} && \
113+
wget https://codeload.github.com/KarypisLab/ParMETIS/zip/refs/heads/${PARMETIS_VERSION} -O ParMETIS-${PARMETIS_VERSION}.zip && \
114+
unzip ParMETIS-${PARMETIS_VERSION}.zip && \
115+
cd ParMETIS-${PARMETIS_VERSION} && \
116+
make config shared=1 prefix=${PARMETIS32_ROOT} gklib_path=${GKLIB_ROOT} metis_path=${METIS32_ROOT} && \
117+
make -j$(nproc) && \
118+
make install && \
119+
cd / && rm -rf ParMETIS-${PARMETIS_VERSION} ParMETIS-${PARMETIS_VERSION}.zip
120+
121+
# 4. install SuperLU_DIST
122+
RUN wget https://codeload.github.com/xiaoyeli/superlu_dist/tar.gz/refs/tags/v${SUPERLU_DIST_VERSION} -O v${SUPERLU_DIST_VERSION}.tar.gz && \
123+
tar -xzf v${SUPERLU_DIST_VERSION}.tar.gz && \
124+
cd superlu_dist-${SUPERLU_DIST_VERSION} && \
125+
mkdir build && cd build && \
126+
cmake .. \
127+
-DTPL_ENABLE_PARMETISLIB=ON \
128+
-DTPL_PARMETIS_LIBRARIES="${PARMETIS32_ROOT}/lib/libparmetis.so;${METIS32_ROOT}/lib/libmetis.so;${GKLIB_ROOT}/lib/libGKlib.so" \
129+
-DTPL_PARMETIS_INCLUDE_DIRS="${PARMETIS32_ROOT}/include;${METIS32_ROOT}/include;${GKLIB_ROOT}/include" \
130+
-DTPL_ENABLE_INTERNAL_BLASLIB=OFF \
131+
-DTPL_ENABLE_LAPACKLIB=ON \
132+
-DTPL_ENABLE_COMBBLASLIB=OFF \
133+
-DTPL_ENABLE_CUDALIB=OFF \
134+
-Denable_complex16=ON \
135+
-DXSDK_INDEX_SIZE=32 \
136+
-DBUILD_SHARED_LIBS=ON \
137+
-DCMAKE_INSTALL_PREFIX=${SUPERLU_DIST32_ROOT} \
138+
-DCMAKE_C_FLAGS="-O3 -fopenmp" \
139+
-DCMAKE_CXX_FLAGS="-O3 -fopenmp" \
140+
-DXSDK_ENABLE_Fortran=ON \
141+
-DCMAKE_Fortran_COMPILER=mpiifx && \
142+
make -j$(nproc) && \
143+
make install && \
144+
cd / && rm -rf superlu_dist-${SUPERLU_DIST_VERSION} v${SUPERLU_DIST_VERSION}.tar.gz
145+
146+
### -DCMAKE_C_COMPILER=mpiicc \
147+
### -DCMAKE_CXX_COMPILER=mpiicpc \
148+
### -DCMAKE_CUDA_COMPILER=nvcc \
149+
150+
# 5. install PEXSI
151+
RUN export LD_LIBRARY_PATH=${SUPERLU_DIST32_ROOT}/lib:${METIS32_ROOT}/lib:${PARMETIS32_ROOT}/lib:${GKLIB_ROOT}/lib:${LD_LIBRARY_PATH} && \
152+
export LIBRARY_PATH=${SUPERLU_DIST32_ROOT}/lib:${METIS32_ROOT}/lib:${PARMETIS32_ROOT}/lib:${GKLIB_ROOT}/lib:${LIBRARY_PATH} && \
153+
export PKG_CONFIG_PATH=${SUPERLU_DIST32_ROOT}/lib/pkgconfig:${METIS32_ROOT}/lib/pkgconfig:${PARMETIS32_ROOT}/lib/pkgconfig:${GKLIB_ROOT}/lib/pkgconfig:${PKG_CONFIG_PATH} && \
154+
export CPATH=${SUPERLU_DIST32_ROOT}/include:${PARMETIS32_ROOT}/include:${METIS32_ROOT}/include:${GKLIB_ROOT}/include:${CMAKE_PREFIX_PATH} && \
155+
export CMAKE_PREFIX_PATH=${SUPERLU_DIST32_ROOT}:${PARMETIS32_ROOT}:${METIS32_ROOT}:${GKLIB_ROOT}:${CMAKE_PREFIX_PATH} && \
156+
wget https://bitbucket.org/berkeleylab/pexsi/downloads/pexsi_v${PEXSI_VERSION}.tar.gz && \
157+
tar -xzf pexsi_v${PEXSI_VERSION}.tar.gz && \
158+
cd pexsi_v${PEXSI_VERSION} && \
159+
sed -i 's/^add_pexsi_f_example_exe/# add_pexsi_f_example_exe/g' fortran/CMakeLists.txt && \
160+
sed -i 's/^add_pexsi_example_exe/# add_pexsi_example_exe/g' examples/CMakeLists.txt && \
161+
sed -i 's/add_executable/# add_executable/g' fortran/CMakeLists.txt && \
162+
sed -i 's/add_executable/# add_executable/g' examples/CMakeLists.txt && \
163+
mkdir build && cd build && \
164+
cmake .. \
165+
-DCMAKE_INSTALL_PREFIX=${PEXSI32_ROOT} \
166+
-DPEXSI_ENABLE_OPENMP=ON \
167+
-DPEXSI_ENABLE_FORTRAN=OFF && \
168+
make pexsi -j$(nproc) && \
169+
make install && \
170+
cd / && rm -rf pexsi_v${PEXSI_VERSION} pexsi_v${PEXSI_VERSION}.tar.gz
171+
172+
### -DCMAKE_C_COMPILER=mpiicc \
173+
### -DCMAKE_CXX_COMPILER=mpiicpc \
174+
###### END of PEXSI PART
175+
77176
# Clone and build abacus (optional during image build; keep for CI image)
78177
ADD https://api.github.com/repos/deepmodeling/abacus-develop/git/refs/heads/develop /dev/null
79178
RUN export LD_LIBRARY_PATH=${GKLIB_ROOT}/lib:${METIS32_ROOT}/lib:${PARMETIS32_ROOT}/lib:${SUPERLU32_DIST_ROOT}/lib:${PEXSI32_ROOT}/lib:${LD_LIBRARY_PATH} && \
179+
export PKG_CONFIG_PATH=${GKLIB_ROOT}/lib/pkgconfig:${METIS32_ROOT}/lib/pkgconfig:${PARMETIS32_ROOT}/lib/pkgconfig:${SUPERLU32_DIST_ROOT}/lib/pkgconfig:${PEXSI32_ROOT}/lib/pkgconfig:${PKG_CONFIG_PATH} && \
80180
export CPATH=${GKLIB_ROOT}/include:${METIS32_ROOT}/include:${PARMETIS32_ROOT}/include:${SUPERLU32_DIST_ROOT}/include:${PEXSI32_ROOT}/include:${CPATH} && \
181+
export CMAKE_PREFIX_PATH=${PEXSI32_ROOT}:${SUPERLU_DIST32_ROOT}:${PARMETIS32_ROOT}:${METIS32_ROOT}:${GKLIB_ROOT}:${CMAKE_PREFIX_PATH} && \
81182
cd /tmp && git clone https://github.com/deepmodeling/abacus-develop.git --depth 1 && \
82183
cd abacus-develop && \
83184
cmake -B build \
84185
-DENABLE_MLALGO=ON \
186+
-DENABLE_PEXSI=ON \
85187
-DENABLE_LIBXC=ON \
86188
-DENABLE_LIBRI=ON \
87189
-DENABLE_RAPIDJSON=ON \
@@ -92,5 +194,9 @@ RUN export LD_LIBRARY_PATH=${GKLIB_ROOT}/lib:${METIS32_ROOT}/lib:${PARMETIS32_RO
92194
rm -rf /tmp/abacus-develop
93195
# -DMKL_SYCL=OFF \
94196
# -DMKL_SYCL_DISTRIBUTED_DFT:BOOL=OFF \
197+
# cd /tmp && wget https://github.com/deepmodeling/abacus-develop/archive/refs/tags/v3.9.0.17.zip -O abacus-develop-3.9.0.17.zip && \
198+
# unzip abacus-develop-3.9.0.17.zip && \
199+
# cd abacus-develop-3.9.0.17 && \
200+
# sed -i '3i\#include "source_estate/elecstate_lcao.h"' source/source_lcao/edm.cpp && \
95201
# Default entry
96202
CMD ["/bin/bash"]

0 commit comments

Comments
 (0)