mirror of
https://github.com/csukuangfj/kaldifeat.git
synced 2025-08-16 04:32:17 +00:00
Merge branch 'master' into fix_android
This commit is contained in:
commit
a9f2fe9ecb
62
.github/workflows/build-doc.yml
vendored
Normal file
62
.github/workflows/build-doc.yml
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# Copyright 2022 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
# refer to https://github.com/actions/starter-workflows/pull/47/files
|
||||||
|
|
||||||
|
# You can access it at https://csukuangfj.github.io/kaldifeat
|
||||||
|
name: Generate doc
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- doc
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-doc:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
python-version: [3.8]
|
||||||
|
steps:
|
||||||
|
# refer to https://github.com/actions/checkout
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Python ${{ matrix.python-version }}
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Display Python version
|
||||||
|
run: python -c "import sys; print(sys.version)"
|
||||||
|
|
||||||
|
- name: Build doc
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd doc
|
||||||
|
python3 -m pip install -r ./requirements.txt
|
||||||
|
make html
|
||||||
|
touch build/html/.nojekyll
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
publish_dir: ./doc/build/html
|
||||||
|
publish_branch: gh-pages
|
108
.github/workflows/build_conda_ubuntu_cpu.yml
vendored
Normal file
108
.github/workflows/build_conda_ubuntu_cpu.yml
vendored
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
# refer to https://github.com/actions/starter-workflows/pull/47/files
|
||||||
|
|
||||||
|
name: build_conda_ubuntu_cpu
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
env:
|
||||||
|
KALDIFEAT_BUILD_TYPE: Release
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
generate_build_matrix:
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
build_conda_ubuntu_cpu:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# refer to https://github.com/actions/checkout
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: conda-incubator/setup-miniconda@v2
|
||||||
|
with:
|
||||||
|
auto-update-conda: true
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
activate-environment: kaldifeat
|
||||||
|
|
||||||
|
- name: Display Python version
|
||||||
|
shell: bash -l {0}
|
||||||
|
run: |
|
||||||
|
python3 -c "import sys; print(sys.version)"
|
||||||
|
which python3
|
||||||
|
|
||||||
|
- name: Install conda dependencies
|
||||||
|
shell: bash -l {0}
|
||||||
|
run: |
|
||||||
|
conda install -y -q anaconda-client
|
||||||
|
conda install -y -q conda-build
|
||||||
|
conda install -y -q -c pytorch pytorch=${{ matrix.torch }} cpuonly
|
||||||
|
|
||||||
|
- name: Display conda info
|
||||||
|
shell: bash -l {0}
|
||||||
|
run: |
|
||||||
|
which conda
|
||||||
|
conda env list
|
||||||
|
conda info
|
||||||
|
nproc
|
||||||
|
|
||||||
|
- name: Build kaldifeat
|
||||||
|
shell: bash -l {0}
|
||||||
|
env:
|
||||||
|
KALDIFEAT_PYTHON_VERSION: ${{ matrix.python-version}}
|
||||||
|
KALDIFEAT_TORCH_VERSION: ${{ matrix.torch }}
|
||||||
|
KALDIFEAT_CONDA_TOKEN: ${{ secrets.KALDIFEAT_CONDA_TOKEN}}
|
||||||
|
KALDIFEAT_IS_GITHUB_ACTIONS: 1
|
||||||
|
KALDIFEAT_IS_FOR_CONDA: 1
|
||||||
|
run: |
|
||||||
|
export KALDIFEAT_BUILD_TYPE=$KALDIFEAT_BUILD_TYPE
|
||||||
|
./scripts/build_conda_cpu.sh
|
||||||
|
|
||||||
|
- name: Display generated files
|
||||||
|
run: |
|
||||||
|
ls -lh /usr/share/miniconda/envs/kaldifeat/conda-bld/linux-64
|
||||||
|
|
||||||
|
- name: Upload generated files
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: cpu-torch-${{ matrix.torch }}-python-${{ matrix.python-version }}-${{ matrix.os }}
|
||||||
|
path: /usr/share/miniconda/envs/kaldifeat/conda-bld/linux-64/*.tar.bz2
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
# refer to https://github.com/actions/starter-workflows/pull/47/files
|
# refer to https://github.com/actions/starter-workflows/pull/47/files
|
||||||
|
|
||||||
name: build_conda_cuda
|
name: build_conda_ubuntu_cuda
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@ -27,70 +27,30 @@ env:
|
|||||||
KALDIFEAT_BUILD_TYPE: Release
|
KALDIFEAT_BUILD_TYPE: Release
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build_conda_cuda:
|
generate_build_matrix:
|
||||||
runs-on: ${{ matrix.os }}
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py --enable-cuda
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py --enable-cuda)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
build_conda_ubuntu_cuda:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-18.04]
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
# anaconda does not support 3.9 as of 2021.05.08
|
|
||||||
python-version: [3.6, 3.7, 3.8, 3.9]
|
|
||||||
# python-version: [3.6, 3.7, 3.8]
|
|
||||||
cuda: ["10.1", "10.2", "11.0", "11.1"]
|
|
||||||
# from https://download.pytorch.org/whl/torch_stable.html
|
|
||||||
#
|
|
||||||
# PyTorch 1.9.0 supports: 10.2 (default), 11.1
|
|
||||||
# PyTorch 1.8.1 supports: cuda 10.1, 10.2 (default), 11.1
|
|
||||||
# PyTorch 1.8.0 supports: cuda 10.1, 10.2 (default), 11.1
|
|
||||||
# PyTorch 1.7.x supports: cuda 10.1, 10.2 (default), 11.0, 9.2 (not included in this setup)
|
|
||||||
# PyTorch 1.6.0 supports: cuda 10.1, 10.2 (default), 9.2 (not included in this setup)
|
|
||||||
# PyTorch 1.5.x supports: cuda 10.1, 10.2 (default), 9.2 (not included in this setup)
|
|
||||||
#
|
|
||||||
# PyTorch 1.8.x and 1.7.1 support 3.6, 3.7, 3.8, 3.9
|
|
||||||
# PyTorch 1.7.0, 1.6.0, and 1.5.x support 3.6, 3.7, 3.8
|
|
||||||
#
|
|
||||||
# Other PyTorch versions are not tested
|
|
||||||
#
|
|
||||||
# torch: ["1.5.0", "1.5.1", "1.6.0", "1.7.0", "1.7.1", "1.8.0", "1.8.1"]
|
|
||||||
# 1.5.x is removed because there are compilation errors.
|
|
||||||
# See
|
|
||||||
# https://github.com/csukuangfj/k2/runs/2533830771?check_suite_focus=true
|
|
||||||
# and
|
|
||||||
# https://github.com/NVIDIA/apex/issues/805
|
|
||||||
torch: ["1.6.0", "1.7.0", "1.7.1", "1.8.0", "1.8.1", "1.9.0"]
|
|
||||||
exclude:
|
|
||||||
# - cuda: "11.0" # exclude 11.0 for [1.5.0, 1.5.1, 1.6.0, 1.8.0, 1.8.1, 1.9.0]
|
|
||||||
# torch: "1.5.0"
|
|
||||||
# - cuda: "11.0"
|
|
||||||
# torch: "1.5.1"
|
|
||||||
- cuda: "11.0"
|
|
||||||
torch: "1.6.0"
|
|
||||||
- cuda: "11.0"
|
|
||||||
torch: "1.8.0"
|
|
||||||
- cuda: "11.0"
|
|
||||||
torch: "1.8.1"
|
|
||||||
- cuda: "11.0"
|
|
||||||
torch: "1.9.0"
|
|
||||||
# - cuda: "11.1" # exclude 11.1 for [1.5.0, 1.5.1, 1.6.0, 1.7.0, 1.7.1]
|
|
||||||
# torch: "1.5.0"
|
|
||||||
# - cuda: "11.1"
|
|
||||||
# torch: "1.5.1"
|
|
||||||
- cuda: "11.1"
|
|
||||||
torch: "1.6.0"
|
|
||||||
- cuda: "11.1"
|
|
||||||
torch: "1.7.0"
|
|
||||||
- cuda: "11.1"
|
|
||||||
torch: "1.7.1"
|
|
||||||
- cuda: "10.1" # exclude 10.1 for [1.9.0]
|
|
||||||
torch: "1.9.0"
|
|
||||||
- python-version: 3.9 # exclude Python 3.9 for [1.5.0, 1.5.1, 1.6.0, 1.7.0]
|
|
||||||
torch: "1.5.0"
|
|
||||||
- python-version: 3.9
|
|
||||||
torch: "1.5.1"
|
|
||||||
- python-version: 3.9
|
|
||||||
torch: "1.6.0"
|
|
||||||
- python-version: 3.9
|
|
||||||
torch: "1.7.0"
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# refer to https://github.com/actions/checkout
|
# refer to https://github.com/actions/checkout
|
||||||
@ -131,7 +91,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
conda install -y -q anaconda-client
|
conda install -y -q anaconda-client
|
||||||
conda install -y -q conda-build
|
conda install -y -q conda-build
|
||||||
conda install -y -q bs4 requests tqdm
|
|
||||||
conda install -y -q -c pytorch -c conda-forge pytorch=${{ matrix.torch }} cudatoolkit=${{ matrix.cuda }}
|
conda install -y -q -c pytorch -c conda-forge pytorch=${{ matrix.torch }} cudatoolkit=${{ matrix.cuda }}
|
||||||
|
|
||||||
- name: Display conda info
|
- name: Display conda info
|
||||||
@ -161,3 +120,13 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
export KALDIFEAT_BUILD_TYPE=$KALDIFEAT_BUILD_TYPE
|
export KALDIFEAT_BUILD_TYPE=$KALDIFEAT_BUILD_TYPE
|
||||||
./scripts/build_conda.sh
|
./scripts/build_conda.sh
|
||||||
|
|
||||||
|
- name: Display generated files
|
||||||
|
run: |
|
||||||
|
ls -lh /usr/share/miniconda/envs/kaldifeat/conda-bld/linux-64
|
||||||
|
|
||||||
|
- name: Upload generated files
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: cuda-${{ matrix.cuda }}-torch-${{ matrix.torch }}-python-${{ matrix.python-version }}-${{ matrix.os }}
|
||||||
|
path: /usr/share/miniconda/envs/kaldifeat/conda-bld/linux-64/*.tar.bz2
|
116
.github/workflows/nightly-tests-macos-cpu.yml
vendored
Normal file
116
.github/workflows/nightly-tests-macos-cpu.yml
vendored
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
name: Nightly tests macos cpu
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# minute (0-59)
|
||||||
|
# hour (0-23)
|
||||||
|
# day of the month (1-31)
|
||||||
|
# month (1-12)
|
||||||
|
# day of the week (0-6)
|
||||||
|
# nightly build at 23:50 UTC time every day
|
||||||
|
- cron: "50 23 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
enable_nightly_build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
enabled: ${{ steps.set-enabled.outputs.enabled }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Set enabled
|
||||||
|
id: set-enabled
|
||||||
|
run: |
|
||||||
|
enabled=$(python scripts/github_actions/run-nightly-build.py)
|
||||||
|
echo "enabled: $enabled"
|
||||||
|
echo "::set-output name=enabled::${enabled}"
|
||||||
|
|
||||||
|
generate_build_matrix:
|
||||||
|
needs: enable_nightly_build
|
||||||
|
if: needs.enable_nightly_build.outputs.enabled == 'true'
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_nightly_tests_macos_cpu:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: macos-10.15
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Display Python version
|
||||||
|
run: python -c "import sys; print(sys.version)"
|
||||||
|
|
||||||
|
- name: Display clang version
|
||||||
|
run: |
|
||||||
|
clang --version
|
||||||
|
|
||||||
|
- name: Install PyTorch ${{ matrix.torch }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
python3 -m pip install -qq --upgrade pip
|
||||||
|
python3 -m pip install -qq wheel twine numpy typing_extensions
|
||||||
|
python3 -m pip install -qq torch==${{ matrix.torch }} numpy
|
||||||
|
python3 -m pip install -qq dataclasses soundfile
|
||||||
|
|
||||||
|
python3 -c "import torch; print('torch version:', torch.__version__)"
|
||||||
|
|
||||||
|
- name: Install from PyPI
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
export KALDIFEAT_MAKE_ARGS="-j 3"
|
||||||
|
pip install --verbose kaldifeat
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
lib_path=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
|
||||||
|
echo "lib_path: $lib_path"
|
||||||
|
ls -lh $lib_path
|
||||||
|
# export DYLD_LIBRARY_PATH=$lib_path:$DYLD_LIBRARY_PATH
|
||||||
|
otool -L $lib_path/_kaldifeat.*.so
|
||||||
|
otool -l $lib_path/_kaldifeat.*.so
|
||||||
|
|
||||||
|
cd kaldifeat/python/tests
|
||||||
|
make test
|
100
.github/workflows/nightly-tests-ubuntu-conda-cpu.yml
vendored
Normal file
100
.github/workflows/nightly-tests-ubuntu-conda-cpu.yml
vendored
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
name: Nightly tests ubuntu conda cpu
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# minute (0-59)
|
||||||
|
# hour (0-23)
|
||||||
|
# day of the month (1-31)
|
||||||
|
# month (1-12)
|
||||||
|
# day of the week (0-6)
|
||||||
|
# nightly build at 23:50 UTC time every day
|
||||||
|
- cron: "50 23 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
enable_nightly_build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
enabled: ${{ steps.set-enabled.outputs.enabled }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Set enabled
|
||||||
|
id: set-enabled
|
||||||
|
run: |
|
||||||
|
enabled=$(python scripts/github_actions/run-nightly-build.py)
|
||||||
|
echo "enabled: $enabled"
|
||||||
|
echo "::set-output name=enabled::${enabled}"
|
||||||
|
|
||||||
|
generate_build_matrix:
|
||||||
|
needs: enable_nightly_build
|
||||||
|
if: needs.enable_nightly_build.outputs.enabled == 'true'
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py --test-only-latest-torch
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py --test-only-latest-torch)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_nightly_tests_ubuntu_conda_cpu:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: conda-incubator/setup-miniconda@v2
|
||||||
|
with:
|
||||||
|
auto-update-conda: true
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
activate-environment: kaldifeat
|
||||||
|
|
||||||
|
- name: Display Python version
|
||||||
|
shell: bash -l {0}
|
||||||
|
run: |
|
||||||
|
python3 -c "import sys; print(sys.version)"
|
||||||
|
which python3
|
||||||
|
|
||||||
|
- name: Install kaldifeat and run tests
|
||||||
|
shell: bash -l {0}
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y libsndfile1-dev libsndfile1 ffmpeg
|
||||||
|
|
||||||
|
conda install -y -c kaldifeat -c pytorch cpuonly pytorch=${{ matrix.torch }} kaldifeat python=${{ matrix.python-version }}
|
||||||
|
conda install -y -c conda-forge pysoundfile
|
||||||
|
|
||||||
|
|
||||||
|
cd kaldifeat/python/tests
|
||||||
|
make test
|
96
.github/workflows/nightly-tests-ubuntu-conda-cuda.yml
vendored
Normal file
96
.github/workflows/nightly-tests-ubuntu-conda-cuda.yml
vendored
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
name: Nightly tests ubuntu conda cuda
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# minute (0-59)
|
||||||
|
# hour (0-23)
|
||||||
|
# day of the month (1-31)
|
||||||
|
# month (1-12)
|
||||||
|
# day of the week (0-6)
|
||||||
|
# nightly build at 23:50 UTC time every day
|
||||||
|
- cron: "50 23 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
enable_nightly_build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
enabled: ${{ steps.set-enabled.outputs.enabled }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Set enabled
|
||||||
|
id: set-enabled
|
||||||
|
run: |
|
||||||
|
enabled=$(python scripts/github_actions/run-nightly-build.py)
|
||||||
|
echo "enabled: $enabled"
|
||||||
|
echo "::set-output name=enabled::${enabled}"
|
||||||
|
|
||||||
|
generate_build_matrix:
|
||||||
|
needs: enable_nightly_build
|
||||||
|
if: needs.enable_nightly_build.outputs.enabled == 'true'
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py --enable-cuda --test-only-latest-torch
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py --enable-cuda --test-only-latest-torch)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_nightly_tests_ubuntu_conda_cuda:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: conda-incubator/setup-miniconda@v2
|
||||||
|
with:
|
||||||
|
auto-update-conda: true
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
activate-environment: kaldifeat
|
||||||
|
|
||||||
|
- name: Display Python version
|
||||||
|
shell: bash -l {0}
|
||||||
|
run: |
|
||||||
|
python3 -c "import sys; print(sys.version)"
|
||||||
|
which python3
|
||||||
|
|
||||||
|
- name: Install kaldifeat and run tests
|
||||||
|
shell: bash -l {0}
|
||||||
|
run: |
|
||||||
|
conda install -y -c kaldifeat -c pytorch -c conda-forge pytorch=${{ matrix.torch }} cudatoolkit=${{ matrix.cuda }} kaldifeat python=${{ matrix.python-version }}
|
||||||
|
conda install -y -c conda-forge pysoundfile
|
||||||
|
|
||||||
|
cd kaldifeat/python/tests
|
||||||
|
make test
|
118
.github/workflows/nightly-tests-ubuntu-pip-cpu.yml
vendored
Normal file
118
.github/workflows/nightly-tests-ubuntu-pip-cpu.yml
vendored
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
name: Nightly tests ubuntu pip cpu
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# minute (0-59)
|
||||||
|
# hour (0-23)
|
||||||
|
# day of the month (1-31)
|
||||||
|
# month (1-12)
|
||||||
|
# day of the week (0-6)
|
||||||
|
# nightly build at 23:50 UTC time every day
|
||||||
|
- cron: "50 23 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
enable_nightly_build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
enabled: ${{ steps.set-enabled.outputs.enabled }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Set enabled
|
||||||
|
id: set-enabled
|
||||||
|
run: |
|
||||||
|
enabled=$(python scripts/github_actions/run-nightly-build.py)
|
||||||
|
echo "enabled: $enabled"
|
||||||
|
echo "::set-output name=enabled::${enabled}"
|
||||||
|
|
||||||
|
generate_build_matrix:
|
||||||
|
needs: enable_nightly_build
|
||||||
|
if: needs.enable_nightly_build.outputs.enabled == 'true'
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_nightly_tests_ubuntu_pip_cpu:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Display Python version
|
||||||
|
run: python -c "import sys; print(sys.version)"
|
||||||
|
|
||||||
|
- name: Install GCC 7
|
||||||
|
run: |
|
||||||
|
sudo apt-get install -y gcc-7 g++-7
|
||||||
|
echo "CC=/usr/bin/gcc-7" >> $GITHUB_ENV
|
||||||
|
echo "CXX=/usr/bin/g++-7" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Display GCC version
|
||||||
|
run: |
|
||||||
|
gcc --version
|
||||||
|
|
||||||
|
- name: Install PyTorch ${{ matrix.torch }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y libsndfile1-dev libsndfile1 ffmpeg
|
||||||
|
|
||||||
|
python3 -m pip install -qq --upgrade pip
|
||||||
|
python3 -m pip install -qq wheel twine typing_extensions numpy soundfile
|
||||||
|
python3 -m pip install -qq torch==${{ matrix.torch }}+cpu -f https://download.pytorch.org/whl/torch_stable.html
|
||||||
|
python3 -m pip install -qq dataclasses
|
||||||
|
|
||||||
|
python3 -c "import torch; print('torch version:', torch.__version__)"
|
||||||
|
|
||||||
|
- name: Install from PyPI
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
export KALDIFEAT_MAKE_ARGS="-j 3"
|
||||||
|
pip install --verbose kaldifeat
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd kaldifeat/python/tests
|
||||||
|
make test
|
@ -14,23 +14,61 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
name: Publish to PyPI
|
name: Nightly tests ubuntu pip cuda
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
schedule:
|
||||||
tags:
|
# minute (0-59)
|
||||||
- '*'
|
# hour (0-23)
|
||||||
|
# day of the month (1-31)
|
||||||
|
# month (1-12)
|
||||||
|
# day of the week (0-6)
|
||||||
|
# nightly build at 23:50 UTC time every day
|
||||||
|
- cron: "50 23 * * *"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pypi:
|
enable_nightly_build:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
enabled: ${{ steps.set-enabled.outputs.enabled }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Set enabled
|
||||||
|
id: set-enabled
|
||||||
|
run: |
|
||||||
|
enabled=$(python scripts/github_actions/run-nightly-build.py)
|
||||||
|
echo "enabled: $enabled"
|
||||||
|
echo "::set-output name=enabled::${enabled}"
|
||||||
|
|
||||||
|
generate_build_matrix:
|
||||||
|
needs: enable_nightly_build
|
||||||
|
if: needs.enable_nightly_build.outputs.enabled == 'true'
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py --enable-cuda
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py --enable-cuda)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_nightly_tests_ubuntu_pip_cuda:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-18.04, macos-10.15]
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
cuda: ["10.1"]
|
|
||||||
torch: ["1.7.1"]
|
|
||||||
python-version: [3.6, 3.7, 3.8]
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
@ -42,15 +80,12 @@ jobs:
|
|||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
- name: Install GCC 7
|
- name: Install GCC 7
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get install -y gcc-7 g++-7
|
sudo apt-get install -y gcc-7 g++-7
|
||||||
echo "CC=/usr/bin/gcc-7" >> $GITHUB_ENV
|
echo "CC=/usr/bin/gcc-7" >> $GITHUB_ENV
|
||||||
echo "CXX=/usr/bin/g++-7" >> $GITHUB_ENV
|
echo "CXX=/usr/bin/g++-7" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
|
||||||
- name: Install CUDA Toolkit ${{ matrix.cuda }}
|
- name: Install CUDA Toolkit ${{ matrix.cuda }}
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
cuda: ${{ matrix.cuda }}
|
cuda: ${{ matrix.cuda }}
|
||||||
@ -61,61 +96,39 @@ jobs:
|
|||||||
echo "LD_LIBRARY_PATH=${CUDA_HOME}/lib:${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}" >> $GITHUB_ENV
|
echo "LD_LIBRARY_PATH=${CUDA_HOME}/lib:${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Display NVCC version
|
- name: Display NVCC version
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
|
||||||
run: |
|
run: |
|
||||||
which nvcc
|
which nvcc
|
||||||
nvcc --version
|
nvcc --version
|
||||||
|
|
||||||
- name: Install PyTorch ${{ matrix.torch }}
|
- name: Install PyTorch ${{ matrix.torch }}
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
|
||||||
env:
|
env:
|
||||||
cuda: ${{ matrix.cuda }}
|
cuda: ${{ matrix.cuda }}
|
||||||
torch: ${{ matrix.torch }}
|
torch: ${{ matrix.torch }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y libsndfile1-dev libsndfile1 ffmpeg
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
python3 -m pip install wheel twine typing_extensions
|
python3 -m pip install wheel twine typing_extensions soundfile
|
||||||
python3 -m pip install bs4 requests tqdm
|
python3 -m pip install bs4 requests tqdm numpy
|
||||||
|
|
||||||
./scripts/github_actions/install_torch.sh
|
./scripts/github_actions/install_torch.sh
|
||||||
python3 -c "import torch; print('torch version:', torch.__version__)"
|
python3 -c "import torch; print('torch version:', torch.__version__)"
|
||||||
|
|
||||||
- name: Install PyTorch ${{ matrix.torch }}
|
|
||||||
if: startsWith(matrix.os, 'macos')
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
python3 -m pip install -qq --upgrade pip
|
|
||||||
python3 -m pip install -qq wheel twine typing_extensions
|
|
||||||
python3 -m pip install -qq torch==${{ matrix.torch }}
|
|
||||||
|
|
||||||
python3 -c "import torch; print('torch version:', torch.__version__)"
|
|
||||||
|
|
||||||
- name: Download cudnn 8.0
|
- name: Download cudnn 8.0
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
|
||||||
env:
|
env:
|
||||||
cuda: ${{ matrix.cuda }}
|
cuda: ${{ matrix.cuda }}
|
||||||
run: |
|
run: |
|
||||||
./scripts/github_actions/install_cudnn.sh
|
./scripts/github_actions/install_cudnn.sh
|
||||||
|
|
||||||
- name: Build pip packages
|
- name: Install from PyPI
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
|
||||||
KALDIFEAT_IS_FOR_PYPI: 1
|
|
||||||
run: |
|
run: |
|
||||||
tag=$(python3 -c "import sys; print(''.join(sys.version[:3].split('.')))")
|
export KALDIFEAT_MAKE_ARGS="-j 3"
|
||||||
export KALDIFEAT_MAKE_ARGS="-j2"
|
pip install --verbose kaldifeat
|
||||||
python3 setup.py bdist_wheel --python-tag=py${tag}
|
|
||||||
ls -lh dist/
|
|
||||||
|
|
||||||
- name: Publish wheels to PyPI
|
- name: Run tests
|
||||||
env:
|
shell: bash
|
||||||
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
|
|
||||||
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
|
||||||
run: |
|
run: |
|
||||||
twine upload dist/kaldifeat-*.whl
|
cd kaldifeat/python/tests
|
||||||
|
make test
|
||||||
- name: Upload Wheel
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: torch-${{ matrix.torch }}-python-${{ matrix.python-version }}-${{ matrix.os }}
|
|
||||||
path: dist/*.whl
|
|
119
.github/workflows/nightly-tests-windows-pip-cpu.yml
vendored
Normal file
119
.github/workflows/nightly-tests-windows-pip-cpu.yml
vendored
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
name: Nightly tests windows pip cpu
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# minute (0-59)
|
||||||
|
# hour (0-23)
|
||||||
|
# day of the month (1-31)
|
||||||
|
# month (1-12)
|
||||||
|
# day of the week (0-6)
|
||||||
|
# nightly build at 23:50 UTC time every day
|
||||||
|
- cron: "50 23 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
enable_nightly_build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
enabled: ${{ steps.set-enabled.outputs.enabled }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Set enabled
|
||||||
|
id: set-enabled
|
||||||
|
run: |
|
||||||
|
enabled=$(python scripts/github_actions/run-nightly-build.py)
|
||||||
|
echo "enabled: $enabled"
|
||||||
|
echo "::set-output name=enabled::${enabled}"
|
||||||
|
|
||||||
|
generate_build_matrix:
|
||||||
|
needs: enable_nightly_build
|
||||||
|
if: needs.enable_nightly_build.outputs.enabled == 'true'
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_nightly_tests_windows_pip_cpu:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: windows-2019
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
# see https://github.com/microsoft/setup-msbuild
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.2
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Display Python version
|
||||||
|
run: python -c "import sys; print(sys.version)"
|
||||||
|
|
||||||
|
- name: Install PyTorch ${{ matrix.torch }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
python3 -m pip install -qq --upgrade pip
|
||||||
|
python3 -m pip install -qq wheel twine numpy typing_extensions
|
||||||
|
python3 -m pip install -qq dataclasses soundfile numpy
|
||||||
|
python3 -m pip install -qq torch==${{ matrix.torch }}+cpu -f https://download.pytorch.org/whl/torch_stable.html
|
||||||
|
|
||||||
|
python3 -c "import torch; print('torch version:', torch.__version__)"
|
||||||
|
|
||||||
|
- name: Install from PyPI
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
export KALDIFEAT_MAKE_ARGS="-j 3"
|
||||||
|
pip install --verbose kaldifeat
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd kaldifeat/python/tests
|
||||||
|
|
||||||
|
python3 ./test_fbank.py
|
||||||
|
python3 ./test_fbank_options.py
|
||||||
|
python3 ./test_frame_extraction_options.py
|
||||||
|
python3 ./test_mel_bank_options.py
|
||||||
|
python3 ./test_mfcc.py
|
||||||
|
python3 ./test_mfcc_options.py
|
||||||
|
python3 ./test_plp.py
|
||||||
|
python3 ./test_plp_options.py
|
||||||
|
python3 ./test_spectrogram.py
|
||||||
|
python3 ./test_spectrogram_options.py
|
160
.github/workflows/nightly-tests-windows-pip-cuda.yml
vendored
Normal file
160
.github/workflows/nightly-tests-windows-pip-cuda.yml
vendored
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
name: Nightly tests windows pip cuda
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# minute (0-59)
|
||||||
|
# hour (0-23)
|
||||||
|
# day of the month (1-31)
|
||||||
|
# month (1-12)
|
||||||
|
# day of the week (0-6)
|
||||||
|
# nightly build at 23:50 UTC time every day
|
||||||
|
- cron: "50 23 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
enable_nightly_build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
enabled: ${{ steps.set-enabled.outputs.enabled }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Set enabled
|
||||||
|
id: set-enabled
|
||||||
|
run: |
|
||||||
|
enabled=$(python scripts/github_actions/run-nightly-build.py)
|
||||||
|
echo "enabled: $enabled"
|
||||||
|
echo "::set-output name=enabled::${enabled}"
|
||||||
|
|
||||||
|
generate_build_matrix:
|
||||||
|
needs: enable_nightly_build
|
||||||
|
if: needs.enable_nightly_build.outputs.enabled == 'true'
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py --enable-cuda --for-windows
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py --enable-cuda --for-windows)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_nightly_tests_windows_pip_cuda:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: windows-2019
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
# see https://github.com/microsoft/setup-msbuild
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.2
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Display Python version
|
||||||
|
run: python -c "import sys; print(sys.version)"
|
||||||
|
|
||||||
|
# See https://github.com/Jimver/cuda-toolkit/blob/master/src/links/windows-links.ts
|
||||||
|
# for available CUDA versions
|
||||||
|
- uses: Jimver/cuda-toolkit@v0.2.7
|
||||||
|
id: cuda-toolkit
|
||||||
|
with:
|
||||||
|
cuda: ${{ matrix.cuda }}
|
||||||
|
|
||||||
|
- name: Display CUDA version
|
||||||
|
run: |
|
||||||
|
echo "Installed cuda version is: ${{ steps.cuda-toolkit.outputs.cuda }}"
|
||||||
|
echo "Cuda install location: ${{steps.cuda-toolkit.outputs.CUDA_PATH}}"
|
||||||
|
nvcc --version
|
||||||
|
|
||||||
|
- name: Remove CUDA installation package
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
rm "C:/hostedtoolcache/windows/cuda_installer-windows/${{ matrix.cuda }}/x64/cuda_installer_${{ matrix.cuda }}.exe"
|
||||||
|
|
||||||
|
- name: Download cuDNN
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/cudnn-for-windows
|
||||||
|
cd cudnn-for-windows
|
||||||
|
git lfs pull --include="cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive.zip"
|
||||||
|
unzip cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive.zip
|
||||||
|
rm cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive.zip
|
||||||
|
ls -lh *
|
||||||
|
ls -lh */*
|
||||||
|
|
||||||
|
echo "PWD: $PWD"
|
||||||
|
|
||||||
|
- name: Install PyTorch ${{ matrix.torch }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
version=${{ matrix.cuda }}
|
||||||
|
major=${version:0:2}
|
||||||
|
minor=${version:3:1}
|
||||||
|
v=${major}${minor}
|
||||||
|
if [ ${v} -eq 102 ]; then v=""; else v="+cu${v}"; fi
|
||||||
|
|
||||||
|
python3 -m pip install -qq --upgrade pip
|
||||||
|
python3 -m pip install -qq wheel twine numpy typing_extensions
|
||||||
|
python3 -m pip install -qq dataclasses soundfile numpy
|
||||||
|
python3 -m pip install -qq torch==${{ matrix.torch }}${v} -f https://download.pytorch.org/whl/torch_stable.html numpy
|
||||||
|
|
||||||
|
python3 -c "import torch; print('torch version:', torch.__version__)"
|
||||||
|
|
||||||
|
python3 -m torch.utils.collect_env
|
||||||
|
|
||||||
|
- name: Install from PyPI
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "PWD: $PWD"
|
||||||
|
export KALDIFEAT_CMAKE_ARGS="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCUDNN_INCLUDE_PATH=d:/a/kaldifeat/kaldifeat/cudnn-for-windows/cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive/include -DCUDNN_LIBRARY_PATH=d:/a/kaldifeat/kaldifeat/cudnn-for-windows/cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive/lib/cudnn.lib"
|
||||||
|
export KALDIFEAT_MAKE_ARGS="-j 3"
|
||||||
|
pip install --verbose kaldifeat
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd kaldifeat/python/tests
|
||||||
|
|
||||||
|
python3 ./test_fbank.py
|
||||||
|
python3 ./test_fbank_options.py
|
||||||
|
python3 ./test_frame_extraction_options.py
|
||||||
|
python3 ./test_mel_bank_options.py
|
||||||
|
python3 ./test_mfcc.py
|
||||||
|
python3 ./test_mfcc_options.py
|
||||||
|
python3 ./test_plp.py
|
||||||
|
python3 ./test_plp_options.py
|
||||||
|
python3 ./test_spectrogram.py
|
||||||
|
python3 ./test_spectrogram_options.py
|
85
.github/workflows/run-tests-macos-cpu.yml
vendored
Normal file
85
.github/workflows/run-tests-macos-cpu.yml
vendored
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
name: Run tests macos cpu
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
generate_build_matrix:
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py --test-only-latest-torch
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py --test-only-latest-torch)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_tests_macos_cpu:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: macos-10.15
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Install PyTorch ${{ matrix.torch }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
python3 -m pip install -qq --upgrade pip
|
||||||
|
python3 -m pip install -qq wheel twine typing_extensions soundfile numpy
|
||||||
|
python3 -m pip install -qq torch==${{ matrix.torch }} -f https://download.pytorch.org/whl/torch_stable.html
|
||||||
|
|
||||||
|
python3 -c "import torch; print('torch version:', torch.__version__)"
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir build_release
|
||||||
|
cd build_release
|
||||||
|
cmake ..
|
||||||
|
make VERBOSE=1 -j3
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd build_release
|
||||||
|
ctest --output-on-failure
|
94
.github/workflows/run-tests-ubuntu-cpu.yml
vendored
Normal file
94
.github/workflows/run-tests-ubuntu-cpu.yml
vendored
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
name: Run tests ubuntu cpu
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
generate_build_matrix:
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py --test-only-latest-torch
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py --test-only-latest-torch)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_tests_ubuntu_cpu:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Install GCC 7
|
||||||
|
run: |
|
||||||
|
sudo apt-get install -y gcc-7 g++-7
|
||||||
|
echo "CC=/usr/bin/gcc-7" >> $GITHUB_ENV
|
||||||
|
echo "CXX=/usr/bin/g++-7" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Install PyTorch ${{ matrix.torch }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y libsndfile1-dev libsndfile1 ffmpeg
|
||||||
|
python3 -m pip install --upgrade pip
|
||||||
|
python3 -m pip install wheel twine typing_extensions soundfile
|
||||||
|
python3 -m pip install bs4 requests tqdm numpy
|
||||||
|
python3 -m pip install -qq torch==${{ matrix.torch }}+cpu -f https://download.pytorch.org/whl/torch_stable.html
|
||||||
|
|
||||||
|
python3 -c "import torch; print('torch version:', torch.__version__)"
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir build_release
|
||||||
|
cd build_release
|
||||||
|
cmake ..
|
||||||
|
make VERBOSE=1 -j3
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd build_release
|
||||||
|
ctest --output-on-failure
|
@ -14,26 +14,43 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
name: Run tests
|
name: Run tests ubuntu cuda
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
run_tests:
|
generate_build_matrix:
|
||||||
runs-on: ${{ matrix.os }}
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py --enable-cuda --test-only-latest-torch
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py --enable-cuda --test-only-latest-torch)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_tests_ubuntu_cuda:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-18.04, macos-10.15]
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
cuda: ["10.1"]
|
|
||||||
torch: ["1.7.1"]
|
|
||||||
python-version: [3.6, 3.7, 3.8]
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
@ -53,7 +70,6 @@ jobs:
|
|||||||
|
|
||||||
|
|
||||||
- name: Install CUDA Toolkit ${{ matrix.cuda }}
|
- name: Install CUDA Toolkit ${{ matrix.cuda }}
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
cuda: ${{ matrix.cuda }}
|
cuda: ${{ matrix.cuda }}
|
||||||
@ -64,39 +80,26 @@ jobs:
|
|||||||
echo "LD_LIBRARY_PATH=${CUDA_HOME}/lib:${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}" >> $GITHUB_ENV
|
echo "LD_LIBRARY_PATH=${CUDA_HOME}/lib:${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Display NVCC version
|
- name: Display NVCC version
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
|
||||||
run: |
|
run: |
|
||||||
which nvcc
|
which nvcc
|
||||||
nvcc --version
|
nvcc --version
|
||||||
|
|
||||||
- name: Install PyTorch ${{ matrix.torch }}
|
- name: Install PyTorch ${{ matrix.torch }}
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
|
||||||
env:
|
env:
|
||||||
cuda: ${{ matrix.cuda }}
|
cuda: ${{ matrix.cuda }}
|
||||||
torch: ${{ matrix.torch }}
|
torch: ${{ matrix.torch }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
sudo apt update
|
sudo apt-get update
|
||||||
sudo apt install libsndfile1-dev libsndfile1 ffmpeg
|
sudo apt-get install -y libsndfile1-dev libsndfile1 ffmpeg
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
python3 -m pip install wheel twine typing_extensions soundfile
|
python3 -m pip install wheel twine typing_extensions soundfile
|
||||||
python3 -m pip install bs4 requests tqdm
|
python3 -m pip install bs4 requests tqdm numpy
|
||||||
|
|
||||||
./scripts/github_actions/install_torch.sh
|
./scripts/github_actions/install_torch.sh
|
||||||
python3 -c "import torch; print('torch version:', torch.__version__)"
|
python3 -c "import torch; print('torch version:', torch.__version__)"
|
||||||
|
|
||||||
- name: Install PyTorch ${{ matrix.torch }}
|
|
||||||
if: startsWith(matrix.os, 'macos')
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
python3 -m pip install -qq --upgrade pip
|
|
||||||
python3 -m pip install -qq wheel twine typing_extensions soundfile
|
|
||||||
python3 -m pip install -qq torch==${{ matrix.torch }}
|
|
||||||
|
|
||||||
python3 -c "import torch; print('torch version:', torch.__version__)"
|
|
||||||
|
|
||||||
- name: Download cudnn 8.0
|
- name: Download cudnn 8.0
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
|
||||||
env:
|
env:
|
||||||
cuda: ${{ matrix.cuda }}
|
cuda: ${{ matrix.cuda }}
|
||||||
run: |
|
run: |
|
||||||
@ -108,10 +111,10 @@ jobs:
|
|||||||
mkdir build_release
|
mkdir build_release
|
||||||
cd build_release
|
cd build_release
|
||||||
cmake ..
|
cmake ..
|
||||||
make VERBOSE=1
|
make VERBOSE=1 -j3
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd build_release
|
cd build_release
|
||||||
ctest -R py --output-on-failure
|
ctest --output-on-failure
|
@ -1,23 +1,56 @@
|
|||||||
name: build
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
name: Run tests windows cpu
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-windows:
|
generate_build_matrix:
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py --test-only-latest-torch
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py --test-only-latest-torch)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_tests_windows_cpu:
|
||||||
# see https://github.com/actions/virtual-environments/blob/win19/20210525.0/images/win/Windows2019-Readme.md
|
# see https://github.com/actions/virtual-environments/blob/win19/20210525.0/images/win/Windows2019-Readme.md
|
||||||
runs-on: ${{ matrix.os }}
|
needs: generate_build_matrix
|
||||||
|
runs-on: windows-2019
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [windows-2019]
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
torch: ["1.6.0", "1.7.0", "1.7.1", "1.8.0", "1.8.1", "1.9.0", "1.10.0", "1.11.0"]
|
|
||||||
python-version: [3.6, 3.7, 3.8, 3.9]
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
173
.github/workflows/run-tests-windows-cuda.yml
vendored
Normal file
173
.github/workflows/run-tests-windows-cuda.yml
vendored
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
|
||||||
|
# See ../../LICENSE for clarification regarding multiple authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
|
name: Run tests windows cuda
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
generate_build_matrix:
|
||||||
|
# see https://github.com/pytorch/pytorch/pull/50633
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generating build matrix
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
# outputting for debugging purposes
|
||||||
|
python scripts/github_actions/generate_build_matrix.py --enable-cuda --for-windows --test-only-latest-torch
|
||||||
|
MATRIX=$(python scripts/github_actions/generate_build_matrix.py --enable-cuda --for-windows --test-only-latest-torch)
|
||||||
|
echo "::set-output name=matrix::${MATRIX}"
|
||||||
|
|
||||||
|
run_tests_windows_cuda:
|
||||||
|
needs: generate_build_matrix
|
||||||
|
runs-on: windows-2019
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
${{ fromJson(needs.generate_build_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
# see https://github.com/microsoft/setup-msbuild
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.2
|
||||||
|
|
||||||
|
- name: Setup Python ${{ matrix.python-version }}
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Display Python version
|
||||||
|
run: python -c "import sys; print(sys.version)"
|
||||||
|
|
||||||
|
# See https://github.com/Jimver/cuda-toolkit/blob/master/src/links/windows-links.ts
|
||||||
|
# for available CUDA versions
|
||||||
|
- uses: Jimver/cuda-toolkit@v0.2.7
|
||||||
|
id: cuda-toolkit
|
||||||
|
with:
|
||||||
|
cuda: ${{ matrix.cuda }}
|
||||||
|
|
||||||
|
- name: Display CUDA version
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "Installed cuda version is: ${{ steps.cuda-toolkit.outputs.cuda }}"
|
||||||
|
echo "Cuda install location: ${{steps.cuda-toolkit.outputs.CUDA_PATH}}"
|
||||||
|
nvcc --version
|
||||||
|
|
||||||
|
- name: Remove CUDA installation package
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
rm "C:/hostedtoolcache/windows/cuda_installer-windows/${{ matrix.cuda }}/x64/cuda_installer_${{ matrix.cuda }}.exe"
|
||||||
|
|
||||||
|
- name: Download cuDNN
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/cudnn-for-windows
|
||||||
|
cd cudnn-for-windows
|
||||||
|
git lfs pull --include="cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive.zip"
|
||||||
|
unzip cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive.zip
|
||||||
|
rm cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive.zip
|
||||||
|
ls -lh *
|
||||||
|
ls -lh */*
|
||||||
|
|
||||||
|
echo "PWD: $PWD"
|
||||||
|
|
||||||
|
- name: Install PyTorch ${{ matrix.torch }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
version=${{ matrix.cuda }}
|
||||||
|
major=${version:0:2}
|
||||||
|
minor=${version:3:1}
|
||||||
|
v=${major}${minor}
|
||||||
|
if [ ${v} -eq 102 ]; then v=""; else v="+cu${v}"; fi
|
||||||
|
|
||||||
|
python3 -m pip install -qq --upgrade pip
|
||||||
|
python3 -m pip install -qq wheel twine numpy typing_extensions
|
||||||
|
python3 -m pip install -qq dataclasses soundfile numpy
|
||||||
|
python3 -m pip install -qq torch==${{ matrix.torch }}${v} -f https://download.pytorch.org/whl/torch_stable.html numpy
|
||||||
|
|
||||||
|
python3 -c "import torch; print('torch version:', torch.__version__)"
|
||||||
|
|
||||||
|
python3 -m torch.utils.collect_env
|
||||||
|
|
||||||
|
- name: Display CMake version
|
||||||
|
run: |
|
||||||
|
cmake --version
|
||||||
|
cmake --help
|
||||||
|
|
||||||
|
- name: Configure CMake
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "PWD: $PWD"
|
||||||
|
ls -lh
|
||||||
|
|
||||||
|
mkdir build_release
|
||||||
|
cd build_release
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCUDNN_INCLUDE_PATH=d:/a/kaldifeat/kaldifeat/cudnn-for-windows/cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive/include -DCUDNN_LIBRARY_PATH=d:/a/kaldifeat/kaldifeat/cudnn-for-windows/cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive/lib/cudnn.lib ..
|
||||||
|
ls -lh
|
||||||
|
|
||||||
|
- name: Build kaldifeat
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd build_release
|
||||||
|
cmake --build . --target _kaldifeat --config Release
|
||||||
|
|
||||||
|
- name: Display generated files
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd build_release
|
||||||
|
ls -lh lib/*/*
|
||||||
|
|
||||||
|
- name: Build wheel
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo $PWD
|
||||||
|
ls -lh ./*
|
||||||
|
export KALDIFEAT_CMAKE_ARGS="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCUDNN_INCLUDE_PATH=d:/a/kaldifeat/kaldifeat/cudnn-for-windows/cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive/include -DCUDNN_LIBRARY_PATH=d:/a/kaldifeat/kaldifeat/cudnn-for-windows/cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive/lib/cudnn.lib"
|
||||||
|
python3 setup.py bdist_wheel
|
||||||
|
ls -lh dist/
|
||||||
|
pip install ./dist/*.whl
|
||||||
|
python3 -c "import kaldifeat; print(kaldifeat.__version__)"
|
||||||
|
|
||||||
|
- name: Upload Wheel
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: python-${{ matrix.python-version }}-${{ matrix.os }}-cuda-${{ matrix.cuda }}
|
||||||
|
path: dist/*.whl
|
||||||
|
|
||||||
|
- name: Build tests
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd build_release
|
||||||
|
cmake --build . --target ALL_BUILD --config Release
|
||||||
|
ls -lh bin/*/*
|
||||||
|
ctest -C Release --verbose --output-on-failure
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,3 +5,4 @@ dist/
|
|||||||
__pycache__/
|
__pycache__/
|
||||||
test-1hour.wav
|
test-1hour.wav
|
||||||
path.sh
|
path.sh
|
||||||
|
torch_version.py
|
||||||
|
@ -6,7 +6,8 @@ project(kaldifeat)
|
|||||||
|
|
||||||
# remember to change the version in
|
# remember to change the version in
|
||||||
# scripts/conda/kaldifeat/meta.yaml
|
# scripts/conda/kaldifeat/meta.yaml
|
||||||
set(kaldifeat_VERSION "1.14")
|
# scripts/conda-cpu/kaldifeat/meta.yaml
|
||||||
|
set(kaldifeat_VERSION "1.16")
|
||||||
|
|
||||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
||||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
||||||
@ -51,5 +52,23 @@ if(kaldifeat_BUILD_TESTS)
|
|||||||
enable_testing()
|
enable_testing()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# TORCH_VERSION is defined in cmake/torch.cmake
|
||||||
|
configure_file(
|
||||||
|
${CMAKE_SOURCE_DIR}/kaldifeat/python/kaldifeat/torch_version.py.in
|
||||||
|
${CMAKE_SOURCE_DIR}/kaldifeat/python/kaldifeat/torch_version.py @ONLY
|
||||||
|
)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
# disable various warnings for MSVC
|
||||||
|
# 4624: destructor was implicitly defined as deleted because a base class destructor is inaccessible or deleted
|
||||||
|
set(disabled_warnings
|
||||||
|
/wd4624
|
||||||
|
)
|
||||||
|
message(STATUS "Disabled warnings: ${disabled_warnings}")
|
||||||
|
foreach(w IN LISTS disabled_warnings)
|
||||||
|
string(APPEND CMAKE_CXX_FLAGS " ${w} ")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
include_directories(${CMAKE_SOURCE_DIR})
|
include_directories(${CMAKE_SOURCE_DIR})
|
||||||
add_subdirectory(kaldifeat)
|
add_subdirectory(kaldifeat)
|
||||||
|
78
README.md
78
README.md
@ -1,12 +1,16 @@
|
|||||||
# kaldifeat
|
# kaldifeat
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="/doc/source/images/os.svg">
|
<img src="/doc/source/images/os-green.svg">
|
||||||
<img src="/doc/source/images/python_ge_3.6-blue.svg">
|
<img src="/doc/source/images/python_ge_3.6-blue.svg">
|
||||||
<img src="/doc/source/images/pytorch_ge_1.5.0-green.svg">
|
<img src="/doc/source/images/pytorch_ge_1.5.0-green.svg">
|
||||||
<img src="/doc/source/images/cuda_ge_10.1-orange.svg">
|
<img src="/doc/source/images/cuda_ge_10.1-orange.svg">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
[](https://csukuangfj.github.io/kaldifeat/)
|
||||||
|
|
||||||
|
**Documentation**: <https://csukuangfj.github.io/kaldifeat>
|
||||||
|
|
||||||
<sub>
|
<sub>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -268,67 +272,15 @@ See <https://github.com/k2-fsa/k2/blob/v2.0-pre/k2/torch/csrc/features.cu>.
|
|||||||
|
|
||||||
See <https://github.com/lhotse-speech/lhotse/blob/master/lhotse/features/kaldifeat.py>.
|
See <https://github.com/lhotse-speech/lhotse/blob/master/lhotse/features/kaldifeat.py>.
|
||||||
|
|
||||||
|
## sherpa
|
||||||
|
|
||||||
|
[sherpa](https://github.com/k2-fsa/sherpa) uses kaldifeat for streaming feature
|
||||||
|
extraction.
|
||||||
|
|
||||||
|
See <https://github.com/k2-fsa/sherpa/blob/master/sherpa/bin/pruned_stateless_emformer_rnnt2/decode.py>
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
## From conda (Only for Linux + CUDA)
|
Refer to
|
||||||
|
<https://csukuangfj.github.io/kaldifeat>
|
||||||
Supported versions of Python, PyTorch, and CUDA toolkit are listed below:
|
for installation.
|
||||||
|
|
||||||
[](/doc/source/images/python-3.6_3.7_3.8-blue.svg)
|
|
||||||
[](/doc/source/images/pytorch-1.6.0_1.7.0_1.7.1_1.8.0_1.8.1_1.9.0-green.svg)
|
|
||||||
[](/doc/source/images/cuda-10.1_10.2_11.0_11.1-orange.svg)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
conda install -c kaldifeat -c pytorch -c conda-forge kaldifeat python=3.8 cudatoolkit=11.1 pytorch=1.8.1
|
|
||||||
```
|
|
||||||
|
|
||||||
You can select the supported Python version, CUDA toolkit version and PyTorch version as you wish.
|
|
||||||
|
|
||||||
**Note:** If you want a CPU only version or want to install `kaldifeat` on other operating systems,
|
|
||||||
e.g., macOS, please use `pip install` or compile `kaldifeat` from source.
|
|
||||||
|
|
||||||
|
|
||||||
## From PyPi with pip
|
|
||||||
|
|
||||||
You need to install PyTorch and CMake first.
|
|
||||||
CMake 3.11 is known to work. Other CMake versions may also work.
|
|
||||||
PyTorch 1.6.0 and above are known to work. Other PyTorch versions may also work.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install -v kaldifeat
|
|
||||||
```
|
|
||||||
|
|
||||||
## From source
|
|
||||||
|
|
||||||
The following are the commands to compile `kaldifeat` from source.
|
|
||||||
We assume that you have installed `CMake` and PyTorch.
|
|
||||||
CMake 3.11 is known to work. Other CMake versions may also work.
|
|
||||||
PyTorch 1.6.0 and above are known to work. Other PyTorch versions may also work.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mkdir /some/path
|
|
||||||
git clone https://github.com/csukuangfj/kaldifeat.git
|
|
||||||
cd kaldifeat
|
|
||||||
python setup.py install
|
|
||||||
```
|
|
||||||
|
|
||||||
To test whether `kaldifeat` was installed successfully, you can run:
|
|
||||||
```bash
|
|
||||||
python3 -c "import kaldifeat; print(kaldifeat.__version__)"
|
|
||||||
```
|
|
||||||
|
|
||||||
## FAQs
|
|
||||||
|
|
||||||
### How to install a CUDA version
|
|
||||||
|
|
||||||
There are two approaches:
|
|
||||||
|
|
||||||
- (1) Install using `conda`. It always installs a CUDA version of kaldifeat.
|
|
||||||
- (2) Install a CUDA version of PyTorch and then install kaldifeat from source
|
|
||||||
or use `pip install kaldifeat`.
|
|
||||||
|
|
||||||
|
|
||||||
### How to install a CPU-only version
|
|
||||||
|
|
||||||
You have to first install a CPU-only version of PyTorch and then install kaldifeat
|
|
||||||
from source or use `pip install kaldifeat`.
|
|
||||||
|
@ -128,3 +128,11 @@ class BuildExtension(build_ext):
|
|||||||
for so in lib_so:
|
for so in lib_so:
|
||||||
print(f"Copying {so} to {self.build_lib}/")
|
print(f"Copying {so} to {self.build_lib}/")
|
||||||
shutil.copy(f"{so}", f"{self.build_lib}/")
|
shutil.copy(f"{so}", f"{self.build_lib}/")
|
||||||
|
|
||||||
|
print(
|
||||||
|
f"Copying {kaldifeat_dir}/kaldifeat/python/kaldifeat/torch_version.py to {self.build_lib}/kaldifeat" # noqa
|
||||||
|
)
|
||||||
|
shutil.copy(
|
||||||
|
f"{kaldifeat_dir}/kaldifeat/python/kaldifeat/torch_version.py",
|
||||||
|
f"{self.build_lib}/kaldifeat",
|
||||||
|
)
|
||||||
|
@ -8,12 +8,9 @@ function(download_pybind11)
|
|||||||
|
|
||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
|
|
||||||
set(pybind11_URL "https://github.com/pybind/pybind11/archive/v2.6.0.tar.gz")
|
set(pybind11_URL "https://github.com/pybind/pybind11/archive/v2.9.2.tar.gz")
|
||||||
set(pybind11_HASH "SHA256=90b705137b69ee3b5fc655eaca66d0dc9862ea1759226f7ccd3098425ae69571")
|
set(pybind11_HASH "SHA256=6bd528c4dbe2276635dc787b6b1f2e5316cf6b49ee3e150264e455a0d68d19c1")
|
||||||
|
|
||||||
set(double_quotes "\"")
|
|
||||||
set(dollar "\$")
|
|
||||||
set(semicolon "\;")
|
|
||||||
FetchContent_Declare(pybind11
|
FetchContent_Declare(pybind11
|
||||||
URL ${pybind11_URL}
|
URL ${pybind11_URL}
|
||||||
URL_HASH ${pybind11_HASH}
|
URL_HASH ${pybind11_HASH}
|
||||||
|
0
doc/source/_static/.gitkeep
Normal file
0
doc/source/_static/.gitkeep
Normal file
@ -1,72 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# Copyright 2021 Xiaomi Corporation (authors: Fangjun Kuang)
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
import soundfile as sf
|
|
||||||
import torch
|
|
||||||
|
|
||||||
import kaldifeat
|
|
||||||
|
|
||||||
|
|
||||||
def read_wave(filename) -> torch.Tensor:
|
|
||||||
"""Read a wave file and return it as a 1-D tensor.
|
|
||||||
|
|
||||||
Note:
|
|
||||||
You don't need to scale it to [-32768, 32767].
|
|
||||||
We use scaling here to follow the approach in Kaldi.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
filename:
|
|
||||||
Filename of a sound file.
|
|
||||||
Returns:
|
|
||||||
Return a 1-D tensor containing audio samples.
|
|
||||||
"""
|
|
||||||
with sf.SoundFile(filename) as sf_desc:
|
|
||||||
sampling_rate = sf_desc.samplerate
|
|
||||||
assert sampling_rate == 16000
|
|
||||||
data = sf_desc.read(dtype=np.float32, always_2d=False)
|
|
||||||
data *= 32768
|
|
||||||
return torch.from_numpy(data)
|
|
||||||
|
|
||||||
|
|
||||||
def test_fbank():
|
|
||||||
device = torch.device("cpu")
|
|
||||||
if torch.cuda.is_available():
|
|
||||||
device = torch.device("cuda", 0)
|
|
||||||
|
|
||||||
wave0 = read_wave("test_data/test.wav")
|
|
||||||
wave1 = read_wave("test_data/test2.wav")
|
|
||||||
|
|
||||||
wave0 = wave0.to(device)
|
|
||||||
wave1 = wave1.to(device)
|
|
||||||
|
|
||||||
opts = kaldifeat.FbankOptions()
|
|
||||||
opts.frame_opts.dither = 0
|
|
||||||
opts.device = device
|
|
||||||
|
|
||||||
fbank = kaldifeat.Fbank(opts)
|
|
||||||
|
|
||||||
# We can compute fbank features in batches
|
|
||||||
features = fbank([wave0, wave1])
|
|
||||||
assert isinstance(features, list), f"{type(features)}"
|
|
||||||
assert len(features) == 2
|
|
||||||
|
|
||||||
# We can also compute fbank features for a single wave
|
|
||||||
features0 = fbank(wave0)
|
|
||||||
features1 = fbank(wave1)
|
|
||||||
|
|
||||||
assert torch.allclose(features[0], features0)
|
|
||||||
assert torch.allclose(features[1], features1)
|
|
||||||
|
|
||||||
# To compute fbank features for only a specified frame
|
|
||||||
audio_frames = fbank.convert_samples_to_frames(wave0)
|
|
||||||
feature_frame_1 = fbank.compute(audio_frames[1])
|
|
||||||
feature_frame_10 = fbank.compute(audio_frames[10])
|
|
||||||
|
|
||||||
assert torch.allclose(features0[1], feature_frame_1)
|
|
||||||
assert torch.allclose(features0[10], feature_frame_10)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
test_fbank()
|
|
@ -59,7 +59,7 @@ templates_path = ["_templates"]
|
|||||||
# List of patterns, relative to source directory, that match files and
|
# List of patterns, relative to source directory, that match files and
|
||||||
# directories to ignore when looking for source files.
|
# directories to ignore when looking for source files.
|
||||||
# This pattern also affects html_static_path and html_extra_path.
|
# This pattern also affects html_static_path and html_extra_path.
|
||||||
exclude_patterns = []
|
exclude_patterns = ["images/*.md"]
|
||||||
|
|
||||||
source_suffix = {
|
source_suffix = {
|
||||||
".rst": "restructuredtext",
|
".rst": "restructuredtext",
|
||||||
@ -102,3 +102,35 @@ html_theme_options = {
|
|||||||
"prev_next_buttons_location": "bottom",
|
"prev_next_buttons_location": "bottom",
|
||||||
"style_external_links": True,
|
"style_external_links": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rst_epilog = """
|
||||||
|
.. _kaldifeat: https://github.com/csukuangfj/kaldifeat
|
||||||
|
.. _Kaldi: https://github.com/kaldi-asr/kaldi
|
||||||
|
.. _PyTorch: https://pytorch.org/
|
||||||
|
.. _kaldifeat.Fbank: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/fbank.py#L10
|
||||||
|
.. _kaldifeat.Mfcc: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/mfcc.py#L10
|
||||||
|
.. _kaldifeat.Plp: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/plp.py#L10
|
||||||
|
.. _kaldifeat.Spectrogram: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/spectrogram.py#L9
|
||||||
|
.. _kaldifeat.OnlineFbank: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/fbank.py#L16
|
||||||
|
.. _kaldifeat.OnlineMfcc: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/mfcc.py#L16
|
||||||
|
.. _kaldifeat.OnlinePlp: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/plp.py#L16
|
||||||
|
.. _compute-fbank-feats: https://github.com/kaldi-asr/kaldi/blob/master/src/featbin/compute-fbank-feats.cc
|
||||||
|
.. _compute-mfcc-feats: https://github.com/kaldi-asr/kaldi/blob/master/src/featbin/compute-mfcc-feats.cc
|
||||||
|
.. _compute-plp-feats: https://github.com/kaldi-asr/kaldi/blob/master/src/featbin/compute-plp-feats.cc
|
||||||
|
.. _compute-spectrogram-feats: https://github.com/kaldi-asr/kaldi/blob/master/src/featbin/compute-spectrogram-feats.cc
|
||||||
|
.. _kaldi::OnlineFbank: https://github.com/kaldi-asr/kaldi/blob/master/src/feat/online-feature.h#L160
|
||||||
|
.. _kaldi::OnlineMfcc: https://github.com/kaldi-asr/kaldi/blob/master/src/feat/online-feature.h#L158
|
||||||
|
.. _kaldi::OnlinePlp: https://github.com/kaldi-asr/kaldi/blob/master/src/feat/online-feature.h#L159
|
||||||
|
.. _kaldifeat.FbankOptions: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-fbank.h#L19
|
||||||
|
.. _kaldi::FbankOptions: https://github.com/kaldi-asr/kaldi/blob/master/src/feat/feature-fbank.h#L41
|
||||||
|
.. _kaldifeat.MfccOptions: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-mfcc.h#L22
|
||||||
|
.. _kaldi::MfccOptions: https://github.com/kaldi-asr/kaldi/blob/master/src/feat/feature-mfcc.h#L38
|
||||||
|
.. _kaldifeat.PlpOptions: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-plp.h#L24
|
||||||
|
.. _kaldi::PlpOptions: https://github.com/kaldi-asr/kaldi/blob/master/src/feat/feature-plp.h#L42
|
||||||
|
.. _kaldifeat.SpectrogramOptions: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-spectrogram.h#L18
|
||||||
|
.. _kaldi::SpectrogramOptions: https://github.com/kaldi-asr/kaldi/blob/master/src/feat/feature-spectrogram.h#L38
|
||||||
|
.. _kaldifeat.FrameExtractionOptions: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-window.h#L30
|
||||||
|
.. _kaldi::FrameExtractionOptions: https://github.com/kaldi-asr/kaldi/blob/master/src/feat/feature-window.h#L35
|
||||||
|
.. _kaldifeat.MelBanksOptions: https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/mel-computations.h#L17
|
||||||
|
.. _kaldi::MelBanksOptions: https://github.com/kaldi-asr/kaldi/blob/master/src/feat/mel-computations.h#L43
|
||||||
|
"""
|
||||||
|
8
doc/source/images/README.md
Normal file
8
doc/source/images/README.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
## File description
|
||||||
|
|
||||||
|
<https://shields.io/> is used to create the following files:
|
||||||
|
|
||||||
|
- ./os.svg
|
||||||
|
- ./python_ge_3.6-blue.svg
|
||||||
|
- ./cuda_ge_10.1-orange.svg
|
||||||
|
- ./pytorch_ge_1.5.0-green.svg
|
1
doc/source/images/os-green.svg
Normal file
1
doc/source/images/os-green.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="176" height="20" role="img" aria-label="os: Linux | macOS | Windows"><title>os: Linux | macOS | Windows</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="176" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="23" height="20" fill="#555"/><rect x="23" width="153" height="20" fill="#97ca00"/><rect width="176" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="125" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="130">os</text><text x="125" y="140" transform="scale(.1)" fill="#fff" textLength="130">os</text><text aria-hidden="true" x="985" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="1430">Linux | macOS | Windows</text><text x="985" y="140" transform="scale(.1)" fill="#fff" textLength="1430">Linux | macOS | Windows</text></g></svg>
|
After Width: | Height: | Size: 1.2 KiB |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="118" height="20" role="img" aria-label="OS: Linux | macOS"><title>OS: Linux | macOS</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="118" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="27" height="20" fill="#555"/><rect x="27" width="91" height="20" fill="#4c1"/><rect width="118" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="145" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="170">OS</text><text x="145" y="140" transform="scale(.1)" fill="#fff" textLength="170">OS</text><text aria-hidden="true" x="715" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="810">Linux | macOS</text><text x="715" y="140" transform="scale(.1)" fill="#fff" textLength="810">Linux | macOS</text></g></svg>
|
|
Before Width: | Height: | Size: 1.1 KiB |
@ -6,19 +6,11 @@
|
|||||||
kaldifeat
|
kaldifeat
|
||||||
=========
|
=========
|
||||||
|
|
||||||
`kaldifeat <https://github.com/csukuangfj/kaldifeat>`_ implements
|
|
||||||
feature extraction algorithms **compatible** with kaldi using PyTorch, supporting CUDA
|
|
||||||
as well as autograd.
|
|
||||||
|
|
||||||
Currently, only fbank features are supported.
|
|
||||||
It can produce the same feature output as ``compute-fbank-feats`` (from kaldi)
|
|
||||||
when given the same options.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
:caption: Contents:
|
:caption: Contents
|
||||||
|
|
||||||
|
intro
|
||||||
installation
|
installation
|
||||||
usage
|
usage/index
|
||||||
|
@ -1,19 +1,38 @@
|
|||||||
Installation
|
Installation
|
||||||
============
|
============
|
||||||
|
|
||||||
|
- |os_types|
|
||||||
|
- |python_versions|
|
||||||
|
- |pytorch_versions|
|
||||||
|
- |cuda_versions|
|
||||||
|
|
||||||
|
.. caution::
|
||||||
|
|
||||||
|
`kaldifeat`_ depends on `PyTorch`_. `PyTorch`_ >= 1.5.0 is known to work.
|
||||||
|
|
||||||
|
Please first install `PyTorch`_ before you install `kaldifeat`_.
|
||||||
|
|
||||||
|
.. hint::
|
||||||
|
|
||||||
|
To install a CPU version of `kaldifeat`_, please install a CPU version
|
||||||
|
of `PyTorch`_.
|
||||||
|
|
||||||
|
To install a CUDA version of `kaldifeat`_, please install a CUDA version
|
||||||
|
of `PyTorch`_. CUDA >= 10.1 is known to work.
|
||||||
|
|
||||||
.. _from source:
|
.. _from source:
|
||||||
|
|
||||||
Install kaldifeat from source
|
Install kaldifeat from source
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
You have to install ``cmake`` and ``PyTorch`` first.
|
You have to install ``cmake`` and `PyTorch`_ first.
|
||||||
|
|
||||||
- ``cmake`` 3.11 is known to work. Other CMake versions may also work.
|
- ``cmake`` 3.11 is known to work. Other CMake versions may also work.
|
||||||
- ``PyTorch`` 1.8.1 is known to work. Other PyTorch versions may also work.
|
- `PyTorch`_ >= 1.5.0 is known to work. Other PyTorch versions may also work.
|
||||||
- Python >= 3.6
|
- Python >= 3.6
|
||||||
|
|
||||||
|
|
||||||
The commands to install ``kaldifeat`` from source are:
|
The commands to install `kaldifeat`_ from source are:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@ -21,7 +40,7 @@ The commands to install ``kaldifeat`` from source are:
|
|||||||
cd kaldifeat
|
cd kaldifeat
|
||||||
python3 setup.py install
|
python3 setup.py install
|
||||||
|
|
||||||
To test that you have installed ``kaldifeat`` successfully, please run:
|
To test that you have installed `kaldifeat`_ successfully, please run:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@ -29,26 +48,120 @@ To test that you have installed ``kaldifeat`` successfully, please run:
|
|||||||
|
|
||||||
It should print the version, e.g., ``1.0``.
|
It should print the version, e.g., ``1.0``.
|
||||||
|
|
||||||
|
.. _from PyPI:
|
||||||
|
|
||||||
Install kaldifeat from PyPI
|
Install kaldifeat from PyPI
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
The pre-built ``kaldifeat`` hosted on PyPI uses PyTorch 1.8.1.
|
The command to install `kaldifeat`_ from PyPI is:
|
||||||
If you install ``kaldifeat`` using pip, it will replace your locally
|
|
||||||
installed PyTorch automatically with PyTorch 1.8.1.
|
|
||||||
|
|
||||||
If you don't want this happen, please `Install kaldifeat from source`_.
|
|
||||||
|
|
||||||
The command to install ``kaldifeat`` from PyPI is:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
pip install kaldifeat
|
pip install --verbose kaldifeat
|
||||||
|
|
||||||
|
To test that you have installed `kaldifeat`_ successfully, please run:
|
||||||
To test that you have installed ``kaldifeat`` successfully, please run:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
python3 -c "import kaldifeat; print(kaldifeat.__version__)"
|
python3 -c "import kaldifeat; print(kaldifeat.__version__)"
|
||||||
|
|
||||||
It should print the version, e.g., ``1.0``.
|
It should print the version, e.g., ``1.0``.
|
||||||
|
|
||||||
|
Install kaldifeat from conda (Only for Linux)
|
||||||
|
---------------------------------------------
|
||||||
|
|
||||||
|
.. hint::
|
||||||
|
|
||||||
|
Installation using ``conda`` supports only Linux. For macOS and Windows,
|
||||||
|
please use either :ref:`from source` or :ref:`from PyPI`.
|
||||||
|
|
||||||
|
The command to install `kaldifeat` using ``conda`` is
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
conda install -c kaldifeat -c pytorch -c conda-forge kaldifeat python=3.8 cudatoolkit=11.1 pytorch=1.8.1
|
||||||
|
|
||||||
|
You can select the supported Python version, CUDA toolkit version and `PyTorch`_ version as you wish.
|
||||||
|
|
||||||
|
To install a CPU version of `kaldifeat`, use:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
conda install -c kaldifeat -c pytorch cpuonly kaldifeat python=3.8 pytorch=1.8.1
|
||||||
|
|
||||||
|
.. caution::
|
||||||
|
|
||||||
|
If you encounter issues about missing GLIBC after installing `kaldifeat`_
|
||||||
|
with ``conda``, please consider :ref:`from source` or :ref:`from PyPI`.
|
||||||
|
The reason is that the package was built using Ubuntu 18.04 and your system's
|
||||||
|
GLIBC is older.
|
||||||
|
|
||||||
|
|
||||||
|
.. |os_types| image:: ./images/os-green.svg
|
||||||
|
:alt: Supported operating systems
|
||||||
|
|
||||||
|
.. |python_versions| image:: ./images/python_ge_3.6-blue.svg
|
||||||
|
:alt: Supported python versions
|
||||||
|
|
||||||
|
.. |cuda_versions| image:: ./images/cuda_ge_10.1-orange.svg
|
||||||
|
:alt: Supported cuda versions
|
||||||
|
|
||||||
|
.. |pytorch_versions| image:: ./images/pytorch_ge_1.5.0-green.svg
|
||||||
|
:alt: Supported pytorch versions
|
||||||
|
|
||||||
|
To test that you have installed `kaldifeat`_ successfully, please run:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
python3 -c "import kaldifeat; print(kaldifeat.__version__)"
|
||||||
|
|
||||||
|
It should print the version, e.g., ``1.0``.
|
||||||
|
|
||||||
|
FAQs
|
||||||
|
----
|
||||||
|
|
||||||
|
How to install a CUDA version of kaldifeat
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
You need to first install a CUDA version of `PyTorch`_ and then install `kaldifeat`_.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
You can use a CUDA version of `kaldifeat`_ on machines with no GPUs.
|
||||||
|
|
||||||
|
How to install a CPU version of kaldifeat
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
You need to first install a CPU version of `PyTorch`_ and then install `kaldifeat`_.
|
||||||
|
|
||||||
|
How to fix `Caffe2: Cannot find cuDNN library`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
Your installed Caffe2 version uses cuDNN but I cannot find the cuDNN
|
||||||
|
libraries. Please set the proper cuDNN prefixes and / or install cuDNN.
|
||||||
|
|
||||||
|
You will have such an error when you want to install a CUDA version of `kaldifeat`_
|
||||||
|
by ``pip install kaldifeat`` or from source.
|
||||||
|
|
||||||
|
You need to first install cuDNN. Assume you have installed cuDNN to the
|
||||||
|
path ``/path/to/cudnn``. You can fix the error by using ``one`` of the following
|
||||||
|
commands.
|
||||||
|
|
||||||
|
(1) Fix for installation using ``pip install``
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
export KALDIFEAT_CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCUDNN_LIBRARY_PATH=/path/to/cudnn/lib/libcudnn.so -DCUDNN_INCLUDE_PATH=/path/to/cudnn/include"
|
||||||
|
pip install --verbose kaldifeat
|
||||||
|
|
||||||
|
(2) Fix for installation from source
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mkdir /some/path
|
||||||
|
git clone https://github.com/csukuangfj/kaldifeat.git
|
||||||
|
cd kaldifeat
|
||||||
|
export KALDIFEAT_CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCUDNN_LIBRARY_PATH=/path/to/cudnn/lib/libcudnn.so -DCUDNN_INCLUDE_PATH=/path/to/cudnn/include"
|
||||||
|
python setup.py install
|
||||||
|
103
doc/source/intro.rst
Normal file
103
doc/source/intro.rst
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
`kaldifeat`_ implements
|
||||||
|
speech feature extraction algorithms **compatible** with `Kaldi`_ using `PyTorch`_,
|
||||||
|
supporting CUDA as well as autograd.
|
||||||
|
|
||||||
|
`kaldifeat`_ has the following features:
|
||||||
|
|
||||||
|
- Fully compatible with `Kaldi`_
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
The underlying C++ code is copied & modified from `Kaldi`_ directly.
|
||||||
|
It is rewritten with `PyTorch` C++ APIs.
|
||||||
|
|
||||||
|
- Provide not only ``C++ APIs`` but also ``Python APIs``
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
You can access `kaldifeat`_ from ``Python``.
|
||||||
|
|
||||||
|
- Support autograd
|
||||||
|
- Support ``CUDA`` and ``CPU``
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
You can use CUDA for feature extraction.
|
||||||
|
|
||||||
|
- Support ``online`` (i.e., ``streaming``) and ``offline`` (i.e., ``non-streaming``)
|
||||||
|
feature extraction
|
||||||
|
- Support chunk-based processing
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This is especially usefull if you want to process audios of several
|
||||||
|
hours long, which may cause OOM if you send them for computation at once.
|
||||||
|
With chunk-based processing, you can process audios of arbirtray length.
|
||||||
|
|
||||||
|
- Support batch processing
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
With `kaldifeat`_ you can extract features for a batch of audios
|
||||||
|
|
||||||
|
|
||||||
|
.. see https://sublime-and-sphinx-guide.readthedocs.io/en/latest/tables.html
|
||||||
|
|
||||||
|
Currently implemented speech features and their counterparts in `Kaldi`_ are
|
||||||
|
listed in the following table.
|
||||||
|
|
||||||
|
.. list-table:: Supported speech features
|
||||||
|
:widths: 50 50
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Supported speech features
|
||||||
|
- Counterpart in `Kaldi`_
|
||||||
|
* - `kaldifeat.Fbank`_
|
||||||
|
- `compute-fbank-feats`_
|
||||||
|
* - `kaldifeat.Mfcc`_
|
||||||
|
- `compute-mfcc-feats`_
|
||||||
|
* - `kaldifeat.Plp`_
|
||||||
|
- `compute-plp-feats`_
|
||||||
|
* - `kaldifeat.Spectrogram`_
|
||||||
|
- `compute-spectrogram-feats`_
|
||||||
|
* - `kaldifeat.OnlineFbank`_
|
||||||
|
- `kaldi::OnlineFbank`_
|
||||||
|
* - `kaldifeat.OnlineMfcc`_
|
||||||
|
- `kaldi::OnlineMfcc`_
|
||||||
|
* - `kaldifeat.OnlinePlp`_
|
||||||
|
- `kaldi::OnlinePlp`_
|
||||||
|
|
||||||
|
Each feature computer needs an option. The following table lists the options
|
||||||
|
for each computer and the corresponding options in `Kaldi`_.
|
||||||
|
|
||||||
|
.. hint::
|
||||||
|
|
||||||
|
Note that we reuse the parameter names from `Kaldi`_.
|
||||||
|
|
||||||
|
Also, both online feature computers and offline feature computers share the
|
||||||
|
same option.
|
||||||
|
|
||||||
|
.. list-table:: Feature computer options
|
||||||
|
:widths: 50 50
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Options in `kaldifeat`_
|
||||||
|
- Corresponding options in `Kaldi`_
|
||||||
|
* - `kaldifeat.FbankOptions`_
|
||||||
|
- `kaldi::FbankOptions`_
|
||||||
|
* - `kaldifeat.MfccOptions`_
|
||||||
|
- `kaldi::MfccOptions`_
|
||||||
|
* - `kaldifeat.PlpOptions`_
|
||||||
|
- `kaldi::PlpOptions`_
|
||||||
|
* - `kaldifeat.SpectrogramOptions`_
|
||||||
|
- `kaldi::SpectrogramOptions`_
|
||||||
|
* - `kaldifeat.FrameExtractionOptions`_
|
||||||
|
- `kaldi::FrameExtractionOptions`_
|
||||||
|
* - `kaldifeat.MelBanksOptions`_
|
||||||
|
- `kaldi::MelBanksOptions`_
|
||||||
|
|
||||||
|
Read more to learn how to install `kaldifeat`_ and how to use each feature
|
||||||
|
computer.
|
@ -1,212 +0,0 @@
|
|||||||
Usage
|
|
||||||
=====
|
|
||||||
|
|
||||||
Let us first see the help message of kaldi's ``compute-fbank-feats``:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
$ compute-fbank-feats
|
|
||||||
|
|
||||||
Create Mel-filter bank (FBANK) feature files.
|
|
||||||
Usage: compute-fbank-feats [options...] <wav-rspecifier> <feats-wspecifier>
|
|
||||||
|
|
||||||
Options:
|
|
||||||
--allow-downsample : If true, allow the input waveform to have a higher frequency than the specified --sample-frequency (and we'll downsample). (bool, default = false)
|
|
||||||
--allow-upsample : If true, allow the input waveform to have a lower frequency than the specified --sample-frequency (and we'll upsample). (bool, default = false)
|
|
||||||
--blackman-coeff : Constant coefficient for generalized Blackman window. (float, default = 0.42)
|
|
||||||
--channel : Channel to extract (-1 -> expect mono, 0 -> left, 1 -> right) (int, default = -1)
|
|
||||||
--debug-mel : Print out debugging information for mel bin computation (bool, default = false)
|
|
||||||
--dither : Dithering constant (0.0 means no dither). If you turn this off, you should set the --energy-floor option, e.g. to 1.0 or 0.1 (float, default = 1)
|
|
||||||
--energy-floor : Floor on energy (absolute, not relative) in FBANK computation. Only makes a difference if --use-energy=true; only necessary if --dither=0.0. Suggested values: 0.1 or 1.0 (float, default = 0)
|
|
||||||
--frame-length : Frame length in milliseconds (float, default = 25)
|
|
||||||
--frame-shift : Frame shift in milliseconds (float, default = 10)
|
|
||||||
--high-freq : High cutoff frequency for mel bins (if <= 0, offset from Nyquist) (float, default = 0)
|
|
||||||
--htk-compat : If true, put energy last. Warning: not sufficient to get HTK compatible features (need to change other parameters). (bool, default = false)
|
|
||||||
--low-freq : Low cutoff frequency for mel bins (float, default = 20)
|
|
||||||
--max-feature-vectors : Memory optimization. If larger than 0, periodically remove feature vectors so that only this number of the latest feature vectors is retained. (int, default = -1)
|
|
||||||
--min-duration : Minimum duration of segments to process (in seconds). (float, default = 0)
|
|
||||||
--num-mel-bins : Number of triangular mel-frequency bins (int, default = 23)
|
|
||||||
--output-format : Format of the output files [kaldi, htk] (string, default = "kaldi")
|
|
||||||
--preemphasis-coefficient : Coefficient for use in signal preemphasis (float, default = 0.97)
|
|
||||||
--raw-energy : If true, compute energy before preemphasis and windowing (bool, default = true)
|
|
||||||
--remove-dc-offset : Subtract mean from waveform on each frame (bool, default = true)
|
|
||||||
--round-to-power-of-two : If true, round window size to power of two by zero-padding input to FFT. (bool, default = true)
|
|
||||||
--sample-frequency : Waveform data sample frequency (must match the waveform file, if specified there) (float, default = 16000)
|
|
||||||
--snip-edges : If true, end effects will be handled by outputting only frames that completely fit in the file, and the number of frames depends on the frame-length. If false, the number of frames depends only on the frame-shift, and we reflect the data at the ends. (bool, default = true)
|
|
||||||
--subtract-mean : Subtract mean of each feature file [CMS]; not recommended to do it this way. (bool, default = false)
|
|
||||||
--use-energy : Add an extra dimension with energy to the FBANK output. (bool, default = false)
|
|
||||||
--use-log-fbank : If true, produce log-filterbank, else produce linear. (bool, default = true)
|
|
||||||
--use-power : If true, use power, else use magnitude. (bool, default = true)
|
|
||||||
--utt2spk : Utterance to speaker-id map (if doing VTLN and you have warps per speaker) (string, default = "")
|
|
||||||
--vtln-high : High inflection point in piecewise linear VTLN warping function (if negative, offset from high-mel-freq (float, default = -500)
|
|
||||||
--vtln-low : Low inflection point in piecewise linear VTLN warping function (float, default = 100)
|
|
||||||
--vtln-map : Map from utterance or speaker-id to vtln warp factor (rspecifier) (string, default = "")
|
|
||||||
--vtln-warp : Vtln warp factor (only applicable if vtln-map not specified) (float, default = 1)
|
|
||||||
--window-type : Type of window ("hamming"|"hanning"|"povey"|"rectangular"|"sine"|"blackmann") (string, default = "povey")
|
|
||||||
--write-utt2dur : Wspecifier to write duration of each utterance in seconds, e.g. 'ark,t:utt2dur'. (string, default = "")
|
|
||||||
|
|
||||||
Standard options:
|
|
||||||
--config : Configuration file to read (this option may be repeated) (string, default = "")
|
|
||||||
--help : Print out usage message (bool, default = false)
|
|
||||||
--print-args : Print the command line arguments (to stderr) (bool, default = true)
|
|
||||||
--verbose : Verbose level (higher->more logging) (int, default = 0)
|
|
||||||
|
|
||||||
FbankOptions
|
|
||||||
------------
|
|
||||||
|
|
||||||
``kaldifeat`` reuses the same options from kaldi's ``compute-fbank-feats``.
|
|
||||||
|
|
||||||
The following shows the default values of ``kaldifeat.FbankOptions``:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> import kaldifeat
|
|
||||||
>>> fbank_opts = kaldifeat.FbankOptions()
|
|
||||||
>>> print(fbank_opts)
|
|
||||||
frame_opts:
|
|
||||||
samp_freq: 16000
|
|
||||||
frame_shift_ms: 10
|
|
||||||
frame_length_ms: 25
|
|
||||||
dither: 1
|
|
||||||
preemph_coeff: 0.97
|
|
||||||
remove_dc_offset: 1
|
|
||||||
window_type: povey
|
|
||||||
round_to_power_of_two: 1
|
|
||||||
blackman_coeff: 0.42
|
|
||||||
snip_edges: 1
|
|
||||||
|
|
||||||
|
|
||||||
mel_opts:
|
|
||||||
num_bins: 23
|
|
||||||
low_freq: 20
|
|
||||||
high_freq: 0
|
|
||||||
vtln_low: 100
|
|
||||||
vtln_high: -500
|
|
||||||
debug_mel: 0
|
|
||||||
htk_mode: 0
|
|
||||||
|
|
||||||
use_energy: 0
|
|
||||||
energy_floor: 0
|
|
||||||
raw_energy: 1
|
|
||||||
htk_compat: 0
|
|
||||||
use_log_fbank: 1
|
|
||||||
use_power: 1
|
|
||||||
device: cpu
|
|
||||||
|
|
||||||
It consists of three parts:
|
|
||||||
|
|
||||||
- ``frame_opts``
|
|
||||||
|
|
||||||
Options in this part are accessed by ``frame_opts.xxx``. That is, to access
|
|
||||||
the sample rate, you use:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> fbank_opts = kaldifeat.FbankOptions()
|
|
||||||
>>> print(fbank_opts.frame_opts.samp_freq)
|
|
||||||
16000.0
|
|
||||||
|
|
||||||
- ``mel_opts``
|
|
||||||
|
|
||||||
Options in this part are accessed by ``mel_opts.xxx``. That is, to access
|
|
||||||
the number of mel bins, you use:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> fbank_opts = kaldifeat.FbankOptions()
|
|
||||||
>>> print(fbank_opts.mel_opts.num_bins)
|
|
||||||
23
|
|
||||||
|
|
||||||
- fbank related
|
|
||||||
|
|
||||||
Options in this part are accessed directly. That is, to access the device
|
|
||||||
field, you use:
|
|
||||||
|
|
||||||
.. code-block::
|
|
||||||
|
|
||||||
>>> print(fbank_opts.device)
|
|
||||||
cpu
|
|
||||||
>>> fbank_opts.device = 'cuda:0'
|
|
||||||
>>> print(fbank_opts.device)
|
|
||||||
cuda:0
|
|
||||||
>>> import torch
|
|
||||||
>>> fbank_opts.device = torch.device('cuda', 0)
|
|
||||||
>>> print(fbank_opts.device)
|
|
||||||
cuda:0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
To change the sample rate to 8000, you can use:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> fbank_opts = kaldifeat.FbankOptions()
|
|
||||||
>>> print(fbank_opts.frame_opts.samp_freq)
|
|
||||||
16000.0
|
|
||||||
>>> fbank_opts.frame_opts.samp_freq = 8000
|
|
||||||
>>> print(fbank_opts.frame_opts.samp_freq)
|
|
||||||
8000.0
|
|
||||||
|
|
||||||
To change ``snip_edges`` to ``False``, you can use:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> fbank_opts.frame_opts.snip_edges = False
|
|
||||||
>>> print(fbank_opts.frame_opts.snip_edges)
|
|
||||||
False
|
|
||||||
|
|
||||||
To change number of mel bins to 80, you can use:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> print(fbank_opts.mel_opts.num_bins)
|
|
||||||
23
|
|
||||||
>>> fbank_opts.mel_opts.num_bins = 80
|
|
||||||
>>> print(fbank_opts.mel_opts.num_bins)
|
|
||||||
80
|
|
||||||
|
|
||||||
To change the device to ``cuda``, you can use:
|
|
||||||
|
|
||||||
|
|
||||||
Fbank
|
|
||||||
-----
|
|
||||||
|
|
||||||
The following shows how to use ``kaldifeat.Fbank`` to compute
|
|
||||||
the fbank features of sound files.
|
|
||||||
|
|
||||||
First, let us generate two sound files using ``sox``:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
# generate a wav of two seconds, containing a sine-wave
|
|
||||||
# swept from 300 Hz to 3300 Hz
|
|
||||||
sox -n -r 16000 -b 16 test.wav synth 1.2 sine 300-3300
|
|
||||||
|
|
||||||
# another sound file with 0.5 seconds
|
|
||||||
sox -n -r 16000 -b 16 test2.wav synth 0.5 sine 300-3300
|
|
||||||
|
|
||||||
.. hint::
|
|
||||||
|
|
||||||
You can find the above two files by visiting the following two links:
|
|
||||||
|
|
||||||
- `test.wav <https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/tests/test_data/test.wav>`_
|
|
||||||
- `test2.wav <https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/tests/test_data/test2.wav>`_
|
|
||||||
|
|
||||||
The `following code <https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/tests/test_fbank.py>`_
|
|
||||||
shows the usage of ``kaldifeat.Fbank``.
|
|
||||||
|
|
||||||
It shows:
|
|
||||||
|
|
||||||
- How to read a sound file. Note that audio samples are scaled to the range [-32768, 32768].
|
|
||||||
The intention is to produce the same output as kaldi. You don't need to scale it if
|
|
||||||
you don't care about the compatibility with kaldi
|
|
||||||
|
|
||||||
- ``kaldifeat.Fbank`` supports CUDA as well as CPU
|
|
||||||
|
|
||||||
- ``kaldifeat.Fbank`` supports processing sound file in a batch as well as accepting
|
|
||||||
a single sound file
|
|
||||||
|
|
||||||
|
|
||||||
.. literalinclude:: ./code/test_fbank.py
|
|
||||||
:caption: Demo of ``kaldifeat.Fbank``
|
|
||||||
:language: python
|
|
46
doc/source/usage/code/compute-fbank-feats-help.txt
Normal file
46
doc/source/usage/code/compute-fbank-feats-help.txt
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
compute-fbank-feats
|
||||||
|
|
||||||
|
Create Mel-filter bank (FBANK) feature files.
|
||||||
|
Usage: compute-fbank-feats [options...] <wav-rspecifier> <feats-wspecifier>
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--allow-downsample : If true, allow the input waveform to have a higher frequency than the specified --sample-frequency (and we'll downsample). (bool, default = false)
|
||||||
|
--allow-upsample : If true, allow the input waveform to have a lower frequency than the specified --sample-frequency (and we'll upsample). (bool, default = false)
|
||||||
|
--blackman-coeff : Constant coefficient for generalized Blackman window. (float, default = 0.42)
|
||||||
|
--channel : Channel to extract (-1 -> expect mono, 0 -> left, 1 -> right) (int, default = -1)
|
||||||
|
--debug-mel : Print out debugging information for mel bin computation (bool, default = false)
|
||||||
|
--dither : Dithering constant (0.0 means no dither). If you turn this off, you should set the --energy-floor option, e.g. to 1.0 or 0.1 (float, default = 1)
|
||||||
|
--energy-floor : Floor on energy (absolute, not relative) in FBANK computation. Only makes a difference if --use-energy=true; only necessary if --dither=0.0. Suggested values: 0.1 or 1.0 (float, default = 0)
|
||||||
|
--frame-length : Frame length in milliseconds (float, default = 25)
|
||||||
|
--frame-shift : Frame shift in milliseconds (float, default = 10)
|
||||||
|
--high-freq : High cutoff frequency for mel bins (if <= 0, offset from Nyquist) (float, default = 0)
|
||||||
|
--htk-compat : If true, put energy last. Warning: not sufficient to get HTK compatible features (need to change other parameters). (bool, default = false)
|
||||||
|
--low-freq : Low cutoff frequency for mel bins (float, default = 20)
|
||||||
|
--max-feature-vectors : Memory optimization. If larger than 0, periodically remove feature vectors so that only this number of the latest feature vectors is retained. (int, default = -1)
|
||||||
|
--min-duration : Minimum duration of segments to process (in seconds). (float, default = 0)
|
||||||
|
--num-mel-bins : Number of triangular mel-frequency bins (int, default = 23)
|
||||||
|
--output-format : Format of the output files [kaldi, htk] (string, default = "kaldi")
|
||||||
|
--preemphasis-coefficient : Coefficient for use in signal preemphasis (float, default = 0.97)
|
||||||
|
--raw-energy : If true, compute energy before preemphasis and windowing (bool, default = true)
|
||||||
|
--remove-dc-offset : Subtract mean from waveform on each frame (bool, default = true)
|
||||||
|
--round-to-power-of-two : If true, round window size to power of two by zero-padding input to FFT. (bool, default = true)
|
||||||
|
--sample-frequency : Waveform data sample frequency (must match the waveform file, if specified there) (float, default = 16000)
|
||||||
|
--snip-edges : If true, end effects will be handled by outputting only frames that completely fit in the file, and the number of frames depends on the frame-length. If false, the number of frames depends only on the frame-shift, and we reflect the data at the ends. (bool, default = true)
|
||||||
|
--subtract-mean : Subtract mean of each feature file [CMS]; not recommended to do it this way. (bool, default = false)
|
||||||
|
--use-energy : Add an extra dimension with energy to the FBANK output. (bool, default = false)
|
||||||
|
--use-log-fbank : If true, produce log-filterbank, else produce linear. (bool, default = true)
|
||||||
|
--use-power : If true, use power, else use magnitude. (bool, default = true)
|
||||||
|
--utt2spk : Utterance to speaker-id map (if doing VTLN and you have warps per speaker) (string, default = "")
|
||||||
|
--vtln-high : High inflection point in piecewise linear VTLN warping function (if negative, offset from high-mel-freq (float, default = -500)
|
||||||
|
--vtln-low : Low inflection point in piecewise linear VTLN warping function (float, default = 100)
|
||||||
|
--vtln-map : Map from utterance or speaker-id to vtln warp factor (rspecifier) (string, default = "")
|
||||||
|
--vtln-warp : Vtln warp factor (only applicable if vtln-map not specified) (float, default = 1)
|
||||||
|
--window-type : Type of window ("hamming"|"hanning"|"povey"|"rectangular"|"sine"|"blackmann") (string, default = "povey")
|
||||||
|
--write-utt2dur : Wspecifier to write duration of each utterance in seconds, e.g. 'ark,t:utt2dur'. (string, default = "")
|
||||||
|
|
||||||
|
Standard options:
|
||||||
|
--config : Configuration file to read (this option may be repeated) (string, default = "")
|
||||||
|
--help : Print out usage message (bool, default = false)
|
||||||
|
--print-args : Print the command line arguments (to stderr) (bool, default = true)
|
||||||
|
--verbose : Verbose level (higher->more logging) (int, default = 0)
|
||||||
|
|
65
doc/source/usage/code/fbank_options-1.txt
Normal file
65
doc/source/usage/code/fbank_options-1.txt
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
$ python3
|
||||||
|
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
|
||||||
|
[GCC 8.3.0] on linux
|
||||||
|
Type "help", "copyright", "credits" or "license" for more information.
|
||||||
|
>>> import kaldifeat
|
||||||
|
>>> opts = kaldifeat.FbankOptions()
|
||||||
|
>>> print(opts)
|
||||||
|
frame_opts:
|
||||||
|
samp_freq: 16000
|
||||||
|
frame_shift_ms: 10
|
||||||
|
frame_length_ms: 25
|
||||||
|
dither: 1
|
||||||
|
preemph_coeff: 0.97
|
||||||
|
remove_dc_offset: 1
|
||||||
|
window_type: povey
|
||||||
|
round_to_power_of_two: 1
|
||||||
|
blackman_coeff: 0.42
|
||||||
|
snip_edges: 1
|
||||||
|
max_feature_vectors: -1
|
||||||
|
|
||||||
|
|
||||||
|
mel_opts:
|
||||||
|
num_bins: 23
|
||||||
|
low_freq: 20
|
||||||
|
high_freq: 0
|
||||||
|
vtln_low: 100
|
||||||
|
vtln_high: -500
|
||||||
|
debug_mel: 0
|
||||||
|
htk_mode: 0
|
||||||
|
|
||||||
|
use_energy: 0
|
||||||
|
energy_floor: 0
|
||||||
|
raw_energy: 1
|
||||||
|
htk_compat: 0
|
||||||
|
use_log_fbank: 1
|
||||||
|
use_power: 1
|
||||||
|
device: cpu
|
||||||
|
|
||||||
|
>>> print(opts.dither)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
AttributeError: '_kaldifeat.FbankOptions' object has no attribute 'dither'
|
||||||
|
>>>
|
||||||
|
>>> print(opts.frame_opts.dither)
|
||||||
|
1.0
|
||||||
|
>>> opts.frame_opts.dither = 0 # disable dither
|
||||||
|
>>> print(opts.frame_opts.dither)
|
||||||
|
0.0
|
||||||
|
>>> import torch
|
||||||
|
>>> print(opts.device)
|
||||||
|
cpu
|
||||||
|
>>> opts.device = 'cuda:0'
|
||||||
|
>>> print(opts.device)
|
||||||
|
cuda:0
|
||||||
|
>>> opts.device = torch.device('cuda', 1)
|
||||||
|
>>> print(opts.device)
|
||||||
|
cuda:1
|
||||||
|
>>> opts.device = 'cpu'
|
||||||
|
>>> print(opts.device)
|
||||||
|
cpu
|
||||||
|
>>> print(opts.mel_opts.num_bins)
|
||||||
|
23
|
||||||
|
>>> opts.mel_opts.num_bins = 80
|
||||||
|
>>> print(opts.mel_opts.num_bins)
|
||||||
|
80
|
1
doc/source/usage/code/test_fbank_options.py
Symbolic link
1
doc/source/usage/code/test_fbank_options.py
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../kaldifeat/python/tests/test_fbank_options.py
|
3
doc/source/usage/fbank.rst
Normal file
3
doc/source/usage/fbank.rst
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
kaldifeat.Fbank
|
||||||
|
===============
|
||||||
|
|
52
doc/source/usage/fbank_options.rst
Normal file
52
doc/source/usage/fbank_options.rst
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
kaldifeat.FbankOptions
|
||||||
|
======================
|
||||||
|
|
||||||
|
If you want to construct an instance of `kaldifeat.Fbank`_ or
|
||||||
|
`kaldifeat.OnlineFbank`_, you have to provide an instance of
|
||||||
|
`kaldifeat.FbankOptions`_.
|
||||||
|
|
||||||
|
The following code shows how to construct an instance of `kaldifeat.FbankOptions`_.
|
||||||
|
|
||||||
|
.. literalinclude:: ./code/fbank_options-1.txt
|
||||||
|
:caption: Usage of `kaldifeat.FbankOptions`_
|
||||||
|
:emphasize-lines: 6,8,22,37
|
||||||
|
:language: python
|
||||||
|
|
||||||
|
Note that we reuse the same option name with `compute-fbank-feats`_ from `Kaldi`_:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ compute-fbank-feats --help
|
||||||
|
|
||||||
|
|
||||||
|
.. literalinclude:: ./code/compute-fbank-feats-help.txt
|
||||||
|
:caption: Output of ``compute-fbank-feats --help``
|
||||||
|
|
||||||
|
Please refer to the output of ``compute-fbank-feats --help`` for the meaning
|
||||||
|
of each field of `kaldifeat.FbankOptions`_.
|
||||||
|
|
||||||
|
One thing worth noting is that `kaldifeat.FbankOptions`_ has a field ``device``,
|
||||||
|
which is an instance of ``torch.device``. You can assign it either a string, e.g.,
|
||||||
|
``"cpu"`` or ``"cuda:0"``, or an instance of ``torch.device``, e.g., ``torch.device("cpu")`` or
|
||||||
|
``torch.device("cuda", 1)``.
|
||||||
|
|
||||||
|
.. hint::
|
||||||
|
|
||||||
|
You can use this field to control whether the feature computer
|
||||||
|
constructed from it performs computation on CPU or CUDA.
|
||||||
|
|
||||||
|
.. caution::
|
||||||
|
|
||||||
|
If you use a CUDA device, make sure that you have installed a CUDA version
|
||||||
|
of `PyTorch`_.
|
||||||
|
|
||||||
|
Example usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following code from
|
||||||
|
`<https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/tests/test_fbank_options.py>`_
|
||||||
|
demonstrate the usage of `kaldifeat.FbankOptions`_:
|
||||||
|
|
||||||
|
.. literalinclude:: ./code/test_fbank_options.py
|
||||||
|
:caption: Example usage of `kaldifeat.FbankOptions`_
|
||||||
|
:language: python
|
11
doc/source/usage/index.rst
Normal file
11
doc/source/usage/index.rst
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Usage
|
||||||
|
=====
|
||||||
|
|
||||||
|
This section describes how to use feature computers in `kaldifeat`_.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
fbank_options
|
||||||
|
fbank
|
||||||
|
online_fbank
|
3
doc/source/usage/online_fbank.rst
Normal file
3
doc/source/usage/online_fbank.rst
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
kaldifeat.OnlineFbank
|
||||||
|
=====================
|
||||||
|
|
@ -31,9 +31,15 @@ function(kaldifeat_add_test source)
|
|||||||
gtest_main
|
gtest_main
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# NOTE: We set the working directory here so that
|
||||||
|
# it works also on windows. The reason is that
|
||||||
|
# the required DLLs are inside ${TORCH_DIR}/lib
|
||||||
|
# and they can be found by the exe if the current
|
||||||
|
# working directory is ${TORCH_DIR}\lib
|
||||||
add_test(NAME "Test.${name}"
|
add_test(NAME "Test.${name}"
|
||||||
COMMAND
|
COMMAND
|
||||||
$<TARGET_FILE:${name}>
|
$<TARGET_FILE:${name}>
|
||||||
|
WORKING_DIRECTORY ${TORCH_DIR}/lib
|
||||||
)
|
)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
@ -47,4 +53,5 @@ if(kaldifeat_BUILD_TESTS)
|
|||||||
foreach(source IN LISTS test_srcs)
|
foreach(source IN LISTS test_srcs)
|
||||||
kaldifeat_add_test(${source})
|
kaldifeat_add_test(${source})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
@ -10,6 +10,17 @@ pybind11_add_module(_kaldifeat
|
|||||||
online-feature.cc
|
online-feature.cc
|
||||||
utils.cc
|
utils.cc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${PYTHON_EXECUTABLE}" -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
OUTPUT_VARIABLE PYTHON_SITE_PACKAGE_DIR
|
||||||
|
)
|
||||||
|
message(STATUS "PYTHON_SITE_PACKAGE_DIR: ${PYTHON_SITE_PACKAGE_DIR}")
|
||||||
|
target_link_libraries(_kaldifeat PRIVATE "-Wl,-rpath,${PYTHON_SITE_PACKAGE_DIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
target_link_libraries(_kaldifeat PRIVATE kaldifeat_core)
|
target_link_libraries(_kaldifeat PRIVATE kaldifeat_core)
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
target_link_libraries(_kaldifeat PUBLIC ${TORCH_DIR}/lib/libtorch_python.so)
|
target_link_libraries(_kaldifeat PUBLIC ${TORCH_DIR}/lib/libtorch_python.so)
|
||||||
|
@ -53,7 +53,7 @@ static void PybindFbank(py::module &m) {
|
|||||||
.def("dim", &PyClass::Dim)
|
.def("dim", &PyClass::Dim)
|
||||||
.def_property_readonly("options", &PyClass::GetOptions)
|
.def_property_readonly("options", &PyClass::GetOptions)
|
||||||
.def("compute_features", &PyClass::ComputeFeatures, py::arg("wave"),
|
.def("compute_features", &PyClass::ComputeFeatures, py::arg("wave"),
|
||||||
py::arg("vtln_warp"))
|
py::arg("vtln_warp"), py::call_guard<py::gil_scoped_release>())
|
||||||
.def(py::pickle(
|
.def(py::pickle(
|
||||||
[](const PyClass &self) -> py::dict {
|
[](const PyClass &self) -> py::dict {
|
||||||
return AsDict(self.GetOptions());
|
return AsDict(self.GetOptions());
|
||||||
|
@ -53,7 +53,7 @@ static void PybindMfcc(py::module &m) {
|
|||||||
.def("dim", &PyClass::Dim)
|
.def("dim", &PyClass::Dim)
|
||||||
.def_property_readonly("options", &PyClass::GetOptions)
|
.def_property_readonly("options", &PyClass::GetOptions)
|
||||||
.def("compute_features", &PyClass::ComputeFeatures, py::arg("wave"),
|
.def("compute_features", &PyClass::ComputeFeatures, py::arg("wave"),
|
||||||
py::arg("vtln_warp"))
|
py::arg("vtln_warp"), py::call_guard<py::gil_scoped_release>())
|
||||||
.def(py::pickle(
|
.def(py::pickle(
|
||||||
[](const PyClass &self) -> py::dict {
|
[](const PyClass &self) -> py::dict {
|
||||||
return AsDict(self.GetOptions());
|
return AsDict(self.GetOptions());
|
||||||
|
@ -56,7 +56,7 @@ static void PybindPlp(py::module &m) {
|
|||||||
.def("dim", &PyClass::Dim)
|
.def("dim", &PyClass::Dim)
|
||||||
.def_property_readonly("options", &PyClass::GetOptions)
|
.def_property_readonly("options", &PyClass::GetOptions)
|
||||||
.def("compute_features", &PyClass::ComputeFeatures, py::arg("wave"),
|
.def("compute_features", &PyClass::ComputeFeatures, py::arg("wave"),
|
||||||
py::arg("vtln_warp"))
|
py::arg("vtln_warp"), py::call_guard<py::gil_scoped_release>())
|
||||||
.def(py::pickle(
|
.def(py::pickle(
|
||||||
[](const PyClass &self) -> py::dict {
|
[](const PyClass &self) -> py::dict {
|
||||||
return AsDict(self.GetOptions());
|
return AsDict(self.GetOptions());
|
||||||
|
@ -53,7 +53,7 @@ static void PybindSpectrogram(py::module &m) {
|
|||||||
.def("dim", &PyClass::Dim)
|
.def("dim", &PyClass::Dim)
|
||||||
.def_property_readonly("options", &PyClass::GetOptions)
|
.def_property_readonly("options", &PyClass::GetOptions)
|
||||||
.def("compute_features", &PyClass::ComputeFeatures, py::arg("wave"),
|
.def("compute_features", &PyClass::ComputeFeatures, py::arg("wave"),
|
||||||
py::arg("vtln_warp"))
|
py::arg("vtln_warp"), py::call_guard<py::gil_scoped_release>())
|
||||||
.def(py::pickle(
|
.def(py::pickle(
|
||||||
[](const PyClass &self) -> py::dict {
|
[](const PyClass &self) -> py::dict {
|
||||||
return AsDict(self.GetOptions());
|
return AsDict(self.GetOptions());
|
||||||
|
@ -22,9 +22,11 @@ void PybindOnlineFeatureTpl(py::module &m, const std::string &class_name,
|
|||||||
.def_property_readonly("num_frames_ready", &PyClass::NumFramesReady)
|
.def_property_readonly("num_frames_ready", &PyClass::NumFramesReady)
|
||||||
.def("is_last_frame", &PyClass::IsLastFrame, py::arg("frame"))
|
.def("is_last_frame", &PyClass::IsLastFrame, py::arg("frame"))
|
||||||
.def("get_frame", &PyClass::GetFrame, py::arg("frame"))
|
.def("get_frame", &PyClass::GetFrame, py::arg("frame"))
|
||||||
.def("get_frames", &PyClass::GetFrames, py::arg("frames"))
|
.def("get_frames", &PyClass::GetFrames, py::arg("frames"),
|
||||||
|
py::call_guard<py::gil_scoped_release>())
|
||||||
.def("accept_waveform", &PyClass::AcceptWaveform,
|
.def("accept_waveform", &PyClass::AcceptWaveform,
|
||||||
py::arg("sampling_rate"), py::arg("waveform"))
|
py::arg("sampling_rate"), py::arg("waveform"),
|
||||||
|
py::call_guard<py::gil_scoped_release>())
|
||||||
.def("input_finished", &PyClass::InputFinished);
|
.def("input_finished", &PyClass::InputFinished);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,13 @@
|
|||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
from .torch_version import kaldifeat_torch_version
|
||||||
|
|
||||||
|
if torch.__version__.split("+")[0] != kaldifeat_torch_version.split("+")[0]:
|
||||||
|
raise ImportError(
|
||||||
|
f"kaldifeat was built using PyTorch {kaldifeat_torch_version}\n"
|
||||||
|
f"But you are using PyTorch {torch.__version__} to run it"
|
||||||
|
)
|
||||||
|
|
||||||
from _kaldifeat import (
|
from _kaldifeat import (
|
||||||
FbankOptions,
|
FbankOptions,
|
||||||
FrameExtractionOptions,
|
FrameExtractionOptions,
|
||||||
|
12
kaldifeat/python/kaldifeat/torch_version.py.in
Normal file
12
kaldifeat/python/kaldifeat/torch_version.py.in
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# Auto generated by the toplevel CMakeLists.txt.
|
||||||
|
#
|
||||||
|
# DO NOT EDIT.
|
||||||
|
|
||||||
|
# The torch version used to build kaldifeat. We will check it against the
|
||||||
|
# torch version that is used to run kaldifeat. If they are not the same,
|
||||||
|
# `import kaldifeat` will throw.
|
||||||
|
#
|
||||||
|
# Some example values are:
|
||||||
|
# - 1.10.0+cu102
|
||||||
|
# - 1.5.0+cpu
|
||||||
|
kaldifeat_torch_version = "@TORCH_VERSION@"
|
13
kaldifeat/python/tests/Makefile
Normal file
13
kaldifeat/python/tests/Makefile
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test:
|
||||||
|
python3 ./test_fbank.py
|
||||||
|
python3 ./test_fbank_options.py
|
||||||
|
python3 ./test_frame_extraction_options.py
|
||||||
|
python3 ./test_mel_bank_options.py
|
||||||
|
python3 ./test_mfcc.py
|
||||||
|
python3 ./test_mfcc_options.py
|
||||||
|
python3 ./test_plp.py
|
||||||
|
python3 ./test_plp_options.py
|
||||||
|
python3 ./test_spectrogram.py
|
||||||
|
python3 ./test_spectrogram_options.py
|
81
scripts/build_conda_cpu.sh
Executable file
81
scripts/build_conda_cpu.sh
Executable file
@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
# The following environment variables are supposed to be set by users
|
||||||
|
#
|
||||||
|
# - KALDIFEAT_TORCH_VERSION
|
||||||
|
# The PyTorch version. Example:
|
||||||
|
#
|
||||||
|
# export KALDIFEAT_TORCH_VERSION=1.7.1
|
||||||
|
#
|
||||||
|
# Defaults to 1.7.1 if not set.
|
||||||
|
#
|
||||||
|
# - KALDIFEAT_CONDA_TOKEN
|
||||||
|
# If not set, auto upload to anaconda.org is disabled.
|
||||||
|
#
|
||||||
|
# Its value is from https://anaconda.org/kaldifeat/settings/access
|
||||||
|
# (You need to login as user kaldifeat to see its value)
|
||||||
|
#
|
||||||
|
# - KALDIFEAT_BUILD_TYPE
|
||||||
|
# If not set, defaults to Release.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
export CONDA_BUILD=1
|
||||||
|
|
||||||
|
cur_dir=$(cd $(dirname $BASH_SOURCE) && pwd)
|
||||||
|
kaldifeat_dir=$(cd $cur_dir/.. && pwd)
|
||||||
|
|
||||||
|
cd $kaldifeat_dir
|
||||||
|
|
||||||
|
export KALDIFEAT_ROOT_DIR=$kaldifeat_dir
|
||||||
|
echo "KALDIFEAT_ROOT_DIR: $KALDIFEAT_ROOT_DIR"
|
||||||
|
|
||||||
|
KALDIFEAT_PYTHON_VERSION=$(python3 -c "import sys; print(sys.version[:3])")
|
||||||
|
|
||||||
|
if [ -z $KALDIFEAT_TORCH_VERSION ]; then
|
||||||
|
echo "env var KALDIFEAT_TORCH_VERSION is not set, defaults to 1.7.1"
|
||||||
|
KALDIFEAT_TORCH_VERSION=1.7.1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $KALDIFEAT_BUILD_TYPE ]; then
|
||||||
|
echo "env var KALDIFEAT_BUILD_TYPE is not set, defaults to Release"
|
||||||
|
KALDIFEAT_BUILD_TYPE=Release
|
||||||
|
fi
|
||||||
|
|
||||||
|
export KALDIFEAT_IS_FOR_CONDA=1
|
||||||
|
|
||||||
|
# Example value: 3.8
|
||||||
|
export KALDIFEAT_PYTHON_VERSION
|
||||||
|
|
||||||
|
# Example value: 1.7.1
|
||||||
|
export KALDIFEAT_TORCH_VERSION
|
||||||
|
|
||||||
|
export KALDIFEAT_BUILD_TYPE
|
||||||
|
|
||||||
|
if [ ! -z $KALDIFEAT_IS_GITHUB_ACTIONS ]; then
|
||||||
|
export KALDIFEAT_IS_GITHUB_ACTIONS
|
||||||
|
conda remove -q pytorch
|
||||||
|
conda clean -q -a
|
||||||
|
else
|
||||||
|
export KALDIFEAT_IS_GITHUB_ACTIONS=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $KALDIFEAT_CONDA_TOKEN ]; then
|
||||||
|
echo "Auto upload to anaconda.org is disabled since KALDIFEAT_CONDA_TOKEN is not set"
|
||||||
|
conda build --no-test --no-anaconda-upload -c pytorch -c conda-forge ./scripts/conda-cpu/kaldifeat
|
||||||
|
else
|
||||||
|
conda build --no-test -c pytorch -c conda-forge --token $KALDIFEAT_CONDA_TOKEN ./scripts/conda-cpu/kaldifeat
|
||||||
|
fi
|
10
scripts/conda-cpu/cpuonly/meta.yaml
Normal file
10
scripts/conda-cpu/cpuonly/meta.yaml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# this file is copied from
|
||||||
|
# https://github.com/pytorch/builder/tree/master/conda/cpuonly
|
||||||
|
package:
|
||||||
|
name: cpuonly
|
||||||
|
version: 1.0
|
||||||
|
|
||||||
|
build:
|
||||||
|
track_features:
|
||||||
|
- cpuonly
|
||||||
|
noarch: generic
|
33
scripts/conda-cpu/kaldifeat/build.sh
Normal file
33
scripts/conda-cpu/kaldifeat/build.sh
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Copyright 2021 Xiaomi Corp. (author: Fangjun Kuang)
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
CONDA_ENV_DIR=$CONDA_PREFIX
|
||||||
|
|
||||||
|
echo "KALDIFEAT_PYTHON_VERSION: $KALDIFEAT_PYTHON_VERSION"
|
||||||
|
echo "KALDIFEAT_TORCH_VERSION: $KALDIFEAT_TORCH_VERSION"
|
||||||
|
echo "KALDIFEAT_BUILD_TYPE: $KALDIFEAT_BUILD_TYPE"
|
||||||
|
echo "KALDIFEAT_BUILD_VERSION: $KALDIFEAT_BUILD_VERSION"
|
||||||
|
|
||||||
|
export KALDIFEAT_CMAKE_ARGS="-DCMAKE_BUILD_TYPE=${KALDIFEAT_BUILD_TYPE}"
|
||||||
|
export KALDIFEAT_MAKE_ARGS="-j1 VERBOSE=1"
|
||||||
|
|
||||||
|
export LIBRARY_PATH="/usr/local/miniconda/envs/kaldifeat/lib":$LIBRARY_PATH
|
||||||
|
export LD_LIBRARY_PATH="/usr/local/miniconda/envs/kaldifeat/lib":$LD_LIBRARY_PATH
|
||||||
|
export DYLD_LIBRARY_PATH="/usr/local/miniconda/envs/kaldifeat/lib":$DYLD_LIBRARY_PATH
|
||||||
|
|
||||||
|
python3 setup.py install --single-version-externally-managed --record=record.txt
|
44
scripts/conda-cpu/kaldifeat/meta.yaml
Normal file
44
scripts/conda-cpu/kaldifeat/meta.yaml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package:
|
||||||
|
name: kaldifeat
|
||||||
|
version: "1.16"
|
||||||
|
|
||||||
|
source:
|
||||||
|
path: "{{ environ.get('KALDIFEAT_ROOT_DIR') }}"
|
||||||
|
|
||||||
|
build:
|
||||||
|
number: 0
|
||||||
|
string: cpu_py{{ environ.get('KALDIFEAT_PYTHON_VERSION') }}_torch{{ environ.get('KALDIFEAT_TORCH_VERSION') }}
|
||||||
|
script_env:
|
||||||
|
- KALDIFEAT_IS_GITHUB_ACTIONS
|
||||||
|
- KALDIFEAT_TORCH_VERSION
|
||||||
|
- KALDIFEAT_PYTHON_VERSION
|
||||||
|
- KALDIFEAT_BUILD_TYPE
|
||||||
|
- KALDIFEAT_BUILD_VERSION
|
||||||
|
- KALDIFEAT_IS_FOR_CONDA
|
||||||
|
|
||||||
|
requirements:
|
||||||
|
build:
|
||||||
|
- {{ compiler('c') }} # [win]
|
||||||
|
- {{ compiler('cxx') }} # [win]
|
||||||
|
|
||||||
|
host:
|
||||||
|
- cmake=3.18
|
||||||
|
- python
|
||||||
|
- pytorch={{ environ.get('KALDIFEAT_TORCH_VERSION') }}
|
||||||
|
- gcc_linux-64=7 # [linux]
|
||||||
|
- cpuonly
|
||||||
|
- numpy
|
||||||
|
|
||||||
|
run:
|
||||||
|
- python
|
||||||
|
- pytorch={{ environ.get('KALDIFEAT_TORCH_VERSION') }}
|
||||||
|
- numpy
|
||||||
|
|
||||||
|
about:
|
||||||
|
home: https://github.com/csukuangfj/kaldifeat
|
||||||
|
license: Apache V2
|
||||||
|
license_file: LICENSE
|
||||||
|
summary: Kaldi-compatible feature extraction with PyTorch
|
||||||
|
description: |
|
||||||
|
Kaldi-compatible feature extraction with PyTorch,
|
||||||
|
supporting CUDA, batch processing, chunk processing, and autograd
|
@ -32,6 +32,6 @@ echo "gcc version: $($CC --version)"
|
|||||||
echo "nvcc version: $(nvcc --version)"
|
echo "nvcc version: $(nvcc --version)"
|
||||||
|
|
||||||
export KALDIFEAT_CMAKE_ARGS="-DCMAKE_BUILD_TYPE=${KALDIFEAT_BUILD_TYPE}"
|
export KALDIFEAT_CMAKE_ARGS="-DCMAKE_BUILD_TYPE=${KALDIFEAT_BUILD_TYPE}"
|
||||||
export KALDIFEAT_MAKE_ARGS="-j2"
|
export KALDIFEAT_MAKE_ARGS="-j3"
|
||||||
|
|
||||||
python3 setup.py install --single-version-externally-managed --record=record.txt
|
python3 setup.py install --single-version-externally-managed --record=record.txt
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package:
|
package:
|
||||||
name: kaldifeat
|
name: kaldifeat
|
||||||
version: "1.14"
|
version: "1.16"
|
||||||
|
|
||||||
source:
|
source:
|
||||||
path: "{{ environ.get('KALDIFEAT_ROOT_DIR') }}"
|
path: "{{ environ.get('KALDIFEAT_ROOT_DIR') }}"
|
||||||
|
145
scripts/github_actions/generate_build_matrix.py
Executable file
145
scripts/github_actions/generate_build_matrix.py
Executable file
@ -0,0 +1,145 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright 2022 Xiaomi Corp. (authors: Fangjun Kuang)
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
def get_args():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument(
|
||||||
|
"--enable-cuda",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help="True to enable CUDA",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--for-windows",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help="True for windows",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--test-only-latest-torch",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help="""If True, we test only the latest PyTroch
|
||||||
|
to reduce CI running time.""",
|
||||||
|
)
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def generate_build_matrix(enable_cuda, for_windows, test_only_latest_torch):
|
||||||
|
matrix = {
|
||||||
|
# 1.5.x is removed because there are compilation errors.
|
||||||
|
# See
|
||||||
|
# https://github.com/csukuangfj/k2/runs/2533830771?check_suite_focus=true
|
||||||
|
# and
|
||||||
|
# https://github.com/NVIDIA/apex/issues/805
|
||||||
|
# "1.5.0": {
|
||||||
|
# "python-version": ["3.6", "3.7", "3.8"],
|
||||||
|
# "cuda": ["10.1", "10.2"],
|
||||||
|
# },
|
||||||
|
# "1.5.1": {
|
||||||
|
# "python-version": ["3.6", "3.7", "3.8"],
|
||||||
|
# "cuda": ["10.1", "10.2"],
|
||||||
|
# },
|
||||||
|
"1.6.0": {
|
||||||
|
"python-version": ["3.6", "3.7", "3.8"],
|
||||||
|
"cuda": ["10.1", "10.2"]
|
||||||
|
if not for_windows
|
||||||
|
else ["10.1.243", "10.2.89"],
|
||||||
|
},
|
||||||
|
"1.7.0": {
|
||||||
|
"python-version": ["3.6", "3.7", "3.8"],
|
||||||
|
"cuda": ["10.1", "10.2", "11.0"]
|
||||||
|
if not for_windows
|
||||||
|
else ["10.1.243", "10.2.89", "11.0.3"],
|
||||||
|
},
|
||||||
|
"1.7.1": {
|
||||||
|
"python-version": ["3.6", "3.7", "3.8", "3.9"],
|
||||||
|
"cuda": ["10.1", "10.2", "11.0"]
|
||||||
|
if not for_windows
|
||||||
|
else ["10.1.243", "10.2.89", "11.0.3"],
|
||||||
|
},
|
||||||
|
"1.8.0": {
|
||||||
|
"python-version": ["3.6", "3.7", "3.8", "3.9"],
|
||||||
|
"cuda": ["10.1", "10.2", "11.1"]
|
||||||
|
if not for_windows
|
||||||
|
else ["10.1.243", "10.2.89", "11.1.1"],
|
||||||
|
},
|
||||||
|
"1.8.1": {
|
||||||
|
"python-version": ["3.6", "3.7", "3.8", "3.9"],
|
||||||
|
"cuda": ["10.1", "10.2", "11.1"]
|
||||||
|
if not for_windows
|
||||||
|
else ["10.1.243", "10.2.89", "11.1.1"],
|
||||||
|
},
|
||||||
|
"1.9.0": {
|
||||||
|
"python-version": ["3.6", "3.7", "3.8", "3.9"],
|
||||||
|
"cuda": ["10.2", "11.1"]
|
||||||
|
if not for_windows
|
||||||
|
else ["10.2.89", "11.1.1"],
|
||||||
|
},
|
||||||
|
"1.9.1": {
|
||||||
|
"python-version": ["3.6", "3.7", "3.8", "3.9"],
|
||||||
|
"cuda": ["10.2", "11.1"]
|
||||||
|
if not for_windows
|
||||||
|
else ["10.2.89", "11.1.1"],
|
||||||
|
},
|
||||||
|
"1.10.0": {
|
||||||
|
"python-version": ["3.6", "3.7", "3.8", "3.9"],
|
||||||
|
"cuda": ["10.2", "11.1", "11.3"]
|
||||||
|
if not for_windows
|
||||||
|
else ["10.2.89", "11.1.1", "11.3.1"],
|
||||||
|
},
|
||||||
|
"1.10.1": {
|
||||||
|
"python-version": ["3.6", "3.7", "3.8", "3.9"],
|
||||||
|
"cuda": ["10.2", "11.1", "11.3"]
|
||||||
|
if not for_windows
|
||||||
|
else ["10.2.89", "11.1.1", "11.3.1"],
|
||||||
|
},
|
||||||
|
"1.10.2": {
|
||||||
|
"python-version": ["3.6", "3.7", "3.8", "3.9"],
|
||||||
|
"cuda": ["10.2", "11.1", "11.3"]
|
||||||
|
if not for_windows
|
||||||
|
else ["10.2.89", "11.1.1", "11.3.1"],
|
||||||
|
},
|
||||||
|
"1.11.0": {
|
||||||
|
"python-version": ["3.7", "3.8", "3.9", "3.10"],
|
||||||
|
"cuda": ["10.2", "11.3", "11.5"]
|
||||||
|
if not for_windows
|
||||||
|
else ["11.3.1", "11.5.2"],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if test_only_latest_torch:
|
||||||
|
latest = "1.11.0"
|
||||||
|
matrix = {latest: matrix[latest]}
|
||||||
|
|
||||||
|
ans = []
|
||||||
|
for torch, python_cuda in matrix.items():
|
||||||
|
python_versions = python_cuda["python-version"]
|
||||||
|
cuda_versions = python_cuda["cuda"]
|
||||||
|
if enable_cuda:
|
||||||
|
for p in python_versions:
|
||||||
|
for c in cuda_versions:
|
||||||
|
ans.append({"torch": torch, "python-version": p, "cuda": c})
|
||||||
|
else:
|
||||||
|
for p in python_versions:
|
||||||
|
ans.append({"torch": torch, "python-version": p})
|
||||||
|
|
||||||
|
print(json.dumps({"include": ans}))
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = get_args()
|
||||||
|
generate_build_matrix(
|
||||||
|
enable_cuda=args.enable_cuda,
|
||||||
|
for_windows=args.for_windows,
|
||||||
|
test_only_latest_torch=args.test_only_latest_torch,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
@ -36,6 +36,13 @@ case "$cuda" in
|
|||||||
# url=https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
|
# url=https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
|
||||||
url=https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run
|
url=https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run
|
||||||
;;
|
;;
|
||||||
|
11.3)
|
||||||
|
# url=https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
|
||||||
|
url=https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.19.01_linux.run
|
||||||
|
;;
|
||||||
|
11.5)
|
||||||
|
url=https://developer.download.nvidia.com/compute/cuda/11.5.2/local_installers/cuda_11.5.2_495.29.05_linux.run
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown cuda version: $cuda"
|
echo "Unknown cuda version: $cuda"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -17,42 +17,43 @@
|
|||||||
case $cuda in
|
case $cuda in
|
||||||
10.0)
|
10.0)
|
||||||
filename=cudnn-10.0-linux-x64-v7.6.5.32.tgz
|
filename=cudnn-10.0-linux-x64-v7.6.5.32.tgz
|
||||||
url=http://www.mediafire.com/file/1037lb1vmj9qdtq/cudnn-10.0-linux-x64-v7.6.5.32.tgz/file
|
|
||||||
;;
|
;;
|
||||||
10.1)
|
10.1)
|
||||||
filename=cudnn-10.1-linux-x64-v8.0.2.39.tgz
|
filename=cudnn-10.1-linux-x64-v8.0.2.39.tgz
|
||||||
url=http://www.mediafire.com/file/fnl2wg0h757qhd7/cudnn-10.1-linux-x64-v8.0.2.39.tgz/file
|
|
||||||
;;
|
;;
|
||||||
10.2)
|
10.2)
|
||||||
filename=cudnn-10.2-linux-x64-v8.0.2.39.tgz
|
filename=cudnn-10.2-linux-x64-v8.0.2.39.tgz
|
||||||
url=http://www.mediafire.com/file/sc2nvbtyg0f7ien/cudnn-10.2-linux-x64-v8.0.2.39.tgz/file
|
|
||||||
;;
|
;;
|
||||||
11.0)
|
11.0)
|
||||||
filename=cudnn-11.0-linux-x64-v8.0.5.39.tgz
|
filename=cudnn-11.0-linux-x64-v8.0.5.39.tgz
|
||||||
url=https://www.mediafire.com/file/abyhnls106ko9kp/cudnn-11.0-linux-x64-v8.0.5.39.tgz/file
|
|
||||||
;;
|
;;
|
||||||
11.1)
|
11.1)
|
||||||
filename=cudnn-11.1-linux-x64-v8.0.5.39.tgz
|
filename=cudnn-11.1-linux-x64-v8.0.4.30.tgz
|
||||||
url=https://www.mediafire.com/file/qx55zd65773xonv/cudnn-11.1-linux-x64-v8.0.5.39.tgz/file
|
|
||||||
;;
|
;;
|
||||||
|
11.3)
|
||||||
|
filename=cudnn-11.3-linux-x64-v8.2.0.53.tgz
|
||||||
|
;;
|
||||||
|
11.5)
|
||||||
|
filename=cudnn-11.3-linux-x64-v8.2.0.53.tgz
|
||||||
|
;;
|
||||||
|
# 11.5)
|
||||||
|
# filename=cudnn-linux-x86_64-8.3.2.44_cuda11.5-archive.tar.xz
|
||||||
|
# ;;
|
||||||
*)
|
*)
|
||||||
echo "Unsupported cuda version: $cuda"
|
echo "Unsupported cuda version: $cuda"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
function retry() {
|
command -v git-lfs >/dev/null 2>&1 || { echo >&2 "\nPlease install 'git-lfs' first."; exit 2; }
|
||||||
$* || (sleep 1 && $*) || (sleep 2 && $*) || (sleep 4 && $*) || (sleep 8 && $*)
|
|
||||||
}
|
|
||||||
|
|
||||||
# It is forked from https://github.com/Juvenal-Yescas/mediafire-dl
|
git clone https://huggingface.co/csukuangfj/cudnn
|
||||||
# https://github.com/Juvenal-Yescas/mediafire-dl/pull/2 changes the filename and breaks the CI.
|
cd cudnn
|
||||||
# We use a separate fork to keep the link fixed.
|
git lfs pull --include="$filename"
|
||||||
retry wget https://raw.githubusercontent.com/csukuangfj/mediafire-dl/master/mediafire_dl.py
|
|
||||||
|
|
||||||
sed -i 's/quiet=False/quiet=True/' mediafire_dl.py
|
sudo tar xf ./$filename --strip-components=1 -C /usr/local/cuda
|
||||||
retry python3 mediafire_dl.py "$url"
|
|
||||||
sudo tar xf ./$filename -C /usr/local
|
# save disk space
|
||||||
rm -v ./$filename
|
git lfs prune && cd .. && rm -rf cudnn
|
||||||
|
|
||||||
sudo sed -i '59i#define CUDNN_MAJOR 8' /usr/local/cuda/include/cudnn.h
|
sudo sed -i '59i#define CUDNN_MAJOR 8' /usr/local/cuda/include/cudnn.h
|
||||||
|
@ -78,7 +78,7 @@ case ${torch} in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
1.9.0)
|
1.9.*)
|
||||||
case ${cuda} in
|
case ${cuda} in
|
||||||
10.2)
|
10.2)
|
||||||
package="torch==${torch}"
|
package="torch==${torch}"
|
||||||
@ -91,6 +91,40 @@ case ${torch} in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
1.10.*)
|
||||||
|
case ${cuda} in
|
||||||
|
10.2)
|
||||||
|
package="torch==${torch}"
|
||||||
|
# Leave it empty to use PyPI.
|
||||||
|
url=
|
||||||
|
;;
|
||||||
|
11.1)
|
||||||
|
package="torch==${torch}+cu111"
|
||||||
|
url=https://download.pytorch.org/whl/torch_stable.html
|
||||||
|
;;
|
||||||
|
11.3)
|
||||||
|
package="torch==${torch}+cu113"
|
||||||
|
url=https://download.pytorch.org/whl/torch_stable.html
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
1.11.*)
|
||||||
|
case ${cuda} in
|
||||||
|
10.2)
|
||||||
|
package="torch==${torch}"
|
||||||
|
# Leave it empty to use PyPI.
|
||||||
|
url=
|
||||||
|
;;
|
||||||
|
11.3)
|
||||||
|
package="torch==${torch}+cu113"
|
||||||
|
url=https://download.pytorch.org/whl/torch_stable.html
|
||||||
|
;;
|
||||||
|
11.5)
|
||||||
|
package="torch==${torch}+cu115"
|
||||||
|
url=https://download.pytorch.org/whl/torch_stable.html
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unsupported PyTorch version: ${torch}"
|
echo "Unsupported PyTorch version: ${torch}"
|
||||||
exit 1
|
exit 1
|
||||||
|
35
scripts/github_actions/run-nightly-build.py
Executable file
35
scripts/github_actions/run-nightly-build.py
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright 2022 Xiaomi Corp. (authors: Fangjun Kuang)
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
|
||||||
|
def get_last_commit_date() -> datetime:
|
||||||
|
date = (
|
||||||
|
subprocess.check_output(
|
||||||
|
[
|
||||||
|
"git",
|
||||||
|
"log",
|
||||||
|
"-1",
|
||||||
|
"--format=%ad",
|
||||||
|
"--date=unix",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
.decode("ascii")
|
||||||
|
.strip()
|
||||||
|
)
|
||||||
|
return datetime.utcfromtimestamp(int(date))
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
last_commit_date_utc = get_last_commit_date()
|
||||||
|
now_utc = datetime.utcnow()
|
||||||
|
if last_commit_date_utc + timedelta(days=1) > now_utc:
|
||||||
|
print("true")
|
||||||
|
else:
|
||||||
|
print("false")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
6
setup.py
6
setup.py
@ -61,5 +61,7 @@ with open("kaldifeat/python/kaldifeat/__init__.py", "r") as f:
|
|||||||
|
|
||||||
with open("kaldifeat/python/kaldifeat/__init__.py", "w") as f:
|
with open("kaldifeat/python/kaldifeat/__init__.py", "w") as f:
|
||||||
for line in lines:
|
for line in lines:
|
||||||
if "__version__" not in line:
|
if "__version__" in line and "torch" not in line:
|
||||||
f.write(line)
|
# skip __version__ = "x.x.x"
|
||||||
|
continue
|
||||||
|
f.write(line)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user