鱼C论坛

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

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

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

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

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

x
多次调用whisper,whisper model会不会重复加载?  程序执行完后,whisper model 会从内存中自动卸载掉吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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


要在程序开始时加载模型并在后续调用中重复使用,可以使用以下代码结构作为参考:

  1. # 假设使用的是 PyTorch 和 OpenAI 的 Whisper 模型

  2. import torch
  3. from transformers import WhisperModel, WhisperProcessor

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

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

  19. # 示例调用
  20. audio_input = "path_to_audio_file.wav"
  21. transcription = transcribe_audio(audio_input)
  22. print(transcription)
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://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 如下
  1. import os
  2. for home, dirs, files in os.walk("/home/dengz/pytvzhen-master/test/"):
  3.     for name in files:
  4.         fullname = os.path.join(home, name)
  5.         print(name)
  6.         print(fullname)
  7.         code = f"python work_space_demo.py {fullname}"
  8.         os.system(code)
复制代码


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

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

  10. transcribeAudioEn(argv[1])
复制代码
小甲鱼最新课程 -> https://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`

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

  1. from faster_whisper import WhisperModel
  2. from sys import argv

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

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

  11. if __name__ == "__main__":
  12.     transcribeAudioEn(argv[1])
复制代码


### 整合调用

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

  1. import os
  2. from work_space_demo import transcribeAudioEn

  3. for home, dirs, files in os.walk("/home/dengz/pytvzhen-master/test/"):
  4.     for name in files:
  5.         fullname = os.path.join(home, name)
  6.         print(name)
  7.         print(fullname)
  8.         transcribeAudioEn(fullname)
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 16:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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