今回は私がハマったタイトルの件について、メモ含めて他の困った方へのTipsまとめです。
AWSのLambdaにDockerイメージファイルをアップロードしてfaster-whisper+Pyannote.audioを使った文字起こし+話者識別機能を実装した時のTipsです。
faster-whisper+Pyannoteについては前回の記事を参照ください。
エラーメッセージなどで、この記事にたどり着いた方への参考になれば幸いです。
- INIT_REPORT Init Duration: 〇〇 ms Phase: init Status: timeout
- [WARNING]Matplotlib created a temporary cache directory at /tmp/matplotlib-f0zexeb5 because the default path (/home/sbx_user1051/.config/matplotlib) is not a writable directory
- [ERROR] OSError: [Errno 30] Read-only file system: '/home/sbx_user1051'
- Max Memory Used: 〇〇 MB(大体8GB超え)
INIT_REPORT Init Duration: 〇〇 ms Phase: init Status: timeout
結論から言うとPyannote.audioのライブラリが大きすぎるため、読み込みに時間がかかった結果、初期フェーズでタイムアウトが起こってしまう現象です。
Lambdaの実行環境のライフサイクルに関する記事を参考で貼っておきます。
タイムアウトって見ると何かエラーというか今後の動作に影響しそうな気がしますが、初期化フェーズに10秒以上かかったときに通知される仕様なだけで、特にエラーとかではありません。
毎回ログに出てきて気持ち悪い気持ちはわかりますが、Pyannote.audioのライブラリではどう頑張っても消せませんでした。
GPU使わないからnvidia-***系要らないんだけど、uninstallするとそれはそれでうまく動かない。
CPU専用の軽量なPytorchで実装したPyannote.audioパッケージ出てこないかな・・。
[WARNING]Matplotlib created a temporary cache directory at /tmp/matplotlib-f0zexeb5 because the default path (/home/sbx_user1051/.config/matplotlib) is not a writable directory
私が使用したのは以下のLamba pythonのベースイメージです。
public.ecr.aws/lambda/python:3.12
3.11でも3.10でもこのwarningが出ます。
要約すると、matplotlibのキャッシュ用ディレクトリが書き込めないよってメッセージです。
これはLambdaがサーバーレスをうたっているとはいえ、キャッシュ先のディレクトリぐらいちゃんとケアしてほしいところです。
見出しのwarning文には続きのメッセージがありますが、
「it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing.」
”MPLCONFIGDIR”という環境変数にキャッシュ用のパスを指定すれば解決します。
Lambdaでは“/tmp”が一時保存用のディレクトリとなっているので、こちらを設定しておきましょう。
Lambdaの環境変数の設定はDockerイメージ内に書くのではなく、コンソール上で設定することが推奨されています。
Lambdaの関数内の「設定」→「環境変数」で設定しましょう。
これでwarningは消えます。
matlab使うとしても、多分キャッシュなので高速化ぐらいしかメリットない気がしますから、無視しても問題はありません。
[ERROR] OSError: [Errno 30] Read-only file system: ‘/home/sbx_user1051’
これも先ほどのキャッシュが原因によるエラーなのですが、Pyannote.audioで、”Pipeline.from_pretrained”メソッドを使うと、キャッシュディレクトリを必要とします。
これがLambdaでは‘/home/sbx_user1051’が割り当てられるようで、そこは書き込みできないところだよっていうエラーメッセージになります。
なので、Pyannote.audioのキャッシュディレクトリを設定してあげる必要があります。
Lambdaのエラーメッセージを見ると、
“_hf_hub_download_to_cache_dir”でキャッシュディレクトリを作れなくて失敗しているようですね。
HuggingFace_Hubのキャッシュについて調べてみましょう。
どっちや?と思ってそれぞれ試したところ、「HUGGINFACE_ASSETS_CACHE」で解決しました!
こちらを先ほどの環境変数で設定しましょう。
これでうまく動きます。
Max Memory Used: 〇〇 MB(大体8GB超え)
faster-whisperがlarge-V3モデルをロードするだけで大体3~4GB使って、Pyannoteモデルも同じぐらい使います。
よって私の場合、大体8GBを超えるため、Lambdaのメモリ使用量の設定値は10240MB(上限の約10GB)に設定する必要があります。
しかしこのLambdaのメモリ上限は、リージョンがアメリカ以外では3GBまでしか設定できない謎仕様となっているため、10GBまで使えるようにするためには運営に問い合わせしないと設定できません。
問い合わせてから大体1週間程度で10GBまで設定できるようになりますので、対応しましょう。