あなたのJava、いますぐアップデート、が必要か確認する

eMudhraという認証局の中間証明書の秘密鍵が8ビットしか有効じゃなく偽造放題ということで、これらの中間証明書を無効にする必要があります。じゃないと偽物のサイトに接続してしまう可能性があります。
eMudhraの中間CAの秘密鍵が公開された証明書から復元可能と判明、pip・uvなどの開発ツールに修正版 | gihyo.jp

で、ブラウザはだいたい対応しているはずだけど、いろいろなプログラムがHTTPS接続を行っているので、そのプログラムからも中間証明書が無効にならないといけません。
そして、Javaも例外ではないのですね。たとえばMavenで偽物のリポジトリに接続してしまうと大変なことになりますね。

ということで、インストールされているJavaが大丈夫かどうか確認しましょう。このブログを読みつつ、昨日今日アップデートした記憶がなければ、大丈夫ではないはずだけど。

https://dv-g3b-emudhra.we-have-a-problem.com/に接続できてはいけないので、JShellで確認します。

new URL("https://dv-g3b-emudhra.we-have-a-problem.com/").openConnection().getInputStream()

OpenJDKのJDK 27バイナリは・・・

だめー🙅‍♂️
あやしいサイトに接続できては いけません。 ※ ネット環境によってはここでエラーが出ることもあります。10/22より前にリリースされたバージョンは更新が必要です。

そして、いまOpenJDKでJDK 27.0.1.0.2がダウンロード可能です。
https://jdk.java.net/27/

これを試すと・・・
おっけー🙆‍♂️
あやしいサイトに接続しようとすると「Untrusted certificate」と例外が出ました。

しかしLTSが必要ですね。
ということで、Temurinを見てみます。

いまmacOSとx86, arm Linuxでは25.0.5_8がダウンロード可能です。

これをWSLのUbuntuで試してみます。 おっけー🙆‍♂️
ちゃんと例外が出ました。

このコメントで、eMudhra中間認証局の問題に対処するためにcertdata.txtを更新したと書かれてます。

また、上記のIssueで対応状況が確認できます。

Oracle JDKでも25.0.5.0.2や27.0.1.0.2で対応しています。
https://www.oracle.com/jp/java/technologies/downloads/#java25

CorettoやMicrosoft Build、Zuluなど他のディストリビューションも対応していくと思います。
まぎらわしいですが、Bellsoft、Libericaの25.0.5+11、SapMachine 25.0.5は未対応です。25.0.5.0.2で対応かと。

※ 15:40 追記
SapMachineは25.0.5.0.2が出てます
https://sapmachine.io/download/

DeepSeek V4.1 Flash 1017をUnsloth PRで試す。これはほんとに使える

DeepSeek V4.1 Flash 1017を試してみたけど遅くて、パッチあてたら速くなったけどUnslothさんの実装のほうがよさそうなので試してみたら、これはほんとに使えるモデルってなりました。

まず賢いんだけど、Opus 5はちょっと足りないとは思うけどSonnet 5は超えてる感じがあります。つまり普通に使える。
DeepSeekはconst宣言した5行下で再代入したり、しょうもないエラーをよく出して、一発でコードが動くなんてことはなかったけど、Pagoda Gardenや街中戦車など長いコードをチャットで一発でエラーなしに出しています。

賢いだけならGLM 5.3でもいいんだけど、トークン長くなるとどんどん遅くなっていました。
DeepSeek V4.1 Flashはトークン長くなっても遅くなりにくいアーキテクチャで、さらにUnsloth PRは実装が工夫されているので、M3 Ultra Mac Studioで10万トークン/時間が50万トークンまで計算上安定して出ます。実際には15万トークンまでしか試せてないけど、29tok/secくらいで安定していました。

ということで、性能的にも速度的にも普通に使えそうです。

実装の比較

今回はUnslothさんのUD-Q4_K_XLを使います。

そして実装はUnslothさんのPRです。

最初に使っていたのはvcruz305さんのPR。
https://github.com/ggml-org/llama.cpp/pull/28696

