Packages
Tensor library for Gleam/BEAM with a pure Gleam API, zero-copy views, and optional native acceleration
Retired package: Release invalid
Current section
Files
Jump to
Current section
Files
src/viva_tensor@bench@full.erl
-module(viva_tensor@bench@full).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/viva_tensor/bench/full.gleam").
-export([run_full_benchmark/0, main/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Full Benchmark with Advanced Metrics\n"
"\n"
" Compares real vs theoretical SQNR for INT8, NF4, AWQ\n"
" Based on papers 2024-2026: NVFP4, TWEO, FALQON\n"
).
-file("src/viva_tensor/bench/full.gleam", 455).
-spec generate_calibration_data(integer(), integer()) -> list(list(float())).
generate_calibration_data(Num_samples, Features) ->
_pipe = gleam@list:range(1, Num_samples),
gleam@list:map(
_pipe,
fun(_) -> _pipe@1 = viva_tensor@tensor:random_uniform([Features]),
viva_tensor@tensor:to_list(_pipe@1) end
).
-file("src/viva_tensor/bench/full.gleam", 466).
-spec float_to_str(float()) -> binary().
float_to_str(F) ->
Rounded = erlang:float(erlang:round(F * 100.0)) / 100.0,
gleam_stdlib:float_to_string(Rounded).
-file("src/viva_tensor/bench/full.gleam", 471).
-spec pad_float(float()) -> binary().
pad_float(F) ->
S = float_to_str(F),
Len = string:length(S),
Padding = 10 - Len,
case Padding > 0 of
true ->
<<S/binary, (gleam@string:repeat(<<" "/utf8>>, Padding))/binary>>;
false ->
gleam@string:slice(S, 0, 10)
end.
-file("src/viva_tensor/bench/full.gleam", 81).
-spec benchmark_int8(viva_tensor@tensor:tensor(), integer()) -> nil.
benchmark_int8(Original, Original_bytes) ->
gleam_stdlib:println(
<<"┌─────────────────────────────────────────────────────────────────────────┐"/utf8>>
),
gleam_stdlib:println(
<<"│ INT8 QUANTIZATION - Symmetric Per-Tensor │"/utf8>>
),
gleam_stdlib:println(
<<"└─────────────────────────────────────────────────────────────────────────┘"/utf8>>
),
Quantized = viva_tensor@quant@compression:quantize_int8(Original),
Recovered = viva_tensor@quant@compression:dequantize(Quantized),
Quant_metrics = viva_tensor@metrics:compute_all(Original, Recovered),
Theoretical_sqnr = viva_tensor@metrics:theoretical_sqnr(8),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(
<<" ┌─────────────────────────────────────────────┐"/utf8>>
),
gleam_stdlib:println(
<<" │ QUALITY METRICS │"/utf8>>
),
gleam_stdlib:println(
<<" ├─────────────────────────────────────────────┤"/utf8>>
),
gleam_stdlib:println(
<<<<" │ MSE: "/utf8,
(pad_float(erlang:element(2, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ MAE: "/utf8,
(pad_float(erlang:element(3, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ RMSE: "/utf8,
(pad_float(erlang:element(4, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ Cosine Sim: "/utf8,
(pad_float(erlang:element(5, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ Max Error: "/utf8,
(pad_float(erlang:element(8, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ P99 Error: "/utf8,
(pad_float(erlang:element(9, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<" ├─────────────────────────────────────────────┤"/utf8>>
),
gleam_stdlib:println(
<<<<" │ SNR (Real): "/utf8,
(pad_float(erlang:element(6, Quant_metrics)))/binary>>/binary,
" dB │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ SQNR (Theoret.): "/utf8,
(pad_float(Theoretical_sqnr))/binary>>/binary,
" dB │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ Gap: "/utf8,
(pad_float(Theoretical_sqnr - erlang:element(6, Quant_metrics)))/binary>>/binary,
" dB │"/utf8>>
),
gleam_stdlib:println(
<<" └─────────────────────────────────────────────┘"/utf8>>
),
Ratio = case erlang:float(erlang:element(5, Quantized)) of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> erlang:float(Original_bytes) / Gleam@denominator
end,
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(
<<<<" Compression: "/utf8, (float_to_str(Ratio))/binary>>/binary,
"x"/utf8>>
),
gleam_stdlib:println(
<<<<" Memory: "/utf8,
(erlang:integer_to_binary(erlang:element(5, Quantized) div 1024))/binary>>/binary,
" KB"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>).
-file("src/viva_tensor/bench/full.gleam", 157).
-spec benchmark_nf4_full(viva_tensor@tensor:tensor(), integer()) -> nil.
benchmark_nf4_full(Original, Original_bytes) ->
gleam_stdlib:println(
<<"┌─────────────────────────────────────────────────────────────────────────┐"/utf8>>
),
gleam_stdlib:println(
<<"│ NF4 QUANTIZATION - QLoRA Style (Normal Distribution Quantiles) │"/utf8>>
),
gleam_stdlib:println(
<<"└─────────────────────────────────────────────────────────────────────────┘"/utf8>>
),
Config = viva_tensor@quant@nf4:default_config(),
Quantized = viva_tensor@quant@nf4:quantize(Original, Config),
Recovered = viva_tensor@quant@nf4:dequantize(Quantized),
Quant_metrics = viva_tensor@metrics:compute_all(Original, Recovered),
Theoretical_sqnr = viva_tensor@metrics:theoretical_sqnr(4),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(
<<" ┌─────────────────────────────────────────────┐"/utf8>>
),
gleam_stdlib:println(
<<" │ QUALITY METRICS │"/utf8>>
),
gleam_stdlib:println(
<<" ├─────────────────────────────────────────────┤"/utf8>>
),
gleam_stdlib:println(
<<<<" │ MSE: "/utf8,
(pad_float(erlang:element(2, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ MAE: "/utf8,
(pad_float(erlang:element(3, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ RMSE: "/utf8,
(pad_float(erlang:element(4, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ Cosine Sim: "/utf8,
(pad_float(erlang:element(5, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ Max Error: "/utf8,
(pad_float(erlang:element(8, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ P99 Error: "/utf8,
(pad_float(erlang:element(9, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<" ├─────────────────────────────────────────────┤"/utf8>>
),
gleam_stdlib:println(
<<<<" │ SNR (Real): "/utf8,
(pad_float(erlang:element(6, Quant_metrics)))/binary>>/binary,
" dB │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ SQNR (Theoret.): "/utf8,
(pad_float(Theoretical_sqnr))/binary>>/binary,
" dB │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ Gap: "/utf8,
(pad_float(Theoretical_sqnr - erlang:element(6, Quant_metrics)))/binary>>/binary,
" dB │"/utf8>>
),
gleam_stdlib:println(
<<" └─────────────────────────────────────────────┘"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(
<<<<" Compression: "/utf8,
(float_to_str(erlang:element(6, Quantized)))/binary>>/binary,
"x"/utf8>>
),
gleam_stdlib:println(
<<<<" Memory: "/utf8,
(erlang:integer_to_binary(erlang:element(5, Quantized) div 1024))/binary>>/binary,
" KB"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(<<" ─── Double Quantization (NF4 + DQ) ───"/utf8>>),
Dq = viva_tensor@quant@nf4:double_quantize(Original, Config),
Dq_ratio = case erlang:float(erlang:element(7, Dq)) of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> erlang:float(Original_bytes) / Gleam@denominator
end,
gleam_stdlib:println(
<<<<" DQ Compression: "/utf8, (float_to_str(Dq_ratio))/binary>>/binary,
"x"/utf8>>
),
gleam_stdlib:println(
<<<<" DQ Memory: "/utf8,
(erlang:integer_to_binary(erlang:element(7, Dq) div 1024))/binary>>/binary,
" KB"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>).
-file("src/viva_tensor/bench/full.gleam", 242).
-spec benchmark_awq_full(viva_tensor@tensor:tensor(), integer()) -> nil.
benchmark_awq_full(Original, Original_bytes) ->
gleam_stdlib:println(
<<"┌─────────────────────────────────────────────────────────────────────────┐"/utf8>>
),
gleam_stdlib:println(
<<"│ AWQ QUANTIZATION - Activation-aware (MLSys 2024 Best Paper) │"/utf8>>
),
gleam_stdlib:println(
<<"└─────────────────────────────────────────────────────────────────────────┘"/utf8>>
),
Calibration_data = generate_calibration_data(64, 512),
Config = viva_tensor@quant@awq:default_config(),
Quantized = viva_tensor@quant@awq:quantize_awq(
Original,
Calibration_data,
Config
),
Recovered = viva_tensor@quant@awq:dequantize_awq(Quantized),
Quant_metrics = viva_tensor@metrics:compute_all(Original, Recovered),
Theoretical_sqnr = viva_tensor@metrics:theoretical_sqnr(4),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(
<<" ┌─────────────────────────────────────────────┐"/utf8>>
),
gleam_stdlib:println(
<<" │ QUALITY METRICS │"/utf8>>
),
gleam_stdlib:println(
<<" ├─────────────────────────────────────────────┤"/utf8>>
),
gleam_stdlib:println(
<<<<" │ MSE: "/utf8,
(pad_float(erlang:element(2, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ MAE: "/utf8,
(pad_float(erlang:element(3, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ RMSE: "/utf8,
(pad_float(erlang:element(4, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ Cosine Sim: "/utf8,
(pad_float(erlang:element(5, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ Max Error: "/utf8,
(pad_float(erlang:element(8, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ P99 Error: "/utf8,
(pad_float(erlang:element(9, Quant_metrics)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<" ├─────────────────────────────────────────────┤"/utf8>>
),
gleam_stdlib:println(
<<<<" │ SNR (Real): "/utf8,
(pad_float(erlang:element(6, Quant_metrics)))/binary>>/binary,
" dB │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ SQNR (Theoret.): "/utf8,
(pad_float(Theoretical_sqnr))/binary>>/binary,
" dB │"/utf8>>
),
gleam_stdlib:println(
<<<<" │ Gap: "/utf8,
(pad_float(Theoretical_sqnr - erlang:element(6, Quant_metrics)))/binary>>/binary,
" dB │"/utf8>>
),
gleam_stdlib:println(
<<" └─────────────────────────────────────────────┘"/utf8>>
),
Ratio = case erlang:float(erlang:element(7, Quantized)) of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> erlang:float(Original_bytes) / Gleam@denominator
end,
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(
<<<<" Compression: "/utf8, (float_to_str(Ratio))/binary>>/binary,
"x"/utf8>>
),
gleam_stdlib:println(
<<<<" Memory: "/utf8,
(erlang:integer_to_binary(erlang:element(7, Quantized) div 1024))/binary>>/binary,
" KB"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(<<" ─── Salience Analysis (AWQ Insight) ───"/utf8>>),
Activation_stats = viva_tensor@quant@awq:collect_activation_stats(
Calibration_data
),
Salient = viva_tensor@quant@awq:identify_salient_channels(
Activation_stats,
1.0
),
gleam_stdlib:println(
<<" Salient channels (top 1%): "/utf8,
(erlang:integer_to_binary(erlang:length(Salient)))/binary>>
),
gleam_stdlib:println(
<<" These ~1% dominate the quantization error!"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>).
-file("src/viva_tensor/bench/full.gleam", 481).
-spec pad_ratio(float()) -> binary().
pad_ratio(F) ->
S = float_to_str(F),
Len = string:length(S),
case Len < 4 of
true ->
<<(gleam@string:repeat(<<" "/utf8>>, 4 - Len))/binary, S/binary>>;
false ->
S
end.
-file("src/viva_tensor/bench/full.gleam", 490).
-spec pad_snr(float()) -> binary().
pad_snr(F) ->
S = float_to_str(F),
Len = string:length(S),
case Len < 6 of
true ->
<<(gleam@string:repeat(<<" "/utf8>>, 6 - Len))/binary, S/binary>>;
false ->
gleam@string:slice(S, 0, 6)
end.
-file("src/viva_tensor/bench/full.gleam", 499).
-spec pad_gap(float()) -> binary().
pad_gap(F) ->
S = float_to_str(F),
Len = string:length(S),
case Len < 6 of
true ->
<<(gleam@string:repeat(<<" "/utf8>>, 6 - Len))/binary, S/binary>>;
false ->
gleam@string:slice(S, 0, 6)
end.
-file("src/viva_tensor/bench/full.gleam", 508).
-spec pad_cos(float()) -> binary().
pad_cos(F) ->
S = float_to_str(F),
Len = string:length(S),
case Len < 6 of
true ->
<<S/binary, (gleam@string:repeat(<<" "/utf8>>, 6 - Len))/binary>>;
false ->
gleam@string:slice(S, 0, 6)
end.
-file("src/viva_tensor/bench/full.gleam", 332).
-spec print_comparison_table(viva_tensor@tensor:tensor(), integer()) -> nil.
print_comparison_table(Original, Original_bytes) ->
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(
<<"╔═══════════════════════════════════════════════════════════════════════════╗"/utf8>>
),
gleam_stdlib:println(
<<"║ FINAL COMPARISON TABLE ║"/utf8>>
),
gleam_stdlib:println(
<<"╚═══════════════════════════════════════════════════════════════════════════╝"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>),
Int8_q = viva_tensor@quant@compression:quantize_int8(Original),
Int8_r = viva_tensor@quant@compression:dequantize(Int8_q),
Int8_m = viva_tensor@metrics:compute_all(Original, Int8_r),
Nf4_config = viva_tensor@quant@nf4:default_config(),
Nf4_q = viva_tensor@quant@nf4:quantize(Original, Nf4_config),
Nf4_r = viva_tensor@quant@nf4:dequantize(Nf4_q),
Nf4_m = viva_tensor@metrics:compute_all(Original, Nf4_r),
Calib = generate_calibration_data(64, 512),
Awq_config = viva_tensor@quant@awq:default_config(),
Awq_q = viva_tensor@quant@awq:quantize_awq(Original, Calib, Awq_config),
Awq_r = viva_tensor@quant@awq:dequantize_awq(Awq_q),
Awq_m = viva_tensor@metrics:compute_all(Original, Awq_r),
Sqnr_8 = viva_tensor@metrics:theoretical_sqnr(8),
Sqnr_4 = viva_tensor@metrics:theoretical_sqnr(4),
Int8_ratio = case erlang:float(erlang:element(5, Int8_q)) of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> erlang:float(Original_bytes) / Gleam@denominator
end,
Nf4_ratio = erlang:element(6, Nf4_q),
Awq_ratio = case erlang:float(erlang:element(7, Awq_q)) of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator@1 -> erlang:float(Original_bytes) / Gleam@denominator@1
end,
gleam_stdlib:println(
<<"┌────────────┬───────────┬──────────┬───────────┬───────────┬──────────┐"/utf8>>
),
gleam_stdlib:println(
<<"│ Method │ Compr. │ SNR Real │ SNR Theor.│ Gap │ Cosine │"/utf8>>
),
gleam_stdlib:println(
<<"├────────────┼───────────┼──────────┼───────────┼───────────┼──────────┤"/utf8>>
),
Int8_gap = Sqnr_8 - erlang:element(6, Int8_m),
gleam_stdlib:println(
<<<<<<<<<<<<<<<<<<<<"│ INT8 │ "/utf8,
(pad_ratio(Int8_ratio))/binary>>/binary,
"x │ "/utf8>>/binary,
(pad_snr(erlang:element(6, Int8_m)))/binary>>/binary,
" │ "/utf8>>/binary,
(pad_snr(Sqnr_8))/binary>>/binary,
" │ "/utf8>>/binary,
(pad_gap(Int8_gap))/binary>>/binary,
" │ "/utf8>>/binary,
(pad_cos(erlang:element(5, Int8_m)))/binary>>/binary,
" │"/utf8>>
),
Nf4_gap = Sqnr_4 - erlang:element(6, Nf4_m),
gleam_stdlib:println(
<<<<<<<<<<<<<<<<<<<<"│ NF4 │ "/utf8,
(pad_ratio(Nf4_ratio))/binary>>/binary,
"x │ "/utf8>>/binary,
(pad_snr(erlang:element(6, Nf4_m)))/binary>>/binary,
" │ "/utf8>>/binary,
(pad_snr(Sqnr_4))/binary>>/binary,
" │ "/utf8>>/binary,
(pad_gap(Nf4_gap))/binary>>/binary,
" │ "/utf8>>/binary,
(pad_cos(erlang:element(5, Nf4_m)))/binary>>/binary,
" │"/utf8>>
),
Awq_gap = Sqnr_4 - erlang:element(6, Awq_m),
gleam_stdlib:println(
<<<<<<<<<<<<<<<<<<<<"│ AWQ │ "/utf8,
(pad_ratio(Awq_ratio))/binary>>/binary,
"x │ "/utf8>>/binary,
(pad_snr(erlang:element(6, Awq_m)))/binary>>/binary,
" │ "/utf8>>/binary,
(pad_snr(Sqnr_4))/binary>>/binary,
" │ "/utf8>>/binary,
(pad_gap(Awq_gap))/binary>>/binary,
" │ "/utf8>>/binary,
(pad_cos(erlang:element(5, Awq_m)))/binary>>/binary,
" │"/utf8>>
),
gleam_stdlib:println(
<<"└────────────┴───────────┴──────────┴───────────┴───────────┴──────────┘"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(<<"LEGEND:"/utf8>>),
gleam_stdlib:println(
<<" - Compr.: Compression ratio (higher = better)"/utf8>>
),
gleam_stdlib:println(
<<" - SNR Real: Measured Signal-to-Noise Ratio (higher = better)"/utf8>>
),
gleam_stdlib:println(
<<" - SNR Theor.: Theoretical SQNR = 6.02*N + 1.76 dB"/utf8>>
),
gleam_stdlib:println(
<<" - Gap: Difference between theoretical and real (lower = better)"/utf8>>
),
gleam_stdlib:println(
<<" - Cosine: Cosine similarity (1.0 = perfect)"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(<<"INSIGHTS:"/utf8>>),
gleam_stdlib:println(
<<" - INT8: Small gap = efficient quantization"/utf8>>
),
gleam_stdlib:println(
<<" - NF4: Better than uniform Q4 by using normal quantiles"/utf8>>
),
gleam_stdlib:println(
<<" - AWQ: Focuses on salient channels to minimize error"/utf8>>
).
-file("src/viva_tensor/bench/full.gleam", 26).
-spec run_full_benchmark() -> nil.
run_full_benchmark() ->
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(
<<"╔═══════════════════════════════════════════════════════════════════════════╗"/utf8>>
),
gleam_stdlib:println(
<<"║ viva_tensor - FULL BENCHMARK WITH ADVANCED METRICS ║"/utf8>>
),
gleam_stdlib:println(
<<"║ Real vs Theoretical SQNR | Papers 2024-2026 ║"/utf8>>
),
gleam_stdlib:println(
<<"╚═══════════════════════════════════════════════════════════════════════════╝"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>),
Test_tensor = viva_tensor@tensor:random_normal([512, 512], +0.0, 0.3),
Original_bytes = (512 * 512) * 4,
gleam_stdlib:println(<<"━━━ TEST CONFIGURATION ━━━"/utf8>>),
gleam_stdlib:println(<<" Tensor: [512, 512] = 262,144 elements"/utf8>>),
gleam_stdlib:println(
<<" Distribution: Normal(0, 0.3) - typical of NN weights"/utf8>>
),
gleam_stdlib:println(
<<<<" Original: "/utf8,
(erlang:integer_to_binary(Original_bytes div 1024))/binary>>/binary,
" KB (FP32)"/utf8>>
),
gleam_stdlib:println(<<""/utf8>>),
benchmark_int8(Test_tensor, Original_bytes),
benchmark_nf4_full(Test_tensor, Original_bytes),
benchmark_awq_full(Test_tensor, Original_bytes),
print_comparison_table(Test_tensor, Original_bytes),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(
<<"═══════════════════════════════════════════════════════════════════════════"/utf8>>
),
gleam_stdlib:println(<<" BENCHMARK COMPLETE!"/utf8>>),
gleam_stdlib:println(
<<"═══════════════════════════════════════════════════════════════════════════"/utf8>>
).
-file("src/viva_tensor/bench/full.gleam", 22).
-spec main() -> nil.
main() ->
run_full_benchmark().