Ministral 3は性能はもう一歩だけど存在が大切。文字読み取り性能は高い

昨日、Mistral 3シリーズがリリースされました。モデルは675BのMistral 3 Largeと、3B、8B、14Bという手ごろなサイズのMinistral 3です。このMinistral 3でコーディングや画像認識、3Bモデルのファインチューニングを試してみました。
そこそこ使えて画像認識精度は高いけど、コードは書けないし性能もそこまで高くなさそう、けれどもQwen3以外の選択肢が出たのが大事、という感じ。
Introducing Mistral 3 | Mistral AI

基本的なやりとり

すべてQ4_K_Mの4ビット量子化で試しています。Q8にしてもおそらくそこまで性質は変わらなそうなのと、使えるハードウェアが広がること、gpt-ossは元々4ビットで公開されてたりQwen3も4ビットでちゃんと性能出てたりするので、4ビットでの性能は大事だと思います。

とりあえず日本語を見るために小説書かせてみます。案外ちゃんと書けました。筋も通ってるし、

というか、「俺たちの戦いはこれからだ!」やっとる

さまざまな基本知識もちゃんとあるようです。

ただ、話が長くて「聞きたいことソレじゃないんだけど」と思ってても出力が止まらずツッコミを許しません。

ffmpegでのフレームレート設定を聞いた場合も、聞いてないのに品質や圧縮率まで説明しはじめて、なかなか止まらなかった。

この傾向はMistral 3 Largeでも同様なので、出力量調整のような後段のファインチューニングまで手がまわってないように思います。

画像読み取り

Ministral 3は画像言語モデルで、画像を読み取れます。

ということで、3B-Instructで試してみます。
ちゃんと読み取ってるけど、日本語は怪しい。

日本語の読み取りは無理かなぁと思ったら、かなり読み取ってます。Sarahina2.2 VLほどではないものの8bit量子化と同程度、ほぼ間違いなし。

画像エンコーダーは、たぶんどのモデルも同じなので、読み取った後の対応を賢くしたければ大きいモデルを、という感じですね。

Reasoning

今回のMinistral 3のモデルにはそれぞれReasoningとInstructの両方が出てます。Largeは今のところInstructのみ。

[THINK]から[/THINK]までが思考ぽい。なので、LM Studioでは開始終了文字列の設定が必要です。

「「64歳以上であれば100円、64歳未満は1000円」を整数四則演算だけで実現して」と聞いてみます。
ちゃんとThinking判定してくれた。

けど、結論に至らずだらだらと思考を続けて同じ内容を繰り返すようになっていたので止めました。12Kトークン消費。

後述のブロック崩しを作るときも、思考過程で修正を3回くらいやって、完成コードを一旦だしてから返答が始まったりして、無駄に思考をこねくりまわしてるうちにコンテキストが伸びてアホになる、という感じ。
返答と同様に、どこでThinkingをやめていいか判断がついてなさそうです。

難しすぎる問題は無限ループ、簡単な問題はReasoningの必要がないので、使いどころは難しそうです。

ちなみにMinistral 3 Largeも普通に無限ループしていました。

コーディング

では、いつも通りブロック崩しを作ってみます。
が、14Bでも完成に至りませんでした・・・。

コードを出したあと、改善案みたいなのを出してきます。

いろいろ出したあと、また「全体コード」を出してくる。もちろん「こちら」のリンク先は404です。

返答を簡潔に出せずにいろいろ付け足してしまうのは、性能が低いモデルの特徴ですね。返答の精度とは別に、どこで返答を打ち切っていいかの判断が弱くて、延々と付け足してしまう。

なんかコードもあまり美しくないです。
このelseは中カッコ必要やろ、とか、なぜblockXを1行で、とか、colという名前は・・・みたいな。

それでコンパイル通って動くコードを出すならいいけど、コンパイルが通らないし、エラーを示しても、修正できず、動かすところまで行きませんでした。続けても無理そうだなというところで諦め。

コーディング力は、今年 見た中で一番ダメそう・・・。Qwen3 4Bでもコンパイル通るコードを書いた
Mistral AIは、Devstral Smallという、24Bでかなりコード書けるモデルを作ってたのに、どうしてこうなった、という感じ。

Largeだとさすがにちゃんと動くコードを出してきました。コードもきれいだった。パドルの当たり判定おかしいけど。

Function Calling

3Bモデルで、ちゃんとToolを使えています。

コードはこちら。
Function Callingを試すサンプル · GitHub

10B以下でFunction CallingできるモデルがQwen3しかなかったので、他の選択肢が出たのがありがたいです。

Llama 3やGemma 3はTool対応なし、Phi 4 miniはTool対応してるということなんだけど、性能低くて「その関数あるのは知ってるけど使えません」みたいなことを言ったりしてました。

なので、Qwen3を使えない場合にFunction Callingできる一番小さいモデルはPhi-4の15BのQ4_K_M量子化だけど9GBあるので、Macならいいけど、Windowsだと12GB VRAMのGPUでもつらい。
Q2_S量子化だと5.6GBくらいだけど「以下のAPIを呼び出して、現在時刻を取得します」とだけ言って呼び出してくれなくなった。

Ministral 3BはCPUでもこの速さ。

ファインチューン

Unslothさんが早速ファインチューンやってたので、「明るくJavaコンパイルエラーを説明するデータセット」で学習させてみました。
Ministral 3: How to Run & Fine-tune | Unsloth Documentation

Unsloth Docker ImageではそのままだとMistral 3に対応してなかったので、いくつかパッケージのアップデートが必要。

pip install --upgrade --no-deps unsloth unsloth_zoo
pip install --upgrade git+https://github.com/huggingface/transformers.git@bf3f0ae70d0e902efab4b8517fce88f6697636ce

ちゃんと学習できてる!

3Bは学習させやすいけど、これまでライセンス的に使いにくいLlama3.2 3Bくらいしかなかったので、Apache 2.0というのもあってファインチューンの基盤としてもよさそうです。

GGUF保存もエラーが出ます。エラーを出したあとgguf-pyをGitHubの最新に更新してconvert_hf_to_gguf.pyを直接呼び出すとQ8_0で保存できました。

pip install --force-reinstall git+https://github.com/ggml-org/llama.cpp.git#subdirectory=gguf-py

ただ、なんかちょっと壊れてそう。

対応が進んで落ち着いてから試す方がよさそうです。

とりあえずHugging Faceに置いておきました。
kishida/java-error-explainer-jp-cheerful-ministral3-3b · Hugging Face

一応、学習できそうなノートブックを。
Javaのエラーを明るく説明するMinistral 3 3B
Google ColabだとT4だと難しいかも?