rinna-3.6B-Instruction-PPOで遊ぶメモ
このメモを読むと
・ローカルでLLMを動かせる
検証環境
・Windows11
・VRAM24GB
・ローカル(Anaconda)
・2023/5/E時点
事前準備
rinna
こちらの人間によるフィードバック学習済み言語モデルで遊んでみます。
実装
とても簡単です!
1.必要なパッケージをインストール
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers sentencepiece
2.コードを書いて実行
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
"rinna/japanese-gpt-neox-3.6b-instruction-ppo",
use_fast=False
)
model = AutoModelForCausalLM.from_pretrained(
"rinna/japanese-gpt-neox-3.6b-instruction-ppo"
).to("cuda")
# プロンプトの準備
prompt = [
{
"speaker": "ユーザー",
"text": "何かハマる趣味見つけたいんだけど良いのないかな?泳ぎは得意だから、それを活用したい!"
}
]
prompt = [
f"{uttr['speaker']}: {uttr['text']}"
for uttr in prompt
]
prompt = "<NL>".join(prompt)
prompt = (
prompt
+ "<NL>"
+ "システム: "
)
# 推論の実行
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),
max_new_tokens=1000,
min_new_tokens=14,
do_sample=True,
temperature=0.8,
repetition_penalty=1.1,
pad_token_id=tokenizer.pad_token_id,
bos_token_id=tokenizer.bos_token_id,
eos_token_id=tokenizer.eos_token_id,
no_repeat_ngram_size=2
)
output = tokenizer.decode(output_ids.tolist()[0])
print(output)
ちょっと変だけどそれなりに話せてる!
生成時のVRAM使用量は17GBくらいでした。
おまけ
# プロンプトの準備
prompt = [
{
"speaker": "私",
"text": "こんにちは!"
},
{
"speaker": "システム",
"text": "こんにちはー!あなたの名前を教えて?"
},
{
"speaker": "私",
"text": "おれっちです"
},
{
"speaker": "システム",
"text": "おれっちさん!何か話したい事あるー?"
},
{
"speaker": "私",
"text": "ない!俺の名前覚えてる?"
}
]
# プロンプトの準備
prompt = [
{
"speaker": "私",
"text": "こんにちは!"
},
{
"speaker": "システム",
"text": "こんにちはー!あなたの名前を教えて?"
},
{
"speaker": "私",
"text": "太郎です"
},
{
"speaker": "システム",
"text": "太郎さん!何か話したい事あるー?"
},
{
"speaker": "私",
"text": "ない!俺の名前覚えてる?"
}
]
へんな名前だとうまく理解されない。
バニラだと口調までは変更されませんでした。
おわり
たのしい!ローカルLLMの光ですね。
この記事が気に入ったらサポートをしてみませんか?