End To End Examples#
This page shows practical workflows for MLX -> Graph IR -> ONNX -> WebGPU.
Minimal script example#
require "json"
require "stringio"
require "mlx"
mx = MLX::Core
x = mx.array([[1.0, 2.0]], mx.float32)
y = mx.array([[0.5, 0.25]], mx.float32)
trace = ->(lhs, rhs) { MLX::Core.add(lhs, rhs) }
payload = MLX::ONNX.export_graph_ir(trace, x, y)
onnx_json = MLX::ONNX.graph_ir_to_onnx_json(payload, model_name: "minimal_add")
report = JSON.parse(
MLX::ONNX::Native.ir_compatibility_report_json(payload)
)
abort("unsupported ops: #{report.fetch('unsupported_ops').inspect}") unless report.fetch("unsupported_nodes").zero?
MLX::ONNX.graph_ir_to_onnx("artifacts/model.onnx", payload, model_name: "minimal_add")
MLX::ONNX::WebGPUHarness.export_onnx_webgpu_harness(
"artifacts/web_harness",
payload,
model_name: "minimal_add"
)
telemetry = MLX::ONNX::WebGPUHarness.smoke_test_onnx_webgpu_harness(
"artifacts/web_harness",
mock_ort: true
)
puts telemetry.fetch("format")
Repository task examples#
The repository already contains end-to-end export flows:
tasks/web_assets_task/export_gpt2_assets.rbtasks/web_assets_task/export_nanogpt_assets.rbtasks/web_assets_task/export_stable_diffusion_assets.rb
Run the web asset pipeline:
bundle exec rake web:assets
Browser demo integration#
Generated assets are consumed by:
web/demo/gpt2/web/demo/nanogpt/web/demo/stable_diffusion/
Use the local server task to validate demos after export:
bundle exec rake web:serve
Parity and harness checks#
Useful parity coverage examples:
test/onnx/integration/export_onnx_webgpu_harness_test.rbtest/onnx/integration/onnx_webgpu_harness_smoke_test.rbtest/onnx/integration/onnx_webgpu_harness_real_runtime_smoke_test.rb