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→翻訳→出力するとまあまあいい感じになるんじゃないでしょうか?