请教一个低级问题: 如何确定funasr使用的是GPU还是CPU?

#3738 · closed · 2 comments

View on GitHub ↗

dearvcc

我是直接在官方的示例代码基础上修改的,使用的是srt字幕转写功能,目前功能能正常使用。显卡为3080,CUDA为12.6 / 560.94,但一直感觉GPU的使用率没有什么变化,从初始加载初始化模型,到后面的识别过程中,看不到CPU的和显存的占用率有增高的情况出现。AI说让我把device参数的值改成cuda:0,还有卸载onnxruntime,好像都没什么用。 看了github上项目的版本说明,也没有针对GPU的专门版本,安装命令也没有特别指出什么来。下面是我现在使用的初始化代码,请教一下是有哪里没设置对么?还有就是怎么查看确认当前使用的是cpu还是gpu。由于本人只是一个单纯的库调用者,以前没有使用torch或开发大模型的底层经验,所以问题可能比较幼稚,还望谅解。 ``` parser = argparse.ArgumentParser(description="Generate subtitles from audio/video using FunASR") # parser.add_argument("input",default=url) parser.add_argument("--format", choices=["srt", "vtt"], default="srt") parser.add_argument("--model", default="iic/SenseVoiceSmall") parser.add_argument("--device", default="cuda") parser.add_argument("--spk", action="store_true", help="Include speaker labels") parser.add_argument("--lang", default="zh") args = parser.parse_args() # print(f"Input: {args.input}") from funasr import AutoModel kwargs = {"model": args.model, "vad_model": "fsmn-vad", # "punc_model": "ct-punc", "punc_model":"ct-punc-c", "vad_kwargs": {"max_single_segment_time": 60000}, "device": args.device, "disable_update": True} if args.spk: kwargs["spk_model"] = "cam++" if "Fun-ASR-Nano" in args.model or "Qwen" in args.model: kwargs["trust_remote_code"] = True kwargs["hub"] = "hf" model = AutoModel(**kwargs) ``` 在加载和使用模型的过程中,GPU之芯似乎毫无波澜: <img width="2153" height="1342" alt="Image" src="https://github.com/user-attachments/assets/11170fab-cb66-40cc-907d-955b96b449aa" /> 对比一下,这是在使用llama-cpp-py使用qwen 3.5 9b大模型的显卡占用情况。 <img width="1635" height="1066" alt="Image" src="https://github.com/user-attachments/assets/b54cbda4-8d5f-4eae-a0f4-2f621e4a29ae" />

Comments

LauraGPT

