2023-09-27 12:44:36 -04:00
#!/bin/bash
#==================================================
# Configuration options
#==================================================
# ROCm location
export MY_ROCM_DIR = /opt/rocm
# hip location
export MY_HIP_DIR = /opt/rocm/hip
# UCX configuration options
export MY_UCX_SOURCE = https://github.com/openucx/ucx.git
export MY_UCX_BRANCH = v1.15.x
export MY_UCX_DIR = $PWD /ucx/install
# OpenMPI configuration options
export MY_OMPI_SOURCE = https://github.com/open-mpi/ompi.git
export MY_OMPI_BRANCH = v5.0.x
export MY_OMPI_DIR = $PWD /ompi/install
# HIP MPI testsuite
2024-03-25 16:29:13 -06:00
export MY_HIP_MPI_TEST_SOURCE = git@github.com:ROCm/hip-mpi-testsuite.git
2023-09-27 12:44:36 -04:00
export MY_HIP_MPI_TEST_DIR = $PWD /hip-mpi-testsuite
# OSU Benchmark configuration options
export MY_OSU_SOURCE = https://mvapich.cse.ohio-state.edu/download/mvapich
export MY_OSU_FILE = osu-micro-benchmarks-7.2.tar.gz
export MY_OSU_DIR = $PWD /osu-micro-benchmarks-7.2
# RCCL configuration options
2024-03-25 16:29:13 -06:00
export MY_RCCL_SOURCE = https://github.com/ROCm/rccl.git
2023-09-27 12:44:36 -04:00
export MY_RCCL_BRANCH = develop
export MY_RCCL_DIR = $PWD /rccl
# RCCL-tests configuration options
2024-03-25 16:29:13 -06:00
export MY_RCCL_TESTS_SOURCE = https://github.com/ROCm/rccl-tests.git
2023-09-27 12:44:36 -04:00
export MY_RCCL_TESTS_BRANCH = master
export MY_RCCL_TESTS_DIR = $PWD /rccl-tests
# Transferbench configuration options
2024-03-25 16:29:13 -06:00
export MY_TRANSFERBENCH_SOURCE = https://github.com/ROCm/TransferBench.git
2023-09-27 12:44:36 -04:00
export MY_TRANSFERBENCH_BRANCH = develop
export MY_TRANSFERBENCH_DIR = $PWD /TransferBench
# Results location
export MY_RESULTS_DIR = $PWD /output
# Compilation location
export MY_COMPILATION_DIR = $PWD /output
mkdir $PWD /output
# Step 0: Calculate the number of GPUs
NUMBER_OF_GPUS = " $( /opt/rocm/bin/rocm_agent_enumerator | wc -l) "
NUMBER_OF_GPUS = $(( NUMBER_OF_GPUS-1))
echo "The number of GPUs is : $NUMBER_OF_GPUS "
# Step 1: Build UCX with ROCm support
echo "Step 1: Install UCX?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Build_UCX = PASSED
echo "Cloning fresh copy of UCX: $MY_UCX_BRANCH "
rm -rf ucx || Build_UCX = FAILED
git clone $MY_UCX_SOURCE -b $MY_UCX_BRANCH || Build_UCX = FAILED
cd ucx || Build_UCX = FAILED
./autogen.sh | tee -a $MY_COMPILATION_DIR /compile.log || Build_UCX = FAILED
mkdir -p build || Build_UCX = FAILED
cd build || Build_UCX = FAILED
../configure --prefix= $MY_UCX_DIR --with-rocm= $MY_ROCM_DIR --without-knem --enable-gtest | tee -a $MY_COMPILATION_DIR /compile.log || Build_UCX = FAILED
make -j | tee -a $MY_COMPILATION_DIR /compile.log || Build_UCX = FAILED
make install | tee -a $MY_COMPILATION_DIR /compile.log || Build_UCX = FAILED
cd ../.. || Build_UCX = FAILED
else Build_UCX = SKIPPED
fi
# Step 2: UCX unit tests
echo "Step 2: Run UCX gtests?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Run_UCX_gtests = PASSED
export LD_LIBRARY_PATH = $MY_UCX_DIR /lib:$MY_ROCM_LIB /lib:$LD_LIBRARY_PATH
cd $MY_UCX_DIR /../build || Run_UCX_gtests = FAILED
./test/gtest/gtest --gtest_filter= *rocm*:-*Pitch* | tee -a $MY_RESULTS_DIR /results.log || Run_UCX_gtests = FAILED
cd ../../ || Run_UCX_gtests = FAILED
else Run_UCX_gtests = SKIPPED
fi
# Step 3: Install OpenMPI with UCX support
echo "Step 3: Install OpenMPI?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Install_OpenMPI = PASSED
echo "Cloning fresh copy of OpenMPI: $MY_OMPI_BRANCH "
rm -rf ompi || Install_OpenMPI = FAILED
git clone --recursive $MY_OMPI_SOURCE -b $MY_OMPI_BRANCH || Install_OpenMPI = FAILED
cd ompi || Install_OpenMPI = FAILED
./autogen.pl | tee -a $MY_COMPILATION_DIR /compile.log || Install_OpenMPI = FAILED
mkdir -p build || Install_OpenMPI = FAILED
cd build || Install_OpenMPI = FAILED
../configure --prefix= $MY_OMPI_DIR --with-rocm= $MY_ROCM_DIR --with-ucx= $MY_UCX_DIR --disable-sphinx --disable-oshmem --disable-mpi-fortran --with-prrte= internal --with-hwloc= internal --with-libevent= internal | tee -a $MY_COMPILATION_DIR /compile.log || Install_OpenMPI = FAILED
make -j | tee -a $MY_COMPILATION_DIR /compile.log || Install_OpenMPI = FAILED
make install | tee -a $MY_COMPILATION_DIR /compile.log || Install_OpenMPI = FAILED
cd ../.. || Install_OpenMPI = FAILED
else Install_OpenMPI = SKIPPED
fi
# Step 4: Install hip-mpi-testsuite benchmarks
echo "Step 4: Install hip-mpi-testsuite benchmarks?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Install_hip_mpi_testsuite = PASSED
rm -rf $MY_HIP_MPI_TEST_DIR || Install_hip_mpi_testsuite = FAILED
git clone $MY_HIP_MPI_TEST_SOURCE | tee -a $MY_COMPILATION_DIR /compile.log || Install_hip_mpi_testsuite = FAILED
cd $MY_HIP_MPI_TEST_DIR || Install_hip_mpi_testsuite = FAILED
export LD_LIBRARY_PATH = $MY_OMPI_DIR /lib:$MY_UCX_DIR /lib:$MY_ROCM_DIR /lib:$LD_LIBRARY_PATH
export PATH = $MY_OMPI_DIR /bin:$PATH
./configure CXX = mpiCC --with-rocm= $MY_ROCM_DIR | tee -a $MY_COMPILATION_DIR /compile.log || Install_hip_mpi_testsuite = FAILED
make -j | tee -a $MY_COMPILATION_DIR /compile.log || Install_hip_mpi_testsuite = FAILED
cd .. || Install_hip_mpi_testsuite = FAILED
else Install_hip_mpi_testsuite = SKIPPED
fi
# Step 5: Run hip-mpi-testsuite benchmarks
echo "Step 5: Run hip-mpi-testsuite benchmarks?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Run_hip_mpi_testsuite = PASSED
cd $MY_HIP_MPI_TEST_DIR || Run_hip_mpi_testsuite = FAILED
export LD_LIBRARY_PATH = $MY_OMPI_DIR /lib:$MY_UCX_DIR /lib:$MY_ROCM_DIR /lib:$LD_LIBRARY_PATH
export PATH = $MY_OMPI_DIR /bin:$PATH
cd scripts/ || Run_hip_mpi_testsuite = FAILED
./run_all.sh | tee -a $MY_RESULTS_DIR /results.log || Run_hip_mpi_testsuite = FAILED
cd ../.. || Run_hip_mpi_testsuite = FAILED
else Run_hip_mpi_testsuite = SKIPPED
fi
# Step 6: Install OSU benchmarks
echo "Step 6: Install OSU benchmarks?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Install_OSU = PASSED
echo "Fetching fresh copy of OSU benchmarks"
rm -rf $MY_OSU_DIR || Install_OSU = FAILED
wget $MY_OSU_SOURCE /$MY_OSU_FILE || Install_OSU = FAILED
tar -xzf $MY_OSU_FILE || Install_OSU = FAILED
cd $MY_OSU_DIR || Install_OSU = FAILED
autoreconf -ivf | tee -a $MY_COMPILATION_DIR /compile.log || Install_OSU = FAILED
export LD_LIBRARY_PATH = $MY_OMPI_DIR /lib:$MY_UCX_DIR /lib:$MY_ROCM_DIR /lib:$LD_LIBRARY_PATH
export PATH = $MY_OMPI_DIR /bin:$PATH
./configure --enable-rocm --with-rocm= $MY_ROCM_DIR CC = $MY_OMPI_DIR /bin/mpicc CXX = $MY_OMPI_DIR /bin/mpicxx LDFLAGS = "-L $MY_OMPI_DIR /lib/ -lmpi -L $MY_ROCM_DIR /lib/ -lamdhip64" | tee -a $MY_COMPILATION_DIR /compile.log || Install_OSU = FAILED
make -j 8 | tee -a $MY_COMPILATION_DIR /compile.log || Install_OSU = FAILED
cd .. || Install_OSU = FAILED
else Install_OSU = SKIPPED
fi
# Step 7: OSU pt2pt bw tests
echo "Step 7: Run OSU pt2pt bw benchmarks?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
OSU_pt2pt_bw_test = PASSED
cd $MY_OSU_DIR || OSU_pt2pt_bw_test = FAILED
export LD_LIBRARY_PATH = $MY_OMPI_DIR /lib:$MY_UCX_DIR /lib:$MY_ROCM_DIR /lib:$LD_LIBRARY_PATH
export PATH = $MY_OMPI_DIR /bin:$PATH
for MEM1 in D H; do
for MEM2 in D H; do
$MY_OMPI_DIR /bin/mpirun -np 2 --mca osc ucx --mca pml ucx -x LD_LIBRARY_PATH ./c/mpi/pt2pt/standard/osu_bw $MEM1 $MEM2 | tee -a $MY_RESULTS_DIR /results.log || OSU_pt2pt_bw_test = FAILED
done
done
cd ../
else OSU_pt2pt_bw_test = SKIPPED
fi
# Step 8: OSU pt2pt latency tests
echo "Step 8: Run OSU pt2pt latency benchmarks?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
OSU_pt2pt_latency_test = PASSED
cd $MY_OSU_DIR || OSU_pt2pt_latency_test = FAILED
export LD_LIBRARY_PATH = $MY_OMPI_DIR /lib:$MY_UCX_DIR /lib:$MY_ROCM_DIR /lib:$LD_LIBRARY_PATH
export PATH = $MY_OMPI_DIR /bin:$PATH
for MEM1 in D H; do
for MEM2 in D H; do
$MY_OMPI_DIR /bin/mpirun -np 2 --mca osc ucx --mca pml ucx -x LD_LIBRARY_PATH ./c/mpi/pt2pt/standard/osu_latency $MEM1 $MEM2 | tee -a $MY_RESULTS_DIR /results.log || OSU_pt2pt_latency_test = FAILED
done
done
cd ../
else OSU_pt2pt_latency_test = SKIPPED
fi
# Step 9: OSU collective tests
echo "Step 9: Run OSU collective benchmarks?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
OSU_collective_tests = PASSED
cd $MY_OSU_DIR || OSU_collective_tests = FAILED
export LD_LIBRARY_PATH = $MY_OMPI_DIR /lib:$MY_UCX_DIR /lib:$MY_ROCM_DIR /lib:$LD_LIBRARY_PATH
export PATH = $MY_OMPI_DIR /bin:$PATH
$MY_OMPI_DIR /bin/mpirun --mca coll ^hcoll,han,adapt --mca osc ucx --mca pml ucx -x LD_LIBRARY_PATH -np $NUMBER_OF_GPUS ./c/mpi/collective/blocking/osu_bcast -m :33554432 -d rocm | tee -a $MY_RESULTS_DIR /results.log || OSU_collective_tests = FAILED
$MY_OMPI_DIR /bin/mpirun --mca coll ^hcoll,han,adapt --mca osc ucx --mca pml ucx -x LD_LIBRARY_PATH -np $NUMBER_OF_GPUS ./c/mpi/collective/blocking/osu_reduce -m :33554432 -d rocm | tee -a $MY_RESULTS_DIR /results.log || OSU_collective_tests = FAILED
$MY_OMPI_DIR /bin/mpirun --mca coll ^hcoll,han,adapt --mca osc ucx --mca pml ucx -x LD_LIBRARY_PATH -np $NUMBER_OF_GPUS ./c/mpi/collective/blocking/osu_gather -m :33554432 -d rocm | tee -a $MY_RESULTS_DIR /results.log || OSU_collective_tests = FAILED
$MY_OMPI_DIR /bin/mpirun --mca coll ^hcoll,han,adapt --mca osc ucx --mca pml ucx -x LD_LIBRARY_PATH -np $NUMBER_OF_GPUS ./c/mpi/collective/blocking/osu_scatter -m :33554432 -d rocm | tee -a $MY_RESULTS_DIR /results.log || OSU_collective_tests = FAILED
$MY_OMPI_DIR /bin/mpirun --mca coll ^hcoll,han,adapt --mca osc ucx --mca pml ucx -x LD_LIBRARY_PATH -np $NUMBER_OF_GPUS ./c/mpi/collective/blocking/osu_allgather -m :33554432 -d rocm | tee -a $MY_RESULTS_DIR /results.log || OSU_collective_tests = FAILED
$MY_OMPI_DIR /bin/mpirun --mca coll ^hcoll,han,adapt --mca osc ucx --mca pml ucx -x LD_LIBRARY_PATH -np $NUMBER_OF_GPUS ./c/mpi/collective/blocking/osu_alltoall -m :33554432 -d rocm | tee -a $MY_RESULTS_DIR /results.log || OSU_collective_tests = FAILED
cd ../ || OSU_collective_tests = FAILED
else OSU_collective_tests = SKIPPED
fi
# Step 10: Install RCCL
echo "Step 10: Install RCCL?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Install_RCCL = PASSED
rm -rf $MY_RCCL_DIR || Install_RCCL = FAILED
git clone $MY_RCCL_SOURCE -b $MY_RCCL_BRANCH || Install_RCCL = FAILED
cd $MY_RCCL_DIR || Install_RCCL = FAILED
export LD_LIBRARY_PATH = $MY_ROCM_DIR /lib:$LD_LIBRARY_PATH
./install.sh -dt | tee -a $MY_COMPILATION_DIR /compile.log || Install_RCCL = FAILED
cd .. || Install_RCCL = FAILED
else Install_RCCL = SKIPPED
fi
# Step 11: Run RCCL Unittests
echo "Step 11: Run RCCL Unittests?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Run_RCCL_Unittests = PASSED
cd $MY_RCCL_DIR || Run_RCCL_Unittests = FAILED
export LD_LIBRARY_PATH = $MY_RCCL_DIR /build/release:$MY_ROCM_DIR /lib:$LD_LIBRARY_PATH
HSA_FORCE_FINE_GRAIN_PCIE = 1 ./build/release/test/rccl-UnitTests | tee -a $MY_RESULTS_DIR /results.log || Run_RCCL_Unittests = FAILED
cd .. || Run_RCCL_Unittests = FAILED
else Run_RCCL_Unittests = SKIPPED
fi
# Step 12: Install RCCL-tests
echo "Step 12: Install RCCL-tests?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Install_RCCL_tests = PASSED
rm -rf $MY_RCCL_TESTS_DIR || Install_RCCL_tests = FAILED
git clone $MY_RCCL_TESTS_SOURCE -b $MY_RCCL_TESTS_BRANCH || Install_RCCL_tests = FAILED
cd $MY_RCCL_TESTS_DIR || Install_RCCL_tests = FAILED
export LD_LIBRARY_PATH = $MY_ROCM_DIR /lib:$LD_LIBRARY_PATH
make MPI = 1 MPI_HOME = $MY_OMPI_DIR HIP_HOME = $MY_HIP_DIR RCCL_HOME = $MY_RCCL_DIR /build/release | tee -a $MY_COMPILATION_DIR /compile.log || Install_RCCL_tests = FAILED
cd .. || Install_RCCL_tests = FAILED
else Install_RCCL_tests = SKIPPED
fi
# Step 13: Run RCCL-tests
echo "Step 13: Run RCCL-tests?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Run_RCCL_tests = PASSED
cd $MY_RCCL_TESTS_DIR || Run_RCCL_tests = FAILED
export LD_LIBRARY_PATH = $MY_OMPI_DIR /lib:$MY_RCCL_DIR /build/release:$LD_LIBRARY_PATH
export PATH = $MY_OMPI_DIR /bin:$MY_ROCM_DIR /bin:$PATH
set -x
HSA_FORCE_FINE_GRAIN_PCIE = 1 mpirun -np $NUMBER_OF_GPUS ./build/broadcast_perf -b 16 -e 4G -f 2 -g 1 -c 1 | tee -a $MY_RESULTS_DIR /results.log || Run_RCCL_tests = FAILED
HSA_FORCE_FINE_GRAIN_PCIE = 1 mpirun -np $NUMBER_OF_GPUS ./build/reduce_perf -b 16 -e 4G -f 2 -g 1 -c 1 | tee -a $MY_RESULTS_DIR /results.log || Run_RCCL_tests = FAILED
HSA_FORCE_FINE_GRAIN_PCIE = 1 mpirun -np $NUMBER_OF_GPUS ./build/scatter_perf -b 16 -e 4G -f 2 -g 1 -c 1 | tee -a $MY_RESULTS_DIR /results.log || Run_RCCL_tests = FAILED
HSA_FORCE_FINE_GRAIN_PCIE = 1 mpirun -np $NUMBER_OF_GPUS ./build/all_gather_perf -b 16 -e 4G -f 2 -g 1 -c 1 | tee -a $MY_RESULTS_DIR /results.log || Run_RCCL_tests = FAILED
HSA_FORCE_FINE_GRAIN_PCIE = 1 mpirun -np $NUMBER_OF_GPUS ./build/sendrecv_perf -b 16 -e 4G -f 2 -g 1 -c 1 | tee -a $MY_RESULTS_DIR /results.log || Run_RCCL_tests = FAILED
HSA_FORCE_FINE_GRAIN_PCIE = 1 mpirun -np $NUMBER_OF_GPUS ./build/gather_perf -b 16 -e 4G -f 2 -g 1 -c 1 | tee -a $MY_RESULTS_DIR /results.log || Run_RCCL_tests = FAILED
HSA_FORCE_FINE_GRAIN_PCIE = 1 mpirun -np $NUMBER_OF_GPUS ./build/alltoall_perf -b 16 -e 4G -f 2 -g 1 -c 1 | tee -a $MY_RESULTS_DIR /results.log || Run_RCCL_tests = FAILED
HSA_FORCE_FINE_GRAIN_PCIE = 1 mpirun -np $NUMBER_OF_GPUS ./build/all_reduce_perf -b 16 -e 4G -f 2 -g 1 -c 1 | tee -a $MY_RESULTS_DIR /results.log || Run_RCCL_tests = FAILED
cd .. || Run_RCCL_tests = FAILED
else Run_RCCL_tests = SKIPPED
fi
# Step 14: Install and Run TransferBench
echo "Step 14: Run TransferBench?"
read -p '(y/n) ' RESPONSE
if [ " $RESPONSE " = "y" ] ; then
Install_Run_TransferBench = PASSED
rm -rf $MY_TRANSFERBENCH_DIR || Install_Run_TransferBench = FAILED
git clone $MY_TRANSFERBENCH_SOURCE -b $MY_TRANSFERBENCH_BRANCH || Install_Run_TransferBench = FAILED
cd $MY_TRANSFERBENCH_DIR || Install_Run_TransferBench = FAILED
mkdir build || Install_Run_TransferBench = FAILED
cd build || Install_Run_TransferBench = FAILED
CXX = $MY_ROCM_DIR /bin/hipcc cmake .. | tee -a $MY_COMPILATION_DIR /compile.log || Install_Run_TransferBench = FAILED
make | tee -a $MY_COMPILATION_DIR /compile.log || Install_Run_TransferBench = FAILED
cd .. || Install_Run_TransferBench = FAILED
./TransferBench | tee -a $MY_RESULTS_DIR /results.log || Install_Run_TransferBench = FAILED
./TransferBench p2p | tee -a $MY_RESULTS_DIR /results.log || Install_Run_TransferBench = FAILED
cd .. || Install_Run_TransferBench = FAILED
else Install_Run_TransferBench = SKIPPED
fi
echo "Step 1: Install UCX?: $Build_UCX "
echo "Step 2: Run UCX gtests? : $Run_UCX_gtests "
echo "Step 3: Install OpenMPI? : $Install_OpenMPI "
echo "Step 4: Install hip-mpi-testsuite benchmarks? : $Install_hip_mpi_testsuite "
echo "Step 5: Run hip-mpi-testsuite benchmarks? : $Run_hip_mpi_testsuite "
echo "Step 6: Install OSU benchmarks? : $Install_OSU "
echo "Step 7: Run OSU pt2pt bw benchmarks? : $OSU_pt2pt_bw_test "
echo "Step 8: Run OSU pt2pt latency benchmarks? : $OSU_pt2pt_latency_test "
echo "Step 9: Run OSU collective benchmarks?: $OSU_collective_tests "
echo "Step 10: Install RCCL? : $Install_RCCL "
echo "Step 11: Run RCCL Unittests? : $Run_RCCL_Unittests "
echo "Step 12: Install RCCL-tests? : $Install_RCCL_tests "
echo "Step 13: Run RCCL-tests? : $Run_RCCL_tests "
echo "Step 14: Run TransferBench? : $Install_Run_TransferBench "