프로젝트 소개

NEAT-AI-core는 신경망의 가중치와 토폴로지를 모두 진화시키는 알고리즘인 NEAT(NeuroEvolution of Augmenting Topologies)의 구현체인 NEAT-AI의 공유 네이티브 Rust 코어입니다. 이 저장소는 Cargo 워크스페이스이며, 멤버인 neat-core 크레이트는 공유 계산 라이브러리와 테스트를 포함하고 있습니다. 크레이트 제공 기능: 프로젝트에서 '크리처(creature)'라고 부르는 단일 진화 개체를 통해 많은 레코드를 처리하는 데 사용되는 스코어링, 손실 및 SIMD 커널을 제공합니다. 기본 빌드와 wasm32 빌드는 단일 스레드 경로를 따르며, parallel Cargo 기능을 활성화하면 네이티브 타겟에서 rayon 기반의 데이터 병렬 레코드 스코어링이 추가됩니다. 순차 및 병렬 스코어링 경로 모두 8개 레코드 배치 SIMD 경로를 거쳐 4개 레코드 그룹, 그리고 스칼라 테일(scalar tail) 순으로 포워드 패스를 구동합니다. README에 따르면, 확정된 프로덕션 토폴로지에서 safe 커널은 측정 가능한 프리패스 비용이 발생하므로, 자체 로드 타임 검증을 갖춘 사용자는 unchecked 쌍(twins)을 사용하도록 안내하며, 네이티브 레인이 코어당 wasm32 레인보다 성능이 뛰어납니다. 스코어링 API: 입력과 출력은 평탄하고 연속적인 레이아웃을 사용합니다. 레코드 i는 inputs[i * stride .. i * stride + stride]를 읽고, 출력은 out[i * num_outputs .. (i + 1) * num_outputs]에 저장됩니다. 기존의 레코드별 벡터 래퍼는 먼저 deprecated 처리된 후 제거되었으므로, 호출자는 레코드를 하나의 버퍼에 패킹하여 평탄한 진입점을 호출해야 합니다. stride가 0이거나 버퍼가 레코드의 정수 배가 아닌 경우, 조용히 잘못 슬라이싱하는 대신 패닉(panic)이 발생합니다. 컴파일된 네트워크는 생성 후 읽기 전용입니다. 필드는 프라이빗하며 대여 전용(borrow-only) 액세서리를 통해 노출됩니다. from_parts 생성자는 메모리 내 뉴런과 시냅스로 네트워크를 구축하며, 버퍼 기반 생성자와 동일한 검증을 적용하고 테이블을 초과하는 시냅스 스팬(synapse span)을 거부합니다. README는 이것이 다운스트림 소비자에게 중대한 변경 사항(breaking change)임을 명시합니다. 기능 플래그: parallel은 기본적으로 꺼져 있어 기본 및 wasm32 빌드에는 rayon 심볼이 포함되지 않습니다. checked-gather4 또한 기본적으로 꺼져 있으며, wasm32 gather4 헬퍼에서 경계 검사 인덱싱을 복구합니다. SIMD 모듈의 모든 커널은 스팬을 검증하고 계약이 준수되지 않을 때 패닉을 일으키는 safe 함수와, 로드 타임 인덱스 불변성을 안전 계약으로 하는 unchecked 쌍으로 제공됩니다. WebAssembly: 각 푸시(push)는 두 개의 번들을 게시합니다. 최신 리비전이 고정하는 wasm64 Memory64 빌드와 롤백 윈도우로 유지되는 변경되지 않은 wasm32 빌드입니다. 각각은 자체 체크섬 사이드카와 SBOM을 가지며, 릴리스 전 번들 및 아키텍처 패리티 체크를 거칩니다. 빌드 및 품질: 개발은 테스트 주도 개발(TDD)을 따릅니다. 로컬 품질 게이트는 포맷팅, clippy, 테스트, 문서, 라이선스 및 권고 사항 체크, 그리고 bats 쉘 스위트 테스트를 실행하며, CI는 풀 리퀘스트 및 수동 디스패치 시 작동합니다. 루트 매니페스트는 워크스페이스 전체에 대해 dev 및 release 프로필을 정의합니다(빠른 개발 재빌드를 위한 line-tables-only 디버그 정보, 릴리스를 위한 opt-level 3, fat LTO 및 단일 codegen 유닛). target-cpu=native는 여기서 고정하지 않고 다운스트림 바이너리 소비자가 결정하도록 의도적으로 남겨두었습니다.