※当サイトの記事には、広告・プロモーションが含まれます。

ansible.builtin.copyの冪等性は条件付きだがファイルの内容をチェックをしているが故か

gigazine.net

強化学習をしていると、「報酬ハッキング」と呼ばれる、意図しない抜け穴を利用する動作がみられます。複雑なAIほど複雑な報酬ハッキングを行うため、「複雑な報酬ハッキングで引き起こされた誤動作」を見つけるのは非常に難しいのですが、OpenAIは、報酬ハッキングを監視するための新たな手段を開発したとのことです。

「推論モデルがユーザーにバレないように不正する現象」の検出手法をOpenAIが開発 - GIGAZINE

こうなっていくと、報酬ハッキングで引き起こされることになる誤動作をキャッチするのは、まず人間には不可能な領域ですが、OpenAIは、「OpenAI o3」など、一連の「思考の連鎖」を介して理性を強化するトレーニングを受けた大規模言語モデル(LLM)により、報酬ハッキングを監視する手段を生み出したとのこと。

「推論モデルがユーザーにバレないように不正する現象」の検出手法をOpenAIが開発 - GIGAZINE

「この『思考の連鎖モニター』を、報酬ハッキングを抑制するためにトレーニング時に適用できないか?」と思うのは自然なことだとOpenAIは述べた上で、実際に、「悪い考え」を持ったときに低い報酬を与えてみたとのこと。すると、「思考の連鎖プレッシャー」によってAIの能力は向上したものの、依然として報酬ハッキングを行う上に、「思考の連鎖」の中に意図を隠すことを学んでしまい、不正行為がモニターで検出できなくなったそうです。

「推論モデルがユーザーにバレないように不正する現象」の検出手法をOpenAIが開発 - GIGAZINE

このためOpenAIは、よりよく理解できるまで、強い「思考の連鎖」最適化プレッシャーはかけないほうがいいと述べています。

「推論モデルがユーザーにバレないように不正する現象」の検出手法をOpenAIが開発 - GIGAZINE

⇧ 結局、振出しに戻るといった感じなのか、「幻覚(ハルシネーション)」の問題は一向に改善される見通しが付かないといったところなんですかね...

まぁ、

推論(すいろん、英語inference)とは、既知の事柄を元にして未知の事柄について予想し、論じる事である。

推論 - Wikipedia

概要

推論の正しさを妥当性という。あらゆる事柄は言語において表現されるのであるから、妥当な推論には、その推論が指し示す事柄が妥当であること(意味論)、その推論が行われた状況において妥当であること(語用論)、その推論の構文が妥当であること(構文論)、が考えられる。

推論 - Wikipedia

⇧ 予想とある時点で、外れることはあるにしても、意図的に「不正行為」するのは問題外であるのですが、「推論モデル」はそのレベルにあると...

ansible.builtin.copyの冪等性は条件付きだがファイルの内容をチェックをしているが故か

「ansible.builtin.copy」モジュールを利用していて、何やら、2回目以降、処理がされていないように思っていたらば、

tech.akat.info

冪等性が保証されているため、ファイルの内容が同じ(ハッシュを比較する)であればcopyしない
そして変更があった場合は、上書きcopyされる

ansible – copyモジュールにはbackup=yesを – 忘れるために記す

⇧ 上記サイト様によりますと、「ファイルの内容が同じ」であれば処理されないと...

ということで、「ファイルの内容が同じ」場合、

  1. ファイルがまだない場合
    1. 初回
    2. 2回目以降
  2. ファイルが既にある場合
    1. 初回
    2. 2回目以降

によって、挙動が変わってくるのだが、差分チェックをしていることに由るらしい。

「SBOM(Software Bill of Materials)」のチェックのようなものを「Ansible」側が行ってくれているからということなんかね?

「SBOM(Software Bill of Materials)」とは、

ソフトウェア・ベンダーは、オープンソース商用ソフトウェアコンポーネントを組み合わせて製品を作成することが多い。ソフトウェア部品表 (SBOM) は、ソフトウェアアプリケーションのようなソフトウェア成果物を構築するために使用されるコンポーネントの目録を公表する。

ソフトウェア・サプライチェーン - Wikipedia

使用法

