从CAM++到ERES2NetV2:海光DCU环境部署FunASR说话人日志分析的调优实录(附完整代码)

AI6小时前发布 beixibaobao
3 0 0

一、引言

语音识别技术正从单一的“语音转文字”向更丰富的“语音理解”演进,说话人日志(Speaker Diarization)作为区分“谁在何时说了什么”的核心技术,在会议记录、智能客服、影视剧分析等场景中需求日益迫切。

FunASR是阿里巴巴通义实验室开源的语音识别基础框架,集成了语音端点检测(VAD)、语音识别(ASR)、标点恢复、说话人日志等工业级模型。其中Fun-ASR-Nano模型支持7大方言(吴语、粤语、闽语、客家话、赣语、湘语、晋语)及26种地域口音,是方言识别与说话人日志的理想组合

本文在海光K100_AI环境里(Ubuntu 22.04 + DTK 26.04),完整记录这一过程:从CAM++到ERES2NetV2的模型演进,从VAD默认参数到细粒度切分的调优之路。

二、环境准备

2.1 硬件与系统环境

组件

规格

CPU

2×海光74902.7GHz64C

内存

16×32GDDR5

GPU

8×海光DCU64GBK100_AI

Python 3.10

2.2 DTK与PyTorch(DCU版)安装

PyTorch绝对不能从官网直接pip安装,否则DCU显卡无法识别。必须从海光光合开发者社区下载适配DTK版本的定制PyTorch。

# 1. 创建虚拟环境
python -m venv venv-fun-asr
source venv-fun-asr/bin/activate
# 2. 安装适配DCU的PyTorch(DTK 26.04对应版本)
# 具体下载链接请从海光光合开发者社区获取
pip install torch-2.9.0+das.opt1.dtk2604.20260206.g275d08c2
pip install torchaudio-2.9.0+das.opt1.dtk2604.20260305.geaa9e4e4
pip install torchvision-0.24.0+das.opt1.dtk2604.20260210.gf0277aff
# 3. 验证DCU是否可用
python -c "import torch; print(torch.cuda.is_available())"
# 应输出 True

2.3 FunASR及依赖安装

# 克隆FunASR仓库
git clone https://github.com/FunAudioLLM/Fun-ASR.git
cd Fun-ASR
# 安装FunASR及核心依赖
pip install funasr modelscope librosa soundfile
# 验证安装
pip list | grep funasr
# funasr 1.3.22

从最终的pip列表可以看到,环境中已成功集成了funasr 1.3.22、torch 2.9.0+das.opt1.dtk2604、modelscope 1.36.1等关键组件,说明DCU环境已就绪。

三、模型选型与初步尝试

3.1 Fun-ASR-Nano-2512

方言识别的利器,地域口音26种(河南、陕西、湖北、四川、重庆、云南、贵州、广东、广西等),方言7种(吴语、粤语、闽语、客家话、赣语、湘语、晋语),是通义实验室推出的端到端语音识别模型,基于数千万小时真实语音数据训练。

3.2 官方示例:看起来很简单

FunASR官方文档提供了非常简洁的说话人日志示例:

from funasr import AutoModel
model = AutoModel(
    model="paraformer-zh",
    vad_model="fsmn-vad",
    punc_model="ct-punc",
    spk_model="cam++",
)
res = model.generate(input="meeting.wav")
print(res[0]["sentence_info"])

看起来只需一行spk_model="cam++"就能搞定说话人分离,但实际部署时,事情远没有这么简单。

四、第一回合:CAM++的尝试——标签不连续

4.1 初始代码

按照官方示例,使用CAM++作为说话人模型,同时指定本地已下载的Fun-ASR-Nano模型:

from funasr import AutoModel
model = AutoModel(
    model="/home/models/Fun-ASR-Nano-2512",
    trust_remote_code=True,
    remote_code="./model.py",
    vad_model="fsmn-vad",
    spk_model="cam++",
    device="cuda:0",
)
res = model.generate(
    input=["output.wav"],
    batch_size=1,
    language="中文"
)
for sent in res[0]["sentence_info"]:
    print(f"说话人 {sent['spk']}: {sent['text']}")

4.2 遇到的问题

运行结果让人大跌眼镜:

说话人 1: 俺姓张名飞字义德,平生最爱结交天下豪杰,今日幸会二位壮士,甚觉意气相投。呃,请请请请请来人上酒某姓关名宇字云长河东谢良人啊嗯。
说话人 4: 在下刘备,刘玄德,请。
说话人 1: 为你我三人萍水相逢,一见如故,请请。
说话人 3: 坐坐坐坐坐坐坐。

