从源代码构建所有DL4J库的说明。
注意:大多数用户应该使用Maven Central上的快速入门指南,而不是从源代码构建。
除非你有一个非常好的从源码构建的理由(例如开发新的特性——不包括自定义层、自定义激活函数、自定义丢失函数等——所有这些都可以在不直接修改DL4J的情况下添加),否则不应该从源码构建。从源码上构建可能相当复杂,在很多情况下都没有好处。
对于那些喜欢使用最新版本的Deeplearning4j或新建分支并构建自己的版本的开发人员和工程师,这些说明将指导你构建和安装Deeplearning4j。首选安装目的地是你本地机器的Maven仓库。如果不使用主分支,可以根据需要修改这些步骤(即:切换GIT分支并修改build-dl4j-stack.sh脚本)。
本地构建需要构建完整的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
Ubuntu假设你使用Ubuntu作为你的Linux偏好,并且作为非root用户运行,请按照以下步骤安装必备软件:
Homebrew是安装必备软件的公认方法。假设你在本地安装了Homebrew,请按照以下步骤安装必要的工具。
首先,在使用Homebrew之前,我们需要确保安装一个最新版本的XCODE(它被用作主编译器):
最后, 安装必备工具:
注意:你不能使用CLANG。你也不使能用GCC的新版本。如果你有一个更新版本的GCC,请用这个这个链接切换版本。
libnd4j 依赖 Unix 工具包来编译。 所以为了编译它你需要安装Msys2 。
按他们的说明安装了MyS2之后,你将不得不安装一些额外的开发包。启动msys2 shell并设置DEV环境:
这将在MyS2 shell中安装所需使用的依赖项。
你还需要设置PATH环境变量来包括C:\msys64\mingw64\bin
(或者你决定安装msys2的任何位置)。如果打开了IntelliJ(或其他IDE),则必须在此更改对通过它们启动的应用程序生效之前重新启动它。如果不这样做,你可能会看到一个“Can’t find dependent libraries”的错误。
一旦安装了必备工具,现在就可以为平台安装所需的架构。
在所有现有的CPU架构中,英特尔MKL是目前最快的。但是,在实际安装之前,它需要一些“开销”。
Ubuntu 假设你正在使用Ubuntu,你可以通过如下安装 OpenBLAS :
你还需要确保/opt/OpenBLAS/lib
(或OpenBLAS的任何其他主目录)在你的路径上。为了让OpenBLAS与Apache Spark一起工作,你还需要做如下操作:
CentOS 用root用户在终端(或ssh会话)输入如下:
之后,你 应该在终端上看到很多活动和安装。为了验证你有,例如,GCC,请输入此行:
去这里获得更多完整说明。
你可以在OS X用Homebrew安装OpenBLAS:
msys2 的
OpenBLAS包已经可用,你可以用pacman命令安装。
Ubuntu 在Ubuntu上有一个ATLAS的apt包可以用:
CentOS 你可以在 CentOS 上按如下按装ATLAS:
在OS X上安装ATLAS是一个有点复杂和漫长的过程。但是,下面的命令将适用于大多数机器:
在这里可以找到安装GPU架构(如CUDA)的详细说明。
CUDA后端在构建之前有一些附加的要求:
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如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)安装测试资源。如果你不关心历史,只做一个浅克隆。
测试将只在testresources
和后端profile(例如,test-nd4j-native)被选择时运行。
[图片上传中...(image-13982b-1540534628348-8)]
运行测试需要一段时间。要运行一个单独的Maven模块的测试,可以添加一个模块约束,用-pl deeplearning4j-core(
详情见此处)。
在运行DL4J栈构建脚本之前,必须确保在运行构建之前定义了某些环境变量。下面将根据你的架构进行概述。
你将需要知道运行DL4J构建脚本的目录的确切路径(鼓励你使用干净的空目录)。否则,你的构建将失败。一旦确定了这条路径,就将/libnd4j
添加到该路径的末端,并将其导出到本地环境中。这看起来像:
你可以在构建时连接MKL或是在运行时连接一个二进制文件,初始化时连接另外的BLAS实现,例如OpenBLAS。要根据MKL进行构建,只需将包含libmkl_rt.so
(或Windows上的mkl_rt.dll
)的路径(例如/path/to/intel64/lib/
)添加到Linux上的LD_LIBRARY_PATH
环境变量(或Windows上的PATH)中,然后像以前一样构建。在Linux上,为了确保它使用OpenMP的正确版本,我们也可能需要设置这些环境变量:
当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需要加载的名称的符号链接或副本,例如:
最后,将/path/to/intel64/lib/
添加到LD_LIBRARY_PATH
环境变量(或者在Windows上的PATH
路径),并像往常一样运行Java应用程序。
如果你愿意,你可以手动在DL4J栈中构建每一块。每个软件块的过程基本上是:
Git clone
Build
Install
整个过程如下面的命令所示,但libnd4j’s ./buildnativeoperations.sh
接受基于你正在构建的后端的参数。你需要按照他们给出的顺序来执行这些指令。如果你不这样做,你的执行就会出错误。下面的特定于GPU的指令已经被注释掉了,但是在构建GPU后端时,应该取代特定于CPU的命令。
一旦你将DL4J栈安装到本地maven存储库之后,现在可以将其引入在构建工具的依赖项中。按照Deeplearning4j的经典入门说明,在主 POM上用SNAPSHOT版本适当地替换当前使用的版本。
请注意,一些构建工具,如Gradle和SBT没有正确地引入平台特定的二进制文件。你可以按照这里的说明来设置你最喜欢的构建工具。
如果在本地构建时遇到问题,Deeplearning4j的Early Adopters Channel是专门用于帮助解决构建问题和其他源代码问题的通道。请在Gitter上获取帮助。