From 3f2ff8879f277fbd035cce91ffaa7ed27e2c3d09 Mon Sep 17 00:00:00 2001 From: Fangjun Kuang Date: Wed, 26 Feb 2025 16:47:45 +0800 Subject: [PATCH] Build wheels for rknn linux aarch64 --- .../workflows/build-wheels-aarch64-rknn.yaml | 125 ++++++++++++++++++ .github/workflows/linux.yaml | 3 +- .github/workflows/rknn-linux-aarch64.yaml | 5 +- sherpa-onnx/csrc/online-model-config.cc | 2 +- 4 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/build-wheels-aarch64-rknn.yaml diff --git a/.github/workflows/build-wheels-aarch64-rknn.yaml b/.github/workflows/build-wheels-aarch64-rknn.yaml new file mode 100644 index 0000000000..3b8a690917 --- /dev/null +++ b/.github/workflows/build-wheels-aarch64-rknn.yaml @@ -0,0 +1,125 @@ +name: build-wheels-aarch64-rknn + +on: + push: + branches: + - wheel + workflow_dispatch: + +concurrency: + group: build-wheels-aarch64-rknn-${{ github.ref }} + cancel-in-progress: true + +jobs: + build_wheels_aarch64_rknn: + runs-on: ${{ matrix.os }} + name: ${{ matrix.os }} ${{ matrix.python-version }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-22.04-arm] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Python dependencies + shell: bash + run: | + python3 -m pip install --upgrade pip numpy pypinyin sentencepiece setuptools wheel + + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ matrix.os }}-rknn-linux-aarch64-wheel + + - name: Download rknn-toolkit2 + shell: bash + run: | + git clone --depth 1 https://github.com/airockchip/rknn-toolkit2 + + - name: Build sherpa-onnx + shell: bash + run: | + export CMAKE_CXX_COMPILER_LAUNCHER=ccache + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake --version + + echo "config: ${{ matrix.config }}" + uname -a + which gcc + + gcc --version + g++ --version + + echo "pwd" + + ls -lh + + git clone --depth 1 --branch v1.2.12 https://github.com/alsa-project/alsa-lib + pushd alsa-lib + ./gitcompile + popd + + export SHERPA_ONNX_RKNN_TOOLKIT2_PATH=$PWD/rknn-toolkit2 + export SHERPA_ONNX_RKNN_TOOLKIT2_LIB_DIR=$SHERPA_ONNX_RKNN_TOOLKIT2_PATH/rknpu2/runtime/Linux/librknn_api/aarch64 + export CPLUS_INCLUDE_PATH=$SHERPA_ONNX_RKNN_TOOLKIT2_PATH/rknpu2/runtime/Linux/librknn_api/include:$CPLUS_INCLUDE_PATH + export CPLUS_INCLUDE_PATH=$PWD/alsa-lib/include:$CPLUS_INCLUDE_PATH + export SHERPA_ONNX_ALSA_LIB_DIR=$PWD/alsa-lib/src/.libs + + export SHERPA_ONNX_CMAKE_ARGS="-DSHERPA_ONNX_ENABLE_RKNN=ON -DSHERPA_ONNX_ENABLE_ALSA=1" + python3 setup.py bdist_wheel + + + - name: Display results + shell: bash + run: | + ls -lh dist + + - name: Publish to huggingface + env: + HF_TOKEN: ${{ secrets.HF_TOKEN }} + uses: nick-fields/retry@v3 + with: + max_attempts: 20 + timeout_seconds: 200 + shell: bash + command: | + git config --global user.email "csukuangfj@gmail.com" + git config --global user.name "Fangjun Kuang" + + rm -rf huggingface + export GIT_LFS_SKIP_SMUDGE=1 + export GIT_CLONE_PROTECTION_ACTIVE=false + + SHERPA_ONNX_VERSION=$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2) + echo "SHERPA_ONNX_VERSION $SHERPA_ONNX_VERSION" + + d=rknn/$SHERPA_ONNX_VERSION/ + + git clone https://csukuangfj:$HF_TOKEN@huggingface.co/csukuangfj/sherpa-onnx-wheels huggingface + cd huggingface + git fetch + git pull + git merge -m "merge remote" --ff origin main + + mkdir -p $d + + cp -v ../dist/*.whl $d/ + + git status + git add . + git commit -m "add more wheels" + git push https://csukuangfj:$HF_TOKEN@huggingface.co/csukuangfj/sherpa-onnx-wheels main + + - uses: actions/upload-artifact@v4 + with: + name: wheel-${{ matrix.python-version }} + path: ./dist/*.whl diff --git a/.github/workflows/linux.yaml b/.github/workflows/linux.yaml index 6866eda6bd..7db76631e3 100644 --- a/.github/workflows/linux.yaml +++ b/.github/workflows/linux.yaml @@ -174,7 +174,8 @@ jobs: cp -a build/install/bin $dst/ if [[ ${{ matrix.shared_lib }} == ON ]]; then - cp -av build/install/lib $dst/ + mkdir $dst/lib + cp -av build/install/lib/*.so* $dst/lib/ fi cp -a build/install/include $dst/ diff --git a/.github/workflows/rknn-linux-aarch64.yaml b/.github/workflows/rknn-linux-aarch64.yaml index 32b2452ffc..7ed238d71f 100644 --- a/.github/workflows/rknn-linux-aarch64.yaml +++ b/.github/workflows/rknn-linux-aarch64.yaml @@ -152,7 +152,8 @@ jobs: cp -a build/install/bin $dst/ if [[ ${{ matrix.shared }} == ON ]]; then - cp -v build/install/lib/lib*.so $dst/ + mkdir -p $dst/lib + cp -v build/install/lib/lib*.so $dst/lib/ fi ls -lh build/install/lib @@ -218,7 +219,7 @@ jobs: file: sherpa-onnx-*linux-aarch64*.tar.bz2 - name: Release pre-compiled binaries and libs for rknn linux aarch64 - # if: github.repository_owner == 'csukuangfj' && github.event_name == 'push' && contains(github.ref, 'refs/tags/') + if: github.repository_owner == 'csukuangfj' && github.event_name == 'push' && contains(github.ref, 'refs/tags/') uses: svenstaro/upload-release-action@v2 with: file_glob: true diff --git a/sherpa-onnx/csrc/online-model-config.cc b/sherpa-onnx/csrc/online-model-config.cc index 76a57dc403..10fb2669cb 100644 --- a/sherpa-onnx/csrc/online-model-config.cc +++ b/sherpa-onnx/csrc/online-model-config.cc @@ -84,7 +84,7 @@ bool OnlineModelConfig::Validate() const { EndsWith(transducer.joiner, ".onnx"))) { SHERPA_ONNX_LOGE( "--provider is rknn, but you pass onnx model " - "filenames. encoder: '%s', decoder: '%s', joiner: %'s'", + "filenames. encoder: '%s', decoder: '%s', joiner: '%s'", transducer.encoder.c_str(), transducer.decoder.c_str(), transducer.joiner.c_str()); return false;