SBOMは、ソフトウェア製品の構築者(製造者)と購入者(顧客)の両方にとって有用である。構築者は、製品を作成するために、利用可能なオープンソースサードパーティのソフトウェアコンポーネントを活用することが多い。SBOMにより、構築者は、それらのコンポーネントが最新であることを確認し、新しい脆弱性に迅速に対応することができる。

ソフトウェア・サプライチェーン - Wikipedia

⇧ とあり、構成をチェックするような感じらしい。

「SLSA(Supply chain Levels for Software Artifacts)」的な方が近い概念なのかしら?

slsa.dev

⇧ そもそも「SBOM(Software Bill of Materials)」では「改竄」されているかどうかを気にしていないって話も出てきてはいる。

とりあえず、「ハッシュを比較する」ことで「ファイルの内容」をチェックしているらしいので、

  1. ファイルあり
  2. ファイルなし

によって「冪等性」の内容が変わってくる感じですと。

つまり、「初回」実行時の挙動が変わって来てしまうと。

例えば、「ファイルなし」での挙動を想定していたのに、別の誰かがファイルを配置済みであり、「ファイルの内容が同じ」であったりすると、意図した通りにはならないと。

「冪等性」とは?

数学において、冪等性(べきとうせい、idempotence、「巾等性」とも書くが読み方は同じ)は、大雑把に言って、ある操作を1回行っても複数回行っても結果が同じであることをいう概念である。

冪等 - Wikipedia

まれに等冪(とうべき)とも。抽象代数学、特に射影(projector)や閉包(closure)演算子に見られる特徴である。"idempotence" という単語はラテン語の "idem"(同じ=same)と"potere"(=power)から来ている。

冪等 - Wikipedia

⇧ とありますと。

そもそも、「ファイルなし」且つ、「ファイルの内容が同じ」のパターンだと、

  1. 初回の実行
  2. 2回目以降の実行

で、挙動が変わるからして「冪等性」が担保されていないんだが...

「ファイルの内容が同じ」の場合に処理をしないというのは、親切心からのことだと思うのだが、厳密な「冪等性」という意味では微妙ということになってしまう気がするのだが...

ただ、IT領域における「冪等性」が「数学」における「冪等性」と意味合いが異なるのであれば、また違った話になって来るが...

話を戻すと、毎回、真っ新な状態でのファイルのコピー処理を期待する場合は、ファイルがあれば削除する、とうことが必要になって来るのだが、「Ansible」が良しなに「SLSA(Supply chain Levels for Software Artifacts)」的な概念を取り入れようとしているのかは分からないのだが、チェック処理を担ってくれているということで、「ファイルなし」且つ、「ファイルの内容が同じ」のパターンで、

  1. 初回の実行
  2. 2回目以降の実行

の挙動が変わっても気にしなければ良いということなんですかね?

う~む、

  1. ansible.builtin.copyモジュールに厳密な冪等性を要求する
    1. 事前にコピー先のファイルの存在チェックする
    2. 既にコピー先のファイルが存在する場合はコピー先のファイルを削除する
    3. ファイルをコピー
  2. ansible.builtin.copyモジュールに厳密な冪等性を要求しない
    1. 事前にコピー先のファイルの存在チェックしない
    2. コピー先のファイルが存在していてもコピー先のファイルを削除しない
    3. ファイルをコピー

のどちらで対応すべきか悩ましい...

あと、

docs.ansible.com

⇧ 地味に分り辛い...

Parameter 内容
remote_src false default。Parameterとして設定していない場合。
  • 送信元:ローカル
  • 送信先:リモート
true
  • 送信元:リモート
  • 送信先:リモート

つまり、

  1. ファイルを転送したい場合
    remote_src: false
  2. ファイルをコピーしたい場合
    remote_src: true

ということになりますと。

で、

  • 送信元:ローカル
  • 送信先:ローカル

は、どうすれば良いのよ?と思いますよね?

『ワシもじゃ ワシもじゃ みんな!!(漫画「グラップラー刃牙」)』

公式のドキュメントを見た感じでは、

docs.ansible.com

⇧ どうやら、

  1. hosts: localhost
  2. delegate_to: localhost

など、「localhost」に対してタスクを実行するような形にする必要があるっぽい...

「Ansible」の使い方、なかなかに分かり辛過ぎるよね...

毎度モヤモヤ感が半端ない…

今回はこのへんで。