Closed10

軽量・高速なオンデバイス向けモデル「LFM2」を試す

kun432kun432

モデルはこちら。350M、700M、1.2Bの3種類がある。

https://huggingface.co/LiquidAI/LFM2-350M

https://huggingface.co/LiquidAI/LFM2-700M

https://huggingface.co/LiquidAI/LFM2-1.2B

1.2Bのモデルカードから概要を翻訳

LFM2-1.2B

LFM2 は、Liquid AI が開発したエッジ AI およびデバイス上での展開用に特別に設計された新世代のハイブリッドモデルです。品質、速度、メモリ効率の面で新たな基準を打ち立てています。

350M、700M、1.2B パラメータの 3 つのポストトレーニング済みチェックポイントのウェイトを公開しています。これらのモデルは、AI 搭載のエッジアプリケーションを作成するための以下の主要機能を提供します。

  • 高速なトレーニングと推論 – LFM2 は、前世代に比べて 3 倍のトレーニング速度を実現しています。また、Qwen3 と比べて CPU でのデコードおよびプリフィル速度が 2 倍高速化されています。
  • 最高のパフォーマンス – LFM2 は、知識、数学、指示の順守、多言語機能など、複数のベンチマークカテゴリにおいて、同サイズのモデルを凌ぐパフォーマンスを発揮します。
  • 新しいアーキテクチャ – LFM2は、乗算ゲートと短い畳み込みを組み合わせた新しいハイブリッドLiquidモデルです。
  • 柔軟なデプロイ – LFM2は、CPU、GPU、NPUハードウェア上で効率的に動作し、スマートフォン、ノートPC、車両などへの柔軟な展開が可能です。

LFM2に関する詳細情報は、当社のブログ記事をご覧ください。

ファインチューニングが推奨されており、また、ファインチューニング用のnotebookも公開されている

LFM2 モデルはサイズが小さいため、パフォーマンスを最大化するには、特定のユースケースに合わせた微調整を行うことをお勧めします。このモデルは、エージェントタスク、データ抽出、RAG、クリエイティブライティング、マルチターン会話に特に適しています。ただし、知識集約型タスクやプログラミングスキルが必要なタスクには使用しないことをお勧めします。

日本語に対応している

対応言語: 英語、アラビア語、中国語、フランス語、ドイツ語、日本語、韓国語、スペイン語。

事前トレーニング用混合データ: ウェブおよびライセンス取得済みの資料から取得した、英語約 75%、多言語約 20%、コードデータ約 5% のデータ。

チャットテンプレートを見るとTool Useにも対応している。

ツールの使用: 4つの主なステップで構成されています。

  1. 関数定義: LFM2 は JSON 形式の関数定義(<|tool_list_start|><|tool_list_end|> の特殊トークンで囲まれた JSON オブジェクト)を入力として受け取ります。通常はシステムプロンプトで指定されます。
  2. 関数呼び出し: LFM2 は Python 形式の関数呼び出し(<|tool_call_start|><|tool_call_end|> の特殊トークンで囲まれた Python リスト)をアシスタントの回答として出力します。
  3. 関数実行: 関数呼び出しが実行され、結果が返されます(<|tool_response_start|><|tool_response_end|> の特殊トークンで囲まれた文字列)。これは「ツール」ロールとして返されます。
  4. 最終回答: LFM2 は関数呼び出しの結果を解釈し、元のユーザープロンプトに対して平文で回答します。

公式ブログ

https://www.liquid.ai/blog/liquid-foundation-models-v2-our-second-series-of-generative-ai-models

ライセンスは独自の「LFM Open License v1.0」というものになっている。

https://huggingface.co/LiquidAI/LFM2-1.2B/blob/main/LICENSE

商用利用に制限(年間売上1,000万ドル以上。研究・非営利は除く。)がある、元の著作権表示は保持、改変時は改変箇所を記載、ぐらいで、独自ライセンスだけど結構緩めな印象。なお、使用時は原文の確認を推奨。

kun432kun432

Colabratoryで1.2Bを試す。Flash Attentionに対応しているようなので、ランタイムはL4で。

現時点ではTransformers(4.54.0.dev0)をレポジトリからインストールする必要がある。

!pip install "transformers @ git+https://github.com/huggingface/transformers.git@main"
出力
Successfully installed transformers-4.54.0.dev0

Flash Attentionをインストール。どうも最新版で事前ビルド済みwheelを使うとモデルロード時にエラーになる。この辺かな。少しバージョンを下げている。