そこでトークン伸びると激しく遅くなったりしてたので対処して試したのがこちら。
https://github.com/kishida/llama.cpp/tree/deepseek41-sparse-decode

で、コンテキストが伸びたときのMac Studio M3 Ultra 512GBでの出力速度の実測と見積もりをまとめてみました。*がついているのは外挿の見積もり。

コンテキスト長 vcruz vcruz改 Unsloth
2,000 25.6 tok/sec
(1分16秒)
27.6 tok/sec
(1分12秒)
30.5 tok/sec
(1分05秒)
5,000 23.6 tok/sec
(3分18秒)
27.3 tok/sec
(3分02秒)
30.5 tok/sec
(2分44秒)
10,000 21.0 tok/sec
(7分03秒)
26.8 tok/sec
(6分06秒)
30.4 tok/sec
(5分28秒)
25,000 15.8 tok/sec
(20分54秒)
25.5 tok/sec
(15分40秒)
30.1 tok/sec
(13分44秒)
50,000 11.2 tok/sec
(52分44秒)
23.6* tok/sec
(32分41秒)
29.7 tok/sec
(27分39秒)
100,000 7.0 tok/sec
(2時間29分)
20.4* tok/sec
(1時間11分)
28.9 tok/sec
(56分)
200,000 4.0* tok/sec
(7時間53分)
16.2* tok/sec
(2時間43分)
27.5* tok/sec
(1時間55分)
500,000 1.8* tok/sec
(41時間36分)
9.9* tok/sec
(9時間29分)
23.8* tok/sec
(5時間11分)

DeepSeek V4.1はスパースアテンションなので、計算すると決めたトークンのKVしか使わないのだけど、vcruz版は全部のKVをとってきたあとでマスクするということをやっているので、スパースの意味がなくなって遅くなって、10万トークンで7tok/secまで落ちていました。それを必要なKVだけを計算するようにしたら10万トークンで20tok/secという見積もり。
ただ、Unslothさんの実装はさらに、同じtop_kのKを使い回すようにして速度を稼いで、10万トークンではほぼ劣化なしになっています。

エージェントで使うとそれなりにコンテキストが伸びるので30万トークンくらいは使いたいのですが、そこまで10万トークン/時間が維持できるので、いろいろ使えそうです。

ちなみに、DeepSeek V4.1 Flashはprefill時に後半層を近似で飛ばすことでA8B、decode時にA16Bとする仕組みを持つんですけど、llama.cppではどちらの実装もその仕組みを持っていないようです。なので常にA16Bです。DeepSeek公式のDeepInferも、デフォルトでは近似せず全層を動かすようです。
恐らく、数人で使う場合にはメリットよりデメリットのほうが大きいんじゃないかと思います。近似だと、compactionするなど長トークンをprefillしたあとループが出やすくなったりがありそう。ループするよりprefillをまつほうがトータルで時間が無駄にならずに済むと思います。

ギャルっぽく

「やばたにえん」初めて見た。「ぶちうま」とちゃんと山口弁を入れてきています。かなりちゃんとしてる。

Pagoda Gardenと街中戦車

Pagoda Gardenは6万トークンくらい。

街中戦車は35000トークンくらい。

どちらも修正なしの一発で出しています。
というか、今回単純ミスのようなエラーを見ていません。

戦国的な野望のシミュレーション

スキル使いながらエージェントを動かすというのを試すために、Qwen Image 2.1での画像生成とFM音源スキルを組み込んで戦国的な野望のシミュレーションゲームを作らせてみました。

Qwen Image 2.1スキルはここで紹介したものです。

FM音源スキルはこれ。
https://kishida.github.io/webdemos/skills/fm-synth.zip

戦国武将になって地域を統一するゲーム。内政や外交、登用、練兵などを行い国力をあげ武将を集め、隣の国に戦争をしかけて地域を統一する。武将は内政や知略、武力など特性がある。戦争はヘックス画面で。マップパーツや武将、コマンド実行時の雰囲気などは画像生成。bgmや効果音もつけて

架空の6か国が戦う戦国シミュレーションができました。

画像がうまくはまってないところもありますが、特に破綻なくシステムができあがっています。

音楽もちゃんとできてる。

