Llama3.2の90Bを使いたくて量子化しようとしたら変なエラー出た話:importlib.metadata.PackageNotFoundError: No package metadata was found for bitsandbytes【Python】

2024年10月6日LLM

スポンサーリンク

Llama-3.2-90B-Vision-Instructを使いたくて量子化を試みました。
11Bでいいじゃないかとも思いますが、どうせなら一番デカい90Bを使いたい。ただのロマンです。

いざ実行してみる

サンプルコード

以下は抜粋コードですが、こんな感じに書けば動くはずです。

from transformers import MllamaForConditionalGeneration, AutoProcessor, BitsAndBytesConfig

model_id = "meta-llama/Llama-3.2-90B-Vision-Instruct"

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)

model = MllamaForConditionalGeneration.from_pretrained(
    model_id,
    quantization_config=bnb_config,
)

出現したエラー

なんかエラーが出ちゃいました。bitsandbytesが見つからないと出ています。

importlib.metadata.PackageNotFoundError: No package metadata was found for bitsandbytes

解決策

ちょっと勘違いをしていたのですが、transformersをインストールすればBitsAndBytesConfigがサッと使えるわけではなく、bitsandbytesというライブラリもインストールが必要なようです。

pip install bitsandbytes

ということで、インストールした結果、うまくいきました。

おまけ

みなさんご存知の通り、90Bともなるとファイルサイズがかなりデカいです。
デカすぎてダウンロード完了までにかなり時間がかかりました・・・

確認したら、合計で165GBありました。

先ほど「うまくいきました」なんて書きましたが、うまくいったのはライブラリインストールのことで実際にはLlama3.2-90Bは動作できていません。

こんな感じで、あと一歩のところでメモリリークしています。

torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 448.00 MiB. GPU 0 has a total capacity of 15.99 GiB of which 0 bytes is free. Of the allocated memory 45.43 GiB is allocated by PyTorch, and 488.37 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation.  See documentation for Memory Management  (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)

分かりきっていたことですが、いろいろな意味でヤバすぎますね。

以上です。

LLM

Posted by このめ