!pip install "flash-attn==2.7.4.post1" --no-build-isolation

モデルとトークナイザーのロード

from transformers import AutoModelForCausalLM, AutoTokenizer

# モデルとトークナイザーのロード
model_id = "LiquidAI/LFM2-1.2B"
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="auto",
    torch_dtype="bfloat16",
    trust_remote_code=True,
    # Flash Attentionが利用可能な場合
    attn_implementation="flash_attention_2"
)
tokenizer = AutoTokenizer.from_pretrained(model_id)

VRAMは2.5GB程度と流石に軽量。

出力
Fri Jul 11 05:35:48 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L4                      Off |   00000000:00:03.0 Off |                    0 |
| N/A   54C    P0             30W /   72W |    2423MiB /  23034MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

ではモデルカード通りに推論。プロンプトだけ日本語にした。

# Generate answer
prompt = "C. elegans とは何ですか?"
input_ids = tokenizer.apply_chat_template(
    [{"role": "user", "content": prompt}],
    add_generation_prompt=True,
    return_tensors="pt",
    tokenize=True,
).to(model.device)

output = model.generate(
    input_ids,
    do_sample=True,
    # temperature、min_p、repetition_penalty は公式の推奨値
    temperature=0.3,
    min_p=0.15,
    repetition_penalty=1.05,
    max_new_tokens=1024,
)

print(tokenizer.decode(output[0], skip_special_tokens=False))
出力
<|startoftext|><|im_start|>user
C. elegans とは何ですか?<|im_end|>
<|im_start|>assistant
C. elegansは、線虫の一種で、科学研究において特に遺伝学や発生生物学の分野で広く利用されています。以下にその特徴をまとめます。

### 分類
- ** kingdom**: Animalia(動物界)
- **phylum**: Annelida(環腸動物門)
- **class**: Nematomorpha(一部の環腸動物はこのクラスに属するが、C. elegansはこの分類群に含まれるわけではない)
- **order**: Caenorhabditis(カエノラビティス目)
- **family**: Caenorhabditis (C. elegans科)
- **genus**: C. elegans(エレガンス属)

### 特徴
- **サイズ**: 約0.5mm程度の非常に小さな線虫。
- **寿命**: 約2〜3週間で繁殖が完了する。
- **透明性**: 体内が透明であるため、顕微鏡下での観察が容易。
- **神経系**: 神経細胞が約302個あり、人間の神経細胞の約70%を占める。
- **遺伝子数**: 約19,000個の遺伝子を持つ。

### 研究価値
- **モデル生物**: 遺伝子機能や発生過程の研究に広く用いられており、ヒトの病気の理解や治療法開発に役立っています。
- **遺伝子操作**: 遺伝子を簡単に操作できるため、特定の遺伝子の機能を調べるのに適しています。
- **寿命と繁殖の短さ**: 短命で大量に繁殖できるため、実験条件の設定やデータ収集が効率的です。

### 応用
- **神経科学**: 神経回路の機能や老化に関する研究。
- **老化研究**: 長寿のメカニズムの解明。
- **薬剤開発**: 新薬の効果や安全性を評価するためのモデルとして利用。

C. elegansは、そのシンプルでありながら複雑な生物学的プロセスを解明する上で非常に有用なモデル生物として、科学研究において重要な位置を占めています。<|im_end|>

まどマギプロンプト

(snip)
prompt = "魔法少女まどか☆マギカでは誰が一番かわいい?"
(snip)
出力
<|startoftext|><|im_start|>user
魔法少女まどか☆マギカでは誰が一番かわいい?<|im_end|>
<|im_start|>assistant
魔法少女まどか☆マギカでは、キャラクターの美しさは主観的な評価であり、誰が一番かわいいかは意見が分かれるところです。しかし、一般的に人気のあるキャラクターの中で「一番かわいい」とされるのは、

* **マギカ**: 彼女の青い瞳や、どこか憂鬱ながらも強く魅力的な雰囲気、そして時折見せる優しい一面が人気を集めています。
* **ミカ**: 彼女の明るく元気な性格と、優しい笑顔が可愛らしく描かれています。特に、彼女の瞳の表現が印象的です。
* **リュウカ**: 彼の温かい性格と、少し弱々しいながらも愛らしい外見が魅力的です。

ただし、これらの評価はあくまで一例であり、他のキャラクターもそれぞれ独自の魅力を持っています。最終的には、個人の好みによって「一番かわいい」と感じる人は異なります。<|im_end|>

