CentOS 6 编译 TensorFlow for Java 以及 Maven Pom
我们的系统环境
CentOS 6.5, JDK 1.8更新yum源
$ yum update安装 Python 2.7
$ yum install python27 python27-numpy python27-python-devel python27-python-wheel升级 gcc 至 4.8.2
$ cd /opt/
$ wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
$ yum install --nogpg -y zip unzip patch libcurl-devel git devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++
$ scl enable devtoolset-2 python27 bash
$ gcc -vJDK版本
1.8(如1.8.0_73)安装bazel(编译不同版本的tensorflow,需要不同版本的bazel。这里编译tensorflow_v1.6.0,需要bazel_0.9.0)
$ cd /opt
$ wget https://github.com/bazelbuild/bazel/releases/download/0.9.0/bazel-0.9.0-dist.zip
$ unzip bazel-0.9.0-dist.zip -d bazel-0.9.0-dist
$ cd bazel-0.9.0-dist
$ ./compile.sh
$ mkdir -p ~/bin
$ cp output/bazel ~/bin/编译tensorflow
$ cd /opt
$ git clone https://github.com/tensorflow/tensorflow && cd tensorflow
$ git checkout v1.6.0
$ ./configure
配置中提示的问题,全部选择n(no)
在执行bazel build之前,
把文件/opt/tensorflow/tensorflow/tensorflow.bzl中的代码片段
def tf_cc_shared_object(
name,
srcs=[],
deps=[],
linkopts=[],
framework_so=tf_binary_additional_srcs(),
**kwargs):
修改为
def tf_cc_shared_object(
name,
srcs=[],
deps=[],
linkopts=['-lrt'],
framework_so=tf_binary_additional_srcs(),
**kwargs):
把文件/opt/tensorflow/tensorflow/java/BUILD中的代码片段
tf_cc_binary(
name = "generate_pom",
srcs = ["generate_pom.cc"],
deps = ["//tensorflow/c:c_api"],
)
修改为
tf_cc_binary(
linkopts = ["-lrt"],
name = "generate_pom",
srcs = ["generate_pom.cc"],
deps = ["//tensorflow/c:c_api"],
)
把
tf_cc_binary(
name = "java_op_gen_tool",
srcs = [
"src/gen/cc/op_gen_main.cc",
],
copts = tf_copts(),
linkopts = select({
"//tensorflow:windows": [],
"//conditions:default": ["-lm"],
}),
linkstatic = 1,
deps = [
":java_op_gen_lib",
"//tensorflow/core:framework",
"//tensorflow/core:framework_internal",
"//tensorflow/core:lib",
"//tensorflow/core:ops",
],
)
修改为
tf_cc_binary(
name = "java_op_gen_tool",
srcs = [
"src/gen/cc/op_gen_main.cc",
],
copts = tf_copts(),
linkopts = select({
"//tensorflow:windows": [],
"//conditions:default": ["-lm","-lrt"],
}),
linkstatic = 1,
deps = [
":java_op_gen_lib",
"//tensorflow/core:framework",
"//tensorflow/core:framework_internal",
"//tensorflow/core:lib",
"//tensorflow/core:ops",
],
)
如果还是报错`ndefined reference to 'clock_gettime'`, 还需要把文件/opt/tensorflow/tensorflow/tensorflow.bzl中出现`linkopts`的地方,全部添加`'-lrt'`。
$ bazel build --linkopt='-lrt' -c opt //tensorflow/java:tensorflow //tensorflow/java:libtensorflow_jni //tensorflow/java:pom
$ cd /opt/tensorflow/tensorflow/java/maven/
部署 libtensorflow
修改 /opt/tensorflow/bazel-bin/tensorflow/java/pom.xml 中的groupId, version用于deploy到自己公司的远程仓库中,并指定仓库的repositoryId(比如我的是artifactory)和url(请查看你的配置)
$ mvn deploy:deploy-file -Dfile=../../../bazel-bin/tensorflow/java/libtensorflow.jar -DpomFile=../../../bazel-bin/tensorflow/java/pom.xml -DrepositoryId= -Durl=
部署 libtensorflow_jni
修改/opt/tensorflow/tensorflow/java/maven/pom.xml和/opt/tensorflow/tensorflow/java/maven/libtensorflow_jni/pom.xml中的groupId, version,并添加自己公司的distributionManagement配置,同时只需保留libtensorflow_jni模块。
$ cd /opt/tensorflow/tensorflow/java/maven/
$ mkdir -p libtensorflow_jni/src/main/resources/org/tensorflow/native/linux-x86_64
$ cp ../../../bazel-bin/tensorflow/libtensorflow_framework.so libtensorflow_jni/src/main/resources/org/tensorflow/native/linux-x86_64/
$ cp ../../../bazel-bin/tensorflow/java/libtensorflow_jni.so libtensorflow_jni/src/main/resources/org/tensorflow/native/linux-x86_64/
$ mvn versions:set -DnewVersion="${TENSORFLOW_VERSION}-cpu-optimized"
$ mvn package -Dgpg.skip=true
$ mvn deploy -Dgpg.skip=true参考资料
附录: 编译成python 源
scl enable devtoolset-2 bash
bazel clean
./configure
bazel build --linkopt='-lrt' -c opt --copt=-msse4.1 --copt=-msse4.2 --copt=-mavx --copt=-mavx2 --copt=-mfma //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
pip install /tmp/tensorflow_pkg/tensorflow-1.6.0rc0-cp27-none-linux_x86_64.whl
CentOS 6 编译 TensorFlow for Java 以及 Maven Pom的更多相关文章
- Centos下命令行编译MapReduce代码(Java)并打包在Hadoop中执行
前提条件:搭建好Hadoop系统 新建文件夹:input 和 output hdfs dfs -mkdir /inputhdfs dfs -mkdir /output 查看文件系统 hdfs df ...
- 无IDE时编译和运行Java
最近 Java subreddit 出现了一篇”在没有IDE的情况下编译Java包” 的帖子,这个帖子抛出了这么一个问题,“是否存在一个命令可以编译一组处于同一文件夹下独立包内的java文件的方法(这 ...
- [转]无IDE时编译和运行Java
本文由 ImportNew - Grey 翻译自 dzone.欢迎加入Java小组.转载请参见文章末尾的要求. 最近 Java subreddit 出现了一篇”在没有IDE的情况下编译Java包” 的 ...
- 64位 CentOS NDK 编译 FFMPEG
64位 CentOS NDK 编译 FFMPEG 一. 参考文章: http://www.cnblogs.com/baopu/p/4733029.html http://www.c ...
- CentOS 使用yum命令安装Java SDK(openjdk)
CentOS 6.X 和 5.X 自带有OpenJDK runtime environment (openjdk).它是一个在linux上实现开源的java 平台.CentOS yum 命令 安装 ...
- 编译TensorFlow源码
编译TensorFlow源码 参考: https://www.tensorflow.org/install/install_sources https://github.com/tensorflo ...
- JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java
JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...
- IDEA中不编译src/main/java目录下的*.xml文件
使用idea构建maven项目时不编译src/main/java目录下写的mapper.xml文件,这是找到pom.xml文件,在<build>节点下添加如下代码: <!-- map ...
- YangTools从YANG生成Java类(Maven)
1.说明 ODL提供了Yang Tools工具从YANG文件生成Java类, 本文介绍使用Maven插件的方式生成, 基于yang-maven-plugin这个插件. 2.创建Maven工程 Ecli ...
随机推荐
- insmod: can't insert 'btn_drv.ko': Operation not permitted
检测内核是否以及支持 要插入的驱动,若内核支持,则需要裁减掉内核支持的驱动才能安装上自己所写的驱动程序.
- java数组、字符串拼接
1. 数组实现拼接 int[] arr ={11,22,33,44,55,66}; System.out.print("["); for (int i = 0; i <arr ...
- Medium高赞系列,如何正确的在Stack Overflow提问
在我们写程序的时候,经常会遇到各色各样的问题,在国内,小伙伴们经常去知乎.CSDN.博客园.思否.安卓巴士等地方提问并获得答案. 这些地方汇集了很多优秀的.爱分享的国内资源.小编比较自豪的一件事情就是 ...
- PHP获取PHP执行的时间
php获取PHP执行的时间 <pre> //程序运行时间 $starttime = explode(' ',microtime()); //代码区域 //程序运行时间 $endtime = ...
- linux破解密码
1.关机2.按e进入grub 3.在linux16行末尾输入 rd.break console=tty1 4.按ctrl+“X”执行. 5.输入 mount -o remount,rw /sys ...
- Linux 部署Nginx反向代理服务 使用openssl自生成证书并配置https
1.安装Nginx编译所依赖的包 正常centos中可以使用yum安装一下依赖包: yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel ...
- Ubuntu 16.04安装JDK并配置环境变量
系统版本:Ubuntu 16.04 JDK版本:jdk1.8.0_121 1.官网下载JDK文件jdk-8u121-linux-x64.tar.gz 我这里下的是最新版,其他版本也可以 2.创建一个目 ...
- nyoj 34-韩信点兵(暴力)
34-韩信点兵 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:34 submit:41 题目描述: 相传韩信才智过人,从不直接清点自己军队的人数,只 ...
- mysql初级了解
mysql是一个关系型数据库系统,可以存放若干个数据库,每个数据库中 可以存放若干张表,每张表中可以存放若干条记录 基本代码: 1.查看数据库 show databases: 2.创建数据库 ...
- django_3:url配置
浏览器url访问——url.py中正则匹配——转向对应的视图处理方法——在view.py中找到方法执行——在方法中一般会用到render渲染到.html文件——再用到.html url使用方式: 正则 ...