AirLLM:405BのmodelをLocalで動かすと
去年の年末頃、比較的大きなLLMのmodelでも各層毎にGPUで計算することで少ないGPUメモリでも動かすことができるAirLLMが公開されました。
その方がLlama 3.1 405B modelを8GB VRAM以下で動作させていたので、試してみました。
概要
Llama-3.1-405B
言わずもがな、Meta社の現在最高峰のオープンソース、多言語対応、128Kと長いコンテキスト長のmodelです。
動作には800GB程度のVRAMが必要らしいです。
4bit量子化
16bitから4bit量子化で必要メモリ量が1/4近くになります。
層毎に分割推論
Llama-3.1-405Bは下図の通り126層から成ります。
これを各層ごとに分割しGPUにのせることで最大VRAM使用量を~6GB程度に抑えることができます。
実施内容
0. 環境
1. 実行
Codeは下記とシンプルです。
出力に時間を要すため、max_new_tokensは10と小さくしています。
from airllm import AutoModel
model = AutoModel.from_pretrained(
"unsloth/Meta-Llama-3.1-405B-Instruct-bnb-4bit")
input_text = ['日本の首都は?',]
input_tokens = model.tokenizer(input_text,
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=128,
padding=False)
generation_output = model.generate(
input_tokens['input_ids'].cuda(),
max_new_tokens=10,
return_dict_in_generate=True)
output = model.tokenizer.decode(generation_output.sequences[0])
print(output)
回答
2. HFのCacheの容量
405GBほどになりました。
3. 計算中のPC挙動
たしかにVRAMは非常に小さく抑えられていました。
常時ストレージとGPUが行き来するので、普段静かなSSDがアクティブなのは新鮮です。
4. 出力時間
1tokenあたり126層の計算に2min要しました。
今回は10tokenで20minかかりました。
所感
AirLLMが公開された当時、すでにMistralベースをはじめ小さく優秀なmodelがでており、あまり実用の機会はありませんでした。
ただ、やはり今回のように400Bほどの大型のmodelが手元のPCで簡単に動かせることは、2年前には想像もできませんでしたし、素直に感動します。
この記事が気に入ったらサポートをしてみませんか?