Graph IR To ONNX#
MLX Ruby supports native JSON ONNX export for debugging plus native binary ONNX model assembly.
Ownership boundary#
Use MLX::ONNX as the public API:
MLX::ONNX.graph_ir_to_onnxMLX::ONNX.graph_ir_to_onnx_jsonMLX::ONNX.export_onnxMLX::ONNX.export_onnx_json
Implementation modules:
MLX::ONNX::Nativeowns Graph IR/ONNX export and conversion runtime logic.
Generate ONNX JSON from Graph IR payload#
Use graph_ir_to_onnx_json when you already have Graph IR payload/source.
onnx_json = MLX::ONNX.graph_ir_to_onnx_json(
payload,
opset: 18,
model_name: "demo_graph"
)
File.binwrite(
"artifacts/model_stub.json",
JSON.pretty_generate(JSON.parse(onnx_json))
)
Generate ONNX JSON directly from trace#
Use export_onnx_json to capture Graph IR + lower to ONNX JSON in one call.
onnx_json = MLX::ONNX.export_onnx_json(
trace,
x,
y,
opset: 18,
model_name: "demo_graph"
)
Export binary ONNX#
Use graph_ir_to_onnx when you already have Graph IR payload/source, or
export_onnx for direct trace -> ONNX binary export.
MLX::ONNX.graph_ir_to_onnx("artifacts/model.onnx", payload)
MLX::ONNX.export_onnx(
"artifacts/model.onnx",
trace,
x,
y,
opset: 18,
model_name: "demo_graph"
)
Both methods require a path-like target and return the written path.
External data mode#
For large models, enable external initializer data:
MLX::ONNX.graph_ir_to_onnx(
"artifacts/model.onnx",
payload,
external_data: true,
external_data_size_threshold: 1024,
external_data_file: "model.data"
)
This writes model.onnx plus model.data in the target directory.
External-data notes:
graph_ir_to_onnxandexport_onnxrequire a path-liketarget(not IO-like).external_data_size_thresholdmust be a non-negative integer.If
external_data_fileis omitted, the default is<target_basename>.data.
Next step#
Continue with WebGPU Harness And Smoke.