帆船モデリング

ではBlenderで帆船のモデリングをやってみます。
プロンプトはこれ。
https://gist.github.com/kishida/bcfc78f4b120778aa5fcf7c1d75303ba

4時間半くらいかけて、ほぼ無介入でここまでできました!

DeepSeek V4 Flash Vision Expがこれだったのを考えると、かなり進化しています。

形状の検査はサブエージェントで行うのですけど、結果だけ完結に返せと書いています。
けど、GLMにしろDeepSeek V4にしろ、だいたい1万トークンくらいうだうだとなにかやって返したりするのだけど、ほんとに簡潔に返しています。

こういったトークン管理も含め、かなりいいモデルだと思います。

Flint 40B-A2.5Bを試す。とりあえずエージェントでコードが書けるマイルストーン的

Recursiveというサンフランシスコの会社がFlintという40B-A2.5Bのモデルを出していたので試しました。
Introducing Flint - Recursive

実用には足りないけど、最初に出したモデルとして40B-A2.5Bでここまで動くのはえらい、というところ。

こんにちは

UnslothさんのUD-Q4_K_XLを使います。
https://huggingface.co/unsloth/flint-GGUF

PRがブログ書いてるあいだにマージされていました。llama.cppの最新で対応しています。
https://github.com/ggml-org/llama.cpp/pull/30928

86tok/sec。速くていい。

カットオフ

2025年前半くらいっぽい。

山口県知識

家康は松平清康の孫。山口城は元和の城割のかなりあと、幕末の城。 九州にたくさん城下町あるから日本西端の城下町もおかしい。
萩市と防府市があること以外はあってなさそう。

ローカル知識はほぼないと思ったほうがいいですね。

ギャルっぽく

チョベリ絡まるけど、マジでカッコいいッピ!?マセギ!

日本語力には期待しないほうがいいですね。

ブロック崩し

エラーは出さなかったけど、ゲームは学習してなさそう。

派手ブロック崩し

例だけ示して「チャレンジしてみてください!」といって作ってくれなかった。

作ってくれと言った結果これ。たしかに派手でブロックが崩れている・・・

「breakoutゲームをつくって」としてみる。

いろいろバグ出るんだけど、「前回のアドバイスで」「あなたのコードでは」と、なんか人ごと。

コードを組むという強化学習が足りない気がする。

とりあえず派手にアイテムもたくさんで動くようになったけど、ブロック貫通とかパドルにあたってなくても跳ね返るとかは修正ができませんでした・・・。

Pagoda Garden

なんか3Dがちゃんと出たのでヨシ。

TODO管理

OpenCodeでTODO管理つくってみます。エージェントとしてちゃんと動くけど、UIはあまりイケてないし、ツールの使い方もあまりうまくなかった。

まとめ

40B-A2.5Bという性能だしにくそうなモデルで、最初からここまで動くのはえらい、というところか。

llama.cppのDeepSeek PRに手をいれてDeepSeek V4.1 Flash 1017を試しなおす。

DeepSeek V4.1 Flash 1017を試したのだけど、遅いしいつまでも結果が出ないしであきらめてました。
遅くなる原因と出力計算にバグありそうなのわかったので修正して試しなおしたら速くなってたけど、エージェントで動かない。

最初は27tok/secで出力していたものが、25000トークンで20tok/sec、10万トークンでは6tok/secまで遅くなったりしていたことと、計算間違いをしてそうという問題があります。
Pagoda Gardenは12万トークンでも結果がでなかったけど、これは繰り返しが発生してた可能性。

出力速度の落ち込みが激しいのは、DeepSeek V4.1 Flashはスパースアテンションでtop_kで選んだ過去KVだけを処理するところを、一旦全部計算してマスクするという処理になっているからのようです。これを、選んだKVだけを処理するようにしました。そして計算間違いしてそうなところを修正。(をClaudeさんが発見して実行)

こちらのdeepseek41-sparse-decodeブランチに置いています。
https://github.com/kishida/llama.cpp/tree/deepseek41-sparse-decode

ただ、UnslothさんからもPRが出ていて、こちらの実装のほうがよさそうです。
https://github.com/ggml-org/llama.cpp/pull/30817