这个问题很有必要确认。你这里的 `AutoModel` 是 PyTorch 推理路径,不需要另装一个“FunASR GPU 版”;关键是**运行脚本的那个 Python 环境**里的 PyTorch 是否支持 CUDA,以及模型实际放在哪个设备。先不用卸载 `onnxruntime`,也不要仅凭利用率低就重装整个环境。 请把下面这段放在已有的 `model = AutoModel(**kwargs)` **之后**,使用原来的 VS Code 运行方式执行。它只检查已加载对象,不会再加载一份模型: ```python import os import sys from importlib.metadata import PackageNotFoundError, version from itertools import chain import torch print("Python:", sys.executable) try: print("FunASR:", version("funasr")) except PackageNotFoundError: print("FunASR: no installed package metadata; check source checkout/PYTHONPATH") print("PyTorch:", torch.__version__, torch.__file__) print("PyTorch CUDA build:", torch.version.cuda) print("CUDA available:", torch.cuda.is_available()) print("CUDA_VISIBLE_DEVICES:", os.environ.get("CUDA_VISIBLE_DEVICES", "<unset>")) print("ASR resolved device:", model.kwargs.get("device")) for name, attr in [("ASR", "model"), ("VAD", "vad_model"), ("PUNC", "punc_model"), ("SPK", "spk_model")]: module = getattr(model, attr, None) if module is None: print(name, "not enabled") elif isinstance(module, torch.nn.Module): devices = sorted({str(t.device) for t in chain(module.parameters(), module.buffers())}) print(name, "parameter/buffer devices:", devices or ["no parameters/buffers"]) else: print(name, "non-PyTorch module:", type(module).__name__) ``` 如何判断: - `PyTorch CUDA build: None`:这个 PyTorch 构建不含 CUDA。系统装有 CUDA、或者 llama.cpp 能使用 GPU,都不能证明当前 PyTorch 支持 CUDA。 - CUDA build 有版本但 `CUDA available: False`:继续查这个环境的驱动兼容性、设备可见性,以及 VS Code 实际使用的解释器;不要直接认定是 FunASR 参数错误。 - ASR 的参数/缓冲区设备为 `cuda:0`:这些模型张量确实在 GPU 上;这不代表音频读取、特征处理等每个步骤都在 GPU,也不要求利用率一直很高。VAD、标点和说话人模型分别看各自那一行。 - ASR 为 `cpu`:需要结合上面的 PyTorch 输出及实际参数排查。[当前源码](https://github.com/modelscope/FunASR/blob/12e417f4fa4490296ea2d81c5352ea2de8e4cac2/funasr/auto/auto_model.py#L668-L678) 在 CUDA 不可用或 `ngpu=0` 时会回退 CPU;你的已安装版本仍需由输出确认。`cuda` 改成 `cuda:0` 并不能让不支持 CUDA 的 PyTorch 获得 GPU 能力。 你第一张截图中的约 2 GB 专用显存是整张卡的统计,不能归因给这个脚本。请先贴上述文本输出;`Python`/包路径里的用户名可以打码,不需要提供录音。如果确认要换 PyTorch 构建,再按[安装指南](https://github.com/modelscope/FunASR/blob/main/docs/installation/installation_zh.md)和 [PyTorch 官方安装选择器](https://pytorch.org/get-started/locally/)选择匹配的 `torch`/`torchaudio`,不要直接套用其他机器的 CUDA wheel 命令。 维护侧已核对当前源码,并将诊断代码用无模型下载的 CPU 小对象验证;这不是对你机器的 GPU 运行结果作结论。暂时保留 issue,等输出后再定位。 进展更新:你已反馈使用官方 CUDA 版 PyTorch 后恢复正常,并自行关闭了 issue。中英文 FAQ 补充 [#3740](https://github.com/modelscope/FunASR/pull/3740) 已合并;这里区分你的实机反馈与维护侧验证,不声称独立复现了你的环境。你提出的运行时回退提醒属于后续代码改进,当前文档合并没有改变运行时行为。 补充进展:你提出的 CPU 回退可见性建议已在 #3742 合入主分支。加速器不可用时会通过日志标明模型、请求设备及 CPU 回退;显式 `device='cpu'` 或 `ngpu=0` 不产生这条警告,应用仍可通过日志级别控制输出。这里只是主分支代码更新,不表示已发布新的 PyPI 版本;你此前通过 CUDA 版 PyTorch 解决的问题无需重新打开。

dearvcc

用PyTorch官方安装选择器 换成cuda版就好了,显存占用从2G升到了5G,asr的速度和进程度图示都显著提升或变化。 以前在开发阶段识别工作量不大,对速度不是很敏感也不太在意,一直没有好好加以区分。把官方示例中的device参数设置完就没再管了。最近新增了qwen模型以后才关注起来。猜想也可能会有同样粗枝大叶的调用者无知无觉地还在让GPU闲置,建议增加相关的功能,比如能方便地显示当前实际使用的设备为纯cpu还是gpu。看到每次加载模型和识别过程中忽忽跑了很多信息,但这么有用的信息反而看不到甚至手动想看都不容易做到。更好的体验,应该是在参数里设置了GPU、但实际并没有真正用上的情况下,能给予某种提醒或警告。现在生活节奏快,都没大有耐心仔细阅读完整的安装流程,基本上就是直奔核心命令,然后先跑起来有针对性地见招拆招。 谢谢大佬这么认真地对待这么低级的小白问题。我自己就先关闭本issure了,如需补充,请大佬自己重新打开就好。