Skip to content

Commit 2c1c9c8

Browse files
committed
Fix TF 1.11 compatibility (#237)
* Add support for multiple TensorFlow plugins Signed-off-by: Janusz Lisiecki <[email protected]> * Add tests for 1.12.0rc1 Signed-off-by: Janusz Lisiecki <[email protected]> * Add 1.12rc1 support Signed-off-by: Janusz Lisiecki <[email protected]> * Add TF 1.12.rc2 support Signed-off-by: Janusz Lisiecki <[email protected]> * Reduce number of tested TF versions Signed-off-by: Janusz Lisiecki <[email protected]>
1 parent a94a7bf commit 2c1c9c8

File tree

6 files changed

+62
-29
lines changed

6 files changed

+62
-29
lines changed

Dockerfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ ENV PATH=${PYBIN}:${PATH} \
1818

1919
RUN ln -s /opt/python/cp${PYV}* /opt/python/v
2020

21-
RUN pip install future numpy setuptools wheel tensorflow-gpu==1.7 && \
21+
RUN pip install future numpy setuptools wheel && \
22+
pip install tensorflow-gpu==1.7 && \
23+
pip install tensorflow-gpu==1.11 --target /tensorflow/1_11 && \
24+
pip install tensorflow-gpu==1.12rc2 --target /tensorflow/1_12 && \
2225
rm -rf /root/.cache/pip/
2326

2427
RUN ln -s /usr/local/cuda/lib64/stubs/libcuda.so /usr/local/cuda/lib64/stubs/libcuda.so.1 && \

dali/CMakeLists.txt

+44-20
Original file line numberDiff line numberDiff line change
@@ -132,27 +132,51 @@ endif()
132132
################################################
133133
if (BUILD_TENSORFLOW)
134134

135-
execute_process(
136-
COMMAND python -c "from __future__ import print_function; import sys; paths = sys.path; f = [p for p in paths if \"-packages\" in p] ; print(f[0], end=\"\")"
137-
OUTPUT_VARIABLE DIST_PACKAGES_DIR)
138-
139135
add_subdirectory(tensorflow)
140-
141-
set(customop_lib "dali_tf")
142-
143-
cuda_add_library(${customop_lib} SHARED ${DALI_TF_SRCS})
144-
145-
separate_arguments(TF_CFLAGS UNIX_COMMAND "-I${DIST_PACKAGES_DIR}/tensorflow/include -I${DIST_PACKAGES_DIR}/external/nsync/public -D_GLIBCXX_USE_CXX11_ABI=0")
146-
target_compile_options(${customop_lib} PRIVATE ${TF_CFLAGS})
147-
148-
message(STATUS "Adding dependencies to ${customop_lib}: '${dali_lib}'")
149-
add_dependencies(${customop_lib} ${dali_lib})
150-
151-
target_link_libraries(${customop_lib} PRIVATE -L${DIST_PACKAGES_DIR}/tensorflow -ltensorflow_framework)
152-
target_link_libraries(${customop_lib} PRIVATE ${dali_lib})
153-
154-
set_target_properties(${customop_lib} PROPERTIES
155-
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/dali/python/nvidia/dali/plugin")
136+
137+
# get default TF installation path
138+
execute_process(
139+
COMMAND python -c "from __future__ import print_function; import sys; paths = sys.path; f = [p for p in paths if \"-packages\" in p] ; print(f[0], end=\"\")"
140+
OUTPUT_VARIABLE DIST_PACKAGES_DIR)
141+
142+
set(TF_PATHS)
143+
set(TF_VER)
144+
# obtain custom versions of TF we want to build aganist
145+
file(GLOB TF_VERSIONS RELATIVE /tensorflow /tensorflow/*)
146+
foreach(VER ${TF_VERSIONS})
147+
set(FULL_PATH /tensorflow/${VER})
148+
if(IS_DIRECTORY ${FULL_PATH})
149+
list(APPEND TF_PATHS ${FULL_PATH})
150+
list(APPEND TF_VER "_${VER}")
151+
ENDIF()
152+
ENDFOREACH()
153+
154+
# append default TF version
155+
list(APPEND TF_PATHS ${DIST_PACKAGES_DIR})
156+
list(APPEND TF_VER "")
157+
158+
# build TF plugin for each TF version we want to support
159+
list(LENGTH TF_PATHS TF_LIST_L)
160+
math(EXPR TF_LIST_L_ITER "${TF_LIST_L} - 1")
161+
foreach(IDX RANGE ${TF_LIST_L_ITER})
162+
list(GET TF_PATHS ${IDX} FULL_PATH)
163+
list(GET TF_VER ${IDX} VER)
164+
set(customop_lib "dali_tf${VER}")
165+
166+
cuda_add_library(${customop_lib} SHARED ${DALI_TF_SRCS})
167+
168+
separate_arguments(TF_CFLAGS UNIX_COMMAND "-I${FULL_PATH}/tensorflow/include -I${FULL_PATH}/external/nsync/public -D_GLIBCXX_USE_CXX11_ABI=0")
169+
target_compile_options(${customop_lib} PRIVATE ${TF_CFLAGS})
170+
171+
message(STATUS "Adding dependencies to ${customop_lib}: '${dali_lib}'")
172+
add_dependencies(${customop_lib} ${dali_lib})
173+
174+
target_link_libraries(${customop_lib} PRIVATE -L${FULL_PATH}/tensorflow -ltensorflow_framework)
175+
target_link_libraries(${customop_lib} PRIVATE ${dali_lib})
176+
177+
set_target_properties(${customop_lib} PROPERTIES
178+
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/dali/python/nvidia/dali/plugin")
179+
ENDFOREACH()
156180
endif()
157181

158182

dali/python/CMakeLists.txt

-4
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@ set(dali_python_lib "backend_impl")
1818
pybind11_add_module(${dali_python_lib} MODULE ${tmp})
1919
message(STATUS "Adding dependencies to ${dali_python_lib}: '${dali_lib}'")
2020
add_dependencies(${dali_python_lib} ${dali_lib})
21-
if (BUILD_TENSORFLOW)
22-
message(STATUS "Adding dependencies to ${dali_python_lib}: '${customop_lib}'")
23-
add_dependencies(${dali_python_lib} ${customop_lib})
24-
endif()
2521

2622
# Link libdali.so, libprotobuf.a and libcudart_static.a into backend_impl (dali_python_lib)
2723
target_link_libraries(${dali_python_lib} PRIVATE ${CUDA_LIBRARIES} ${dali_lib})

dali/python/nvidia/dali/plugin/tf.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,20 @@
1414

1515
import tensorflow as tf
1616
import os
17+
import glob
18+
19+
_tf_plugins = glob.glob(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'libdali_tf*.so'))
20+
_dali_tf_module = None
21+
for _libdali_tf in _tf_plugins:
22+
try:
23+
_dali_tf_module = tf.load_op_library(_libdali_tf)
24+
break
25+
# if plugin is not compatible skip it
26+
except tf.errors.NotFoundError:
27+
pass
28+
else:
29+
raise Exception('No matching DALI plugin found for installed TensorFlow version')
1730

18-
_libdali_tf = os.path.dirname(os.path.realpath(__file__)) + '/libdali_tf.so'
19-
_dali_tf_module = tf.load_op_library(_libdali_tf)
2031
_dali_tf = _dali_tf_module.dali
2132

2233
def DALIIterator():

dali/tensorflow/daliop.cc

-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
#endif
2828

2929
#include "dali/common.h"
30-
#include "dali/pipeline/dali.pb.h"
3130
#include "dali/pipeline/pipeline.h"
3231
#include "dali/c_api/c_api.h"
3332
#include "dali/error_handling.h"

qa/setup_packages.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
packages = {"numpy" : ["1.11.1"],
2121
"opencv-python" : ["3.1.0"],
2222
"mxnet-cu90" : ["1.3.0"],
23-
"tensorflow-gpu" : ["1.7", "1.8", "1.9", "1.10.1"],
23+
"tensorflow-gpu" : ["1.7", "1.11", "1.12.0rc2"],
2424
"torch" : ["http://download.pytorch.org/whl/cu90/torch-0.4.0-{0}.whl"]
2525
}
2626

0 commit comments

Comments
 (0)