Sobre el proyecto
NEAT-AI-core es el núcleo nativo compartido en Rust de NEAT-AI, una implementación de NEAT (NeuroEvolution of Augmenting Topologies), el algoritmo que evoluciona tanto los pesos como la topología de una red neuronal. El repositorio es un espacio de trabajo de Cargo cuyo miembro, el crate neat-core, contiene la biblioteca de cómputo compartida junto con sus pruebas.
Lo que proporciona el crate. Kernels de puntuación, pérdida y SIMD utilizados para procesar múltiples registros a través de un único individuo evolucionado, que el proyecto denomina criatura. La compilación predeterminada y la compilación wasm32 siguen una ruta de un solo hilo; habilitar la característica parallel de Cargo añade la puntuación de registros en paralelo basada en rayon para objetivos nativos. Tanto la ruta de puntuación secuencial como la paralela impulsan el paso hacia adelante a través de una ruta SIMD por lotes de 8 registros, seguida de un grupo de 4 registros y una cola escalar. El README informa que, en la topología de producción confirmada, los kernels seguros conllevan un costo de pre-paso medible, por lo que los consumidores con su propia validación en tiempo de carga son dirigidos a los gemelos no verificados (unchecked), y que el carril nativo supera al carril wasm32 por núcleo.
API de puntuación. La entrada y la salida utilizan un diseño plano y contiguo: el registro i lee inputs[i * stride .. i * stride + stride] y sus salidas aterrizan en out[i * num_outputs .. (i + 1) * num_outputs]. Los antiguos envoltorios de vectores por registro fueron primero deprecados y luego eliminados, por lo que los llamadores deben empaquetar los registros en un solo búfer y llamar a los puntos de entrada planos; un stride de cero o un búfer que no sea un número entero de registros provoca un pánico en lugar de un error silencioso de segmentación.
Las redes compiladas son de solo lectura después de su construcción. Los campos son privados y se exponen a través de accesores de solo préstamo, y un constructor from_parts construye una red a partir de neuronas y sinapsis en memoria, aplicando la misma validación que el constructor basado en búfer y rechazando un tramo de sinapsis que sobrepase la tabla. El README señala que esto es un cambio disruptivo para los consumidores downstream.
Banderas de características. parallel está desactivado por defecto, por lo que las compilaciones predeterminadas y wasm32 no incluyen símbolos de rayon; checked-gather4 también está desactivado por defecto y restaura la indexación con comprobación de límites en el ayudante gather4 de wasm32. Cada kernel en el módulo SIMD se distribuye como una función segura que valida su tramo y provoca un pánico si el contrato no se cumple, además de un gemelo no verificado cuyo contrato de seguridad es el invariante de índice en tiempo de carga.
WebAssembly. Cada push publica dos bundles: una compilación wasm64 Memory64 que las nuevas revisiones fijan, y una compilación wasm32 sin cambios mantenida como ventana de rollback, cada una con su propio archivo sidecar de checksum y SBOM, regulados por comprobaciones de bundle y paridad de arquitectura antes del lanzamiento.
Construcción y calidad. El desarrollo sigue el desarrollo guiado por pruebas (TDD); la puerta de calidad local ejecuta formateo, clippy, pruebas, documentación, comprobaciones de licencia y avisos, y la suite de shell bats, y la CI se ejerce en pull requests y despacho manual. El manifiesto raíz define los perfiles de dev y release para todo el espacio de trabajo (información de depuración line-tables-only para reconstrucciones rápidas de desarrollo; opt-level 3 con LTO fat y una sola unidad de codegen para release), mientras que target-cpu=native se deja deliberadamente a los consumidores binarios downstream en lugar de fijarse aquí.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.