ai-edge-torch-nightly 0.3.0.dev20250107__py3-none-any.whl → 0.3.0.dev20250108__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- ai_edge_torch/generative/examples/gemma/convert_gemma1_to_tflite.py +16 -6
- ai_edge_torch/generative/examples/gemma/convert_gemma2_to_tflite.py +16 -6
- ai_edge_torch/generative/examples/llama/convert_to_tflite.py +16 -6
- ai_edge_torch/generative/examples/openelm/convert_to_tflite.py +16 -9
- ai_edge_torch/generative/examples/paligemma/convert_to_tflite.py +11 -6
- ai_edge_torch/generative/examples/phi/convert_phi3_to_tflite.py +17 -7
- ai_edge_torch/generative/examples/phi/convert_to_tflite.py +16 -6
- ai_edge_torch/generative/examples/qwen/convert_to_tflite.py +17 -9
- ai_edge_torch/generative/examples/smollm/convert_to_tflite.py +16 -7
- ai_edge_torch/generative/examples/tiny_llama/convert_to_tflite.py +16 -8
- ai_edge_torch/generative/layers/attention.py +41 -8
- ai_edge_torch/generative/layers/lora.py +557 -0
- ai_edge_torch/generative/test/test_lora.py +147 -0
- ai_edge_torch/generative/utilities/converter.py +100 -47
- ai_edge_torch/generative/utilities/model_builder.py +7 -2
- ai_edge_torch/odml_torch/_torch_future.py +13 -0
- ai_edge_torch/odml_torch/export.py +6 -2
- ai_edge_torch/odml_torch/lowerings/decomp.py +4 -0
- ai_edge_torch/version.py +1 -1
- {ai_edge_torch_nightly-0.3.0.dev20250107.dist-info → ai_edge_torch_nightly-0.3.0.dev20250108.dist-info}/METADATA +1 -1
- {ai_edge_torch_nightly-0.3.0.dev20250107.dist-info → ai_edge_torch_nightly-0.3.0.dev20250108.dist-info}/RECORD +24 -22
- {ai_edge_torch_nightly-0.3.0.dev20250107.dist-info → ai_edge_torch_nightly-0.3.0.dev20250108.dist-info}/LICENSE +0 -0
- {ai_edge_torch_nightly-0.3.0.dev20250107.dist-info → ai_edge_torch_nightly-0.3.0.dev20250108.dist-info}/WHEEL +0 -0
- {ai_edge_torch_nightly-0.3.0.dev20250107.dist-info → ai_edge_torch_nightly-0.3.0.dev20250108.dist-info}/top_level.txt +0 -0
@@ -15,16 +15,15 @@
|
|
15
15
|
|
16
16
|
"""Common utility functions for model conversion."""
|
17
17
|
|
18
|
-
|
19
|
-
from typing import
|
20
|
-
|
18
|
+
import os
|
19
|
+
from typing import Optional, Union
|
21
20
|
from ai_edge_torch._convert import converter as converter_utils
|
21
|
+
from ai_edge_torch.generative.layers import lora as lora_utils
|
22
22
|
import ai_edge_torch.generative.layers.kv_cache as kv_utils
|
23
23
|
import ai_edge_torch.generative.layers.model_config as cfg
|
24
24
|
from ai_edge_torch.generative.quantize import quant_recipes
|
25
25
|
from ai_edge_torch.generative.utilities.model_builder import ExportConfig
|
26
26
|
import torch
|
27
|
-
import torch.nn as nn
|
28
27
|
|
29
28
|
|
30
29
|
class ExportableModule(torch.nn.Module):
|
@@ -41,11 +40,13 @@ class ExportableModule(torch.nn.Module):
|
|
41
40
|
|
42
41
|
def convert_to_tflite(
|
43
42
|
pytorch_model: torch.nn.Module,
|
44
|
-
|
43
|
+
output_path: str,
|
44
|
+
output_name_prefix: str,
|
45
45
|
prefill_seq_len: Union[int, list[int]],
|
46
46
|
pixel_values_size: torch.Size = None,
|
47
47
|
quantize: bool = True,
|
48
48
|
config: cfg.ModelConfig = None,
|
49
|
+
lora_ranks: Optional[list[int]] = None,
|
49
50
|
export_config: ExportConfig = None,
|
50
51
|
):
|
51
52
|
"""Converts a nn.Module model to multi-signature tflite model.
|
@@ -79,21 +80,65 @@ def convert_to_tflite(
|
|
79
80
|
|
80
81
|
Args:
|
81
82
|
pytorch_model (torch.nn.Module): PyTorch model to convert to tflite.
|
82
|
-
|
83
|
-
|
84
|
-
|
83
|
+
output_path (str): The path to export the tflite model.
|
84
|
+
output_name_prefix (str): The prefix of the tflite model name.
|
85
|
+
prefill_seq_len (Union[int, list[int]]): The prefill sequence length to
|
86
|
+
use. If a list, the model will have multiple prefill signatures.
|
85
87
|
pixel_values_size (torch.Size, optional): The size of pixel values to pass
|
86
88
|
to the model. If None, the model is not expected to take pixel values.
|
87
89
|
quantize (bool, optional): Whether the model should be quanized. Defaults
|
88
90
|
to True.
|
89
91
|
config (cfg.ModelConfig, optional): The model config used to configure KV
|
90
92
|
cache. If None, it uses the config of the pytorch_model.
|
93
|
+
lora_ranks (list[int], optional): The ranks of the LORA layers. If None,
|
94
|
+
no LoRA signatures will be added.
|
91
95
|
"""
|
96
|
+
# pylint: disable=protected-access
|
97
|
+
torch._dynamo.config.cache_size_limit = 64
|
98
|
+
|
99
|
+
config = config if config else pytorch_model.config
|
92
100
|
prefill_seq_lens = (
|
93
101
|
[prefill_seq_len] if isinstance(prefill_seq_len, int) else prefill_seq_len
|
94
102
|
)
|
103
|
+
loras = [None]
|
104
|
+
if lora_ranks is not None:
|
105
|
+
for rank in lora_ranks:
|
106
|
+
lora = lora_utils.LoRA.zeros(rank, config)
|
107
|
+
loras.append(lora)
|
108
|
+
|
109
|
+
quant_suffix = 'q8' if quantize else 'f32'
|
110
|
+
kv_size = config.kv_cache_max_len
|
111
|
+
lora_suffix = (
|
112
|
+
'' if not lora_ranks else f'_lora{",".join(map(str, lora_ranks))}'
|
113
|
+
)
|
114
|
+
output_filename = (
|
115
|
+
f'{output_name_prefix}_{quant_suffix}_ekv{kv_size}{lora_suffix}.tflite'
|
116
|
+
)
|
117
|
+
output_file = os.path.join(output_path, output_filename)
|
118
|
+
|
119
|
+
_export_helper(
|
120
|
+
pytorch_model,
|
121
|
+
output_file,
|
122
|
+
prefill_seq_lens,
|
123
|
+
pixel_values_size,
|
124
|
+
quantize,
|
125
|
+
config,
|
126
|
+
loras,
|
127
|
+
export_config,
|
128
|
+
)
|
95
129
|
|
96
|
-
|
130
|
+
|
131
|
+
def _export_helper(
|
132
|
+
pytorch_model: torch.nn.Module,
|
133
|
+
output_file: str,
|
134
|
+
prefill_seq_lens: list[int],
|
135
|
+
pixel_values_size: torch.Size,
|
136
|
+
quantize: bool,
|
137
|
+
config: cfg.ModelConfig,
|
138
|
+
loras: list[None | lora_utils.LoRA],
|
139
|
+
export_config: ExportConfig,
|
140
|
+
):
|
141
|
+
"""Helper function to export a model to tflite."""
|
97
142
|
prefill_tokens_list = []
|
98
143
|
prefill_input_pos_list = []
|
99
144
|
for seq_len in prefill_seq_lens:
|
@@ -108,9 +153,7 @@ def convert_to_tflite(
|
|
108
153
|
|
109
154
|
decode_token = torch.tensor([[0]], dtype=torch.int)
|
110
155
|
decode_input_pos = torch.tensor([0], dtype=torch.int)
|
111
|
-
kv = kv_utils.KVCache.from_model_config(
|
112
|
-
config if config else pytorch_model.config
|
113
|
-
)
|
156
|
+
kv = kv_utils.KVCache.from_model_config(config)
|
114
157
|
|
115
158
|
quant_config = quant_recipes.full_int8_dynamic_recipe() if quantize else None
|
116
159
|
|
@@ -119,44 +162,54 @@ def convert_to_tflite(
|
|
119
162
|
mod = ExportableModule(pytorch_model, export_config=export_config)
|
120
163
|
|
121
164
|
converter = converter_utils.Converter()
|
122
|
-
for
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
165
|
+
for lora in loras:
|
166
|
+
for i in range(len(prefill_seq_lens)):
|
167
|
+
prefill_seq_len = prefill_seq_lens[i]
|
168
|
+
prefill_tokens = prefill_tokens_list[i]
|
169
|
+
prefill_input_pos = prefill_input_pos_list[i]
|
170
|
+
if i == 0 and len(prefill_seq_lens) == 1:
|
171
|
+
prefill_signature_name = 'prefill'
|
172
|
+
else:
|
173
|
+
prefill_signature_name = f'prefill_{prefill_seq_len}'
|
174
|
+
|
175
|
+
sample_kwargs = {
|
176
|
+
'tokens': prefill_tokens,
|
177
|
+
'input_pos': prefill_input_pos,
|
178
|
+
'kv_cache': kv,
|
179
|
+
}
|
180
|
+
if lora is not None:
|
181
|
+
prefill_signature_name += f'_lora_r{lora.get_rank()}'
|
182
|
+
sample_kwargs['lora'] = lora
|
183
|
+
|
140
184
|
converter.add_signature(
|
141
|
-
prefill_signature_name
|
185
|
+
prefill_signature_name,
|
142
186
|
mod,
|
143
|
-
sample_kwargs=
|
144
|
-
'tokens': prefill_tokens,
|
145
|
-
'input_pos': prefill_input_pos,
|
146
|
-
'kv_cache': kv,
|
147
|
-
'pixel_values': prefill_pixel_values,
|
148
|
-
},
|
187
|
+
sample_kwargs=sample_kwargs,
|
149
188
|
)
|
150
189
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
190
|
+
if prefill_pixel_values is not None:
|
191
|
+
converter.add_signature(
|
192
|
+
prefill_signature_name + '_pixel',
|
193
|
+
mod,
|
194
|
+
sample_kwargs={
|
195
|
+
**sample_kwargs,
|
196
|
+
'pixel_values': prefill_pixel_values,
|
197
|
+
},
|
198
|
+
)
|
199
|
+
|
200
|
+
sample_kwargs = {
|
201
|
+
'tokens': decode_token,
|
202
|
+
'input_pos': decode_input_pos,
|
203
|
+
'kv_cache': kv,
|
204
|
+
}
|
205
|
+
if lora is not None:
|
206
|
+
sample_kwargs['lora'] = lora
|
207
|
+
|
208
|
+
converter.add_signature(
|
209
|
+
'decode' if lora is None else f'decode_lora_r{lora.get_rank()}',
|
210
|
+
mod,
|
211
|
+
sample_kwargs=sample_kwargs,
|
212
|
+
)
|
160
213
|
|
161
214
|
edge_model = converter.convert(quant_config=quant_config)
|
162
|
-
edge_model.export(
|
215
|
+
edge_model.export(output_file)
|
@@ -22,12 +22,14 @@ from typing import Optional, Tuple
|
|
22
22
|
from ai_edge_torch.generative.layers import attention
|
23
23
|
from ai_edge_torch.generative.layers import builder
|
24
24
|
from ai_edge_torch.generative.layers import kv_cache as kv_utils
|
25
|
+
from ai_edge_torch.generative.layers import lora as lora_utils
|
25
26
|
import ai_edge_torch.generative.layers.attention_utils as attn_utils
|
26
27
|
import ai_edge_torch.generative.layers.model_config as cfg
|
27
28
|
import ai_edge_torch.generative.utilities.loader as loading_utils
|
28
29
|
import torch
|
29
30
|
from torch import nn
|
30
31
|
|
32
|
+
|
31
33
|
TENSOR_NAMES = loading_utils.ModelLoader.TensorNames(
|
32
34
|
ff_up_proj="model.layers.{}.mlp.up_proj",
|
33
35
|
ff_down_proj="model.layers.{}.mlp.down_proj",
|
@@ -103,6 +105,7 @@ class DecoderOnlyModel(nn.Module):
|
|
103
105
|
tokens: torch.Tensor,
|
104
106
|
input_pos: torch.Tensor,
|
105
107
|
kv_cache: kv_utils.KVCache,
|
108
|
+
lora: Optional[lora_utils.LoRA] = None,
|
106
109
|
export_config: Optional[ExportConfig] = None,
|
107
110
|
) -> dict[torch.Tensor, kv_utils.KVCache]:
|
108
111
|
_, seq_len = tokens.size()
|
@@ -119,7 +122,7 @@ class DecoderOnlyModel(nn.Module):
|
|
119
122
|
mask = mask[:, :, :, : self.config.kv_cache_max]
|
120
123
|
|
121
124
|
return self.forward_with_embeds(
|
122
|
-
input_embeds, rope, mask, input_pos, kv_cache, export_config
|
125
|
+
input_embeds, rope, mask, input_pos, kv_cache, lora, export_config
|
123
126
|
)
|
124
127
|
|
125
128
|
def forward_with_embeds(
|
@@ -129,6 +132,7 @@ class DecoderOnlyModel(nn.Module):
|
|
129
132
|
mask: torch.Tensor,
|
130
133
|
input_pos: torch.Tensor,
|
131
134
|
kv_cache: kv_utils.KVCache,
|
135
|
+
lora: Optional[lora_utils.LoRA] = None,
|
132
136
|
export_config: Optional[ExportConfig] = None,
|
133
137
|
) -> dict[torch.Tensor, kv_utils.KVCache]:
|
134
138
|
"""Forwards the model with input embeddings."""
|
@@ -144,7 +148,8 @@ class DecoderOnlyModel(nn.Module):
|
|
144
148
|
updated_kv_entires = []
|
145
149
|
for i, block in enumerate(self.transformer_blocks):
|
146
150
|
kv_entry = kv_cache.caches[i] if kv_cache else None
|
147
|
-
|
151
|
+
lora_adapter = lora.adapters[i] if lora else None
|
152
|
+
x, kv_entry = block(x, rope, mask, input_pos, kv_entry, lora_adapter)
|
148
153
|
if kv_entry:
|
149
154
|
updated_kv_entires.append(kv_entry)
|
150
155
|
updated_kv_cache = kv_utils.KVCache(tuple(updated_kv_entires))
|
@@ -73,3 +73,16 @@ def safe_run_decompositions(exported_program, decomp_table=None):
|
|
73
73
|
node.target = lambda self, size: torch.reshape(self.contiguous(), size)
|
74
74
|
|
75
75
|
return exported_program.run_decompositions(decomp_table)
|
76
|
+
|
77
|
+
|
78
|
+
def dummy_decomp_table():
|
79
|
+
"""Build dummy decomp table for run_decompositions without any decompositions.
|
80
|
+
|
81
|
+
Compatible for torch<=2.5.
|
82
|
+
|
83
|
+
Returns:
|
84
|
+
Decomp table for ExportedProgram.run_decompositions.
|
85
|
+
"""
|
86
|
+
return {
|
87
|
+
torch._ops.OperatorBase(): lambda: None,
|
88
|
+
}
|
@@ -238,6 +238,9 @@ def _convert_i64_to_i32(exported_program: torch.export.ExportedProgram):
|
|
238
238
|
def in_i32(x: int):
|
239
239
|
return -2147483648 <= x <= 2147483647
|
240
240
|
|
241
|
+
def to_int32(x: torch.Tensor):
|
242
|
+
return torch.ops.aten._to_copy.default(x, dtype=torch.int32)
|
243
|
+
|
241
244
|
def rewrite_arange(node: torch.fx.Node):
|
242
245
|
tensor_meta = node.meta.get("tensor_meta", None)
|
243
246
|
if not tensor_meta:
|
@@ -249,7 +252,7 @@ def _convert_i64_to_i32(exported_program: torch.export.ExportedProgram):
|
|
249
252
|
if not (in_i32(start) and in_i32(end)):
|
250
253
|
return
|
251
254
|
op = node.target
|
252
|
-
node.target = lambda *args, **kwargs: op(*args, **kwargs)
|
255
|
+
node.target = lambda *args, **kwargs: to_int32(op(*args, **kwargs))
|
253
256
|
|
254
257
|
graph_module = exported_program.graph_module
|
255
258
|
for node in graph_module.graph.nodes:
|
@@ -305,8 +308,9 @@ def exported_program_to_mlir(
|
|
305
308
|
|
306
309
|
_convert_i64_to_i32(exported_program)
|
307
310
|
|
311
|
+
# No decompositions but just retracing/cananicalization.
|
308
312
|
exported_program = _torch_future.safe_run_decompositions(
|
309
|
-
exported_program,
|
313
|
+
exported_program, _torch_future.dummy_decomp_table()
|
310
314
|
)
|
311
315
|
|
312
316
|
# Passes below mutate the exported program to a state not executable by torch.
|
@@ -55,6 +55,10 @@ def decompositions():
|
|
55
55
|
],
|
56
56
|
)
|
57
57
|
|
58
|
+
# Override noop aten op decompositions for faster run_decompositions.
|
59
|
+
decompositions[torch.ops.aten.alias.default] = lambda x: x
|
60
|
+
decompositions[torch.ops.aten.detach.default] = lambda x: x
|
61
|
+
|
58
62
|
# Override _safe_softmax decompositions with regular softmax.
|
59
63
|
# _safe_softmax introduces additional check-select ops to guard extreme
|
60
64
|
# input values to softmax, which could make the converted model inefficient
|
ai_edge_torch/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ai-edge-torch-nightly
|
3
|
-
Version: 0.3.0.
|
3
|
+
Version: 0.3.0.dev20250108
|
4
4
|
Summary: Supporting PyTorch models with the Google AI Edge TFLite runtime.
|
5
5
|
Home-page: https://github.com/google-ai-edge/ai-edge-torch
|
6
6
|
Keywords: On-Device ML,AI,Google,TFLite,PyTorch,LLMs,GenAI
|
@@ -3,7 +3,7 @@ ai_edge_torch/_config.py,sha256=PKtOtBOup-cM0wBdQxby6HzuhLhIC3oq-TBG8FF4znE,2161
|
|
3
3
|
ai_edge_torch/conftest.py,sha256=r0GTrhMRhlmOGrrkvumHN8hkmyug6WvF60vWq8wRIBI,758
|
4
4
|
ai_edge_torch/fx_pass_base.py,sha256=518ziQ0TUxqum2qZXqlD8qr65pHPh8ZNLnwFC6zvK3k,4253
|
5
5
|
ai_edge_torch/model.py,sha256=N-pNpTxzhaFGhWhnSGd70lBzb9VlEhTOq5mddU7bvvI,5542
|
6
|
-
ai_edge_torch/version.py,sha256=
|
6
|
+
ai_edge_torch/version.py,sha256=NOhiFx3WkuX_tsxWzAZcCmPr0n5wuIu79KHGbDtrbb8,706
|
7
7
|
ai_edge_torch/_convert/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
8
8
|
ai_edge_torch/_convert/conversion.py,sha256=_PoH0E1gbbsWhLGwDRwUtW2G_IgNzNF7pKQbn9ct6-4,5778
|
9
9
|
ai_edge_torch/_convert/conversion_utils.py,sha256=Sr8qXVcTwc-ZnZmK7yxVrIOOp1S_vNrwzC0zUvLTI2o,2160
|
@@ -44,26 +44,26 @@ ai_edge_torch/generative/examples/amd_llama_135m/amd_llama_135m.py,sha256=urNif8
|
|
44
44
|
ai_edge_torch/generative/examples/amd_llama_135m/convert_to_tflite.py,sha256=Oqlg5ZoUuG2aU3067QaPpmEXWOdB8GEq7u_NWoBpoB4,2337
|
45
45
|
ai_edge_torch/generative/examples/amd_llama_135m/verify.py,sha256=-9Nb9D818YSJR3olVtBwoLNeMMD5qE58YBnsA67hlHg,2421
|
46
46
|
ai_edge_torch/generative/examples/gemma/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
47
|
-
ai_edge_torch/generative/examples/gemma/convert_gemma1_to_tflite.py,sha256=
|
48
|
-
ai_edge_torch/generative/examples/gemma/convert_gemma2_to_tflite.py,sha256=
|
47
|
+
ai_edge_torch/generative/examples/gemma/convert_gemma1_to_tflite.py,sha256=8HJi0cutxPstafVNs2LfBKdUzufVucje1Vrfjw_RS_g,2527
|
48
|
+
ai_edge_torch/generative/examples/gemma/convert_gemma2_to_tflite.py,sha256=MX8fZhJJPZ5IoMiNHX0tLkRpHYqVuh4qhW0rkeIfmYw,2529
|
49
49
|
ai_edge_torch/generative/examples/gemma/gemma1.py,sha256=w8oWYibZzvEvCDyp39EYyAWmjgJljhzdYPyFCfAWxZA,3497
|
50
50
|
ai_edge_torch/generative/examples/gemma/gemma2.py,sha256=whQ6DEnmhmj9hd5OyaoEI-FUNJ4m302vY3Swo_IqQcA,9285
|
51
51
|
ai_edge_torch/generative/examples/gemma/verify_gemma1.py,sha256=ip-Gmk4CI5f0GWSdAIdrectxQWJ0t328KCsA4nfHuGg,1736
|
52
52
|
ai_edge_torch/generative/examples/gemma/verify_gemma2.py,sha256=IoBhEMwH07-tFm5-U6F2hpCsI8xynglhq1x9tIOdaPQ,1322
|
53
53
|
ai_edge_torch/generative/examples/gemma/verify_util.py,sha256=tR8RflXocDZqvuStyw9aFlzuiTllEC8rNnjrxms6_Is,5727
|
54
54
|
ai_edge_torch/generative/examples/llama/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
55
|
-
ai_edge_torch/generative/examples/llama/convert_to_tflite.py,sha256=
|
55
|
+
ai_edge_torch/generative/examples/llama/convert_to_tflite.py,sha256=tMSsqg7LU3LR-PHtKvlWtLCqlk71mfcO9hANU4vnvDM,2734
|
56
56
|
ai_edge_torch/generative/examples/llama/llama.py,sha256=BMjpdw6oOXmtqXCAfW9o7Iewaj-Hxd57xVrvSLBuHTk,6656
|
57
57
|
ai_edge_torch/generative/examples/llama/verify.py,sha256=X7oKQi85M789ugBrOlMvzk8eSRR3Kf1Mprfl-U-WIpo,2842
|
58
58
|
ai_edge_torch/generative/examples/moonshine/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
59
59
|
ai_edge_torch/generative/examples/moonshine/convert_moonshine_to_tflite.py,sha256=7m3rYRzThRDYb-7pGnpLr3ACi4PWX07Mg20Q98ArPc4,1714
|
60
60
|
ai_edge_torch/generative/examples/moonshine/moonshine.py,sha256=nZ2b8u4TmsB5sgdClgAuH8E78bcTv9RCnF9666HqP2M,3394
|
61
61
|
ai_edge_torch/generative/examples/openelm/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
62
|
-
ai_edge_torch/generative/examples/openelm/convert_to_tflite.py,sha256=
|
62
|
+
ai_edge_torch/generative/examples/openelm/convert_to_tflite.py,sha256=pyxRGgMxrnzBvYHkW0F9mgAabM19b-FDT6PT6j_-n2U,2528
|
63
63
|
ai_edge_torch/generative/examples/openelm/openelm.py,sha256=sIJ8Ie1oxFrJM-1jvv2ukiJbQOTIUGuMEZvmwZbt3n0,4556
|
64
64
|
ai_edge_torch/generative/examples/openelm/verify.py,sha256=VkigoqhAr8ew95neb3TifYv-SLOSheaWKv2AH0iKDrc,2441
|
65
65
|
ai_edge_torch/generative/examples/paligemma/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
66
|
-
ai_edge_torch/generative/examples/paligemma/convert_to_tflite.py,sha256=
|
66
|
+
ai_edge_torch/generative/examples/paligemma/convert_to_tflite.py,sha256=scLsguzzuHfKYDWUd2uZkKYVRzdAbQHLd-kPam8QwvM,3004
|
67
67
|
ai_edge_torch/generative/examples/paligemma/decoder.py,sha256=amN96oBMTPolOFvGa47vG92AZ-BNLm8j0bBYd-IrMvI,5407
|
68
68
|
ai_edge_torch/generative/examples/paligemma/decoder2.py,sha256=0V_CX0Pn5Fj_-koOGjc_Av2KMSAaVjAlD-G8P6FBGyY,6385
|
69
69
|
ai_edge_torch/generative/examples/paligemma/image_encoder.py,sha256=yKPWG8aBp-GuzeyQntlzwTTcGBBjvUywVGRjnlNprmo,5574
|
@@ -73,18 +73,18 @@ ai_edge_torch/generative/examples/paligemma/verify_decoder.py,sha256=al5wMPWri4I
|
|
73
73
|
ai_edge_torch/generative/examples/paligemma/verify_decoder2.py,sha256=tm-UfLr0YeBRVcQsWLBOMWI9JUzHmtPEbYK2vpITpqY,2534
|
74
74
|
ai_edge_torch/generative/examples/paligemma/verify_image_encoder.py,sha256=vNm-wTT8BD6zbX6GocfP1QrVoHl0zSvuVxoXN36eeiU,3540
|
75
75
|
ai_edge_torch/generative/examples/phi/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
76
|
-
ai_edge_torch/generative/examples/phi/convert_phi3_to_tflite.py,sha256=
|
77
|
-
ai_edge_torch/generative/examples/phi/convert_to_tflite.py,sha256=
|
76
|
+
ai_edge_torch/generative/examples/phi/convert_phi3_to_tflite.py,sha256=P2K6G7bNespSJLk72qxuCLaCcR_xAPs0Mn1dBZoByhE,2518
|
77
|
+
ai_edge_torch/generative/examples/phi/convert_to_tflite.py,sha256=g-MvEibJT_iIhkec2VGtFFA_iP54VCq9mY4KxwAYF08,2512
|
78
78
|
ai_edge_torch/generative/examples/phi/phi2.py,sha256=c6PYCky7yJn6MVIYOCTx8S_CH27kOPmJbRZcI95nbZs,3477
|
79
79
|
ai_edge_torch/generative/examples/phi/phi3.py,sha256=7Y1E4XpRuZOiSbeZJ-C2uJjmlnDtWv6L0XvPRE8oEQs,7112
|
80
80
|
ai_edge_torch/generative/examples/phi/verify.py,sha256=YPFCdbnfmvq38fbpBNr0kHPfSZo4p3_6WkLJAW3pLPo,2177
|
81
81
|
ai_edge_torch/generative/examples/phi/verify_phi3.py,sha256=kVYaBVvddfQng0IyZGxyTJEzhiPO0G4VFJm2WOc2Q94,2360
|
82
82
|
ai_edge_torch/generative/examples/qwen/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
83
|
-
ai_edge_torch/generative/examples/qwen/convert_to_tflite.py,sha256=
|
83
|
+
ai_edge_torch/generative/examples/qwen/convert_to_tflite.py,sha256=tqvXVGNdDehdak9-5DDisACs9VlTwr8eFwcjQ_kZxgc,2776
|
84
84
|
ai_edge_torch/generative/examples/qwen/qwen.py,sha256=Zi_qiQ1JPokXZ95jgSEnQp3F-LKzFCvWvFLKhJjnASo,4199
|
85
85
|
ai_edge_torch/generative/examples/qwen/verify.py,sha256=9_AyEJTeUfvhhID64Rto2bflFPyXMFokdQLsseLUMiI,2775
|
86
86
|
ai_edge_torch/generative/examples/smollm/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
87
|
-
ai_edge_torch/generative/examples/smollm/convert_to_tflite.py,sha256=
|
87
|
+
ai_edge_torch/generative/examples/smollm/convert_to_tflite.py,sha256=megskv1oiPhwHSnguoG7zV-esXp1Ns_FPeMLAYKhDb0,2522
|
88
88
|
ai_edge_torch/generative/examples/smollm/smollm.py,sha256=kk3cB_qaCzbFOhHtJlLb7qvSEBQTsILnoAcSFE3AkpE,2711
|
89
89
|
ai_edge_torch/generative/examples/smollm/verify.py,sha256=HXYcCjDJMylVL3Pc9HU-UXqtpjtIU25o1YhPiX30aPU,2361
|
90
90
|
ai_edge_torch/generative/examples/stable_diffusion/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
@@ -111,17 +111,18 @@ ai_edge_torch/generative/examples/test_models/convert_toy_model.py,sha256=6-WaNH
|
|
111
111
|
ai_edge_torch/generative/examples/test_models/toy_model.py,sha256=4113jZK-Hu3kYop__WTc8Bq-bG6YzQtADbxHtYPEB4w,5036
|
112
112
|
ai_edge_torch/generative/examples/test_models/toy_model_with_kv_cache.py,sha256=WMl1iuCE8So9FDnxPV0OTMzuPngQUTO61g8rfnBLyB4,4664
|
113
113
|
ai_edge_torch/generative/examples/tiny_llama/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
114
|
-
ai_edge_torch/generative/examples/tiny_llama/convert_to_tflite.py,sha256=
|
114
|
+
ai_edge_torch/generative/examples/tiny_llama/convert_to_tflite.py,sha256=VU0c5pgvrUtaTboT1xuDBGjpKOM85aqtaB_hYfSBuEk,2544
|
115
115
|
ai_edge_torch/generative/examples/tiny_llama/tiny_llama.py,sha256=mhJ18rb9sxrYRzv1YSzhbNs97oUZck99avZDcUO2oV8,2800
|
116
116
|
ai_edge_torch/generative/examples/tiny_llama/verify.py,sha256=7Bk8z033M-BCXJ299fpQNXYAudBbZoDQp9934xcvg50,2426
|
117
117
|
ai_edge_torch/generative/fx_passes/__init__.py,sha256=jrzCB3ZyY_t5jJM1e2Czdt3DjAIL43R0_a-T-I7wOzw,1155
|
118
118
|
ai_edge_torch/generative/fx_passes/remove_sdpa_zero_mask_pass.py,sha256=hhxSQvkDMv0isZJhmuLiod66ZODaJ8uSPSVTJVHBabQ,1931
|
119
119
|
ai_edge_torch/generative/layers/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
120
|
-
ai_edge_torch/generative/layers/attention.py,sha256=
|
120
|
+
ai_edge_torch/generative/layers/attention.py,sha256=03YlYLYCD8kxkxlGwRcmw4rFEA2bI8BP6_o5gflnaXQ,14522
|
121
121
|
ai_edge_torch/generative/layers/attention_utils.py,sha256=zBVwlBUTs-nStIKCZG0ks5ra7tsqc9ShfakFJKH5rds,7344
|
122
122
|
ai_edge_torch/generative/layers/builder.py,sha256=LXGuSHIx6QZAzLFm7aJvlzoMPgQwbXLFchGEKYwOOUA,5090
|
123
123
|
ai_edge_torch/generative/layers/feed_forward.py,sha256=hdICat-8gW7-vxDAevJQ8NQ-mynllPiqLdXQMF6JMnc,4189
|
124
124
|
ai_edge_torch/generative/layers/kv_cache.py,sha256=DhHIggaOQ2IAY4aRuMAuCLWZv1dBz5PYtmOEjkx9EQY,6291
|
125
|
+
ai_edge_torch/generative/layers/lora.py,sha256=hsvWLLOnW7HQ0AysOZu30x_cetMquDd1tjfyLz8HCSU,17892
|
125
126
|
ai_edge_torch/generative/layers/model_config.py,sha256=viX51T_naJ9sPpPxPoMnSueBPYE2zxWNOD0xn0f-_bM,7510
|
126
127
|
ai_edge_torch/generative/layers/normalization.py,sha256=MbwH-n80Fob5YvjBzdqDjBizMHLzSJGYRDdbD-rL5C0,6174
|
127
128
|
ai_edge_torch/generative/layers/rotary_position_embedding.py,sha256=xxWtlVsGGJkEyXC6PwznubyhJnLPEfSpHOORE_hgxss,2670
|
@@ -141,15 +142,16 @@ ai_edge_torch/generative/test/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudj
|
|
141
142
|
ai_edge_torch/generative/test/test_custom_dus.py,sha256=gxG78CcTpXF3iLzDR15Rlz1ey1tNTlSdkp6TeYEijp0,3301
|
142
143
|
ai_edge_torch/generative/test/test_kv_cache.py,sha256=2AulHBS3hC4b_68PNNBkRVOrypy4IM5YjC4p-6dgCMM,3793
|
143
144
|
ai_edge_torch/generative/test/test_loader.py,sha256=9mQUeeZKOVApOWSWl2cN9c10axZjMKM1-0Zd823CCS4,3449
|
145
|
+
ai_edge_torch/generative/test/test_lora.py,sha256=6QIM6RLTc2HrodGpp_aS3OxM9Rco2KAzEnYgotkg41M,5310
|
144
146
|
ai_edge_torch/generative/test/test_model_conversion.py,sha256=jfqkECCX7XKHeBAuDXrkwQJf0vM72eG3LMc5rluha84,6191
|
145
147
|
ai_edge_torch/generative/test/test_model_conversion_large.py,sha256=NctnggTSFh0XEQbTu55diZ35rFD2QIARO-8PzLktRWg,12165
|
146
148
|
ai_edge_torch/generative/test/test_quantize.py,sha256=bEJMhpQ9bIDUZVBXTW888728FcH-i3SyE4JSZZUgU0A,6071
|
147
149
|
ai_edge_torch/generative/test/utils.py,sha256=tF6aCfAGJnc9dmzCnZCEOuKNVimfWOqscv9og0DDLHU,2656
|
148
150
|
ai_edge_torch/generative/utilities/__init__.py,sha256=-_jxnnFnCgnTU4oTm4MnRsvL5lqhomBNdFBbqfmfHPo,720
|
149
|
-
ai_edge_torch/generative/utilities/converter.py,sha256=
|
151
|
+
ai_edge_torch/generative/utilities/converter.py,sha256=MY8BK29yD-W4v45Xdl_ErbNilipsTlD-4-y9MyBxR5g,7620
|
150
152
|
ai_edge_torch/generative/utilities/dynamic_update_slice.py,sha256=e2mhx-Vp8sUK4EXoPtpZLSx3TViqLAKs67EhKcXBjAQ,2121
|
151
153
|
ai_edge_torch/generative/utilities/loader.py,sha256=A3SOjPXp--AsvoP1hqj5QKWE4sgxoFc3H5EBUz_Eogc,13531
|
152
|
-
ai_edge_torch/generative/utilities/model_builder.py,sha256=
|
154
|
+
ai_edge_torch/generative/utilities/model_builder.py,sha256=3XhB3fJXXIJEiqw9eqtIRY86lbED1BpjVGOdt7z5kpE,6611
|
153
155
|
ai_edge_torch/generative/utilities/moonshine_loader.py,sha256=_RpFabSqtGH5PHiP3_1f6QfO14qMADUxr_HGRlVDFB0,4891
|
154
156
|
ai_edge_torch/generative/utilities/stable_diffusion_loader.py,sha256=dqPD9qRXEWtU3ombslOC-BE2l_dMwHoCNu7NsIJhsso,36158
|
155
157
|
ai_edge_torch/generative/utilities/t5_loader.py,sha256=tEsfy8-ymzbbjOIc-oesXF3yGyyWtJgFXn2s7VOavt8,16961
|
@@ -169,9 +171,9 @@ ai_edge_torch/lowertools/test_utils.py,sha256=mdxTlhqHABZEQ_GEmPFCL8LIAWtqRtYZUG
|
|
169
171
|
ai_edge_torch/lowertools/torch_xla_utils.py,sha256=1EytIw2R6dthhLhf69wN1L9BaQTeybCD0wga-PhHcMI,9518
|
170
172
|
ai_edge_torch/lowertools/translate_recipe.py,sha256=ymkBpFqAUiupRWqrPOWiVphKcXR1K5vHK0RjgBFtxlE,5652
|
171
173
|
ai_edge_torch/odml_torch/__init__.py,sha256=S8jOzE9nLof-6es3XDiGJRN-9H_XTxsVm9dE7lD3RWo,812
|
172
|
-
ai_edge_torch/odml_torch/_torch_future.py,sha256=
|
174
|
+
ai_edge_torch/odml_torch/_torch_future.py,sha256=6fMr6C6rP3roVRFQxBH9Yr7656WtodZuNvhxLzKad_g,3320
|
173
175
|
ai_edge_torch/odml_torch/_torch_library.py,sha256=Lw1gqL2HWNRspdTwNhIkYAHDyafHedHtkXyKKxn-Wss,805
|
174
|
-
ai_edge_torch/odml_torch/export.py,sha256=
|
176
|
+
ai_edge_torch/odml_torch/export.py,sha256=xaJP_dca7P1sC0KvAI5ExxklIoW9nCrRM3vsdvhVfm8,13451
|
175
177
|
ai_edge_torch/odml_torch/export_utils.py,sha256=QeA37Irlty6AiIBuqmHmJgn3lqahBQ5xsh6IKRoKm1g,4774
|
176
178
|
ai_edge_torch/odml_torch/tf_integration.py,sha256=NN29WeXmHZ0S1RPDFHUnBi2DEjMvAtwczStPYIsQ1w8,4849
|
177
179
|
ai_edge_torch/odml_torch/composite/__init__.py,sha256=71GM_gDZxJyo38ZSoYSwhZX3xKA9rknO93JS9kw9w_c,778
|
@@ -192,7 +194,7 @@ ai_edge_torch/odml_torch/lowerings/_layer_norm.py,sha256=khJIvDVk2s332Nd2Be-5dM6
|
|
192
194
|
ai_edge_torch/odml_torch/lowerings/_quantized_decomposed.py,sha256=XDZ0zLej_XaQDJnaAAxhNFAd7NfQm5SOVEp_nno_krA,6178
|
193
195
|
ai_edge_torch/odml_torch/lowerings/_rand.py,sha256=g6SuqDkuC6hD35lyP1-5H7ASDIzPSmKukeNT5naZSv8,4133
|
194
196
|
ai_edge_torch/odml_torch/lowerings/context.py,sha256=jslcCv7r_HtImSRTxJwHAUV_QCu9Jub51lovmoBkmFA,1295
|
195
|
-
ai_edge_torch/odml_torch/lowerings/decomp.py,sha256=
|
197
|
+
ai_edge_torch/odml_torch/lowerings/decomp.py,sha256=0dIkVNN9ubgfwSxeaBFfTmWarWWG8Q1M0HX_1FShHik,2610
|
196
198
|
ai_edge_torch/odml_torch/lowerings/registry.py,sha256=Tp2h11l5uTifO0aIkuUOWAF_ibEjmd65Xx99w3EXuGE,1924
|
197
199
|
ai_edge_torch/odml_torch/lowerings/utils.py,sha256=pqM6mumpviFDHRaabp93CUAngzEZmWcAHl0nTDgyI2g,6167
|
198
200
|
ai_edge_torch/odml_torch/passes/__init__.py,sha256=AVwIwUTMx7rXacKjGy4kwrtMd3XB2v_ncdc40KOjUqQ,1245
|
@@ -203,8 +205,8 @@ ai_edge_torch/quantize/quant_config.py,sha256=U0KisSW-uZkoMJcy-ZP9W57p3tsa594fr9
|
|
203
205
|
ai_edge_torch/testing/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
204
206
|
ai_edge_torch/testing/model_coverage/__init__.py,sha256=5P8J6Zk5YYtDvTBucFvB9NGSRI7Gw_24WnrbhXgycEE,765
|
205
207
|
ai_edge_torch/testing/model_coverage/model_coverage.py,sha256=UPB448aMDUyC0HNYVqio2rcJPnDN0tBQMP08J6vPYew,4718
|
206
|
-
ai_edge_torch_nightly-0.3.0.
|
207
|
-
ai_edge_torch_nightly-0.3.0.
|
208
|
-
ai_edge_torch_nightly-0.3.0.
|
209
|
-
ai_edge_torch_nightly-0.3.0.
|
210
|
-
ai_edge_torch_nightly-0.3.0.
|
208
|
+
ai_edge_torch_nightly-0.3.0.dev20250108.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
209
|
+
ai_edge_torch_nightly-0.3.0.dev20250108.dist-info/METADATA,sha256=npbaQVRzcYi1A0B6ylSeKLzLGHmmcr6ELSuOU2vXo_0,1966
|
210
|
+
ai_edge_torch_nightly-0.3.0.dev20250108.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
211
|
+
ai_edge_torch_nightly-0.3.0.dev20250108.dist-info/top_level.txt,sha256=5KXRaF2hwkApYxf7Y8y_tVb9aulGTlbOoNdbx1aKRkE,14
|
212
|
+
ai_edge_torch_nightly-0.3.0.dev20250108.dist-info/RECORD,,
|
File without changes
|
File without changes
|