1:conda 命令:

conda create --name funasr python=3.10

conda activate funasr

2:检查NPU状态

npu-smi info

3:CANN 软件安装

进入CANN安装目录:

cd /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux

查看版本文件:

cat ascend_toolkit_install.info

这里可以根据版本寻找对应的torch_npu兼容版本:

https://gitcode.com/Ascend/pytorch#ascend-extension-for-pytorch%E6%8F%92%E4%BB%B6

4:安装工具依赖ffmpeg

yum install ffmpeg

接下来开始正式代码流程

----------------------------------------------------------------------------------------------------------

5:安装FunASR​

pip3 install funasr

pip3 install -U modelscope

pip3 install numpy==1.26.4

6:安装torch,torch_npu

pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 torch_npu==2.5.1

好了,安装完成:现在执行

cpu版本:代码

from funasr import AutoModel
print("开始")

# 使用支持说话人分离的组合模型
# 混合设备配置
model = AutoModel(
    model="paraformer-zh",          # ASR主模型(计算密集型)
    vad_model="fsmn-vad",           # VAD模型(轻量级)
    punc_model="ct-punc",           # 标点模型(轻量级)
    spk_model="cam++",              # 说话人识别模型(计算密集型)
    
    # 设备分配
    device="cpu",                # ASR主模型在GPU
    
    # 优化配置
    quantize=True,                  # 启用INT8量化
    batch_size=16,
    disable_update=True,
)

print("模型加载成功")

res = model.generate(input="./2speakers_example.wav", batch_size_s=300)

# 定义输出数组
results = []
# 解析结果
for result in res:
    sentences = result["sentence_info"]
    for sentence in sentences:
        speaker_id = sentence["spk"]
        text = sentence["text"]
        start_time = sentence["start"] 
        end_time = sentence["end"] 
        #json 格式输出
        results.append({
            "speakerId": speaker_id,
            "text": text,
            "startTime": start_time,
            "endTime": end_time
        })
        print(f"说话人{speaker_id}: {text} ({start_time:.2f}s-{end_time:.2f}s)")

执行:python cpu.py

npu版本:

from funasr import AutoModel
import torch
import torch_npu  # 导入昇腾插件
# 自动迁移:将cuda API映射为npu API​
from torch_npu.contrib import transfer_to_npu
import time

print("PyTorch版本:", torch.__version__)
print("NPU设备数量:", torch_npu.npu.device_count())
print("当前NPU设备:", torch_npu.npu.get_device_name(0))
print("Cuda available:", torch.cuda.is_available())

print("开始")

# 使用支持说话人分离的组合模型
# 混合设备配置
model = AutoModel(
    model="paraformer-zh",          # ASR主模型(计算密集型)
    vad_model="fsmn-vad",           # VAD模型(轻量级)
    punc_model="ct-punc",           # 标点模型(轻量级)
    spk_model="cam++",              # 说话人识别模型(计算密集型)
    
    # 设备分配
    device="npu:0",                # ASR主模型在GPU
    
    # 优化配置
    quantize=True,                  # 启用INT8量化
    batch_size=16,
    disable_update=True,
)

for i in range(100):  # 循环100次
    # 输出每次循环的运行时长
    print("模型加载成功")
    start = time.perf_counter()
    res = model.generate(input="./2speakers_example.wav", batch_size_s=300)
    elapsed = time.perf_counter() - start
    # 定义输出数组
    results = []
    # 解析结果
    for result in res:
        sentences = result["sentence_info"]
        for sentence in sentences:
            speaker_id = sentence["spk"]
            text = sentence["text"]
            start_time = sentence["start"] 
            end_time = sentence["end"] 
            #json 格式输出
            results.append({
                "speakerId": speaker_id,
                "text": text,
                "startTime": start_time,
                "endTime": end_time
            })
            print(f"说话人{speaker_id}: {text} ({start_time:.2f}s-{end_time:.2f}s)")
    print(f"Iteration {i+1:03d} elapsed: {elapsed:.3f} s")

执行:python npu.py

成功!

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