モデルもUnslothさんのモデルを使う必要があるので、ダウンロードが終わったら試します。

派手ブロック崩し

改めて派手ブロック崩し。

25000トークンで25.5トークンを保っています。

Pagoda Garden

Pagoda Gardenもちゃんとできました。

41000トークンで、出力速度も24tok/secまでしか落ちませんでした。

街中戦車ゲーム

戦車も25000トークン程度。

トークン効率もよさそうで、前回ずっと出力していたのは繰り返しが発生してそうです。
また、今回は一度も構文エラーを出していません。DeepSeek V4 Flashは単純な構文エラーを出していてコードを書かせたくなかったのですけど、信頼感あります。

TODO管理

エージェントで動かすには、llama.cppブランチに追加されているchat templateを指定する必要がありました。

build/bin/llama-server --jinja --chat-template-file models/templates/deepseek-ai-DeepSeek-V4.1-Flash.jinja --port 8090 --host 192.168.1.8 -m mrfakename/DeepSeek-V4.1-Flash-1017-GGUF/Q4_K_M/DeepSeek-V4.1-Flash-1017-Q4_K_M-00001-of-00010.gguf -fa on 

動いた。

テストもかなりしっかり書きながら、デザインもされていて、かなりいいです。

ということで、次回Unsloth版を試してみます。

Ornith1.5-122Bを試す。やはりQwen3.5-122B由来の繰り返しが発生

Ornith1.5-122Bという、Qwen3.5-122B-A10Bの追加学習モデルが出ていたので試してみました。

コードはかなり書けるようになっていると思いますが、複雑なタスクで繰り返しが発生する問題は解決していないようで、使いかたは難しそうです。

こんにちは

Qwen3.5-122B-A10Bの追加学習モデルなので、すでにllama.cppは対応しています。
UnslothさんのUD-Q4_K_XLを使います。
https://huggingface.co/unsloth/Ornith-1.5-122B-GGUF

51tok/sec出て速い。

山口県知識

追加学習で知識が消えてないか見ます。
洞窟は秋芳洞。あと、紀州って和歌山なので違いますね。
まあ、122Bだと1つ2つ間違いという感じですね。

ギャルっぽく

箇条書きなところもQwen3.5-395Bと同じですね。

基本知識は壊れてなさそう。

Qwen3.5を試したのはこれ。

派手ブロック崩し

Thinkingがかなり短いですね。

アイテムなどちゃんと出るものができていました。

Pagoda Garden

Pagoda GardenもThinking短く、12000トークン程度で終わりました。

結構かわいい。

街中戦車

街中で戦車で戦う3Dゲームをつくって。

しかし、「うーん、うーん」を繰り返すようになって、最後にはそれだけになってしまいました。
Qwen3.5-122B-A10Bからの問題が解消できてないようです。

前後左右が逆。クリックで砲撃できない。マウスを動かしてもなにもおきない。敵が出てこない

というプロンプトの「前後左右が逆」で悩んでたので「クリックで砲撃できない。マウスを動かしてもなにもおきない。敵が出てこない」をまず渡して、そのあと「前後左右が逆」とすれば解消されました。

でも、少し難しいタスクで繰り返しが発生しやすいということになります。
ゲーム自体は形になってました。

ここまでで、構文エラーは一度も出さずにコードを書いているので、コーディング力はかなり高いと思います。
けど、ちょっと複雑になるとループが発生するので、使いにくそうです。

DeepSeek V4.1 Flash 1017を試す。恐らくPRのバグでモノが出てこない

DeepSeek V4.1 Flash 1017というのが出て、かなりベンチマークの数字がよかったので試してみました。
552B-A8B/16B-E196Bです。

ここで書いたように、Encoder-Decoderという形式でプロンプト読み込み時に後半のレイヤーを近似で飛ばすので、Prefill時A8B、Decode時A16B、そしてn-gramが196Bついているというアーキテクチャ。

後半レイヤー近似は、既存モデルでやってみても割と動いたりもしました。

とりあえず思考がクソながくて、今回は結果が見れませんでした。また明日。

