MacOS 27で導入されたlocal llm
MacOSの27で、system modelとCLIが導入されました.
以下で、pythonから、openai web api compatible mode (json mode)を利用もしてみます。
実行時、system monitorのGPU負荷率は上がっていないので、NPUを確かに利用しているようだ。
使い方
初回
sudo fm license
以後
% fm
Apple Foundation Models CLI
USAGE
% fm <command> [options]
COMMANDS
available Check model availability ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠞⠛⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
chat Start an interactive chat session ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣿⡀⠀⢀⣽⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
count-tokens Count tokens in a prompt or instructions ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⠴⠚⠋⢁⡼⠛⠛⠛⢧⡈⠙⠓⠦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀
license Show and agree to the Legal Notice & Terms ⢠⡶⠒⠲⣦⣠⡴⠞⠋⠉⠀⠀⠀⣴⠟⠀⠀⠀⠀⠀⠹⣆⠀⠀⠀⠈⠙⠲⠦⣄⣠⠖⠒⢦⡀
respond Generate a response to a prompt ⢿⡀⠀⠀⣸⣇⠀⠀⠀⠀⠀⣠⡾⠁⠀⠀⠀⠀⠀⠀⠀⠈⢳⡄⠀⠀⠀⠀⠀⣨⣇⠀⠀⢀⡿
schema Generate a structured output generation schema ⠈⠛⠲⠚⢿⡍⠙⠳⢦⣤⣴⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣦⣠⠴⠖⠋⢁⡽⠓⠒⠋⠁
serve Start a Chat Completions API server ⠀⠀⠀⠀⠀⠹⣦⡀⣠⠟⠉⠛⠲⢦⣄⣠⡴⠶⢦⣄⣠⡤⠖⠛⠉⠳⣄⠀⣴⠋⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢈⣿⣏⠀⠀⠀⠀⠀⢈⣿⠀⠀⠀⣿⡁⠀⠀⠀⠀⠀⣸⣿⡁⠀⠀⠀⠀⠀⠀
MODELS ⠀⠀⠀⠀⠀⣴⠟⠀⠙⣧⣀⣤⠶⠚⠋⠙⠳⠶⠞⠋⠙⠓⠦⣤⣀⡴⠋⠀⠹⣄⠀⠀⠀⠀⠀
system On-device Apple Foundation Model (default) ⢀⣤⠶⢦⣾⣃⣤⡴⠞⠋⠻⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠟⠙⠒⠦⣄⡈⣳⡤⠤⢤⡀
⣿⠁⠀⠀⢹⡏⠀⠀⠀⠀⠀⠙⢷⡀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠃⠀⠀⠀⠀⠀⢉⡏⠀⠀⠀⡷
EXAMPLES ⠘⠷⠦⠶⠟⠙⠳⢦⣤⣀⠀⠀⠀⠻⣦⠀⠀⠀⠀⠀⣴⠏⠀⠀⠀⣀⣠⠴⠒⠋⠙⠦⠤⠞⠁
% fm respond 'What is Swift?' ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠲⢦⣄⡈⢳⣤⠤⣤⡞⢁⣠⡤⠖⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀
% fm respond --stream 'Summarize this article' ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⣿⠁⠀⠈⣻⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
% fm chat --instructions 'You are a coding assistant' ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⣤⠴⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
% fm count-tokens 'Hello world'
% fm schema object --name Person --string name --int age
Run 'fm <command> --help' for more information on a command.
% fm available
System model available
fm chat
NPUを利用しているらしい
% fm chat
Apple Foundation Models Chat
model: system · /help for help
> このモデル、fmはNPUを利用していますか?GPUですか?
NPUの利用について
このモデルは、NPU(Neural Processing Unit)を利用しています。
• GPU(Graphics Processing Unit)とは異なり、NPUは機械学習モデルの高速処理に特化しています。
• このモデルは、Appleのハードウェア上でNPUを活用して動作しています。
詳細については、Appleの公式ドキュメントを参照してください。
> NPUとGPUの両方を利用していますか?それともNPUだけ?
NPUとGPUの利用状況
このモデルは、NPUのみを利用しています。
• GPUは主にグラフィック処理や大規模な計算に用いられます。
• このモデルは、NPUによって最適化されており、GPUは使用されていません。
ただし、ハードウェア環境によっては両方の技術が統合される場合もありますが、本モデルではNPUが中心です。
> token数はどれくらい大きくできますか?あと何Bのモデルですか?
モデルのスケールについて
このモデルのトークン数やパラメータ数については、具体的な数値が公開されていません。
• トークン数の限界は、モデルの設計や利用環境によって異なります。
• パラメータ数については、B(兆)という単位で表現されますが、実際の規模は非公開です。
詳細は、Appleの公式発表を参照してください。
> quit
終了
ご質問ありがとうございました。
このモデルはAppleが開発したものであり、**NPU**を活用して動作しています。
> exit
終了
ご支援ありがとうございました。
本モデルは機械学習のタスクに特化した設計です。
Resume conversation with: fm chat --resume model-npu
%
% fm count-tokens 'Hello world'
Token count: 3
% fm chat --resume model-npu
Apple Foundation Models Chat
model: system · /help for help
..snip..
> このチャットから抜け出す方法
終了方法
このチャットセッションは自動的に終了します。
• ユーザーがquitやexitと入力した場合、セッションは終了します。
• 外部からの強制終了はできません。
ご使用の環境で適切な終了手順を確認してください。
> さきほど、quitやexitと入力しても出られなかったので、CTRL+Cしたのですが、正しい終了方法を知りたい。
終了方法の確認
• CTRL+C(Windows/Linux)または Ctrl+C(macOS)は、ターミナルやコンソールでの終了に使われます。
• このチャットセッションは、通常の終了キー(Ctrl+Zなど)ではなく、自動終了を目的としています。
正しい終了方法:
- Ctrl+C でコンソールを終了してください。
- その後、別の方法で閉じる必要はありません。
問題が解決しない場合は、システムの環境設定を確認してください。
> exit
終了確認
ご指定のexitコマンドをもう一度試されました。
現在の環境では、自動終了が適用されているため、直接の退出が難しい場合があります。
推奨手順:
• CTRL+C を押してコンソールを終了。
• 別のウィンドウで終了を確認。
問題が解決しない場合は、システム環境のサポートをご確認ください。
> quit
終了試行の確認
• quitコマンドは、特定の環境(例えば、ターミナル)で有効な場合があります。
• 本チャットセッションは、自動的に終了する設計になっています。
現在の状況:
- Ctrl+C を使用することで、コンソールを終了できます。
- 別の方法で退出を試みても、本システムは閉じることを優先します。
ご希望の終了方法について、環境に応じたサポートをご案内します。
Resume conversation with: fm chat --resume model-npu
%
% fm chat --resume model-npu
Apple Foundation Models Chat
model: system · /help for help
> さきほど、quitやexitと入力しても出られなかったので、CTRL+Cしたのですが、正しい終了方法を知りたい。
終了方法の確認
• CTRL+C(Windows/Linux)または Ctrl+C(macOS)は、ターミナルやコンソールでの終了に使われます。
• このチャットセッションは、通常の終了キー(Ctrl+Zなど)ではなく、自動終了を目的としています。
正しい終了方法:
- Ctrl+C でコンソールを終了してください。
- その後、別の方法で閉じる必要はありません。
問題が解決しない場合は、システムの環境設定を確認してください。
> exit
終了確認
ご指定のexitコマンドをもう一度試されました。
現在の環境では、自動終了が適用されているため、直接の退出が難しい場合があります。
推奨手順:
• CTRL+C を押してコンソールを終了。
• 別のウィンドウで終了を確認。
問題が解決しない場合は、システム環境のサポートをご確認ください。
> quit
終了試行の確認
• quitコマンドは、特定の環境(例えば、ターミナル)で有効な場合があります。
• 本チャットセッションは、自動的に終了する設計になっています。
現在の状況:
- Ctrl+C を使用することで、コンソールを終了できます。
- 別の方法で退出を試みても、本システムは閉じることを優先します。
ご希望の終了方法について、環境に応じたサポートをご案内します。
────────────────────────────────────────────────────────────
appleのfmのsystem modelは、fmのこと、あまりわかっていないようだ。
/qや/quitや/exitで終了はできる
Web APIを有効にする
> fm serveをするとどう使うことができるの?
fm serveの利用方法
「fm serve」は、Appleが提供する機械学習モデルの実行環境です。
このツールは、NPUを活用してモデルをリアルタイムで実行するために使われます。
使い方について
• fm serve を使用することで、モデルをサーバーとして起動できます。
• 実行には、適切な環境設定とモデルファイルが必要です。
#### 必要な要素
─── text ───
- モデルファ .mlmodel)
- fm serve ツール(Appleの環境で利用可能)
- 適切なハードウェア(NPU対応デバイス)
──────
#### 基本的なコマンド例
─── bash ───
fm serve --model <モデルファイル>
──────
• このコマンドにより、モデルがHTTPエンドポイントとして公開されます。
• 外部からリクエストを送信して、推論結果を得ることができます。
利用例
• ユーザーがAPIを呼び出すことで、モデルの出力を取得できます。
- 例:curl https://localhost:9000/model
注意:
• セキュリティやアクセス制御は、システム設定で管理されます。
- 本モデルは、**Appleのセキュリティポリシー**に従って動作します。
> web apiはopen ai compatible?
Web APIの互換性について
• Web APIがOpenAIの互換性を持つかどうかは、モデルの設計やAPI仕様によって異なります。
• 本モデルのWeb APIは、OpenAIの仕様に完全に対応しているわけではありません。
互換性のポイント
• OpenAIのAPIは、JSON形式やエンドポイント構造が統一されています。
-
本モデルのAPIも**JSON**で通信を行い、**基本的な構造**は類似していますが、**機能**(例:特定のタスクの処理)が限定的です。
#### 注意点
• 機能の制限:
- OpenAIのような大規模モデルとは、タスクの範囲が異なります。
- 推論の精度や応答速度も異なります。
• 利用方法:
- fm serve で公開されたAPIは、Appleの環境で利用可能です。
- OpenAIのAPIと直接連携させることはできません。
詳細な仕様は、Appleの公式ドキュメントをご確認ください。
> fm serveのAPI仕様詳細を教えて
fm serveのAPI仕様詳細
• fm serve で公開されるAPIは、Appleが提供する軽量な機械学習モデルのインタフェースです。
• 以下の仕様が適用されます。
1. APIエンドポイント
• デフォルトエンドポイント:http://localhost:9000/model
• 形式:JSON
─── json ───
{
"input": "入力テキスト",
"output": "モデルの出力結果"
}
──────
2. リクエストの構造
─── bash ───
curl -X POST http://localhost:9000/model \
-H "Content-Type: application/json" \
-d '{
"input": "こんにちは、NPUを使ったモデルのテストです。"
}'
──────
3. レスポンスの構造
• 成功時:{"result": "..."} など、モデルの出力が返されます。
• エラー時:{"error": "..."} が返されます。
4. 制限事項
• 使用環境:Appleデバイス(iPhone、Macなど)でのみ利用可能。
• ハードウェア要件:NPUの利用が必須です。
• セキュリティ:認証情報はシステム設定で管理されます。
> 注意:
> この仕様はAppleの内部仕様に基づいています。外部での詳細な公開は行われていません。
詳細な仕様は、Appleの公式ドキュメントをご確認ください。
Resume conversation with: fm chat --resume model-npu
% fm serve
Apple Foundation Models Serve
url http://127.0.0.1:1976
access loopback-only
· POST /v1/chat/completions
· GET /v1/models
· GET /health
· listening on http://127.0.0.1:1976 (press Ctrl+C to stop)
14:36:35 · [POST] · /model · 404
14:37:16 · [POST] · /completions · 404
14:37:35 · [GET] · /completions · 404
14:38:47 · [POST] · /v1/chat/completions · system
14:38:48 · [POST] · /v1/chat/completions · 200 · system · 65→25 tokens · 922ms
web apiもちょっと間違ってる。。。default streaming mode onで帰ってくるようだ。
OpenAI compatible/ollamaっぽく扱う
echo "hello" | python3 multi_gpt_client.py -g openaicompatible -e "http://127.0.0.1:1976/v1/chat/completions" -H "Content-Type: application/json"
hello
Hello! How can I help you today?
chat /help
╭─ Help ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── esc to exit ─╮
│ │
│ COMMANDS │
│ /help Show this help │
│ /quit Exit │
│ /clear New session │
│ /save [name] Save session │
│ /resume <name> Resume session │
│ /sessions List sessions │
│ /model <type> Switch model (system) │
│ /instructions [text] Set or edit instructions │
│ /tools [add|remove <name>] List, add, or remove built-in tools (barcode, ocr) │
│ /appearance [mode] Set appearance (dark, light, auto) │
│ │
│ MODELS │
│ system On-device Apple Foundation Model (default) │
│ │
│ SHORTCUTS │
│ Ctrl+C exit │
│ ↑/↓ browse history │
│ \ + Enter continue on next line │
│ Ctrl+W delete word │
│ Ctrl+U clear line before │
│ Ctrl+K clear line after │
│ │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
system · in help · esc to exit