Whisper 高速化したfaster-whisperを簡単に動かしてみる

Whisper 音声・動画の自動書き起こしAIを無料で、簡単に使おうの記事を紹介していましたが、高速化された「Faster-Whisper」が公開されていましたので、Google Colaboratoryで実装していきます。

また、「large-v2」と言うアップデートされたモデルが提供されていました。
こちらも合わせて使用してみたいと思います。

Faster-Whisper

これまでのWhisperとの違いを記載していきたいと思います。
Faster-Whisperから引用します。

faster-whisper is a reimplementation of OpenAI's Whisper model using CTranslate2, which is a fast inference engine for Transformer models.

This implementation is up to 4 times faster than openai/whisper for the same accuracy while using less memory. The efficiency can be further improved with 8-bit quantization on both CPU and GPU.
faster-whisperは、OpenAIのWhisperモデルを、Transformerモデルの高速推論エンジンであるCTranslate2を使って再実装したものです。

この実装は、同じ精度でopenai/whisperより最大4倍高速で、かつ少ないメモリしか使用しません。CPUとGPUの両方で8ビット量子化を行うことで、さらに効率を向上させることができます。

Large-v2 model on GPU

ImplementationPrecisionBeam sizeTimeMax. GPU memoryMax. CPU memory
openai/whisperfp1654m30s11325MB9439MB
faster-whisperfp16554s4755MB3244MB

CTranslate2と言う高速推論エンジンで変換したモデルを実装することで、
処理速度が約4倍に早くなって、メモリーの使用率は約1/3になったみたいです。


Fast-Whisperの実装

最初に、「編集」→「ノートブックの設定」から、
ハードウェアアクセラレートを「GPU」に設定しましょう。

以下のコマンドを入力し、Shift+Enterを押して実行しましょう。
GPUの情報が出てくれば、正常に設定変更できています。

!nvidia-smi

続けてコードを記載してきます。
これまでのWhisperの使用方法については、Whisper 音声・動画の自動書き起こしAIを無料で、簡単に使おうを参照ください。

!pip install git+https://github.com/guillaumekln/faster-whisper.git
!apt install libcublas11
from faster_whisper import WhisperModel

model_size = "large-v2"

# Run on GPU with FP16
model = WhisperModel(model_size, device="cuda", compute_type="float16")

# or run on GPU with INT8
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")

# or run on CPU with INT8
# model = WhisperModel(model_size, device="cpu", compute_type="int8")

以前のCHATGPT + SHOTCUT 半自動で動画を作成してみようの記事で使用した動画を用います。

! pip install yt-dlp
! rm input.mp3 
! yt-dlp -x --audio-format mp3 https://youtu.be/1XQVbMz4j-0 -o "input.mp3"
segments, info = model.transcribe("input.mp3", beam_size=5)

for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

うん、早いぞ。
これまでのWhisperとは出力結果の吐き方が異なるのかな?(要勉強です…)


Fast-Whisperで字幕ファイルを作成する

コードのみ備忘録として記載しておきます。

!pip install git+https://github.com/guillaumekln/faster-whisper.git
!apt install libcublas11

from faster_whisper import WhisperModel

model_size = "large-v2"

# Run on GPU with FP16
model = WhisperModel(model_size, device="cuda", compute_type="float16")

# or run on GPU with INT8
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")

# or run on CPU with INT8
# model = WhisperModel(model_size, device="cpu", compute_type="int8")
segments, info = model.transcribe("input.mp3", beam_size=5)
! pip install srt

from datetime import timedelta
from srt import Subtitle
import srt


subs = []
 
for data in segments:
    index = data.id + 1
    start = data.start
    end = data.end
    text = data.text
    sub = Subtitle(index=1, start=timedelta(
                            seconds=timedelta(seconds=start).seconds,
                            microseconds=timedelta(seconds=start).microseconds),
                            end=timedelta(
                            seconds=timedelta(seconds=end).seconds,
                            microseconds=timedelta(seconds=end).microseconds),
                            content=text, proprietary='')
 
    subs.append(sub)

with open("test.srt", mode="w", encoding="utf-8") as f:
    f.write(srt.compose(subs))
!cat test.srt

Fast-Whisperは、WhisperModel(“large-v2”)のようなモデルを読み込む場合、対応するCTranslate2モデルはHugging Face Hubから自動的にダウンロードしているとのことです。

もし変換したCTranslate2モデルが手元に欲しい場合は、以下のコマンドで作成することが可能です。
実行後「whisper-large-v2-ct2」フォルダに変換されたモデルが作成されます。

