diff options
author | Asim Shankar <ashankar@google.com> | 2018-01-04 10:40:00 -0800 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2018-01-04 10:44:15 -0800 |
commit | 68e9a8c67b915b3ee49ba8575f541039276bebb0 (patch) | |
tree | cfecaccdcf32d13b5f04b2c959c9b5715bfbb31e /tensorflow/java/maven | |
parent | 6f831a2bfb438e3342c0a1099afa89a4da6d63b2 (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/.gitignore | 3 | ||||
-rw-r--r-- | tensorflow/java/maven/README.md | 18 | ||||
-rw-r--r-- | tensorflow/java/maven/libtensorflow/pom.xml | 2 | ||||
-rw-r--r-- | tensorflow/java/maven/libtensorflow_jni/pom.xml | 2 | ||||
-rw-r--r-- | tensorflow/java/maven/libtensorflow_jni_gpu/pom.xml | 15 | ||||
-rw-r--r-- | tensorflow/java/maven/pom.xml | 3 | ||||
-rw-r--r-- | tensorflow/java/maven/proto/pom.xml | 2 | ||||
-rw-r--r-- | tensorflow/java/maven/run_inside_container.sh | 23 | ||||
-rw-r--r-- | tensorflow/java/maven/tensorflow/pom.xml | 2 |
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> |