This repository provides pre-built dependencies for the WasmEdge with TensorFlow extension project.
The TensorFlow official repository only provides a shared library which is compiled on Ubuntu 18.04. Hence, we cannot use this pre-built shared library on some legacy systems such as CentOS 7.6.1810. The obvious issue is that the GLIBC version is too old, so the pre-built shared library cannot be executed.
But building the dependencies on the legacy system takes lots of time. To reduce the compilation time, we create this project to compile and release the pre-built TensorFlow shared library.
This project is under the Apache-2.0 License as the same as the TensorFlow project.
git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
cd tensorflow_src
git checkout v2.12.0
docker run -it --rm -v $(pwd):/root/$(basename $(pwd)) wasmedge/wasmedge:manylinux2014_x86_64
# For aarch64:
# docker run -it --rm -v $(pwd):/root/$(basename $(pwd)) wasmedge/wasmedge:manylinux2014_aarch64
# In docker
cd /root
yum update
yum install -y wget bzip2-devel libffi-devel
curl -sLO https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tgz
tar -zxf Python-3.8.6.tgz
cd Python-3.8.6
./configure --enable-optimizations
make && make install
The python installation path will be at /usr/local/bin/python3.8
,
and the version can be checked with the command python3.8 --version
.
# In docker
cd /root
curl -sLO https://github.com/bazelbuild/bazelisk/releases/download/v1.16.0/bazelisk-linux-amd64
# For aarch64:
# curl -sLO https://github.com/bazelbuild/bazelisk/releases/download/v1.16.0/bazelisk-linux-arm64
chmod u+x bazelisk-linux-amd64
mv bazelisk-linux-amd64 /usr/local/bin/bazel
# For aarch64:
# chmod u+x bazelisk-linux-arm64
# mv bazelisk-linux-arm64 /usr/local/bin/bazel
Install the Python packages which are required by the TensorFlow project on CentOS 7.6.1810 x86_64 or aarch64
# In docker
pip3 install -U --user pip numpy wheel packaging requests opt_einsum
pip3 install -U --user keras_preprocessing --no-deps
# In docker
cd /root/tensorflow_src
PYTHON_BIN_PATH=/usr/local/bin/python3.8 USE_DEFAULT_PYTHON_LIB_PATH=1 TF_NEED_CUDA=0 TF_NEED_ROCM=0 TF_DOWNLOAD_CLANG=0 TF_NEED_MPI=0 CC_OPT_FLAGS="-march=native -Wno-sign-compare" TF_SET_ANDROID_WORKSPACE=0 ./configure
BAZEL_LINKLIBS=-l%:libstdc++.a bazel build -c opt --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" //tensorflow:libtensorflow_cc.so
BAZEL_LINKLIBS=-l%:libstdc++.a bazel build -c opt --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" //tensorflow/lite/c:libtensorflowlite_c.so
BAZEL_LINKLIBS=-l%:libstdc++.a bazel build -c opt --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" --config=monolithic //tensorflow/lite/delegates/flex:tensorflowlite_flex
The TensorFlow shared library will be at bazel-bin/tensorflow/libtensorflow.so.2.12.0
, bazel-bin/tensorflow/libtensorflow_framework.so.2.12.0
, bazel-bin/tensorflow/lite/c/libtensorflowlite_c.so
, and bazel-bin/tensorflow/delegates/flex:tensorflowlite_flex.so
.
Install python with brew:
brew install python
Install the Python packages which are required by the TensorFlow project on MacOS x86_64 or MacOS 12 arm64
pip3 install -U --user pip numpy wheel
pip3 install -U --user keras_preprocessing --no-deps
curl -sLO https://github.com/bazelbuild/bazelisk/releases/download/v1.16.0/bazelisk-darwin-amd64
# For Apple M series:
# curl -sLO https://github.com/bazelbuild/bazelisk/releases/download/v1.16.0/bazelisk-darwin-arm64
chmod u+x bazelisk-darwin-amd64
mv bazelisk-darwin-amd64 /usr/local/bin/bazel
# For Apple M series:
# chmod u+x bazelisk-darwin-arm64
# mv bazelisk-darwin-arm64 /usr/local/bin/bazel
# In the tensorflow source directory
export CC=clang
export CXX=clang++
# Beware to use Apple Clang to build TensorFlow.
PYTHON_BIN_PATH=/usr/local/opt/python@3.11/bin/python3.11 USE_DEFAULT_PYTHON_LIB_PATH=1 TF_NEED_CUDA=0 TF_NEED_ROCM=0 TF_DOWNLOAD_CLANG=0 TF_NEED_MPI=0 CC_OPT_FLAGS="-march=native -Wno-sign-compare" TF_SET_ANDROID_WORKSPACE=0 TF_CONFIGURE_IOS=0 ./configure
bazel build -c opt //tensorflow:libtensorflow_cc.dylib
bazel build -c opt //tensorflow/lite/c:libtensorflowlite_c.dylib
bazel build -c opt --config=monolithic //tensorflow/lite/delegates/flex:tensorflowlite_flex
The TensorFlow shared library will be at bazel-bin/tensorflow/libtensorflow.2.12.0.dylib
, bazel-bin/tensorflow/libtensorflow_framework.2.12.0.dylib
, bazel-bin/tensorflow/lite/c/libtensorflowlite_c.dylib
, and bazel-bin/tensorflow/delegates/flex:tensorflowlite_flex.dylib
.
docker pull wasmedge/wasmedge:latest
docker run -it --rm -v $(pwd):/root/$(basename $(pwd)) wasmedge/wasmedge:latest
# In docker
apt update && apt install -y unzip
cd /root
curl -sLO https://github.com/bazelbuild/bazel/releases/download/5.3.0/bazel-5.3.0-installer-linux-x86_64.sh
chmod u+x bazel-5.3.0-installer-linux-x86_64.sh
./bazel-5.3.0-installer-linux-x86_64.sh
# In docker
cd /root
curl -sLO https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
unzip -q commandlinetools-linux-8092744_latest.zip
# In docker
apt update && apt install -y openjdk-8-jdk
cd /root
export ANDROID_SDK_HOME=/root/android-sdk
yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_SDK_HOME --licenses
./cmdline-tools/bin/sdkmanager "platform-tools" "platforms;android-23" --sdk_root=$ANDROID_SDK_HOME
./cmdline-tools/bin/sdkmanager "build-tools;30.0.0" --sdk_root=$ANDROID_SDK_HOME
./cmdline-tools/bin/sdkmanager "ndk;21.4.7075529" --sdk_root=$ANDROID_SDK_HOME
# In docker
apt update && apt install -y pip
ln -s /usr/bin/python3 /usr/bin/python
pip3 install -U --user numpy
# In docker
cd /root/tensorflow_src
PYTHON_BIN_PATH=/usr/bin/python3 USE_DEFAULT_PYTHON_LIB_PATH=1 TF_NEED_CUDA=0 TF_NEED_ROCM=0 TF_DOWNLOAD_CLANG=0 TF_NEED_MPI=0 CC_OPT_FLAGS="-march=native -Wno-sign-compare" TF_SET_ANDROID_WORKSPACE=1 ANDROID_NDK_HOME=$ANDROID_SDK_HOME/ndk/21.4.7075529 ANDROID_NDK_API_LEVEL=23 ANDROID_API_LEVEL=23 ANDROID_BUILD_TOOLS_VERSION="30.0.0" ./configure
bazel build --cxxopt=-std=c++1z --config=android --cpu=arm64-v8a --crosstool_top=//external:android/crosstool --host_crosstool_top=@bazel_tools//tools/cpp:toolchain //tensorflow/lite/c:tensorflowlite_c --verbose_failures --copt=-w
The TensorFlow-Lite shared library for Android will be at bazel-bin/tensorflow/lite/c/libtensorflowlite_c.so
.
Pre-built shared library | Platform | TensorFlow Tag | GLIBC | GLIBCXX | CXXABI |
---|---|---|---|---|---|
libtensorflow.so | manylinux2014_x86_64 | 2.6.0 | 2.17 | 3.4.19 | 1.3.7 |
libtensorflow_cc.so | manylinux2014_x86_64 | 2.6.0 | 2.17 | 3.4.19 | 1.3.7 |
libtensorflow_framework.so | manylinux2014_x86_64 | 2.6.0 | 2.16 | 3.4.19 | 1.3.7 |
libtensorflowlite_c.so | manylinux2014_x86_64 | 2.6.0 | 2.14 | 3.4.19 | 1.3.5 |
libtensorflow_cc.so | manylinux2014_x86_64 | 2.12.0 | 2.17 | 3.4.19 | 1.3.7 |
libtensorflow_framework.so | manylinux2014_x86_64 | 2.12.0 | 2.16 | 3.4.19 | 1.3.7 |
libtensorflowlite_c.so | manylinux2014_x86_64 | 2.12.0 | 2.14 | 3.4.19 | 1.3.5 |
libtensorflowlite_flex.so | manylinux2014_x86_64 | 2.12.0 | 2.17 | 3.4.19 | 1.3.7 |
libtensorflowlite_c.so | manylinux2014_aarch64 | 2.6.0 | 2.17 | None | None |
libtensorflow_cc.so | manylinux2014_aarch64 | 2.12.0 | 2.17 | 3.4.19 | 1.3.7 |
libtensorflow_framework.so | manylinux2014_aarch64 | 2.12.0 | 2.16 | 3.4.19 | 1.3.7 |
libtensorflowlite_c.so | manylinux2014_aarch64 | 2.12.0 | 2.17 | None | None |
libtensorflowlite_flex.so | manylinux2014_aarch64 | 2.12.0 | 2.17 | 3.4.19 | 1.3.7 |
libtensorflowlite_c.so | android_aarch64 | 2.6.0 | None | None | None |
libtensorflowlite_c.so | android_aarch64 | 2.12.0 | None | None | None |
Pre-built shared library | Platform | TensorFlow Tag | Minimum MacOS version |
---|---|---|---|
libtensorflow.dylib | darwin_x86_64 | 2.6.0 | 10.15 |
libtensorflow_cc.dylib | darwin_x86_64 | 2.6.0 | 10.15 |
libtensorflow_framework.dylib | darwin_x86_64 | 2.6.0 | 10.15 |
libtensorflowlite_c.dylib | darwin_x86_64 | 2.6.0 | 10.15 |
libtensorflow_cc.dylib | darwin_x86_64 | 2.12.0 | 10.15 |
libtensorflow_framework.dylib | darwin_x86_64 | 2.12.0 | 10.15 |
libtensorflowlite_c.dylib | darwin_x86_64 | 2.12.0 | 10.15 |
libtensorflowlite_flex.dylib | darwin_x86_64 | 2.12.0 | 10.15 |
libtensorflow_cc.dylib | darwin_arm64 | 2.12.0 | 12.0 |
libtensorflow_framework.dylib | darwin_arm64 | 2.12.0 | 12.0 |
libtensorflowlite_c.dylib | darwin_arm64 | 2.12.0 | 12.0 |
libtensorflowlite_flex.dylib | darwin_arm64 | 2.12.0 | 12.0 |
- TF-2.6.0: TensorFlow 2.6.0 C library
- TensorFlow 2.6.0 C shared library for
manylinux2014_x86_64
anddarwin_x86_64
. - TensorFlow-Lite 2.6.0 C shared library for
manylinux2014_x86_64
,manylinux2014_aarch64
,darwin_x86_64
, andandroid_aarch64
.
- TensorFlow 2.6.0 C shared library for
- TF-2.6.0-CC: TensorFlow 2.6.0 C++ library
- TensorFlow 2.6.0 C++ shared library for
manylinux2014_x86_64
anddarwin_x86_64
. - TensorFlow-Lite 2.6.0 C shared library for
manylinux2014_x86_64
,manylinux2014_aarch64
,darwin_x86_64
, andandroid_aarch64
.
- TensorFlow 2.6.0 C++ shared library for
- TF-2.12.0-CC: TensorFlow 2.12.0 C++ library
- TensorFlow 2.12.0 C++ shared library for
manylinux2014_x86_64
,manylinux2014_aarch64
,darwin_x86_64
, anddarwin_arm64
. - TensorFlow-Lite 2.12.0 C shared library with Flex delegate shared library for
manylinux2014_x86_64
,manylinux2014_aarch64
,darwin_x86_64
, anddarwin_arm64
. - TensorFlow-Lite 2.12.0 C shared library for
android_aarch64
.
- TensorFlow 2.12.0 C++ shared library for