问题表现:

说话人标签为 1, 4, 1, 3,标签不连续

关羽的台词(“某姓关名宇字云长”)被误标为Speaker 1(张飞)

刘备被误标为Speaker 4

总共只有三个人,却出现了4个标签编号

4.3 根因分析

1、CAM++对短片段区分度不足:CAM++在较长、清晰的语音段上表现尚可,但对于包含方言口音、语气词(如“呃”、“嗯”)和短句的音频,声纹区分能力明显下降。

2、VAD切分过粗:默认VAD参数将整个张飞的第一大段(包含“请人上酒”等)合并成一个片段,导致无法在片段内部区分不同说话人。
五、第二回合:细粒度VAD + 阈值调整

5.1 优化思路

既然问题是VAD切分过粗和聚类参数未生效,那就从两方面入手:

让VAD切得更细:调整max_single_segment_time和min_silence_duration

显式传入聚类参数:通过spk_kwargs传入threshold

5.2 调整后的代码

from funasr import AutoModel
model = AutoModel(
    model="/home/models/Fun-ASR-Nano-2512",
    trust_remote_code=True,
    remote_code="./model.py",
    vad_model="fsmn-vad",
    vad_kwargs={
        "max_single_segment_time": 10000,   # 最大10秒,切得更细
        "min_silence_duration": 200         # 静音200ms即切分
    },
    spk_model="cam++",
    spk_kwargs={"threshold": 0.4},          # 降低阈值,鼓励合并
    device="cuda:0",
)

5.3 遇到的问题

VAD成功切出了13个片段,但聚类结果依然混乱:

说话人 2: 俺姓张,名飞,字翼德,平生最爱结交天下豪杰。今日幸会,二位壮士,甚觉意气相投。
说话人 0: 请来人上酒,某姓官。
说话人 3: 名羽字云长,河东解良人。
说话人 3: 在下刘备,刘玄德,请。
说话人 2: 为你我三人萍水相逢,一见如故,请请。
说话人 0: 坐坐坐坐坐坐坐。

问题表现:

出现了标签 2, 0, 3, 3, 2, 0,仍然不连续

关羽和刘备被归为同一说话人(Speaker 3),无法区分

张飞被拆成两段(Speaker 2和Speaker 0)

5.4 根因分析

CAM++在短语音片段上的声纹区分能力达到瓶颈。对于音色相近的说话人(如本音频中的关羽和刘备),CAM++无法有效分离。这说明需要更强的说话人确认模型。

六、第三回合:尝试第三方工具——环境依赖死锁

6.1 尝试3D-Speaker

3D-Speaker是阿里通义实验室开源的专门说话人识别工具包,理论上比FunASR内置的说话人日志更专业。

git clone https://github.com/alibaba-damo-academy/3D-Speaker.git
cd 3D-Speaker
pip install -r requirements.txt

遇到的错误:

ModuleNotFoundError: No module named 'fastcluster'
ModuleNotFoundError: No module named 'hdbscan'
RuntimeError: Could not load libtorchcodec... OSError: libnvrtc.so.13: cannot open shared object file

6.2 尝试Pyannote

Pyannote是业界知名的说话人日志专用工具。

from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization-3.1")

遇到的错误:

GatedRepoError: Cannot access gated repo for pyannote/speaker-diarization-3.1

Pyannote 3.1模型需要Hugging Face权限申请,且模型下载依赖国外网络,在国内环境下经常失败。

6.3 结论

在海光DCU环境下,第三方说话人日志工具的依赖链过于复杂:

3D-Speaker:依赖fastcluster、hdbscan、torchcodec等,遭遇FFmpeg版本不兼容、libnvrtc.so缺失等问题

Pyannote:依赖Hugging Face模型下载,遭遇网络不可达和GatedRepo权限问题

七、第四回合:ERES2NetV2——柳暗花明

7.1 为什么选择ERES2NetV2

ERES2Net是比CAM++更先进的说话人确认模型,在短语音片段和复杂声学环境下具有更强的区分能力。FunASR已将其注册为iic/speech_eres2netv2_sv_zh-cn_16k-common。

7.2 模型下载

必须回到FunASR原生方案,但需要更换更强的说话人模型。

# 使用modelscope下载ERES2NetV2
modelscope download --model iic/speech_eres2netv2_sv_zh-cn_16k-common 
    --local_dir /root/.cache/modelscope/hub/models/iic/speech_eres2netv2_sv_zh-cn_16k-common

7.3 最终调优参数

经过多轮试验,确定了以下最佳参数组合:

