ADRs/0034 - FlatBuffers upgrade.md
Implemented
Proposed by: Assistant (14-04-2025) Discussed with: Paul Dubs
The libnd4j library uses FlatBuffers for serialization of neural network graphs and related data structures. The current implementation uses FlatBuffers 1.12.0 syntax and conventions, particularly for handling sequences and arrays. With the upgrade to newer versions of FlatBuffers, we need to modernize our schema definitions and code generation.
The primary challenges include:
We implement a modernized FlatBuffers integration that uses current vector syntax and build processes. This includes:
[Type] instead of Sequence)[FlatArray] instead of Sequence<FlatArray>)graph without sd prefixnamespace graph;
table SequenceItem {
name:string;
associated_variable:[FlatArray];
}
table SequenceItemRoot {
sequence_items:[SequenceItem];
}
root_type SequenceItemRoot;
execute_process(
COMMAND ${CMAKE_COMMAND} -E env "FLATC_PATH=${FLATC_EXECUTABLE}"
bash ${CMAKE_CURRENT_SOURCE_DIR}/flatc-generate.sh
RESULT_VARIABLE FLATC_RESULT
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
Modern FlatBuffers Integration:
Build System Integration:
Code Organization:
Implementation Requirements:
Migration Effort:
/libnd4j/include/graph/scheme/*.fbs
/nd4j/nd4j-backends/nd4j-api-parent/nd4j-api/src/main/java/org/nd4j/graph/
Custom Target Approach:
Manual File Generation:
Separate Build Step: