所要時間: 約30分 | 難易度: ★★☆☆☆

この記事で作るもの

  • LiquidAIが公開した「LFM-1.7B」をローカル環境で動作させ、テキスト要約やコード生成を行うPythonスクリプト
  • 従来のTransformerモデルよりも省メモリで動作する特性を活かし、VRAMが少ない環境でも高速に推論するベース
  • 前提知識:Pythonの基本的な構文(pipでのライブラリ導入)がわかること
  • 必要なもの:Python 3.10以降の環境、インターネット接続

📦 この記事に関連する商品(楽天メインで価格確認)

RTX 4060 Ti 16GB

VRAM 16GBあればLFMを複数走らせても余裕があり、RAG検証に最適

楽天で価格を見る Amazonでも確認

※アフィリエイトリンクを含みます

先に確認するスペック・料金

LFM-1.7B(Liquid Foundation Models)の最大の特徴は、その圧倒的な軽さです。 1.7Bというパラメータサイズは、一般的なLlama-3-8Bなどの約4分の1以下であり、量子化(4-bitなど)を施せばVRAM 2GB以下の環境、つまり数年前のノートPCやスマホクラスのSoCでも動作します。

私がRTX 4090 2枚挿しのサーバーで検証したところ、メモリ消費は誤差レベルで、推論速度は100トークン/秒を軽く超えました。 一方で、このモデルの真価は「MacBook Air(M1/M2/M3)」などのユニファイドメモリ環境や、エッジデバイスで発揮されます。 API経由ではないため、モデル自体の使用料金は一切かかりませんし、商用利用についてもApache 2.0ライセンス(※モデルの種類によるため要確認だが、今回はHugging Face公開のオープン版を扱う)の範囲で柔軟に対応可能です。

GPUを持っていない場合でも、CPUのみで十分に実用速度が出るため、高価なハードウェアを買い足す前にまずこの記事の手順で手元のPCを動かしてみてください。

なぜこの方法を選ぶのか

現在、軽量モデルといえば「Gemma-2B」や「Qwen-2.5-1.5B」が主流ですが、あえてLiquidAIのLFMを選ぶ理由は「アーキテクチャの独自性」にあります。 LFMは従来のTransformerとは異なり、RNN(回帰型ニューラルネットワーク)のようなステートフルな性質をハイブリッドさせた「Liquid Neural Networks」の進化系です。

これにより、コンテキスト(入力文)が長くなっても計算量が爆発的に増えず、KVキャッシュによるメモリ圧迫が抑えられます。 「性能はLlama-3-8Bに匹敵しつつ、サイズは4分の1」という触れ込みは、実際に動かしてみるとあながち誇張ではないことがわかります。 特に日本語の論理性においても、このサイズ感としては驚くほど崩れにくいのが選定の決め手です。

Step 1: 環境を整える

まずはLFMを動かすためのライブラリをインストールします。 LiquidAIのモデルは最新のアーキテクチャを採用しているため、transformersライブラリは常に最新版を使用する必要があります。

# 仮想環境の作成(推奨)
python -m venv lfm-env
source lfm-env/bin/activate  # Windowsの場合は lfm-env\Scripts\activate

# 必須ライブラリのインストール
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install transformers accelerate sentencepiece

accelerateはモデルをGPUやCPUへ自動的に最適配置するために使用します。 sentencepieceはLFMのトークナイザーが依存しているため必須です。 Python 3.10以上が必要な理由は、型ヒントや最新のパッケージ依存関係を安全に保つためです。

⚠️ 落とし穴: transformersのバージョンが古いと、LFMのカスタムコード(modeling_lfm.py)が正常に読み込めずエラーになります。 必ず pip install -U transformers で最新状態にしてください。 また、このモデルはHugging Face上で「Remote Code」として実装されているため、スクリプト実行時に後述するフラグ設定を忘れると動作しません。

Step 2: 基本の設定

LFM-1.7Bを読み込み、推論するための初期設定を行います。 APIキーは不要ですが、Hugging Faceからモデルを初回ダウンロードする際に時間がかかる(約3.5GB程度)ので、安定した回線で行ってください。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

# モデルIDの指定
model_id = "LiquidAI/LFM-3B-1.7B"

# トークナイザーの読み込み
tokenizer = AutoTokenizer.from_pretrained(model_id)

# モデルの読み込み
# trust_remote_code=True が必須:Liquid独自のアーキテクチャを読み込むため
# device_map="auto":GPUがあれば優先的に割り当て、なければCPUへ
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    trust_remote_code=True,
    torch_dtype=torch.bfloat16,
    device_map="auto"
)

print(f"Model loaded on: {model.device}")

torch_dtype=torch.bfloat16を指定している理由は、RTX 30シリーズ以降や最新のCPUにおいて、メモリ消費を半分に抑えつつ精度を維持するためです。 古いGPU(GTX 10シリーズなど)を使っている場合は torch.float16 に変更してください。

trust_remote_code=True を設定する理由は、LFMが標準のTransformerライブラリに含まれていない独自の計算レイヤーを使用しているからです。 これを通さないと「モデルの構成が見つかりません」というエラーで止まります。

Step 3: 動かしてみる

最小構成で、LFMに短い質問を投げてみましょう。 ここではシンプルに「AIとは何か」を答えさせます。

# プロンプトの準備
prompt = "ユーザー: 人工知能(AI)について、3行で簡潔に説明してください。\nアシスタント: "

# トークナイズ
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

# 推論実行
with torch.no_grad():
    output_tokens = model.generate(
        **inputs,
        max_new_tokens=150,
        temperature=0.7,
        top_p=0.9,
        do_sample=True,
        pad_token_id=tokenizer.eos_token_id
    )

