1#!/usr/bin/env bash 2 3# Licensed to the Apache Software Foundation (ASF) under one 4# or more contributor license agreements. See the NOTICE file 5# distributed with this work for additional information 6# regarding copyright ownership. The ASF licenses this file 7# to you under the Apache License, Version 2.0 (the 8# "License"); you may not use this file except in compliance 9# with the License. You may obtain a copy of the License at 10# 11# http://www.apache.org/licenses/LICENSE-2.0 12# 13# Unless required by applicable law or agreed to in writing, 14# software distributed under the License is distributed on an 15# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16# KIND, either express or implied. See the License for the 17# specific language governing permissions and limitations 18# under the License. 19 20# This script installs the tools and libraries for CUDA GPU on Ubuntu. 21# Usage: VARIANT=cu92mkl; DEPS_PATH=$HOME; setup_gpu_build_tools.sh $VARIANT $DEPS_PATH; 22# It installs the tools into DEPS_PATH as specified by the second argument, and will set 23# the following environment variables: 24# PATH, CPLUS_INCLUDE_PATH, C_INCLUDE_PATH, LIBRARY_PATH, LD_LIBRARY_PATH, NVCC 25 26set -e 27 28VARIANT=$1 29DEPS_PATH=$2 30 31>&2 echo "Setting CUDA versions for $VARIANT" 32if [[ $VARIANT == cu112* ]]; then 33 CUDA_VERSION='11.2.67-1' 34 CUDA_PATCH_VERSION='11.4.1.1026-1' 35 CUDA_LIBS_VERSION='10.2.3.135-1' 36 CUDA_SOLVER_VERSION='11.1.0.135-1' 37 LIBCUDA_VERSION='460.32.03-0ubuntu1' 38 LIBCUDNN_VERSION='8.1.0.77-1+cuda11.2' 39 LIBNCCL_VERSION='2.8.3-1+cuda11.2' 40 LIBCUDART_VERSION='11.2.72-1' 41 LIBCUFFT_VERSION='10.4.0.135-1' 42elif [[ $VARIANT == cu110* ]]; then 43 CUDA_VERSION='11.0.221-1' 44 CUDA_PATCH_VERSION='11.2.0.252-1' 45 CUDA_LIBS_VERSION='10.2.1.245-1' 46 CUDA_SOLVER_VERSION='10.6.0.245-1' 47 CUDA_NVTX_VERSION='11.0.167-1' 48 LIBCUDA_VERSION='450.36.06-0ubuntu1' 49 LIBCUDNN_VERSION='8.0.4.30-1+cuda11.0' 50 LIBNCCL_VERSION='2.7.8-1+cuda11.0' 51elif [[ $VARIANT == cu102* ]]; then 52 CUDA_VERSION='10.2.89-1' 53 CUDA_PATCH_VERSION='10.2.2.89-1' 54 LIBCUDA_VERSION='440.33.01-0ubuntu1' 55 LIBCUDNN_VERSION='8.0.4.30-1+cuda10.2' 56 LIBNCCL_VERSION='2.5.6-1+cuda10.2' 57elif [[ $VARIANT == cu101* ]]; then 58 CUDA_VERSION='10.1.105-1' 59 CUDA_PATCH_VERSION='10.1.0.105-1' 60 LIBCUDA_VERSION='418.39-0ubuntu1' 61 LIBCUDNN_VERSION='7.6.5.32-1+cuda10.1' 62 LIBNCCL_VERSION='2.5.6-1+cuda10.1' 63elif [[ $VARIANT == cu100* ]]; then 64 CUDA_VERSION='10.0.130-1' 65 CUDA_PATCH_VERSION='10.0.130-1' 66 LIBCUDA_VERSION='410.48-0ubuntu1' 67 LIBCUDNN_VERSION='7.6.5.32-1+cuda10.0' 68 LIBNCCL_VERSION='2.5.6-1+cuda10.0' 69fi 70if [[ $VARIANT == cu* ]]; then 71 CUDA_MAJOR_VERSION=$(echo $CUDA_VERSION | tr '-' '.' | cut -d. -f1,2) 72 CUDA_MAJOR_DASH=$(echo $CUDA_VERSION | tr '-' '.' | cut -d. -f1,2 | tr '.' '-') 73 CUDA_PATCH_MAJOR_DASH=$(echo $CUDA_PATCH_VERSION | tr '-' '.' | cut -d. -f1,2 | tr '.' '-') 74 NVIDIA_MAJOR_VERSION=$(echo $LIBCUDA_VERSION | cut -d. -f1) 75 LIBCUDA_MAJOR=$(echo $LIBCUDA_VERSION | cut -d. -f1) 76 LIBCUDNN_MAJOR=$(echo $LIBCUDNN_VERSION | cut -d. -f1) 77 os_name=$(cat /etc/*release | grep '^ID=' | sed 's/^.*=//g') 78 os_version=$(cat /etc/*release | grep VERSION_ID | sed 's/^.*"\([0-9]*\)\.\([0-9]*\)"/\1\2/g') 79 os_id="${os_name}${os_version}" 80 if [[ $CUDA_MAJOR_DASH == 9-* ]] || [[ $CUDA_MAJOR_DASH == 10-* ]] || [[ $CUDA_MAJOR_DASH == 11-* ]] ; then 81 os_id="ubuntu1604" 82 fi 83 export PATH=/usr/lib/binutils-2.26/bin/:${PATH}:$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/bin 84 export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/include:$DEPS_PATH/usr/include 85 export C_INCLUDE_PATH=${C_INCLUDE_PATH}:$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/include:$DEPS_PATH/usr/include 86 export LIBRARY_PATH=${LIBRARY_PATH}:$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/lib64:$DEPS_PATH/usr/lib/x86_64-linux-gnu:$DEPS_PATH/usr/lib/nvidia-$NVIDIA_MAJOR_VERSION 87 export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/lib64:$DEPS_PATH/usr/lib/x86_64-linux-gnu:$DEPS_PATH/usr/lib/nvidia-$NVIDIA_MAJOR_VERSION 88 export NVCC=$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/bin/nvcc 89fi 90 91# list of debs to download from nvidia 92if [[ $VARIANT == cu112* ]]; then 93 cuda_files=( \ 94 "libcublas-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ 95 "libcublas-dev-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ 96 "cuda-cudart-${CUDA_MAJOR_DASH}_${LIBCUDART_VERSION}_amd64.deb" \ 97 "cuda-cudart-dev-${CUDA_MAJOR_DASH}_${LIBCUDART_VERSION}_amd64.deb" \ 98 "libcurand-${CUDA_MAJOR_DASH}_${CUDA_LIBS_VERSION}_amd64.deb" \ 99 "libcurand-dev-${CUDA_MAJOR_DASH}_${CUDA_LIBS_VERSION}_amd64.deb" \ 100 "libcufft-${CUDA_MAJOR_DASH}_${LIBCUFFT_VERSION}_amd64.deb" \ 101 "libcufft-dev-${CUDA_MAJOR_DASH}_${LIBCUFFT_VERSION}_amd64.deb" \ 102 "cuda-nvrtc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 103 "cuda-nvrtc-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 104 "libcusolver-${CUDA_MAJOR_DASH}_${CUDA_SOLVER_VERSION}_amd64.deb" \ 105 "libcusolver-dev-${CUDA_MAJOR_DASH}_${CUDA_SOLVER_VERSION}_amd64.deb" \ 106 "cuda-nvcc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 107 "cuda-nvtx-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 108 "libcuda1-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ 109 "cuda-nvprof-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 110 "nvidia-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ 111 "libcudnn${LIBCUDNN_MAJOR}-dev_${LIBCUDNN_VERSION}_amd64.deb" \ 112 "libcudnn${LIBCUDNN_MAJOR}_${LIBCUDNN_VERSION}_amd64.deb" \ 113 ) 114 ml_files=( \ 115 "libnccl-dev_${LIBNCCL_VERSION}_amd64.deb" \ 116 "libnccl2_${LIBNCCL_VERSION}_amd64.deb" \ 117 ) 118elif [[ $VARIANT == cu110* ]]; then 119 cuda_files=( \ 120 "libcublas-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ 121 "libcublas-dev-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ 122 "cuda-cudart-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 123 "cuda-cudart-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 124 "libcurand-${CUDA_MAJOR_DASH}_${CUDA_LIBS_VERSION}_amd64.deb" \ 125 "libcurand-dev-${CUDA_MAJOR_DASH}_${CUDA_LIBS_VERSION}_amd64.deb" \ 126 "libcufft-${CUDA_MAJOR_DASH}_${CUDA_LIBS_VERSION}_amd64.deb" \ 127 "libcufft-dev-${CUDA_MAJOR_DASH}_${CUDA_LIBS_VERSION}_amd64.deb" \ 128 "cuda-nvrtc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 129 "cuda-nvrtc-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 130 "libcusolver-${CUDA_MAJOR_DASH}_${CUDA_SOLVER_VERSION}_amd64.deb" \ 131 "libcusolver-dev-${CUDA_MAJOR_DASH}_${CUDA_SOLVER_VERSION}_amd64.deb" \ 132 "cuda-nvcc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 133 "cuda-nvtx-${CUDA_MAJOR_DASH}_${CUDA_NVTX_VERSION}_amd64.deb" \ 134 "libcuda1-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ 135 "cuda-nvprof-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 136 "nvidia-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ 137 ) 138 ml_files=( \ 139 "libcudnn${LIBCUDNN_MAJOR}-dev_${LIBCUDNN_VERSION}_amd64.deb" \ 140 "libcudnn${LIBCUDNN_MAJOR}_${LIBCUDNN_VERSION}_amd64.deb" \ 141 "libnccl-dev_${LIBNCCL_VERSION}_amd64.deb" \ 142 "libnccl2_${LIBNCCL_VERSION}_amd64.deb" \ 143 ) 144elif [[ $VARIANT == cu102* ]]; then 145 cuda_files=( \ 146 "cuda-core-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 147 "libcublas10_${CUDA_PATCH_VERSION}_amd64.deb" \ 148 "libcublas-dev_${CUDA_PATCH_VERSION}_amd64.deb" \ 149 "cuda-cudart-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 150 "cuda-cudart-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 151 "cuda-curand-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 152 "cuda-curand-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 153 "cuda-cufft-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 154 "cuda-cufft-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 155 "cuda-nvrtc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 156 "cuda-nvrtc-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 157 "cuda-cusolver-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 158 "cuda-cusolver-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 159 "cuda-misc-headers-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 160 "cuda-nvcc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 161 "cuda-nvtx-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 162 "libcuda1-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ 163 "nvidia-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ 164 ) 165 ml_files=( \ 166 "libcudnn${LIBCUDNN_MAJOR}-dev_${LIBCUDNN_VERSION}_amd64.deb" \ 167 "libcudnn${LIBCUDNN_MAJOR}_${LIBCUDNN_VERSION}_amd64.deb" \ 168 "libnccl-dev_${LIBNCCL_VERSION}_amd64.deb" \ 169 "libnccl2_${LIBNCCL_VERSION}_amd64.deb" \ 170 ) 171elif [[ $VARIANT == cu101* ]]; then 172 cuda_files=( \ 173 "cuda-core-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 174 "libcublas10_${CUDA_PATCH_VERSION}_amd64.deb" \ 175 "libcublas-dev_${CUDA_PATCH_VERSION}_amd64.deb" \ 176 "cuda-cudart-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 177 "cuda-cudart-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 178 "cuda-curand-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 179 "cuda-curand-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 180 "cuda-cufft-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 181 "cuda-cufft-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 182 "cuda-nvrtc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 183 "cuda-nvrtc-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 184 "cuda-cusolver-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 185 "cuda-cusolver-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 186 "cuda-misc-headers-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 187 "cuda-nvcc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 188 "cuda-nvtx-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 189 "libcuda1-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ 190 "nvidia-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ 191 ) 192 ml_files=( \ 193 "libcudnn${LIBCUDNN_MAJOR}-dev_${LIBCUDNN_VERSION}_amd64.deb" \ 194 "libcudnn${LIBCUDNN_MAJOR}_${LIBCUDNN_VERSION}_amd64.deb" \ 195 "libnccl-dev_${LIBNCCL_VERSION}_amd64.deb" \ 196 "libnccl2_${LIBNCCL_VERSION}_amd64.deb" \ 197 ) 198elif [[ $VARIANT == cu100* ]]; then 199 cuda_files=( \ 200 "cuda-core-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 201 "cuda-cublas-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ 202 "cuda-cublas-dev-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ 203 "cuda-cudart-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ 204 "cuda-cudart-dev-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ 205 "cuda-curand-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 206 "cuda-curand-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 207 "cuda-cufft-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 208 "cuda-cufft-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 209 "cuda-nvrtc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 210 "cuda-nvrtc-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 211 "cuda-cusolver-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 212 "cuda-cusolver-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 213 "cuda-misc-headers-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 214 "cuda-nvcc-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ 215 "cuda-nvtx-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ 216 "libcuda1-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ 217 "nvidia-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ 218 ) 219 ml_files=( \ 220 "libcudnn${LIBCUDNN_MAJOR}-dev_${LIBCUDNN_VERSION}_amd64.deb" \ 221 "libcudnn${LIBCUDNN_MAJOR}_${LIBCUDNN_VERSION}_amd64.deb" \ 222 "libnccl-dev_${LIBNCCL_VERSION}_amd64.deb" \ 223 "libnccl2_${LIBNCCL_VERSION}_amd64.deb" \ 224 ) 225fi 226 227 228if [[ ! -d $DEPS_PATH/usr/local/cuda-${CUDA_MAJOR_VERSION} ]]; then 229 prefix=$DEPS_PATH 230 231 for item in ${cuda_files[*]} 232 do 233 echo "Installing $item" 234 curl -sL "http://developer.download.nvidia.com/compute/cuda/repos/${os_id}/x86_64/${item}" -o package.deb 235 dpkg -X package.deb ${prefix} 236 rm package.deb 237 done 238 for item in ${ml_files[*]} 239 do 240 echo "Installing $item" 241 if [[ $item == libnccl* ]] && [[ $VARIANT == cu112* ]] ; then 242 echo "variant ${VARIANT} and installing ${item}" 243 curl -sL "http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/${item}" -o package.deb 244 else 245 curl -sL "http://developer.download.nvidia.com/compute/machine-learning/repos/${os_id}/x86_64/${item}" -o package.deb 246 fi 247 dpkg -X package.deb ${prefix} 248 rm package.deb 249 done 250 251 mkdir -p ${prefix}/include ${prefix}/lib ${prefix}/usr/lib/x86_64-linux-gnu 252 if [[ $LIBCUDNN_MAJOR == 8 ]]; then 253 for h in ${prefix}/usr/include/x86_64-linux-gnu/cudnn_*_v8.h; do 254 newfile=$(basename $h | sed 's/_v8//') 255 cp $h ${prefix}/include/$newfile 256 done 257 fi 258 cp -f ${prefix}/usr/include/x86_64-linux-gnu/cudnn_v${LIBCUDNN_MAJOR}.h ${prefix}/include/cudnn.h 259 ln -sf ${prefix}/usr/lib/x86_64-linux-gnu/libcudnn.so.${LIBCUDNN_MAJOR} ${prefix}/lib/libcudnn.so 260 cp -f ${prefix}/usr/include/nccl.h ${prefix}/include/nccl.h 261fi 262 263