blob: 401ddfb19668d8334ba2fe2e7fecdc0e985a329e [file] [log] [blame] [edit]
// Copyright (c) Meta Platforms, Inc. and affiliates.
namespace vkgraph;
// Update after any BC breaking changes.
file_identifier "VK00";
table OperatorCall {
node_id:uint;
name:string;
args:[int];
}
enum VkDataType : byte {
BOOL = 0,
UINT8 = 1,
INT8 = 2,
INT32 = 3,
FLOAT16 = 4,
FLOAT32 = 5,
}
// Describes what kind of GPU resource should be used to represent a tensor. The
// int values assigned to each entry must match the corresponding entry in
// api::StorageType.
enum VkStorageType : ubyte {
BUFFER = 0,
TEXTURE_3D = 1,
TEXTURE_2D = 2,
DEFAULT_STORAGE = 255,
}
// Describes how memory should be laid out in GPU memory. See the GPUMemoryLayout
// enum class in PyTorch Vulkan for more details. The int values assigned to each
// entry must match the corresponding entry in utils::GPUMemoryLayout.
enum VkMemoryLayout : ubyte {
TENSOR_WIDTH_PACKED = 0,
TENSOR_HEIGHT_PACKED = 1,
TENSOR_CHANNELS_PACKED = 2,
DEFAULT_LAYOUT = 255,
}
table VkTensor {
// Type of the tensor elements.
datatype:VkDataType;
// Shape dimensions.
dims:[uint];
// Index to the program's constant data. Negative indicates tensor is non-constant.
constant_id:int;
// Index to the shared memory object. Negative indicates the tensor doesn't share memory.
mem_obj_id:int;
// Storage type that should be used to represent this tensor
storage_type:VkStorageType = DEFAULT_STORAGE;
// Memory layout that should be used to represent this tensor
memory_layout:VkMemoryLayout = DEFAULT_LAYOUT;
}
table Null {}
table Int {
int_val:long;
}
table Bool {
bool_val:bool;
}
table Double {
double_val:double;
}
table String {
string_val:string;
}
table IntList {
items:[long];
}
table DoubleList {
items:[double];
}
table BoolList {
items:[bool];
}
table ValueList {
items:[int];
}
union GraphTypes {
Null,
Int,
Double,
Bool,
VkTensor,
IntList,
DoubleList,
BoolList,
ValueList,
String,
}
table VkValue {
value:GraphTypes;
}
// Abstraction to represent a region of bytes in a raw data buffer. Useful for referencing raw data
// serialized outside of the flatbuffer.
table VkBytes {
offset:ulong;
length:ulong;
}
table VkGraph {
// Schema version.
version:string;
// Objects
chain:[OperatorCall];
values:[VkValue];
// Indices
input_ids:[uint];
output_ids:[uint];
// Raw Objects (e.g. weight tensors and custom shaders)
constants:[VkBytes];
shaders:[VkBytes];
// Graph configuration
// As per flatbuffer BC/FC policy, new fields can be freely added to this
// section. It is recommended to provide default values, since older blobs
// without the field will be deserialized with the default value.
// Sets an override for the storage type and memory layout that will be used
// to represent a VkTensor if the VkTensor is not serialized with a particular
// storage type or memory layout setting
storage_type_override:VkStorageType = DEFAULT_STORAGE;
memory_layout_override:VkMemoryLayout = DEFAULT_LAYOUT;
}
root_type VkGraph;