Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GPU Support for tensorflow lite #1532

Open
wants to merge 28 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
6783eb2
try build GPU version of tflite for linux x86_64
barrypitman Aug 15, 2024
90090a9
fix extension '-gpu' and not 'gpu'
barrypitman Aug 15, 2024
a770534
attach the installed artifacts
barrypitman Aug 15, 2024
5f9b5f2
trigger tflite build
barrypitman Aug 15, 2024
dac6dc9
refer to our own version of the ubuntu build which will attach artifacts
barrypitman Aug 16, 2024
ca050e8
refer to our own version of the ubuntu build which will attach artifacts
barrypitman Aug 16, 2024
7f72a1b
refer to our own version of the ubuntu build which will attach artifacts
barrypitman Aug 16, 2024
da830fc
refer to our own version of the ubuntu build which will attach artifacts
barrypitman Aug 16, 2024
b49f365
refer to our own version of the ubuntu build which will attach artifacts
barrypitman Aug 16, 2024
06608c0
trigger rebuild
barrypitman Aug 16, 2024
000b538
provide different names for artifacts
barrypitman Aug 16, 2024
b247282
try to generate GPU delegate
barrypitman Aug 16, 2024
0816ed0
try to generate GPU delegate
barrypitman Aug 16, 2024
95590cc
add missing delegate_options
barrypitman Aug 16, 2024
11023db
add other header files for gpu extension
barrypitman Aug 16, 2024
2de3669
try suggestions from https://github.com/bytedeco/javacpp-presets/issu…
barrypitman Aug 17, 2024
ff22226
remove the exclusion of android
barrypitman Aug 17, 2024
5e0d80e
define #if defined(__ANDROID__)
barrypitman Aug 17, 2024
8bc91df
copy approach from tensorflow (full)
barrypitman Aug 17, 2024
e12b7b3
don't define TfLiteGpuDelegateV2CreateAsync
barrypitman Aug 17, 2024
af595d4
skip based on linePatterns
barrypitman Aug 18, 2024
f45c2bb
Merge branch 'master' of github.com:barrypitman/javacpp-presets into …
barrypitman Aug 18, 2024
4aaa421
sync with main
barrypitman Aug 18, 2024
a0c311d
sync with main
barrypitman Aug 18, 2024
7fef1bc
gpu_invoke_loop_times
barrypitman Aug 18, 2024
c369391
cleanup
barrypitman Aug 20, 2024
13c95d5
define TfLiteGpuDelegateV2CreateAsync function for android
barrypitman Aug 20, 2024
5890823
define TfLiteGpuDelegateV2CreateAsync function for android
barrypitman Aug 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/tensorflow-lite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ jobs:
# - uses: bytedeco/javacpp-presets/.github/actions/deploy-ubuntu@actions
linux-x86_64:
runs-on: ubuntu-20.04
strategy:
matrix:
ext: ["", -gpu]
steps:
- uses: bytedeco/javacpp-presets/.github/actions/deploy-ubuntu@actions
macosx-x86_64:
Expand All @@ -62,4 +65,4 @@ jobs:
needs: [android-arm64, android-x86_64, linux-arm64, linux-x86_64, macosx-x86_64, windows-x86_64]
runs-on: ubuntu-20.04
steps:
- uses: bytedeco/javacpp-presets/.github/actions/redeploy@actions
- uses: bytedeco/javacpp-presets/.github/actions/redeploy@actions
168 changes: 168 additions & 0 deletions tensorflow-lite/platform/gpu/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp-presets</artifactId>
<version>1.5.10</version>
<relativePath>../../../</relativePath>
</parent>

<groupId>org.bytedeco</groupId>
<artifactId>tensorflow-lite-platform-gpu</artifactId>
<version>2.15.0-${project.parent.version}</version>
<name>JavaCPP Presets Platform GPU for TensorFlow Lite</name>

<properties>
<javacpp.moduleId>tensorflow-lite</javacpp.moduleId>
<javacpp.packageName>tensorflowlite</javacpp.packageName>
<javacpp.platform.extension>-gpu</javacpp.platform.extension>
</properties>

