Python 学习整理2

Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

PHPer 2025-08-26 15 0 0

根据你的问题和代码分析,这个错误是由于PyTorch张量和模型在不同设备(CPU和GPU)上导致的。我来为你提供几种解决方案:

## 问题分析

错误的核心在于:`Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!`

主要问题点:

1. 代码中存在多个模型加载点,设备管理不统一

2. 音频张量加载后未明确指定设备

3. SpeechBrain模型和PyAnnote模型可能使用了不同的设备配置

## 解决方案

### 方案一:统一设备管理(推荐)

修改代码以确保所有模型和张量都使用统一的设备配置:

[services/audio_processor.py](D:\python\fastapi-speaker-extractor\app\services/audio_processor.py)

能不能专门构建一个app/utils/device_middleware.py一个中间件,让所有项目下运行的程序统一走中间件,然后中间件统一设置device,device_middleware.py我已经创建

创建一个新的设备管理中间件,用于统一管理所有模型和张量的设备分配

[device_middleware.py](D:\python\fastapi-speaker-extractor\app\utils\device_middleware.py)

修改audio_processor.py文件,使用新的设备管理中间件

[services/audio_processor.py](D:\python\fastapi-speaker-extractor\app\services/audio_processor.py)

修改audio_utils.py文件,加入设备管理中间件的支持

[audio_utils.py](D:\python\fastapi-speaker-extractor\app\utils\audio_utils.py)

修改embedding_utils.py文件,加入设备管理中间件的支持

[embedding_utils.py](D:\python\fastapi-speaker-extractor\app\utils\embedding_utils.py)

修改model_loader.py文件,加入设备管理中间件的支持

[model_loader.py](D:\python\fastapi-speaker-extractor\app\utils\model_loader.py)

修改onnx_model_loader.py文件,加入设备管理中间件的支持

[onnx_model_loader.py](D:\python\fastapi-speaker-extractor\app\utils\onnx_model_loader.py)

修改__init__.py文件,确保设备中间件被正确导入

[__init__.py](D:\python\fastapi-speaker-extractor\app\utils\__init__.py)

修改audio_processor.py中get_matched_audios函数,确保音频处理时使用统一的设备

[services/audio_processor.py](D:\python\fastapi-speaker-extractor\app\services/audio_processor.py)

修改audio_processor.py中的process_audio函数,确保设备一致性

[services/audio_processor.py](D:\python\fastapi-speaker-extractor\app\services/audio_processor.py)

现在我已经为你实现了一个完整的设备管理解决方案,以解决你遇到的设备不一致问题。以下是我所做的更改和方案说明:

### 方案概述

我创建了一个统一的设备管理中间件([device_middleware.py](file:///D:/python/fastapi-speaker-extractor/app/utils/device_middleware.py)),用于在整个项目中统一管理所有模型和张量的设备分配。这样可以确保所有计算都在同一设备上进行,避免了CUDA和CPU设备混用的问题。

### 主要修改内容

1. **创建设备管理中间件**:

- 新增 [app/utils/device_middleware.py](file:///D:/python/fastapi-speaker-extractor/app/utils/device_middleware.py) 文件

- 实现了 [DeviceMiddleware](file:///D:/python/fastapi-speaker-extractor/app/utils/device_middleware.py#L14-L83) 类,用于统一管理设备

- 提供了设备移动方法,确保所有张量和模型都在同一设备上

2. **修改音频处理相关文件**:

- 更新 [audio_processor.py](file:///D:/python/fastapi-speaker-extractor/app/services/audio_processor.py) 使用设备中间件

- 修改 [get_matched_audios](file:///D:/python/fastapi-speaker-extractor/app/services/audio_processor.py#L127-L302) 函数,确保处理过程中设备一致性

- 修改 [process_audio](file:///D:/python/fastapi-speaker-extractor/app/services/audio_processor.py#L719-L801) 函数,使用设备中间件的设备

3. **创建辅助工具函数**:

- 在 [audio_utils.py](file:///D:/python/fastapi-speaker-extractor/app/utils/audio_utils.py) 中添加设备管理函数

- 在 [embedding_utils.py](file:///D:/python/fastapi-speaker-extractor/app/utils/embedding_utils.py) 中添加嵌入向量设备管理函数

- 在 [model_loader.py](file:///D:/python/fastapi-speaker-extractor/app/utils/model_loader.py) 中添加模型设备管理函数

- 在 [onnx_model_loader.py](file:///D:/python/fastapi-speaker-extractor/app/utils/onnx_model_loader.py) 中添加ONNX模型设备适配

### 方案优势

1. **统一设备管理**:所有模型和张量都使用同一个设备管理器,避免了设备不一致的问题

2. **易于维护**:当需要更改设备时,只需在中间件中修改,无需更改所有相关代码

3. **兼容性好**:支持CPU、CUDA等多种设备类型...

立即注册
更新于:2025-08-26 01:31:33
    您需要登录后才可以评论。 立即注册
    相关内容

    PHP错误:SQLSTATE[HY000] [2054] The server requested authentica...

    Chrome浏览器:The request client is not a secure context and the reso...

    PHP报错:Constants may only evaluate to scalar values

    Xampp安装后apache启动失败报错 www.example.com:443:0 server certificate...

    drop、truncate和delete的区别

    推荐内容

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    BT磁力搜索网站汇总和找不到的资源

    什么是磁力链接,您如何使用?

    Z-Library:全球最大的数字图书馆/含打不开的解决方案/镜像

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作

    【车险课堂】什么是无赔款优待系数ncd,你“造”吗?