Cupy安装
安装docker及nvidia-docker
在Ubuntu上安装Docker并使得Docker支持GPU
安装Cupy
在宿主机上安装GPU驱动
- 查找合适的Nvidia驱动器版本并安装
sudo ubuntu-drivers devices sudo ubuntu-drivers autoinstall
在Docker内需且仅需安装cuda
- 查看最大支持的cuda版本
nvidia-smi
- 选择指定版本的cuda,安装类型选择runfile(local)
wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
- 安装cuda,选择仅安装cuda-toolkit,并配置环境变量
sh cuda_10.1.243_418.87.00_linux.run echo "export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CPUTI/lib64" >> ~/.bashrc echo "export CUDA_HOME=/usr/local/cuda/bin" >> ~/.bashrc echo "export PATH=$PATH:$LD_LIBRARY_PATH:$CUDA_HOME" >> ~/.bashrc source ~/.bashrc
- 若报错
Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.
,则添加--override
参数或安装cuda对应版本的gcc- 添加
--override
参数sh cuda_10.1.243_418.87.00_linux.run --override
- 查看cuda对应的Versioned Online Documentation,安装合适版本的gcc
cp /etc/apt/sources.list /etc/apt/sources.list.bak echo "deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse" > /etc/apt/sources.list echo "deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list echo "deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list echo "deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list apt update | grep NO_PUBKEY gpg --keyserver keyserver.ubuntu.com --recv-keys $key gpg --export --armor $key | apt-key add - apt update apt install gcc-7 -y apt install g++-7 -y apt upgrade -y apt autoremove update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 90 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 90 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 50 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 50 update-alternatives --config gcc
- 添加
- 若报错
在Docker内安装cupy
-
根据cuda版本选择对应版本的cupy
pip install cupy-cuda100
-
测试cupy
python import cupy as cp import numpy as np data_np = np.arange(100) data_cp = cp.asarray(data_np)
cupy案例
- 矩阵乘法
import time import numpy as np import cupy as cp def time_of_numpy_to_cupy_to_numpy(data_size): data_np = np.ones((data_size,data_size), dtype=float) time_start = time.perf_counter() data_cp = cp.asarray(data_np) time_end = time.perf_counter() print('cp np_to_cp duration {}ms'.format((time_end-time_start)*1000)) time_start = time.perf_counter() data_cp = cp.matmul(data_cp, data_cp) time_end = time.perf_counter() print('cp operate duration {}ms'.format((time_end-time_start)*1000)) time_start = time.perf_counter() data_np = np.matmul(data_np, data_np) time_end = time.perf_counter() print('np operate duration {}ms'.format((time_end-time_start)*1000)) time_start = time.perf_counter() data_np = cp.asnumpy(data_cp) time_end = time.perf_counter() print('cp np_to_cp duration {}ms'.format((time_end-time_start)*1000)) if __name__ == '__main__': data_size = 10000 time_of_numpy_to_cupy_to_numpy(data_size) time_of_numpy_to_pytorch_to_numpy(data_size)