跳转至

迁移公告

本文档中心已迁移至 新域名(https://document.nationalchip.com/) ,当前文档中心维护有效期至 2025年6月30日。 请更新您的书签或外部链接,感谢您的支持!

Bunkws 中文使用文档-v1.2*

目录*


视频教程:*

怎么使用 BunKws 训练 KWS 模型(Gx8002):https://www.bilibili.com/video/BV1pJjwzKE5K/?spm_id_from=333.1387.homepage.video_card.click

Bunkws 介绍*

简介:*

Bunkws 是杭州国芯微自研的一款端到端唤醒词训练框架,其独创的从"数据生成->模型生成->测试报告输出"全链路自动化框架,让零算法基础的开发者也能完成从训练到芯片级模型落地,开启智能硬件开发的极简时代。

核心特性:*

  • 端到端唤醒词训练框架
  • 支持中文 && 英文两种语种的模型
  • 超轻量级模型,NPU编译器编译后模型大小约150KB

支持芯片:*

  • 8002B(低功耗)
  • 8002D(非低功耗)

目标用户:*

  • 无算法背景的软件工程师

核心优势:*

  • 一键式自动化流程:数据生成 → 数据准备 → 模型训练 → NPU部署文件生成 → 测试报告输出

版本历史*

版本号 更新日期 修改内容
v1.0 2025-03-26 初始发布版本
v1.1 2025-03-31 解决单个模型训练内存占用过大导致无法同时训练两个模型的问题
v1.2 2025-04-10 修复bug

系统要求*

最低配置:*

  • 系统: ubuntu-18.04
  • CPU: x86_64 32核
  • 内存: 128GB
  • 存储: 4T-SSD
  • GPU: 2080Ti
  • CUDA版本: > 11.0

注意: 1. Bunkws 当前已适配过 Tesla P40、 2080Ti、4090Ti 显卡,其他显卡我们暂未验证。 2. 要求存储硬盘是SSD,如果是机械硬盘,那么训练速度会慢八倍左右。

推荐显卡及驱动配置:*

  • 2080Ti/4090Ti

  • NVIDIA-SMI驱动版本: 525.105.17

  • CUDA版本: 12.0

  • Tesla P40

  • NVIDIA-SMI驱动版本: 550.90.07
  • CUDA版本: 12.4
  • 注意:驱动版本的确定,需要根据系统版本,显卡型号和 CUDA 版本 来确定,搜索方法请参考视频教程

Bunkws 安装及环境配置*

步骤一、Bunkws 相关文件下载*

  • Bunkws 相关文件均放置在一个 ftp 服务器上,并对外开源,用户只要登入该服务器,下载如下相关文件即可。

  • ftp 链接: 请联系我们的业务

  • 用户名: 请联系我们的业务

  • 密码: 请联系我们的业务

  • 需下载文件:

     bunkws.tar.gz                    # Bunkws 框架核心文件
     corpus.tar.gz                    # Bunkws 语料库(比较大)
     Miniconda-3.10.1-Linux-x86_64.sh # 轻量级的Python环境管理工具安装脚本
     py36_tf115.tar.gz                # Python3 环境
     py37_tf114.tar.gz                # python3 环境
     th_12.tar.gz                     # python3 环境
    

  • 下载命令

    wget --ftp-user=test --ftp-password=test@1234 ftp://ftp.nationalchip.com/bunkws.tar.gz .
    wget --ftp-user=test --ftp-password=test@1234 ftp://ftp.nationalchip.com/corpus.tar.gz .
    wget --ftp-user=test --ftp-password=test@1234 ftp://ftp.nationalchip.com/Miniconda-3.10.1-Linux-x86_64.sh .
    wget --ftp-user=test --ftp-password=test@1234 ftp://ftp.nationalchip.com/py36_tf115.tar.gz .
    wget --ftp-user=test --ftp-password=test@1234 ftp://ftp.nationalchip.com/py37_tf114.tar.gz .
    wget --ftp-user=test --ftp-password=test@1234 ftp://ftp.nationalchip.com/th_12.tar.gz .
    

  • 注意:如果目标系统没有 wget 可以参照如下命令安装

sudo apt update          # 更新软件源
sudo apt install wget    # 安装 wget

步骤二、安装显卡驱动*

  • 查看是否已经安装 NVIDIA 驱动
nvidia-smi -L

# 如下打印表示没安装
Command 'nvidia-smi' not found, but can be installed with:

apt install nvidia-340               # version 340.108-0ubuntu5.20.04.2, or
apt install nvidia-utils-390         # version 390.157-0ubuntu0.20.04.1
apt install nvidia-utils-450-server  # version 450.248.02-0ubuntu0.20.04.1
apt install nvidia-utils-470         # version 470.256.02-0ubuntu0.20.04.1
apt install nvidia-utils-470-server  # version 470.256.02-0ubuntu0.20.04.1
apt install nvidia-utils-535         # version 535.183.01-0ubuntu0.20.04.1
apt install nvidia-utils-535-server  # version 535.230.02-0ubuntu0.20.04.3
apt install nvidia-utils-550-server  # version 550.144.03-0ubuntu0.20.04.1
apt install nvidia-utils-565-server  # version 565.57.01-0ubuntu0.20.04.2
apt install nvidia-utils-570-server  # version 570.86.15-0ubuntu0.20.04.5
apt install nvidia-utils-435         # version 435.21-0ubuntu7
apt install nvidia-utils-440         # version 440.82+really.440.64-0ubuntu6
apt install nvidia-utils-418-server  # version 418.226.00-0ubuntu0.20.04.2

咨询管理员以安装其中一个软件。
  • 查看显卡型号
sudo lshw -C display #命令
[sudo] liushk 的密码:
  *-display
       description: VGA compatible controller
       product: G200eR2
       vendor: Matrox Electronics Systems Ltd.
       physical id: 0
       bus info: pci@0000:0a:00.0
       version: 01
       width: 32 bits
       clock: 33MHz
       capabilities: pm vga_controller bus_master cap_list rom
       configuration: driver=mgag200 latency=0 maxlatency=32 mingnt=16
       resources: irq:19 memory:90000000-90ffffff memory:91800000-91803fff memory:91000000-917fffff memory:c0000-dffff
  *-display UNCLAIMED
       description: 3D controller
       product: GP102GL [Tesla P40]   #显卡型号
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:82:00.0
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress cap_list
       configuration: latency=0
       resources: iomemory:3f00-3eff iomemory:3f80-3f7f memory:c8000000-c8ffffff memory:3f000000000-3f7ffffffff memory:3f800000000-3f801ffffff
  • 在 NVIDIA 官网上寻找适配的驱动版本
  • NVIDIA 官网:

  • 在目标系统上安装 NVIDIA 显卡驱动

  • 如下以我电脑为例子,安装如下:

    • Tesla P40

    • NVIDIA-SMI驱动版本:

      • 推荐:550.90.07
    • CUDA版本:
      • 推荐 :12.4
#禁用默认驱动
sudo vi /etc/modprobe.d/blacklist.conf,将 blacklist nouveau 这句加到该文件中
sudo update-initramfs -u
#重启目标系统
sudo reboot
#安装 NVIDIA 显卡驱动
sudo ./NVIDIA-Linux-x86_64-550.90.07.run  -no-x-check -no-nouveau-check -no-opengl-files
# 重启目标系统
sud reboot

步骤三、解压 Bunkws 工程*

  1. 解压主工程文件
    tar xzvf bunkws.tar.gz -C ~
    
  2. 解压 Bunkws 语料库
 tar xzvf corpus.tar.gz -C ~

步骤四、安装及迁移工作环境:*

  1. 安装Miniconda
./Miniconda-3.10.1-Linux-x86_64.sh
source ~/.bashrc
#解压环境
tar xzvf py37_tf114.tar.gz -C ~/miniconda/envs
tar xzvf th_12.tar.gz -C ~/miniconda/envs
tar xzvf py36_tf115.tar.gz -C ~/miniconda/envs

#设置 Miniconda 环境变量
#把如下内容,追加到 ~/.bashrc 文件中,并且把 `liushk` 改成自己的目标系统用户名
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/liushk/miniconda/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/liushk/miniconda/etc/profile.d/conda.sh" ]; then
        . "/home/liushk/miniconda/etc/profile.d/conda.sh"
    else
        export PATH="/home/liushk/miniconda/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<


#添加完成后生效
source ~/.bashrc
  1. 配置 Torch 模型缓存及路径适配
mkdir -p ~/.cache/
cp -r bunkws/envs/torch ~/.cache/
#路径适配修改

sed -i "s|/home/sundy|$HOME|g" ~/miniconda/envs/py37_tf114/bin/pip
sed -i "s|/home/sundy|$HOME|g" ~/miniconda/envs/py37_tf114/bin/gxnpuc
sed -i "s|/home/sundy|$HOME|g" ~/miniconda/bin/conda
  1. 激活环境安装依赖库
source ~/.bashrc

source activate py37_tf114
cd bunkws/tools/logfbank
python setup.py develop
sudo apt install ffmpeg

Bunkws 工程说明*

目录结构:*

  • 主要工程目录介绍
liushk@SPD-R730xd:~/bunkws$ tree -L 1
.
├── egs                 #用户训练工程主目录
├── envs
├── local               #本地化脚本
├── README.md
├── tools               #核心工具链
└── wekws               #唤醒词引擎

工程示例:*

  • 中文项目:earphone
  • 该项⽬下暂有两个版本,根据需要选取

    • v0.1.0 版本,npu 编译后⼤⼩为 155KB
    • v0.1.1 版本,npu 编译后⼤⼩为 120KB.
  • 英文项目:hi_ella

  • 该项⽬下暂只有一个版本
    • v0.1.0 版本,npu 编译后⼤⼩为 150KB 左右

Bunkws 训练一个新的项目教程*

步骤一、 新建项目工程:*

  • 拷贝/新建新工程方法
# 我的 home 路径如下: /home/liushk
# 那么我的通用数据存储路径: /home/liushk/corpus

#进入示例模版工程
cd ~/bunkws/egs
cp -r earphone xxxx  # 中文项目
# 或
cp -r hi_ella xxx   # 英文项目
  • 例如:
  • 我本次训练的是一个中文项目,名称我取名为aiot,根据工程示例 工程的解释,我可以选择 v0.1.0 版本,npu 编译后⼤⼩为 155KB 或者 v0.1.1 版本,npu 编译后⼤⼩为 120KB
  • 我本次项目空间大,可以选择大一点模型,那么我选择 v0.1.0 版本如下所有介绍均以该项目为例,操作如下:
    #进入示例模版工程
    cd ~/bunkws/egs
    cp -r earphone aiot  # 中文项目
    

步骤二、配置数据存储路径*

  • 在前面的下载相关文件 步骤中,下载过通用语料 corpus.tar.gz,并且在 解压 BunKws 工程 步骤中已经解压在 home目录下,那么我的配置路径方法如下:
    # 我的 home 路径如下: /home/liushk
    # 那么我的通用数据存储路径: /home/liushk/corpus
    # 我选择该新项目训练过程中产生的数据,存储路径为 /home/liushk/corpus/kws/aiot
    # 创建模型训练数据存储路径
     mkdir -p /home/liushk/corpus/kws/aiot
    cd ~/bunkws/egs/aiot/v0.1.0
    # 配置路径
    
    vim run.sh
    #把该文件中如下内容修改成如下
    
    corpus_dir=/home/liushk/corpus #通用语料路径
    project_dir=/home/liushk/corpus/kws/aiot
    

步骤三、创建需要的唤醒词、指令词*

  • 在上述步骤中,我们创建了一个/home/liushk/corpus/kws/aiot 目录用于存储本项目的所有生成数据集过程中的语料,Bunkws 框架定义,在 project_dir 路径下,回自动读取 cmd.txt 内容作为唤醒词、指令词

  • 创建方法如下:

# 我的 home 路径如下: /home/liushk
# 那么我的通用数据存储路径: /home/liushk/corpus
# 我选择该新项目训练过程中产生的数据,存储路径为 /home/liushk/corpus/kws/aiot


vim  /home/liushk/corpus/kws/aiot/cmd.txt

#写入格式如下,一个指令、唤醒词一行,以换行分割,除唤醒词、指令词以外不要有其他内容

你好小树
打开灯光
关闭灯光

步骤四、运行 Bunkws 训练目标模型,检查报告输出*

  1. 运行训练脚本
  2. 一键训练 (一键完成,数据生成、数据准备、模型训练、模型测试和部署)
     ./run.sh  # 一键训练
    
  3. 分阶段执行 (可以自主控制运行步骤,主要为了在微调迭代使用,减少不必要的时间,但是请注意,步骤顺序有前后依赖,数据准备好,不可训练

     # 数据生成
     ./run.sh --stage -1 --stop_stage -1
     # 数据准备
     ./run.sh --stage 0 --stop_stage 1
     # 模型训练
     ./run.sh --stage 2 --stop_stage 2
     # 模型测试和部署
     ./run.sh --stage 3 --stop_stage 3
    

  4. Bunkws 运行完成之后,会输出几份模型和测试报告,根据测试报告结果,挑出你最认可的模型即可

  5. 注意: 报告输出路径,会在运行结束时候打印出来,报告有打印输出,也有详细的 xlsx表格根据需要获取即可

输出文件说明:*

  • 模型文件: model.h
  • 测试报告: report.xlsx
  • 关键词列表: keyword.txt