在学习如何编写扩展之前我们首先要部署好相关环境,包括开发环境和编译、运行环境。
开发环境各不相同,不再赘述,笔者使用的开发机为MBP,编译机和运行机为Ubuntu服务器,如果没有相关经验建议使用笔者的开发配置。
下面是在Ubuntu系统下搭建编译和运行环境,并运行官方DEMO的过程。
下载官方DEMO
使用GIT下载官方DEMO:
git clone https://github.com/pytorch/extension-cpp.git
安装 Python 依赖
C++ 程序与 Python 交互需要使用 pybind11,因此首先安装依赖
# for conda
conda install pytest pybind11
# for pip
# pip install pytest
# pip install pybind11
安装合适版本的GCC
选择版本
使用的GCC版本 < 4.9.0时,可以编译代码,但运行时会出现段错误。
使用的GCC版本 > 6.0.0时,不可以编译。其他情况均可以使用。
由于大部分人的环境为非root,因此需要手动编译。
在安装GCC之前需要先手动安装三个前置依赖,分别是 GMP、MPFR和MPC。
其中MPC依赖MPFR,MPFR依赖GMP,请按以下顺序安装并确认版本信息。
安装 GMP
从中科大下载镜像文件:
wget ftp://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.bz2
# 想要下载其他版本可以浏览 ftp://ftp.gnu.org/gnu/gmp/
解压下载的文件:
tar -xjf gmp-6.1.2.tar.bz2
设置安装目录:
cd gmp-6.1.2
./configure --prefix=/home/username/gmp/ CFLAGS=-fPIC CXXFLAGS=-fPIC
编译并安装:
make -j8
make install
安装 MPFR
从中科大下载镜像文件:
wget ftp://ftp.gnu.org/gnu/mpfr/mpfr-4.0.1.zip
# 想要下载其他版本可以浏览 ftp://ftp.gnu.org/gnu/mpfr/
解压下载的文件:
unzip mpfr-4.0.1.zip
设置安装目录:
cd mpfr-4.0.1
./configure --prefix=/home/username/gmp/mpfr/ --with-gmp=/home/username/gmp/ CFLAGS=-fPIC CXXFLAGS=-fPIC
编译并安装:
make -j8
make install
安装 MPC
从中科大下载镜像文件:
wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz
# 想要下载其他版本可以浏览 ftp://ftp.gnu.org/gnu/mpc/
解压下载的文件:
tar -zxvf mpc-1.1.0.tar.gz
设置安装目录:
cd mpc-1.1.0
./configure --prefix=/home/username/mpc/ --with-gmp=/home/username/gmp/ --with-mpfr=/home/username/gmp/mpfr/ CFLAGS=-fPIC CXXFLAGS=-fPIC
编译并安装:
make -j8
make install
配置环境变量
这里不建议使用临时环境变量,一旦忘记设置就会导致找不到相关库。我们修改 .bashrc 文件:
vim .bashrc
==== 我是文件内容 ====
export LD_LIBRARY_PATH=/home/username/gmp/lib:/home/username/mpfr/lib:/home/username/mpc/lib/:$LD_LIBRARY_PATH
# 顺便把还没安装的 gcc 也添加进来
export PATH=/home/username/gcc_compile/bin/:$PATH
==== 我是文件内容 ====
source .bashrc
# 重启 shell
安装 GCC
从中科大下载镜像文件:
wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.gz
# 想要下载其他版本可以浏览 ftp://ftp.gnu.org/gnu/gcc/
解压下载的文件:
tar -zxvf gcc-5.5.0.tar.gz
设置安装目录:
cd gcc-5.5.0
./configure --prefix=/home/username/gcc_compile --enable-threads=posix --disable-checking --disable-multilib --enable-plugin --enable-lto --enable-languages=c,c++,fortran --with-gmp=/home/username/gmp/ --with-mpfr=/home/username/mpfr/ --with-mpc=/home/username/mpc/
编译并安装:
make -j12
make install
确认安装成功:
gcc -v
编译运行CPP/CUDA
进入项目目录:
cd extension-cpp
进入CPP/CUDA目录:
cd cpp
# 如果想要编译 cuda 的话,cd cuda
编译并导入:
python setup.py install
# 如果编译过想重新编译记得删除 /build/ /dist/ 文件夹
运行测试:
cd extension-cpp
python benchmark.py cpp