シンギュラリティ実験ノート

購入した1000ドルPCで何がどこまでできるのか実験した記録です。

1000ドルPCでELYZA-japanese-Llama-2-7bを動かしてみた

1000ドルPCで日本語対応の大規模言語モデルのELYZAを動かしてみた。使用したモデルは70億パラメタの8bit量子化版である。モデルを動作させるプラットフォームは先日の記事で紹介したllama2.cppを使用する。この記事では環境を紹介し忘れていたが、WSL2(WindowsUbuntu環境)で動作させている。WSL2ではGPUは使えないが、CPUで動作させるのでWSL2で問題ない。

モデルのダウンロード

ELYZAはELYZA社が公開しているLlama2ベースの日本語対応LLMである。

ELYZA

今回もオリジナルのモデルを8bitで量子化したモデルを使用する。7bは7billion、つまり 7 \times 10^{9}パラメタで、1パラメタが8ビット(=1バイト)で量子化されているので、7GBのメモリで動作するはずである。GGUF形式に変換されたモデルがこちらに公開されている。

huggingface.co

動作確認「短編小説を書いてください」

ダウンロードしたモデルをmodelsフォルダの下に置き、以下のコマンドを実行する。プロンプトは本家のページに記載されているサンプルをそのまま利用している。

$ ./main -m ./models/'ELYZA-japanese-Llama-2-7b-fast-instruct-q8_0.gguf' -n 256 -p '[INST] <>あなたは誠実で優秀な日本人のアシスタントです。<>クマが海辺に行ってアザラ シと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。 [/INST]'

結果

指示:あなたは誠実で優秀な日本人のアシスタントです。クマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。

 

回答:「クマがお友達をつくる」

ある日、森の中から大きな音が聞こえてきました。それはクマが大はしゃぎで転んだ音でした。クマは海へ行きたいと思ったのですが、足が悪いので泳げません。そこで、クマはアザラシにお手紙を出すことにしました。

「この手紙を届ける人を探しています。私はクマで、海辺に行きたいのですが、泳ぐことができないのでお手伝いをお願いします」

アザラシに手にされた手紙は、海辺の他の動物達の手にも渡り、ついにカモフラージュダックへと到着しました。カモフラージュダックは泳げるとても強い鳥で、クマが泳げるようにサポートしてくれます。

「このお手紙を届ける人を探しています。私はクマで、海辺に行きたいのですが、泳ぐことができないのでお手助けをお願いします」

こうして、クマは海辺まで辿り着くことができました。アザラシや他の動物達と仲良くなり、家に帰るときにはたくさんの思い出を作ることができていました。

 

ログ出力(抜粋)

llama_print_timings:        load time =     311.81 ms
llama_print_timings:      sample time =      41.78 ms /   256 runs   (    0.16 ms per token,  6126.89 tokens per second)
llama_print_timings: prompt eval time =    3222.02 ms /    65 tokens (   49.57 ms per token,    20.17 tokens per second)
llama_print_timings:        eval time =   35551.24 ms /   255 runs   (  139.42 ms per token,     7.17 tokens per second)
llama_print_timings:       total time =   38951.85 ms /   320 tokens

評価

1秒あたり7トークンの性能が出ており、ストレスもほとんどない。量子化の効果もあるのだろうが、CPUでも少し前のGPUボード並の処理速度が出ているのではないか。(GPUボード持ってないから知らんけど(笑))

テストその1「日本の年金制度の特徴を簡単に説明してください」

結果

指示:あなたは誠実で優秀な日本人のファイナンシャルプランナーです。日本の年金制度の特徴を簡単に説明してください。

 

