在本地从主干构建

注意:大多数用户应该使用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是目前最快的。但是,在实际安装之前,它需要一些“开销”。

  1. 英特尔网站申请一个许可
  2. 通过英特尔网站执行几步之后,你将收到下载链接。
  3. 下载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_PATHtrue,所以所有vcvars64.bat设置的变量都传递到mingw shell。

  1. 在正常的cmd.exe命令提示符内,运行C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\vcvars64.bat
  2. 在理面运行 c:\msys64\mingw64_shell.bat
  3. 切换到 libnd4j 目录
  4. ./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

运行测试需要一段时间。要运行一个单独的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,但是事情有点棘手。请另外按照下面的说明进行操作。

  1. 确保这些文件例如 /lib64/libopenblas.so.0 和 /lib64/libblas.so.3 都不可用 (或出现在Windows的PATH参数之后), 或者他们将被LBND4J通过他们的绝对路径加载,在其他事情之前。
  2. /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
  1. 最后,将/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栈中构建每一块。每个软件块的过程基本上是:

  1. Git clone
  2. Build
  3. 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" == "" ]; thenbash buildmultiplescalaversions.sh clean install -DskipTests -Dmaven.javadoc.skip=true
elsemvn 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上获取帮助。

翻译:风一样的男子

有任何问题请联系微信

image

如果您觉得我的文章给了您帮助,请为我买一杯饮料吧!以下是我的支付宝,意思一下我将非常感激!

DL4J中文文档/开始/从源码构建相关推荐

  1. DL4J中文文档/开始/速查表

    快速检索 DL4J(和相关项目)有很多功能.此篇的目标是总结这个功能,以便用户知道存在什么功能,以及在哪里可以找到更多信息. 内容 层 前馈层 输出层 卷积层 循环层 无监督层 其它层 图顶点 输入预 ...

  2. DL4J中文文档/分布式深度学习/操作指南

    Spark上的DL4J:操作指南 此页面包含许多用于常见分布式训练任务的操作指南.注意,对于构建数据管道的指南,请参见这里. 在阅读这些指南之前,请确保你已经阅读了有关DL4J spark训练的介绍指 ...

  3. DL4J中文文档/模型/顶点

    顶点是什么? 在Eclipse DL4J中,顶点是在计算图中充当节点的一种层.它可以接受多个输入,提供多个输出,并且可以帮助构建流行的网络,如InceptionV4. 可用的类 L2Normalize ...

  4. DL4J中文文档/语言处理/Word2Vec

    Word2Vec, Doc2vec & GloVe: 用于自然语言处理的神经词嵌入 内容 介绍 神经词嵌入 有趣的Word2Vec结果 给我代码 Word2Vec 剖析 安装,加载与训练 代码 ...

  5. DL4J中文文档/开始/Eclipse DL4J示例之旅

    DL4J示例调研 DL4J的Github仓库有很多示例可以涵盖它的功能.快速入门向你展示了如何设置Intellij并克隆仓库.本页提供这些例子中的一些概述. DataVec 示例 大多数示例都使用Da ...

  6. DL4J中文文档/调优与训练/可视化

    内容 用DL4J UI可视化网络训练 DL4J UI:概述 DL4J UI:模型 DL4J UI与Spark训练 使用 DL4J UI调整你的网络 TSNE与Word2Vec 修复UI问题:" ...

  7. DL4J中文文档/ND4J/概述

    本用户指南旨在解释(并提供示例)ND4J中的主要功能. 简介 NDArrays:它们在内存中是如何存储的? 视图:当两个或更多NDArrays引用相同的数据 创建NDArrays 0,1和标量值初始化 ...

  8. MoviePy - 中文文档4-MoviePy实战案例-重新构建15世纪舞蹈视频

    回到目录 重新构建15世纪舞蹈视频 # -*- coding: utf-8 -*-""" Result: https://www.youtube.com/watch?v= ...

  9. golang中文文档_【译】Go 语言源码贡献官方指导文档

    以前给 Go 语言项目源码提交过一些 commits,期间阅读他们的官方指导文档的时候觉得这篇指导文档可以作为绝佳的关于大型软件项目的规范管理的参考,因为最近又提交了几个 commits,就又把这篇文 ...

最新文章

  1. 吴恩达:大数据终将帮助机器拥有自主智慧
  2. 拿了年终奖后,发现自己又拖后腿了?对不起,可能事实并没有那么糟糕...
  3. php中for循环流程图,PHP for循环
  4. 前端工程师的迷茫:不知道我这种前端是不是被淘汰了?
  5. 数据结构笔记(十二)-- 定长顺序结构的实现
  6. 虚拟机和主机之间建立虚拟磁盘
  7. win7旗舰版梦幻桌面高清视频下载
  8. 【雨滴桌面】简洁桌面天气皮肤YcWea5.5,直接通过HTML文档获取天气数据,鼠标移入显示近三天天气,鼠标移出隐藏
  9. Kali渗透Windows Server 2003
  10. 汤普森采样(Thompson sampling)
  11. Unity内置Shader解读1——Bumped Diffuse
  12. 基于简单MLP模型的加州房价预测
  13. 关于阿里巴巴编码规范(Java)认证
  14. 51单片机利用STC-ISP下载软件时串口打开失败怎么办?
  15. Chrome 浏览器书签功能很强大
  16. ArcGIS 10.2.2支持无损CityGML格式进行3D城市建模
  17. 学好 Nginx ,走遍天下都不怕
  18. X-Plane模拟器数据面板介绍以及飞行数据采集
  19. 安全合规/GDPR--21--我们是如何开展PTA、PIA、DPIA风险评估的
  20. 华大半导体HC32F4A0系列ARM芯片EXMC并口通信时序的FPGA实现

热门文章

  1. 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 /返回这三个数的和。
  2. 求解函数最值的几种算法,梯度下降法python实现
  3. 学习记录 --【零基础CSS学习】03.ID选择器和类选择器
  4. Light-sleep 模式下的电流功耗测试及特性(使用 Wi-Fi)
  5. 社会生活中的著名法则(一)
  6. 一文带你了解什么是CDN
  7. 2020-11-20
  8. 玩转Qml(12)-再谈动态国际化
  9. 近一个月总结(鸡汤多于技术)
  10. 用java编写球体的体积,编写一个程序,提示用户输入球体的半径并打印其体积...