在本地从主干构建
注意:大多数用户应该使用Maven Central上的快速入门指南,而不是从源代码构建。
除非你有一个非常好的从源码构建的理由(例如开发新的特性——不包括自定义层、自定义激活函数、自定义丢失函数等——所有这些都可以在不直接修改DL4J的情况下添加),否则不应该从源码构建。从源码上构建可能相当复杂,在很多情况下都没有好处。
对于那些喜欢使用最新版本的Deeplearning4j或新建分支并构建自己的版本的开发人员和工程师,这些说明将指导你构建和安装Deeplearning4j。首选安装目的地是你本地机器的Maven仓库。如果不使用主分支,可以根据需要修改这些步骤(即:切换GIT分支并修改build-dl4j-stack.sh脚本)。
本地构建需要构建完整的Deeplearning4j栈,包括:
- libnd4j
- nd4j
- datavec
- deeplearning4j
请注意,Deeplearning4j被设计用于大多数平台(Windows、OS X和Linux),并且还包括多种“风格”,取决于你选择使用的计算架构。这包括CPU(OpenBLAS,MKL,ATLAS)和GPU(CUDA)。DL4J堆栈还支持X86和PowerPC架构。
先决条件
在尝试构建和安装DL4J栈之前,本地机器将需要设置一些基本的软件和环境变量。根据你的平台和操作系统的版本,在使它们工作时指令可能有所不同。该软件包括:
- git
- cmake (3.2或更高版本)
- OpenMP
- gcc (4.9 或更高版本)
- maven (3.3 或更高版本)
架构专用软件包括:
CPU 选项:
- Intel MKL
- OpenBLAS
- ATLAS
GPU 选项:
- CUDA
IDE-指定要求:
- IntelliJ Lombok plugin
DL4J 测试依赖:
- dl4j-test-resources
安装必备工具
Linux
Ubuntu假设你使用Ubuntu作为你的Linux偏好,并且作为非root用户运行,请按照以下步骤安装必备软件:
sudo apt-get purge maven maven2 maven3
sudo add-apt-repository ppa:natecarlson/maven3
sudo apt-get update
sudo apt-get install maven build-essentials cmake libgomp1
OS X
Homebrew是安装必备软件的公认方法。假设你在本地安装了Homebrew,请按照以下步骤安装必要的工具。
首先,在使用Homebrew之前,我们需要确保安装一个最新版本的XCODE(它被用作主编译器):
xcode-select --install
最后, 安装必备工具:
brew update
brew install maven gcc5
注意:你不能使用CLANG。你也不使能用GCC的新版本。如果你有一个更新版本的GCC,请用这个这个链接切换版本。
Windows
libnd4j 依赖 Unix 工具包来编译。 所以为了编译它你需要安装Msys2 。
按他们的说明安装了MyS2之后,你将不得不安装一些额外的开发包。启动msys2 shell并设置DEV环境:
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-extra-cmake-modules make pkg-config grep sed gzip tar mingw64/mingw-w64-x86_64-openblas
这将在MyS2 shell中安装所需使用的依赖项。
你还需要设置PATH环境变量来包括C:\msys64\mingw64\bin
(或者你决定安装msys2的任何位置)。如果打开了IntelliJ(或其他IDE),则必须在此更改对通过它们启动的应用程序生效之前重新启动它。如果不这样做,你可能会看到一个“Can’t find dependent libraries”的错误。
安装必备架构
一旦安装了必备工具,现在就可以为平台安装所需的架构。
英特尔 MKL
在所有现有的CPU架构中,英特尔MKL是目前最快的。但是,在实际安装之前,它需要一些“开销”。
- 英特尔网站申请一个许可
- 通过英特尔网站执行几步之后,你将收到下载链接。
- 下载MKL并按安装向导进行安装
OpenBLAS
Linux
**Ubuntu **假设你正在使用Ubuntu,你可以通过如下安装 OpenBLAS :
sudo apt-get install libopenblas-dev
你还需要确保/opt/OpenBLAS/lib
(或OpenBLAS的任何其他主目录)在你的路径上。为了让OpenBLAS与Apache Spark一起工作,你还需要做如下操作:
sudo cp libopenblas.so liblapack.so.3
sudo cp libopenblas.so libblas.so.3
CentOS 用root用户在终端(或ssh会话)输入如下:
yum groupinstall 'Development Tools'
之后,你 应该在终端上看到很多活动和安装。为了验证你有,例如,GCC,请输入此行:
gcc --version
去这里获得更多完整说明。
OS X
你可以在OS X用Homebrew安装OpenBLAS:
brew install homebrew/science/openblas
Windows
msys2 的
OpenBLAS包已经可用,你可以用pacman命令安装。
ATLAS
Linux
Ubuntu 在Ubuntu上有一个ATLAS的apt包可以用:
sudo apt-get install libatlas-base-dev libatlas-dev
CentOS 你可以在 CentOS 上按如下按装ATLAS:
sudo yum install atlas-devel
OS X
在OS X上安装ATLAS是一个有点复杂和漫长的过程。但是,下面的命令将适用于大多数机器:
wget --content-disposition https://sourceforge.net/projects/math-atlas/files/latest/download?source=files
tar jxf atlas*.tar.bz2
mkdir atlas (Creating a directory for ATLAS)
mv ATLAS atlas/src-3.10.1
cd atlas/src-3.10.1
wget http://www.netlib.org/lapack/lapack-3.5.0.tgz (It may be possible that the atlas download already contains this file in which case this command is not needed)
mkdir intel(Creating a build directory)
cd intel
cpufreq-selector -g performance (This command requires root access. It is recommended but not essential)
../configure --prefix=/path to the directory where you want ATLAS installed/ --shared --with-netlib-lapack-tarfile=../lapack-3.5.0.tgz
make
make check
make ptcheck
make time
make install
CUDA
Linux & OS X
在这里可以找到安装GPU架构(如CUDA)的详细说明。
Windows
CUDA后端在构建之前有一些附加的要求:
- CUDA SDK
- Visual Studio 2012 or 2013 (Please note请注意: CUDA 7.5及以下版本不支持Visual Studio 2015)
为了构建CUDA后端,你必须首先调用vcvars64.bat
来设置更多的环境变量。但首先,设置系统环境变量 SET_FULL_PATH
为true
,所以所有vcvars64.bat设置
的变量都传递到mingw shell。
- 在正常的cmd.exe命令提示符内,运行
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\vcvars64.bat
- 在理面运行
c:\msys64\mingw64_shell.bat
- 切换到 libnd4j 目录
./buildnativeoperations.sh -c cuda
这将构建CUDA nd4j.dll.
IDE 要求
如果你是通过一个IDE如IntelliJ构建Deeplearning4j,你将需要安装一些插件,以确保你的IDE使得代码高亮适当。你需要为Lombok安装一个插件:
- IntelliJ Lombok 插件: https://plugins.jetbrains.com/plugin/6317-lombok-plugin
- Eclipse Lombok 插件: Follow instructions at https://projectlombok.org/download.html
如果你想在ScalNet、Scala API或某些模块(如DL4J UI)上工作,则需要确保IDE安装了Scala支持,并且该支持可用。
测试
Deeplearning4j使用一个单独的存储库,包含测试所需的所有资源。这是为了保持中央DL4J存储库轻量级,避免Git历史中的大blobs。为了运行测试,你需要从https://github.com/deeplearning4j/dl4j-test-resources(约10GB)安装测试资源。如果你不关心历史,只做一个浅克隆。
git clone --depth 1 --branch master https://github.com/deeplearning4j/dl4j-test-resources
cd dl4j-test-resources
mvn install
测试将只在testresources
和后端profile(例如,test-nd4j-native)被选择时运行。
mvn clean test -P testresources,test-nd4j-native
[图片上传中...(image-13982b-1540534628348-8)]
运行测试需要一段时间。要运行一个单独的Maven模块的测试,可以添加一个模块约束,用-pl deeplearning4j-core(
详情见此处)。
安装DL4J栈
OS X & Linux
检查环境
在运行DL4J栈构建脚本之前,必须确保在运行构建之前定义了某些环境变量。下面将根据你的架构进行概述。
LIBND4J_HOME
你将需要知道运行DL4J构建脚本的目录的确切路径(鼓励你使用干净的空目录)。否则,你的构建将失败。一旦确定了这条路径,就将/libnd4j
添加到该路径的末端,并将其导出到本地环境中。这看起来像:
export LIBND4J_HOME=/home/user/directory/libnd4j
CPU 架构 w/ MKL
你可以在构建时连接MKL或是在运行时连接一个二进制文件,初始化时连接另外的BLAS实现,例如OpenBLAS。要根据MKL进行构建,只需将包含libmkl_rt.so
(或Windows上的mkl_rt.dll
)的路径(例如/path/to/intel64/lib/
)添加到Linux上的LD_LIBRARY_PATH
环境变量(或Windows上的PATH)中,然后像以前一样构建。在Linux上,为了确保它使用OpenMP的正确版本,我们也可能需要设置这些环境变量:
export MKL_THREADING_LAYER=GNU
export LD_PRELOAD=/lib64/libgomp.so.1
当libnd4j无法重建时,我们可以在事实之后使用MKL库,并在运行时加载它们,而不是OpenBLAS,但是事情有点棘手。请另外按照下面的说明进行操作。
- 确保这些文件例如
/lib64/libopenblas.so.0
和/lib64/libblas.so.3
都不可用 (或出现在Windows的PATH参数之后
), 或者他们将被LBND4J通过他们的绝对路径加载,在其他事情之前。 - 在
/path/to/intel64/lib/
内部,创建libmkl_rt.so
(或Windows上的mkl_rt.dll
)到libnd4j需要加载的名称的符号链接或副本,例如:
ln -s libmkl_rt.so libopenblas.so.0
ln -s libmkl_rt.so libblas.so.3
copy mkl_rt.dll libopenblas.dll
copy mkl_rt.dll libblas3.dll
- 最后,将
/path/to/intel64/lib/
添加到LD_LIBRARY_PATH
环境变量(或者在Windows上的PATH
路径),并像往常一样运行Java应用程序。
构建脚本
你可以从deeplearning4j仓库使用build-dl4j-stack.sh 脚本从源代码构建整个deeplearning4j栈:libndj4,ndj4,datavec,deeplearning4j。它克隆dl4j栈,构建每个仓库,并把它们安装到本地Maven。这个脚本在Linux和OS X平台上都可以运行。
好了,现在仔细阅读下面的章节。
在CPU架构中使用下面的构建脚本:
./build-dl4j-stack.sh
如果你在OSX上,请务必阅读这个 (确保 gcc 5.x 已安装,你正在使用的不是 clang): https://github.com/deeplearning4j/deeplearning4j/issues/2668
如果你使用的是GPU后端,则使用此替代:
./build-dl4j-stack.sh -c cuda
你可以通过使用如cc
标志来加速你的CUDA构建,这个标志在libndj4 README 有解释。
对于 Scala 用户, 你可以传递你的二进制版本号来与Spark兼容:
./build-dl4j-stack.sh -c cuda --scalav 2.11
生成脚本将所有选项和标志传递给 libnd4j ./buildnativeoperations.sh
脚本。用于这些脚本的所有标志都可以通过build-dl4j-stack.sh
传递。
手动构建
如果你愿意,你可以手动在DL4J栈中构建每一块。每个软件块的过程基本上是:
- Git clone
- Build
- Install
整个过程如下面的命令所示,但libnd4j’s ./buildnativeoperations.sh
接受基于你正在构建的后端的参数。你需要按照他们给出的顺序来执行这些指令。如果你不这样做,你的执行就会出错误。下面的特定于GPU的指令已经被注释掉了,但是在构建GPU后端时,应该取代特定于CPU的命令。
# removes any existing repositories to ensure a clean build
rm -rf libnd4j
rm -rf nd4j
rm -rf datavec
rm -rf deeplearning4j
# compile libnd4j
git clone https://github.com/deeplearning4j/libnd4j.git
cd libnd4j
./buildnativeoperations.sh
# and/or when using GPU
# ./buildnativeoperations.sh -c cuda -cc INSERT_YOUR_DEVICE_ARCH_HERE
# i.e. if you have GTX 1070 device, use -cc 61
export LIBND4J_HOME=`pwd`
cd ..
# build and install nd4j to maven locally
git clone https://github.com/deeplearning4j/nd4j.git
cd nd4j
# cross-build across Scala versions (recommended)
bash buildmultiplescalaversions.sh clean install -DskipTests -Dmaven.javadoc.skip=true -pl '!:nd4j-cuda-9.0,!:nd4j-cuda-9.0-platform,!:nd4j-tests'
# or build for a single scala version
# mvn clean install -DskipTests -Dmaven.javadoc.skip=true -pl '!:nd4j-cuda-9.0,!:nd4j-cuda-9.0-platform,!:nd4j-tests'
# or when using GPU
# mvn clean install -DskipTests -Dmaven.javadoc.skip=true -pl '!:nd4j-tests'
cd ..
# build and install datavec
git clone https://github.com/deeplearning4j/datavec.git
cd datavec
if [ "$SCALAV" == "" ]; then
bash buildmultiplescalaversions.sh clean install -DskipTests -Dmaven.javadoc.skip=true
else
mvn clean install -DskipTests -Dmaven.javadoc.skip=true -Dscala.binary.version=$SCALAV -Dscala.version=$SCALA
fi
cd ..
# build and install deeplearning4j
git clone https://github.com/deeplearning4j/deeplearning4j.git
cd deeplearning4j
# cross-build across Scala versions (recommended)
./buildmultiplescalaversions.sh clean install -DskipTests -Dmaven.javadoc.skip=true
# or build for a single scala version
# mvn clean install -DskipTests -Dmaven.javadoc.skip=true
# If you skipped CUDA you may need to add
# -pl '!./deeplearning4j-cuda/'
# to the mvn clean install command to prevent the build from looking for cuda libs
cd ..
使用本地依赖
一旦你将DL4J栈安装到本地maven存储库之后,现在可以将其引入在构建工具的依赖项中。按照Deeplearning4j的经典入门说明,在主 POM上用SNAPSHOT版本适当地替换当前使用的版本。
请注意,一些构建工具,如Gradle和SBT没有正确地引入平台特定的二进制文件。你可以按照这里的说明来设置你最喜欢的构建工具。
支持与援助
如果在本地构建时遇到问题,Deeplearning4j的Early Adopters Channel是专门用于帮助解决构建问题和其他源代码问题的通道。请在Gitter上获取帮助。
翻译:风一样的男子
如果您觉得我的文章给了您帮助,请为我买一杯饮料吧!以下是我的支付宝,意思一下我将非常感激!