参数

最终值

作用

max_single_segment_time

8000ms

控制VAD切分粒度,切得更细以分离短句

min_silence_duration

150ms

静音检测更敏感,捕获语气词之间的停顿

spk_kwargs["threshold"]

0.25

聚类阈值,越低越倾向于合并相似声纹

7.4 成功!三人分离

from funasr import AutoModel
model = AutoModel(
    model="/home/models/Fun-ASR-Nano-2512",
    trust_remote_code=True,
    remote_code="./model.py",
    vad_model="fsmn-vad",
    vad_kwargs={
        "max_single_segment_time": 8000,
        "min_silence_duration": 150
    },
    spk_model="iic/speech_eres2netv2_sv_zh-cn_16k-common",
    spk_kwargs={"threshold": 0.25},
    device="cuda:0",
)
res = model.generate(
    input=["output.wav"],
    batch_size=1,
    language="中文"
)
sentences = res[0]["sentence_info"]
for s in sentences:
    if s["spk"] != 0:  # 过滤标签0(通常为语气词)
        print(f"说话人 {s['spk']}: [{s['start']}ms - {s['end']}ms] {s.get('sentence', '')}")

运行结果:

说话人 1: [0ms - 16020ms] 哈哈哈哈哈哈,俺姓张,名飞,字翼德,平生最爱结交天下豪杰,今日幸会二位壮士。信君意气相投,请请请请请请来人上酒。
说话人 2: [16020ms - 24030ms] 某姓关名羽,字云长,河东解良人。
说话人 3: [24030ms - 34930ms] 啊嗯在下刘备,刘玄德,请。
说话人 1: [35950ms - 47360ms] 为你我三人萍水相逢,一见如故,请请。坐坐坐坐坐坐坐。

成功标志:

✅ 张飞(Speaker 1)、关羽(Speaker 2)、刘备(Speaker 3)三人成功分离

✅ 标签连续(1, 2, 3)

✅ 时间戳精确到毫秒级

✅ 方言识别准确(“俺姓张”、“某姓关”、“在下刘备”均正确识别)

八、最终通用代码(附完整实现)

