LLMにやさしいSui言語が話題だった。
で、「ヤサシクナイヨ」とか書いてたのだけど、それならSui言語にやさしいLLMを作ってみるのはどうか。
LLMにやさしい言語SuiはLLMにやさしくなさそう - きしだのHatena
まあ、ファインチューンという金槌を持ってウロウロしてるところにSui言語という釘を見つけたので打ってみましょう、ということで。
データセットを作る
最初はCodeNetのコードをSuiに変換してデータセット作ろうかと思ったのだけど、Suiで書くにはちょっとコードが複雑すぎるのでやめた。
簡単な問題をChatGPTに作ってもらう。

整理して80件になった。まあデータセットとしては少なすぎるけど、今回は小さいモデルを学習させるだけなのでどうにかなるはず。(追記:どうにかならなかった・・)
そしてgpt-oss-120bにコードを書いてもらう。

コードはここ。「さくらのAI Engine」で動くようにしてる。無料枠で余裕で動かせる。
https://gist.github.com/kishida/e040f1755c3ddeab307deb5f0319808c
できたデータセットはここに置いた。
kishida/sui-lang-examples · Datasets at Hugging Face

ファインチューンする
さて、データができたので、なんかLLMのファインチューンをしたい。
たぶん4Bだと書けない気がするので、8Bくらい、ということでQwen3-8Bを調教する。
UnslothさんのDockerを使ってJupyter Notebookを動かす。
Fine-tuning LLMs Guide | Unsloth Documentation
とりあえず15stepsほど学習させてみる。

lossも順調に下がってる。

過学習の気配。というか30steps、3epoch学習させると見事に過学習してたので、15stepsにしてる。
試しに動かすと、それっぽいコードが出てそう。

Google Colabで試せるノートブックこちら。
Google Colab
「ランタイム > すべてのセルを実行」でスクリプトが動き出します。

とりあえずGGUFが出来たのでこちらに。
kishida/sui-lang-qwen3-8b · Hugging Face
※ ColabでGGUFを保存するにはT4ではメインメモリ不足で、課金してL4以上が必要です。
結果
まず、普通のQwen3-8Bで動かしてみる。量子化はQ4_K_M。
こんな感じに。

これはこんな感じのコード。ダメそう。
f0 (a0, a1, a2) {
v0 = a0 > a1
v1 = a2 > v0
return v1
}
できたGGUFをLM Studioで読み込んでみる。

なんかそれっぽいコードを出すようになった。

こんな感じなので、それっぽさはあるけどlabel_1がないしcompareの引数も足りない。
var g0
f0 (a0, a1, a2) {
v0 = a0
v1 = a1
v2 = a2
g0 = v0 > v1
g1 = !g0
if (g1) goto label_1
g2 = v0 < v2
g3 = g2 == ??(※ 足りない)
return g3
}
まあ、それっぽいコードを吐くようには なった。 ただ、なんかデータを300件くらい作るかモデルサイズが14Bくらいないと難しいかも。システムプロンプトに構文の説明を入れるものと入れないものも分けたほうがよさそう。
データセット内のコードをちゃんと見てないので、マジメにやるなら動作確認や手作業での修正も必要そう。
まとめ
ということで、データセット作って学習させて試してみるという一連の流れをやってみました。
ほんとは言語リファレンスなしでもちゃんと書けるようになると面白いのだけど、そうすると継続事前学習が必要で手間が増えるのとウチの16GB VRAMではメモリが足りなかった(21GB使ってた)ので、今回はあきらめてシステムプロンプトに言語リファレンス入れてます。
ところでこの本を献本でいただいたけど、プロンプトエンジニアリングからLangChain、RAG、オブザーバビリティにAIエージェントまで、AIシステム開発に必要なことが広く必要なことが書かれていてよさそう。
※ ファインチューンまでは触れられてません。