※ 10/21 遅くなり方が激しいのとかを対処してやりなおしました。繰り返しはおそらく計算間違いによる精度劣化で、それも修正。しかしエージェントで使えなかった。

こんにちは

Mr.FakeNameさんのGGUFを使います。
https://huggingface.co/mrfakename/DeepSeek-V4.1-Flash-1017-GGUF

llama.cppではvcruz305さんのPRを使います。
https://github.com/ggml-org/llama.cpp/pull/28696

27tok/secで動いて、思ったより速かった。と、このときは思った。

※ 10/21追記
vcruz305さんのPRはスパースアテンションを全トークン計算してマスクするようになっているようで効率が悪いです。また、計算にバグがあって精度劣化もありそうです。

改善したものをこちらに置いています。
https://github.com/kishida/llama.cpp/tree/deepseek41-sparse-decode

まだ試してませんが、UnslothさんのPRのほうが性能がよさそうです。
https://github.com/ggml-org/llama.cpp/pull/30817

形式も違うので、GGUFもUnslothさんのものを使う必要があります。
https://huggingface.co/unsloth/DeepSeek-V4.1-Flash-1017-GGUF

カットオフ

中国語で返ってきたけど、2025年5月くらいかな。

山口県知識

これも中国語で返ってきたので日本語に。間違ってはないけど、552Bモデルにしては寂しいですね。

ギャルっぽく

これはちゃんと日本語で返ってきた。内容も悪くないですね。

派手ブロック崩し

普通のブロック崩しやってもしょうがなさそうなので、派手なほうを。
いい感じに派手にやってくれました。

2万トークン思考で8000トークンの出力。15tok/secまで落ちてました。

Pagoda Garden

で、Pagoda Gardenやってるんだけど、11万トークンかけて、まだ出力の気配がないのであきらめ・・・

M3 Mac Studioだと6tok/secまで落ちてますね。

今回、こうやってClaude Codeからプロンプト投げているのだけど、途中経過が見えるようにしてなかったのでどう進んでるかも見えず。

どうやらPRにバグがあって繰り返しが発生している模様。

明日またやりなおします。

Nemotron 3.5 Boltを試す。圧縮で情報損なわれてるためか規模の割に微妙

120B-A12BのNemotron 3.5 Super VLを74B-A9Bに圧縮して調整したNemotron 3.5 Boldを試します。

なにかが出来る気配があるけど、圧縮のせいか情報がだいぶ不正確になっているし、言葉遣いもちょっと変で、微妙。

Nemotron 3.5 Super VLについてはこちら。

こんにちは

UnslothさんのUD-Q4_K_XLを使います。

ただllama.cppの最新でも、Macだと32文字以上のプロンプトで落ちるので、このPRがmergeされるのを待つか自分でビルドする必要があります。

で、動いたので「こんにちは」
ちょっとReasoningが伸びた。40tok/secで、Superよりは速い。

山口県知識

山口県は細長くないし、「京都のない京都」ってなんや、といろいろ怪しくなってそう。

74Bにしては間違いすぎですね。

ギャルっぽく

与那国ってぜんぜん違うし厳島神社は広島だけど、ギャルっぽいからいいか。。。

ブロック崩し

なんかReasoningをこういう箇条書きで書くんよね。

でもちゃんと一発で動きました。

派手ブロック崩し

HTML+JSでブロック崩しを作って。なるべく派手な効果でかっこよく画面がうるさいくらいのものを。アイテムなど機能も盛りだくさんで

これもちゃんと一発で動いて、キーリピートだけ修正してもらった。ただ、アイテムが出るようなことを言ってたけど、ぜんぜん出てくれない・・・

Pagoda Garden

エラーいろいろ出しつつ動いた。
最初、面が足りなくて網みたいになってたけど、ちゃんとなった。
画像を渡してみたけど、見てないかも。

それっぽくちゃんと出たからおっけー。

戦車バトル

これもエラー出しながら、とりあえず動いた。
まあ3DでゲームっぽくできたからOK

まとめ

ウェイトを圧縮して調整して動かすという手法でそれなりに動くというのはおもしろい。