回答: 日本の年金制度には大きくわけて「老齢年金」と「遺族年金」があります。老齢年金は65歳から受給が開始できる仕組みで、これまでは男性が10年、女性が10年の加入実績が必要でしたが、2023年からこれまでの加入期間の内、70%が分単位でカウントされるようになります。老齢基礎年金のほかに確定給付の公的年金である厚生年金や共済組合などの企業年金によって受給額が一部上乗せされます。また、65歳以上の夫婦いずれかが受け取る妻分の年金額は、本人がもらう年金額の2/3です。さらに老齢基礎年金だけでなく、確定給付の公的年金である厚生年金や共済組合などの企業年金によって受給額が一部上乗せされます。遺族年金は、65歳以上の親などが亡くなったときにその子供や孫などに支払われます。遺族年金の受給要件は老齢年金よりも厳しく、18歳に達した児童がいるなど一定の要件を満たしていることが条件です。遺族基礎年金をもとに確定給付の公的年金である厚生年金や共済組合などの企業年金によって受給額が一部上乗せされます。

評価

ん?と思うところが幾つもある。年金制度を大きく「老齢年金」と「遺族年金」に分けているのもおかしいし、「70%が分単位でカウントされるようになります」というのは意味不明だ。私も年金制度を正確に説明する自信はないので、ここはGoogle先生に聞いて確かめてみた。

Googleの回答:老齢基礎年金・老齢厚生年金を受け取るためには、10年以上の資格期間が必要です。 ただし、平成29年7月以前に受給開始年齢を迎える方は、原則25年以上の資格期間が必 要になります。 加入期間は、厚生年金保険に加入した月から加入をやめた日(退職日の翌日など)の前月までの月単位で計算します。

年金の3階建てとは何ですか? 対象年齢の国民全員が加入する国民年金を1階部分、会社員などが加入する厚生年金を2階部分、私的年金を3階部分とする日本の年金制度のことです。

加入期間はやはり月単位である。分け方も「国民年金」と「厚生年金」が基本であるし、「老齢年金」という言葉を使うなら「老齢基礎年金」と「老齢厚生年金」と分けるべきだろう。ファイナンシャルプランナーの資格試験にAIが合格するのはまだ先のようだ。

テストその2「 品川駅から東京駅への行き方を教えてください」

温度=0.1を指定

温度とは、文章のランダム性をコントロールするパラメタで、0に近いほど確実性の高い単語を選ぶ仕組みになっているようだ。--tempというコマンド引数で指定する。

結果

指示:品川駅から東京駅への行き方を教えてください。

回答:承知しました。品川駅から東京駅へは、京浜東北線や山手線で向かうことができます。

1. JR京浜東北線に乗車し、田町駅で山手線に乗り換える: 品川駅からJR京浜東北線に乗車し、田町駅で山手線に乗り換えると、東京駅へ行くことができる。

2. JR山手線に乗車するのみ: 品川駅からJR山手線に乗車するだけで、東京駅まで行くことができる。

どちらのルートでも約15分程度で到着します。

評価

この場合はほぼ正しい回答をしている。

温度=5.0を指定

温度の最大値(5.0)を指定。温度を高くすると多様性の高い文章になるらしい。

結果

指示:品川駅から東京駅への行き方を教えてください。 

回答:承知しました。。以下に、品川駅から東京駅への行き方を記載します:

1. JR東海道本線に乗車し、「品川」駅から「田町」駅へ乗り換えます。
2. 田町駅からは徒歩または京浜急行電鉄に乗車して、「蒲田」駅か「神奈川」駅まで向かいます。
3. 蒲田駅神奈川駅から東京モノレールの指定券を買えば、目的地の東京ステーションホテルの前にある「海の森」(みなとみらい)駅へ行くことが出来ます。

評価

東京駅を羽田空港と勘違いしているのか? あまりに独創的すぎる(笑)。独創性や創造性の高い小説を書きたいとき以外は使わない方が良さそうだ。

感想

ちょっと遊べるおもちゃを手にした気分である。もう少し使い込んでから評価をするべきと思うが、Google先生の代わりや、Yahoo乗り換え案内の代わりに使えると思っていると痛い目に会いそうである。ELYZAには13bのモデルもあるのでこちらも評価してみたい。