akiki-vad-1.0 / assets /engine-comparison.svg
TulipAkiki's picture
Highlight Rust engine performance with benchmark plots and akiki vad examples
6d786df verified
|
Raw History Blame Contribute Delete
19.9 kB
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="1116pt" height="612pt" viewBox="0 0 1116 612" xmlns="http://www.w3.org/2000/svg" version="1.1">
<metadata>
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<cc:Work>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:date>2026-10-25T21:09:25.386580</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:creator>
<cc:Agent>
<dc:title>Matplotlib v3.11.2, https://matplotlib.org/</dc:title>
</cc:Agent>
</dc:creator>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>
</defs>
<g id="figure_1">
<g id="patch_1">
<path d="M 0 612
L 1116 612
L 1116 0
L 0 0
z
" style="fill: #ffffff"/>
</g>
<g id="axes_1">
<g id="patch_2">
<path d="M 145.08 471.24
L 455.7 471.24
L 455.7 140.76
L 145.08 140.76
z
" style="fill: #ffffff"/>
</g>
<g id="matplotlib.axis_1">
<g id="xtick_1">
<g id="line2d_1">
<path d="M 145.08 471.24
L 145.08 140.76
" clip-path="url(#p1ada784cf6)" style="fill: none; stroke: #e5ebef; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_2"/>
<g id="text_1">
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #556b78" x="145.08" y="483.097422" transform="rotate(-0 145.08 483.097422)">0</text>
</g>
</g>
<g id="xtick_2">
<g id="line2d_3">
<path d="M 210.889322 471.24
L 210.889322 140.76
" clip-path="url(#p1ada784cf6)" style="fill: none; stroke: #e5ebef; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_4"/>
<g id="text_2">
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #556b78" x="210.889322" y="483.097422" transform="rotate(-0 210.889322 483.097422)">25</text>
</g>
</g>
<g id="xtick_3">
<g id="line2d_5">
<path d="M 276.698644 471.24
L 276.698644 140.76
" clip-path="url(#p1ada784cf6)" style="fill: none; stroke: #e5ebef; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_6"/>
<g id="text_3">
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #556b78" x="276.698644" y="483.097422" transform="rotate(-0 276.698644 483.097422)">50</text>
</g>
</g>
<g id="xtick_4">
<g id="line2d_7">
<path d="M 342.507966 471.24
L 342.507966 140.76
" clip-path="url(#p1ada784cf6)" style="fill: none; stroke: #e5ebef; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_8"/>
<g id="text_4">
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #556b78" x="342.507966" y="483.097422" transform="rotate(-0 342.507966 483.097422)">75</text>
</g>
</g>
<g id="xtick_5">
<g id="line2d_9">
<path d="M 408.317288 471.24
L 408.317288 140.76
" clip-path="url(#p1ada784cf6)" style="fill: none; stroke: #e5ebef; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_10"/>
<g id="text_5">
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #556b78" x="408.317288" y="483.097422" transform="rotate(-0 408.317288 483.097422)">100</text>
</g>
</g>
<g id="text_6">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #102e3b" x="300.39" y="507.718359" transform="rotate(-0 300.39 507.718359)">Compute µs per 32 ms audio · lower is better</text>
</g>
</g>
<g id="matplotlib.axis_2">
<g id="ytick_1">
<g id="line2d_11"/>
<g id="text_7">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="141.58" y="173.633795" transform="rotate(-0 141.58 173.633795)">Akiki native Rust</text>
</g>
</g>
<g id="ytick_2">
<g id="line2d_12"/>
<g id="text_8">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="141.58" y="219.08518" transform="rotate(-0 141.58 219.08518)">tract</text>
</g>
</g>
<g id="ytick_3">
<g id="line2d_13"/>
<g id="text_9">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="141.58" y="264.537385" transform="rotate(-0 141.58 264.537385)">Candle</text>
</g>
</g>
<g id="ytick_4">
<g id="line2d_14"/>
<g id="text_10">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="141.58" y="309.98918" transform="rotate(-0 141.58 309.98918)">ONNX Runtime</text>
</g>
</g>
<g id="ytick_5">
<g id="line2d_15"/>
<g id="text_11">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="141.58" y="355.440974" transform="rotate(-0 141.58 355.440974)">Burn Flex</text>
</g>
</g>
<g id="ytick_6">
<g id="line2d_16"/>
<g id="text_12">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="141.58" y="400.892359" transform="rotate(-0 141.58 400.892359)">RTen</text>
</g>
</g>
<g id="ytick_7">
<g id="line2d_17"/>
<g id="text_13">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="141.58" y="446.344564" transform="rotate(-0 141.58 446.344564)">PyTorch eager · GEMM</text>
</g>
</g>
</g>
<g id="patch_3">
<path d="M 145.08 155.781818
L 171.432685 155.781818
L 171.432685 183.507413
L 145.08 183.507413
z
" clip-path="url(#p1ada784cf6)" style="fill: #087f83; stroke: #087f83; stroke-linejoin: miter"/>
</g>
<g id="text_14">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="175.381244" y="172.242272" transform="rotate(-0 175.381244 172.242272)">10.0 µs</text>
</g>
<g id="patch_4">
<path d="M 145.08 201.233613
L 201.415412 201.233613
L 201.415412 228.959208
L 145.08 228.959208
z
" clip-path="url(#p1ada784cf6)" style="fill: #75889a; stroke: #75889a; stroke-linejoin: miter"/>
</g>
<g id="text_15">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="205.363971" y="217.694067" transform="rotate(-0 205.363971 217.694067)">21.4 µs</text>
</g>
<g id="patch_5">
<path d="M 145.08 246.685408
L 219.578785 246.685408
L 219.578785 274.411003
L 145.08 274.411003
z
" clip-path="url(#p1ada784cf6)" style="fill: #75889a; stroke: #75889a; stroke-linejoin: miter"/>
</g>
<g id="text_16">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="223.527344" y="263.145861" transform="rotate(-0 223.527344 263.145861)">28.3 µs</text>
</g>
<g id="patch_6">
<path d="M 145.08 292.137203
L 245.560305 292.137203
L 245.560305 319.862797
L 145.08 319.862797
z
" clip-path="url(#p1ada784cf6)" style="fill: #75889a; stroke: #75889a; stroke-linejoin: miter"/>
</g>
<g id="text_17">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="249.508865" y="308.597656" transform="rotate(-0 249.508865 308.597656)">38.2 µs</text>
</g>
<g id="patch_7">
<path d="M 145.08 337.588997
L 309.479584 337.588997
L 309.479584 365.314592
L 145.08 365.314592
z
" clip-path="url(#p1ada784cf6)" style="fill: #75889a; stroke: #75889a; stroke-linejoin: miter"/>
</g>
<g id="text_18">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="313.428143" y="354.049451" transform="rotate(-0 313.428143 354.049451)">62.5 µs</text>
</g>
<g id="patch_8">
<path d="M 145.08 383.040792
L 313.980941 383.040792
L 313.980941 410.766387
L 145.08 410.766387
z
" clip-path="url(#p1ada784cf6)" style="fill: #75889a; stroke: #75889a; stroke-linejoin: miter"/>
</g>
<g id="text_19">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="317.929501" y="399.501246" transform="rotate(-0 317.929501 399.501246)">64.2 µs</text>
</g>
<g id="patch_9">
<path d="M 145.08 428.492587
L 390.375035 428.492587
L 390.375035 456.218182
L 145.08 456.218182
z
" clip-path="url(#p1ada784cf6)" style="fill: #75889a; stroke: #75889a; stroke-linejoin: miter"/>
</g>
<g id="text_20">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="394.323594" y="444.953041" transform="rotate(-0 394.323594 444.953041)">93.2 µs</text>
</g>
<g id="text_21">
<text style="font-weight: 700; font-size: 13px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="145.08" y="120.76" transform="rotate(-0 145.08 120.76)">Akiki VAD 0.2.0 · same FP32 model</text>
</g>
</g>
<g id="axes_2">
<g id="patch_10">
<path d="M 766.32 471.24
L 1076.94 471.24
L 1076.94 140.76
L 766.32 140.76
z
" style="fill: #ffffff"/>
</g>
<g id="matplotlib.axis_3">
<g id="xtick_6">
<g id="line2d_18">
<path d="M 766.32 471.24
L 766.32 140.76
" clip-path="url(#p4fdf3c15c9)" style="fill: none; stroke: #e5ebef; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_19"/>
<g id="text_22">
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #556b78" x="766.32" y="483.097422" transform="rotate(-0 766.32 483.097422)">0</text>
</g>
</g>
<g id="xtick_7">
<g id="line2d_20">
<path d="M 832.129322 471.24
L 832.129322 140.76
" clip-path="url(#p4fdf3c15c9)" style="fill: none; stroke: #e5ebef; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_21"/>
<g id="text_23">
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #556b78" x="832.129322" y="483.097422" transform="rotate(-0 832.129322 483.097422)">25</text>
</g>
</g>
<g id="xtick_8">
<g id="line2d_22">
<path d="M 897.938644 471.24
L 897.938644 140.76
" clip-path="url(#p4fdf3c15c9)" style="fill: none; stroke: #e5ebef; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_23"/>
<g id="text_24">
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #556b78" x="897.938644" y="483.097422" transform="rotate(-0 897.938644 483.097422)">50</text>
</g>
</g>
<g id="xtick_9">
<g id="line2d_24">
<path d="M 963.747966 471.24
L 963.747966 140.76
" clip-path="url(#p4fdf3c15c9)" style="fill: none; stroke: #e5ebef; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_25"/>
<g id="text_25">
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #556b78" x="963.747966" y="483.097422" transform="rotate(-0 963.747966 483.097422)">75</text>
</g>
</g>
<g id="xtick_10">
<g id="line2d_26">
<path d="M 1029.557288 471.24
L 1029.557288 140.76
" clip-path="url(#p4fdf3c15c9)" style="fill: none; stroke: #e5ebef; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_27"/>
<g id="text_26">
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #556b78" x="1029.557288" y="483.097422" transform="rotate(-0 1029.557288 483.097422)">100</text>
</g>
</g>
<g id="text_27">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: middle; fill: #102e3b" x="921.63" y="507.718359" transform="rotate(-0 921.63 507.718359)">Compute µs per 32 ms audio · lower is better</text>
</g>
</g>
<g id="matplotlib.axis_4">
<g id="ytick_8">
<g id="line2d_28"/>
<g id="text_28">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="762.82" y="179.648024" transform="rotate(-0 762.82 179.648024)">TEN · Rust + RealFFT*</text>
</g>
</g>
<g id="ytick_9">
<g id="line2d_29"/>
<g id="text_29">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="762.82" y="244.818602" transform="rotate(-0 762.82 244.818602)">Silero v5 · fixed-16k ONNX</text>
</g>
</g>
<g id="ytick_10">
<g id="line2d_30"/>
<g id="text_30">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="762.82" y="309.98877" transform="rotate(-0 762.82 309.98877)">TEN · Rust</text>
</g>
</g>
<g id="ytick_11">
<g id="line2d_31"/>
<g id="text_31">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="762.82" y="375.159757" transform="rotate(-0 762.82 375.159757)">Silero v5 · ONNX</text>
</g>
</g>
<g id="ytick_12">
<g id="line2d_32"/>
<g id="text_32">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: end; fill: #556b78" x="762.82" y="440.329925" transform="rotate(-0 762.82 440.329925)">TEN · ONNX + DSP</text>
</g>
</g>
</g>
<g id="patch_11">
<path d="M 766.32 155.781818
L 871.462238 155.781818
L 871.462238 195.535871
L 766.32 195.535871
z
" clip-path="url(#p4fdf3c15c9)" style="fill: url(#hea3788106f); stroke: #087f83; stroke-linejoin: miter"/>
</g>
<g id="text_33">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="875.410797" y="178.256501" transform="rotate(-0 875.410797 178.256501)">39.9 µs</text>
</g>
<g id="patch_12">
<path d="M 766.32 220.952396
L 887.440741 220.952396
L 887.440741 260.706448
L 766.32 260.706448
z
" clip-path="url(#p4fdf3c15c9)" style="fill: #75889a; stroke: #75889a; stroke-linejoin: miter"/>
</g>
<g id="text_34">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="891.3893" y="243.427078" transform="rotate(-0 891.3893 243.427078)">46.0 µs</text>
</g>
<g id="patch_13">
<path d="M 766.32 286.122974
L 921.52997 286.122974
L 921.52997 325.877026
L 766.32 325.877026
z
" clip-path="url(#p4fdf3c15c9)" style="fill: #087f83; stroke: #087f83; stroke-linejoin: miter"/>
</g>
<g id="text_35">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="925.478529" y="308.597656" transform="rotate(-0 925.478529 308.597656)">59.0 µs</text>
</g>
<g id="patch_14">
<path d="M 766.32 351.293552
L 924.796745 351.293552
L 924.796745 391.047604
L 766.32 391.047604
z
" clip-path="url(#p4fdf3c15c9)" style="fill: #75889a; stroke: #75889a; stroke-linejoin: miter"/>
</g>
<g id="text_36">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="928.745304" y="373.768234" transform="rotate(-0 928.745304 373.768234)">60.2 µs</text>
</g>
<g id="patch_15">
<path d="M 766.32 416.464129
L 992.346065 416.464129
L 992.346065 456.218182
L 766.32 456.218182
z
" clip-path="url(#p4fdf3c15c9)" style="fill: #75889a; stroke: #75889a; stroke-linejoin: miter"/>
</g>
<g id="text_37">
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="996.294624" y="438.938812" transform="rotate(-0 996.294624 438.938812)">85.9 µs</text>
</g>
<g id="text_38">
<text style="font-weight: 700; font-size: 13px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="766.32" y="120.76" transform="rotate(-0 766.32 120.76)">Original TEN-VAD &amp; Silero v5</text>
</g>
</g>
<g id="text_39">
<text style="font-weight: 700; font-size: 24px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #102e3b" x="50.22" y="30.6" transform="rotate(-0 50.22 30.6)">VAD models across CPU inference engines</text>
</g>
<g id="text_40">
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #556b78" x="50.22" y="61.2" transform="rotate(-0 50.22 61.2)">Historical comparison · 12–16 Oct 2026 · Ryzen 9 9900X · one CPU thread · FP32</text>
</g>
<g id="text_41">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #556b78" x="50.22" y="88.128" transform="rotate(-0 50.22 88.128)">These Akiki bars measure version 0.2.0, before the production RealFFT migration. Current 1.0 package timings are shown separately.</text>
</g>
<g id="text_42">
<text style="font-size: 9.6px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #556b78" x="50.22" y="551.412" transform="rotate(-0 50.22 551.412)">All rows include the waveform frontend. Native Rust excludes Python; other paths include their recorded host-call overhead.</text>
</g>
<g id="text_43">
<text style="font-size: 9.6px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #556b78" x="50.22" y="567.936" transform="rotate(-0 50.22 567.936)">Different fixtures and warmup/repetition counts across campaigns. 16 ms per-call medians are scaled ×2; no two-call median was measured.</text>
</g>
<g id="text_44">
<text style="font-size: 9.4px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #556b78" x="50.22" y="584.46" transform="rotate(-0 50.22 584.46)">Processing cost only: audio acquisition, context/endpointing delay and detection accuracy are separate. See benchmark-data.json for exact values and sources.</text>
</g>
<g id="legend_1">
<g id="patch_16">
<path d="M 54.09 526.587539
L 75.09 526.587539
L 75.09 519.237539
L 54.09 519.237539
z
" style="fill: #087f83; stroke: #087f83; stroke-linejoin: miter"/>
</g>
<g id="text_45">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: start" x="83.49" y="526.587539" transform="rotate(-0 83.49 526.587539)">Akiki Rust engine</text>
</g>
<g id="patch_17">
<path d="M 195.219844 526.587539
L 216.219844 526.587539
L 216.219844 519.237539
L 195.219844 519.237539
z
" style="fill: #75889a; stroke: #75889a; stroke-linejoin: miter"/>
</g>
<g id="text_46">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: start" x="224.619844" y="526.587539" transform="rotate(-0 224.619844 526.587539)">Other runtimes</text>
</g>
<g id="patch_18">
<path d="M 325.587188 526.587539
L 346.587188 526.587539
L 346.587188 519.237539
L 325.587188 519.237539
z
" style="fill: url(#hea3788106f); stroke: #087f83; stroke-linejoin: miter"/>
</g>
<g id="text_47">
<text style="font-size: 10.5px; font-family: 'DejaVu Sans'; text-anchor: start" x="354.987188" y="526.587539" transform="rotate(-0 354.987188 526.587539)">Measured RealFFT prototype*</text>
</g>
</g>
</g>
<defs>
<clipPath id="p1ada784cf6">
<rect x="145.08" y="140.76" width="310.62" height="330.48"/>
</clipPath>
<clipPath id="p4fdf3c15c9">
<rect x="766.32" y="140.76" width="310.62" height="330.48"/>
</clipPath>
</defs>
<defs>
<pattern id="hea3788106f" patternUnits="userSpaceOnUse" x="0" y="0" width="72" height="72">
<rect x="0" y="0" width="73" height="73" fill="#ffffff"/>
<path d="M -36 36
L 36 -36
M -32 40
L 40 -32
M -28 44
L 44 -28
M -24 48
L 48 -24
M -20 52
L 52 -20
M -16 56
L 56 -16
M -12 60
L 60 -12
M -8 64
L 64 -8
M -4 68
L 68 -4
M 0 72
L 72 0
M 4 76
L 76 4
M 8 80
L 80 8
M 12 84
L 84 12
M 16 88
L 88 16
M 20 92
L 92 20
M 24 96
L 96 24
M 28 100
L 100 28
M 32 104
L 104 32
M 36 108
L 108 36
" style="fill: #087f83; stroke: #087f83; stroke-width: 1.0; stroke-linecap: butt; stroke-linejoin: miter"/>
</pattern>
</defs>
</svg>