ai-edge-torch-nightly 0.2.0.dev20240606__py3-none-any.whl → 0.2.0.dev20240608__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ai-edge-torch-nightly might be problematic. Click here for more details.
- ai_edge_torch/convert/conversion.py +2 -2
- ai_edge_torch/convert/fx_passes/__init__.py +1 -1
- ai_edge_torch/convert/fx_passes/{build_upsample_bilinear2d_composite_pass.py → build_interpolate_composite_pass.py} +22 -1
- ai_edge_torch/generative/examples/stable_diffusion/convert_to_tflite.py +8 -4
- ai_edge_torch/generative/examples/stable_diffusion/decoder.py +275 -82
- ai_edge_torch/generative/examples/stable_diffusion/encoder.py +54 -3
- ai_edge_torch/generative/layers/attention.py +25 -0
- ai_edge_torch/generative/layers/builder.py +4 -2
- ai_edge_torch/generative/layers/model_config.py +3 -0
- ai_edge_torch/generative/layers/unet/__init__.py +14 -0
- ai_edge_torch/generative/layers/unet/blocks_2d.py +287 -0
- ai_edge_torch/generative/layers/unet/builder.py +29 -0
- ai_edge_torch/generative/layers/unet/model_config.py +117 -0
- ai_edge_torch/generative/utilities/autoencoder_loader.py +298 -0
- ai_edge_torch/generative/utilities/loader.py +7 -5
- {ai_edge_torch_nightly-0.2.0.dev20240606.dist-info → ai_edge_torch_nightly-0.2.0.dev20240608.dist-info}/METADATA +1 -1
- {ai_edge_torch_nightly-0.2.0.dev20240606.dist-info → ai_edge_torch_nightly-0.2.0.dev20240608.dist-info}/RECORD +20 -15
- {ai_edge_torch_nightly-0.2.0.dev20240606.dist-info → ai_edge_torch_nightly-0.2.0.dev20240608.dist-info}/LICENSE +0 -0
- {ai_edge_torch_nightly-0.2.0.dev20240606.dist-info → ai_edge_torch_nightly-0.2.0.dev20240608.dist-info}/WHEEL +0 -0
- {ai_edge_torch_nightly-0.2.0.dev20240606.dist-info → ai_edge_torch_nightly-0.2.0.dev20240608.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# Copyright 2024 The AI Edge Torch Authors.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ==============================================================================
|
|
15
|
+
# Common utility functions for data loading etc.
|
|
16
|
+
from dataclasses import dataclass
|
|
17
|
+
from typing import Dict, List, Tuple
|
|
18
|
+
|
|
19
|
+
import torch
|
|
20
|
+
|
|
21
|
+
import ai_edge_torch.generative.layers.model_config as layers_config
|
|
22
|
+
import ai_edge_torch.generative.layers.unet.model_config as unet_config
|
|
23
|
+
import ai_edge_torch.generative.utilities.loader as loader
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass
|
|
27
|
+
class ResidualBlockTensorNames:
|
|
28
|
+
norm_1: str = None
|
|
29
|
+
conv_1: str = None
|
|
30
|
+
norm_2: str = None
|
|
31
|
+
conv_2: str = None
|
|
32
|
+
residual_layer: str = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@dataclass
|
|
36
|
+
class AttnetionBlockTensorNames:
|
|
37
|
+
norm: str = None
|
|
38
|
+
fused_qkv_proj: str = None
|
|
39
|
+
output_proj: str = None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@dataclass
|
|
43
|
+
class MidBlockTensorNames:
|
|
44
|
+
residual_block_tensor_names: List[ResidualBlockTensorNames]
|
|
45
|
+
attention_block_tensor_names: List[AttnetionBlockTensorNames]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@dataclass
|
|
49
|
+
class UpDecoderBlockTensorNames:
|
|
50
|
+
residual_block_tensor_names: List[ResidualBlockTensorNames]
|
|
51
|
+
upsample_conv: str = None
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _map_to_converted_state(
|
|
55
|
+
state: Dict[str, torch.Tensor],
|
|
56
|
+
state_param: str,
|
|
57
|
+
converted_state: Dict[str, torch.Tensor],
|
|
58
|
+
converted_state_param: str,
|
|
59
|
+
):
|
|
60
|
+
converted_state[f"{converted_state_param}.weight"] = state.pop(
|
|
61
|
+
f"{state_param}.weight"
|
|
62
|
+
)
|
|
63
|
+
if f"{state_param}.bias" in state:
|
|
64
|
+
converted_state[f"{converted_state_param}.bias"] = state.pop(f"{state_param}.bias")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class AutoEncoderModelLoader(loader.ModelLoader):
|
|
68
|
+
|
|
69
|
+
@dataclass
|
|
70
|
+
class TensorNames:
|
|
71
|
+
quant_conv: str = None
|
|
72
|
+
post_quant_conv: str = None
|
|
73
|
+
conv_in: str = None
|
|
74
|
+
conv_out: str = None
|
|
75
|
+
final_norm: str = None
|
|
76
|
+
mid_block_tensor_names: MidBlockTensorNames = None
|
|
77
|
+
up_decoder_blocks_tensor_names: List[UpDecoderBlockTensorNames] = None
|
|
78
|
+
|
|
79
|
+
def __init__(self, file_name: str, names: TensorNames):
|
|
80
|
+
"""AutoEncoderModelLoader constructor. Can be used to load encoder and decoder models.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
file_name (str): Path to the checkpoint. Can be a directory or an
|
|
84
|
+
exact file.
|
|
85
|
+
names (TensorNames): An instance of `TensorNames` to determine mappings.
|
|
86
|
+
"""
|
|
87
|
+
self._file_name = file_name
|
|
88
|
+
self._names = names
|
|
89
|
+
self._loader = self._get_loader()
|
|
90
|
+
|
|
91
|
+
def load(
|
|
92
|
+
self, model: torch.nn.Module, strict: bool = True
|
|
93
|
+
) -> Tuple[List[str], List[str]]:
|
|
94
|
+
"""Load the model from the checkpoint.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
model (torch.nn.Module): The pytorch model that needs to be loaded.
|
|
98
|
+
strict (bool, optional): Whether the converted keys are strictly
|
|
99
|
+
matched. Defaults to True.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
missing_keys (List[str]): a list of str containing the missing keys.
|
|
103
|
+
unexpected_keys (List[str]): a list of str containing the unexpected keys.
|
|
104
|
+
|
|
105
|
+
Raises:
|
|
106
|
+
ValueError: If conversion results in unmapped tensors and strict mode is
|
|
107
|
+
enabled.
|
|
108
|
+
"""
|
|
109
|
+
state = self._loader(self._file_name)
|
|
110
|
+
converted_state = dict()
|
|
111
|
+
if self._names.quant_conv is not None:
|
|
112
|
+
_map_to_converted_state(
|
|
113
|
+
state, self._names.quant_conv, converted_state, "quant_conv"
|
|
114
|
+
)
|
|
115
|
+
if self._names.post_quant_conv is not None:
|
|
116
|
+
_map_to_converted_state(
|
|
117
|
+
state, self._names.post_quant_conv, converted_state, "post_quant_conv"
|
|
118
|
+
)
|
|
119
|
+
if self._names.conv_in is not None:
|
|
120
|
+
_map_to_converted_state(state, self._names.conv_in, converted_state, "conv_in")
|
|
121
|
+
if self._names.conv_out is not None:
|
|
122
|
+
_map_to_converted_state(state, self._names.conv_out, converted_state, "conv_out")
|
|
123
|
+
if self._names.final_norm is not None:
|
|
124
|
+
_map_to_converted_state(
|
|
125
|
+
state, self._names.final_norm, converted_state, "final_norm"
|
|
126
|
+
)
|
|
127
|
+
self._map_mid_block(
|
|
128
|
+
state,
|
|
129
|
+
converted_state,
|
|
130
|
+
model.config.mid_block_config,
|
|
131
|
+
self._names.mid_block_tensor_names,
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
reversed_block_out_channels = list(reversed(model.config.block_out_channels))
|
|
135
|
+
block_out_channels = reversed_block_out_channels[0]
|
|
136
|
+
for i, out_channels in enumerate(reversed_block_out_channels):
|
|
137
|
+
prev_output_channel = block_out_channels
|
|
138
|
+
block_out_channels = out_channels
|
|
139
|
+
not_final_block = i < len(reversed_block_out_channels) - 1
|
|
140
|
+
self._map_up_decoder_block(
|
|
141
|
+
state,
|
|
142
|
+
converted_state,
|
|
143
|
+
f"up_decoder_blocks.{i}",
|
|
144
|
+
unet_config.UpDecoderBlock2DConfig(
|
|
145
|
+
in_channels=prev_output_channel,
|
|
146
|
+
out_channels=block_out_channels,
|
|
147
|
+
normalization_config=model.config.normalization_config,
|
|
148
|
+
activation_type=model.config.activation_type,
|
|
149
|
+
num_layers=model.config.layers_per_block,
|
|
150
|
+
add_upsample=not_final_block,
|
|
151
|
+
upsample_conv=True,
|
|
152
|
+
),
|
|
153
|
+
self._names.up_decoder_blocks_tensor_names[i],
|
|
154
|
+
)
|
|
155
|
+
if strict and state:
|
|
156
|
+
raise ValueError(
|
|
157
|
+
f"Failed to map all tensor. Remaing tensor are: {list(state.keys())}"
|
|
158
|
+
)
|
|
159
|
+
return model.load_state_dict(converted_state, strict=strict)
|
|
160
|
+
|
|
161
|
+
def _map_residual_block(
|
|
162
|
+
self,
|
|
163
|
+
state: Dict[str, torch.Tensor],
|
|
164
|
+
converted_state: Dict[str, torch.Tensor],
|
|
165
|
+
tensor_names: ResidualBlockTensorNames,
|
|
166
|
+
converted_state_param_prefix: str,
|
|
167
|
+
config: unet_config.ResidualBlock2DConfig,
|
|
168
|
+
):
|
|
169
|
+
_map_to_converted_state(
|
|
170
|
+
state,
|
|
171
|
+
tensor_names.norm_1,
|
|
172
|
+
converted_state,
|
|
173
|
+
f"{converted_state_param_prefix}.norm_1",
|
|
174
|
+
)
|
|
175
|
+
_map_to_converted_state(
|
|
176
|
+
state,
|
|
177
|
+
tensor_names.conv_1,
|
|
178
|
+
converted_state,
|
|
179
|
+
f"{converted_state_param_prefix}.conv_1",
|
|
180
|
+
)
|
|
181
|
+
_map_to_converted_state(
|
|
182
|
+
state,
|
|
183
|
+
tensor_names.norm_2,
|
|
184
|
+
converted_state,
|
|
185
|
+
f"{converted_state_param_prefix}.norm_2",
|
|
186
|
+
)
|
|
187
|
+
_map_to_converted_state(
|
|
188
|
+
state,
|
|
189
|
+
tensor_names.conv_2,
|
|
190
|
+
converted_state,
|
|
191
|
+
f"{converted_state_param_prefix}.conv_2",
|
|
192
|
+
)
|
|
193
|
+
if config.in_channels != config.out_channels:
|
|
194
|
+
_map_to_converted_state(
|
|
195
|
+
state,
|
|
196
|
+
tensor_names.residual_layer,
|
|
197
|
+
converted_state,
|
|
198
|
+
f"{converted_state_param_prefix}.residual_layer",
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
def _map_attention_block(
|
|
202
|
+
self,
|
|
203
|
+
state: Dict[str, torch.Tensor],
|
|
204
|
+
converted_state: Dict[str, torch.Tensor],
|
|
205
|
+
tensor_names: AttnetionBlockTensorNames,
|
|
206
|
+
converted_state_param_prefix: str,
|
|
207
|
+
config: unet_config.AttentionBlock2DConfig,
|
|
208
|
+
):
|
|
209
|
+
if config.normalization_config.type != layers_config.NormalizationType.NONE:
|
|
210
|
+
_map_to_converted_state(
|
|
211
|
+
state,
|
|
212
|
+
tensor_names.norm,
|
|
213
|
+
converted_state,
|
|
214
|
+
f"{converted_state_param_prefix}.norm",
|
|
215
|
+
)
|
|
216
|
+
attention_layer_prefix = f"{converted_state_param_prefix}.attention"
|
|
217
|
+
_map_to_converted_state(
|
|
218
|
+
state,
|
|
219
|
+
tensor_names.fused_qkv_proj,
|
|
220
|
+
converted_state,
|
|
221
|
+
f"{attention_layer_prefix}.qkv_projection",
|
|
222
|
+
)
|
|
223
|
+
_map_to_converted_state(
|
|
224
|
+
state,
|
|
225
|
+
tensor_names.output_proj,
|
|
226
|
+
converted_state,
|
|
227
|
+
f"{attention_layer_prefix}.output_projection",
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
def _map_mid_block(
|
|
231
|
+
self,
|
|
232
|
+
state: Dict[str, torch.Tensor],
|
|
233
|
+
converted_state: Dict[str, torch.Tensor],
|
|
234
|
+
config: unet_config.MidBlock2DConfig,
|
|
235
|
+
tensor_names: MidBlockTensorNames,
|
|
236
|
+
):
|
|
237
|
+
converted_state_param_prefix = "mid_block"
|
|
238
|
+
residual_block_config = unet_config.ResidualBlock2DConfig(
|
|
239
|
+
in_channels=config.in_channels,
|
|
240
|
+
out_channels=config.in_channels,
|
|
241
|
+
time_embedding_channels=config.time_embedding_channels,
|
|
242
|
+
normalization_config=config.normalization_config,
|
|
243
|
+
activation_type=config.activation_type,
|
|
244
|
+
)
|
|
245
|
+
self._map_residual_block(
|
|
246
|
+
state,
|
|
247
|
+
converted_state,
|
|
248
|
+
tensor_names.residual_block_tensor_names[0],
|
|
249
|
+
f"{converted_state_param_prefix}.resnets.0",
|
|
250
|
+
residual_block_config,
|
|
251
|
+
)
|
|
252
|
+
for i in range(config.num_layers):
|
|
253
|
+
if config.attention_block_config:
|
|
254
|
+
self._map_attention_block(
|
|
255
|
+
state,
|
|
256
|
+
converted_state,
|
|
257
|
+
tensor_names.attention_block_tensor_names[i],
|
|
258
|
+
f"{converted_state_param_prefix}.attentions.{i}",
|
|
259
|
+
config.attention_block_config,
|
|
260
|
+
)
|
|
261
|
+
self._map_residual_block(
|
|
262
|
+
state,
|
|
263
|
+
converted_state,
|
|
264
|
+
tensor_names.residual_block_tensor_names[i + 1],
|
|
265
|
+
f"{converted_state_param_prefix}.resnets.{i+1}",
|
|
266
|
+
residual_block_config,
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
def _map_up_decoder_block(
|
|
270
|
+
self,
|
|
271
|
+
state: Dict[str, torch.Tensor],
|
|
272
|
+
converted_state: Dict[str, torch.Tensor],
|
|
273
|
+
converted_state_param_prefix: str,
|
|
274
|
+
config: unet_config.UpDecoderBlock2DConfig,
|
|
275
|
+
tensor_names: UpDecoderBlockTensorNames,
|
|
276
|
+
):
|
|
277
|
+
for i in range(config.num_layers):
|
|
278
|
+
input_channels = config.in_channels if i == 0 else config.out_channels
|
|
279
|
+
self._map_residual_block(
|
|
280
|
+
state,
|
|
281
|
+
converted_state,
|
|
282
|
+
tensor_names.residual_block_tensor_names[i],
|
|
283
|
+
f"{converted_state_param_prefix}.resnets.{i}",
|
|
284
|
+
unet_config.ResidualBlock2DConfig(
|
|
285
|
+
in_channels=input_channels,
|
|
286
|
+
out_channels=config.out_channels,
|
|
287
|
+
time_embedding_channels=config.time_embedding_channels,
|
|
288
|
+
normalization_config=config.normalization_config,
|
|
289
|
+
activation_type=config.activation_type,
|
|
290
|
+
),
|
|
291
|
+
)
|
|
292
|
+
if config.add_upsample and config.upsample_conv:
|
|
293
|
+
_map_to_converted_state(
|
|
294
|
+
state,
|
|
295
|
+
tensor_names.upsample_conv,
|
|
296
|
+
converted_state,
|
|
297
|
+
f"{converted_state_param_prefix}.upsample_conv",
|
|
298
|
+
)
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
from dataclasses import dataclass
|
|
17
17
|
import glob
|
|
18
18
|
import os
|
|
19
|
-
from typing import Callable, Dict
|
|
19
|
+
from typing import Callable, Dict, List, Tuple
|
|
20
20
|
|
|
21
21
|
from safetensors import safe_open
|
|
22
22
|
import torch
|
|
@@ -129,8 +129,10 @@ class ModelLoader:
|
|
|
129
129
|
self._names = names
|
|
130
130
|
self._loader = self._get_loader()
|
|
131
131
|
|
|
132
|
-
def load(
|
|
133
|
-
|
|
132
|
+
def load(
|
|
133
|
+
self, model: torch.nn.Module, strict: bool = True
|
|
134
|
+
) -> Tuple[List[str], List[str]]:
|
|
135
|
+
"""Load the model from the checkpoint.
|
|
134
136
|
|
|
135
137
|
Args:
|
|
136
138
|
model (torch.nn.Module): The pytorch model that needs to be loaded.
|
|
@@ -138,8 +140,8 @@ class ModelLoader:
|
|
|
138
140
|
matched. Defaults to True.
|
|
139
141
|
|
|
140
142
|
Returns:
|
|
141
|
-
missing_keys (List[str]): a list of str containing the missing keys
|
|
142
|
-
unexpected_keys (List[str]): a list of str containing the unexpected keys
|
|
143
|
+
missing_keys (List[str]): a list of str containing the missing keys.
|
|
144
|
+
unexpected_keys (List[str]): a list of str containing the unexpected keys.
|
|
143
145
|
|
|
144
146
|
Raises:
|
|
145
147
|
ValueError: If conversion results in unmapped tensors and strict mode is
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ai-edge-torch-nightly
|
|
3
|
-
Version: 0.2.0.
|
|
3
|
+
Version: 0.2.0.dev20240608
|
|
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
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
ai_edge_torch/__init__.py,sha256=FPMmuFU3pyMREtjB_san1fy_0PFtAsgA0VZfOYvDrb4,1008
|
|
2
2
|
ai_edge_torch/model.py,sha256=kmcgELjsYl8YzF8nUF6P7q4i8MWS-pLGpfsy-yTUXmE,4243
|
|
3
3
|
ai_edge_torch/convert/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
|
4
|
-
ai_edge_torch/convert/conversion.py,sha256=
|
|
4
|
+
ai_edge_torch/convert/conversion.py,sha256=GN2Js232u_5Y118wg3qIfEoYewxbxLl3TpSnO6osi8c,4029
|
|
5
5
|
ai_edge_torch/convert/conversion_utils.py,sha256=NpVm3Ms81_cIW5IYgGsr0BVganJJgBKWVBDe5h_ZaGE,11021
|
|
6
6
|
ai_edge_torch/convert/converter.py,sha256=bjj5TV5_g4sGyuSh8ThEDydlNMqhkGSY4SzXK6vwhqI,6927
|
|
7
|
-
ai_edge_torch/convert/fx_passes/__init__.py,sha256=
|
|
7
|
+
ai_edge_torch/convert/fx_passes/__init__.py,sha256=EPs4PSIDLuRH5EBETi6deaOvaaf_Q4xD3_9NVcR7x8o,2810
|
|
8
8
|
ai_edge_torch/convert/fx_passes/_pass_base.py,sha256=ijVyDclPnd6a0DWWUJkwR4igj6f82S-cE1-83QGPvgw,1652
|
|
9
9
|
ai_edge_torch/convert/fx_passes/build_aten_composite_pass.py,sha256=2yqUwJJ2R233_X9FNMOP9oYRTTzH34TR_BIUj-wfnKw,7080
|
|
10
|
-
ai_edge_torch/convert/fx_passes/
|
|
10
|
+
ai_edge_torch/convert/fx_passes/build_interpolate_composite_pass.py,sha256=jB27GlDC8x36nn35aiq97uKERiq4KXSUZ7tv7yc0Gl4,3223
|
|
11
11
|
ai_edge_torch/convert/fx_passes/canonicalize_pass.py,sha256=UX6dJsxCqSkftXXvNBV-i7Bjk6H7qTyqzUnE640Itfg,1673
|
|
12
12
|
ai_edge_torch/convert/fx_passes/inject_mlir_debuginfo_pass.py,sha256=aRT8hTS3n9ie28lgu6mygtFO6Ypwu0qjNb0c81v9HLs,2448
|
|
13
13
|
ai_edge_torch/convert/fx_passes/optimize_layout_transposes_pass/__init__.py,sha256=VA9bekxPVhLk4MYlIRXnOzrSnbCtUmGj7OQ_fJcKQtc,795
|
|
@@ -41,10 +41,10 @@ ai_edge_torch/generative/examples/phi2/phi2.py,sha256=VvigzPQ_LJHeADTsMliwFwPe2B
|
|
|
41
41
|
ai_edge_torch/generative/examples/stable_diffusion/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
|
42
42
|
ai_edge_torch/generative/examples/stable_diffusion/attention.py,sha256=Lo4Dq7a3Kg-lyH56iqGtqCo5UaClQHRCTDdNagXGTo8,3535
|
|
43
43
|
ai_edge_torch/generative/examples/stable_diffusion/clip.py,sha256=yUCJemEh4n8ez-yLgVU0HZAki-PZ9nY04DFjgpx9PUc,3698
|
|
44
|
-
ai_edge_torch/generative/examples/stable_diffusion/convert_to_tflite.py,sha256=
|
|
45
|
-
ai_edge_torch/generative/examples/stable_diffusion/decoder.py,sha256=
|
|
44
|
+
ai_edge_torch/generative/examples/stable_diffusion/convert_to_tflite.py,sha256=NmgDo5uAefrhMUbYku0TKHlqzO0NVWI_M1ue8tddQR4,4024
|
|
45
|
+
ai_edge_torch/generative/examples/stable_diffusion/decoder.py,sha256=Z1bnZvYtPdwNy706kixVDfL32X-R87B_WF3CcHwiz0o,11038
|
|
46
46
|
ai_edge_torch/generative/examples/stable_diffusion/diffusion.py,sha256=TfbfsmuKoGsBENF9fYIAN_SMEQNhj-kjNdqQXFJGxpg,7784
|
|
47
|
-
ai_edge_torch/generative/examples/stable_diffusion/encoder.py,sha256=
|
|
47
|
+
ai_edge_torch/generative/examples/stable_diffusion/encoder.py,sha256=mgbxkeFDMkNIGmnbcFTIFPu8EWKokghiviYIOB2lE3Q,3437
|
|
48
48
|
ai_edge_torch/generative/examples/stable_diffusion/pipeline.py,sha256=FCbnwlkpYYb-tF7KscbSYjNEdg7XnuLju1cDuIRoQv8,8277
|
|
49
49
|
ai_edge_torch/generative/examples/stable_diffusion/tokenizer.py,sha256=r9RqbyNvuvXOGu3ojtl7ZmbC7o4Pt8aUKAhN1yCdtEc,3397
|
|
50
50
|
ai_edge_torch/generative/examples/stable_diffusion/util.py,sha256=NFpOfA4KN0JpShm5QvuYbQYZ844NzexWD8nV3WjMOZM,2397
|
|
@@ -65,15 +65,19 @@ ai_edge_torch/generative/examples/tiny_llama/__init__.py,sha256=47DEQpj8HBSa-_TI
|
|
|
65
65
|
ai_edge_torch/generative/examples/tiny_llama/convert_to_tflite.py,sha256=E4I5OlC4zyl5cxiiu7uTED-zcwYRu210lP1zuT3xLBE,2566
|
|
66
66
|
ai_edge_torch/generative/examples/tiny_llama/tiny_llama.py,sha256=hVGpuI8gpj4Rn9k4otsRE22MSLFHBDlUOgioY6Ru6VI,5629
|
|
67
67
|
ai_edge_torch/generative/layers/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
|
68
|
-
ai_edge_torch/generative/layers/attention.py,sha256=
|
|
68
|
+
ai_edge_torch/generative/layers/attention.py,sha256=Z8gXHYs6h8gaRiYAdvYUbHzg_2EmqfxiChsf_SYraAc,7902
|
|
69
69
|
ai_edge_torch/generative/layers/attention_utils.py,sha256=hXhuyKblPPxKIRzlAf1YNlwHgpbj-6nReRLhRHELx5k,6350
|
|
70
|
-
ai_edge_torch/generative/layers/builder.py,sha256=
|
|
70
|
+
ai_edge_torch/generative/layers/builder.py,sha256=8cPL1NAutjT6Dwtyy2X7NSaTl9WCUJM5SIrBIDcEvVY,3520
|
|
71
71
|
ai_edge_torch/generative/layers/feed_forward.py,sha256=4j2QaSCw59Jkk_ixKDpKEj7FLRauzuExTiSNRzAjAhE,2820
|
|
72
72
|
ai_edge_torch/generative/layers/kv_cache.py,sha256=4uiZLO3om5G3--kT04Jt0esEYznbkJ7QLzSHfb8mjc4,3090
|
|
73
|
-
ai_edge_torch/generative/layers/model_config.py,sha256=
|
|
73
|
+
ai_edge_torch/generative/layers/model_config.py,sha256=72DXOsFC0buvzZp6YyVjuTVrpphAubBJ5NJWfs3kEwk,4362
|
|
74
74
|
ai_edge_torch/generative/layers/normalization.py,sha256=M27eW3TcNK20oaXClXtfnu0lLWrAGrSKSsbegRWnj3c,1867
|
|
75
75
|
ai_edge_torch/generative/layers/rotary_position_embedding.py,sha256=12SsCuoRuLNCwnFGe_pHDOZEBwBcqXs87Aj0PaWWw4E,1383
|
|
76
76
|
ai_edge_torch/generative/layers/scaled_dot_product_attention.py,sha256=dYafGC205QE5CLIbBTCI-7eVvEGZEHzs1toPEhemeDs,3391
|
|
77
|
+
ai_edge_torch/generative/layers/unet/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
|
78
|
+
ai_edge_torch/generative/layers/unet/blocks_2d.py,sha256=KuZd2oZhkCQSknSgXMBla-sfYBPUv5bZNf9RYKXHfGg,10052
|
|
79
|
+
ai_edge_torch/generative/layers/unet/builder.py,sha256=iH0_nuY9TF2ap5h1JbGNCOonPTfrXQHcF8U0slrIREM,1210
|
|
80
|
+
ai_edge_torch/generative/layers/unet/model_config.py,sha256=LeRGB34fQ73UlknlFpjM9U-SZIRcQDnSmDltJivX-UA,4044
|
|
77
81
|
ai_edge_torch/generative/quantize/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
|
78
82
|
ai_edge_torch/generative/quantize/example.py,sha256=t-YwyKSPAG-OZC1DfH-0vfie2RHHpTSQjxUY-tmhu5g,1543
|
|
79
83
|
ai_edge_torch/generative/quantize/quant_attrs.py,sha256=ffBALrrbrfiG_mrOr-f3B1Gc6PlAma9gtvVnfP7SDzI,1862
|
|
@@ -86,7 +90,8 @@ ai_edge_torch/generative/test/loader_test.py,sha256=N88CbrLW7Q2x1EyurwdXQ6YjsA-y
|
|
|
86
90
|
ai_edge_torch/generative/test/test_model_conversion.py,sha256=i_SAW-hD8SaHuopMZI9IuXXDFn5uSTJa1nKZhaC3dAQ,6811
|
|
87
91
|
ai_edge_torch/generative/test/test_quantize.py,sha256=f70sH1ZFzdCwYj0MG-eg54WOC4LasR0D8CTUYpjxZYM,3728
|
|
88
92
|
ai_edge_torch/generative/utilities/__init__.py,sha256=-_jxnnFnCgnTU4oTm4MnRsvL5lqhomBNdFBbqfmfHPo,720
|
|
89
|
-
ai_edge_torch/generative/utilities/
|
|
93
|
+
ai_edge_torch/generative/utilities/autoencoder_loader.py,sha256=G2Nosy33JzkjGALPR4JjvffdFX1JWOj2zjbbuaDJEgg,10065
|
|
94
|
+
ai_edge_torch/generative/utilities/loader.py,sha256=Hs92478j1g4jQGvbdP1aWvOy907HjwqQZE-NFy6HELo,11326
|
|
90
95
|
ai_edge_torch/generative/utilities/t5_loader.py,sha256=guDTv-12UUvJGl4eDvvZX3t4rRKewfXO8SpcYXM6gbc,16156
|
|
91
96
|
ai_edge_torch/hlfb/__init__.py,sha256=rrje8a2iuKboBoV96bVq7nlS9HsnuEMbHE5JiWmCxFA,752
|
|
92
97
|
ai_edge_torch/hlfb/mark_pattern/__init__.py,sha256=2VXnHcGf23VOuP-1GriGIpuL98leBB8twp_qaScMnmc,4799
|
|
@@ -102,8 +107,8 @@ ai_edge_torch/quantize/quant_config.py,sha256=ExThdTXqnWmGC3-F6sdXbXr8nYzkEe_qCz
|
|
|
102
107
|
ai_edge_torch/testing/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
|
|
103
108
|
ai_edge_torch/testing/model_coverage/__init__.py,sha256=5P8J6Zk5YYtDvTBucFvB9NGSRI7Gw_24WnrbhXgycEE,765
|
|
104
109
|
ai_edge_torch/testing/model_coverage/model_coverage.py,sha256=EIyKz-HY70DguWuSrJal8LpYXQ5ZSEUf3ZrVl7jikFM,4286
|
|
105
|
-
ai_edge_torch_nightly-0.2.0.
|
|
106
|
-
ai_edge_torch_nightly-0.2.0.
|
|
107
|
-
ai_edge_torch_nightly-0.2.0.
|
|
108
|
-
ai_edge_torch_nightly-0.2.0.
|
|
109
|
-
ai_edge_torch_nightly-0.2.0.
|
|
110
|
+
ai_edge_torch_nightly-0.2.0.dev20240608.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
111
|
+
ai_edge_torch_nightly-0.2.0.dev20240608.dist-info/METADATA,sha256=eM8KLGmQ4Kc6bVDcSDSJ12O-jFwr0ARV7uGeh-T8nvk,1748
|
|
112
|
+
ai_edge_torch_nightly-0.2.0.dev20240608.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
113
|
+
ai_edge_torch_nightly-0.2.0.dev20240608.dist-info/top_level.txt,sha256=5KXRaF2hwkApYxf7Y8y_tVb9aulGTlbOoNdbx1aKRkE,14
|
|
114
|
+
ai_edge_torch_nightly-0.2.0.dev20240608.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|