流行りの LLM(大規模言語モデル)を使ってみようということで試してみました。
今回は、rinna株式会社さんがオープンソースで公開されているモデルを、再インストールした直後のWindowsで動くように環境構築する実験を行ってみました。
◆ rinna、日英バイリンガル大規模言語モデルをオープンソースで公開
https://rinna.co.jp/news/2023/07/20230731.html
質問して回答をもらう形で使ってみたいので、対話言語モデルとして提供されている「rinna/bilingual-gpt-neox-4b-instruction-sft」を利用します。
・配布サイト
https://huggingface.co/rinna/bilingual-gpt-neox-4b-instruction-sft
・作業PCのスペック
Windows 11 pro / INTEL 12100 / GeForce3060(12G) / Memory 16GB
以下、作業手順の記録です。
(1) Python をインストール
まずは、Python をインストール
今回は、Micorosft Store で提供されている Python 3.11 をインストールしました。
(2) Microsoft Visual C++ のランタイムパッケージをダウンロード
https://learn.microsoft.com/ja-jp/cpp/windows/latest-supported-vc-redist?view=msvc-170
こちらのURLから、x86 用をダウンロードしてインストールします。
Python に、パッケージを追加インストールするとき要求されるので、先にインストールしときます。
(3) PIP で、追加のPython パッケージをインストール
# pip install --upgrade pip
# pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# pip install transformers
# pip install sentencepiece
とりあえず、私の環境では、上記の Python パッケージをインストールしたら質問に答えてくれるようになりました。
(4) python コードを実行
https://huggingface.co/rinna/bilingual-gpt-neox-4b-instruction-sft
Hugging Face の配布サイトに記述してもらってるコードを、そのまま転記して実行します。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
prompt = [
{
"speaker": "ユーザー",
"text": "日本のおすすめの観光地を教えてください。"
},
{
"speaker": "システム",
"text": "どの地域の観光地が知りたいですか?"
},
{
"speaker": "ユーザー",
"text": "渋谷の観光地を教えてください。"
}
]
prompt = [
f"{uttr['speaker']}: {uttr['text']}"
for uttr in prompt
]
prompt = "".join(prompt)
prompt = (
prompt
+ ""
+ "システム: "
)
print(prompt)
tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-sft", use_fast=False)
model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-sft")
if torch.cuda.is_available():
model = model.to("cuda")
token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
with torch.no_grad():
output_ids = model.generate(
token_ids.to(model.device),
do_sample=True,
max_new_tokens=128,
temperature=0.7,
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][token_ids.size(1):])
output = output.replace("", "\n")
print(output)
モデルの読み込みに、結構時間がかかりましたが、回答までの時間は短かったです。(GPU が使えたからかも?)
モデルの読み込み時間を短縮するには、以下の記事のコードのように、モデルを読み込んだ後、何度も質問できるようになっていたほうが実用的かもしれません。
◆ 自宅PCで「rinna」の日本語言語モデルを試用、メモリ32GBあればCPUだけでも動くぞ!
https://internet.watch.impress.co.jp/docs/column/shimizu/1503707.html
というわけで、今回は、LLM(大規模言語モデル)を動かすところまで試すことができました。