rinnaの日本語GPT-2モデルを動かしたかったのでやってみました。
いつもどおりwindows10homeでvagrant動かしてやっています。
参考
2021/4/7 日本語に特化したGPT-2の大規模言語モデルを開発しオープンソース化
japanese-gpt2
Huggingface Transformers 入門 (27) – rinnaの日本語GPT-2モデルの推論
やったこと
いつもどおりbentoのboxファイルでubuntu20のを探します。
コマンドプロンプトでubuntu20の仮想マシンを立ち上げてログイン
C:\> vagrant init bento/ubuntu-20.10
C:\> vagrant up
C:\> vagrant ssh
ubuntu20に入れたのを確認
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.10
DISTRIB_CODENAME=groovy
DISTRIB_DESCRIPTION=”Ubuntu 20.10″
ソフトウェアをアップデート、アップグレードする。
ついでにpythonのバージョン確認、pipもインストールする。
$ sudo apt-get update
$ sudo apt -y upgrade
$ python3 -V
Python 3.8.6
$ sudo apt install -y python3-pip
pythonの仮想環境をインストールして作成
$ sudo apt-get install python3-venv
$ python3 -m venv –system-site-packages ./venv
仮想環境へ移動
$ source ./venv/bin/activate
仮想環境に移動すると(venv)がつく、仮想環境のpipをアップグレードしてtensorflowをインストール、tensorflowの動作確認
(venv)$ pip install –upgrade pip
(venv)$ pip install –user –upgrade tensorflow
(venv)$ python -c “import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))”
Transformersをインストール
(venv)$ pip install transformers
pythonを実行し、Transformersを動かしてみる。
pipeline(‘sentiment-analysis’)で感情分析ができるらしいのでやってみる。
(venv)$ python
>>> from transformers import pipeline
>>> classifier = pipeline(‘sentiment-analysis’)
>>> classifier(‘We are very happy to show you the Transformers library.’)
[{‘label’: ‘POSITIVE’, ‘score’: 0.999799370765686}]
Transformersはとりあえず動いてるみたいなので、いったんpythonの対話モードから抜ける。
>>> exit()
rinnaのjapanese-GTP-2モデルを動かしてみる。
なにもせず実行した際にSentencePieceとpytorchがないと怒られたので、インストールする。
(venv)$ pip install sentencepiece
(venv)$ pip install torch
pythonの対話モード(入力したコードをすぐ実行するモードのこと)で日本語GTP-2モデルを動かす準備をする。
(最初は失敗してkillされたのでVirtualBoxのメモリを4Gに上げるとうまくいった)
(venv)$ python
>>> from transformers import T5Tokenizer, AutoModelForCausalLM
>>> tokenizer = T5Tokenizer.from_pretrained(“rinna/japanese-gpt2-medium”)
>>> model = AutoModelForCausalLM.from_pretrained(“rinna/japanese-gpt2-medium”)
実際に推論を動かしてみる。
>>> input = tokenizer.encode(“胃が痛い、森のようだ”, return_tensors=”pt”)
>>> output = model.generate(input, do_sample=True, max_length=50, num_return_sequences=3)
>>> print(tokenizer.batch_decode(output))
[‘胃が痛い、森のようだ #はなまるうどん #はれのひ https://t.co/b3jzy4i3rgb はははははははははは’, ‘胃が痛い、森のようだ 胃は小さくなっているが もっと奥がある。 何事にも 良い面も悪い面も持ち合わせていて それは 人間社会に 必要な面と 悪い一面。 悪面’, ‘胃が痛い、森のようだ >>527 のコメントにも出てくるとおり、2年くらい前からずっと言われてることなんだ よ。 俺自身は、こういう書き込みを見るたびに、この板で主張してる人達がいる’]
Twittrerとかでよく見かける語彙なのかな・・・(twitterのURLついてるぞ・・・)。
max_length50だと10秒ぐらいで文字生成が終わった。
500文字にしたら2分20秒ぐらいかかって下記の文章ができた。
[‘胃が痛い、森のようだ pic.twitter.com/xo0lqyjl8n 【速報】ニンテンドースイッチ予約完了!!11月19日に同時発売!! nintendo switch スプラトゥーン2 発売!!11月19日 予約開始!! #スプラトゥーン2 pic.twitter.com/4r0hlkm4gw 【psn】「nintendo switch 」の購入について ※ご注意…※ ※11月19日(月)のサービス開始時間は予定です。※ nintendoswitch… nintendo switch発売を記 念して,「スプラトゥーン2」について, nintendo switch
3分で500文字書いてくれると考えるとちょっと面白いかもしれない。
pythonの対話モードを出て、仮想環境を終了
>>> exit()
(venv)$ deactivate
おわり。