« 分離型キーボードで親指シフト(NICOLA配列)を試す(Majestouch Xacro M10SP JIS配列) | トップページ

2024.01.14

Intel Mac で ELYZA-japanese-Llama-2-13b 及び phi-2 とllama.cppで戯れてみた

Llama 2を日本語拡張したELYZA-japanese-Llama-2に13b版が出ましたので試してみます。
Hugging Face ELYZA.inc
ここにモデルがありますので、ELYZA-japanese-Llama-2-13b-fast-instruct と ELYZA-japanese-Llama-2-13b-instruct のモデルをダウンロードしてllama.cppを用いて推論してみました。

以前にLLMをいくつか試しています。
Intel MacでGPUを使わずに大規模言語モデルと戯れてみた
Intel MacでLlama 2モデルと戯れてみる
Intel Mac上でllama.cppを使って日本語LLM(ELYZA & Stabilityai beta)を使ってみる
Intel Mac上でllama.cppのサーバ機能を使って日本語LLMを使ってみる

今回、ELYZA-japanese-Lllama-2-13bを試すにあたっては、ダウンロードやGGUFフォーマットへの変換、量子化について、
Intel Mac上でllama.cppを使って日本語LLM(ELYZA & Stabilityai beta)を使ってみる
Intel Mac上でllama.cppのサーバ機能を使って日本語LLMを使ってみる
と同様の手順にしたがっています。

1. ELYZA-japanese-Llama-2-13bを使ってみる

以前ELYZA-japanese-Llama-2-7bを試したときには、llama.cpp純正convert.pyを使ってfastモデルからggufに変換できませんでした。今回の13b-fastではSentencePiece モデルに対応してくださったそうで、素直にconvert.pyを使ってggufに変換することができます。ありがたいですね。

ELYZA-japanese-Llama-2-13b-fast-instructをconvert.pyを用いてggufのf16モデルに変換し、quantizeを用いてQ4_K_Mに量子化しました。実行例は以下のとおり。
2024011301min

ELYZA-japanese-Llama-2-13b-instructをconvert.pyを用いてggufのf16モデルに変換し、quantizeを用いてQ4_K_Mに量子化しました。実行例は以下のとおり。
20240113015min

fastモデルを使うとtoken数が少なくなり、全体の実行時間が短縮されているのが分かりますね。

次に、llama.cpp同梱のserverを使ってWeb Browser上でチャットをしてみましょう。

ELYZA-japanese-Llama-2-13b-fast-instructの実行例がこちら。
2024011302min

ELYZA-japanese-Llama-2-13b-instructの実行例がこちら。なんか、途中でserverからの反応が止まってしまいました。slotが止まってしまったみたい。
2024011303min

そこで、-c (--ctx-size; プロンプトコンテキストサイズ) をデフォルトの512から4096に変更して再実行した結果がこちら。fastモデルと同程度まで会話が進みました。
2024011304min
このことから、fastモデルがキャッシュの使用量が抑えられていることが分かります。

2. Microsoft Phi-2を使ってみる

Microsoft Phi-2モデルが、モデルが小さい割に性能が高いと評判ですね。ggerganovのllama.cppもPhi-2に対応しているとのことなので試してみました。
まず、llama.cppの最新版を改めてgit cloneしてmakeします。自分のMac miniはApple Siliconではないので、METALを使わないようにmakeしました。なお、以下で使用したllama.cppのコミットハッシュ値は de473f5 です。


$ git clone https://github.com/ggerganov/llama.cpp
$ cd llama.cpp
$ LLAMA_NO_METAL=1 make -j

Phi-2をダウンロードします。最新版を使ったら仕様が変わったらしく、ggufに変換できなかったので、リビジョン指定してタウンロードし直しました。


from huggingface_hub import snapshot_download
model_id="microsoft/phi-2"
snapshot_download(repo_id=model_id, local_dir="phi-2_2",
local_dir_use_symlinks=False, revision="d318676")

Phi-2をggufモデルに変換するには、llama.cppに同梱されている convert-hf-to-gguf.py を使用します。自分はggufへの変換はPython環境に依存するのでDocker環境内で実行しています。もしかしたら、事前に pip install -r requirement.txt の実行が必要かもしれません。


$ python3 convert-hf-to-gguf.py [Path to phi-2 model]/phi-2

モデルが変換できたら、Mac環境内で量子化しました。

 
$ ./quantize [元のモデルのファイル名] [変換後のモデルのファイル名] Q4_K_M

量子化前のf16モデルのファイルサイズが5.2GByteと十分小さいのですが、Q4_K_Mに変換すると1.7GByteと脅威の小ささです!会話例は以下のとおり。BobはAI Assistantです。


User: Who is the greatest President in USA history?
Bob: The greatest president in US history is George Washington. He was the first president of the United States and played a significant role in its founding.
User: Sort the sequences 8, 2, 1, 9, 7, 6, 5, 3, 4, 10 in descending order.
Bob: Certainly. The sequence sorted in descending order is 10, 9, 8, 7, 6, 5, 4, 3, 2, 1.
User: "John and Tom went shopping at a shopping center. They bought basketball shoes and then played a game at the arcade. For lunch, John bought tacos and a Coke, and Tom bought a sandwich and coffee. Then they watched a baseball game and went home."\nWhat did John eat?
Bob: Based on what you said, John ate tacos, a Coke, and presumably other items for his meal such as chips or a salad.
User: "John and Tom went shopping at a shopping center. They bought basketball shoes and then played a game at the arcade. For lunch, John bought tacos and a Coke, and Tom bought a sandwich and coffee. Then they watched a baseball game and went home."\nWhat did Tom eat?
Bob: Based on what you said, Tom ate a sandwich and coffee, as well as other items for his meal such as chips or a salad.
(DeepL翻訳)
User: アメリカ史上最も偉大な大統領は誰ですか?
Bob: アメリカ史上最も偉大な大統領はジョージ・ワシントンです。彼はアメリカの初代大統領で、建国に重要な役割を果たしました。
User: 8, 2, 1, 9, 7, 6, 5, 3, 4, 10の並びを降順に並べてください。
Bob: そうですね。降順に並べ替えると 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 となります。
User:「JohnとTomはショッピングセンターに買い物に行きました。二人はバスケットシューズを買い、ゲームセンターでゲームをした。昼食にジョンはタコスとコーラを買い、トムはサンドイッチとコーヒーを買った。Johnは何を食べましたか。
Bob: 今のお話からすると、Johnはタコスとコーラ、それからおそらくポテトチップスやサラダを食べたと思われます。
User: 「JohnとTomはショッピングセンターに買い物に行きました。バスケットシューズを買い、ゲームセンターでゲームをしました。昼食は、ジョンはタコスとコーラを買い、トムはサンドイッチとコーヒーを買った。」Tomは何を食べましたか。
Bob: 今のお話からすると、Tomはサンドイッチとコーヒー、それにポテトチップスやサラダを食べたようです。

 
DeepL.com(無料版)で翻訳しました。

少し余計な回答が混じっている気がしますが、概ね自然で的確な会話になっていますね。実行速度も相当速いです。

|

« 分離型キーボードで親指シフト(NICOLA配列)を試す(Majestouch Xacro M10SP JIS配列) | トップページ

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 分離型キーボードで親指シフト(NICOLA配列)を試す(Majestouch Xacro M10SP JIS配列) | トップページ