はじめに
ユーフォ3期4話、めっちゃよかった。すっごいよかった😭 nikkieです
最近登場したphi-3、気になったので触りました。
目次
- はじめに
- 目次
- 届いたphi-3の興奮
- Phi-3-mini-4k-instruct-ggufを動かす
- 量子化前のモデルをtransformersで動かす
- 積ん読:Phi-3-mini-128k-instructもすごそう
- 終わりに
届いたphi-3の興奮
Llama 3が登場したばかりですが、phi-3への興奮の声を観測1
I can't believe microsoft just dropped phi-3 less than a week after llama 3 https://t.co/1EPzVKzhDi.
— Sebastian Raschka (@rasbt) 2024年4月23日
And it looks good! pic.twitter.com/lEzLNS9h3X
phi-1は「Textbooks Are All You Need」論文で提案されたモデルです。
それの3代目ってことなのかな(2代目も探してみなきゃ)
phi-1 is a Transformer-based model with 1.3B parameters, (略) using a selection of “textbook quality” data from the web (6B tokens) and synthetically generated textbooks and exercises with GPT-3.5 (1B tokens)
Phi-3-mini-4k-instruct-ggufを動かす
Hugging Faceを見ると、複数の方法が案内されます。
ollamaで動かす
ノーコードで動かす方法です。
macOS向けのGUIアプリケーションからコマンドラインを設定しました2。
phi-3のHugging Faceページではcurlで導入する方法も案内されています。
curl -fsSL https://ollama.com/install.sh | sh
% ollama --version ollama version is 0.1.32
https://ollama.com/library/phi3:3.8b-mini-instruct-4k-q4_K_M を指定します。
latest, 3.8b, instruct, miniというタグもありますが、ハッシュが同一なので中身は今回指定するタグと同じと思われます。
% ollama run phi3:3.8b-mini-instruct-4k-q4_K_M >>>
(モデル(2.3GB)がダウンロードされる待ち時間がありました)
Hugging Faceの例を入れてみます。
「中世の騎士にインターネットを説明すると?」
>>> How to explain Internet to a medieval knight? Lady/Sir, imagine the world you know as our kingdom.
1600文字程度出力されました。
出力は速くてすごいですね。快適です
訳した日本語も入れたところ、体感同じ速さで日本語が返ってきました。
ただ読んでみるとちょっと変なところがあります(繰り返しとか、突然の英語とか、文字化けとか)
llama-cpp-pythonを使って動かす
Pythonスクリプトからも動かしてみます。
Hugging Faceのページではllama-cpp-pythonが紹介されていました。
モデルのファイルのパスを指定するようでした。
ここで「ollamaでダウンロードしているモデルが渡せるのでは?」と企みました。
ollama run
のプロンプトで/show modelfile
とすると、ダウンロードしたファイルがどこにあるか分かります(FROMの行)
動作環境3
% pipx run --python python3.11 ./script_llama_cpp.py <|user|> How to explain Internet to a medieval knight?<|end|> <|assistant|> To explain the concept of the Internet to a medieval knight, one must use metaphors and analogies that relate to their world. Here's how you might approach it: (略)
量子化前のモデルをtransformersで動かす
transformersでも動かしてみます4。
動作環境
- Python 3.11.8
- transformers 4.40.1
- PyTorch 2.3.0
% pipx run --python python3.11 ./script_transformers.py Good morrow, noble knight. I come before thee to share knowledge of a magical realm known as the "Internet." Imagine, if thou wilt, a vast kingdom where all the wisdom of the world is stored, and it can be accessed by any person with a device, much like a scroll or tome, but far more powerful and swift. (略)
(下で紹介するぬこぬこさんの実装を参考にしています)
積ん読:Phi-3-mini-128k-instructもすごそう
ぬこぬこさん5が試している例、few-shotで日本語を流暢に話していました
Phi-3 mini 128k instruct の Colab T4 で動作確認の取れた gist 置いておきます。Open in Colab からどうぞ。
— ぬこぬこ (@schroneko) 2024年4月23日
サンプルの方程式を解く問題は難なくクリア。日本語でもクリア。3.8B にしてはかなり日本語をナチュラルに話せているのでは?https://t.co/BxAdFJn3nW https://t.co/mOy7C89Wj5 pic.twitter.com/yaugpsvV5E
messages = [ {"role": "system", "content": "あなたは有益なデジタルアシスタントです。ユーザーに安全で倫理的かつ正確な情報を提供してください。"}, {"role": "user", "content": "バナナとドラゴンフルーツを組み合わせて食べる方法を教えていただけますか?"}, {"role": "assistant", "content": "もちろんです!バナナとドラゴンフルーツを一緒に食べる方法はいくつかあります:1. バナナとドラゴンフルーツのスムージー:バナナとドラゴンフルーツをミルクとはちみつと一緒にブレンドします。2. バナナとドラゴンフルーツのサラダ:スライスしたバナナとドラゴンフルーツをレモン汁とはちみつで和えます。"}, {"role": "user", "content": "2x + 3 = 7 の方程式を解くことについてはどうですか?"}, ]
終わりに
phi-3を触りました。
量子化したモデルをollamaやllama-cpp-pythonを介して触ったときの、テキスト生成の速さはすごかったです。
アンフェアな比較かもしれないですが、1年前に触ったOpenCALMとは出力の質が違うという体感です。
すごい時代が、来てしまいました!