Liquid AI、d1-3BのMLX 4-bit版を2.37GBで公開

スペック

重みの公開MLX形式の4-bit量子化重み
配布形式・量子化4-bit言語モデル、vision tower・projector・normsはfloat16

メモリの目安はパラメータ数×0.6バイトの概算で、実際はコンテキスト長と実装で変わります

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です。

この記事の固有名詞

コメント (0)

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

コメントを書く

2000文字以内