CoolFace
Modelpublic

tokimoa/plamo-2.1-8b-vl-mlx-8bit

sourceHugging Faceotherupdated 2mo agoView on Hugging Face
0likes63downloads
Model Card

PLaMo 2.1-8B-VL (MLX 8bit, verified) — Built with PLaMo

Preferred Networksの PLaMo 2.1-8B-VL(Mamba×Attentionハイブリッドplamo2 LM+SigLIP so400mの日英VLM)をMLX 8bit(group size 64、実効8.83bpw)に量子化したものです。

当方で移植したMLX実装はmlx-vlm本体にマージ済み(0.6.8で標準対応)です(plamo2vl/ディレクトリ)。mlx-vlm 0.6.8以降ではそのまま使えます。

3版のうち品質・速度バランスの良いこの8bit版を推奨します。写真説明の検証プローブでbf16版・transformers公式実装と出力完全一致、約30 tok/s・ピークメモリ13.8GBで16GBメモリのMacで動きます。

このrepoは上流のtrustremotecodeをtransformers 5対応に再構成済みです(上流はtransformers<5専用。standalone configへの差し替え・torch用modelingの除去)。mlx-vlm 0.6.7(transformers 5系)でそのまま動きます。

導入手順

mlx-vlm 0.6.8以降なら追加手順は不要です(この移植実装は#1739で本体にマージされ、0.6.8に収録されました。0.6.8での動作を実測確認済み):

bash
pip install mlx-vlm numba torch torchvision

<details><summary>0.6.7以前を使う場合(旧手順)</summary>

repo同梱のplamo2vl/をmlx_vlm/models/へコピーしてください(詳細は旧版カード参照)。

</details>

使い方

このモデルはチャットテンプレートではなく、processorが日本語Alpaca型(### 指示:/### 応答:)のプロンプトを内部で組み立てます。processor(images=画像, text=質問)だけで正しい形式になります。

python
import mlx.core as mx
import torch
from PIL import Image
from transformers import AutoProcessor
from mlx_vlm import load

repo = "tokimoa/plamo-2.1-8b-vl-mlx-8bit"
model, _ = load(repo, trust_remote_code=True)
processor = AutoProcessor.from_pretrained(repo, trust_remote_code=True)

inputs = processor(images=Image.open("photo.png"), text="この画像に写っているものを説明してください。")
input_ids = mx.array(inputs["input_ids"].numpy())
pixel_values = mx.array(inputs["pixel_values"].to(dtype=torch.float32).numpy())

cache = model.make_cache()
logits = model(input_ids, pixel_values, mask=None, cache=cache).logits
y = mx.argmax(logits[:, -1, :], axis=-1)
tokens = []
for _ in range(256):
    t = int(y[0])
    tokens.append(t)
    if t == 1:  # <|plamo:eos|>
        break
    logits = model(y[None], None, mask=None, cache=cache).logits
    y = mx.argmax(logits[:, -1, :], axis=-1)
print(processor.tokenizer.decode(tokens, skip_special_tokens=True))

変換品質の検証(tokimoa)

同梱のMLX実装は、bf16変換版でtransformers公式実装(bf16・MPS)との突き合わせ検証を実施済みです:

  • —同一入力でのprefillロジット比較: 6プロンプト全てでtop-1トークン一致(cos類似度0.9986〜0.9996・top-10重複9〜10/10)
  • —写真説明プローブで参照実装とgreedy出力が文字列レベルで完全一致(「果物市場の画像」)

この8bit版の検証:

  • —写真説明プローブでbf16版と出力完全一致
  • —日本語ビジネス文書QA 6問でbf16版と4/6一致(モデルが不確信な領域でのbf16数値ゆらぎと同水準=量子化起因の劣化は観測されず)
  • —同一入力の反復で出力完全一致(決定論的)

用途上の注意: 2Bより文書読解は改善していますが(請求書の合計金額は正答)、高密度文書の細かい数値読み取りにはまだ不確実さがあります(transformers公式実装でも同傾向=変換起因ではありません)。確実な文書読解が必要な場合は llm-jp-4-vl-9b-beta MLX や Stockmark-DocReasoner MLX を推奨します。

実測速度(M4 Max 36GB)

  • —生成: 約30 tok/s / プロンプト処理: 約500 tok/s(画像2,187トークン=Eagle2タイリング3枚・384px)
  • —ピークメモリ: 13.8GB(重み9.8GB)

変換情報

  • —変換元: pfnet/plamo-2.1-8b-vl(公式BF16、commit 5823e34)
  • —MLX実装: mlx-vlm 0.6.7の部品+mlx-lmのplamo2実装をベースに移植したplamo2vlパッケージ(このrepoに同梱。RoPE base=1e6のplamo-2.1系対応を含む)
  • —量子化: mlx-vlm 0.6.7 convert -q --q-bits 8(group size 64 affine、実効8.83bpw)
  • —兄弟repo: bf16(参照一致検証の基準・18GB)/ 4bit(5.6GB・約49 tok/s。不確信領域での出力ブレは8bitより大きめ)/ 2B版: plamo-2.1-2b-vl-mlx-8bit
  • —変換者: tokimoa

ライセンス

PLaMoコミュニティライセンス(全文を同梱のLICENSE.mdに収録。本モデルの利用はその条件に従います):

  • —個人・学術利用は登録不要で利用可
  • —商用利用は[事前登録](https://forms.gle/mTL8tBLrMYXKNZD56)+年商10億円以下が条件(超える場合はPFNの商用ライセンスが必要)
  • —再配布時はライセンス同梱・「Built with PLaMo」表示・モデル名にPLaMoを含めることが必要