このプロジェクトについて
NEAT-AI-coreは、ニューラルネットワークの重みとトポロジーの両方を進化させるアルゴリズムであるNEAT (NeuroEvolution of Augmenting Topologies) の実装であるNEAT-AIの共有ネイティブRustコアです。このリポジトリはCargoワークスペースであり、そのメンバーであるneat-coreクレートに共有計算ライブラリとテストが含まれています。
このクレートが提供するもの:プロジェクトで「クリーチャー」と呼ばれる単一の進化個体に多くのレコードを処理させるために使用される、スコアリング、損失、およびSIMDカーネルです。デフォルトビルドとwasm32ビルドはシングルスレッドパスを採用しています。parallel Cargo機能を有効にすると、ネイティブターゲットでrayonベースのデータ並列レコードスコアリングが追加されます。逐次処理と並列処理の両方のスコアリングパスは、8レコードバッチのSIMDパス、それに続く4レコードグループ、およびスカラーテイルによるフォワードパスを駆動します。READMEによると、コミット済みのプロダクショントポロジーにおいて、セーフカーネルには測定可能なプリパスコストがあるため、独自のロード時検証を持つユーザーにはチェックなしのツイン関数が推奨されており、また、1コアあたりの性能はネイティブレーンがwasm32レーンを上回ると報告されています。
スコアリングAPI:入力と出力にはフラットで連続的なレイアウトを使用します。レコードiは inputs[i * stride .. i * stride + stride] を読み取り、その出力は out[i * num_outputs .. (i + 1) * num_outputs] に格納されます。以前のレコードごとのベクトルラッパーは、まず非推奨となり、その後削除されました。そのため、呼び出し側はレコードを1つのバッファにパックしてフラットなエントリポイントを呼び出す必要があります。ストライドがゼロであるか、バッファがレコードの整数倍でない場合は、静かにスライスミスをするのではなくパニックが発生します。
コンパイル済みネットワークは構築後は読み取り専用です。フィールドはプライベートであり、借用のみのアクセサを通じて公開されています。from_partsコンストラクタは、メモリ上のニューロンとシナプスからネットワークを構築し、バッファベースのコンストラクタと同じ検証を適用し、テーブルをオーバーランするシナプススパンを拒否します。READMEでは、これがダウンストリームの消費者にとって破壊的変更であることが記されています。
機能フラグ:parallelはデフォルトでオフであるため、デフォルトおよびwasm32ビルドではrayonシンボルは取り込まれません。checked-gather4もデフォルトでオフであり、wasm32のgather4ヘルパーに境界チェック付きのインデックス参照を復元します。SIMDモジュールのすべてのカーネルは、スパンを検証し、契約が守られていない場合にパニックするセーフ関数と、ロード時のインデックス不変性を安全契約とするチェックなしのツイン関数として提供されます。
WebAssembly:プッシュごとに2つのバンドルが公開されます。新しいリビジョンで固定されるwasm64 Memory64ビルドと、ロールバックウィンドウとして保持される変更のないwasm32ビルドです。それぞれにチェックサムサイドカーとSBOMが付属し、リリース前にバンドルおよびアーキテクチャのパリティチェックが行われます。
ビルドと品質:開発はテスト駆動開発(TDD)に従っています。ローカルの品質ゲートでは、フォーマット、clippy、テスト、ドキュメント、ライセンスおよびアドバイザリチェック、そしてbatsシェルスイートテストが実行され、CIはプルリクエストおよび手動ディスパッチで運用されます。ルートマニフェストでは、ワークスペース全体でdevおよびreleaseプロファイルが定義されています(高速な開発再ビルドのためのline-tables-onlyデバッグ情報、リリース用のopt-level 3、fat LTO、および単一のcodegenユニット)。一方、target-cpu=nativeは、ここで固定せず、意図的にダウンストリームのバイナリ消費者に委ねられています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.