<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${javacpp.moduleId}</artifactId>
<version>${project.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>${project.groupId}</groupId>-->
<!-- <artifactId>${javacpp.moduleId}</artifactId>-->
<!-- <version>${project.version}</version>-->
<!-- <classifier>${javacpp.platform.android-arm}</classifier>-->
<!-- </dependency>-->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${javacpp.moduleId}</artifactId>
<version>${project.version}</version>
<classifier>${javacpp.platform.android-arm64}</classifier>
</dependency>
<!-- <dependency>-->
<!-- <groupId>${project.groupId}</groupId>-->
<!-- <artifactId>${javacpp.moduleId}</artifactId>-->
<!-- <version>${project.version}</version>-->
<!-- <classifier>${javacpp.platform.android-x86}</classifier>-->
<!-- </dependency>-->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${javacpp.moduleId}</artifactId>
<version>${project.version}</version>
<classifier>${javacpp.platform.android-x86_64}</classifier>
</dependency>
<!-- <dependency>-->
<!-- <groupId>${project.groupId}</groupId>-->
<!-- <artifactId>${javacpp.moduleId}</artifactId>-->
<!-- <version>${project.version}</version>-->
<!-- <classifier>${javacpp.platform.linux-armhf}</classifier>-->
<!-- </dependency>-->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${javacpp.moduleId}</artifactId>
<version>${project.version}</version>
<classifier>${javacpp.platform.linux-arm64}</classifier>
</dependency>
<!-- <dependency>-->
<!-- <groupId>${project.groupId}</groupId>-->
<!-- <artifactId>${javacpp.moduleId}</artifactId>-->
<!-- <version>${project.version}</version>-->
<!-- <classifier>${javacpp.platform.linux-x86}</classifier>-->
<!-- </dependency>-->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${javacpp.moduleId}</artifactId>
<version>${project.version}</version>
<classifier>${javacpp.platform.linux-x86_64}</classifier>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${javacpp.moduleId}</artifactId>
<version>${project.version}</version>
<classifier>${javacpp.platform.macosx-x86_64}</classifier>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${javacpp.moduleId}</artifactId>
<version>${project.version}</version>
<classifier>${javacpp.platform.windows-x86_64}</classifier>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>default-jar</id>
<configuration>
<archive>
<manifestEntries>
<Class-Path>${javacpp.moduleId}.jar ${javacpp.moduleId}-linux-armhf-gpu.jar ${javacpp.moduleId}-linux-arm64-gpu.jar ${javacpp.moduleId}-linux-x86-gpu.jar ${javacpp.moduleId}-linux-x86_64-gpu.jar ${javacpp.moduleId}-macosx-x86_64-gpu.jar ${javacpp.moduleId}-windows-x86_64-gpu.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</execution>
<execution>
<id>empty-javadoc-jar</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>javadoc</classifier>
</configuration>
</execution>
<execution>
<id>empty-sources-jar</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>sources</classifier>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.moditect</groupId>
<artifactId>moditect-maven-plugin</artifactId>
<executions>
<execution>
<id>add-module-infos</id>
<phase>none</phase>
</execution>
<execution>
<id>add-platform-module-info</id>
<phase>package</phase>
<goals>
<goal>add-module-info</goal>
</goals>
<configuration>
<modules>
<module>
<file>${project.build.directory}/${project.artifactId}.jar</file>
<moduleInfoSource>
module org.bytedeco.${javacpp.packageName}.platform {
// requires static org.bytedeco.${javacpp.moduleId}.android.arm.gpu;
// requires static org.bytedeco.${javacpp.moduleId}.android.arm64.gpu;
// requires static org.bytedeco.${javacpp.moduleId}.android.x86.gpu;
// requires static org.bytedeco.${javacpp.moduleId}.android.x86_64.gpu;
// requires static org.bytedeco.${javacpp.packageName}.linux.armhf.gpu;
requires static org.bytedeco.${javacpp.packageName}.linux.arm64.gpu;
// requires static org.bytedeco.${javacpp.packageName}.linux.x86.gpu;
requires static org.bytedeco.${javacpp.packageName}.linux.x86_64.gpu;
requires static org.bytedeco.${javacpp.packageName}.macosx.x86_64.gpu;
requires static org.bytedeco.${javacpp.packageName}.windows.x86_64.gpu;
}
</moduleInfoSource>
</module>
</modules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,10 @@

package org.bytedeco.tensorflowlite.presets;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import org.bytedeco.javacpp.Loader;
import org.bytedeco.javacpp.annotation.NoException;
import org.bytedeco.javacpp.annotation.Platform;
import org.bytedeco.javacpp.annotation.Properties;
import org.bytedeco.javacpp.tools.Info;
import org.bytedeco.javacpp.tools.InfoMap;
import org.bytedeco.javacpp.tools.InfoMapper;
import org.bytedeco.javacpp.tools.*;

/**
*
Expand Down Expand Up @@ -99,15 +93,24 @@
"tensorflow/lite/profiling/telemetry/c/telemetry_setting.h",
"tensorflow/lite/profiling/telemetry/telemetry_status.h",
"tensorflow/lite/profiling/telemetry/profiler.h",
"tensorflow/lite/delegates/gpu/delegate.h",
"tensorflow/lite/delegates/gpu/delegate_options.h",
}
// link = "tensorflowlite_c"
),
},
target = "org.bytedeco.tensorflowlite",
global = "org.bytedeco.tensorflowlite.global.tensorflowlite")
public class tensorflowlite implements InfoMapper {
public class tensorflowlite implements InfoMapper, BuildEnabled {
static { Loader.checkVersion("org.bytedeco", "tensorflow-lite"); }

private boolean android;

@Override
public void init(Logger logger, java.util.Properties properties, String encoding) {
this.android = properties.getProperty("platform").startsWith("android-");
}

public void map(InfoMap infoMap) {
infoMap.put(new Info("TFLITE_ATTRIBUTE_WEAK", "TFL_CAPI_EXPORT", "TFLITE_NOINLINE").cppTypes().annotations())
.put(new Info("DOYXGEN_SKIP").define(true))
Expand Down Expand Up @@ -176,6 +179,16 @@ public void map(InfoMap infoMap) {
// Classes passed to some native functions as unique_ptr and that can be allocated Java-side
.put(new Info("tflite::impl::Interpreter::Interpreter").annotations("@UniquePtr", "@Name(\"std::make_unique<tflite::impl::Interpreter>\")"))
.put(new Info("tflite::Subgraph::Subgraph").annotations("@UniquePtr", "@Name(\"std::make_unique<tflite::Subgraph>\")"))
;
.put(new Info("delegate_options.h").linePatterns("#ifdef TFLITE_DEBUG_DELEGATE", "#endif").skip())
.put(new Info("gpu_invoke_loop_times").javaText("public int gpu_invoke_loop_times;"))
;

if (!android) {
infoMap.put(new Info("delegate.h").linePatterns("#if defined\\(__ANDROID__\\)", "#endif").skip());
} else {
infoMap.put(new Info("TfLiteGpuDelegateV2CreateAsync").cppTypes("TfLiteDelegate*").javaText(
"public static native @ByVal Pointer TfLiteGpuDelegateV2CreateAsync(@Const @ByRef TfLiteGpuDelegateOptionsV2 options);"
));
}
}
}
Loading