背景
ふえぇ... ChatGPT しゅごいね...
そのうち open に公開されそうだけど... それまでは open な日本語 GPT で頑張る!
今回は gpt-neox-japanese-2.7b 動かします.
hugging face で試せますが, stable diffusion とかに計算リソース割かれているのか, なんかいまいち実行が成功せぬ
参考情報
gpt-neox-japanese-2.7b による日本語テキスト生成を試す
https://note.com/npaka/n/n4651ee6d3c51
ありがとうございます.
CPU でも動きますが, Colab 無償版メモリ 12 GB では動かないとあるので, 16 GB はいるっぽ?
(モデルが fp32 展開すると 11.5 GB は必要なため)
とりあえず今回は CPU 128 GB mem + Ryzen 3950X + 3090(24 GB GPU mem)で動かします.
動作
ぺろっと使うには transformers の pipeline
がよいでしょう.
ただデフォルトは CPU 実行(device=-1
)になります.
GPU ある場合は 0(cuda:0
), 1(cuda:
) を指定します(文字列指定もできるんじゃろか)
また, モデルデータは fp16 になっていて 5.3 GB くらいなのですが, デフォルトで fp32 に展開ににされますので 11.5 GB くらい必要になります.
元モデルが fp16 だとあんまり fp32 に展開する利点もありませんので, fp16 で動かします!
(Intel とかの最新 CPU だと, CPU 実行の場合 fp16 のまま実行してくれたりするんじゃろかね)
torch_dtype
で torch.float16
を指定します
from transformers import pipeline
import torch
device = -1 # cpu
if torch.cuda.is_available():
device = 0
# device 0 = cuda:0
generator = pipeline("text-generation", model="abeja/gpt-neox-japanese-2.7b", torch_dtype=torch.float16, device=device)
generated = generator(
"優秀な若人さまが、人類史上最速で GPT をお極めなされるには、",
max_length=300,
do_sample=True,
num_return_sequences=3,
top_p=0.95,
top_k=50
)
print(*generated, sep="\n")
{'generated_text': '優秀な若人さまが、人類史上最速で GPT をお極めなされるには、それなりの動機と目的意識と決意が必要ということでしょう
か。'}
{'generated_text': '優秀な若人さまが、人類史上最速で GPT をお極めなされるには、大いなる疑問が湧きますが…'}
{'generated_text': '優秀な若人さまが、人類史上最速で GPT をお極めなされるには、GT3の開発が終わってからが妥当な時期だろう。'}
Ultra super cooool!!!
GT3 の開発が終わってから... GPT3 の開発が終わってから GPT4 が出てくるタイミングということでしょうか...!!! 😳
GPU では 5.3 GB くらいしか GPU メモリ消費しないので, 6 GB くらいのミッドレンジ GPU でも動くと思われます!
多少時間かかってもいいなら CPU でメモリ 16 GB で動かすのも手かもしれませんね.
(Apple sillicon mac なら fp16 実行でメモリ 8 GB でもうごいちゃうやも?)
TODO
- ファインチューンとかやってみる!
- ChatGPT っぽいのを作るためにプロンプトエンジニアリングをがんばる!
- Whisper で音声認識して受け答えしてくれたりするようにする!
- tdmelodic か, もしくはいい感じにピッチアクセント推定してくれる language model(e.g. https://arxiv.org/abs/2212.08321 ) と組み合わせて TTS(text-to-speech) をいい感じにする(GPT の感情推定と組みあわせるとか)