著者: ArweaveOasis, 出典: @ArweaveOasis Twitter
この講演は、サウスカロライナで開催された初めてのAO開発者カンファレンスでSamが行った基調講演で、AOとErlang言語を中心としたトピックでした。以下が講演の全文です、お楽しみください!
これは私にとって、特にエキサイティングなプレゼンテーションです。まず最初に、AOがどうやって生まれたのか、ErlangがどうやってAOにフィットするのか、そしてAOが私たちのやっている分散コンピューティングの実験にどうフィットするのかを説明します。
私が初めてコンピュータに触れたのは、両親が買ってくれた550MHzのCPU、32メガバイトのラムのコンピュータでした。おそらく90年代半ばのコンピュータ構成だったと思います。
使い始めた瞬間に虜になり、その感覚は止まりませんでした。ちょうどインターネットが普及し始めた頃でした。自分のコンピュータで楽しいことができるだけでなく、他の人のコンピュータに接続して、他の人のコンピュータの情報を閲覧することもできた。これはとてもクールでエキサイティングなことだと思ったし、私の個人としての歩みを形作ってくれた。情報空間を共有することができるのだ。
時が経つにつれて、私たちすべての種がサイバー空間にどんどん引き込まれていき、その空間は単に情報を閲覧するだけの場所ではなくなっていきました。お互いにコミュニケーションをとり、お互いを知ることができる場所となった。ここには私がよく知っている人たちが大勢いるようなものですが、オフラインで顔を合わせている時間は、私たちがお互いにコミュニケーションをとっている時間の2%か3%くらいしかないでしょう。
とにかく、ウェブに出会ったとき、私はその魅力にとりつかれました。でも、世界で一番クールなのはスーパーコンピューターだと思う。
見た目はすごいし、たくさんの計算をして、マシンに問題を解かせることもできる。しかし、それはスーパーコンピューターだ。90年代から、気候科学の実験をするために日本政府によって設置されたと思います。その時点では、マシンの寿命が尽きるまで、実際に個人的なプログラムを走らせることができたのは、わずか3ダースほどだったと思います。
それで考えたんだが、我々には情報共有のためのエンジニアリングがあるのに、なぜ巨大なコンピューターをみんなで共有できないんだろう?
インターネットがあるのなら、みんなでアプリケーションスペースを共有し、互いに作用し合えるようなプログラムを作ることはできないのだろうか?
それはいいアイデアだと思った。当時、サーバー間でパケットを送ることができるなど、ある程度は実際に行われていましたが、非常に不便で遅かったため、建設的な発展には至りませんでした。
Erlangに出会ったのは、ちょうど大学に行こうとしていた時でした。これは私が初めて見つけたプログラミング言語やオペレーティングシステムで、小さな計算ユニットのような計算のプロセスが誰にでも実行できて、この並列環境の中で自然に相互作用するという考えを直感的に表現できるものでした。それがErlangが提供しようとしているものです。マシンを起動して、その中でこの環境を動かすことができます。それはほとんどオペレーティングシステムのようなもので、同じ環境で多くの異なるアプリケーションを動かすことができます。
それから大学に行って、大きな共有Unixボックスがある経験をしました。
これは80人から100人程度の規模です。しかし、まだ楽しさとコンポーザビリティの一部を見ることができます。シェルスクリプトを書いて、あるユーザーにシステム内の別のユーザーを突かせたことを覚えています。そして、そのユーザーが突かれると連鎖反応を起こすんだ。それは楽しいプラットフォームでしたが、分散したオープンなスーパーコンピューターの夢にはまだほど遠いものでした。
その後、イーサリアムに初めて触れました。当時、イーサリアムは世界のコンピューターと呼ばれていました。
私は思った!私が探していたのは、分散コンピューティングだけでなく、コンピュータサイエンスではSingle System Image SSIと呼ばれる環境なのかもしれません。多くの異なるコンピュータを1つのコンピュータのように見せ、それらをシームレスに操作できるようにするのです。
ですから、SSIを搭載しているのはクールですし、トラストレスでもあります。このコンピューター上でプログラムが実行されれば、誰も信用する必要はありません。これは今日のインターネットの構造とは異なるもので、私たちが利用しているウェブサービスはすべて、実際、現在私たちが利用しているサービスはほとんどすべて、サービスを提供している人を信頼する必要があります。
エーテルは異なる世界観を提供します。私たちは世界中に分散したスーパーコンピューターを持つことができ、全人類のコンピューティングを統一することができる。コードは法律である』というのが当時の考えだったが、後に『コードは法律である』という信条を破るために意図的にプロトコルを破ったことで、この言葉は物議を醸すことになった。
とにかく、私はクールだと思った。当時、私はICOで15ドルも使うほど単純でした。このトークンが欲しいから、計算をしに行けると思ったからです。
彼らがこれを構築したとき、分散型ワールドコンピューターという当初のビジョンは実現しなかった。その代わりに、巨大な金融経済が構築された。信用を必要としない現実の状態変化があれば、分散型の金融エコシステム全体を生み出すことができることがわかった。これらのマシンには1000億ドル以上の価値が蓄えられている。これは本当に驚くべきイノベーションです。広範囲に影響を及ぼすものです。
しかし、私のスーパーコンピューターはどこにあるのでしょうか?スーパーコンピューターではない。何が起きたんだ?今イーサを使おうとすると、率直に言って、バカバカしくなる。
彼らが本当に信じられないような仕事をたくさんしたことは否定できない。しかし、開始当時に言われていた世界のコンピューターとはかけ離れている。イーサの平均取引手数料は定期的に約25ドルに跳ね上がるが、これは誰が何を所有しているかというステータスの記録を更新するためにちょっとした計算をしているだけだ。
基本的には、1970年代のIBMメインフレームのようなものだ。一体どうしてこうなったのか?
さて、その答えは共有メモリシステムです。イーサネットでは、ネットワーク上のすべてのユーザー間でグローバルに共有されたメモリを持っているわけです。10,000から60,000のネットワークノードがあり、それらすべてがプログラムの状態の信頼性を維持しています。
つまり、誰もがこの状態遷移が機能するかどうかを検証しているのです。しかし、これらのプログラムには、プログラムごと、ユーザーごとに、単一の実行スレッドにまたがる共有メモリがあります。そのため、イーサ上で計算を実行したいときは、1つのスレッド、1つのキューがあり、誰もが計算するプログラムをそのキューの先頭に追加し、キューに入れます。
通常の分散システム設計では、このStop the world state updatesと呼びます。つまり、あるユーザーがやってくると、ワールドを停止し、誰も使うことができなくなり、次のユーザーが行くことができるようになります。これは純粋にシングルスレッドのキューであり、スーパーコンピューターとは明らかに逆のケースだ。電卓でやることよりもさらに少ない。
これはソラーナの地図です。世界中にさまざまなノードがあり、イーサよりもはるかに高速だが、ここで話している内容では、はるかに高速では不十分だ。
そこで、世界のコンピュータ、分散型コンピュータを作りたいとします。ブロックを1つずつ生成するためにキューイングするのは明らかにうまくいきません。イーサは最初に共有メモリというアプローチを取りましたが、今では一種の盲目的な崇拝に変わり、誰もがイーサをソリューションとして見ています。そしてすべてがその考え方の中で構築されている。
しかし実際には、共有メモリは並列性を実装しようとする2つの主要なパラダイムのうちの1つにすぎません。そこで、このすべてをどのように説明しようかと考えていたとき、共有メモリは悪魔という言葉を思い出しました。
この言葉はErlangのもう一人の共同発明者であるジョー・アームストロングの言葉です。問題をとても正確に要約していると思います。暗号の世界にいると、誰もこの問題について話していないことがわかりますが、コンピュータサイエンスの世界では60年も議論されているので、興味深い問題です。
ジョーは、データを共有するスレッドは独立して並列実行できないと書いています。シングルコア マシンでは問題にはなりませんが、マルチコア CPU では問題になります。
データを共有する実行の時点で、その実行は並列ではなく直列になります。これは、実行のスレッドが 1 つしかないイーサネットでまさに起こっていることです。そしてソラナでは、いくつかの並列スレッドを持っていますが、同じマシン内でのみです。情報を転送したり、同じエージェントとやりとりしたりするたびに、そのメモリへのアクセスを再びロックする必要がある。スレッド内のクリティカルな領域は、シリアルのボトルネックを引き起こし、スケーラビリティを制限します。
本当に高いパフォーマンスを望むなら、アプリケーションが何も共有しないようにしなければなりません。これにより、多くの独立したCPUコアにまたがってソリューションを複製することができ、CPUコアをスレッドに交換することができます。
これは、現在の分散型コンピューティングシステムがスケールしない理由の正確な説明だと思います。
そこで幸いなことに、この問題に遭遇したのは歴史上私たちだけではありません。この画像はErlangの生みの親であるRobert Verdingの1985年の仕事です。興味深いことに、最初のユースケースは多くの異なる電話があったときに、これらの電話をすべて異なる実行スレッドで管理させる方法でした。
明らかに、彼らは同じロックと共有メモリを待つことで問題を解決しませんでした。彼らは1985年に別の解決策を試みましたが、これがこの種の機能を実装する方法の最良の例だと思います。驚くべきことに、これを暗号に応用した人はまだいません。
このソリューションの基本的な考え方は、2つのスレッドがロックされ、互いに状態の断片にアクセスするのを待つというものです。一方が更新し、もう一方が待ち、そしてもう一方が更新し、次の一方がアクセスできる。この巨大なキューでは、必要な状態の断片を送信しているだけだ。必要な情報だけを共有し、お互いを待つことはない。すべてが非同期かつ並列に実行される。
例として、トムがAOで計算プロセスを実行しているとします。彼は私にメッセージを送り、私はそれに返信するかもしれませんが、私はトムの返信を待たず、他のことを続けます。トムも私を待たない。基本的にすべてが非同期で、グローバル・コンピュータを作ることができるアーキテクチャに見えてきた。つまり、これを接続すると、情報が適切な人にしか流れないという図式が見えてくる。グローバルに共有されるステートではなく、ローカルに共有されるステートがあり、渡される必要のある情報だけが渡され、すべてがはるかに効率的に実行されます。
ですから、このモデルを使う場合、同時に異なるメッセージに取り組むスレッドを多数、あるいはそれ以上持つことができます。これは少し複雑に見えるかもしれませんが、学術的にはそういうことなのです。
2008年に分散マルチカーネル・オペレーティング・システムを構築したバレルフィッシュ・チームにいたアンディという人が、これに関する良い論文を書いたことがある。彼らは研究の過程でシミュレーションを行い、共有メモリを持つマシンを何千ものコアを持つようにスケールアップしたところ、計算時間の約92%をロック競合の使用に費やすという結論に達した。しかし、すべてが非同期で行われ、適切な時点で他の誰かが計算する必要がある情報だけが共有されるシステムでは、すべてがはるかにスムーズに実行され、望むだけスケールアップすることができます。
そうして私たちはAOという解決策を思いついたのです。
AOは「Actor Oriented(アクター指向)」の略です。 AOの以前の名前は実はHyperbeamで、これはErlangが動作する仮想マシンです。
ですからErlangはAOや私たちが作るもの全てと深く関わっています。80年代の電話のようなことはもうしませんが、今でもとても近いです。
AOを実践していると、非同期通信や並列実行のパワーが見えてきます。このErlangはこのアプローチのパイオニアで、私たちは今それを分散環境に適用しています。コミュニティメンバーはすでにこれをうまく活用しています。
この画像はGather Chatというアプリケーションです。これはAOの上で開発されており、画面上の個々のキャラクターはプロセスであることができ、それらはすべて並列で任意の数の計算を行うことができます。お互いにステートの一部を送信し、お互いを待つことはない。私たちは直感的に、AOの上に構築する最初のものはチャットルームであるべきだと感じています。
イーサリアム上にチャットルームが構築されることは想像できないでしょう。なぜなら、メッセージを送るのに25ドルも使うのであれば、人々にとってそれほど面白いものにはならないからです。
これはインドのチームがAO上で作ったゲーム「The Grid」です。AO上のプロセスで、適切な人だけに適切なメッセージを送り、このような、信頼する必要のない中立的なネットワークを構築します。信頼できる、検証可能な、中立的なサイバースペース体験。このゲームでは、すべてのボットはプロセス上で動作するAIエージェントである。このゲームでは、すべてのボットはプロセス上で動作するAIエージェントであり、任意の数の計算を行うことができ、メッセージングシステムを通じて他の人と相互作用する。
私たちは約3ヶ月前にAOのテストネットワークでライブを開始しました。AOは、分散型コンピューティングの分野における人々の想像力と創造性を解き放つものだと思います。私たちはAO上でLlama 3を実行し、完全に分散化されたLLM(大規模言語モデル)を実装することさえできました。その場合でも、非同期操作のため気づかないでしょうし、このサイズの計算はプロセスの動作に影響を与えません。
つまり、この並列、非同期コンピューティングモデルの核となる原則は、私たちが本当に会話をしたいと思わない限り、私の計算があなたの計算に影響を及ぼすべきではないということです。そしてそれは、あなたが私にメッセージを送り、私がそのメッセージで何をすべきかを考えるだけの問題なのです。つまり、人間のためのグローバルな共有コンピュータのように見え始めているのです。それが分散型コンピューティングの究極の形だと考えています。
この巨大なグローバル・コンピュータにとって、私たちのArweave永続ストレージ・ネットワークは非常に重要な部分です。これは、ネットワーク上に存在する50億の情報が、突然あなたのローカル・ハードディスクの一部になることを意味します。そのため、あなたは好きなものを何でも作ることができ、人々はあなたのアプリがリリース後に変更されることはないと信頼することができる。私たちが話した分散型金融のようなこともできる。
昨夜、このトークのスライドを作っているときに、Erlangの作者であるRobertのフォーラムでの投稿を偶然見つけました。私が長い間心の奥底で直感的に知っていたことを、これほどエレガントに表現してくれました。
Erlangを設計して、その言語機能をどう使うかを考えるとき、私たちはアプリケーションというよりもオペレーティングシステムに沿って考えます。私はErlangを並行処理をする言語というよりも、言語を持つオペレーティングシステムとして考える傾向があります。
Erlangを使ったことがある人なら同じように感じるでしょう。どの言語を使うかはそれほど重要ではなく、システム内のすべてのトランザクションはメッセージを送信することで行われるという考えの下にあるセマンティクスが重要なのです。また、これはオペレーティング・システムについての考え方も示しています。
ですから、私たちがAOを構築していたとき、人々がより簡単に使用できるようにするためには、操作できるユーザーフレンドリーな環境が必要だと気づきました。それがAOSを作った理由です。
暗号空間で働いたことがある人なら、イーサリアム上でスマートコントラクトをデプロイしようとすると、信じられないような無駄が発生することに気づくでしょう。というのも、このストップ・ザ・ワールド・ステート・アップデートの共有ステートメカニズムにコードを書き込まなければならないからです。
一方、AOSでは、AOSと入力するだけで、特定の何かに使用できる新しいプロセスを開いてくれます。このインタラクションは通常のコマンドラインインターフェイスのように感じられ、このシステムの初期ユーザーから得た最大のフィードバックのひとつは、使っていて自然で楽しいということです。例えば、メッセージを受け取ったときに、そのメッセージに応答するプロセッサやコードのスニペットをインストールしていないと、コンソールにそのメッセージが表示され、自分のプロセスで何が起こっているかをリアルタイムで見ることができる。まるで自分の端末をこの巨大な分散スーパーコンピューターに接続しているようなものだ。
Erlang言語自体はどうですか?率直に言って、こんな感じで、最新の標準としてはあまりユーザーフレンドリーではありません。おそらくPrologと呼ばれる1960年代のシステムをベースにしているからでしょう。
それで結局、私たちはLUAを使うことにしました。90年代初頭に作られたもので、非常に安定しています。JavaScriptはErlangのようなもので、たくさんのクレイジーなものの上に乗っかっているようなものでした。
しかし、LUAはその言語の核となるエッセンスであり、シンプルで理解しやすく、時間の経過とともに追加されたクレイジーなものはすべてありません。シンプルで純粋で、学びやすいんだ。数日前、Xで@DeFi_Dadという人から連絡をもらったんだけど、彼は開発者ではないけど、このシステムをとても気に入っていて、実際にプログラミングを始めることができたんだ。
そう、LUAは直感的で親しみやすく、誰でもアプリケーションを作り始めることができる。技術的なバックグラウンドを持たない人でも、この分散型スーパーコンピュータをベースにした最初のアプリケーションを作れる可能性は十分にあると思います。興味深いことに、LuaとErlangの組み合わせを考えたのは私たちだけではありません。
実際、ロバートはLurelというものを作りました。