LLMを使う時、4bit/8bit量子化をするなら必要になるbitsandbytesというライブラリがあります。今までWindowsは正式にはサポートされておらず、公式以外のビルドを使ったりなどの工夫が必要でした。
ところが、3週間くらい前にリリースされたbitsandbytesのリリース情報を見ていたら、最新の0.43.0でWindowsがサポートされたとありました。
「多分、公式にpip install bitsandbytesでWindowsもサポートできたと思うよ」的な事が書いてあります。
というわけで早速、新しい仮想環境を作って pip install bitsandbytes してみました。
おお、ちゃんとインストールできたみたい。試しに python -m bitsandbytes で試験してみたら、torchがCUDA有効でコンパイルされてないよ! と怒られました。pip install bitsandbytesで自動的にインストールされるtorchはCUDA版はインストールされないみたいです。
そこで、一旦、pip uninstall torch torchaudio torchvision でtorchをアンインストールし、
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
でCUDA有効のtorchをインストールし直しました。(Windows上にCUDAはセットアップ済みの状態です)
そして改めて python -m bitsandbytes を実行してみると、SUCCESS! の文字が出ました! インストールできてる!
試しに、つい最近リリースされた mistralai/Mistral-7B-Instruct-v0.2 をload_in_4bit=Trueで動かしてみたら、ちゃんとVRAM消費量8GB以下で動いてました!
動かしてみたソースです。pip install transformers を先に実行しておいてください。
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2",
load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
messages = [
{"role": "user", "content": "どんな調味料が好きですか?"},
{"role": "assistant", "content": "レモン果汁がオススメです。"},
{"role": "user", "content": "マヨネーズを使ったレシピを教えてください。"}
]
encodeds = tokenizer.apply_chat_template(messages, return_tensors="pt")
generated_ids = model.generate(encodeds, max_new_tokens=1000, do_sample=True)
decoded = tokenizer.batch_decode(generated_ids)
print(decoded[0])
出力結果は以下です。mistralはv0.2になったとはいえ、素のままだと日本語は修行中という感じですね。