日本の知識はそれほどないみたいだけど、日本語としては自然で違和感もなく、普通に使えるね。

kun432kun432

350Mと700Mでも試してみた。nvidia-smiの結果とまどマギプロンプトの出力だけ。

350M

出力
Fri Jul 11 05:59:18 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L4                      Off |   00000000:00:03.0 Off |                    0 |
| N/A   73C    P0             36W /   72W |     879MiB /  23034MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
出力
<|startoftext|><|im_start|>user
魔法少女まどか☆マギカでは誰が一番かわいい?<|im_end|>
<|im_start|>assistant
魔法少女まどか☆マギカの登場人物の中で、誰が一番かわいいとされるのは、主人公の天野 沙織です。彼女は優雅で心地よい笑顔で、どこか懐かしいような魅力を持っており、多くのファンから愛されている存在となっています。特に、彼女の「Sakuraの夢」や「花束の話」といったシーンは、彼女の魅力を高めています。<|im_end|>

700M

出力
Fri Jul 11 06:00:25 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L4                      Off |   00000000:00:03.0 Off |                    0 |
| N/A   73C    P0             35W /   72W |    1607MiB /  23034MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
出力
<|startoftext|><|im_start|>user
魔法少女まどか☆マギカでは誰が一番かわいい?<|im_end|>
<|im_start|>assistant
魔法少女まどか☆マギカのキャラクターの中で、特に「一部の人々」からは、主に以下のキャラクターが可愛さで評価されています:

1. **まどか** - 彼女の優しさと明るさ、そして彼女のキャラクターが人気を集めるのはその一因です。

2. **リリィ** - リリィの明るく陽気な性格と、彼女の美しい外見が可愛さの象徴の一つとなっています。

3. **ユウキ** - 彼の優しさと優雅な振る舞いが、多くの人々から愛されているようです。

4. **ミルティア** - ミルティアの優しさと優雅さ、そして彼女のキャラクターが人気を集めるのは、その魅力的な外見と内面の美しさによるものと考えられます。

5. **ナオコ** - 彼女の優しさと優雅さ、そして彼女のキャラクターが人気を集めるのは、その魅力的な外見と内面の美しさによるものと考えられます。

これらのキャラクターは、単に外見だけでなく、性格や行動によっても評価されており、多くのファンがそれぞれの理由で可愛さを感じています。個人の好みは様々ですが、上記のキャラクターたちが特に可愛いとされる理由の一部と言えるでしょう。<|im_end|>
kun432kun432

まとめ

これぐらいの軽量さで日本語がそれなりに使えるなら、合いそうなユースケースがありそう。今回試してないけど、Tool Useが使えるのも良さそう。モデルカードにある通り、ファインチューニングして使うのがいいんだろうね、そのあたりのnotebookが用意されているというのも好印象。

kun432kun432

せっかくの軽量モデルなので、非力なデバイスでどこまで動かせそうか試してみる。今回はRaspberry Pi 4B + Ubuntu-22.04で。

llama.cppのビルド。ビルドに必要なパッケージはすでに揃っているものとする。なお、ビルドには結構な時間がかかるので気長に待つ。

git clone https://github.com/ggerganov/llama.cpp && cd llama.cpp
cmake -B build
cmake --build build --config Release

では推論。まどマギプロンプトで。モデル指定でHuggingFaceのレポジトリを直接指定する場合は量子化はQ4_K_Mになる。

350M

./build/bin/llama-cli \
    -hf LiquidAI/LFM2-350M-GGUF \
    -st \
    -p "魔法少女まどか☆マギカでは誰が一番かわいい?"
出力
user
魔法少女まどか☆マギカでは誰が一番かわいい?
assistant
魔女少女まどか☆マギカでは、いくつか誰かが一番かわいいと評判ですが、特に「キモテカリヨンのカッコワラちゃん」や「ミキちゃん」といったキャラクターからは、多くの人から好まれ、評価が高まるです。どちらの選択肢も、少女の性格や魅力に良い点があれば、素晴らしい選択です!どのキャラクターが一番かわいいかは、個人差があります。 [end of text]


llama_perf_sampler_print:    sampling time =      26.02 ms /   129 runs   (    0.20 ms per token,  4957.92 tokens per second)
llama_perf_context_print:        load time =     680.43 ms
llama_perf_context_print: prompt eval time =     665.31 ms /    26 tokens (   25.59 ms per token,    39.08 tokens per second)
llama_perf_context_print:        eval time =    8279.92 ms /   102 runs   (   81.18 ms per token,    12.32 tokens per second)
llama_perf_context_print:       total time =    9018.26 ms /   128 tokens