基于以上调优经验,封装了通用函数,可直接用于不同音频文件:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
通用声学说话人日志脚本 (Fun-ASR-Nano + ERES2NetV2)
支持中文、英文、日文及中文方言,完全基于声学特征,无需文本关键词。
"""
import os
from funasr import AutoModel
# ---------- 配置参数(可根据不同音频调整) ----------
ASR_MODEL_PATH = "/home/models/Fun-ASR-Nano-2512"      # 您的本地ASR模型路径
REMOTE_CODE = "./model.py"                             # model.py 文件路径
SPK_MODEL = "iic/speech_eres2netv2_sv_zh-cn_16k-common"  # 说话人模型(已下载)
DEVICE = "cuda:0"                                      # 推理设备
VAD_KWARGS = {
    "max_single_segment_time": 8000,   # 最大VAD片段时长(毫秒),越小切分越细
    "min_silence_duration": 150,       # 最短静音时长(毫秒),越小越敏感
}
SPK_KWARGS = {
    "threshold": 0.25,                 # 聚类阈值,越低越倾向于合并相似声纹
}
LANGUAGE = "中文"                       # 识别语言,支持中文/英文/日文等
# ---------- 核心函数 ----------
def diarize_audio(audio_path, asr_model_path=ASR_MODEL_PATH, remote_code=REMOTE_CODE,
                  spk_model=SPK_MODEL, device=DEVICE,
                  vad_kwargs=VAD_KWARGS, spk_kwargs=SPK_KWARGS,
                  language=LANGUAGE):
    """
    对音频进行说话人日志(说话人分离 + 语音识别)
    Args:
        audio_path (str): 输入音频文件路径(支持 wav, mp3 等)
        asr_model_path (str): Fun-ASR-Nano 模型本地路径
        remote_code (str): model.py 文件路径
        spk_model (str): 说话人模型名称(已注册)
        device (str): 推理设备
        vad_kwargs (dict): VAD 参数
        spk_kwargs (dict): 说话人聚类参数
        language (str): 识别语言
    Returns:
        list: 每个元素为字典,包含 'speaker'(标签), 'start'(ms), 'end'(ms), 'sentence'(文本)
    """
    # 1. 初始化模型
    model = AutoModel(
        model=asr_model_path,
        trust_remote_code=True,
        remote_code=remote_code,
        vad_model="fsmn-vad",
        vad_kwargs=vad_kwargs,
        spk_model=spk_model,
        spk_kwargs=spk_kwargs,
        device=device,
    )
    # 2. 执行推理
    res = model.generate(
        input=[audio_path],
        batch_size=1,
        language=language,
    )
    # 3. 提取句子信息
    sentences = res[0].get("sentence_info", [])
    if not sentences:
        # 若无时间戳,尝试从 text 字段获取整段
        full_text = res[0].get("text", "")
        duration_ms = int(res[0].get("audio_duration_s", 0) * 1000)
        sentences = [{"speaker": 0, "start": 0, "end": duration_ms, "sentence": full_text}]
    # 4. 过滤掉标签为 0 的片段(通常为短噪声或语气词)
    #    并保留所有其他标签(按出现顺序)
    #    注意:不同音频中可能标签编号不同,但 0 通常被用作“未知”类别
    filtered = [s for s in sentences if s.get("spk") != 0]
    # 5. (可选)合并相邻且相同说话人的片段,以简化输出
    merged = []
    for s in filtered:
        if not merged:
            merged.append(s)
        else:
            last = merged[-1]
            if s["spk"] == last["spk"]:
                last["end"] = s["end"]
                last["sentence"] += s.get("sentence", "")
            else:
                merged.append(s)
    # 6. 将标签重新映射为 1, 2, 3, ...(按出现顺序)
    label_map = {}
    next_label = 1
    for s in merged:
        spk = s["spk"]
        if spk not in label_map:
            label_map[spk] = next_label
            next_label += 1
        s["spk"] = label_map[spk]
    # 7. 返回结果
    return merged
# ---------- 主程序(可直接运行) ----------
if __name__ == "__main__":
    # 修改此处为您的音频文件路径
    audio_file = "output.wav"
    # 执行说话人日志
    result = diarize_audio(audio_file)
    # 打印结果
    print("n=== 说话人日志结果 ===")
    for item in result:
        print(f"说话人 {item['spk']}: [{item['start']}ms - {item['end']}ms] {item['sentence']}")

最终运行结果如下:

source venv-fun-asr/bin/activate
(venv-fun-asr) root@lswa1:/home/models/Fun-ASR# python Fun-ASR-Nano+细粒度VAD+聚类阈值调整+标签平滑.py
funasr version: 1.3.22.
Check update of funasr, and it would cost few times. You may disable it by set `disable_update=True` in AutoModel
You are using the latest version of funasr-1.3.22
2026-07-22 11:24:45,980 [INFO] download models from model hub: ms
2026-07-22 11:24:46,058 [WARNING] trust_remote_code: True
Loading remote code successfully: ./model.py
2026-07-22 11:25:36,940 [INFO] rank: 0, model is builded.
2026-07-22 11:25:36,941 [INFO] Loading pretrained params from /home/models/Fun-ASR-Nano-2512/model.pt
2026-07-22 11:25:36,950 [INFO] ckpt: /home/models/Fun-ASR-Nano-2512/model.pt
2026-07-22 11:25:39,602 [INFO] scope_map: ['module.', 'None']
2026-07-22 11:25:39,602 [INFO] excludes: None
2026-07-22 11:25:39,787 [INFO] Loading ckpt: /home/models/Fun-ASR-Nano-2512/model.pt, status: <All keys matched successfully>
2026-07-22 11:25:40,378 [INFO] Building VAD model.
2026-07-22 11:25:40,378 [INFO] download models from model hub: ms
Downloading Model from https://www.modelscope.cn to directory: /root/.cache/modelscope/hub/models/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch
2026-07-22 11:25:42,019 [WARNING] trust_remote_code: False
2026-07-22 11:25:42,031 [INFO] Loading pretrained params from /root/.cache/modelscope/hub/models/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/model.pt
2026-07-22 11:25:42,032 [INFO] ckpt: /root/.cache/modelscope/hub/models/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/model.pt
2026-07-22 11:25:42,041 [INFO] scope_map: ['module.', 'None']
2026-07-22 11:25:42,041 [INFO] excludes: None
2026-07-22 11:25:42,043 [INFO] Loading ckpt: /root/.cache/modelscope/hub/models/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/model.pt, status: <All keys matched successfully>
2026-07-22 11:25:42,047 [INFO] Building SPK model.
2026-07-22 11:25:42,047 [INFO] download models from model hub: ms
Downloading Model from https://www.modelscope.cn to directory: /root/.cache/modelscope/hub/models/iic/speech_eres2netv2_sv_zh-cn_16k-common
2026-07-22 11:25:43,230 [WARNING] trust_remote_code: False
2026-07-22 11:25:43,474 [INFO] ERes2NetV2 loaded pretrained weights from /root/.cache/modelscope/hub/models/iic/speech_eres2netv2_sv_zh-cn_16k-common/pretrained_eres2netv2.ckpt
rtf_avg: 0.095: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:04<00:00,  4.76s/it]
rtf_avg: 0.115: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:04<00:00,  1.43it/s]
rtf_avg: 0.209: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  3.18it/s]
rtf_avg: 0.011: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<00:00, 61.43it/s]
rtf_avg: 0.011: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:00<00:00, 58.70it/s]
rtf_avg: 0.010: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 63.13it/s]
rtf_avg: 0.010: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 63.03it/s]
rtf_avg: 0.010: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 62.92it/s]
rtf_avg: 0.010: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 63.02it/s]
2026-07-22 11:25:55,354 [WARNING] punc_model is missing, falling back to vad_segment mode for speaker diarization.███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 63.24it/s]
rtf_avg: 0.125, time_speech:  50.048, time_escape: 6.279: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:06<00:00,  6.29s/it]
=== 说话人日志结果 ===
说话人 1: [0ms - 16020ms] 哈哈哈哈哈哈,俺姓张,名飞,字翼德,平生最爱结交天下豪杰,今日幸会二位壮士。信君意气相投,请请请请请请来人上酒。
说话人 2: [16020ms - 24030ms] 某姓关名羽,字云长,河东解良人。
说话人 3: [26920ms - 34930ms] 在下刘备,刘玄德,请。
说话人 1: [35950ms - 47360ms] 为你我三人萍水相逢,一见如故,请请。坐坐坐坐坐坐坐。

从CAM++到ERES2NetV2:海光DCU环境部署FunASR说话人日志分析的调优实录(附完整代码)

九、踩坑总结与经验教训

9.1 DCU环境特有坑

问题

现象

解决方案

PyTorch版本不匹配

torch.cuda.is_available()返回False

必须从海光光合开发者社区下载适配DTK的定制PyTorch

DTK版本冲突

各种CUDA相关库报错

所有依赖包(torch、torchvision、flash_attn等)必须使用相同DTK版本

依赖包缺失

ModuleNotFoundError

参考最终pip列表逐项安装

参照以下pip安装的模块

(venv-fun-asr) root@lswa1:/home/models/Fun-ASR# pip list
Package                                  Version                                            Editable project location
---------------------------------------- -------------------------------------------------- -----------------------------------------------
accelerate                               1.12.0
addict                                   2.4.0
aiofiles                                 24.1.0
aiohappyeyeballs                         2.6.1
aiohttp                                  3.13.3
aiohttp-cors                             0.8.1
aiohttp_socks                            0.11.0
aiosignal                                1.4.0
alembic                                  1.18.4
aliyun-python-sdk-core                   2.16.0
aliyun-python-sdk-kms                    2.16.5
amdsmi                                   24.5.3+02cbffb.dirty
annotated-doc                            0.0.4
annotated-types                          0.7.0
anthropic                                0.83.0
antlr4-python3-runtime                   4.9.3
anyio                                    4.12.1
asteroid-filterbanks                     0.4.0
astor                                    0.8.1
async-timeout                            5.0.1
attrs                                    25.4.0
audioread                                3.1.0
av                                       17.0.1
backports.asyncio.runner                 1.2.0
blake3                                   1.0.8
blinker                                  1.9.0
boto3                                    1.42.53
botocore                                 1.42.53
brotli                                   1.2.0
cache_dit                                1.3.5
cachetools                               7.0.1
cbor2                                    5.8.0
certifi                                  2026.1.4
cffi                                     2.0.0
chardet                                  7.4.3
charset-normalizer                       3.4.4
click                                    8.4.2
cloudpickle                              3.1.2
cmake                                    3.29.0
colorama                                 0.4.6
colorful                                 0.5.8
colorlog                                 6.11.0
comfy-aimdo                              0.2.12
comfy-kitchen                            0.2.8
comfyui-embedded-docs                    0.4.3
comfyui_frontend_package                 1.42.14
comfyui-manager                          4.2.2
comfyui_workflow_templates               0.9.59
comfyui-workflow-templates-core          0.3.213
comfyui-workflow-templates-media-api     0.3.70
comfyui-workflow-templates-media-image   0.3.130
comfyui-workflow-templates-media-other   0.3.179
comfyui-workflow-templates-media-video   0.3.79
compressed-tensors                       0.13.0
compute-wer                              0.2.5
contourpy                                1.3.2
controlnet_aux                           0.0.10
crcmod                                   1.7
cryptography                             46.0.5
cstr                                     0.1.0
cuda-pathfinder                          1.3.4
cupy                                     12.3.0
cupy-cuda12x                             14.0.1
cycler                                   0.12.1
dashscope                                1.25.17
datasets                                 4.5.0
decorator                                5.2.1
decord                                   0.6.0
depyf                                    0.20.0
diffusers                                0.38.0.dev0                                        /home/models/ernie-image_pytorch-main/diffusers
dill                                     0.4.0
diskcache                                5.6.3
distlib                                  0.4.0
dnspython                                2.8.0
docstring_parser                         0.17.0
easydict                                 1.13
eft                                      0.0.7
einops                                   0.8.2
email-validator                          2.3.0
exceptiongroup                           1.3.1
fairscale                                0.4.13
fastapi                                  0.129.0
fastapi-cli                              0.0.23
fastapi-cloud-cli                        0.13.0
fastar                                   0.8.0
fastcluster                              1.3.0
fastrlock                                0.8.3
ffmpeg-python                            0.2.0
ffmpy                                    0.3.0
filelock                                 3.29.5
flash_attn                               2.6.1+das.opt1.dtk2604.torch291.20260210.g7808665e
flash_mla                                1.0.0
Flask                                    3.1.3
flask-cors                               6.0.5
fonttools                                4.61.1
frozenlist                               1.8.0
fsspec                                   2025.10.0
ftfy                                     6.3.1
funasr                                   1.3.22
future                                   1.0.0
gguf                                     0.17.1
gitdb                                    4.0.12
GitPython                                3.1.47
glfw                                     2.10.0
google-ai-generativelanguage             0.6.15
google-api-core                          2.30.0
google-api-python-client                 2.194.0
google-auth                              2.48.0
google-auth-httplib2                     0.3.1
google-cloud-core                        2.5.0
google-cloud-storage                     3.9.0
google-crc32c                            1.8.0
google-generativeai                      0.8.6
google-resumable-media                   2.8.0
googleapis-common-protos                 1.72.0
gradio                                   6.13.0
gradio_client                            2.5.0
greenlet                                 3.3.1
groovy                                   0.1.2
grpcio                                   1.78.1
grpcio-reflection                        1.78.1
grpcio-status                            1.71.2
grpcio-tools                             1.78.1
h11                                      0.16.0
h2                                       4.3.0
hdbscan                                  0.8.44
hf-gradio                                0.4.1
hf-xet                                   1.5.1
hiredis                                  3.3.0
hpack                                    4.1.0
httpcore                                 1.0.9
httptools                                0.7.1
httpx                                    0.28.1
httpx-sse                                0.4.3
huggingface_hub                          0.36.2
humanize                                 4.15.0
hydra-core                               1.3.4
Hypercorn                                0.18.0
hyperframe                               6.1.0
hypothesis                               5.35.1
idna                                     3.11
ijson                                    3.4.0.post0
ImageIO                                  2.37.3
imageio-ffmpeg                           0.6.0
img2texture                              1.0.6
importlib_metadata                       8.7.1
indic_numtowords                         1.1.0
iniconfig                                2.3.0
interegular                              0.3.3
itsdangerous                             2.2.0
jaconv                                   0.5.0
jamo                                     0.4.1
jieba                                    0.42.1
Jinja2                                   3.1.6
jiter                                    0.13.0
jmespath                                 0.10.0
joblib                                   1.5.3
jsonschema                               4.26.0
jsonschema-specifications                2025.9.1
julius                                   0.2.8
kaldiio                                  2.18.1
kiwisolver                               1.4.9
kornia                                   0.8.2
kornia_rs                                0.1.10
lark                                     1.2.2
lazy-loader                              0.5
libnacl                                  2.1.0
librosa                                  0.11.0
lightning                                2.6.5
lightning-utilities                      0.15.3
lightop                                  0.6.0+das.dtk2604.torch291.20260211.g1fdc3ed2
llguidance                               1.3.0
llvmlite                                 0.44.0
lm-format-enforcer                       0.11.3
lmslim                                   0.4.0+das.opt1.dtk2604.torch290
loguru                                   0.7.3
Mako                                     1.3.11
Markdown                                 3.10.2
markdown-it-py                           4.0.0
MarkupSafe                               3.0.3
matplotlib                               3.10.8
matrix-nio                               0.25.2
mcp                                      1.26.0
mdurl                                    0.1.2
mistral_common                           1.11.2
model-hosting-container-standards        0.1.13
model-index                              0.1.11
modelscope                               1.36.1
more-itertools                           11.1.0
mpmath                                   1.3.0
msgpack                                  1.1.2
msgspec                                  0.20.0
multidict                                6.7.1
multiprocess                             0.70.18
networkx                                 3.4.2
ninja                                    1.11.1
numa                                     1.4.6
numba                                    0.61.2
numpy                                    1.26.4
omegaconf                                2.3.1
open_clip_torch                          3.3.0
openai                                   2.21.0
openai-harmony                           0.0.8
openai-whisper                           20250625
opencensus                               0.11.4
opencensus-context                       0.1.3
opencv-python                            4.13.0.92
opencv-python-headless                   5.0.0.93
opendatalab                              0.0.10
openmim                                  0.3.9
opentelemetry-api                        1.44.0
opentelemetry-exporter-otlp              1.44.0
opentelemetry-exporter-otlp-proto-common 1.44.0
opentelemetry-exporter-otlp-proto-grpc   1.44.0
opentelemetry-exporter-otlp-proto-http   1.44.0
opentelemetry-exporter-prometheus        0.60b1
opentelemetry-proto                      1.44.0
opentelemetry-sdk                        1.44.0
opentelemetry-semantic-conventions       0.65b0
openxlab                                 0.1.3
optimum-quanto                           0.2.7
optuna                                   4.9.0
ordered-set                              4.1.0
orjson                                   3.11.8
oss2                                     2.17.0
outlines_core                            0.2.11
packaging                                24.2
pandas                                   2.3.3
partial-json-parser                      0.2.1.1.post7
peft                                     0.18.1
pilgram                                  2.0.0
pillow                                   12.1.1
pip                                      22.0.2
platformdirs                             4.9.2
playwright                               1.60.0
pluggy                                   1.6.0
pooch                                    1.9.0
primePy                                  1.3
priority                                 2.0.0
prometheus_client                        0.24.1
prometheus-fastapi-instrumentator        7.1.0
propcache                                0.4.1
proto-plus                               1.27.1
protobuf                                 6.33.6
psutil                                   7.2.2
py-cpuinfo                               9.0.0
py-spy                                   0.4.1
pyannote-audio                           4.0.7
pyannote-core                            6.0.1
pyannote-database                        6.1.1
pyannote-metrics                         4.1
pyannote-pipeline                        4.0.0
pyannoteai-sdk                           0.4.0
pyarrow                                  23.0.1
pyasn1                                   0.6.2
pyasn1_modules                           0.4.2
pybase64                                 1.4.3
pycountry                                26.2.16
pycparser                                3.0
pycryptodome                             3.23.0
pydantic                                 2.12.5
pydantic_core                            2.41.5
pydantic-extra-types                     2.11.0
pydantic-settings                        2.13.1
pydub                                    0.25.1
pyee                                     13.0.1
PyGithub                                 2.9.1
Pygments                                 2.19.2
PyHive                                   0.7.0
PyJWT                                    2.11.0
PyMatting                                1.1.15
PyMySQL                                  1.1.2
PyNaCl                                   1.6.2
pynndescent                              0.6.0
PyOpenGL                                 3.1.10
pyopenjtalk-plus                         0.4.1.post8
pyparsing                                3.3.2
pytest                                   9.0.2
pytest-asyncio                           1.3.0
python-dateutil                          2.9.0.post0
python-dotenv                            1.2.1
python-json-logger                       4.0.0
python-multipart                         0.0.22
python-socks                             2.8.1
pytorch-lightning                        2.6.5
pytorch-metric-learning                  2.9.0
pytz                                     2023.4
PyYAML                                   6.0.3
pyzmq                                    27.1.0
Quart                                    0.20.0
RapidFuzz                                3.14.5
ray                                      2.48.0
redis                                    7.2.0
referencing                              0.37.0
regex                                    2026.2.19
rembg                                    2.0.69
requests                                 2.34.2
rich                                     15.0.0
rich-toolkit                             0.19.4
rignore                                  0.7.6
rpds-py                                  0.30.0
rsa                                      4.9.1
runai-model-streamer                     0.15.3
runai-model-streamer-gcs                 0.15.3
runai-model-streamer-s3                  0.15.3
s3transfer                               0.16.0
safehttpx                                0.1.7
safetensors                              0.8.0
scikit-image                             0.25.2
scikit-learn                             1.7.2
scipy                                    1.15.3
semantic-version                         2.10.0
sentencepiece                            0.2.1
sentry-sdk                               2.53.0
setproctitle                             1.3.7
setuptools                               59.6.0
setuptools-scm                           9.2.2
shellingham                              1.5.4
simpleeval                               1.0.7
simplejson                               4.1.1
six                                      1.17.0
smart_open                               7.5.0
smmap                                    5.0.3
sniffio                                  1.3.1
sortedcontainers                         2.4.0
soundfile                                0.13.1
soxr                                     1.1.0
spandrel                                 0.4.2
SQLAlchemy                               2.0.46
sse-starlette                            3.2.0
starlette                                0.52.1
SudachiDict-core                         20260428
SudachiPy                                0.6.11
supervisor                               4.3.0
sympy                                    1.14.0
tabulate                                 0.10.0
taskgroup                                0.2.2
tensorboardX                             2.6.4
tensorizer                               2.10.1
threadpoolctl                            3.6.0
tifffile                                 2025.5.10
tiktoken                                 0.12.0
timm                                     1.0.24
tokenizers                               0.22.2
toml                                     0.10.2
tomli                                    2.4.0
tomlkit                                  0.14.0
torch                                    2.9.0+das.opt1.dtk2604.20260206.g275d08c2
torch-audiomentations                    0.12.0
torch-complex                            0.4.4
torch_pitch_shift                        1.2.5
torchaudio                               2.9.0+das.opt1.dtk2604.20260305.geaa9e4e4
torchcodec                               0.15.0
torchdata                                0.8.0
torchmetrics                             1.9.0
torchsde                                 0.2.6
torchvision                              0.24.0+das.opt1.dtk2604.20260210.gf0277aff
tqdm                                     4.68.3
trampoline                               0.1.2
transformers                             4.57.6
triton                                   3.3.0+das.opt2.dtk2604.torch291.20260210.g1329924c
typer                                    0.24.0
typer-slim                               0.24.0
typing_extensions                        4.15.0
typing-inspection                        0.4.2
tzdata                                   2025.3
umap-learn                               0.5.12
unpaddedbase64                           2.1.0
uritemplate                              4.2.0
urllib3                                  1.26.20
uv                                       0.11.7
uvicorn                                  0.41.0
uvloop                                   0.22.1
virtualenv                               20.38.0
vllm                                     0.15.1+das.opt1.alpha.dtk2604
watchfiles                               1.1.1
wcwidth                                  0.7.0
websocket-client                         1.9.0
websockets                               16.0
Werkzeug                                 3.1.6
whisper_normalizer                       0.1.14
wrapt                                    2.1.1
wsproto                                  1.3.2
xgrammar                                 0.1.29
xxhash                                   3.6.0
yarl                                     1.22.0
zhconv                                   1.4.3
zipp                                     3.23.0

9.2 FunASR说话人日志坑

问题

根因

解决方案

标签不连续(1,4,1,3)

punc_model缺失导致回退到vad_segment模式

Fun-ASR-Nano不需要punc_model,该警告可忽略,但需通过spk_kwargs显式传入聚类参数

CAM++区分度不足

CAM++对短片段、方言口音的声纹区分能力有限

升级到ERES2NetV2

VAD切分过粗

默认VAD参数将多人对话合并

调整max_single_segment_time(8000ms)和min_silence_duration(150ms)

标签0出现

ERES2NetV2将短语气词标记为0

后处理过滤s.get("spk") != 0

9.3 第三方工具依赖坑

工具

问题

结论

3D-Speaker

依赖fastcluster、hdbscan、torchcodec,遭遇FFmpeg版本不兼容

DCU环境下环境配置极其

复杂,不推荐

Pyannote

依赖Hugging Face模型下载,国内网络经常失败,且需申请权限

不推荐

十、结语

本文完整记录了在海光DCU环境(Ubuntu 22.04 + DTK 26.04)下部署FunASR方言识别及说话人日志系统的全过程。核心经验可归纳为:

DCU环境配置是第一道坎:必须使用适配DTK的定制PyTorch,版本匹配至关重要。

模型选型决定效果上限:ERES2NetV2远优于CAM++,在短片段和方言口音场景下优势明显。

参数调优是成败关键:VAD的max_single_segment_time和min_silence_duration、聚类的threshold都需要根据实际音频反复调试。

第三方工具并非万能:3D-Speaker和Pyannote在DCU环境下的依赖复杂性远超预期,FunASR原生方案更可靠。

最终方案成功在国产海光DCU算力平台上实现了方言识别 + 三人说话人分离,验证了国产算力平台与开源语音识别框架的良好兼容性。随着海光DCU已与众多主流大模型完成适配,国产AI算力生态正在快速成熟,期待更多开发者在国产平台上探索语音AI的无限可能。

© 版权声明

相关文章