てつわんこシステムの概要 (2024/10版)

現状のてつわんこシステム(ラーシェの内側)はこんな感じです。

文章で書いてもいまいち要領を得ないので、とりあえず図で示します。

概要フローもどき

他であまりやってないのは、「自身のこれまでの会話ログの要約」も生成の文脈に含めてることと、内省を促すループの部分でしょうか。

ここまでやっても、なんかまだ足りないなあって気がするので、思い出したころにまた更新しようと思います。

LLMに関する愚痴

会話文脈の維持がクソめんどい

  • ログ全部食わせたらインプットトークン多すぎて返事も遅いし金もかかる
  • 要約やフレーズ抽出でごまかそうとしても、抽出結果がポンコツ
  • そもそも入力文が長くなればなるほど、Attentionがバラけるのか知らんけど、返答が超ぽんこつになる
  • 入力トークンの最大値はカタログスペックだ、信じてはいけない

返答する口調や言語が入力に引っ張られまくる

  • 超重要!フランクな口調で返事しろ!みたいな感じ(Markdownの強調とかも使う)で書いてるのに、ですますで返事する
  • そもそも日本語で返事しろと書いてるのに日本語ですらなくなる
  • 丁寧に話しかけたら、めっちゃフランクな返事が返ってくるような事態は稀だし、英語で話しかけられたら英語で返すのも当たり前だから、仕方ないよね

USO800 Certified

  • いわゆるハルシネーション。人が自信ないことはLLMも自信ない。当たり前だが
  • ぱっと見わからないところにしれっと嘘を混ぜてくる。プログラミング中も混ざる。そんなメソッドはないと言うておろう…!
  • 新しいバージョンと古いバージョンの使い方を混ぜて覚えてるので、例えばGPT-4oにAPIの叩き方聞いたら、太古の昔の仕様と今の仕様を混ぜて答えてくる
  • すごくマイナーなことは明らかに嘘っぽい返事になる。マイナーすぎてAttentionが妙なとこに飛んでるのかなあ…
  • 自信なさそうなことは素直に言え、と書くだけで、8割方排除できる。あととても申し訳なさそうに返事してくる。かわいい。

人の当たり前や思い込みが通じない

  • 認知バイアスが存在しない。アリスという名の人物はオッサンかもしれないし、9.11は9,9よりも大きいかもしれない
  • なので、そのような認知バイアスも含めて、一から十まで説き伏せるかのように正確かつ厳密にプロンプトを書く必要がある。むり。
  • シンボルグラウンディング問題の解決手法も、人が勝手に持ってる「常識」をデータセットとして用意するプロセスにすぎないかもしれないね
  • でもそんなことを目いっぱいやると推論性能が落ちるらしく「いい塩梅」が難しい。LLM作ってる中の人がめっちゃ困ってるのはたぶんそのへん
  • 真に人っぽいAIを作るためには、入力するデータセットを、人間が認知できる狭い世界で生まれたデータに偏らせるとかやるといいんだろう

『推論』してるようでしてない

  • 『文章を書くことでしか考えることができない』という変な癖がある。人間も確かにそうだけど、その傾向がとてもひどい
  • なので初期のころに流行った「ステップバイステップで考えてください」とかはまだ余裕で有効
  • 初手(Zero-shot)の回答はだいたいぽんこつなので、ありったけダメ出ししよう
  • わかんないことがわかんないなら「今のあなたの回答は60点です、100点になるよう頑張ってください」とオウム返しするとよい。ひどいユーザーだなあ
  • 上記やその類似プロンプトのループを自動化して無限に回答をリファインさせる手法もある。いわゆるChain-of-Thoughtやらその亜種やら

「脳内」をLLMで実装する

OpenAI o1というなんか新しいやつが出ました。

openai.com

今までの評価ループをぐるぐる回して試行錯誤させるプロセスをアルゴリズム的に組んでいた部分を、代わりに自分自身で行えるようトレーニングしたモデルってことですかね。

たぶん普通の質問したら、今までとたいして変わらない回答が返ってきて、「処理が遅いだけやん!」って失望してる人も割と居るんじゃないかと思いますが、難しい疑問を簡単な問い合わせで解決できる方法の一つとしては有力でしょう。

あと、これはまだはじまりにすぎないって感じなので、最初のテスト版を触って失望するのはまだ早いかなぁと。

似たようなことを既存のLLMでできないの?

真似事レベルなら、プロンプトの工夫+再評価させるループを組むコードで、できると思います。

一度考えをユーザーから見えない部分で繰り返しリファインしてまとめさせてから、その結果を使って再度発言させるって形にすれば、どうにかなりそうですよね。

OpenAI o1は論理面に絞って推論させてるので、ぱっと見地味でつまらない、っていう評価をする人も居ると思うんですけど、同様なことを人間の心の理論に沿った方向で推論させる(ユーザーが今抱いている感情は何かとか、過去ログからユーザーの発言に至る背景を探せとか)なら、より人っぽい出力をさせるという方向での改善ができると思います。

そういうならアンタがやってよ

めんどくさいからだれかやって。

メインサーバ移行

本日、だいぶ長い間放置していた、メインサーバの新サーバへの移行作業を決行しました。

年払いの利用期間の区切りが7月末だった、というのもありますが…

これで性能が大きく改善した…わけではなくて、正直体感で気づくような違いは何もないと思うんですが、たまにOSインストールからごっそりリフレッシュ作業を行うのは悪くはないと思うのです。たぶん。

移行メモ