# デコード(テキスト化)
response = tokenizer.decode(output_tokens[0], skip_special_tokens=True)
print(response)

期待される出力

人工知能(AI)とは、人間の知的な機能をコンピュータで再現する技術です。
データの学習を通じてパターンを見つけ出し、自律的な判断や予測を行うことができます。
現代では業務効率化や自動運転、医療診断など幅広い分野で活用されています。

(※モデルの学習データにより多少の揺らぎはありますが、一貫性のある日本語が出力されます)

temperature=0.7 に設定しているのは、創造性と正確性のバランスを取るためです。 0.1に近づけると堅実(毎回同じ回答)になり、1.0に近づけると創造的(ランダム性が高い)になります。 実務的な要約やFAQ対応なら0.3〜0.5あたりが使いやすいでしょう。

Step 4: 実用レベルにする

単発の回答だけでなく、長い文書を読み込ませて特定の情報を抽出する「擬似RAG(検索拡張生成)」的な使い方へ拡張します。 LFMの「コンテキストが長くても重くなりにくい」という特性を活かし、ここでは数千文字の議事録(ダミー)から決定事項を抜き出す処理を実装します。

def extract_decisions(text):
    system_prompt = "あなたは優秀な秘書です。以下の議事録から【決定事項】のみを箇条書きで抽出してください。\n\n"
    user_input = f"議事録内容:\n{text}\n\n【決定事項】:"

    full_prompt = f"ユーザー: {system_prompt}{user_input}\nアシスタント: "

    inputs = tokenizer(full_prompt, return_tensors="pt").to(model.device)

    # 長文対応のため max_new_tokens を調整
    outputs = model.generate(
        **inputs,
        max_new_tokens=300,
        repetition_penalty=1.1 # 同じ言葉の繰り返しを防ぐ
    )

    return tokenizer.decode(outputs[0], skip_special_tokens=True).split("【決定事項】:")[-1]

# テスト用の長文
meeting_log = """
2023年10月のプロジェクト会議。
議題は新製品の発売日について。
A氏は12月1日を提案したが、B氏から開発遅延の懸念が出た。
議論の末、発売日は12月15日に決定。
また、プロモーション予算を20%増額することも承認された。
次回会議は来週月曜日の10時から行う。
"""

print("抽出結果:")
print(extract_decisions(meeting_log))

このスクリプトでは repetition_penalty=1.1 を導入しました。 軽量モデルは時として同じフレーズをループしてしまう弱点がありますが、このパラメータを入れることで出力の品質が劇的に安定します。 SIer時代の経験上、こうした小規模モデルを業務に組み込む際は、出力をパース(解析)しやすいように「【決定事項】:」といった目印をプロンプトに入れるのがコツです。

よくあるトラブルと解決法

エラー内容原因解決策
ValueError: Loading ... requires trust_remote_code=Trueセキュリティ保護のため外部コードの実行が制限されているfrom_pretrainedの引数に trust_remote_code=True を追加する
OutOfMemoryError (CUDA OOM)GPUのVRAMが不足しているtorch_dtype=torch.float16 を試すか、device_map="cpu" でCPU実行に切り替える
ImportError: cannot import name 'LFMForCausalLM'transformersライブラリが古いpip install -U transformers で最新版へ更新する
日本語が文字化けする/不自然トークナイザーの処理ミスtokenizer.decode 時の skip_special_tokens=True を確認し、プロンプトに「日本語で答えて」と明示する

次のステップ

LFM-1.7Bが手元で動くようになったら、次は「Web API化」や「ローカルRAG」への統合に挑戦してみてください。 特に llama-cpp-python を使ってGGUF形式のLFMを動かせば、メモリ消費をさらに数百MB単位まで削ることができ、Raspberry Piなどのシングルボードコンピュータでの動作も見えてきます。

また、LiquidAIのモデルは「長いシーケンス」に対する外挿性が高いため、10kトークンを超えるような大量のログ解析に投げ込んでみるのも面白いでしょう。 他のTransformerベースの2Bモデルと比較して、どの程度の長さまで論理が破綻しないかをベンチマークするのは、実務導入の際の強力な判断材料になります。

私自身、このモデルを自宅サーバーの監視ログ要約に使っていますが、RTX 4090を回すまでもなく、余っているCPUリソースだけで爆速で処理が終わる快感は代えがたいものがあります。 軽量モデルの使いこなしこそ、AIエンジニアの腕の見せ所です。

よくある質問

Q1: Llama-3-8Bと比較して、どちらを使うべきですか?

精度を最優先し、VRAMが8GB以上あるならLlama-3-8B(またはその派生)が安定しています。しかし、レスポンス速度、省電力、あるいは「スマホや低スペックPCで動かしたい」という制約があるなら、LFM-1.7Bが圧倒的に優位です。

Q2: 量子化(GGUF版)はどこで手に入りますか?

Hugging Faceのコミュニティ(Bartowski氏などの職人たち)がLFM-1.7BのGGUF版を既に公開しています。llama.cppで動かしたい場合は、それらのレポジトリからダウンロードして、今回のコードの読み込み部分を書き換えるだけで対応可能です。

Q3: 日本語の能力は実用レベルですか?

正直に言うと、GPT-4クラスの流暢さはありません。しかし、要約、翻訳、特定のフォーマットへの変換といった「タスク特化」の用途であれば、十分に実用レベルです。プロンプトを英語で与えて、回答だけ日本語で出力させると精度が向上する傾向があります。


あわせて読みたい