先日マイクロソフトから小規模言語モデルPhi-3ファミリの発表がありました。
Ollamaで使うことができるということなのでローカルLLMしてみました。
Ollamaインストール
ダウンロードサイトからアプリケーションをダウンロードします。
zipを展開しアプリケーションを起動します。ウェルカムメッセージに表示される「Next」ボタンを押下し次にOllamaのコマンドをインストールするために「Install」ボタンを押下します。「Run your first model」が表示されたら「Finish」ボタン押下でインストール完了です。
Phi-3-mini
Ollamaでの実行はコマンドラインからになるのでターミナル.appなどを開きコマンドを入力します。
$ ollama run phi3
...
verifying sha256 digest
writing manifest
removing any unused layers
success
>>> Send a message (/? for help)
プロンプト入力待ちになるので適当に入力してみます。
>>> あなたのお名前は?
私はMicrosoft Assistantです。オープンAIによって作られたアシスタントアプリケーションで、ユーザーが求める情報やサポートを提供します。あなたの名前は調べることができますが、現在は特定の名前を持っていません。
>>> Send a message (/? for help)
M1 MacBook Pro(16GBメモリ)で2秒くらいで結果が返ってきます。
Phi-3-miniは38億パラメータですが2倍のサイズのモデルよりも優れた性能を発揮するということなので使ってみようと思います。
Swallow
Phi-3-miniは小規模なモデルなのでもう少し大きいモデルでローカルLLMが実用的か確認してみました。
SwallowはMetaが開発したLlama 2をベースに日本語ウェブコーパスと英語コーパスを混ぜたデータで継続学習を行い日本語能力を改善したものです。
同じようなライセンスで提供されているものは他にもありますがなぜSwallowで試しているかは置いておきます。
モデルのダウンロード
Hugging Faceで公開されているのはベースとなるモデルと指示チューニングを施したものになります。ここではベースとなるもののうち7Bのモデルをダウンロードしてみます。
$ git clone https://huggingface.co/tokyotech-llm/Swallow-7b-hf
ファイルサイズが大きいためGit LFSで提供されています。macOSでHomebrewを使っている場合は以下のようにしてgit-lfsをインストールしておきます。
$ brew install git-lfs
Ollamaで使用するにはダウンロードしたモデルをGGUF形式に変換する必要があります。
変換はllama.cppと併せて提供されているpythonスクリプトで行います。
llama.cppダウンロード
$ git clone https://github.com/ggerganov/llama.cpp.git
GGUF変換だけなのでビルドする必要はありません。
$ cd llama.cpp
$ pip3 install -r requirements.txt
GGUF変換
$ ./llama.cpp/convert.py ./Swallow-7b-hf
...
INFO:convert:[291/291] Writing tensor output.weight | size 43176 x 4096 | type F32 | T+ 29
INFO:convert:Wrote Swallow-7b-hf/ggml-model-f32.gguf
GGUFインポート
インポートするためにモデルファイルを作成します。
FROM ./Swallow-7b-hf/ggml-model-f32.gguf
ollamaのコマンドを実行しインポートします。
$ ollama create Swallow-7b-hf -f Swallow-7b-hf.model
transferring model data
creating model layer
using already created layer sha256:3b194101458599a8bfed89f14d350c0d129c6c7ac78a09c10e6e293da5162fe3
writing layer sha256:7b2d99954c2557537e321249e1db37d55ab05e5474d9afb2646b3f88459a3ec6
writing manifest
success
インポートしたモデルを実行し、Phi-3-miniと同じプロンプトを試してみます。
$ ollama run Swallow-7b-hf
>>> あなたのお名前は?
100年後、あなたのお名前はどうなっていますか?
今の名前が変わらずに残っている可能性は低いと思いませんか?
「名は体を表す」という言葉があるように、名前はその人自身を表すものです。
100年後、あなたのお子様も同じことが言えるでしょう。
100年後の世界では、今の名前とは異なる形で呼ばれているかもしれません。
そう考えると、お子様にどのような名前を付けるか悩むところですね。
また、将来的に「子供の名前ランキング」が存在するかもわかりません。
そこで今回は、子供の名付けの基本について解説します。
昔から受け継がれた名前もありますが、今風の名前を付けたいと思う親御さんも多いですね。
その時の流行や時代に合った名前を付けることが重要です。
しかし、それだけではいけません!
...
3時間掛かってもまだ回答し切れていないようでした。
結果をどう判断したら良いか迷いますが結果を得られるまでの時間からは、M1 MacBook Pro程度で7Bのモデルを実行するのは難しそうです。