700M

./build/bin/llama-cli \
    -hf LiquidAI/LFM2-700M-GGUF \
    -st \
    -p "魔法少女まどか☆マギカでは誰が一番かわいい?"
出力
user
魔法少女まどか☆マギカでは誰が一番かわいい?
assistant
魔法少女まどか☆マギカにおいて、「一番かわいい」というのも主観的な要素で、個々の好みによって変わります。しかし、いくつか人気の声を集めるのは以下のキャラクターです:

1. **まどか(マドカ)**: 彼女の心の優しさや優雅な様子が、多くの人から可愛がられています。彼女の存在感が強く、ストーリーやアニメを楽しむ人によく響きます。

2. **リリィ**: 彼女の美しい外見や優しさ、そして彼女が持つ力に惹かれる人が多いです。特に、彼女の恋愛に対する繊細さが評価されています。

3. **エレナ**: 彼女の個性的な見た目と、優しい性格が評価されています。また、エレナの「魔法の絆」によって、他のキャラクターとの絆が深まり、その結果、可愛がられることもあります。

これらの点を総合すると、「一番かわいい」と判断されるのは、まどかとリリィが比較的人気があるでしょう。しかし、個人の好みによっても異なることに覚えておきましょう。すべてのキャラクターを愛することは難しいでしょう! [end of text]


llama_perf_sampler_print:    sampling time =      69.32 ms /   300 runs   (    0.23 ms per token,  4327.88 tokens per second)
llama_perf_context_print:        load time =     825.89 ms
llama_perf_context_print: prompt eval time =    1452.06 ms /    26 tokens (   55.85 ms per token,    17.91 tokens per second)
llama_perf_context_print:        eval time =   41599.24 ms /   273 runs   (  152.38 ms per token,     6.56 tokens per second)
llama_perf_context_print:       total time =   43227.28 ms /   299 tokens

1.2B

./build/bin/llama-cli \
    -hf LiquidAI/LFM2-1.2B-GGUF \
    -st \
    -p "魔法少女まどか☆マギカでは誰が一番かわいい?"
出力
user
魔法少女まどか☆マギカでは誰が一番かわいい?
assistant
魔法少女まどか☆マギカでは、誰が一番かわいいかという話は、主観的な意見が分かれることが多いです。登場人物の中でも特に「かわいい」と言われるのは、いくつかいますが、人気のあるキャラクターをいくつか挙げます。

1. **中瀬みどり**: 彼女の可愛らしさは、彼女の純粋さや優しい性格から来ていると言えるでしょう。ただし、魔法少女のデザイン自体が「可愛い」と捉えられることも多いです。
2. **神崎ちはや**: 彼女のエレガントな雰囲気や、優しい眼差しが多くのファンから愛されていると言えます。
3. **マギカ**: 主人公でありながら、彼女の美しさも非常に評価されています。特に、彼女の瞳や肌の輝きが特徴的です。
4. **白石りん**: 彼女の明るい性格や、ユーモラスな一面が、彼女を特別で「かわいい」と感じる人々を引き付ける要因となっています。
5. **リンユ**: 彼女の力強さと、どこか憂いを帯びた美しさが、彼女を魅力的にしています。

ただし、魔法少女シリーズは「かわいい」という特徴が固定されているわけではなく、キャラクターの個性やストーリー展開によって評価は変化します。また、キャラクターの年齢や外見だけでなく、個性や成長、人間味も「かわいい」と感じられる要素となることが多いです。

最終的には、どのキャラクターが一番かわいいかは、視聴者の好みによって大きく異なります。上記のリストはあくまで一例であり、魔法少女まどか☆マギカを愛する人々にとっては、誰もが自分にとって特別なキャラクターを「かわいい」と思っているでしょう。 [end of text]


llama_perf_sampler_print:    sampling time =     108.14 ms /   452 runs   (    0.24 ms per token,  4179.65 tokens per second)
llama_perf_context_print:        load time =     912.39 ms
llama_perf_context_print: prompt eval time =    2289.59 ms /    26 tokens (   88.06 ms per token,    11.36 tokens per second)
llama_perf_context_print:        eval time =   97707.80 ms /   425 runs   (  229.90 ms per token,     4.35 tokens per second)
llama_perf_context_print:       total time =  100296.04 ms /   451 tokens

