オンプレミスでもGPTがしたい(Cerebras-GPTを動かしてみる)

ChatGPTすごいですよね。私もChatGPT Plusに登録して遊んでいますが、やはりお家環境で動かしたい欲求に駆られます。

とはいえ家でとトレーニングさせるには大変なので、学習済みのモデルがオープンソースで公開されているCerebras-GPTを使ってみようぜっていう記事です。

物理環境としてはDeskmini A300にRyzen5 2400Gに32GBメモリ、480GB SSDの環境にProxmoxをインストールした環境で、LXCのCentOS Stream9をコンテナイメージから構築していきます。

メモリは24GB、コアは4コア設定したコンテナを構築しました。

コンテナを立ち上げてすぐはsshが使えないので、コンソールからsshサーバのインストールをします。rootログインを許可し、起動します。

# dnf install -y openssh-server
# vi /etc/ssh/sshd_config
↓以下を追記
PermitRootLogin yes

# systemctl enable --now sshd

これであとはssh経由で作業します。

Pythonを入れていきます。

# dnf install python3 python-pip -y

pipでtransformersとPyTorchをインストールしていきます。

# pip install transformers torch torchvision torchaudio

サンプルコードをベースに以下のようなコードを組んで実行します。

適当なマウントポイント作ってcache_dirで指定しておきます。結構データはサイズがあります。一番大きい13Bが30GBぐらい、2.7Bで10GBぐらい、1.1Bで5GBぐらいあります。

from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import pipeline

#model_name = "cerebras/Cerebras-GPT-2.7B"
model_name = "cerebras/Cerebras-GPT-1.3B"
#model_name = "cerebras/Cerebras-GPT-590M"
cache_dir="/work"

tokenizer = AutoTokenizer.from_pretrained(   model_name, cache_dir=cache_dir)
model = AutoModelForCausalLM.from_pretrained(model_name, cache_dir=cache_dir)

text = "Japan is"

pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
generated_text = pipe(text, max_length=50, do_sample=False, no_repeat_ngram_size=2)[0]
print(generated_text['generated_text'])

実行するとこんな感じにないります。

# python gpt1.3b.py
2023-04-12 15:34:33.585236: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-04-12 15:34:34.473024: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
Japan is a country with a population of over 1.2 billion people. It is the second largest country in the world after the United States. The country is divided into four regions: the Northern Region, the Southern Region and the Western Region.

Japan isで指定したとき、出力はこんな感じになりました。

Japan is a country with a population of over 1.2 billion people. It is the second largest country in the world after the United States. The country is divided into four regions: the Northern Region, the Southern Region and the Western Region.

日本語訳
日本は、12億人以上の人口を抱える国である。米国に次いで世界で2番目に大きな国である。国は、北方領土、南方領土、西方領土の4つの地域に分かれています。

なんだか、内容は現実とは違うけど、文章としてはそれらしいものを生成してそうに思えますね。

ちなみに日本語を放り込むとなんか出力はされましたが、内容はさらに変な感じになりました。謎の「おじ」です。
「日本とは」から続けさせています。

# python gpt1.3b.py
2023-04-12 15:39:20.700306: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-04-12 15:39:21.583570: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
日本とは、それぞれの責任を持つ人々が支援することができる。

おじ

この感じだと日本語入力→翻訳→GPT→翻訳→出力するとまあまあいい感じになるんじゃないでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)