!pip install git+https://github.com/guillaumekln/faster-whisper.git
!pip install transformers

!ct2-transformers-converter --model openai/whisper-large-v2 --output_dir whisper-large-v2-ct2 --quantization float16 --low_cpu_mem_usage
# !ct2-transformers-converter --model openai/whisper-large-v2 --output_dir whisper-large-v2-ct2 --quantization int8_float16 --low_cpu_mem_usage
# !ct2-transformers-converter --model openai/whisper-large-v2 --output_dir whisper-large-v2-ct2 --quantization int8 --low_cpu_mem_usage

この変換したモデルを用いてfast-whisperを動かす場合、「model_size」を作成されたフォルダのパスに変更するだけでOKです。

!pip install git+https://github.com/guillaumekln/faster-whisper.git
from faster_whisper import WhisperModel

# 変換されたモデルの格納されたフォルダを指定する
model_size = "whisper-large-v2-ct2/"

# Run on GPU with FP16
model = WhisperModel(model_size, device="cuda", compute_type="float16")

# or run on GPU with INT8
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")

# or run on CPU with INT8
# model = WhisperModel(model_size, device="cpu", compute_type="int8")

以後は、先ほどと同じになりますので、省略します。


確かに早いですしメモリの使用量が少ないので、ローカルで動かすことを考えると便利です。
ひとまず、ここまで。

7件のコメント

  • こんにちは。
    とても有用な記事ありがとうございます!

    質問なのですが、以下を実行したところ、https://huggingface.coに接続できないという旨のエラーが出てしまいました。

    ct2-transformers-converter –model openai/whisper-large-v2 –output_dir whisper-large-v2-ct2 –quantization float16

    原因は社内環境のため、外部にアクセスできないからなのですが、この変換作業をローカルで実行する方法はありますか?
    必要なファイル等は、ネットワーク環境から移動して持って来ることが出来ます。

  • コメントありがとうございます。
    私も勉強中の身で、正しい回答となっているか不安なところがありますが、

    ①Whisperの実行をローカル環境で実行できれば良い、と言うことであれば、
    変換作業をGoogle colaboratory等の環境で実行してしまい、
    変換されたモデルをダウンロード、ローカル環境にコピーしてしまう、のが良いかと思います。
    (USBメモリ等に入れられる程度と思いますので)

    ②変換作業そのものをローカルで実行したい場合、下記のURL
    https://github.com/guillaumekln/faster-whisper
    にて、「–model」オプションに直接モデルのパスを入力することも可能との記載がありました。
    「The option –model accepts a model name on the Hub or a path to a model directory.」

    本家のモデルをダウンロードし、ローカルにコピーして、
    その後、「–model」オプションで、保存したディレクトリを指定して実行することで可能かと思います。
    (実際に試していないので、推測のお話となること、ご了承ください)

    お役に立てれば幸いです。
    もし、結果等が分かりましたら、お知らせ頂けると嬉しいです。

  • ご回答ありがとうございます!
    Googleコラボは社内からは利用出来ないので、②の方法で実施してみようと思います。
    本家のモデルはどこからダウンロード出きるのでしょうか?

  • ①本家のWhisperのモデルは下記のリンクからダウンロードできます。
    https://huggingface.co/openai/whisper-large-v2/tree/main
    ただ、サイズの大きいファイルが3つほどあるので、
    どのファイルをどのように格納すれば良いのか、勉強不足のためやってみないと分かりません。
    ②一方で、既に変換済みのモデルは、下記のリンクからダウンロードできそうです。
    https://huggingface.co/guillaumekln/faster-whisper-large-v2/tree/main
    変換作業を飛ばしてFaster-Whisperをとりあえず動かせれば良い場合は、
    こちらからダウンロードして実行できそうです。
    (こちらも実際に実行していないので、やってみないと分からないのが実情です・・・)
    お役に立つ情報になっていれば幸いです。

    • ありがとうございます!
      試してみたいと思います!

    • 時間が出来たので試してみました。
      ②の既に変換済みのモデルでうまくいきました!
      ありがとうございます!

      ただ、CPUだけだとやはりそんなに速くはないみたいですねー。

      • ご連絡ありがとうございます!まずは動いてよかったです!!
        最近オープンソースのAIがたくさん出てきているのですが、GoogleColabで動かせないケースが多く、GPUを多めにした環境を整えようかと検討中です。しかし、予算が…と動けずにいます。
        良き方法があれば、載せていきますので、引き続きよろしくお願いします!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

16 + five =