350Mだと10TPS以上出るので悪くない。

kun432kun432

比較用に、同じぐらいのサイズで日本語特化モデルであるsarashina-2.2での結果。以下を使用させていただいた。

https://huggingface.co/mmnga/sarashina2.2-0.5b-instruct-v0.1-gguf

https://huggingface.co/mmnga/sarashina2.2-1b-instruct-v0.1-gguf

0.5B

./build/bin/llama-cli \
    -hf mmnga/sarashina2.2-0.5b-instruct-v0.1-gguf \
    -st \
    -p "魔法少女まどか☆マギカでは誰が一番かわいい?"
出力
魔法少女まどか☆マギカでは誰が一番かわいい?魔法少女まどか☆マギカ(まどまぎ)という作品において、誰が一番かわいいかについては、議論や解釈が様々あります。しかし、一般的には主人公の鹿目タzuma(かめたたずま)と巴マギア(とま�)が特に人気があり、かわいいと評価されることが多いです。

鹿目タzumaは、明るく元気な性格と、明るく前向きな性格が魅力的です。また、巴マギアは彼女の純粋さと優しさが伝わり、特に第6話「夜の物語」で示す共感や癒しの強さが多くの視聴者に印象を与えました。

さらに、QB(Quidditch Team)のキュゥべえや、他のキャラクターもそれぞれに魅力があり、作品全体のストーリーやキャラクターの成長を通じて、誰が一番かわいいかというのは一概には言えません。いずれにせよ、作品内のキャラクターたちはそれぞれに深い魅力を持っており、それは視聴者によって異なるでしょう。 [end of text]


llama_perf_sampler_print:    sampling time =      61.97 ms /   181 runs   (    0.34 ms per token,  2920.63 tokens per second)
llama_perf_context_print:        load time =    1361.93 ms
llama_perf_context_print: prompt eval time =     561.28 ms /    11 tokens (   51.03 ms per token,    19.60 tokens per second)
llama_perf_context_print:        eval time =   26454.13 ms /   169 runs   (  156.53 ms per token,     6.39 tokens per second)
llama_perf_context_print:       total time =   27230.79 ms /   180 tokens

1B

./build/bin/llama-cli \
    -hf mmnga/sarashina2.2-1b-instruct-v0.1-gguf \
    -st \
    -p "魔法少女まどか☆マギカでは誰が一番かわいい?"
出力
魔法少女まどか☆マギカでは誰が一番かわいい?魔法少女まどか☆マギカには様々なキャラクターが登場し、それぞれに魅力があります。しかし、質問の意図がキャラクターのビジュアル面での評価にあるとすれば、一般的に人気と評価されるキャラクターは複数存在します。例えば、主人公の鹿目ータ(カナメモ)は明るく元気な性格と可愛い見た目で人気がありますし、QB(キュゥべえ)はユーモラスでユニークなキャラクター性と魅力的な見た目で注目されています。最終的には個人の好みによりますが、これらのキャラクターはどれも可愛らしく、魅力的な存在であると言えるでしょう。 [end of text]


llama_perf_sampler_print:    sampling time =      32.45 ms /   100 runs   (    0.32 ms per token,  3081.95 tokens per second)
llama_perf_context_print:        load time =    1768.63 ms
llama_perf_context_print: prompt eval time =    1039.81 ms /    11 tokens (   94.53 ms per token,    10.58 tokens per second)
llama_perf_context_print:        eval time =   23960.26 ms /    88 runs   (  272.28 ms per token,     3.67 tokens per second)
llama_perf_context_print:       total time =   25137.40 ms /    99 tokens
kun432kun432

TPS見る限りはLFM2のほうが効率が良い感じに見える。

日本の知識についてはsarashina-2.2のほうが多少なりとも多そうなんだけど、こちらは出力がちょいちょい英語交じりになったりするのが気になる。なお、sarashina-2.2を以前試した際は3Bあたりからペルソナ的プロンプトが効き始める、つまり指示追従性が多少なりとも上がる感があるので、1B前後、それ以下で、知識やあまり難しいこと求めるのも・・・という気がする。

いずれにせよこれぐらいの超軽量モデルはうまい使い方を考える必要はありそう。

なお、RPi 4BのCPUは4コアなのだけど、350Mでも推論中は全コア100%に振り切れてる。以下推論中のhtopの出力。

このスクラップは2ヶ月前にクローズされました