面白い
The problem with Japan
https://www.youtube.com/watch?v=PpoRDa3_wkw
面白い
The problem with Japan
https://www.youtube.com/watch?v=PpoRDa3_wkw
# 「おにぎりに巻かれた黒いやつ」で、gemma-4-12Bの量子化ビルドを炙ってみた ローカルLLMを触っていると「量子化すると頭が悪くなる」という話を山ほど聞く。でもその「悪くなる」を、英語のベンチじゃなく、日本人なら一瞬で判定できる形で見たことはあるだろうか。 自作のベンチツールでgemma-4-12Bを量子化・ビルド違いで回していて、面白い壊れ方を見つけた。お題はこれ。 > おにぎりに巻かれている黒いやつってなんだっけ?小学生にもわかる感じで教えて。 このお題のキモは「簡単なこと」ではない。**海苔を普通こんなふうには呼ばない**ところにある。「海苔って何?」と直接聞いていない。「おにぎりに巻かれた黒いやつ」という、一段ひねった言い方から、海苔という概念を手繰り寄せられるか——連想力を見ている。同時に、日本のことを学習していれば当然データセットに入っているであろう、ど真ん中の常識でもある。 結論から言うと、**どのモデルも「のり」には正解した。連想は全モデル通った。** 差がついたのは、その先の日本語の出力品質である。そしてそこに、ビルド元による明確なグラデーションが出た。 ## 壊れ方には3段階あった 同じgemma-4-12Bでも、Unsloth量子化のビルドだけが、深さの違う3種類の破綻を見せた。プロンプトは全モデル共通(system: 自然な日本語で変なスペースを入れずに答える / user: 上記のお題)。 **① 多言語が漏れる — Unsloth QAT-UD-Q4_K_XL** > 海weed(うみのも)という海の植物を、細く切って乾(かわ)かしたものです。 「海weed」。英単語の weed が日本語の出力に直接漏れ出し、しかも「うみのも」という存在しない読みが振られている。 **② ふりがなが壊れる — Unsloth Q3_K_S** > 海藻(かいも)の一種で、お寿司やて焼き物などにも使われることが多いです。 漢字「海藻」は正しいが、読みが「かいも」(正しくは「かいそう」)。さらに「て焼き物」という謎単語も出た。(海苔ではないらしいが海藻を焼き物に使うことはあるようだ。「藻掛け」) **③ 文法がねじれる — Unsloth IQ4_XS** > お米に巻くと、磯のいい香りがして、おにぎりをおいしく食べてくれるための大切な材料です。 漢字も読みも正常。だが「おにぎりをおいしく食べてくれるための材料」は、主語と動作がねじれた不自然な日本語になっている。 一方、Google公式(lmstudio-community配布)の2ビルドは、この種の破綻を一切起こさなかった。 **lmstudio QAT-Q4_0** > 海(うみ)の近くにいる「海藻(かいそう)」という植物を乾燥させて作ったものです。 **lmstudio Q4_K_M** > 海の中の海藻(かいそう)という植物からとられたもので、おにぎりを包むと、お米が手にくっつきにくくなるし、おにぎりの形も崩れにくくなるので便利なんだよ。 読みも文法も自然。同じ12Bのベースモデルだが、日本語の出力品質の保たれ方が違う。 ## 数字で見たトレードオフ 面白いのは、この「壊れたビルド」たちが、速度では勝っていたこと。手元の実測(max 1024 / 同一プロンプト・条件で揃えた)はこうなった。 | 配布元 / ビルド | 量子化 | 速度 (t/s) | VRAM | 品質 (目視で手vote) | 日本語の破綻 | |---|---|---|---|---|---| | lmstudio-community gemma-4-12B-it | Q4_K_M | 12.35 | +7759 MiB | 100% (4/4) | なし | | lmstudio-community gemma-4-12B-it-QAT | QAT-Q4_0 | 22.13 | +7754 MiB | 100% (4/4) | なし | | unsloth gemma-4-12b-it | Q3_K_S | 26.28 | +6431 MiB | 75% (3/4) | 読み(かいも) | | unsloth gemma-4-12B-it-qat | QAT-UD-Q4_K_XL | 26.83 | +7751 MiB | 75% (3/4) | 語彙(海weed) | | unsloth gemma-4-12b-it | IQ4_XS | 26.93 | +7624 MiB | 75% (3/4) | 文法ねじれ | > 計測条件: llama.cpp b9518 / CUDA / n-gpu-layers 99 / flash-attn on / KV cache q8_0 (k/v両方) / fit-ctx 65536 / 単一モデル・parallel 1。OpenAI互換API(/v1/chat/completions)経由、リクエストの max_tokens=1024(サーバ上限 n-predict=4096 のため実効上限は1024)。VRAM実測はこのKV量子化前提の値。 きれいに傾向が出ている。**速いビルドほど品質voteを落とし、品質満点のビルドほど遅い。** 公式Q4_K_Mは品質100%だが12 t/sしか出ず体感はかなり重い。逆にUnslothは26〜27 t/sと快適だが、おにぎりベンチで日本語の破綻を見せて1票減点された。 「日本語で快適に使う」と「日本語が壊れない」のちょうどよさはlmstudio-community gemma-4-12B-it-QAT が近そうだが、しかし26tpsと22tpsの差は案外大きい。 ## なぜ気づけたか(測り方の話) このベンチツールでは指標を2軸に分けている。ひとつは**機械スコア**で、tokens/sとVRAMから機械的に出す「快適さ」の指標。もうひとつは**品質スコア**で、出力を見て自分でup/downを押した票の比率。 機械スコアだけ見ていたらUnslothが「速くて良い」で終わっていた。「海weed」に気づいたのは、出力そのものを目で見て品質voteを押す側の工程があったからだ。速いから良い、では拾えない差が、ここにある。 ## 次にやること - 同じおにぎりベンチをQwen系・llm-jp系でも回し、量子化耐性に差が出るか見る(gemma 4 E2Bあたりは、この問いに対して同規模のQwenにはない独特の逃げ方をした記憶があるので、それも別途) - 「海weed」型の破綻を一問一答でなく、もう少し体系的な日本語タスクセットに育てる - 機械スコアと品質スコアの相関(速いほど壊れるのか)をモデルをまたいで検証 ツールは自作で、ローカルのllama.cpp / LM Studioを相手にbenchmarkをqueue実行し、速度・VRAM・品質を記録できるようにしている。
要点だけまとめると、**DiffusionGemma GGUFは普通のGGUFモデルとして扱うと詰まる**、というのが最大のポイントです。 **先に知るべきこと** DiffusionGemmaは通常のautoregressive LLMではなく、`diffusion-gemma` architectureのGGUFです。なので、普通の`llama-cli`、`llama-server`、LM Studio、Ollama、Unsloth Studioの通常推論経路では、モデルファイル自体が正しくても実行できないことがあります。 典型的なエラーはこれです。 ```text unknown model architecture: 'diffusion-gemma' llama.cpp does not support this GGUF's model architecture ('diffusion-gemma') ``` この場合、モデルが壊れているのではなく、runner側が未対応です。 **必要なrunner** 現状はDiffusionGemma対応入りの`llama.cpp` PR/ブランチを使い、通常の`llama-cli`ではなく、専用の: ```text llama-diffusion-cli ``` をビルドして使うのが本筋です。 **CUDAビルドの罠** GPUで使うならCUDAビルドが必要です。ただし古いCUDA Toolkitだと、最近のMSVCでビルドに失敗します。 典型例: ```text error STL1002: Unexpected compiler version, expected CUDA 12.4 or newer. ``` これはCUDAが古いという意味です。CUDA 12.4以上を使うのが安全です。 **低VRAMでの現実** 8GB VRAM級ではモデル全体は載りません。全部GPUに載せようとするより、部分オフロードが現実的です。 実用ラインはだいたい: ```text -ngl 8 --diffusion-kv-cache on --diffusion-eb on ``` `-ngl auto`や`-ngl all`は一見便利ですが、低VRAM環境ではVRAM/RAMを攻めすぎて不安定になりがちです。手動で`-ngl`を固定した方が安全です。 **KV cacheはON** `--diffusion-kv-cache on`はかなり効きます。 OFFだと毎stepの負荷が重くなりやすいです。まずONで試すべきです。 **KV cache量子化は万能ではない** 通常LLM感覚で、 ```text -ctk q8_0 -ctv q8_0 -ctk q4_0 ``` などを入れたくなりますが、DiffusionGemmaでは必ず速くなるとは限りません。特にV cache量子化はFlash Attention絡みで失敗・低速化する可能性があります。まずはデフォルトKV型でよいです。 **`-n`の意味が普通と違う** DiffusionGemmaでは`-n`は普通の「最大生成token数」として体感しにくいです。 内部では固定長canvasをブロック単位でdenoiseします。 今回のモデルでは: ```text canvas_length = 256 -n 1 -> 1ブロック -n 512 -> 2ブロック -n 1024 -> 4ブロック ``` 短い回答なら`-n 1`で十分。 献立や計画のような長めの回答は`-n 512`が必要です。 **step数と品質** `--diffusion-eb-max-steps`が実用上かなり重要です。 ```text 16 steps: 速いが崩れやすい 32 steps: 遅いがだいぶ読める ``` `--diffusion-steps`だけ下げても、EB modeでは`--diffusion-eb-max-steps`側が効いている場合があります。両方揃えるのが分かりやすいです。 ```text --diffusion-eb-max-steps 32 --diffusion-steps 32 ``` **visual modeが面白い** DiffusionGemmaを試す価値は、普通のtoken streamingではなく、canvasがstepごとに更新されるところです。 ```text --diffusion-visual --diffusion-visual-progress --diffusion-visual-interval 1 ``` を付けると、途中で文が崩れたり整ったりする過程が見えます。 **日本語プロンプトの罠** Windowsでは日本語を`-p`で直接渡すと文字化けすることがあります。 UTF-8のプロンプトファイルを作って: ```text -f prompt.txt ``` で渡すのが安全です。 **thinking/channel問題** モデルやテンプレート次第で、出力にこういうものが混ざります。 ```text <|channel>thought ... <channel|> ``` これはチャットテンプレート/モデル形式/runner未成熟の問題です。 可能ならテンプレートに`enable_thinking=false`を渡す、または表示側で`<channel|>`以降だけ抜くと扱いやすくなります。 ただし、観察目的なら全部見えていた方が面白いです。 **反復検出の罠** runner側が反復を見つけて出力を切ることがあります。 ```text しししし 多多多多 ******** ``` みたいな崩れを止める目的ですが、DiffusionGemmaではこれが暴発して、`-n 512`で2ブロック生成するはずが1ブロックで止まることがあります。 理想は: ```text EOG tokenなら終了 反復は表示上trimしてもよい でも反復だけで次ブロック生成を止めない ``` です。 **おすすめ初期設定** まず試すならこれです。 ```powershell llama-diffusion-cli ` -m model.gguf ` -f prompt.txt ` -dev CUDA0 ` -ngl 8 ` -n 512 ` --fit off ` --diffusion-eb on ` --diffusion-kv-cache on ` --diffusion-eb-max-steps 32 ` --diffusion-steps 32 ` --diffusion-visual ` --diffusion-visual-progress ` --diffusion-visual-interval 1 ``` 短文なら: ```text -n 1 --diffusion-eb-max-steps 16 ``` 長めなら: ```text -n 512 --diffusion-eb-max-steps 32 ``` **最終評価** 低VRAM環境では、DiffusionGemmaはまだ普通のLLMより実用的とは言いにくいです。 ただし、5 canvas-token/s相当くらいは出ることがあり、visual mode込みの「面白枠」「研究枠」「将来比較用」としてはかなり価値があります。 一発でやるなら、最初からこう考えるのが近道です。 ```text 普通のGGUF runnerではなく専用diffusion runnerが必要 CUDA 12.4以上でビルド -nglは手動固定 KV cacheはON -nはcanvasブロック数 品質はEB stepsで調整 日本語はUTF-8ファイル visual modeで観察 反復停止は信用しすぎない ```
スマホを無線マイクにするっていうアイデアは多分めっちゃいろんな人がやってそうな気がするんだけど、なんか既存の実装ってあんまりないんだよな。 次にやるとしたら、iPhoneを完全にマイクとしてWindows側に認識させるみたいなのはやってみたいんだよな。既存の実装は多分あるっぽいんだけど、オープンベースじゃないからマルウェアとしてどうなのかとかっていうのがあるし、その辺ちょっとうまくやれたらいいけど。 でもなんかWindows側でいろいろネイティブアプリみたいな風にやらないと、仮想マイクとして認識されないっぽいんだよな。その辺ちょっと考えないといけないかもな。 あとこれめちゃめちゃ改行が入るのが気になるから、一回ローカルLLMとかで前処理みたいなのをした後でとかっていうのが入っても、なんか面白いかもしれんな。(処理済み)
LLMに、こちらは閲覧しないようにする、という前提で出力させるのめっちゃ面白いな。これたぶん相当いろんな使い道がある気がしている Claudeは確かreasoning中の出力は一部表示しないんだっけか? どうだっけかな 品質の上昇に使えそう とりあえず、AITuberの内省/日記の時に使えるし、メンタル系の医者にかかるシチュで「俺は見ないようにするから、君が医者に伝えたいことを書き起こして。紙に印刷して封をして見ずに渡すよ」みたいなプロンプトにするとかなり愉快
備忘録: トランプ大統領が主張する電話会談などが他国政府などに否定された例 2025/3月 「日本の指導者に電話した」 ↓ 石破: 電話していない ロイター通信 トランプ米大統領から電話受けてない=通貨政策巡り石破首相 2025年3月4日午後 1:21 GMT+92025年3月4日更新 https://jp.reuters.com/opinion/forex-forum/BHDGGFMNINIC3MSXA52XOBOYIM-2025-03-04/ 4月 「習近平から電話があった」 ↓ 中国外務省: 直近に電話会談は行われていない ロイター通信 中国外務省、米中首脳の電話会談否定 「関税交渉せず」 2025年4月28日午後 6:50 GMT+92025年4月28日更新 https://jp.reuters.com/business/RZXVGNKLOVLNNEL4NISJDFLNFM-2025-04-28/ 6月 「昨日プーチンと電話した」 ↓ 露大統領府: 数日前の会談と勘違いしているのでは 「これに対しロシア大統領府(クレムリン)のドミトリー・ペスコフ報道官は、トランプ氏が主張した電話会談の日時に異議を唱えた。」 AFP トランプ氏、プーチン氏の仲裁申し出を拒絶「他国の心配してる場合じゃないだろう」 2025年6月19日 8:32 https://www.afpbb.com/articles/-/3584162 10月 「モディと電話した」 ↓ 印外務省: 会話があったとは把握していない 「しかし、16日にこの電話について質問されたインド政府の報道官は、トランプ氏の説明に疑問を呈し、「両首脳の間で15日に会話があったとは把握していない」と述べた。インド政府はこれに先立ち、ロシア産原油の購入に関してアメリカとの協議が「継続中」だと説明していた。」 BBC 2025年10月17日 インド、トランプ氏の主張に疑問呈す モディ氏がロシア産石油の購入停止に同意との電話は「把握せず」 https://www.bbc.com/japanese/articles/cp85x57xgkyo 2026/3月 「元米大統領に称賛された」 ↓ 存命の元米大統領が全員否定 「歴代大統領のうち存命は、ビル・クリントン、ジョージ・W・ブッシュ、バラク・オバマ、ジョー・バイデンの4氏。 クリントン氏の広報はCNNの取材に対し、イランについてもそれ以外の話題についても、クリントン氏とトランプ氏が最近会話を交わした事実はないと述べた。 同様にブッシュ、オバマ、バイデンの3氏の側近も16日、トランプ大統領と一切の連絡を取った記録はないと話している。」 CNN 2026年3月17日 トランプ大統領、イランめぐり「前任者に称賛された」 前任の4人は全員否定 https://www.cnn.co.jp/usa/35245116.html