aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/java/maven
diff options
context:
space:
mode:
authorGravatar Asim Shankar <ashankar@google.com>2018-01-04 10:40:00 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-01-04 10:44:15 -0800
commit68e9a8c67b915b3ee49ba8575f541039276bebb0 (patch)
treecfecaccdcf32d13b5f04b2c959c9b5715bfbb31e /tensorflow/java/maven
parent6f831a2bfb438e3342c0a1099afa89a4da6d63b2 (diff)
Java: Package GPU native libraries in Maven.
And update version to 1.5.0-rc0. Starting with 1.5.0-rc0, it will be possible to use GPUs from TensorFlow Java programs by adding the following to the application's pom.xml: <dependency> <groupId>org.tensorflow</groupId> <artifactId>libtensorflow</artifactId> <version>1.5.0-rc0</version> </dependency> <dependency> <groupId>org.tensorflow</groupId> <artifactId>libtensorflow_jni_gpu</artifactId> <version>1.5.0-rc0</version> </dependency> Updates #12909 PiperOrigin-RevId: 180816468
Diffstat (limited to 'tensorflow/java/maven')
-rw-r--r--tensorflow/java/maven/.gitignore3
-rw-r--r--tensorflow/java/maven/README.md18
-rw-r--r--tensorflow/java/maven/libtensorflow/pom.xml2
-rw-r--r--tensorflow/java/maven/libtensorflow_jni/pom.xml2
-rw-r--r--tensorflow/java/maven/libtensorflow_jni_gpu/pom.xml15
-rw-r--r--tensorflow/java/maven/pom.xml3
-rw-r--r--tensorflow/java/maven/proto/pom.xml2
-rw-r--r--tensorflow/java/maven/run_inside_container.sh23
-rw-r--r--tensorflow/java/maven/tensorflow/pom.xml2
9 files changed, 58 insertions, 12 deletions
diff --git a/tensorflow/java/maven/.gitignore b/tensorflow/java/maven/.gitignore
index 0e11e83a0c..ff080515d5 100644
--- a/tensorflow/java/maven/.gitignore
+++ b/tensorflow/java/maven/.gitignore
@@ -5,7 +5,10 @@ libtensorflow/src
libtensorflow/target
libtensorflow_jni/src
libtensorflow_jni/target
+libtensorflow_jni_gpu/src
+libtensorflow_jni_gpu/target
tensorflow/src
tensorflow/target
proto/src
proto/target
+pom.xml.versionsBackup
diff --git a/tensorflow/java/maven/README.md b/tensorflow/java/maven/README.md
index 6227775361..c7e8f03806 100644
--- a/tensorflow/java/maven/README.md
+++ b/tensorflow/java/maven/README.md
@@ -22,11 +22,12 @@ Hence, the process for building and uploading release artifacts is not a single
## Artifact Structure
-There are six artifacts and thus `pom.xml`s involved in this release:
+There are seven artifacts and thus `pom.xml`s involved in this release:
1. `tensorflow`: The single dependency for projects requiring TensorFlow for
- Java. This convenience package depends on the two below, and is the one that
- should typically be used in other programs.
+ Java. This convenience package depends on `libtensorflow` and
+ `libtensorflow_jni`. Typically, this is the single dependency that should
+ be used by client programs (unless GPU support is required).
2. `libtensorflow`: Java-only code for the [TensorFlow Java API](https://www.tensorflow.org/api_docs/java/reference/org/tensorflow/package-summary).
The `.jar` itself has no native code, but requires the native code be either
@@ -36,15 +37,20 @@ There are six artifacts and thus `pom.xml`s involved in this release:
3. `libtensorflow_jni`: The native libraries required by `libtensorflow`.
Native code for all supported platforms is packaged into a single `.jar`.
-4. `proto`: Generated Java code for TensorFlow protocol buffers
+4. `libtensorflow_jni_gpu`: The native libraries required by `libtensorflow`
+ with GPU (CUDA) support enabled. Programs requiring GPU-enabled TensorFlow
+ should add a dependency on `libtensorflow` and `libtensorflow_jni_gpu`.
+ As of January 2018, this artifact is *Linux only*.
+
+5. `proto`: Generated Java code for TensorFlow protocol buffers
(e.g., `MetaGraphDef`, `ConfigProto` etc.)
-5. `tensorflow-android`: A package geared towards
+6. `tensorflow-android`: A package geared towards
supporting [TensorFlow on Android](../../contrib/android/README.md), and is
a self-contained Android AAR library containing all necessary native and
Java code.
-6. [`parentpom`](https://maven.apache.org/pom/index.html): Common settings
+7. [`parentpom`](https://maven.apache.org/pom/index.html): Common settings
shared by all of the above.
diff --git a/tensorflow/java/maven/libtensorflow/pom.xml b/tensorflow/java/maven/libtensorflow/pom.xml
index d365c39ef4..97bdb1e21e 100644
--- a/tensorflow/java/maven/libtensorflow/pom.xml
+++ b/tensorflow/java/maven/libtensorflow/pom.xml
@@ -6,7 +6,7 @@
<parent>
<groupId>org.tensorflow</groupId>
<artifactId>parentpom</artifactId>
- <version>1.4.0</version>
+ <version>1.5.0-rc0</version>
<relativePath>../</relativePath>
</parent>
<artifactId>libtensorflow</artifactId>
diff --git a/tensorflow/java/maven/libtensorflow_jni/pom.xml b/tensorflow/java/maven/libtensorflow_jni/pom.xml
index 0111fc62a4..d1d0b6fdf3 100644
--- a/tensorflow/java/maven/libtensorflow_jni/pom.xml
+++ b/tensorflow/java/maven/libtensorflow_jni/pom.xml
@@ -6,7 +6,7 @@
<parent>
<groupId>org.tensorflow</groupId>
<artifactId>parentpom</artifactId>
- <version>1.4.0</version>
+ <version>1.5.0-rc0</version>
<relativePath>../</relativePath>
</parent>
<artifactId>libtensorflow_jni</artifactId>
diff --git a/tensorflow/java/maven/libtensorflow_jni_gpu/pom.xml b/tensorflow/java/maven/libtensorflow_jni_gpu/pom.xml
new file mode 100644
index 0000000000..98c63f3452
--- /dev/null
+++ b/tensorflow/java/maven/libtensorflow_jni_gpu/pom.xml
@@ -0,0 +1,15 @@
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+ <description>Platform-dependent native code with GPU (CUDA) support for the TensorFlow Java library.</description>
+ <parent>
+ <groupId>org.tensorflow</groupId>
+ <artifactId>parentpom</artifactId>
+ <version>1.5.0-rc0</version>
+ <relativePath>../</relativePath>
+ </parent>
+ <artifactId>libtensorflow_jni_gpu</artifactId>
+ <packaging>jar</packaging>
+</project>
+
diff --git a/tensorflow/java/maven/pom.xml b/tensorflow/java/maven/pom.xml
index 06042216b4..d9b0ca67e0 100644
--- a/tensorflow/java/maven/pom.xml
+++ b/tensorflow/java/maven/pom.xml
@@ -6,7 +6,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.tensorflow</groupId>
<artifactId>parentpom</artifactId>
- <version>1.4.0</version>
+ <version>1.5.0-rc0</version>
<packaging>pom</packaging>
<url>https://www.tensorflow.org</url>
@@ -29,6 +29,7 @@
<modules>
<module>libtensorflow</module>
<module>libtensorflow_jni</module>
+ <module>libtensorflow_jni_gpu</module>
<module>tensorflow</module>
<module>proto</module>
</modules>
diff --git a/tensorflow/java/maven/proto/pom.xml b/tensorflow/java/maven/proto/pom.xml
index 2c9d76b563..fa9217c3e2 100644
--- a/tensorflow/java/maven/proto/pom.xml
+++ b/tensorflow/java/maven/proto/pom.xml
@@ -6,7 +6,7 @@
<parent>
<groupId>org.tensorflow</groupId>
<artifactId>parentpom</artifactId>
- <version>1.4.0</version>
+ <version>1.5.0-rc0</version>
<relativePath>../</relativePath>
</parent>
<artifactId>proto</artifactId>
diff --git a/tensorflow/java/maven/run_inside_container.sh b/tensorflow/java/maven/run_inside_container.sh
index a2ce097195..6136ccfdfb 100644
--- a/tensorflow/java/maven/run_inside_container.sh
+++ b/tensorflow/java/maven/run_inside_container.sh
@@ -44,7 +44,7 @@ clean() {
# (though if run inside a clean docker container, there won't be any dirty
# artifacts lying around)
mvn -q clean
- rm -rf libtensorflow_jni/src libtensorflow_jni/target libtensorflow/src libtensorflow/target tensorflow-android/target
+ rm -rf libtensorflow_jni/src libtensorflow_jni/target libtensorflow_jni_gpu/src libtensorflow_jni_gpu/target libtensorflow/src libtensorflow/target tensorflow-android/target
}
update_version_in_pom() {
@@ -119,6 +119,26 @@ download_libtensorflow_jni() {
cd "${DIR}"
}
+download_libtensorflow_jni_gpu() {
+ NATIVE_DIR="${DIR}/libtensorflow_jni_gpu/src/main/resources/org/tensorflow/native"
+ mkdir -p "${NATIVE_DIR}"
+ cd "${NATIVE_DIR}"
+
+ mkdir linux-x86_64
+
+ if [[ "${IS_SNAPSHOT}" == "true" ]]; then
+ # Nightly builds from http://ci.tensorflow.org/view/Nightly/job/nightly-libtensorflow/
+ # and http://ci.tensorflow.org/view/Nightly/job/nightly-libtensorflow-windows/
+ curl -L "http://ci.tensorflow.org/view/Nightly/job/nightly-libtensorflow/TYPE=gpu-linux/lastSuccessfulBuild/artifact/lib_package/libtensorflow_jni-gpu-linux-x86_64.tar.gz" | tar -xvz -C linux-x86_64
+ else
+ curl -L "${RELEASE_URL_PREFIX}/libtensorflow_jni-gpu-linux-x86_64-${TF_VERSION}.tar.gz" | tar -xvz -C linux-x86_64
+ fi
+
+ # Updated timestamps seem to be required to get Maven to pick up the file.
+ touch linux-x86_64/*
+ cd "${DIR}"
+}
+
# Ideally, the .jar for generated Java code for TensorFlow protocol buffer files
# would have been produced by bazel rules. However, protocol buffer library
# support in bazel is in flux. Once
@@ -225,6 +245,7 @@ clean
update_version_in_pom
download_libtensorflow
download_libtensorflow_jni
+download_libtensorflow_jni_gpu
update_tensorflow_android
generate_java_protos
# Build the release artifacts
diff --git a/tensorflow/java/maven/tensorflow/pom.xml b/tensorflow/java/maven/tensorflow/pom.xml
index 474a9adb9a..18c86420f4 100644
--- a/tensorflow/java/maven/tensorflow/pom.xml
+++ b/tensorflow/java/maven/tensorflow/pom.xml
@@ -6,7 +6,7 @@
<parent>
<groupId>org.tensorflow</groupId>
<artifactId>parentpom</artifactId>
- <version>1.4.0</version>
+ <version>1.5.0-rc0</version>
<relativePath>../</relativePath>
</parent>
<artifactId>tensorflow</artifactId>