Skip to content

Commit 8d26ff7

Browse files
committed
Merge branch 'dev'
2 parents 0180765 + a0ce14c commit 8d26ff7

15 files changed

+1061
-316
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.tflite filter=lfs diff=lfs merge=lfs -text

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,3 @@
44
*.so
55
**/__pycache__
66
**/*.pyc
7-
/qa/test_model_repo

CMakeLists.txt

Lines changed: 131 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ set(TRITON_COMMON_REPO_TAG "main" CACHE STRING "Tag for triton-inference-server/
1818

1919
# TFLite Options
2020
set(TFLITE_TAG "v2.4.1" CACHE STRING "Version of TFLite to build")
21+
set(BAZEL_BINARY "/usr/bin/bazel" CACHE STRING "Location of bazel binary on host")
22+
option(TFLITE_BAZEL_BUILD "Build tflite bazel" OFF)
2123
option(TFLITE_ENABLE_RUY "Use RUY library in TFLite build" ON)
24+
option(TFLITE_ENABLE_XNNPACK "Build backend with xnnpack delgate support" ON)
25+
option(TFLITE_ENABLE_FLEX_OPS "Build tflite with flex ops support (must build with bazel)" OFF)
2226

2327
# ArmNN Options
2428
set(ARMNN_TAG "v21.08" CACHE STRING "Tag for ArmNN repo")
@@ -44,6 +48,11 @@ if (TRITON_ENABLE_MALI_GPU)
4448
set(ACL_ENABLE_CL "1")
4549
endif()
4650

51+
# Ensure bazel build set if enabling flex ops delegate
52+
if (TFLITE_ENABLE_FLEX_OPS AND (NOT(TFLITE_BAZEL_BUILD)))
53+
message(FATAL_ERROR "Please set TFLITE_BAZEL_BUILD if you wish to build flex ops delegate")
54+
endif()
55+
4756
if (NOT DEFINED ACL_ARCH)
4857
if (${TARGET_ARCH} MATCHES "armv7")
4958
set(ACL_ARCH "armv7a")
@@ -95,15 +104,23 @@ FetchContent_Declare(
95104
GIT_TAG ${TRITON_BACKEND_REPO_TAG}
96105
GIT_SHALLOW ON
97106
)
98-
FetchContent_Declare(
99-
tensorflow-lite
100-
GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
101-
GIT_TAG ${TFLITE_TAG}
102-
GIT_SHALLOW ON
103-
PATCH_COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR}/patches/xnnpack_commit.patch || true # patch updates the commit hash for xnnpack for tensorflow v2.4.1
104-
SOURCE_SUBDIR tensorflow/lite
105-
)
106-
FetchContent_MakeAvailable(repo-common repo-core repo-backend tensorflow-lite)
107+
108+
set(MAKE_AVAILABLE_LIST repo-common repo-core repo-backend)
109+
110+
if (NOT TFLITE_BAZEL_BUILD)
111+
FetchContent_Declare(
112+
tensorflow-lite
113+
GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
114+
GIT_TAG ${TFLITE_TAG}
115+
GIT_SHALLOW ON
116+
PATCH_COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR}/patches/xnnpack_commit.patch || true # patch updates the commit hash for xnnpack for tensorflow v2.4.1
117+
SOURCE_SUBDIR tensorflow/lite
118+
)
119+
120+
LIST(APPEND MAKE_AVAILABLE_LIST tensorflow-lite)
121+
endif()
122+
123+
FetchContent_MakeAvailable(${MAKE_AVAILABLE_LIST})
107124

108125
#
109126
# Shared library implementing the Triton Backend API
@@ -112,6 +129,55 @@ configure_file(src/libtriton_armnn_tflite.ldscript libtriton_armnn_tflite.ldscri
112129

113130
include(ExternalProject)
114131

132+
set(TFLITE_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/external/tensorflow_lite)
133+
134+
if (TFLITE_BAZEL_BUILD)
135+
SET(BAZEL_BUILD_FLAGS
136+
"--config=monolithic"
137+
"-c" "opt"
138+
)
139+
140+
if (TFLITE_ENABLE_RUY)
141+
LIST(APPEND BAZEL_BUILD_FLAGS "--define=tflite_with_ruy=true")
142+
else()
143+
LIST(APPEND BAZEL_BUILD_FLAGS "--define=tflite_with_ruy=false")
144+
endif()
145+
146+
if (TFLITE_ENABLE_XNNPACK)
147+
SET(BAZEL_BUILD_PATCH "${CMAKE_CURRENT_SOURCE_DIR}/patches/tflite_bazel_build_with_xnnpack.patch")
148+
else()
149+
SET(BAZEL_BUILD_PATCH "${CMAKE_CURRENT_SOURCE_DIR}/patches/tflite_bazel_build.patch")
150+
endif()
151+
152+
if (TFLITE_ENABLE_FLEX_OPS)
153+
SET(TFLITE_PATCH_COMMAND "git" "apply" ${BAZEL_BUILD_PATCH} "||" "true")
154+
else()
155+
SET(TFLITE_PATCH_COMMAND "")
156+
endif()
157+
158+
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
159+
LIST(APPEND BAZEL_BUILD_FLAGS "-c" "dbg" "--copt=-g")
160+
else()
161+
LIST(APPEND BAZEL_BUILD_FLAGS "--strip=always")
162+
endif()
163+
164+
# Build tensorflow lite shared lib using bazel (required for flex ops delegate)
165+
ExternalProject_Add(
166+
tensorflow-lite
167+
PREFIX ${TFLITE_LOCATION}
168+
GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
169+
GIT_TAG ${TFLITE_TAG}
170+
GIT_SHALLOW ON
171+
PATCH_COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR}/patches/tflite.patch || true # patch updates the commit hash for xnnpack for tensorflow v2.4.1
172+
COMMAND ${TFLITE_PATCH_COMMAND}
173+
CONFIGURE_COMMAND ""
174+
BUILD_COMMAND ${BAZEL_BINARY} build ${BAZEL_BUILD_FLAGS} //tensorflow/lite:libtensorflowlite.so
175+
BUILD_IN_SOURCE ON
176+
INSTALL_COMMAND ""
177+
)
178+
endif()
179+
180+
115181
if (ARMNN_DELEGATE_ENABLE)
116182
#
117183
# Build ArmNN dependencies using custom command
@@ -142,15 +208,26 @@ if (ARMNN_DELEGATE_ENABLE)
142208
INSTALL_COMMAND ""
143209
)
144210

211+
if (TFLITE_BAZEL_BUILD)
212+
SET(ARMNN_PATCH_COMMAND "")
213+
SET(TENSORFLOW_ROOT ${TFLITE_LOCATION}/src/tensorflow-lite)
214+
SET(TFLITE_LIB_ROOT ${TFLITE_LOCATION}/src/tensorflow-lite/bazel-bin)
215+
else()
216+
# Never fail as patch is always applied after repo clone
217+
SET(ARMNN_PATCH_COMMAND "git" "apply" "${CMAKE_CURRENT_SOURCE_DIR}/patches/tflite_armnn_delegate.patch" "||" "true")
218+
SET(TENSORFLOW_ROOT ${CMAKE_CURRENT_BINARY_DIR}/_deps/tensorflow-lite-src)
219+
SET(TFLITE_LIB_ROOT ${CMAKE_CURRENT_BINARY_DIR}/_deps/tensorflow-lite-build)
220+
endif()
221+
145222
# ArmNN and its tflite delegate
146223
ExternalProject_Add(
147224
armnn
148225
PREFIX ${ARMNN_LOCATION}
149226
GIT_REPOSITORY https://review.mlplatform.org/ml/armnn
150227
GIT_TAG ${ARMNN_TAG}
151228
GIT_SHALLOW ON
152-
PATCH_COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR}/patches/tflite_armnn_delegate.patch || true # Never fail as patch is always applied after repo clone
153-
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${ARMNN_LOCATION} -DBUILD_ARMNN_TFLITE_DELEGATE=1 -DTENSORFLOW_ROOT=${CMAKE_CURRENT_BINARY_DIR}/_deps/tensorflow-lite-src -DTFLITE_LIB_ROOT=${CMAKE_CURRENT_BINARY_DIR}/_deps/tensorflow-lite-build -DARMCOMPUTE_ROOT=${ACL_LOCATION}/src/acl -DARMCOMPUTENEON=${ACL_ENABLE_NEON} -DARMCOMPUTECL=${ACL_ENABLE_CL} -DBUILD_UNIT_TESTS=0 -DCMAKE_BUILD_TYPE=${ARMNN_BUILD_TYPE} -DBUILD_ARMNN_SERIALIZER=0 -DARMNNREF=1 -DFLATBUFFERS_ROOT=${FLATBUFFERS_LOCATION}/flatbuffers-${FLATBUFFERS_VERSION}/install
229+
PATCH_COMMAND ${ARMNN_PATCH_COMMAND}
230+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${ARMNN_LOCATION} -DBUILD_ARMNN_TFLITE_DELEGATE=1 -DTENSORFLOW_ROOT=${TENSORFLOW_ROOT} -DTFLITE_LIB_ROOT=${TFLITE_LIB_ROOT} -DARMCOMPUTE_ROOT=${ACL_LOCATION}/src/acl -DARMCOMPUTENEON=${ACL_ENABLE_NEON} -DARMCOMPUTECL=${ACL_ENABLE_CL} -DBUILD_UNIT_TESTS=0 -DCMAKE_BUILD_TYPE=${ARMNN_BUILD_TYPE} -DBUILD_ARMNN_SERIALIZER=0 -DARMNNREF=1 -DFLATBUFFERS_ROOT=${FLATBUFFERS_LOCATION}/flatbuffers-${FLATBUFFERS_VERSION}/install
154231
DEPENDS flatbuffers-armnn acl tensorflow-lite
155232
)
156233
endif()
@@ -174,15 +251,23 @@ add_library(
174251
TritonArmNNTFLiteBackend::triton-armnn-tflite-backend ALIAS triton-armnn-tflite-backend
175252
)
176253

177-
target_include_directories(
178-
triton-armnn-tflite-backend
179-
PRIVATE
254+
SET(BACKEND_INCLUDE_DIRS
180255
${CMAKE_CURRENT_SOURCE_DIR}/src
181-
${CMAKE_CURRENT_BINARY_DIR}/_deps/tensorflow-lite-src
256+
${TENSORFLOW_ROOT} # for tflite headers
182257
${ARMNN_LOCATION}/include # for armnn headers
183258
${ARMNN_LOCATION}/src/armnn/delegate/include # for delegate headers
184259
)
185260

261+
if (TFLITE_BAZEL_BUILD)
262+
LIST(APPEND BACKEND_INCLUDE_DIRS ${TENSORFLOW_ROOT}/bazel-tensorflow-lite/external/flatbuffers/include)
263+
endif()
264+
265+
target_include_directories(
266+
triton-armnn-tflite-backend
267+
PRIVATE
268+
${BACKEND_INCLUDE_DIRS}
269+
)
270+
186271
target_compile_features(triton-armnn-tflite-backend PRIVATE cxx_std_11)
187272
target_compile_options(
188273
triton-armnn-tflite-backend PRIVATE
@@ -211,15 +296,30 @@ set_target_properties(
211296
LINK_FLAGS "-Wl,--no-as-needed,--version-script libtriton_armnn_tflite.ldscript"
212297
)
213298

299+
SET(BACKEND_LINK_LIBS
300+
triton-core-serverapi
301+
triton-core-backendapi
302+
triton-core-serverstub
303+
triton-backend-utils
304+
${CMAKE_DL_LIBS}
305+
)
306+
307+
if (TFLITE_BAZEL_BUILD)
308+
# Link the tensorflow lite library
309+
target_link_libraries(
310+
triton-armnn-tflite-backend
311+
PRIVATE
312+
"-L${TFLITE_LOCATION}/src/tensorflow-lite/bazel-bin/tensorflow/lite" # From bazel tflite build
313+
-ltensorflowlite
314+
)
315+
else()
316+
LIST(APPEND BACKEND_LINK_LIBS tensorflow-lite)
317+
endif()
318+
214319
target_link_libraries(
215320
triton-armnn-tflite-backend
216321
PRIVATE
217-
triton-core-serverapi # from repo-core
218-
triton-core-backendapi # from repo-core
219-
triton-core-serverstub # from repo-core
220-
triton-backend-utils # from repo-backend
221-
tensorflow-lite
222-
${CMAKE_DL_LIBS}
322+
${BACKEND_LINK_LIBS}
223323
)
224324

225325
if (ARMNN_DELEGATE_ENABLE)
@@ -264,10 +364,19 @@ if (ARMNN_DELEGATE_ENABLE)
264364
)
265365
endif()
266366

367+
if (TFLITE_BAZEL_BUILD)
368+
# Install tflite library
369+
install(
370+
FILES
371+
${TFLITE_LOCATION}/src/tensorflow-lite/bazel-bin/tensorflow/lite/libtensorflowlite.so
372+
DESTINATION ${CMAKE_INSTALL_PREFIX}/backends/armnn_tflite
373+
)
374+
endif()
375+
267376
# Install Tensorflow license
268377
install(
269378
FILES
270-
${CMAKE_CURRENT_BINARY_DIR}/_deps/tensorflow-lite-src/LICENSE
379+
${TENSORFLOW_ROOT}/LICENSE
271380
RENAME tensorflow.LICENSE
272381
DESTINATION ${CMAKE_INSTALL_PREFIX}/backends/armnn_tflite
273382
)

Dockerfile

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ ARG UBUNTU_VERSION=20.04
22

33
FROM ubuntu:${UBUNTU_VERSION} as armnn_tflite_backend
44

5-
# Triton version pins, assumed same across backend, core, and common
6-
ARG TRITON_REPO_TAG=main
5+
ENV DEBIAN_FRONTEND=noninteractive
76

87
# Cmake Version options
9-
ARG CMAKE_VERSION=3.19
8+
ARG CMAKE_VERSION=3.21.1
109

1110
ENV DEBIAN_FRONTEND=noninteractive
1211

@@ -19,36 +18,74 @@ RUN apt-get update && \
1918
curl \
2019
autoconf \
2120
libtool \
21+
python3-dev \
22+
python3-pip \
23+
python3-numpy \
2224
build-essential \
2325
libssl-dev \
26+
zlib1g-dev \
27+
default-jdk \
28+
libtool \
29+
zip \
30+
unzip \
2431
xxd \
2532
rapidjson-dev \
26-
unzip
27-
28-
# Install cmake from source
29-
RUN build=1 && \
30-
mkdir /temp && \
31-
cd /temp && \
32-
wget https://cmake.org/files/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.$build.tar.gz && \
33-
tar -xzvf cmake-${CMAKE_VERSION}.$build.tar.gz && \
34-
cd cmake-${CMAKE_VERSION}.$build/ && \
35-
./bootstrap --parallel=$(nproc) && \
36-
make -j$(nproc) && \
37-
make install
33+
software-properties-common \
34+
unzip && \
35+
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | \
36+
gpg --dearmor - | \
37+
tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null && \
38+
apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' && \
39+
apt-get update && \
40+
apt-get install -y --no-install-recommends \
41+
cmake-data=${CMAKE_VERSION}-0kitware1ubuntu20.04.1 cmake=${CMAKE_VERSION}-0kitware1ubuntu20.04.1 && \
42+
pip3 install -U pip wheel && \
43+
rm -rf /var/lib/apt/lists/*
44+
45+
# Triton version pins, assumed same across backend, core, and common
46+
# Note that this is set to the rX.XX branches, not the vX.X.X tags
47+
ARG TRITON_REPO_TAG=main
48+
49+
# CMake build arguments defaults
50+
ARG CMAKE_BUILD_TYPE=RELEASE
51+
ARG TRITON_ENABLE_MALI_GPU=ON
52+
ARG TFLITE_ENABLE_RUY=ON
53+
ARG TFLITE_BAZEL_BUILD=OFF
54+
ARG TFLITE_ENABLE_FLEX_OPS=OFF
55+
ARG TFLITE_TAG=v2.4.1
56+
ARG ARMNN_TAG=v21.08
57+
ARG ARMNN_DELEGATE_ENABLE=ON
58+
ARG ACL_TAG=${ARMNN_TAG}
59+
60+
# Install Bazel from source
61+
RUN wget -O bazel-3.1.0-dist.zip https://github.com/bazelbuild/bazel/releases/download/3.1.0/bazel-3.1.0-dist.zip && \
62+
unzip -d bazel bazel-3.1.0-dist.zip && \
63+
rm bazel-3.1.0-dist.zip && \
64+
cd bazel && \
65+
ln -s /usr/bin/python3 /usr/bin/python && \
66+
env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" bash ./compile.sh && \
67+
cp output/bazel /usr/bin/bazel
3868

3969
# Build ArmNN TFLite Backend
4070
WORKDIR /opt/armnn_tflite_backend
4171
COPY . .
4272
RUN mkdir build && \
4373
cd build && \
4474
cmake .. \
75+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
4576
-DCMAKE_INSTALL_PREFIX:PATH=`pwd`/install \
4677
-DTRITON_BACKEND_REPO_TAG=${TRITON_REPO_TAG} \
4778
-DTRITON_CORE_REPO_TAG=${TRITON_REPO_TAG} \
4879
-DTRITON_COMMON_REPO_TAG=${TRITON_REPO_TAG} \
4980
-DTRITON_ENABLE_GPU=OFF \
50-
-DTRITON_ENABLE_MALI_GPU=ON \
51-
-DTFLITE_ENABLE_RUY=ON \
81+
-DTRITON_ENABLE_MALI_GPU=${TRITON_ENABLE_MALI_GPU}} \
82+
-DTFLITE_ENABLE_RUY=${TFLITE_ENABLE_RUY} \
83+
-DTFLITE_BAZEL_BUILD=${TFLITE_BAZEL_BUILD} \
84+
-DTFLITE_ENABLE_FLEX_OPS=${TFLITE_ENABLE_FLEX_OPS} \
85+
-DTFLITE_TAG=${TFLITE_TAG} \
86+
-DARMNN_TAG=${ARMNN_TAG} \
87+
-DARMNN_DELEGATE_ENABLE=${ARMNN_DELEGATE_ENABLE} \
88+
-DACL_TAG=${ACL_TAG} \
5289
-DJOBS=$(nproc) \
5390
&& \
5491
make -j$(nproc) install

0 commit comments

Comments
 (0)