commit 247fc2baf0daf4dec7e8554df9a761c370ff1592 Author: lingyuzeng Date: Mon Sep 9 20:36:26 2024 +0800 add diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fdf550b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,51 @@ +# syntax=docker/dockerfile:1 +FROM nvidia/cuda:12.3.1-devel-ubuntu22.04 + +# 定义变量 +ARG FFTW_VERSION=3.3.10 +ARG GROMACS_VERSION=2023.2 +ARG INSTALL_DIR=/opt +ARG GMX_INSTALL_PREFIX=${INSTALL_DIR}/software/gmx +ARG CUDA_TOOLKIT_PATH=/usr/local/cuda +ARG OPENMPI_PATH=${INSTALL_DIR}/software/openmpi + +# 使用 Here-docs 安装软件 openmpi 等 +RUN <> ~/.bashrc +echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${INSTALL_DIR}/software/fftw/lib' >> ~/.bashrc +EOF + +# install gromacs +WORKDIR ${INSTALL_DIR}/software +RUN <> ~/.bashrc +cmake .. -DCMAKE_INSTALL_PREFIX=${GMX_INSTALL_PREFIX} -DGMX_USE_RDTSCP=ON -DGMX_GPU=CUDA -DCUDA_TOOLKIT_ROOT_DIR=${CUDA_TOOLKIT_PATH} -DGMX_BUILD_OWN_FFTW=ON -DGMX_MPI=ON +make +make install -j8 +EOF + +ENV PATH="${GMX_INSTALL_PREFIX}/bin:${PATH}" + +# 设置容器启动时的默认命令 +CMD ["gmx_mpi"] diff --git a/Dockerfile.gromacs b/Dockerfile.gromacs new file mode 100644 index 0000000..7576693 --- /dev/null +++ b/Dockerfile.gromacs @@ -0,0 +1,177 @@ +# syntax=docker/dockerfile:1 +# NOTE: Building this image require's docker version >= 23.0. +# +# For reference: +# - https://docs.docker.com/build/dockerfile/frontend/#stable-channel +ARG TAG_VERSION="12.4.1" +FROM nvidia/cuda:${TAG_VERSION}-cudnn-devel-ubuntu22.04 +ARG HTTP_PROXY +ARG HTTPS_PROXY +ENV http_proxy=${HTTP_PROXY} +ENV https_proxy=${HTTPS_PROXY} +ARG DEBIAN_FRONTEND="noninteractive" +ENV DEBIAN_FRONTEND=${DEBIAN_FRONTEND} +ARG ROOT_PASSWD="root" +ENV ROOT_PASSWD=${ROOT_PASSWD} +ENV SSH_PORT=2222 +WORKDIR /root +SHELL ["/bin/bash", "-c"] + +# base tools +RUN < ~/.ssh/config +cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak +sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config +sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config +sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config +sed -i 's/^\(\s*\)GSSAPIAuthentication yes/\1GSSAPIAuthentication no/' /etc/ssh/ssh_config +sed -i "s/^#Port 22/Port ${SSH_PORT}/" /etc/ssh/sshd_config +sudo sed -i "s/# Port 22/Port ${SSH_PORT}/" /etc/ssh/ssh_config +ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa -N "" <<< y +cat ~/.ssh/id_rsa.pub >> ~/.ssh/auth +cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys +cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys2 +chmod 600 /root/.ssh/authorized_keys +chmod 600 /root/.ssh/authorized_keys2 +mkdir /var/run/sshd +echo "root:${ROOT_PASSWD}" | chpasswd +mkdir -p ~/.pip +# install pixi +curl -fsSL https://pixi.sh/install.sh | bash +EOT + +ARG FFTW_VERSION="3.3.10" +ENV FFTW_VERSION=${FFTW_VERSION} +ENV PATH=/usr/local/fftw:$PATH +# 安装fftw +RUN < ./test_mpi_cuda.cu +#include +#include +#include + +__global__ void hello_cuda() { + printf("Hello from CUDA kernel! Thread id: %d\n", threadIdx.x); +} + +int main(int argc, char **argv) { + MPI_Init(&argc, &argv); + + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + + printf("Hello from MPI process %d!\n", rank); + + // Launch CUDA kernel + hello_cuda<<<1, 10>>>(); + cudaDeviceSynchronize(); // Wait for the CUDA kernel to finish + + MPI_Finalize(); + return 0; +} +EOF +nvcc -o test_mpi_cuda test_mpi_cuda.cu -I${CUDA_HOME}/include -I${MPI_HOME}/include -L${MPI_HOME}/lib -lcudart -lmpi +# mpirun --allow-run-as-root -np 2 ./test_mpi_cuda +EOT + +# 安装plumed +ARG PLUMED_VERSION="2.9.1" +ENV PLUMED_VERSION=${PLUMED_VERSION} +ENV LD_LIBRARY_PATH=/usr/local/plumed/lib:$LD_LIBRARY_PATH +ENV PATH=/usr/local/plumed:/usr/local/plumed/bin:$PATH +RUN <> /root/.bashrc +EOT + +RUN <