鱼C论坛

 找回密码
 立即注册
查看: 157|回复: 5

多次调用,whisper model会不会重复加载?

[复制链接]
发表于 2024-10-23 08:32:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
多次调用whisper,whisper model会不会重复加载?  程序执行完后,whisper model 会从内存中自动卸载掉吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-23 08:37:57 | 显示全部楼层
在使用 Whisper 模型时,是否会重复加载取决于你如何管理模型的加载和调用。

1. **多次调用是否会重复加载**:如果在每次调用时都重新初始化模型,那么模型会被重复加载。这通常会导致性能问题,因为加载模型是一个耗时的操作。为了避免这种情况,你可以在程序开始时加载模型,并在后续的调用中重复使用已加载的模型实例。

2. **程序执行完后模型是否会自动卸载**:当程序执行完毕或进程结束时,内存中的所有数据,包括加载的模型,都会被操作系统回收。因此,模型会从内存中卸载。

为了提高效率,建议在程序的生命周期内保持模型的加载状态,避免在每次调用时重新加载。这样可以显著减少加载时间,提高程序的响应速度。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-23 08:55:40 | 显示全部楼层
“在程序开始时加载模型,并在后续的调用中重复使用已加载的模型实例”  ,  这个的代码大概是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-23 09:05:32 | 显示全部楼层
blackantt 发表于 2024-10-23 08:55
“在程序开始时加载模型,并在后续的调用中重复使用已 ...


要在程序开始时加载模型并在后续调用中重复使用,可以使用以下代码结构作为参考:
# 假设使用的是 PyTorch 和 OpenAI 的 Whisper 模型

import torch
from transformers import WhisperModel, WhisperProcessor

# 初始化模型和处理器
model_name = "openai/whisper-base"
processor = WhisperProcessor.from_pretrained(model_name)
model = WhisperModel.from_pretrained(model_name)

# 定义一个函数来处理音频输入
def transcribe_audio(audio_input):
    # 预处理音频输入
    inputs = processor(audio_input, return_tensors="pt").input_values
    # 使用模型进行推理
    with torch.no_grad():
        logits = model(inputs).logits
    # 解码输出
    predicted_ids = torch.argmax(logits, dim=-1)
    transcription = processor.batch_decode(predicted_ids)
    return transcription

# 示例调用
audio_input = "path_to_audio_file.wav"
transcription = transcribe_audio(audio_input)
print(transcription)

在这个例子中,模型和处理器在程序开始时加载,并在 `transcribe_audio` 函数中被重复使用。这样可以避免在每次调用时重新加载模型,提高效率。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-23 10:51:33 | 显示全部楼层
FishC 发表于 2024-10-23 09:05
要在程序开始时加载模型并在后续调用中重复使用,可以使用以下代码结构作为参考:

如果我用 work_space_batch.py 来调用 work_space_demo.py 来遍历处理多个文件。 要怎么改这两个文件呢?

work_space_batch.py 如下
import os
for home, dirs, files in os.walk("/home/dengz/pytvzhen-master/test/"):
    for name in files:
        fullname = os.path.join(home, name)
        print(name)
        print(fullname)
        code = f"python work_space_demo.py {fullname}"
        os.system(code)

work_space_demo.py  大致如下:
from faster_whisper import WhisperModel
from sys import argv

def transcribeAudioEn(path, modelName="medium", languate="fr",srtFilePathAndName="VIDEO_FILENAME.srt"):
    model = WhisperModel(modelName, device1, compute_type="auto", download_root="faster-whisper_models", local_files_only=False)
    print("Whisper model loaded.")
    segments, _ = model.transcribe(audio=path,  language=languate, word_timestamps=True)
    # 转换为srt的Subtitle对象
    pass
    print("Transcription complete.")

transcribeAudioEn(argv[1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-23 10:57:59 | 显示全部楼层
blackantt 发表于 2024-10-23 10:51
如果我用 work_space_batch.py 来调用 work_space_dem ...


要修改这两个文件以便 `work_space_batch.py` 调用 `work_space_demo.py` 来遍历处理多个文件,并确保模型只加载一次,可以按照以下步骤进行:

### 修改 `work_space_batch.py`

你可以保持 `work_space_batch.py` 不变,因为它的功能是遍历文件并调用 `work_space_demo.py`。不过,为了提高效率,可以考虑在 `work_space_batch.py` 中直接调用 `work_space_demo.py` 中的函数,而不是通过命令行调用。

### 修改 `work_space_demo.py`

为了避免每次处理文件时都重新加载模型,可以将模型加载放在一个全局范围内,或者在一个类中进行管理。以下是一个简单的修改示例:
from faster_whisper import WhisperModel
from sys import argv

# 全局加载模型
model = WhisperModel("medium", device="cpu", compute_type="auto", download_root="faster-whisper_models", local_files_only=False)
print("Whisper model loaded.")

def transcribeAudioEn(path, languate="fr", srtFilePathAndName="VIDEO_FILENAME.srt"):
    segments, _ = model.transcribe(audio=path, language=languate, word_timestamps=True)
    # 转换为srt的Subtitle对象
    pass
    print("Transcription complete.")

if __name__ == "__main__":
    transcribeAudioEn(argv[1])

### 整合调用

如果你希望在 `work_space_batch.py` 中直接调用 `work_space_demo.py` 的函数,可以这样做:
import os
from work_space_demo import transcribeAudioEn

for home, dirs, files in os.walk("/home/dengz/pytvzhen-master/test/"):
    for name in files:
        fullname = os.path.join(home, name)
        print(name)
        print(fullname)
        transcribeAudioEn(fullname)

这样,模型只会在 `work_space_demo.py` 中加载一次,并在每次调用 `transcribeAudioEn` 时重复使用。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 20:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表