-- Views
August 22, 26
スライド概要
Kernel/VM探検隊 @東京 No.19 での発表スライドです
関数電卓プログラミングの世界 stepney141 Kernel/VM探検隊@東京 No.19 2026年 8⽉ 22⽇
stepney141 Kernel/VM探検隊@東京 No.19 2026年 8⽉ 22⽇
Transformer On Calc stepney141 Kernel/VM探検隊@東京 No.19 2026年 8⽉ 22⽇
お前は誰? 素性 ● SWEもどきの基盤系SE @某SIer ● ボードゲームの計算機解析 + AI @某⼤学院 ● 低レイヤ初⼼者 ● Twitter: @stepney141 趣味 ● ボードゲームエンジンの開発 ● 関数電卓のプログラミング (諸事情でしばらく離れてはいたが...) ● 魔術(オカルティズム)の歴史 ● Webアーカイブ活動 4
関数電卓 科学技術計算に特化した電卓の総称 三⾓関数, 指数・対数関数, 累乗・累乗根などの 機能を備えていることが多い. 研究・開発現場, 教育現場などで広く使われる. 主なメーカー : CASIO, Hewlett Packard, Texas Instruments 5
プログラム電卓 / グラフ電卓 プログラミング機能・グラフ描画機能を備えた (関数)電卓の総称 搭載されている⾔語の例 : ● ● ● メーカー独⾃のインタプリタ⾔語 アセンブリ⾔語 ⼀般的な各種⾼級⾔語 (BASIC, C, Python, Pascal, Lisp, Lua, etc…) 実務向け需要はパソコンの普及で完全に絶滅した が, 教育現場では今でもかなり需要がある. (試験持ち込み⽤の機能制限モードがある機種も) 6
TI-Nspire CX II CAS 教育向けグラフ電卓「TI-Nspire」シリーズの最 新モデル (2019年発売) ➡ 電卓というより⼩型PDAに近い! ● CPU : ARM926EJ-S (ARMv5TEJ, 396 MHz) ● SDRAM : 64MB ● NANDストレージ: 128MB ○ うち, 約30MBはOS⽤パーティション ● Flash ROM : 512KB (※ブートローダー⽤) ● 画⾯ : 320×240 16bit LCD (65536⾊) ● 独⾃BASIC⽅⾔, Lua, MicroPythonに対応 7
Transformer ● 雑な説明 : トークンを⼊⼒すると, それに続く別のトークンの確率分布 を出⼒する深層学習モデルのひとつ ● 皆さんご存じの Large Language Model の基礎となる仕組み ⼊⼒ (≒⽂字列) モデル 出⼒ (単語 i が続く確 率の組) 8
なんでTransformerを動かす必要が? ● お題⽬:「教育⽤デバイス」を謳うからには⽣成AIが動くべき! ● 当初はもっとハードウェア寄りのネタを考えていたが, うまくいかな かった ○ USB経由で電卓をインターネットに出そうとしたが, 電卓のUSB周 りの仕様が旧モデルから変わっていてうまくいかなかった ○ 失敗した時点で発表1週間前 ○ ➡ アプリケーション層で完結するネタに路線変更 ● やってみたかった!!!!!!!!! 9
開発環境 : TI-Nspireの解析コミュニティ ● 欧⽶には電卓で遊ぶのが好きなパソコンオタクが多く, 様々なリバース エンジニアリングが⾏われている ● 通信⽅式, 実⾏ファイル形式, OSのシステムコールなどが解析済み 10
開発環境 : Ndless TI-Nspire⽤のコミュニティ製ネイティブ実⾏環境 Ndlessを介してシステムコールを叩き, 公式サポートされていない⾔語や機 能を使って⾼度なプログラムを書くことができる. 11
開発環境 : Ndless ● 本来, TI-NspireにはARMアセンブリを実⾏する機能はない ➡ TI-Nspire OSにexploitを仕掛け, 無理やりARMアセンブリを実⾏ している ● もちろんTI⾮公認なので, OSアップデートのたびに脆弱性が潰され, また新たなexploitが発⾒される...を繰り返している ● 現在のNdlessの仕組み ○ ○ OS組み込みのLuaスクリプト + 物理演算機能で⼤量のオブジェクトを 作ったあと, オブジェクトの参照を破壊して任意コード実⾏を引き起こす ■ heap sprayという攻撃⼿法を併⽤して成功確率を上げている これにより, OSの「⽂書を開く処理」に対して「⽂書にARMアセンブリ が含まれるなら実⾏する」というフックを仕掛けている 12
動かすために使うもの TinyStories ごく⼩さいモデルでも, 限定された短い物語なら, ある程度まとまった⽂章 を⽣成できるよう設計されたデータセット [2305.07759] TinyStories: How Small Can Language Models Be and Still Speak Coherent English? llama2.c pure C で書かれたTransformer推論フレームワーク ➡ GPT-5.6-Sol でかなりスムーズに Ndless 環境下に移植できた GitHub - karpathy/llama2.c: Inference Llama 2 in one file of pure C 13
TinyStories 3-4 歳くらいの語彙だけで書かれており, 頭の悪いモデルにも優しい & 易しい! 14
⽅針 ● スペック上の RAM 容量は 64 MiB だが, OS のメモリ消費量がわからな いので可能な限り⼩さく収めたい ● とりあえず⼀番⼩さい TinyStories 260K でどうなるか試してみる パラメータ数 260,032 層数 5 隠れ層の次元 64 フィードフォーワード層の次元 172 最⼤コンテクスト⻑ 512 15
容量的にはなんか意外と⾏けそうじゃないか? https://huggingface.co/karpathy/tinyllamas/tree/main/stories260K 16
意外と⾏けた ● FP32 (単精度浮動⼩数) のモデルをそのまま移植すると, 64トークンの ⽣成に平均で7秒ほどかかった ○ だいたい 9 tokens/second くらい ○ ローカル(L)LMとしては上出来な速度 ● もっと「⼀⽂字出すのに数秒待たされる」レベルのものを想定していた が, 意外と普通の速度で動かせるということが分かった ● であれば, せっかくならもっと速くしたい! 17
⾔語モデルの量⼦化 ● モデルのパラメータの精度を下げ, 軽量化・⾼速化すること ● llama2.c には, すでに Q8量⼦化 (8ビット整数に丸める) が実装済み ● ARM926EJ-S は FPU がない (=ソフトウェアエミュレーション) ので, FP32をやめることにより純粋に実⾏速度向上が期待できる ➡ 平均 16 tokens/second まで⾼速化 FP32 weights 1.23 -0.72 0.08 …… Q8 INT8 weights 94 -55 6 …… × scale 18
ソフトウェアとしての体裁を整える ● 当初は, プロンプトは固定の選択肢から選ぶ機能しかつけてなかった ● ⾃由にプロンプトを⼊⼒できるようにしたい! ● OS標準の⼊⼒ダイアログはあるが, UIとして使いにくい... ● Ndless でキー⼊⼒を直接読み, フレームバッファに突っ込む ● GPT-5.6-Sol がかなり良い感じにやってくれた ● こういう制約の強い機械で遊ぶ⾯⽩さは、普段は『当然ある』と思っ ている前提が⾒えることなのかもしれない ○ Kernel/VM 基準ではとても制約が弱い機械ではある 19
Demo 20
Future Work ● 制約をもうちょっと強くしたい ○ ○ モデルが⼩さすぎて出⼒精度が悪いので, もうちょっと⼤きくしたい もっとしょっぱい性能の機種でも試したい ● やっぱり関数電卓からインターネットに出たいですよね〜〜〜〜!! ○ モチベーション : インターネットに出ると楽しく, かつ⾊々できる ■ ex. (本物の)LLMに接続できる ■ ex. 仮想通貨マイニングができる ● 関数電卓でもLinuxを動かしたい ○ ○ ○ 先⾏例はたくさんあるが, まだ成功してない機種で動かしたい 現在のスキルレベル : 組み込みLinuxの知識がなく, 「何を使って勉強す ればいいか勉強する」くらい ゆっくりやっていきます 21
次回 : 関数電卓で〇〇してみた (仮題) stepney141 Kernel/VM探検隊 @どこか 鋭意準備中!