Liquid AIは、decision model「d1-3B」をApple Silicon向けに4-bit量子化したMLX形式のLiquidAI/d1-3B-MLX-4bit(2.37 GB)をHugging Faceで公開しました。float32実行との比較では、145回答中142件で最上位回答が一致しています。
Liquid AIはMITの計算機科学・人工知能研究所から生まれた基盤モデル企業で、MLXはAppleの機械学習研究チームが開発するAppleシリコン向けの配列計算フレームワークです。
d1-3Bの仕組みと4-bit版の構成
d1-3Bは、テキスト・JSON・画像の「state」に対して、名前付き・型付きの質問へ1回のフォワードパスで回答します。生成トークンはなく、各呼び出しは{"answers": {name: answer}, "usage": {"input_tokens": n, "output_tokens": 0}}を返します。質問の型は次の3種類です。
choice: 選んだラベルをvalueに返し、probabilitiesとmetadata.confidenceを付けますscore: 期待レベルをvalueに返し、probabilitiesとレベルのlegendを付けますnoul(またはbool): yesの確率をprobabilityで返します
4-bit版は言語モデル部分を4-bitにし、vision tower・projector・normsはfloat16のまま残しています。vision towerとprojectorはどの版でも量子化していません。
精度別の比較
Liquid AIは、mlx-vlmでfloat32実行した元チェックポイント(PyTorch参照と確率で約1e-5の一致)を基準に、テキスト104件・画像41件の回答で各版を比較しました。Δpは任意の選択肢の確率の最大変化です。
| リポジトリ | 重み | サイズ | 同一トップ回答 | Max Δp | Mean Δp |
|---|---|---|---|---|---|
d1-3B-MLX-fp16 |
float16 | 6.25 GB | 145/145 | 0.005 | 0.0006 |
d1-3B-MLX-8bit |
8-bit LM、他はfloat16 | 3.72 GB | 144/145 | 0.015 | 0.0020 |
d1-3B-MLX-4bit |
4-bit LM、他はfloat16 | 2.37 GB | 142/145 | 0.212 | 0.0276 |
Liquid AIはfloat16を推奨精度としています。チェックポイントはbfloat16で保存されていますが、float16では最小の約0.1%を除く重みが正確に表現でき、オーバーフローもなく、Apple GPU上で同じ速度でより高い精度で計算できるため、bfloat16版は用意していません。量子化版の非量子化部分をfloat16にしたことで、8-bit版のずれはbfloat16比で半分以下になったと説明しています。4-bit版は確率が最大約0.2動くため、キャリブレーションよりメモリを優先する場合に限って使うよう勧めています。変化したトップ回答はいずれも、float32での次点が0.1以内の僅差でした。この検証はfloat32との一致を見るスモークテストで、精度ベンチマークではありません。
試し方
mlx-vlmのd1対応は0.7.6以降で利用できます。次のリリースまではGitHubからインストールします。
pip install -U git+https://github.com/Blaizzy/mlx-vlm.git
Pythonではfrom mlx_vlm import load, predictの後、load("LiquidAI/d1-3B-MLX-4bit")でモデルとプロセッサを読み込み、predict(model, processor, state, questions)を呼びます。画像のみを状態にする場合はstateをNoneにし、images=[...]を渡します。
コマンドラインでは次のように実行します。--stateは省略でき、--imageを1つ以上指定できます。
python -m mlx_vlm decide --model LiquidAI/d1-3B-MLX-4bit \
--state "I was charged twice this month, please refund one of them." \
--questions '{"refund": {"type": "noul", "instructions": "Is the customer asking for a refund?"}}'
サーバーとしてはpython -m mlx_vlm server --decision-model LiquidAI/d1-3B-MLX-4bitで起動し、http://127.0.0.1:8080/v1/decisionsへ同じ形のJSONを送ります。"images"にはURL、パス、base64データURIを指定できます。
変換レシピ
Liquid AIは、d1-3Bのリビジョン051bcc464b01を、mlx-vlmのコミット952d4f6bc65bで次のコマンドにより変換しました。
python -m mlx_vlm convert --hf-path LiquidAI/d1-3B --mlx-path d1-3B-MLX-4bit -q --q-bits 4 --q-group-size 64 --dtype float16
変換後に上流のPyTorch .pyファイルは削除していますが、config.jsonにはauto_mapエントリを残しており、mlx-vlmはこれを使ってd1を選択します。ライセンスはotherです。

まだコメントはありません。