Whisper 模型中通过 LoRA 进行推理问题

问题描述 投票:0回答:1

我通过LoRA训练了Whisper模型。
但有一个问题。

我训练的原始模型目录容量为2.7G。 然而,通过LoRA学习到的模型目录大小为57M。

由此我发现LoRA目录中只保存了额外的权重信息。
(即不包含原始权重信息。)

因此,这是一个问题。
如何将现有 Whisper 模型与使用 LoRA 训练的模型结合起来进行推理?

为了您的方便,我在下面附上了我的代码。

import numpy as np
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
from peft import PeftModel, PeftConfig

class whisper:
    # model_str
    # 1. large - "openai/whisper-large-v3"
    # 2. medium - "openai/whisper-medium"
    # 3. small - "openai/whisper-small"
    def __init__(self, baseModelPath):
        device = "cuda:0" if torch.cuda.is_available() else "cpu"
        torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
        
        
        model = AutoModelForSpeechSeq2Seq.from_pretrained(baseModelPath, torch_dtype=torch_dtype, low_cpu_mem_usage=True, use_safetensors=True)
        model.to(device)

        processor = AutoProcessor.from_pretrained(baseModelPath)

        self.pipe = pipeline(
        "automatic-speech-recognition",
        model=model,
        tokenizer=processor.tokenizer,
        feature_extractor=processor.feature_extractor,
        max_new_tokens=128,
        chunk_length_s=30,
        batch_size=16,
        return_timestamps=True,
        torch_dtype=torch_dtype,
        device=device,
        )

        
    # korean
    def getText(self, audioPath, language='<|ko|>'):
        sentence = self.pipe(audioPath, generate_kwargs={"task":"transcribe", "language":language})
        return sentence['text']

有一些与那个链接相关的信息,但我不知道它是否可以应用于Whisper模型。

以下是原目录下的文件

-rw-r--r--  1 root root   34K Mar  4 17:49 added_tokens.json
-rw-r--r--  1 root root  1.4K Mar  5 09:48 config.json
-rw-r--r--  1 root root  3.0K Mar  5 09:48 generation_config.json
-rw-r--r--  1 root root  483K Mar  4 17:49 merges.txt
-rw-r--r--  1 root root  923M Mar  5 09:48 model.safetensors
-rw-r--r--  1 root root   52K Mar  4 17:49 normalizer.json
-rw-r--r--  1 root root  1.8G Mar  5 09:49 optimizer.pt
-rw-r--r--  1 root root   339 Mar  5 09:48 preprocessor_config.json
-rw-r--r--  1 root root   14K Mar  5 09:49 rng_state.pth
drwxr-xr-x  4 root root  4.0K Mar  4 17:49 runs
-rw-r--r--  1 root root  1.1K Mar  5 09:49 scheduler.pt
-rw-r--r--  1 root root  2.2K Mar  4 17:49 special_tokens_map.json
-rw-r--r--  1 root root  277K Mar  4 17:49 tokenizer_config.json
-rw-r--r--  1 root root   60K Mar  5 09:49 trainer_state.json
-rw-r--r--  1 root root  4.9K Mar  5 09:48 training_args.bin
-rw-r--r--  1 root root 1013K Mar  4 17:49 vocab.json

下面是LoRA处理后目录下的原始文件。

drwxr-xr-x  3 root root  4.0K Mar 21 06:50 .
drwxr-xr-x 11 root root  4.0K Mar 21 13:16 ..
-rw-r--r--  1 root root  5.0K Mar 21 06:13 README.md
-rw-r--r--  1 root root   789 Mar 21 06:13 adapter_config.json
drwxr-xr-x  2 root root  4.0K Mar 21 06:13 adapter_model
-rw-r--r--  1 root root   14M Mar 21 06:13 adapter_model.safetensors
-rw-r--r--  1 root root   34K Mar 20 12:55 added_tokens.json
-rw-r--r--  1 root root  483K Mar 20 12:55 merges.txt
-rw-r--r--  1 root root   52K Mar 20 12:55 normalizer.json
-rw-r--r--  1 root root   28M Mar 21 06:13 optimizer.pt
-rw-r--r--  1 root root   339 Mar 21 06:13 preprocessor_config.json
-rw-r--r--  1 root root   14K Mar 21 06:13 rng_state.pth
-rw-r--r--  1 root root  1.1K Mar 21 06:13 scheduler.pt
-rw-r--r--  1 root root  2.2K Mar 20 12:55 special_tokens_map.json
-rw-r--r--  1 root root  277K Mar 20 12:55 tokenizer_config.json
-rw-r--r--  1 root root   31K Mar 21 06:13 trainer_state.json
-rw-r--r--  1 root root  4.9K Mar 21 06:13 training_args.bin
-rw-r--r--  1 root root 1013K Mar 20 12:55 vocab.json
transformer-model whisper
1个回答
0
投票

以下代码允许您通过将 Whisper 模型与 LoRA 连接来进行推理。

from transformers import WhisperProcessor, WhisperForConditionalGeneration
from peft import PeftModel

class whisper:
    def __init__(self, baseModelName, loraModelPath = '', cuda=True):
        # load model and processor
        self.processor = WhisperProcessor.from_pretrained(baseModelName)
        self.forced_decoder_ids = self.processor.get_decoder_prompt_ids(language="korean", task="transcribe")

        if cuda == True:
            self.model = WhisperForConditionalGeneration.from_pretrained(baseModelName).to("cuda")
        else:
            self.model = WhisperForConditionalGeneration.from_pretrained(baseModelName)

        if loraModelPath != '':
            self.model = PeftModel.from_pretrained(self.model, loraModelPath)
© www.soinside.com 2019 - 2024. All rights reserved.