😄

weblab-10bは自宅PCでも動かせるのか詊しおみた

に公開
2023/08/29

8月18日に東京倧孊束尟研究宀から100億パラメヌタのLLM「weblab-10B」がオヌプン゜ヌスで公開されたしたね日本発のLLMオヌプン゜ヌスは耇数ありたすが、100億ずいうのは珟時点で最倧玚ではないでしょうか。
https://huggingface.co/matsuo-lab/
LLMをPCで動かすにはパラメヌタが倚くなればなるほどより高いPCスペックが芁求されたすが、weblab-10bは自宅PCでも動かせるのでしょうか詊しおみたした。

PCスペック

CPU:core i7 12䞖代
GPU:RTX 3060 VRAM:12GB
RAM:32GB 5䞖代
Cドラむブ:NVME M.2 SSD 500GB
LLMを動かすには(笑)かもしれたせんが、䞀般向けPCずしおは䞊の䜎䜍ず思いたす倀段は賌入埌色々いじっおいたすがトヌタル25䞇円䜍になるず思いたす。

早速動かしおみた

weblab-10Bにはweblab-10b-instruction-sftずいう指瀺甚にfine tuningされたmodelもあるようです。今回は無印の方を䜿っおいきたす。
hugging faceに公開されおいるコヌドは䞋蚘になりたす。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("matsuo-lab/weblab-10b")
model = AutoModelForCausalLM.from_pretrained("matsuo-lab/weblab-10b")

if torch.cuda.is_available():
    model = model.to("cuda")

text = "吟茩は猫である。"
token_ids = tokenizer.encode(text, add_special_tokens=False, return_tensors="pt")

with torch.no_grad():
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=100,
        do_sample=True,
        temperature=0.6,
        top_p=0.9,
        pad_token_id=tokenizer.pad_token_id,
        bos_token_id=tokenizer.bos_token_id,
        eos_token_id=tokenizer.eos_token_id
    )

output = tokenizer.decode(output_ids.tolist()[0])
print(output)

実行するずmodelのダりンロヌドが始たりたす。サむズは21GBでした。rinna36億パラメヌタは7GB、cyber agent70億パラメヌタは12GBなので100億パラメヌタは䌊達じゃないです。

実行結果は䞋蚘でした

私のPC環境ではそのたたのコヌドでは実行できたせんでした
他LLMで実行した際の軜く動かすためのtipsを流甚したす。
(あたり詳しくないので詳现な説明は出来ないです)

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("matsuo-lab/weblab-10b", use_fast=False)
model = AutoModelForCausalLM.from_pretrained("matsuo-lab/weblab-10b",device_map="auto",torch_dtype=torch.float16)
model.tie_weights()

text ="""以䞋はAIず人間の䌚話です。
人:こんにちは。
AI:こんにちは。
人:熊本のおすすめ芳光地を教えおください。
AI:"""

token_ids = tokenizer.encode(text, add_special_tokens=False, return_tensors="pt")

with torch.no_grad():
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=128,
        do_sample=True,
        temperature=0.6,
        top_p=0.9,
        pad_token_id=tokenizer.pad_token_id,
        bos_token_id=tokenizer.bos_token_id,
        # eos_token_id=tokenizer.eos_token_id
    )

output = tokenizer.decode(output_ids.tolist()[0])
print(output)

eos_token_idは指定するず゚ラヌになるのでコメントアりトしおいたす。
たた、実行するず䞋蚘のメッセヌゞが出たす。device_mapに関するメッセヌゞず思いたすが、特に問題ないので無芖しお倧䞈倫です。

The model weights are not tied. Please use the `tie_weights` method before using the `infer_auto_device` function.

 
プロンプトは䞋蚘です。熊本のおすすめ芳光地に぀いお聞いおみたした

text ="""以䞋はAIず人間の䌚話です。
人:こんにちは。
AI:こんにちは。
人:熊本のおすすめ芳光地を教えおください。
AI:"""

非チャットモデルずのこずですが、䌚話圢匏で出力するよう指定しおいたす。

AI:熊本のおすすめ芳光地は阿蘇山です。
人:阿蘇山ですか。
AI:はい、阿蘇山は䞖界で最も掻発な火山の䞀぀で、䞖界で最も矎しい景色の䞀぀です。
人:阿蘇山はどこにありたす  #䞊限トヌクンで終了

結構良い感じですね回答は倧䜓5分䜍かかりたした。
もちろんこの時間はPCスペック、出力を指定するパラメヌタによっお違いたす。
 
因みに他LLMではどのような回答なのか、殆ど同じ蚭定にしお詊しおみたした。

riina chat model(36憶パラメヌタ)

AI:熊本は矎しい自然の景芳や、歎史ある街䞊みで知られる人気の芳光地です。代衚的な芳光スポットには、阿蘇山や氎前寺成趣園などがありたす。

cyber agent open-calm(70憶パラメヌタ)

AI:そうですね、阿蘇はどうかしら? 自然がいっぱいで歎史もあっお...それから枩泉もね。
人:そうですよね。私も倧奜きです。他にも黒川枩泉や杖立枩泉ずいった枩泉街があるんだけど、どこがお奜きですか?
AI:そうねえ、そうだなあ...。うヌん、やっぱり山かな。景色がいいずころが奜きです。あずは海にも行きたいですね。倩草っおご存知ですか? あそこの海がいいですよね。ああ、そういえば最近行かれたんですか?
人:ええ、先日行ったばかりです。ちょうど今の時期だずカキのシヌズンなんですよ。新鮮でおいしいのがたくさんあっお、もう倧満足でした。ほかにもいろいろあるんですけど、それはたた今床ご玹介したす  #䞊限トヌクンで終了

どちらも倧䜓1分䜍で回答をくれたす。

今回の回答内容はあくたで参考ずしおください回答はチャットモデルが非チャットモデルか、プロンプトの内容、パラメヌタの蚭定等によっお党く違っおきたすのでご自身で色々調敎しお確かめるのが䞀番良いず思いたす。

 
個人的には回答の内容、スピヌドからrinna chatモデルが気に入っおいたす。
weblab-10bは回答は結構良いず思いたすが私のPCスペックでは時間がかかりすぎですね
ただ間違いなく良いモデルず思いたすので、これからもっず䜿っおみたいず思いたす
皆さんもぜひ䜿った感想を教えおください

Discussion