LLMとは、大規模言語モデルのことで、簡単にいうと文章を理解して高度に返答してくれるAIです。このLLMはChatGPTやClaudeなどのサービスが有名ですが、最近これらを自分のPCに入れて動かすことが簡単にできるようになってきました。これらのローカルのマシンにインストールするローカルLLMはセキュリティ的に他のサービスに情報を渡したくない時など、またロボットなどで使う場合、利用制限などをかけられずに使いたい場合などに便利です。
・他のサービスに情報を渡したくない時
・ロボットなどで使う場合
・利用制限などをかけられずに使いたい
最近のローカルのLLMは利用がものすごく簡単です。一番主流がHugging Faceと呼ばれるモデルを置いてある場所からモデルファイルをとってきて使います。意外とローカルでのLLMの実装や利用をしたことがある人が少なかったので簡単に利用する方法を紹介します。おそらくローカルLLMの一番の障壁はGPUの導入かと思います。超入門として紹介します。
まず、LLMで一番重要なのは、「モデル」と呼ばれるファイル群です。中はLLMの中核をなす重みパラメータが格納されています。よくモデルを語る際に、7Bとか13Bとか70Bとかの数字が出てきます。例えば、mistralaiの出している、Mistral-7Bは7Bというパラメータサイズを持っています。
https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2
7Bは70億の略(Bはビリオンで10億)で、モデルのファイルに格納されているパラメータの数が70億あることを指しています。最近よく利用されるローカルLLMはこの7Bから70Bくらいのモデルが多く利用されます。このパラメータを自分のローカル(手元)のPCにダウンロードして利用することから始まります。
CPUを使うこともできますが(ものすごい計算に時間がかかる)、まずPCですが、GPUと呼ばれるものを利用するのが一般的です。NVIDIAのGPUが搭載されているかを確認します。その際にGPUで今回重要になるのは、VRAM(ブイラム)と呼ばれるGPUに搭載されている保存領域です。このVRAMが大きい方が基本的にはLLMにおいては大きなモデルを扱うことができます。例えば、7Bモデルでは16GBくらいのVRAMがあればいいですが、すでにこれは結構お店で手に入る普通のGPUでは大きな方のサイズになります。現在お店で手に入るGPUでVRAMが16GB以上のものは、24GBを搭載するRTX3090と4090に限られます。その他はプロ用のワークステーションと呼ばれる高性能業務用PC向けのものは16GBや48GBモデルなどがありますが、GPUだけで数十万円します。
現状手に入るPCとしては諦めて20万円以上払って24GBのものを手に入れるか、その下の12GBモデルで動かすしかありません。12GBモデルだと、RTX3060というGPUがリーズナブルで4-5万円程度で手に入ります。これを利用することもできます。
画像引用:https://amzn.asia/d/4UwL4N6
RTX3060(アフィリエイトリンクではありません。。。)
また、どうやってGPUを搭載するのかという質問もきました。こちらは通常はデスクトップ用の自作PCのマザーボードにPCIeというスロットがあり、そこにGPUを指します。
画像引用:https://amzn.asia/d/2IEo6Zs
これが基盤となるマザーボードですが、左下に見えるのがPCIeスロットです。3.0とか4.0とか5.0とか規格がありますが数字が大きい方が新しく高速です。GPU側も対応しているPCIeの規格がありますのでPCIe5に対応しているマザーボードを買ってもGPU側が対応していないこともありますので、チェックが必要です。
左下のスロットに銀のスロットに右側にレバーがついたようなものがありますが、これがPCIeで、よく見るとその二つ下にも同じようなレバーがついたスロットがあります。これはさしたGPUを外すときに利用するレバーです。最近のGPUはかなり厚みがあるので、PCIeのスロットが近接しすぎているものはGPUを二つ以上搭載して利用したい場合には、問題となりますので、PCIeの間隔も重要です。
また、GPUを二つ以上搭載できるマザーボードも結構あり、単体ではVRAMが12GBでもそれを2枚さして利用することにより、24GBのVRAMを利用できることもできます。システムによってGPUがマルチで使えるか確認してできるようならお金を出せばVRAMを増やせます。
CPUはAMDやIntelのものであれば特に制限はなくて、マザーボードにあったものを導入します。メインメモリはシステム全体の一時保存領域を担いますが、多めのVRAMを積んでる場合には多めのメインメモリを積んだ方がいいです。16GBとか32GBとかのメモリモジュールがあるので、それを必要枚数買います。コンシューマではメモリをさせるスロットが4つくらいが最大なので、その最大数の範囲内でメモリを購入してさして使います。あとは、OSをインストールするストレージなどを買います。
OSについても勉強会で質問がありました、通常はUbuntuというLinuxのOSを利用するのがいいと思います。Ubuntu DesktopでしたらWindowsやMacとあまり変わらずGUIと呼ばれるマウスやトラックパッドで操作するインターフェイスがついてて簡単に利用することができます。Ubuntuのインストールの後にはGPUを利用できるようにドライバーと呼ばれる接続用のソフトウェアツールみたいなものをインストールする必要があります。
それらのセットアップが全部終わりましたらいよいよローカルのLLMを利用することができます。基本的にはPythonを利用してローカルLLMを利用します。また、Jupyter Notebookと呼ばれる対話型のPythonインターフェースを使うこともできます。この辺りはちょっと好みでしょうか。
Pythonがインストールできていたら、Pypiと呼ばれるパッケージ管理用のツールを使って簡単にLLMを構築できます。
上記の重みが格納されたモデルはHugging Faceから簡単にダウンロード、インストールできます。通常はHugging Faceの開発したtransformersというツールを使います。
pip install transformers accelerate
こんな感じでコンソールやJupyternotebookからインストールできます。全てインストールできたら、このように実行できます。
まずは利用するモデルを指定します。今回はmistralaiのMistral-7Bを指定しました。model_idというところにアドレスを入れました。
あとは、ちょっと書いて終わりです。出したい命令はmessagesの中に書きました。今回は日本の首都を聞いてみます。
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "mistralai/Mistral-7B-Instruct-v0.2"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16, device_map="auto")
messages = [
{"role": "user", "content": "日本の首都は?"}
]
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda")
outputs = model.generate(inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
これを実行すると自動的にインストールが始まります。モデルの重みは今回は、3つのファイルに分かれています。それらのダウンロードが始まります。今回は5GB程度のファイルが3つくらいダウンロードされます。そして読み込まれます。今回は日本語で聞いてみました。
答えは、
[INST] 日本の首都は? [/INST] 日本の首都は東京です。
指示に対して正しく答えられました。これはインターネット上にあるクラウドシステムではなく、自分の手元のPCで動いています。
GPUを利用するのが理想的ですが、GPUを利用しないでも利用はできます。モデルのサイズを落とせばCPUでも処理ができます。また最近ではこのような推論と呼ばれる学習したモデルを実行する際に高速に稼働できるようなチップの開発も全世界で盛んです。最近登場したgroqと呼ばれるものは段違いに早いと話題になりました。
ローカルでLLMを開始する方法を超入門で出ました、最近はこのようなローカルのモデルもかなり性能が上がっています。有料のモデルをクラウドで利用しなくても、制限がかかることなく自分の手元で自由に行えることはかなり魅力的な話です。ぜひトライしてみてください。もしGPUを持っていない場合にはお試しとしてGoogle Colabと呼ばれる無料のサービスを利用して動作を試してみるのもお手軽です。