1.旧サーバと利用期間が重なるように、先に新サーバを契約する

  • 年払いの場合、もったいないのでちゃんと契約期間を見て計画的に準備すること
  • さくらのVPSは、契約後72時間はOP25Bの制限があるので注意すること
  • お試し期間なしですぐに費用を支払って、OP25Bを除く制限を全解除すること

2.旧サーバと新サーバをローカルネットワーク機能でつなぐ

  • 仮想スイッチを1個作り、旧サーバと新サーバの2番目か3番目のNICをスイッチにつなぐ
  • 両者に適当な固定IPを割り当てる
  • この接続は後でデータ転送に使う

3.ふつうにFreeBSDをインストールして、アップデートまで済ませておく

  • 1番目のNICIPv4設定だけを済ませて、IPv6は後回し
  • 2・3番目は後回し
  • いまどき32bit互換ライブラリは要らない
  • 終わったら再起動して、2.の工程でつなげたデータ転送用ローカルネットワークのIPを割り当てる
  • 忘れないうちに1番目のNICIPv6設定もしておくとよい

4.ネットワーク越しにデータ転送

  • /home など巨大なやつはrsyncで。uid・gidの設定をスーパーユーザーにしておかないとパーミッションエラーになるので注意
  • /etc /usr/local/etc /var/db などは tar と nc の合わせ技で。ただしセキュリティもへったくれもないので手早く済ますこと。
# 受け側
nc -l ポート | pv | tar xz -C /ディレクトリ
# 送り側
tar czf - -C /ディレクトリ 転送したいディレクトリ名 | pv | nc サーバIP ポート
# ToDo シンボリックリンクの扱いのオプションをtarに加えたほうがいいかも
# あと文字コードエラーになりやすいので大量のファイルを正確にコピーするならrsyncで
  • /var/db/freebsd-updateにゴミがたくさんあるので、/var/db全体を転送するなら先に消しておくこと
  • /var全体は/var/runなどがあるので除外設定を考えるか別々に転送したほうがいい
  • 各ユーザーのcronは/var/cronにある

EPGではじまる追跡番号の調べ方

100%興味本位で実用性皆無ではあるのですが、液晶パネルがぶっ壊れたまま放置していたPixel 5aを、ふと自前で修理してみようと思い立ち、iFixItで修理キットを発注しました。

修理説明とキットの購入はこちらから。

www.ifixit.com

謎の追跡番号

で、支払いも済ませて「出荷したよ!」という通知も来たのですが、

USPS Tracking Number : EPG????????????

という謎のEPGではじまる追跡番号を投げ込まれて、それUSPSの番号ちゃうやろ!*1どうやって追跡すんねん!とツッコミを入れるハメに。

もちろんUSPSのサイトでは「お前の出荷番号は無効だ」と言われる始末。

EPGは何の略?

で、頭のEPGに着目して、そういう略称の国際小包サービスがないかと調べたら…ありました。

ePost Globalというサービスだそうです。

https://epostglobalshipping.com/

追跡サービスはこっち。

https://epgtrack.com/

入力したら、6/2に航空機に載ったというところまでわかりましたし、本来のUSPSの番号も判明しました。

ePost Globalの追跡画面

…ところで、いつ着くんでしょうね?このまま更新されないとかいう流れの嫌な予感が…

*1:USPSの番号はアルファベット2文字+数字9桁+発国の2文字コード

10Gbps Ethernetを使う場合は、せめてCAT6のケーブルを使おう

言いたいことはタイトルの通りで終わっちゃいました。よろしくお願いします。

規格上はCAT6Aが必要

まず、理屈上では10GBASE-T帯域幅400MHzを要求するので、500MHzまで対応するCAT6Aがふつうは必要です。終わり。

…そんなんわかっとるわいって感じですね。じゃあ現実問題としてどの程度の影響があるのでしょうか。

実はCAT5eケーブルでもリンクアップする

会社のネットワーク環境の見直しで、最近じわじわと10Gbps化を進めているのですが、昔敷設したケーブルの中で、30mのCAT5eケーブルがあり、規格上は当然10Gbpsを通せないので、ネックになっていました。

ケーブルを引き直すのもめんどくさいし、とりあえずワンチャン動くかもしれないからつないでみようってことで、その両端に10Gbps対応のL2スイッチをつないだら、なんとリンクアップしちゃって、問題なくパケットも通ったんですよね。なんでやねん。

でも、内部でそれなりにエラーが起きている

動いちゃったからこれでいいや~と思っていたんですが、げんじつはきびしい。

片方のL2スイッチのパケット統計画面を見てみたら、他の似たようなケーブル長の区間と比べて、3桁4桁(100~1000倍)増えた、チェックサムエラーや符号化エラーの数値が出ていました。これあかんやつや。

仕方ないので、頑張ってCAT6Aのケーブルを買って引き直したら、まともに戻りました。そらそうだ。

他、経験上の違い

  • CAT5eに10Gbpsを通すと、リンクアップするけど、けっこうパケットエラーが出る。
  • CAT6・CAT6Aはどちらもパケット100万個あたり10個未満で、目をつぶれる程度。6Aと6で有意差はなかった。

ちもろぐさんで試していたのは下記の通りでした。

chimolog.co

CAT5eのベンチマーク結果の「リンクアップするけど微妙にグラフがばたついている」のが、パケットエラーによる破棄が多く発生している影響を可視化できている感じかなあと思います。6と6Aで大差ないのも一緒ですね。

CAT7とか8とかはとりあえず要らないのも同意…