AI PC☆RTX3060x2のGPUでローカルLLM構築70億パラメータマシン本体30万円~

安くLLM+RAGを構築するための構成です。

LLM は大規模言語モデルのことで、AI が ChatGPT のような文章を作ってくれます。無料で使えますが、業務で使えるとかなり難しいことがありますし、データの漏洩とか含めて困りますね。のローカルでLLMを作る際のおすすめ構成をお知らせします。

まず、LLMを作るには、マザーボード、CPU、メモリ、SSD、電源、ケース、そしてGPUが必要です。ソフトウェアやOSはすべて無料で手に入りますので、心配入りません。

まず、ケースにマザーボード、CPU、メモリ、SSD、電源をセットします。このあたりは標準的な構成をお勧めします。

肝心なのはGPUで、VRAMのサイズが搭載できるLLMの性能を左右します。パラメータ数7Bのモデルが標準的に使われていますので、

14GB程度のVRAMが必要です。

そこで、よく使われるがおそらく安価でVRAMが豊富なNVIDIA RTX3060 12Gです。日本円で40000~50000円程度で12G使えますので、2枚買って8~10万円程度で合計24GB確保できます。 LLMでは、VRAMの合計値でうまく計算してくれますので、これでもいけます。3090や4090のマシンは20-30万円程度ですので、これだけでもかなり節約できました。

OSにはubuntuを入れます。これは無料です。

ソフトウェアはすべてpythonで無料ですので、python経由で色々入れます。

全部の構成でもけちれば12万円前後でできるのではないかと思います。

最低限使うには、トランスフォーマーと加速を入れればOKです。

こちらを実行しました。

from transformers import AutoTokenizer, pipeline
import torch
import time

model_id = "mistralai/Mistral-7B-Instruct-v0.2"
tokenizer = AutoTokenizer.from_pretrained(model_id)

pipe = pipeline("text-generation", model=model_id, tokenizer=tokenizer, device_map="auto", max_new_tokens=300, torch_dtype=torch.float16,)
query = '量子コンピュータとは?'

start = time.time()
answer = pipe(query)
print(time.time()-start)
print(answer)

ここは、気になるので3種類のGPUでベンチマークを選びました。

3060×2枚:16秒

3090×1枚:7秒

4090×1枚:6秒

という結果になりました。すべてお店で手に入るGPUです。この中で一番安いのはたぶん3060 x2枚です。

生成されるまでに時間がかかります。

2~3倍程度の時間がかかるので、かなり多かったように思います。

3060 x 2枚は3090や4090などの高性能GPUで動くようなLLMを動かせるものすごい安い構成かと思いました。マシンの構成によって速度が上がることはあると思います。

ここで、やはり速度が気になる場合、AIにテキストストリーミングと言うと、文章をできた順に出力する機能があります。

上記のベンチマークは全ての生成が終わるまで時間を出しましたが、通常人間は文章を前から順番に読みます。

その読む時間も考慮して、すぐに出た順に文章を徐々に出すことによって、体感速度をかなり改善することができます。

from transformers import AutoTokenizer, pipeline, TextStreamer
import torch
import time

model_id = "mistralai/Mistral-7B-Instruct-v0.2"
tokenizer = AutoTokenizer.from_pretrained(model_id)
streamer = TextStreamer(tokenizer, skip_prompt=True)

pipe = pipeline("text-generation",
model=model_id,
tokenizer= tokenizer,
torch_dtype=torch.bfloat16,
device_map="auto",
max_new_tokens = 512,
do_sample=True,
top_k=10,
num_return_sequences=1,
streamer=streamer,
eos_token_id=tokenizer.eos_token_id
)

query = '量子コンピュータとは?'

start = time.time()
answer = pipe(query)
print(time.time()-start)
print(answer)

3060でもまだマラソンでも3090や4090に劣るのですが、ギリギリ我慢できるかな?って感じでした。