@@ -7,9 +7,11 @@ This file was generated from [`scripts/benchmark.py`](../scripts/benchmark.py).
77It compares the performance of ` foldedtensor ` with various alternatives for padding
88and working with nested lists and tensors.
99
10- Versions:
11- - ` torch.__version__ == '2.0.1' `
12- - ` foldedtensor.__version__ == '0.3.3' `
10+ Environment:
11+ - ` torch.__version__ == '2.6.0' `
12+ - ` foldedtensor.__version__ == '0.4.0' `
13+ - ` python == 3.9.20 `
14+ - ` sys.platform == 'darwin' `
1315
1416
1517## Case 1 (pad variable lengths nested list)
@@ -20,79 +22,79 @@ nested_list = make_nested_list(32, (50, 100), (25, 30), value=1)
2022
2123Comparisons:
2224% timeit python_padding(nested_list)
23- # 100 loops, best of 5: 13.24 ms per loop
25+ # 100 loops, best of 5: 15.09 ms per loop
2426
2527% timeit foldedtensor.as_folded_tensor(nested_list)
26- # 100 loops, best of 5: 0.63 ms per loop
28+ # 100 loops, best of 5: 0.73 ms per loop
2729
2830```
29-
31+ Speedup against best alternative: ** 20.67x ** : rocket :
3032
3133## Case 2 (same lengths nested lists)
3234
3335``` python
3436nested_list = make_nested_list(32 , 100 , 30 , value = 1 )
3537
3638% timeit torch.tensor(nested_list)
37- # 100 loops, best of 5: 6.44 ms per loop
39+ # 100 loops, best of 5: 6.51 ms per loop
3840
3941% timeit torch.LongTensor(nested_list)
40- # 100 loops, best of 5: 2.64 ms per loop
42+ # 100 loops, best of 5: 2.78 ms per loop
4143
4244% timeit python_padding(nested_list)
43- # 100 loops, best of 5: 16.68 ms per loop
45+ # 100 loops, best of 5: 18.38 ms per loop
4446
4547% timeit torch.nested.nested_tensor([torch.LongTensor(sub) for sub in nested_list]).to_padded_tensor(0 )
46- # 100 loops, best of 5: 2.90 ms per loop
48+ # 100 loops, best of 5: 3.00 ms per loop
4749
4850% timeit foldedtensor.as_folded_tensor(nested_list)
49- # 100 loops, best of 5: 0.96 ms per loop
51+ # 100 loops, best of 5: 1.08 ms per loop
5052
5153```
52-
54+ Speedup against best alternative: ** 2.58x ** : rocket :
5355
5456## Case 3 (simple list)
5557
5658``` python
5759simple_list = make_nested_list(10000 , value = 1 )
5860
5961% timeit torch.tensor(simple_list)
60- # 100 loops, best of 5: 0.65 ms per loop
62+ # 100 loops, best of 5: 0.63 ms per loop
6163
6264% timeit torch.LongTensor(simple_list)
6365# 100 loops, best of 5: 0.27 ms per loop
6466
6567% timeit python_padding(simple_list)
66- # 100 loops, best of 5: 0.27 ms per loop
68+ # 100 loops, best of 5: 0.28 ms per loop
6769
6870% timeit foldedtensor.as_folded_tensor(simple_list)
6971# 100 loops, best of 5: 0.08 ms per loop
7072
7173```
72-
74+ Speedup against best alternative: ** 3.32x ** : rocket :
7375
7476## Case 4 (same lengths nested lists to flat tensor)
7577
7678``` python
7779nested_list = make_nested_list(32 , 100 , 30 , value = 1 )
7880
7981% timeit torch.tensor(nested_list).view(- 1 )
80- # 100 loops, best of 5: 6.67 ms per loop
82+ # 100 loops, best of 5: 6.52 ms per loop
8183
8284% timeit torch.LongTensor(nested_list).view(- 1 )
83- # 100 loops, best of 5: 2.74 ms per loop
85+ # 100 loops, best of 5: 2.76 ms per loop
8486
8587% timeit python_padding(nested_list).view(- 1 )
86- # 100 loops, best of 5: 17.16 ms per loop
88+ # 100 loops, best of 5: 18.62 ms per loop
8789
8890% timeit foldedtensor.as_folded_tensor(nested_list).view(- 1 )
89- # 100 loops, best of 5: 1.02 ms per loop
91+ # 100 loops, best of 5: 1.12 ms per loop
9092
9193% timeit foldedtensor.as_folded_tensor(nested_list, data_dims = (2 ,))
92- # 100 loops, best of 5: 0.95 ms per loop
94+ # 100 loops, best of 5: 1.08 ms per loop
9395
9496```
95-
97+ Speedup against best alternative: ** 2.47x ** : rocket :
9698## Case 5 (variable lengths nested lists) to padded embeddings
9799
98100Nested lists with different lengths (second level lists have lengths between 50 and 150). We compare ` foldedtensor ` with ` torch.nested ` .
@@ -102,37 +104,41 @@ nested_list = make_nested_list(32, (50, 150), 30, value=1)
102104# Padding with 0
103105
104106% timeit torch.nested.nested_tensor([torch.LongTensor(sub) for sub in nested_list]).to_padded_tensor(0 )
105- # 100 loops, best of 5: 3.11 ms per loop
107+ # 100 loops, best of 5: 3.02 ms per loop
106108
107109% timeit foldedtensor.as_folded_tensor(nested_list).as_tensor()
108- # 100 loops, best of 5: 0.90 ms per loop
110+ # 100 loops, best of 5: 1.03 ms per loop
109111
112+ ```
113+ Speedup against best alternative: ** 2.95x** :rocket :
114+ ``` python
110115# Padding with 1
111116
112117% timeit torch.nested.nested_tensor([torch.FloatTensor(sub) for sub in nested_list]).to_padded_tensor(1 )
113- # 100 loops, best of 5: 3.57 ms per loop
118+ # 100 loops, best of 5: 3.72 ms per loop
114119
115120% timeit x = foldedtensor.as_folded_tensor(nested_list); x.masked_fill_(x.mask, 1 )
116- # 100 loops, best of 5: 1.33 ms per loop
121+ # 100 loops, best of 5: 1.62 ms per loop
117122
118123```
119-
124+ Speedup against best alternative: ** 2.30x ** : rocket :
120125
121126## Case 6 (2d padding)
122127
123128``` python
124129nested_list = make_nested_list(160 , (50 , 150 ), value = 1 )
125130
126131% timeit python_padding(nested_list)
127- # 100 loops, best of 5: 1.24 ms per loop
132+ # 100 loops, best of 5: 1.33 ms per loop
128133
129134% timeit torch.nested.nested_tensor([torch.LongTensor(sub) for sub in nested_list]).to_padded_tensor(0 )
130- # 100 loops, best of 5: 1.09 ms per loop
135+ # 100 loops, best of 5: 1.14 ms per loop
131136
132137% timeit torch.nn.utils.rnn.pad_sequence([torch.LongTensor(sub) for sub in nested_list], batch_first = True , padding_value = 0 )
133- # 100 loops, best of 5: 0.78 ms per loop
138+ # 100 loops, best of 5: 0.86 ms per loop
134139
135140% timeit foldedtensor.as_folded_tensor(nested_list)
136- # 100 loops, best of 5: 0.13 ms per loop
141+ # 100 loops, best of 5: 0.15 ms per loop
137142
138143```
144+ Speedup against best alternative: ** 5.88x** :rocket :
0 commit comments