Sync model repo (text/metadata)
Browse files
README.md
CHANGED
|
@@ -29,9 +29,9 @@ This version is intended to demonstrate efficient inference on Arm-based platfor
|
|
| 29 |
| Model format | ONNX |
|
| 30 |
| Target device class | Mobile CPU |
|
| 31 |
| Reference device | vivo X300 (C1-Ultra, C1-Premium, C1-Pro, Android 16 / OriginOS 6) |
|
| 32 |
-
| Primary performance result |
|
| 33 |
| Accuracy result | HellaSwag 59.0 % |
|
| 34 |
-
| Size / memory result | 727.86 MB with INT4 weights, INT8 activations, INT8 embeddings and INT8 LM head (5.77x smaller than the FP32 baseline); peak memory
|
| 35 |
|
| 36 |
## Original model
|
| 37 |
|
|
@@ -63,27 +63,29 @@ Performance was measured on the reference configuration below. Results are inten
|
|
| 63 |
| Field | Value |
|
| 64 |
|---|---|
|
| 65 |
| Device / platform | vivo X300 |
|
| 66 |
-
| CPU / accelerator | C1-Ultra, C1-Premium, C1-Pro, aarch64,
|
| 67 |
| OS | android, Android 16 / OriginOS 6 |
|
| 68 |
| Runtime | ONNX Runtime 1.27.0 |
|
| 69 |
| Backend / delegate | MLAS, KleidiAI |
|
| 70 |
| Batch size | 1 |
|
| 71 |
| Precision | INT4 groupwise asymmetric weights (GPTQ, group size 32), INT8 per-token dynamic activations, INT8 per-row embeddings, INT8 LM head (scheme W4A8_dyn_emb_int8) |
|
| 72 |
-
| Runs |
|
|
|
|
|
|
|
| 73 |
|
| 74 |
**Performance results**
|
| 75 |
|
| 76 |
| Metric | Original / baseline | Arm-optimized | Improvement |
|
| 77 |
-
|---|---:|---:|---:|
|
| 78 |
-
| End-to-end latency p50 (ms) |
|
| 79 |
-
| End-to-end latency p90 (ms) |
|
| 80 |
-
| End-to-end latency p99 (ms) |
|
| 81 |
-
| Decode throughput (tokens/sec) | 8.
|
| 82 |
-
| Time to first token (ms) | 938.
|
| 83 |
-
| Model load time (ms) |
|
| 84 |
| Model size (MB) | 4196.99 | 727.86 | 5.77x smaller |
|
| 85 |
-
| Peak memory (MB) |
|
| 86 |
-
| Average memory (MB) |
|
| 87 |
|
| 88 |
## Accuracy
|
| 89 |
|
|
|
|
| 29 |
| Model format | ONNX |
|
| 30 |
| Target device class | Mobile CPU |
|
| 31 |
| Reference device | vivo X300 (C1-Ultra, C1-Premium, C1-Pro, Android 16 / OriginOS 6) |
|
| 32 |
+
| Primary performance result | 34.80 tokens/sec decode throughput (4.27x the FP32 baseline); 726.50 ms time to first token, which is 22.6 % faster than the FP32 baseline |
|
| 33 |
| Accuracy result | HellaSwag 59.0 % |
|
| 34 |
+
| Size / memory result | 727.86 MB with INT4 weights, INT8 activations, INT8 embeddings and INT8 LM head (5.77x smaller than the FP32 baseline); peak memory 897.54 MB |
|
| 35 |
|
| 36 |
## Original model
|
| 37 |
|
|
|
|
| 63 |
| Field | Value |
|
| 64 |
|---|---|
|
| 65 |
| Device / platform | vivo X300 |
|
| 66 |
+
| CPU / accelerator | C1-Ultra, C1-Premium, C1-Pro, aarch64, CPU execution backend |
|
| 67 |
| OS | android, Android 16 / OriginOS 6 |
|
| 68 |
| Runtime | ONNX Runtime 1.27.0 |
|
| 69 |
| Backend / delegate | MLAS, KleidiAI |
|
| 70 |
| Batch size | 1 |
|
| 71 |
| Precision | INT4 groupwise asymmetric weights (GPTQ, group size 32), INT8 per-token dynamic activations, INT8 per-row embeddings, INT8 LM head (scheme W4A8_dyn_emb_int8) |
|
| 72 |
+
| Runs | 5 warmup runs + 20 measured runs |
|
| 73 |
+
|
| 74 |
+
**Measurement conditions.** Each measured run consumes a 153-token prompt and generates 128 tokens, using 4 CPU threads, 5 warm-up runs and 20 measured runs. Each run starts only once Android reports thermal status 0 (NONE), after a 30 s settle. The device is set to fixed performance mode, which is the official recommendation.
|
| 75 |
|
| 76 |
**Performance results**
|
| 77 |
|
| 78 |
| Metric | Original / baseline | Arm-optimized | Improvement |
|
| 79 |
+
| --- | ---: | ---: | ---: |
|
| 80 |
+
| End-to-end latency p50 (ms) | 16658.09 | 4394.52 | 3.79x faster |
|
| 81 |
+
| End-to-end latency p90 (ms) | 16835.99 | 4727.38 | 3.56x faster |
|
| 82 |
+
| End-to-end latency p99 (ms) | 16910.87 | 4769.23 | 3.55x faster |
|
| 83 |
+
| Decode throughput (tokens/sec) | 8.15 | 34.80 | 4.27x |
|
| 84 |
+
| Time to first token (ms) | 938.04 | 726.50 | 1.29x faster |
|
| 85 |
+
| Model load time (ms) | 7604.93 | 1358.55 | 5.60x faster |
|
| 86 |
| Model size (MB) | 4196.99 | 727.86 | 5.77x smaller |
|
| 87 |
+
| Peak memory (MB) | 4098.56 | 897.54 | 4.57x less |
|
| 88 |
+
| Average memory (MB) | 4079.43 | 877.93 | 4.65x less |
|
| 89 |
|
| 90 |
## Accuracy
|
| 91 |
|
benchmarks/tinyllama-1-1b-chat-onnx-genai-vivo-x300-fp32.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
version: 1.2.0
|
| 2 |
report_type: llm-generative
|
| 3 |
profile: Baseline
|
| 4 |
-
created_at: '2026-
|
| 5 |
context:
|
| 6 |
target_ref: vivo-x300
|
| 7 |
runtime:
|
|
@@ -20,22 +20,22 @@ context:
|
|
| 20 |
sample_count: 8000
|
| 21 |
benchmark:
|
| 22 |
batch_size: 1
|
| 23 |
-
num_runs:
|
| 24 |
-
warmup_runs:
|
| 25 |
-
prompt_length_tokens:
|
| 26 |
-
generation_length_tokens:
|
| 27 |
accuracy:
|
| 28 |
benchmark_name: HellaSwag
|
| 29 |
accuracy_pct: 59.8
|
| 30 |
shot_count: 0
|
| 31 |
performance:
|
| 32 |
end_to_end_latency_ms:
|
| 33 |
-
p50:
|
| 34 |
-
p90:
|
| 35 |
-
p99:
|
| 36 |
-
peak_memory_mb:
|
| 37 |
-
average_memory_mb:
|
| 38 |
-
ttft_ms: 938.
|
| 39 |
-
tokens_per_second: 8.
|
| 40 |
-
model_load_time_ms:
|
| 41 |
-
time_to_first_inference_ms:
|
|
|
|
| 1 |
version: 1.2.0
|
| 2 |
report_type: llm-generative
|
| 3 |
profile: Baseline
|
| 4 |
+
created_at: '2026-09-04T20:59:14Z'
|
| 5 |
context:
|
| 6 |
target_ref: vivo-x300
|
| 7 |
runtime:
|
|
|
|
| 20 |
sample_count: 8000
|
| 21 |
benchmark:
|
| 22 |
batch_size: 1
|
| 23 |
+
num_runs: 20
|
| 24 |
+
warmup_runs: 5
|
| 25 |
+
prompt_length_tokens: 153
|
| 26 |
+
generation_length_tokens: 128
|
| 27 |
accuracy:
|
| 28 |
benchmark_name: HellaSwag
|
| 29 |
accuracy_pct: 59.8
|
| 30 |
shot_count: 0
|
| 31 |
performance:
|
| 32 |
end_to_end_latency_ms:
|
| 33 |
+
p50: 16658.093
|
| 34 |
+
p90: 16835.987
|
| 35 |
+
p99: 16910.870
|
| 36 |
+
peak_memory_mb: 4098.555
|
| 37 |
+
average_memory_mb: 4079.430
|
| 38 |
+
ttft_ms: 938.042
|
| 39 |
+
tokens_per_second: 8.148
|
| 40 |
+
model_load_time_ms: 7604.926
|
| 41 |
+
time_to_first_inference_ms: 16420.157
|
benchmarks/tinyllama-1-1b-chat-onnx-genai-vivo-x300-int4.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
version: 1.2.0
|
| 2 |
report_type: llm-generative
|
| 3 |
profile: Arm-Optimized
|
| 4 |
-
created_at: '2026-
|
| 5 |
context:
|
| 6 |
target_ref: vivo-x300
|
| 7 |
runtime:
|
|
@@ -20,23 +20,23 @@ context:
|
|
| 20 |
sample_count: 8000
|
| 21 |
benchmark:
|
| 22 |
batch_size: 1
|
| 23 |
-
num_runs:
|
| 24 |
-
warmup_runs:
|
| 25 |
-
prompt_length_tokens:
|
| 26 |
-
generation_length_tokens:
|
| 27 |
accuracy:
|
| 28 |
benchmark_name: HellaSwag
|
| 29 |
accuracy_pct: 59.0
|
| 30 |
shot_count: 0
|
| 31 |
performance:
|
| 32 |
end_to_end_latency_ms:
|
| 33 |
-
p50:
|
| 34 |
-
p90:
|
| 35 |
-
p99:
|
| 36 |
-
peak_memory_mb:
|
| 37 |
-
average_memory_mb:
|
| 38 |
delegation_pct: 99.84
|
| 39 |
-
ttft_ms:
|
| 40 |
-
tokens_per_second:
|
| 41 |
-
model_load_time_ms:
|
| 42 |
-
time_to_first_inference_ms:
|
|
|
|
| 1 |
version: 1.2.0
|
| 2 |
report_type: llm-generative
|
| 3 |
profile: Arm-Optimized
|
| 4 |
+
created_at: '2026-09-04T20:59:14Z'
|
| 5 |
context:
|
| 6 |
target_ref: vivo-x300
|
| 7 |
runtime:
|
|
|
|
| 20 |
sample_count: 8000
|
| 21 |
benchmark:
|
| 22 |
batch_size: 1
|
| 23 |
+
num_runs: 20
|
| 24 |
+
warmup_runs: 5
|
| 25 |
+
prompt_length_tokens: 153
|
| 26 |
+
generation_length_tokens: 128
|
| 27 |
accuracy:
|
| 28 |
benchmark_name: HellaSwag
|
| 29 |
accuracy_pct: 59.0
|
| 30 |
shot_count: 0
|
| 31 |
performance:
|
| 32 |
end_to_end_latency_ms:
|
| 33 |
+
p50: 4394.521
|
| 34 |
+
p90: 4727.384
|
| 35 |
+
p99: 4769.225
|
| 36 |
+
peak_memory_mb: 897.539
|
| 37 |
+
average_memory_mb: 877.934
|
| 38 |
delegation_pct: 99.84
|
| 39 |
+
ttft_ms: 726.502
|
| 40 |
+
tokens_per_second: 34.800
|
| 41 |
+
model_load_time_ms: 1358.552
|
| 42 |
+
time_to_first_inference_ms: 4482.815
|